# 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("//components/nacl/features.gni")
import("//components/offline_pages/buildflags/features.gni")
import("//device/vr/buildflags/buildflags.gni")
import("//extensions/buildflags/buildflags.gni")
import("//media/media_options.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//pdf/features.gni")
import("//ppapi/buildflags/buildflags.gni")
import("//third_party/widevine/cdm/widevine.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("buildflags") {
  header = "buildflags.h"
  flags = [
    "BUILTIN_CERT_VERIFIER_POLICY_SUPPORTED=$builtin_cert_verifier_policy_supported",
    "ENABLE_APP_LIST=$enable_app_list",
    "ENABLE_BACKGROUND_MODE=$enable_background_mode",
    "ENABLE_BACKGROUND_CONTENTS=$enable_background_contents",
    "ENABLE_BASIC_PRINT_DIALOG=$enable_basic_print_dialog",
    "ENABLE_CAPTIVE_PORTAL_DETECTION=$enable_captive_portal_detection",
    "ENABLE_HANGOUT_SERVICES_EXTENSION=$enable_hangout_services_extension",
    "ENABLE_ONE_CLICK_SIGNIN=$enable_one_click_signin",
    "ENABLE_NATIVE_NOTIFICATIONS=$enable_native_notifications",
    "ENABLE_SERVICE_DISCOVERY=$enable_service_discovery",
    "ENABLE_SESSION_SERVICE=$enable_session_service",
    "ENABLE_SUPERVISED_USERS=$enable_supervised_users",
    "ENABLE_WAYLAND_SERVER=$enable_wayland_server",
    "ENABLE_WEBUI_TAB_STRIP=$enable_webui_tab_strip",
    "PGO_BUILD=$pgo_build",
    "OPTIMIZE_WEBUI=$optimize_webui",
  ]
}

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_posix && !is_android && !is_chromeos && !is_mac) {
    sources += [ "channel_info_posix.cc" ]
  }

  deps = [
    "//build:branding_buildflags",
  ]

  public_deps = [
    "//base",
    "//components/version_info",
    "//components/version_info:version_string",
  ]
  if (is_win) {
    public_deps += [ "//chrome/install_static:install_static_util" ]
  }
  if (is_android) {
    public_deps += [ "//components/version_info/android:channel_getter" ]
  }
}

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_descriptors.h",
    "chrome_isolated_world_ids.h",
    "chrome_result_codes.h",
    "client_hints/client_hints.cc",
    "client_hints/client_hints.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",
    "conflicts/remote_module_watcher_win.cc",
    "conflicts/remote_module_watcher_win.h",
    "content_restriction.h",
    "crash_keys.cc",
    "crash_keys.h",
    "custom_handlers/protocol_handler.cc",
    "custom_handlers/protocol_handler.h",
    "google_url_loader_throttle.cc",
    "google_url_loader_throttle.h",
    "heap_profiler_controller.cc",
    "heap_profiler_controller.h",
    "instant_mojom_traits.h",
    "logging_chrome.cc",
    "logging_chrome.h",
    "mac/app_shim_launch.h",
    "mac/app_shim_param_traits.h",
    "mac/launchd.h",
    "mac/launchd.mm",
    "mac/service_management.h",
    "mac/service_management.mm",
    "mac/staging_watcher.h",
    "mac/staging_watcher.mm",
    "media/media_resource_provider.cc",
    "media/media_resource_provider.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",
    "pdf_util.cc",
    "pdf_util.h",
    "pref_names_util.cc",
    "pref_names_util.h",
    "prerender_messages.h",
    "prerender_types.h",
    "prerender_url_loader_throttle.cc",
    "prerender_url_loader_throttle.h",
    "prerender_util.cc",
    "prerender_util.h",
    "ref_counted_util.h",
    "render_messages.h",
    "search/instant_types.cc",
    "search/instant_types.h",
    "search/ntp_logging_events.h",
    "secure_origin_whitelist.cc",
    "secure_origin_whitelist.h",
    "ssl_insecure_content.cc",
    "ssl_insecure_content.h",

    # TODO(asvitkine): Move the next four entries to chrome/common/profiler/.
    "stack_sampling_configuration.cc",
    "stack_sampling_configuration.h",
    "thread_profiler.cc",
    "thread_profiler.h",
    "url_constants.cc",
    "url_constants.h",
    "web_application_info.cc",
    "web_application_info.h",
    "web_application_info_provider_param_traits.h",
    "webui_url_constants.cc",
    "webui_url_constants.h",
  ]
  defines = []

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

  public_deps = [
    ":available_offline_content_mojom",
    ":buildflags",
    ":channel_info",
    ":client_hints_mojom",
    ":common_param_traits_macros",
    ":ini_parser",
    ":mojo_bindings",
    ":offline_page_auto_fetcher_mojom",
    ":supervised_user_commands_mojom",
    "//base",
    "//base:base_static",
    "//base:i18n",
    "//chrome:resources",
    "//chrome:strings",
    "//chrome/app/theme:theme_resources",
    "//chrome/common:constants",
    "//chrome/common/net",
    "//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/metrics",
    "//components/metrics:net",
    "//components/metrics/public/mojom:call_stack_mojo_bindings",
    "//components/nacl/common:buildflags",
    "//components/nacl/common:process_type",
    "//components/nacl/common:switches",
    "//components/net_log",
    "//components/network_session_configurator/common",
    "//components/ntp_tiles",
    "//components/offline_pages/buildflags",
    "//components/offline_pages/core:switches",
    "//components/omnibox/common",
    "//components/page_load_metrics/common:page_load_metrics_mojom",
    "//components/password_manager/core/common",
    "//components/policy:generated",
    "//components/policy/core/common",
    "//components/prefs",
    "//components/safe_browsing:buildflags",
    "//components/safe_browsing/web_ui:constants",
    "//components/services/heap_profiling/public/cpp",
    "//components/strings",
    "//components/translate/content/common",
    "//components/translate/core/common",
    "//components/url_formatter",
    "//components/variations",
    "//components/variations/net",
    "//components/visitedlink/common",
    "//content/public/common",
    "//extensions/buildflags",
    "//extensions/common:common_constants",
    "//google_apis",
    "//gpu/command_buffer/service",
    "//gpu/config",
    "//ipc",
    "//media",
    "//mojo/public/cpp/bindings",
    "//pdf:buildflags",
    "//ppapi/buildflags",
    "//printing/buildflags",
    "//services/service_manager/sandbox",
    "//skia",
    "//third_party/icu",
    "//third_party/re2",
    "//third_party/widevine/cdm:buildflags",
    "//ui/accessibility",
    "//ui/base",
    "//ui/gfx/ipc",
    "//ui/gfx/ipc/geometry",
    "//ui/gfx/ipc/skia",
    "//ui/gl",
    "//ui/message_center/public/cpp",
    "//ui/native_theme",
    "//ui/resources:resources",
    "//url",
  ]

  deps = [
    "//build:branding_buildflags",
    "//components/crash/content/app",
    "//components/metrics:call_stack_profile_builder",
    "//components/page_load_metrics/common:common",
  ]

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

  if (enable_extensions) {
    sources += [
      "cast_messages.cc",
      "cast_messages.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/chrome_extensions_api_provider.cc",
      "extensions/chrome_extensions_api_provider.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/command.cc",
      "extensions/command.h",
      "extensions/extension_constants.cc",
      "extensions/extension_constants.h",
      "extensions/extension_metrics.cc",
      "extensions/extension_metrics.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/app_theme_color_info.cc",
      "extensions/manifest_handlers/app_theme_color_info.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/natively_connectable_handler.cc",
      "extensions/manifest_handlers/natively_connectable_handler.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/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",
      "initialize_extensions_client.cc",
      "initialize_extensions_client.h",
    ]
    deps += [ "//chrome/common/apps/platform_apps" ]
    public_deps += [
      "//chrome/common/extensions/api",
      "//chrome/common/extensions/api:extensions_features",
      "//extensions:extensions_resources",
      "//extensions/common",
      "//extensions/common:core_api_provider",
      "//extensions/common/api",
      "//extensions/strings",
      "//media/cast:net",
      "//services/device/public/cpp/usb",
    ]
    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",
      ]

      # This dependency is for a header used only by extensions code.
      public_deps += [ "//ash/keyboard/ui" ]
    }
  }

  if (is_mac) {
    public_deps += [ ":app_mode_app_support" ]
  }
  if (is_chromeos) {
    deps += [ "//chromeos/constants" ]
  }

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

  # Printing.
  if (enable_basic_printing) {
    public_deps += [
      "//chrome/common/cloud_print",
      "//components/printing/common",
      "//printing",
    ]
    if (enable_print_preview && !is_chromeos && !is_android) {
      # |enable_print_preview| should be false if |is_android| is true.
      # However, that is somewhat indirect. Part of The service_process_util
      # code below is based on a model where the cloud print service is a
      # long-lived process independent of chrome, which is not appropriate
      # on android. To make that explicit |!is_android| is used above.
      sources += [
        "service_process_util.cc",
        "service_process_util.h",
        "service_process_util_linux.cc",
        "service_process_util_mac.mm",
        "service_process_util_win.cc",
      ]
      if (is_posix) {
        sources += [
          "service_process_util_posix.cc",
          "service_process_util_posix.h",
        ]
      }
    }
    if (enable_print_preview && is_win) {
      sources += [ "chrome_utility_printing_messages.h" ]
    }
  }

  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/chrome_elf:chrome_elf_main_include",
      "//chrome/common/win:eventlog_messages",
      "//components/crash/content/app:crash_export_thunk_include",
    ]

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

    libs = [ "wintrust.lib" ]
  }

  if (is_posix && !is_android) {
    sources += [
      "process_singleton_lock_posix.cc",
      "process_singleton_lock_posix.h",
    ]
  }

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

    libs = [ "ServiceManagement.framework" ]
  }

  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 += [
      "media/cdm_manifest.cc",
      "media/cdm_manifest.h",
    ]
    if (enable_widevine) {
      if (is_desktop_linux) {
        sources += [
          "media/component_widevine_cdm_hint_file_linux.cc",
          "media/component_widevine_cdm_hint_file_linux.h",
        ]
      }
      deps += [ "//third_party/widevine/cdm:headers" ]
    }
  }

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

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

  if (enable_cdm_host_verification) {
    if (is_win && is_multi_dll_chrome) {
      defines += [ "CHROME_MULTIPLE_DLL" ]
    }
    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 = [
    "//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",
    "chrome_switches.cc",
    "chrome_switches.h",
    "env_vars.cc",
    "env_vars.h",
  ]

  deps = [
    ":buildflags",
    ":version_header",
    "//base",
    "//build:branding_buildflags",
    "//ppapi/buildflags",
  ]

  public_deps = [
    "//printing/buildflags",
    "//ui/base:buildflags",
  ]
}

