# 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/buildflag_header.gni")
import("//build/util/process_version.gni")
import("//chrome/common/features.gni")
import("//chrome/process_version_rc_template.gni")  # For branding_file_path.
import("//extensions/features/features.gni")
import("//media/media_options.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//pdf/features.gni")
import("//ppapi/features/features.gni")
import("//tools/grit/grit_rule.gni")

if (enable_pdf) {
  assert(enable_plugins, "PDF support requires plugins be enabled.")
}

grit("resources") {
  source = "common_resources.grd"
  defines = chrome_grit_defines
  output_dir = "$root_gen_dir/chrome"
  output_name = "common_resources"
  outputs = [
    "grit/common_resources.h",
    "common_resources.pak",
  ]
}

buildflag_header("features") {
  header = "features.h"
  flags = [
    "ENABLE_APP_LIST=$enable_app_list",
    "ENABLE_BACKGROUND=$enable_background",
    "ENABLE_BASIC_PRINT_DIALOG=$enable_basic_print_dialog",
    "ENABLE_CAPTIVE_PORTAL_DETECTION=$enable_captive_portal_detection",
    "ENABLE_GOOGLE_NOW=$enable_google_now",
    "ENABLE_HANGOUT_SERVICES_EXTENSION=$enable_hangout_services_extension",
    "ENABLE_ONE_CLICK_SIGNIN=$enable_one_click_signin",
    "ENABLE_NATIVE_NOTIFICATIONS=$enable_native_notifications",
    "ENABLE_OOP_HEAP_PROFILING=$enable_oop_heap_profiling",
    "ENABLE_PACKAGE_MASH_SERVICES=$enable_package_mash_services",
    "ENABLE_SERVICE_DISCOVERY=$enable_service_discovery",
    "ENABLE_SESSION_SERVICE=$enable_session_service",
    "ENABLE_SUPERVISED_USERS=$enable_supervised_users",
    "ENABLE_WAYLAND_SERVER=$enable_wayland_server",
    "PGO_BUILD=$pgo_build",
    "USE_VULCANIZE=$use_vulcanize",
  ]
}

source_set("channel_info") {
  sources = [
    "channel_info.cc",
    "channel_info.h",
    "channel_info_android.cc",
    "channel_info_chromeos.cc",
    "channel_info_mac.mm",
    "channel_info_win.cc",
  ]

  if (!is_android && !is_chromeos && !is_mac) {
    sources += [ "channel_info_posix.cc" ]
  }
  public_deps = [
    "//base",
    "//components/version_info",
    "//components/version_info:version_string",
  ]
  if (is_win) {
    public_deps += [ "//chrome/install_static:install_static_util" ]
  }
}

source_set("ini_parser") {
  sources = [
    "ini_parser.cc",
    "ini_parser.h",
  ]
  deps = [
    "//base",
  ]
}

source_set("common_param_traits_macros") {
  sources = [
    "common_param_traits_macros.h",
  ]
  deps = [
    "//components/content_settings/core/common",
    "//ipc",
  ]
}

