# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/crypto.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//tools/grit/grit_rule.gni")

about_credits_file = "$target_gen_dir/about_credits.html"
additional_modules_list_file =
    "$root_gen_dir/chrome/browser/internal/additional_modules_list.txt"

gypi_values = exec_script(
    "//build/gypi_to_gn.py",
    [ rebase_path("../chrome_browser.gypi") ],
    "scope",
    [ "../chrome_browser.gypi" ])

static_library("browser") {
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = []
  sources = []
  libs = []
  ldflags = []

  # iOS/non-iOS shared deps. New dependencies should generally be added in the
  # non-iOS deps below.
  deps = [
    "//base/allocator",
    "//chrome:extra_resources",
    "//chrome:resources",
    "//chrome:strings",
    "//chrome/app:generated_resources_map",
    "//chrome/app/resources:platform_locale_settings",
    "//chrome/app/theme:theme_resources",
    "//chrome/browser/history:in_memory_url_index_cache_proto",
    "//chrome/browser/net:cert_logger_proto",
    "//chrome/browser/net:probe_message_proto",
    "//chrome/browser/search/suggestions/proto",
    "//chrome/browser/ui",
    "//chrome/common",
    "//chrome/common/net",
    "//components/autocomplete",
    "//components/autofill/core/browser",
    "//components/captive_portal",
    "//components/cloud_devices/common",
    "//components/data_reduction_proxy/browser",
    "//components/domain_reliability",
    "//components/favicon_base",
    "//components/favicon/core",
    "//components/feedback",
    "//components/gcm_driver",
    "//components/history/core/browser",
    "//components/history/core/common",
    "//components/metrics:net",
    "//components/navigation_metrics",
    "//components/os_crypt",
    "//components/policy:policy_component",
    "//components/query_parser",
    "//components/rappor",
    "//components/signin/core/browser",
    "//components/startup_metric_utils",
    "//components/strings",
    "//components/translate/core/browser",
    "//components/translate/core/common",
    "//components/url_fixer",
    "//components/user_prefs",
    "//components/webdata/common",
    "//content/public/browser",
    "//content/public/common",
    "//courgette:courgette_lib",
    "//crypto",
    "//google_apis",
    "//skia",
    "//sql",
    "//sync",
    "//third_party/cacheinvalidation",
    "//third_party/icu",
    "//third_party/libxml",
    "//third_party/widevine/cdm:version_h",
    "//third_party/zlib",
    "//third_party/zlib:minizip",
    "//third_party/zlib:zip",
    "//ui/base",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/message_center",
    "//ui/shell_dialogs",
    "//ui/strings",
    "//ui/resources",
    # TODO(GYP)
    #"../components/components.gyp:bookmarks_browser",
    #"../components/components.gyp:google_core_browser",
    #"../components/components.gyp:infobars_core",
    #"../components/components.gyp:invalidation",
    #"../components/components.gyp:network_time",
    #"../components/components.gyp:omaha_query_params",
    #"../components/components.gyp:password_manager_core_browser",
    #"../components/components.gyp:password_manager_core_common",
    #"../components/components.gyp:precache_core",
    #"../components/components.gyp:search_engines",
    #"../components/components.gyp:search_provider_logos",
    #"../components/components.gyp:sync_driver",
    #"../jingle/jingle.gyp:notifier",
    #"../third_party/libjingle/libjingle.gyp:libjingle",
  ]

  forward_dependent_configs_from = [
    "//components/autofill/core/browser",
    "//content/public/browser",
    "//sql",
    "//sync",
  ]

  if (!is_ios) {
    sources += rebase_path(gypi_values.chrome_browser_non_ios_sources,
                           ".", "//chrome")
    #TODO(GYP) Add these sources:
    #        # These files are generated by GRIT.
    #        '<(grit_out_dir)/grit/component_extension_resources_map.cc',
    #        '<(grit_out_dir)/grit/theme_resources_map.cc',
    #        '<(SHARED_INTERMEDIATE_DIR)/ui/resources/grit/ui_resources_map.cc',
    #
    #        # This file is generated by
    #        # chrome/browser/metrics/variations/generate_resources_map.py
    #        '<(SHARED_INTERMEDIATE_DIR)/chrome/browser/metrics/variations/generated_resources_map.cc',

    # TODO(GYP) Also add these nacl_defines to direct dependents.
    #defines = nacl_defines

    # TODO(GYP) remove this when the real webrtc target is used below.
    configs += [ "//content:webrtc_stub_config" ]

    deps += [
      "//cc",
      "//chrome/browser/extensions",
      "//chrome/browser/performance_monitor",
      "//chrome/browser/sync_file_system:sync_file_system_proto",
      "//chrome/browser/sync_file_system/drive_backend:sync_file_system_drive_proto",
      "//chrome/common/extensions/api:api",
      "//components/autofill/content/browser",
      "//components/dom_distiller/content",
      "//components/keyed_service/content",
      "//components/storage_monitor",
      "//components/translate/content/browser",
      "//components/url_matcher",
      "//components/usb_service",
      "//components/visitedlink/browser",
      "//components/visitedlink/common",
      "//components/web_modal",
      "//mojo/environment:chromium",
      "//mojo/public/cpp/bindings",
      "//mojo/public/js/bindings",
      "//mojo/system",
      "//net:net_with_v8",
      "//third_party/adobe/flash:flapper_version_h",
      "//third_party/expat",
      "//third_party/leveldatabase",
      "//third_party/libaddressinput",
      "//third_party/libyuv",
      "//third_party/npapi",
      "//third_party/re2",
      "//third_party/smhasher:cityhash",
      "//ui/gl",
      "//ui/surface",
      "//ui/web_dialogs",
      "//v8",
      "//webkit:resources",
      "//webkit/browser:storage",
      "//webkit/common",
      "//webkit/common:storage",
      # TODO(GYP)
      #"apps",
      #"debugger",
      #"installer_util",
      #"../components/components.gyp:navigation_interception",
      #"../components/components.gyp:password_manager_content_browser",
      #"../components/components.gyp:precache_content",
      #"../components/components.gyp:sessions",
      #"../media/cast/cast.gyp:cast_transport",
      #"../media/media.gyp:media",
      ## TODO(tonyg): Remove this dependency (crbug.com/280157).
      #"../testing/perf/perf_test.gyp:*",
      # Note: for this one also remove the webrtc_stub_config
      #"../third_party/webrtc/modules/modules.gyp:desktop_capture",
    ]
  } else {  # iOS
    sources += rebase_path(gypi_values.chrome_browser_ios_sources,
                          ".", "//chrome")
    deps += [
      "//net",
    ]
    libs += [
      "CoreTelephony.framework",
      "CoreText.framework",
      "MobileCoreServices.framework",
      "QuartzCore.framework",
    ]
    ldflags += [ "-weak_framework", "CoreImage" ]
  }

  if (is_win || is_mac) {
    sources += rebase_path(gypi_values.chrome_browser_win_mac_sources,
                           ".", "//chrome")
  }
  if (!is_android && !is_ios && !is_chromeos && enable_configuration_policy) {
    sources += [
      "net/disk_cache_dir_policy_handler.cc",
      "net/disk_cache_dir_policy_handler.h",
    ]
  }
  if (!is_android && !is_ios && enable_configuration_policy) {
    sources += [
      "download/download_dir_policy_handler.cc",
      "download/download_dir_policy_handler.h",
    ]
  }
  if (is_mac) {
    sources += rebase_path(gypi_values.chrome_browser_mac_sources,
                           ".", "//chrome")
    deps += [
      #"app_shim"  TODO(GYP)
    ]
  }
  if (cld2_data_source == "component") {
    sources += [
      "component_updater/cld_component_installer.cc",
      "component_updater/cld_component_installer.h",
    ]
  }
  if (enable_extensions) {
    sources += rebase_path(gypi_values.chrome_browser_extensions_sources,
                           ".", "//chrome")
  }
  if (enable_background) {
    sources += rebase_path(gypi_values.chrome_browser_background_sources,
                           ".", "//chrome")
    if (!use_aura || is_win) {
      sources -= [ "background/background_mode_manager_aura.cc" ]
    }
  }
  if (enable_task_manager) {
    sources += rebase_path(gypi_values.chrome_browser_task_manager_sources,
                           ".", "//chrome")
  }
  if (enable_spellcheck) {
    sources += rebase_path(gypi_values.chrome_browser_spellchecker_sources,
                           ".", "//chrome")
    deps += [ "//third_party/hunspell" ]
  }
  if (enable_nacl) {
    sources += rebase_path(gypi_values.chrome_browser_nacl_sources,
                           ".", "//chrome")
    #deps += [ "//components/nacl:nacl_browser" ]  TODO(GYP)
  }
  # ["debug_devtools==1", {  TODO(GYP)
  #   "defines": [
  #     "DEBUG_DEVTOOLS=1",
  # ],
  if (enable_configuration_policy) {
    sources += rebase_path(
        gypi_values.chrome_browser_policy_shared_with_ios_sources,
        ".", "//chrome")
    deps += [
      "//components/policy",
      "//components/policy/proto",
    ]
    if (!is_ios) {
      sources += rebase_path(
          gypi_values.chrome_browser_policy_non_ios_sources,
          ".", "//chrome")
    }
    if (!is_chromeos) {
      sources += rebase_path(
          gypi_values.chrome_browser_policy_shared_with_ios_not_chromeos_sources,
          ".", "//chrome")
    }
    if (is_win || is_mac || is_desktop_linux) {
      sources += rebase_path(gypi_values.chrome_browser_policy_desktop_sources,
                             ".", "//chrome")
    }
    if (is_android || is_ios) {
      sources += rebase_path(gypi_values.chrome_browser_mobile_sources,
                             ".", "//chrome")
    } else {  # Non-mobile
      deps += [
        #"policy_path_parser",  TODO(GYP)
      ]
    }
  } else {
    # Configuration policy disabled.
    sources += rebase_path(gypi_values.chrome_browser_policy_disabled_sources,
                           ".", "//chrome")
  }

  if (enable_plugins) {
    sources += rebase_path(gypi_values.chrome_browser_plugins_sources,
                           ".", "//chrome")
    deps += [
      "//ppapi:ppapi_ipc",
    ]
  }
  if (safe_browsing_mode != 0) {
    sources += rebase_path(
        gypi_values.chrome_browser_basic_safe_browsing_sources,
        ".", "//chrome")
    deps += [
      "//chrome/browser/safe_browsing:chunk_proto",
      "//chrome/browser/safe_browsing:report_proto",
    ]
    if (safe_browsing_mode == 1) {
      sources += rebase_path(
          gypi_values.chrome_browser_full_safe_browsing_sources,
          ".", "//chrome")
      defines += [ "FULL_SAFE_BROWSING" ]
      deps += [
        "//chrome/common/safe_browsing:proto",
      ]
    } else if (safe_browsing_mode == 2) {
      defines += [ "MOBILE_SAFE_BROWSING" ]
    }
  }

  if (is_linux) {
    configs += [ "//build/config/linux:udev" ]
    deps += [ "//device/media_transfer_protocol" ]
  }
  if (is_linux && !is_chromeos) {
    deps += [ "//third_party/speech-dispatcher" ]
  }

  if (is_chromeos) {
    sources += rebase_path(gypi_values.chrome_browser_chromeos_sources,
                           ".", "//chrome")
    deps += [
      #"browser_chromeos",  TODO(GYP)
    ]
  } else {
    # Non-ChromeOS.
    sources += rebase_path(gypi_values.chrome_browser_non_chromeos_sources,
                           ".", "//chrome")
  }

  if (use_cups) {
    configs += [ "//printing:cups" ]
  }
  if (is_desktop_linux) {
    sources += rebase_path(gypi_values.chrome_browser_gnome_keyring_sources,
                           ".", "//chrome")
    configs += [ "//build/config/linux:gnome_keyring" ]
  }
  if (use_aura) {
    sources += rebase_path(gypi_values.chrome_browser_aura_sources,
                           ".", "//chrome")
    deps += [
      "//ui/aura",
      "//ui/compositor",
      "//ui/keyboard",
    ]
  }
  if (ui_compositor_image_transport) {
    deps += [ "//ui/gl" ]
  }

  if (use_ash) {
    sources += rebase_path(gypi_values.chrome_browser_ash_sources,
                           ".", "//chrome")
  }

  if (use_x11) {
    sources += rebase_path(gypi_values.chrome_browser_x11_sources,
                           ".", "//chrome")
    if (!is_chromeos) {
      configs += [ "//build/config/linux:xscrnsaver" ]
    }
  }
  if (is_posix && !is_mac && !is_ios) {
    sources += [
      "//chrome/app/chrome_breakpad_client.cc",
      "//chrome/app/chrome_breakpad_client.h",
    ]
    deps += [
      #"../components/components.gyp:breakpad_component",  TODO(GYP)
      #"../components/components.gyp:breakpad_host",  TODO(GYP)
    ]
  }
  if (use_nss_certs) {
    sources += rebase_path(gypi_values.chrome_browser_nss_sources,
                           ".", "//chrome")
  }
  if (enable_notifications) {
    sources += rebase_path(gypi_values.chrome_browser_notifications_sources,
                           ".", "//chrome")
    if (!is_android) {
      sources += rebase_path(
          gypi_values.chrome_browser_non_android_notifications_sources,
          ".", "//chrome")
    }
  }
  if (enable_themes) {
    sources += rebase_path(gypi_values.chrome_browser_themes_sources,
                           ".", "//chrome")
  }

  if (enable_printing != 0) {
    # Some form of printing support.
    sources += rebase_path(gypi_values.chrome_browser_basic_printing_sources,
                           ".", "//chrome")
    deps += [
      #"../printing/printing.gyp:printing",  TODO(GYP)
    ]
    if (is_win && win_pdf_metafile_for_printing) {
      sources += rebase_path(gypi_values.chrome_browser_printing_emf_sources,
                             ".", "//chrome")
    }
    if (enable_printing == 1) {
      # Full printing on top of the above.
      sources += rebase_path(gypi_values.chrome_browser_full_printing_sources,
                             ".", "//chrome")
    } else if (enable_printing == 2) {
      # Partial-only printing support.
      sources += rebase_path(
          gypi_values.chrome_browser_basic_only_printing_sources,
          ".", "//chrome")
    }
  }
  if (enable_captive_portal_detection) {
    sources += rebase_path(gypi_values.chrome_browser_captive_portal_sources,
                           ".", "//chrome")
  }
  if (enable_session_service) {
    sources += rebase_path(gypi_values.chrome_browser_session_service_sources,
                           ".", "//chrome")
  }

  if (is_android || is_ios) {
    # Mobile.
    sources += rebase_path(gypi_values.chrome_browser_mobile_sources,
                           ".", "//chrome")
  } else {
    # Non-mobile.
    sources += rebase_path(gypi_values.chrome_browser_non_mobile_sources,
                           ".", "//chrome")
  }

  if (is_android) {
    sources += rebase_path(gypi_values.chrome_browser_android_sources,
                           ".", "//chrome")
    deps += [
      #"../components/components.gyp:cdm_browser",  TODO(GYP)
      #"../components/components.gyp:web_contents_delegate_android",  TODO(GYP)
      #"chrome_browser_jni_headers",  TODO(GYP)
    ]
    deps -= [
      "//third_party/libaddressinput",
      "//components/feedback",
      "//components/storage_monitor",
      "//components/usb_service",
      "//components/web_modal",
    ]
  } else {
    sources += rebase_path(gypi_values.chrome_browser_non_android_sources,
                           ".", "//chrome")
  }

  if (is_mac) {
    deps += [
      #"../third_party/google_toolbox_for_mac/google_toolbox_for_mac.gyp:google_toolbox_for_mac",  TODO(GYP)
      #"../third_party/mozilla/mozilla.gyp:mozilla",  TODO(GYP)
    ]
    libs += [
      "Accelerate.framework",
      "AddressBook.framework",
      "AudioUnit.framework",
      "DiskArbitration.framework",
      "IOKit.framework",
      "ImageCaptureCore.framework",
      "OpenGL.framework",
      "QuartzCore.framework",
      "SecurityInterface.framework",
    ]
  }

  if (enable_rlz) {
    sources += rebase_path(gypi_values.chrome_browser_rlz_sources,
                           ".", "//chrome")
    deps += [ "//rlz:rlz_lib" ]
  }

  # TODO(GYP)
  # Temporary fix to break the browser target into smaller chunks so it
  # will link with goma builds.
  #["OS=="win" and chromium_win_pch==0", {
  #  "msvs_shard": 4,
  #}],

  if (is_win) {
    sources += rebase_path(gypi_values.chrome_browser_win_sources,
                           ".", "//chrome")
    deps += [
      "//third_party/wtl",
      #"chrome_process_finder",  TODO(GYP)
      #"installer_util_strings",  TODO(GYP)
      #"launcher_support",  TODO(GYP)
      #"../chrome/chrome.gyp:chrome_version_header",  TODO(GYP)
      #"../chrome_elf/chrome_elf.gyp:chrome_elf",  TODO(GYP)
      #"../chrome_elf/chrome_elf.gyp:chrome_elf_constants",  TODO(GYP)
      #"../chrome_elf/chrome_elf.gyp:dll_hash",  TODO(GYP)
      #"../google_update/google_update.gyp:google_update",  TODO(GYP)
      #"../third_party/iaccessible2/iaccessible2.gyp:iaccessible2",  TODO(GYP)
      #"../third_party/isimpledom/isimpledom.gyp:isimpledom",  TODO(GYP)
      #"../ui/metro_viewer/metro_viewer.gyp:metro_viewer_messages",  TODO(GYP)
      #"../ui/views/controls/webview/webview.gyp:webview",  TODO(GYP)
      #"../ui/views/views.gyp:views",  TODO(GYP)
      #"../win8/win8.gyp:metro_viewer",  TODO(GYP)
    ]
    forward_dependent_configs_from += [
      #"../ui/views/controls/webview/webview.gyp:webview",  TODO(GYP)
      #"../ui/views/views.gyp:views",  TODO(GYP)
    ]
  } else {
    # Non-Windows.
    sources += rebase_path(gypi_values.chrome_browser_non_win_sources,
                           ".", "//chrome")
    if (use_aura) {
      deps += [
        #"../ui/views/controls/webview/webview.gyp:webview",  TODO(GYP)
        #"../ui/views/views.gyp:views",  TODO(GYP)
      ]
      # TODO(GYP) why is this needed? Very susicious.
      #  "include_dirs": [
      #    "<(INTERMEDIATE_DIR)/chrome",
      #  ],
    }
  }

  if (is_linux) {
    sources += rebase_path(gypi_values.chrome_browser_linux_sources,
                           ".", "//chrome")
    if (use_aura) {
      configs += [
        "//build/config/linux:dbus",
        "//build/config/linux:fontconfig",
      ]
      deps += [
        "//dbus",
      ]
    }
    if (use_x11) {
      configs += [ "//build/config/linux:x11" ]
      deps += [ "//ui/gfx/x" ]
    }
  }

  if (is_desktop_linux) {
    sources += rebase_path(gypi_values.chrome_browser_desktop_linux_sources,
                           ".", "//chrome")
  }
  if (enable_plugin_installation) {
    sources += rebase_path(
        gypi_values.chrome_browser_plugin_installation_sources,
        ".", "//chrome")
  }
  if (enable_app_list) {
    deps += [
      #"../ui/app_list/app_list.gyp:app_list",  TODO(GYP)
    ]
  }
  if (enable_managed_users) {
    sources += rebase_path(
        gypi_values.chrome_browser_supervised_user_sources,
        ".", "//chrome")
  }
  if (enable_webrtc) {
    sources += rebase_path(
        gypi_values.chrome_browser_webrtc_sources,
        ".", "//chrome")
  }
  if (enable_service_discovery) {
    sources += rebase_path(
        gypi_values.chrome_browser_service_discovery_sources,
        ".", "//chrome")
  }
  if (enable_mdns) {
    sources += rebase_path(
        gypi_values.chrome_browser_mdns_sources,
        ".", "//chrome")
  }
  if (!enable_autofill_dialog || is_android || is_ios) {
    sources -= [
      "autofill/validation_rules_storage_factory.cc",
      "autofill/validation_rules_storage_factory.h",
    ]
  }
  if (enable_wifi_bootstrapping) {
    sources += rebase_path(
        gypi_values.chrome_browser_wifi_bootstrapping_sources,
        ".", "//chrome")
    if (is_win || is_mac) {
      # TODO(brettw) as of this writing wifi bootstrapping is set on Windows
      # and Mac, so this test is meaningless. Can we merge these lists?
      sources += rebase_path(
          gypi_values.chrome_browser_win_mac_wifi_bootstrapping_sources,
          ".", "//chrome")
    }
  }
}