component("chrome_features") {
  defines = [ "IS_CHROME_FEATURES_IMPL" ]

  sources = [
    "chrome_features.cc",
    "chrome_features.h",
  ]

  deps = [
    ":buildflags",
    ":non_code_constants",
    "//base",
    "//components/offline_pages/buildflags",
    "//device/vr/buildflags",
    "//extensions/buildflags",
    "//media:media_buildflags",
    "//net:buildflags",
    "//ppapi/buildflags",
    "//printing/buildflags",
    "//rlz/buildflags",
  ]

  public_deps = [
    "//ui/base:buildflags",
  ]
}

static_library("constants") {
  sources = [
    "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",
    "pref_font_script_names-inl.h",
    "pref_font_webkit_names.h",
    "pref_names.cc",
    "pref_names.h",
  ]

  public_deps = [
    ":buildflags",
    ":chrome_features",
    ":non_code_constants",
    "//content/public/common:result_codes",
    "//rlz/buildflags",
  ]

  deps = [
    ":channel_info",
    ":version_header",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//build:branding_buildflags",
    "//components/bookmarks/common",
    "//components/nacl/common:switches",
    "//components/offline_pages/buildflags",
    "//extensions/buildflags",
    "//media:media_buildflags",
    "//ppapi/buildflags",
    "//printing/buildflags",
    "//third_party/widevine/cdm:buildflags",
  ]

  if (enable_extensions) {
    public_deps += [ "//components/services/app_service/public/mojom" ]
  }

  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 (enable_widevine && enable_library_cdms) {
    deps += [
      "//media/cdm:cdm_paths",  # Needed by chrome_paths.cc.
      "//third_party/widevine/cdm:headers",
    ]
  }
}

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 = [
    "search/mock_embedded_search_client.cc",
    "search/mock_embedded_search_client.h",
  ]

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

  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") {
  disable_variants = true

  sources = [
    "cache_stats_recorder.mojom",
    "chrome_render_frame.mojom",
    "content_settings_renderer.mojom",
    "media/webrtc_logging.mojom",
    "navigation_corrector.mojom",
    "net_benchmarking.mojom",
    "network_diagnostics.mojom",
    "network_easter_egg.mojom",
    "open_search_description_document_handler.mojom",
    "plugin.mojom",
    "prerender.mojom",
    "renderer_configuration.mojom",
  ]

  deps = []

  if (is_android) {
    sources += [ "sandbox_status_extension_android.mojom" ]
  }

  if (is_mac) {
    sources += [ "mac/app_shim.mojom" ]
  }

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

  if (enable_offline_pages) {
    sources += [ "mhtml_page_notifier.mojom" ]
    deps += [ "//third_party/blink/public/mojom:mojom_mhtml_load_result" ]
  }

  public_deps = [
    "//components/content_settings/core/common:mojo_bindings",
    "//content/public/common:interfaces",
    "//mojo/public/mojom/base",
    "//third_party/blink/public/mojom:mojom_platform",
    "//ui/gfx/geometry/mojom",
    "//ui/gfx/image/mojom",
    "//url/mojom:url_mojom_gurl",
    "//url/mojom:url_mojom_origin",
  ]

  if (is_mac) {
    public_deps += [ "//components/remote_cocoa/common:mojo" ]
  }

  if (safe_browsing_mode == 1) {
    public_deps += [ "//chrome/services/file_util/public/mojom" ]
  }

  overridden_deps = [
    "//third_party/blink/public/mojom:mojom_platform",
    "//content/public/common:interfaces",
  ]

  component_deps = [ "//content/public/common" ]
}