# Use a static library here because many test binaries depend on this but don't
# require many files from it. This makes linking more efficient.
static_library("common") {
  sources = [
    "all_messages.h",
    "attrition_experiments.h",
    "auto_start_linux.cc",
    "auto_start_linux.h",
    "child_process_logging.h",
    "child_process_logging_win.cc",
    "chrome_content_client.cc",
    "chrome_content_client.h",
    "chrome_content_client_constants.cc",
    "chrome_isolated_world_ids.h",
    "chrome_result_codes.h",
    "common_message_generator.cc",
    "common_message_generator.h",
    "common_param_traits.cc",
    "common_param_traits.h",
    "component_flash_hint_file_linux.cc",
    "component_flash_hint_file_linux.h",
    "conflicts/module_watcher_win.cc",
    "conflicts/module_watcher_win.h",
    "content_restriction.h",
    "crash_keys.cc",
    "crash_keys.h",
    "custom_handlers/protocol_handler.cc",
    "custom_handlers/protocol_handler.h",
    "descriptors_android.h",
    "instant_struct_traits.h",
    "logging_chrome.cc",
    "logging_chrome.h",
    "mac/app_shim_launch.h",
    "mac/app_shim_messages.h",
    "mac/cfbundle_blocker.h",
    "mac/cfbundle_blocker.mm",
    "mac/launchd.h",
    "mac/launchd.mm",
    "media/media_resource_provider.cc",
    "media/media_resource_provider.h",
    "media/webrtc_logging_message_data.cc",
    "media/webrtc_logging_message_data.h",
    "media/webrtc_logging_messages.h",
    "media_galleries/metadata_types.h",
    "multi_process_lock.h",
    "multi_process_lock_linux.cc",
    "multi_process_lock_mac.cc",
    "multi_process_lock_win.cc",
    "origin_trials/chrome_origin_trial_policy.cc",
    "origin_trials/chrome_origin_trial_policy.h",
    "page_load_metrics/page_load_metrics_constants.h",
    "page_load_metrics/page_load_metrics_util.cc",
    "page_load_metrics/page_load_metrics_util.h",
    "page_load_metrics/page_load_timing.cc",
    "page_load_metrics/page_load_timing.h",
    "page_load_metrics/page_track_decider.cc",
    "page_load_metrics/page_track_decider.h",
    "partial_circular_buffer.cc",
    "partial_circular_buffer.h",
    "pause_tabs_field_trial.h",
    "pdf_uma.cc",
    "pdf_uma.h",
    "pref_names_util.cc",
    "pref_names_util.h",
    "prerender_messages.h",
    "prerender_types.h",
    "profiling.cc",
    "profiling.h",
    "ref_counted_util.h",
    "render_messages.h",
    "resource_usage_reporter_type_converters.cc",
    "resource_usage_reporter_type_converters.h",
    "search/instant_types.cc",
    "search/instant_types.h",
    "search/ntp_logging_events.h",
    "search/search_types.h",
    "search/search_urls.cc",
    "search/search_urls.h",
    "secure_origin_whitelist.cc",
    "secure_origin_whitelist.h",
    "ssl_insecure_content.cc",
    "ssl_insecure_content.h",
    "stack_sampling_configuration.cc",
    "stack_sampling_configuration.h",
    "switch_utils.cc",
    "switch_utils.h",
    "trace_event_args_whitelist.cc",
    "trace_event_args_whitelist.h",
    "tts_messages.h",
    "tts_utterance_request.cc",
    "tts_utterance_request.h",
    "url_constants.cc",
    "url_constants.h",
    "web_application_info.cc",
    "web_application_info.h",
  ]
  defines = []

  configs += [
    "//build/config:precompiled_headers",
    "//build/config/compiler:wexit_time_destructors",
  ]

  public_deps = [
    ":channel_info",
    ":common_param_traits_macros",
    ":features",
    ":ini_parser",
    ":mojo_bindings",
    ":page_load_metrics_mojom",
    "//base:base",
    "//base:base_static",
    "//base:i18n",
    "//chrome:resources",
    "//chrome:strings",
    "//chrome/app/theme:theme_resources",
    "//chrome/common:constants",
    "//chrome/common/media_router/mojo:dial_utility_interfaces",
    "//chrome/common/net",
    "//chrome/common/profiling",
    "//chrome/installer/util:with_no_strings",
    "//components/cast_certificate",
    "//components/cdm/common",
    "//components/cloud_devices/common",
    "//components/component_updater",
    "//components/content_settings/core/common",
    "//components/crash/core/common",
    "//components/dom_distiller/core",
    "//components/error_page/common",
    "//components/favicon_base",
    "//components/flags_ui:switches",
    "//components/gcm_driver/common",
    "//components/json_schema",
    "//components/metrics",
    "//components/metrics:net",
    "//components/nacl/common:process_type",
    "//components/nacl/common:switches",
    "//components/network_session_configurator/common",
    "//components/ntp_tiles",
    "//components/offline_pages/core:switches",
    "//components/omnibox/common",
    "//components/password_manager/core/common",
    "//components/policy:generated",
    "//components/policy/core/common",
    "//components/prefs",
    "//components/safe_browsing/web_ui:constants",
    "//components/signin/core/common",
    "//components/signin/core/common:signin_features",
    "//components/strings",
    "//components/translate/content/common",
    "//components/translate/core/common",
    "//components/url_formatter",
    "//components/variations",
    "//components/visitedlink/common",
    "//content/public/common",
    "//extensions/common:common_constants",
    "//extensions/features",
    "//google_apis",
    "//gpu/command_buffer/service",
    "//gpu/config",
    "//gpu/config:crash_keys",
    "//ipc",
    "//media",
    "//mojo/edk/system",
    "//mojo/public/cpp/bindings",
    "//pdf:features",
    "//ppapi/features",
    "//printing/features",
    "//skia",
    "//third_party/icu",
    "//third_party/re2",
    "//third_party/widevine/cdm:headers",
    "//ui/accessibility",
    "//ui/base",
    "//ui/gfx/ipc",
    "//ui/gfx/ipc/geometry",
    "//ui/gfx/ipc/skia",
    "//ui/gl",
    "//ui/message_center",
    "//ui/resources:resources",
    "//url",
  ]

  if (enable_plugins) {
    public_deps += [ "//ppapi/shared_impl" ]
  }

  if (enable_extensions) {
    sources += [
      "cast_messages.cc",
      "cast_messages.h",
      "extensions/api/automation_api_constants.h",
      "extensions/api/commands/commands_handler.cc",
      "extensions/api/commands/commands_handler.h",
      "extensions/api/extension_action/action_info.cc",
      "extensions/api/extension_action/action_info.h",
      "extensions/api/notifications/notification_style.cc",
      "extensions/api/notifications/notification_style.h",
      "extensions/api/omnibox/omnibox_handler.cc",
      "extensions/api/omnibox/omnibox_handler.h",
      "extensions/api/speech/tts_engine_manifest_handler.cc",
      "extensions/api/speech/tts_engine_manifest_handler.h",
      "extensions/api/spellcheck/spellcheck_handler.cc",
      "extensions/api/spellcheck/spellcheck_handler.h",
      "extensions/api/storage/storage_schema_manifest_handler.cc",
      "extensions/api/storage/storage_schema_manifest_handler.h",
      "extensions/api/system_indicator/system_indicator_handler.cc",
      "extensions/api/system_indicator/system_indicator_handler.h",
      "extensions/api/url_handlers/url_handlers_parser.cc",
      "extensions/api/url_handlers/url_handlers_parser.h",
      "extensions/api/webstore/webstore_api_constants.cc",
      "extensions/api/webstore/webstore_api_constants.h",
      "extensions/chrome_aliases.cc",
      "extensions/chrome_aliases.h",
      "extensions/chrome_extension_messages.h",
      "extensions/chrome_extensions_client.cc",
      "extensions/chrome_extensions_client.h",
      "extensions/chrome_manifest_handlers.cc",
      "extensions/chrome_manifest_handlers.h",
      "extensions/chrome_manifest_url_handlers.cc",
      "extensions/chrome_manifest_url_handlers.h",
      "extensions/chrome_utility_extensions_messages.h",
      "extensions/command.cc",
      "extensions/command.h",
      "extensions/extension_constants.cc",
      "extensions/extension_constants.h",
      "extensions/extension_metrics.cc",
      "extensions/extension_metrics.h",
      "extensions/extension_process_policy.cc",
      "extensions/extension_process_policy.h",
      "extensions/image_writer/image_writer_util_mac.cc",
      "extensions/image_writer/image_writer_util_mac.h",
      "extensions/manifest_handlers/app_icon_color_info.cc",
      "extensions/manifest_handlers/app_icon_color_info.h",
      "extensions/manifest_handlers/app_launch_info.cc",
      "extensions/manifest_handlers/app_launch_info.h",
      "extensions/manifest_handlers/automation.cc",
      "extensions/manifest_handlers/automation.h",
      "extensions/manifest_handlers/content_scripts_handler.cc",
      "extensions/manifest_handlers/content_scripts_handler.h",
      "extensions/manifest_handlers/extension_action_handler.cc",
      "extensions/manifest_handlers/extension_action_handler.h",
      "extensions/manifest_handlers/linked_app_icons.cc",
      "extensions/manifest_handlers/linked_app_icons.h",
      "extensions/manifest_handlers/minimum_chrome_version_checker.cc",
      "extensions/manifest_handlers/minimum_chrome_version_checker.h",
      "extensions/manifest_handlers/settings_overrides_handler.cc",
      "extensions/manifest_handlers/settings_overrides_handler.h",
      "extensions/manifest_handlers/theme_handler.cc",
      "extensions/manifest_handlers/theme_handler.h",
      "extensions/manifest_handlers/ui_overrides_handler.cc",
      "extensions/manifest_handlers/ui_overrides_handler.h",
      "extensions/mojom/inline_install_traits.h",
      "extensions/permissions/chrome_api_permissions.cc",
      "extensions/permissions/chrome_api_permissions.h",
      "extensions/permissions/chrome_permission_message_provider.cc",
      "extensions/permissions/chrome_permission_message_provider.h",
      "extensions/permissions/chrome_permission_message_rules.cc",
      "extensions/permissions/chrome_permission_message_rules.h",
      "extensions/sync_helper.cc",
      "extensions/sync_helper.h",
      "extensions/webstore_install_result.cc",
      "extensions/webstore_install_result.h",
    ]
    public_deps += [
      "//chrome/common/extensions:mojo_bindings",
      "//chrome/common/extensions/api",
      "//chrome/common/extensions/api:extensions_features",
      "//device/usb",
      "//extensions:extensions_resources",
      "//extensions/common",
      "//extensions/common/api",
      "//extensions/strings",
      "//media/cast:net",
    ]
    if (is_chromeos) {
      sources += [
        "extensions/api/file_browser_handlers/file_browser_handler.cc",
        "extensions/api/file_browser_handlers/file_browser_handler.h",
        "extensions/api/file_system_provider_capabilities/file_system_provider_capabilities_handler.cc",
        "extensions/api/file_system_provider_capabilities/file_system_provider_capabilities_handler.h",
        "extensions/api/input_ime/input_components_handler.cc",
        "extensions/api/input_ime/input_components_handler.h",
      ]
    }
    if (use_aura) {
      # This dependency is for a header used only by extensions code.
      public_deps += [ "//ui/keyboard:keyboard_with_content" ]
    }
  }

  if (is_win || is_mac) {
    sources += [
      "media_galleries/itunes_library.cc",
      "media_galleries/itunes_library.h",
      "media_galleries/picasa_types.cc",
      "media_galleries/picasa_types.h",
      "media_galleries/pmp_constants.h",
    ]
  }
  if (is_mac) {
    public_deps += [ ":app_mode_app_support" ]
  }
  if (is_chromeos) {
    public_deps += [ "//chromeos" ]
  }

  if (enable_nacl) {
    public_deps += [ "//components/nacl/common" ]
  }

  # Printing.
  if (enable_basic_printing || enable_print_preview) {
    sources += [ "chrome_utility_printing_messages.h" ]

    public_deps += [
      "//chrome/common/cloud_print",
      "//components/printing/common",
      "//printing",
    ]
    if (enable_print_preview) {
      # Full printing support.
      sources += [
        "service_messages.h",
        "service_process_util.cc",
        "service_process_util.h",
        "service_process_util_linux.cc",
        "service_process_util_mac.mm",
        "service_process_util_posix.cc",
        "service_process_util_posix.h",
        "service_process_util_win.cc",
      ]
    }
  }

  if (is_android) {
    sources -= [ "media_galleries/metadata_types.h" ]
    sources += [
      "media/chrome_media_drm_bridge_client.cc",
      "media/chrome_media_drm_bridge_client.h",
    ]
  } else {
    # Non-Android.
    public_deps += [ "//chrome/common/importer" ]
  }

  if (is_win) {
    deps = [
      "//chrome/common/win:eventlog_messages",
    ]

    public_deps += [
      "//components/dom_distiller/core",  # Needed by chrome_content_client.cc.
      "//third_party/wtl",
    ]

    libs = [ "wintrust.lib" ]
  }

  if (is_mac) {
    public_deps += [
      "//third_party/google_toolbox_for_mac",
      "//third_party/mach_override",
    ]
  }

  if (enable_plugins) {
    sources += [
      "pepper_flash.cc",
      "pepper_flash.h",
      "plugin_utils.cc",
      "plugin_utils.h",
      "ppapi_utils.cc",
      "ppapi_utils.h",
    ]
    public_deps += [ "//third_party/adobe/flash:flapper_version_h" ]
  }
  if (enable_plugins && enable_extensions) {
    sources += [
      "pepper_permission_util.cc",
      "pepper_permission_util.h",
    ]
  }
  if (enable_library_cdms) {
    sources += [
      "widevine_cdm_constants.cc",
      "widevine_cdm_constants.h",
    ]
  }
  if (!enable_webrtc) {
    sources -= [ "media/webrtc_logging_messages.h" ]
  }

  if (safe_browsing_mode != 0) {
    public_deps += [ "//chrome/common/safe_browsing" ]
  }

  if (is_linux) {
    deps = [
      "//sandbox/linux:sandbox_services",
    ]
  }

  if (enable_cdm_host_verification) {
    sources += [
      "media/cdm_host_file_path.cc",
      "media/cdm_host_file_path.h",
    ]
    public_deps += [ "//chrome/common:version_header" ]
  }
}