# GYP version: chrome/chrome_resources.gyp:chrome_resources
# (generate_browser_resources action)
grit("resources") {
  source = "browser_resources.grd"

  omnibox_mojom_file = "$root_gen_dir/chrome/browser/ui/webui/omnibox/omnibox.mojom.js"

  grit_flags = [
    "-E", "about_credits_file=" +
          rebase_path(about_credits_file, root_build_dir),
    "-E", "additional_modules_list_file=" +
          rebase_path(additional_modules_list_file, root_build_dir),
    "-E", "omnibox_mojom_file=" +
          rebase_path(omnibox_mojom_file, root_build_dir),
  ]

  deps = [
    ":about_credits",
    ":chrome_internal_resources_gen",
    "//chrome/browser/ui/webui/omnibox:mojo_bindings",
  ]
}

# GYP version: chrome/chrome_resource.gyp:about_credits
action("about_credits") {
  script = "//tools/licenses.py"

  # TODO(phajdan.jr): input dependencies so this can be regenerated
  # automatically when one of the credits changes. The way this should work is
  # that licenses.py should write a .d file listing the input dependencies (see
  # "depfile" in GN).
  outputs = [ about_credits_file ]

  args = [
    "credits",
    rebase_path(about_credits_file, root_build_dir),
  ]
}

# GYP version: chrome/chrome_resource.gyp:chrome_internal_resources_gen
# TODO(GYP) write internal action
if (false) {  #if (is_chrome_branded) {
  action("chrome_internal_resources_gen") {
    # TODO(GYP)
  }
} else {
  group("chrome_internal_resources_gen") {
    # Empty placeholder.
  }
}