mojom("search_mojom") {
  sources = [
    "search.mojom",
  ]

  public_deps = [
    "//mojo/public/mojom/base",
    "//url/mojom:url_mojom_gurl",
  ]
}

mojom("client_hints_mojom") {
  sources = [
    "client_hints.mojom",
  ]

  public_deps = [
    "//mojo/public/mojom/base",
    "//third_party/blink/public/mojom:web_client_hints_types_mojo_bindings",
    "//url/mojom:url_mojom_origin",
  ]
}

if (enable_print_preview && !is_chromeos) {
  mojom("service_process_mojom") {
    sources = [
      "cloud_print.mojom",
      "service_process.mojom",
    ]
    public_deps = [
      "//mojo/public/mojom/base",
    ]
  }
}

mojom("supervised_user_commands_mojom") {
  sources = [
    "supervised_user_commands.mojom",
  ]
}

mojom("available_offline_content_mojom") {
  sources = [
    "available_offline_content.mojom",
  ]
  public_deps = [
    "//url/mojom:url_mojom_gurl",
  ]
}

mojom("offline_page_auto_fetcher_mojom") {
  sources = [
    "offline_page_auto_fetcher.mojom",
  ]
  public_deps = [
    "//url/mojom:url_mojom_gurl",
  ]
}