process_version("version_header") {
  # TODO(brettw) this should have more reduced visibility, but chrome/browser
  # currently depends on this.
  #visibility = [ ":*" ]

  sources = [
    "//build/util/LASTCHANGE",
    "//chrome/VERSION",
    branding_file_path,
  ]
  template_file = "chrome_version.h.in"

  output = "$target_gen_dir/chrome_version.h"
}

# Separate out the constants that aren't intermingled with or dependent on code
# so that they can be used without adding any binary bloat.
static_library("non_code_constants") {
  sources = [
    "chrome_constants.cc",
    "chrome_constants.h",
    "chrome_icon_resources_win.h",
    "env_vars.cc",
    "env_vars.h",
  ]

  deps = [
    ":version_header",
    "//base",
  ]
}

static_library("constants") {
  sources = [
    "chrome_features.cc",
    "chrome_features.h",
    "chrome_paths.cc",
    "chrome_paths.h",
    "chrome_paths_android.cc",
    "chrome_paths_internal.h",
    "chrome_paths_linux.cc",
    "chrome_paths_mac.mm",
    "chrome_paths_win.cc",
    "chrome_result_codes.h",
    "chrome_switches.cc",
    "chrome_switches.h",
    "pref_font_script_names-inl.h",
    "pref_font_webkit_names.h",
    "pref_names.cc",
    "pref_names.h",
  ]

  public_deps = [
    ":features",
    ":non_code_constants",
    "//content/public/common:result_codes",
    "//extensions/features",
    "//printing/features",
    "//rlz/features",
  ]
  deps = [
    ":channel_info",
    ":version_header",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//components/bookmarks/common",
    "//components/nacl/common:switches",
    "//components/offline_pages/features",
    "//media:media_features",
    "//media/cdm:cdm_paths",  # Needed by chrome_paths.cc.
    "//ppapi/features",
    "//third_party/widevine/cdm:headers",
  ]

  if (is_android) {
    # This dependency must only be added for Android.
    #
    # On Windows, //chrome/installer/util depends on this target to get
    # constants. That target is in turn used in a number of installer helper
    # targets independent of Chrome that we want to keep small. So we don't
    # want something large like //ui/base.
    #
    # Android doesn't have this structure and corresponding size limitation
    # on this target. On that platform one of the Chrome paths forwards to one
    # implemented in //ui/base, so we need that dependency.
    deps += [ "//ui/base" ]
  }

  if (is_win) {
    deps += [ "//chrome/install_static:install_static_util" ]
  }
}

if (is_win) {
  source_set("metrics_constants_util_win") {
    sources = [
      "metrics_constants_util_win.cc",
      "metrics_constants_util_win.h",
    ]

    deps = [
      "//base",
      "//chrome/install_static:install_static_util",
    ]
  }
}

# Use a static library here because many test binaries depend on this but don't
# require many files from it. This makes linking more efficient.
static_library("test_support") {
  testonly = true
  visibility = [ "//chrome/test:*" ]

  sources = [
    "page_load_metrics/test/page_load_metrics_test_util.cc",
    "page_load_metrics/test/page_load_metrics_test_util.h",
    "search/mock_searchbox.cc",
    "search/mock_searchbox.h",
  ]

  deps = [
    ":common",
    ":instant_mojom",
    "//base",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (is_win || is_mac) {
    sources += [
      "media_galleries/picasa_test_util.cc",
      "media_galleries/picasa_test_util.h",
      "media_galleries/pmp_test_util.cc",
      "media_galleries/pmp_test_util.h",
    ]
  }

  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  if (enable_extensions) {
    sources += [
      "extensions/extension_test_util.cc",
      "extensions/extension_test_util.h",
    ]
    deps += [ "//chrome/common/extensions:test_features" ]
  }
}

source_set("app_mode_app_support") {
  sources = [
    "mac/app_mode_chrome_locator.h",
    "mac/app_mode_chrome_locator.mm",
    "mac/app_mode_common.h",
    "mac/app_mode_common.mm",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  deps = [
    ":constants",
    "//base",
  ]
}

mojom("mojo_bindings") {
  sources = [
    "cache_stats_recorder.mojom",
    "file_patcher.mojom",
    "image_context_menu_renderer.mojom",
    "insecure_content_renderer.mojom",
    "net_benchmarking.mojom",
    "network_diagnostics.mojom",
    "open_search_description_document_handler.mojom",
    "prerender.mojom",
    "renderer_configuration.mojom",
    "resource_usage_reporter.mojom",
    "thumbnail_capturer.mojom",
  ]

  if (is_win) {
    sources += [
      "conflicts/module_event_sink_win.mojom",
      "shell_handler_win.mojom",
    ]
  }

  if (is_chromeos) {
    sources += [ "zip_file_creator.mojom" ]
  }

  if (safe_browsing_mode == 1) {
    sources += [ "safe_browsing/safe_archive_analyzer.mojom" ]
  }

  public_deps = [
    "//components/content_settings/core/common:mojo_bindings",
    "//mojo/common:common_custom_types",
    "//ui/gfx/geometry/mojo",
    "//url/mojo:url_mojom_gurl",
  ]

  # TODO(crbug.com/714018): Convert the implementation to use OnceCallback.
  use_once_callback = false
}

mojom("instant_mojom") {
  sources = [
    "instant.mojom",
  ]

  public_deps = [
    "//mojo/common:common_custom_types",
    "//url/mojo:url_mojom_gurl",
  ]
}

mojom("page_load_metrics_mojom") {
  sources = [
    "page_load_metrics/page_load_metrics.mojom",
  ]

  public_deps = [
    "//mojo/common:common_custom_types",
  ]
}
