# 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("//components/nacl/nacl_defines.gni")
# //build/config/android/rules.gni imports //tools/grit/grit_rule.gni, which
# produces a conflict for the "grit" template so we have to only include one.
if (is_android) {
  import("//build/config/android/rules.gni")
} else {
  import("//tools/grit/grit_rule.gni")
}
if (is_desktop_linux) {
  import("//build/config/linux/pkg_config.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" ])

if (is_desktop_linux) {
  pkg_config("gnome_keyring") {
    packages = [ "gnome-keyring-1" ]
  }
}

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

  # iOS/non-iOS shared deps. New dependencies should generally be added in the
  # non-iOS deps below.
  public_deps = [
    "//components/autofill/core/browser",
    "//content/public/browser",
    "//sql",
    "//sync",
  ]
  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/ui",
    "//chrome/common",
    "//chrome/common/net",
    "//components/autofill/core/browser",
    "//components/bookmarks/browser",
    "//components/captive_portal",
    "//components/cloud_devices/common",
    "//components/component_updater",
    "//components/content_settings/core/browser",
    "//components/content_settings/core/common",
    "//components/crx_file",
    "//components/data_reduction_proxy/core/browser",
    "//components/domain_reliability",
    "//components/enhanced_bookmarks",
    "//components/favicon_base",
    "//components/favicon/core",
    "//components/feedback",
    "//components/gcm_driver",
    "//components/google/core/browser",
    "//components/history/core/browser",
    "//components/history/core/common",
    "//components/infobars/core",
    "//components/invalidation",
    "//components/metrics:gpu",
    "//components/metrics:net",
    "//components/metrics:profiler",
    "//components/metrics/proto:proto",
    "//components/navigation_metrics",
    "//components/network_time",
    "//components/omaha_query_params",
    "//components/omnibox",
    "//components/os_crypt",
    "//components/password_manager/core/browser",
    "//components/password_manager/core/common",
    "//components/policy:policy_component",
    "//components/precache/core",
    "//components/query_parser",
    "//components/rappor",
    "//components/renderer_context_menu",
    "//components/search",
    "//components/search_engines",
    "//components/search_provider_logos",
    "//components/signin/core/browser",
    "//components/startup_metric_utils",
    "//components/strings",
    "//components/suggestions",
    "//components/sync_driver",
    "//components/translate/core/browser",
    "//components/translate/core/common",
    "//components/url_fixer",
    "//components/user_prefs",
    "//components/variations",
    "//components/variations/net",
    "//components/webdata/common",
    "//content/public/browser",
    "//content/public/common",
    "//courgette:courgette_lib",
    "//crypto",
    "//google_apis",
    "//gpu/config",
    "//jingle:notifier",
    "//skia",
    "//sql",
    "//sync",
    "//third_party/cacheinvalidation",
    "//third_party/icu",
    "//third_party/libxml",
    "//third_party/libjingle",
    "//third_party/widevine/cdm:version_h",
    "//third_party/zlib",
    "//third_party/zlib:minizip",
    "//third_party/zlib:zip",
    "//ui/base",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/message_center",
    "//ui/shell_dialogs",
    "//ui/strings",
    "//ui/resources",
  ]

  sources += rebase_path(gypi_values.chrome_browser_undo_sources,
                         ".", "//chrome")

  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',

    defines = nacl_defines

    deps += [
      "//apps",
      "//cc",
      "//chrome/browser/devtools",
      "//chrome/installer/util",
      "//components/autofill/content/browser",
      "//components/dom_distiller/content",
      "//components/keyed_service/content",
      "//components/navigation_interception",
      "//components/password_manager/content/browser",
      "//components/precache/content",
      "//components/sessions:sessions_content",
      "//components/storage_monitor",
      "//components/translate/content/browser",
      "//components/url_matcher",
      "//components/visitedlink/browser",
      "//components/visitedlink/common",
      "//components/web_cache/browser",
      "//components/web_modal",
      "//content/app/resources",
      "//media",
      "//media/cast:net",
      "//mojo/common",
      "//mojo/edk/system",
      "//mojo/environment:chromium",
      "//mojo/public/cpp/bindings",
      "//mojo/public/js/bindings",
      "//net:extras",
      "//net:net_with_v8",
      "//storage/browser",
      "//storage/common",
      "//third_party/WebKit/public:resources",
      "//third_party/expat",
      "//third_party/leveldatabase",
      "//third_party/libaddressinput",
      "//third_party/libyuv",
      "//third_party/npapi",
      "//third_party/re2",
      "//third_party/smhasher:cityhash",
      "//third_party/webrtc/modules/desktop_capture",
      "//ui/gl",
      "//ui/surface",
      "//ui/web_dialogs",
      "//v8",
      ## TODO(tonyg): Remove this dependency (crbug.com/280157).
      #"../testing/perf/perf_test.gyp:*",  TODO(GYP)
    ]
  } 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)
      #"browser_app_shim"  TODO(GYP)
    ]
  }
  if (is_mac || is_ios) {
    sources += rebase_path(gypi_values.chrome_browser_mac_ios_sources,
                           ".", "//chrome")
  }
  if (cld2_data_source == "component") {
    sources += [
      "component_updater/cld_component_installer.cc",
      "component_updater/cld_component_installer.h",
    ]
  }
  if (enable_extensions) {
    public_deps += [ "//chrome/browser/extensions" ]
    deps += [
      "//chrome/browser/sync_file_system/drive_backend:sync_file_system_drive_proto",
      "//chrome/common/extensions/api",
      "//chrome/common/extensions/api:api_registration",
    ]
    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 || is_chromeos) {
      sources -= [ "background/background_mode_manager_aura.cc" ]
    }
    defines += [ "ENABLE_BACKGROUND=1" ]
  }
  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)
  }

  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_policy_mobile_sources,
                             ".", "//chrome")
    } else {
      deps += [
        "//chrome/browser/policy:path_parser",
      ]
    }
  } 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 += [
      "//components/pdf/browser",
      "//ppapi:ppapi_ipc",
      "//third_party/adobe/flash:flapper_version_h",
    ]
  }
  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:metadata_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 += [
      "//chrome/browser/chromeos",
    ]
  } else {
    # Non-ChromeOS.
    sources += rebase_path(gypi_values.chrome_browser_non_chromeos_sources,
                           ".", "//chrome")
  }

  if (is_chromeos || is_ios) {
    sources -= [
      "metrics/signin_status_metrics_provider.cc",
      "metrics/signin_status_metrics_provider.h",
    ]
  }

  if (use_cups) {
    configs += [ "//printing:cups" ]
  }
  if (is_desktop_linux) {
    sources += rebase_path(gypi_values.chrome_browser_gnome_keyring_sources,
                           ".", "//chrome")
    configs += [ ":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_crash_reporter_client.cc",
      "//chrome/app/chrome_crash_reporter_client.h",
    ]
    deps += [
      "//components/crash/app",
      "//components/crash/browser",
    ]
  }
  if (use_nss_certs) {
    sources += rebase_path(gypi_values.chrome_browser_nss_sources,
                           ".", "//chrome")
    if (is_chromeos) {
      sources -= [ "net/nss_context_linux.cc" ]
    }
  }
  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 (printing_mode != 0) {
    # Some form of printing support.
    sources += rebase_path(gypi_values.chrome_browser_basic_printing_sources,
                           ".", "//chrome")
    deps += [
      "//printing",
    ]
    if (is_win) {
      sources += rebase_path(gypi_values.chrome_browser_printing_emf_sources,
                             ".", "//chrome")
    }
    if (printing_mode == 1) {
      # Full printing on top of the above.
      sources += rebase_path(gypi_values.chrome_browser_full_printing_sources,
                             ".", "//chrome")
    } else if (printing_mode == 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 && !is_chromeos) {
    sources += rebase_path(gypi_values.chrome_browser_desktop_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")
    deps += [
      "//device/core",
      "//device/usb",
    ]
  }

  if (is_android) {
    sources += rebase_path(gypi_values.chrome_browser_android_sources,
                           ".", "//chrome")
    deps += [
      ":jni_headers",
      "//components/cdm/browser",
      "//components/enhanced_bookmarks",
      "//components/history/core/android",
      "//components/web_contents_delegate_android",
      "//third_party/android_opengl/etc1",
    ]
    deps -= [
      "//third_party/libaddressinput",
      "//components/feedback",
      "//components/storage_monitor",
      "//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",
      #"../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")
    public_deps += [
      "//ui/views",
      "//ui/views/controls/webview",
    ]
    deps += [
      "//chrome:version_header",
      "//chrome/installer/util:strings",
      "//third_party/iaccessible2",
      "//third_party/isimpledom",
      "//third_party/wtl",
      #"chrome_process_finder",  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)
      #"../ui/metro_viewer/metro_viewer.gyp:metro_viewer_messages",  TODO(GYP)
      #"../win8/win8.gyp:metro_viewer",  TODO(GYP)
    ]
  } else {
    # Non-Windows.
    sources += rebase_path(gypi_values.chrome_browser_non_win_sources,
                           ".", "//chrome")
    if (toolkit_views) {
      deps += [
      "//ui/views",
      "//ui/views/controls/webview",
      ]
      # 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",
    ]
  }
  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")
    }
  }
}

if (is_android) {
  # GYP version: chrome/chrome_browser.gypi:chrome_browser_jni_headers
  generate_jni("jni_headers") {
    sources = rebase_path(
        gypi_values.chrome_browser_jni_sources, ".", "//chrome")
    jni_package = "chrome"
  }
}

# GYP version: chrome/chrome_resources.gyp:chrome_resources
# (generate_browser_resources action)
grit("resources") {
  source = "browser_resources.grd"
  output_dir = "$root_gen_dir/chrome"
  outputs = [
    "grit/browser_resources.h",
    "browser_resources.pak",
  ]

  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",
    "//mojo/environment:chromium",
  ]
}

# 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
if (is_chrome_branded) {
  action("chrome_internal_resources_gen") {
    script = "internal/transform_additional_modules_list.py"
    sources = [ "internal/resources/additional_modules_list.input" ]
    outputs = [ additional_modules_list_file ]
    args = rebase_path(sources, root_build_dir) +
           rebase_path(outputs, root_build_dir)
  }
} else {
  group("chrome_internal_resources_gen") {
    # Empty placeholder.
  }
}

# In GYP this is part of test_support_common.
source_set("test_support") {
  testonly = true

  # Always include this via the main test support target.
  visibility = [ "//chrome/test:test_support" ]

  sources = [
    "browsing_data/mock_browsing_data_appcache_helper.cc",
    "browsing_data/mock_browsing_data_appcache_helper.h",
    "browsing_data/mock_browsing_data_channel_id_helper.cc",
    "browsing_data/mock_browsing_data_channel_id_helper.h",
    "browsing_data/mock_browsing_data_cookie_helper.cc",
    "browsing_data/mock_browsing_data_cookie_helper.h",
    "browsing_data/mock_browsing_data_database_helper.cc",
    "browsing_data/mock_browsing_data_database_helper.h",
    "browsing_data/mock_browsing_data_file_system_helper.cc",
    "browsing_data/mock_browsing_data_file_system_helper.h",
    "browsing_data/mock_browsing_data_flash_lso_helper.cc",
    "browsing_data/mock_browsing_data_flash_lso_helper.h",
    "browsing_data/mock_browsing_data_indexed_db_helper.cc",
    "browsing_data/mock_browsing_data_indexed_db_helper.h",
    "browsing_data/mock_browsing_data_local_storage_helper.cc",
    "browsing_data/mock_browsing_data_local_storage_helper.h",
    "browsing_data/mock_browsing_data_quota_helper.cc",
    "browsing_data/mock_browsing_data_quota_helper.h",
    "browsing_data/mock_browsing_data_service_worker_helper.cc",
    "browsing_data/mock_browsing_data_service_worker_helper.h",
    "download/download_test_file_activity_observer.cc",
    "download/download_test_file_activity_observer.h",
    "download/test_download_shelf.cc",
    "download/test_download_shelf.h",
    "invalidation/fake_invalidation_service.cc",
    "invalidation/fake_invalidation_service.h",
    "media/fake_desktop_media_list.cc",
    "media/fake_desktop_media_list.h",
    "net/dns_probe_test_util.cc",
    "net/dns_probe_test_util.h",
    "net/url_request_mock_util.cc",
    "net/url_request_mock_util.h",
    "notifications/notification_test_util.cc",
    "notifications/notification_test_util.h",
    "password_manager/mock_password_store_service.cc",
    "password_manager/mock_password_store_service.h",
    "password_manager/null_password_store_service.cc",
    "password_manager/null_password_store_service.h",
    "password_manager/test_password_store_service.cc",
    "password_manager/test_password_store_service.h",
    "prefs/pref_service_mock_factory.cc",
    "prefs/pref_service_mock_factory.h",
    "profile_resetter/profile_resetter_test_base.cc",
    "profile_resetter/profile_resetter_test_base.h",
    "search_engines/template_url_service_factory_test_util.cc",
    "search_engines/template_url_service_factory_test_util.h",
    "search_engines/template_url_service_test_util.cc",
    "search_engines/template_url_service_test_util.h",
    "sessions/session_service_test_helper.cc",
    "sessions/session_service_test_helper.h",
    "signin/fake_account_reconcilor.cc",
    "signin/fake_account_reconcilor.h",
    "signin/fake_account_tracker_service.cc",
    "signin/fake_account_tracker_service.h",
    "signin/fake_profile_oauth2_token_service.cc",
    "signin/fake_profile_oauth2_token_service.h",
    "signin/fake_profile_oauth2_token_service_builder.cc",
    "signin/fake_profile_oauth2_token_service_builder.h",
    "signin/fake_signin_manager.cc",
    "signin/fake_signin_manager.h",
    "ssl/ssl_client_auth_requestor_mock.cc",
    "ssl/ssl_client_auth_requestor_mock.h",
    "sync/profile_sync_components_factory_mock.cc",
    "sync/profile_sync_components_factory_mock.h",
    "sync/profile_sync_service_mock.cc",
    "sync/profile_sync_service_mock.h",
  ]

  public_deps = [
    ":browser",
    "//chrome/browser/ui:test_support",
  ]
  deps = [
    "//base:prefs_test_support",
    "//chrome/browser",
    "//chrome/common",
    "//chrome/common/safe_browsing:proto",
    "//components/invalidation",
    "//components/invalidation:test_support",
    "//components/password_manager/core/browser:test_support",
    "//components/search_engines:test_support",
    "//content/test:test_support",
    "//chrome/app/theme:theme_resources",
    "//net:test_support",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/gfx",
  ]

  if (!is_ios) {
    deps += [
      "//components/sessions:test_support",
      "//google_apis:test_support",
    ]
  }

  if (enable_extensions) {
    sources += [
      "extensions/extension_action_test_util.cc",
      "extensions/extension_action_test_util.h",
    ]
    deps += [
      "//extensions:test_support",
    ]
  }

  if (is_chromeos) {
    sources += [
      "chromeos/app_mode/fake_cws.cc",
      "chromeos/app_mode/fake_cws.h",
      "chromeos/file_manager/fake_disk_mount_manager.cc",
      "chromeos/file_manager/fake_disk_mount_manager.h",
      "chromeos/input_method/mock_candidate_window_controller.cc",
      "chromeos/input_method/mock_candidate_window_controller.h",
      "chromeos/input_method/mock_input_method_engine.cc",
      "chromeos/input_method/mock_input_method_engine.h",
      "chromeos/input_method/mock_input_method_manager.cc",
      "chromeos/input_method/mock_input_method_manager.h",
      "chromeos/login/fake_login_utils.cc",
      "chromeos/login/fake_login_utils.h",
      "chromeos/login/mock_login_utils.cc",
      "chromeos/login/mock_login_utils.h",
      "chromeos/login/users/avatar/mock_user_image_manager.cc",
      "chromeos/login/users/avatar/mock_user_image_manager.h",
      "chromeos/login/users/fake_supervised_user_manager.cc",
      "chromeos/login/users/fake_supervised_user_manager.h",
      "chromeos/login/users/fake_user_manager.cc",
      "chromeos/login/users/fake_user_manager.h",
      "chromeos/login/users/mock_user_manager.cc",
      "chromeos/login/users/mock_user_manager.h",
      "chromeos/login/test/oobe_screen_waiter.cc",
      "chromeos/login/test/oobe_screen_waiter.h",
      "chromeos/login/test/js_checker.cc",
      "chromeos/login/test/js_checker.h",
      "chromeos/login/ui/mock_login_display.cc",
      "chromeos/login/ui/mock_login_display.h",
      "chromeos/login/ui/mock_login_display_host.cc",
      "chromeos/login/ui/mock_login_display_host.h",
      "chromeos/net/network_portal_detector_test_utils.cc",
      "chromeos/net/network_portal_detector_test_utils.h",
      "chromeos/policy/cloud_external_data_manager_base_test_util.cc",
      "chromeos/policy/cloud_external_data_manager_base_test_util.h",
      "chromeos/policy/device_policy_builder.cc",
      "chromeos/policy/device_policy_builder.h",
      "chromeos/policy/fake_device_cloud_policy_initializer.cc",
      "chromeos/policy/fake_device_cloud_policy_initializer.h",
      "chromeos/policy/stub_enterprise_install_attributes.cc",
      "chromeos/policy/stub_enterprise_install_attributes.h",
      "chromeos/settings/device_settings_test_helper.cc",
      "chromeos/settings/device_settings_test_helper.h",
      "chromeos/system/fake_input_device_settings.cc",
      "chromeos/system/fake_input_device_settings.h",
    ]
    configs += [ "//build/config/linux:dbus" ]
    deps += [ "//chromeos:test_support" ]
  }

  if (enable_configuration_policy) {
    sources += [
      "policy/test/local_policy_test_server.cc",
      "policy/test/local_policy_test_server.h",
    ]
    public_deps += [
      "//components/policy:policy_component_test_support",
      "//components/policy:test_support",
    ]
  }

  if (safe_browsing_mode == 1) {
    sources += [
      "extensions/fake_safe_browsing_database_manager.cc",
      "extensions/fake_safe_browsing_database_manager.h",
    ]
  }

  if (enable_extensions) {
    sources += [
      "drive/dummy_drive_service.cc",
      "drive/dummy_drive_service.h",
      "drive/fake_drive_service.cc",
      "drive/fake_drive_service.h",
      "drive/test_util.cc",
      "drive/test_util.h",
      "extensions/api/messaging/native_messaging_test_util.cc",
      "extensions/api/messaging/native_messaging_test_util.h",
      "extensions/extension_notification_observer.cc",
      "extensions/extension_notification_observer.h",
      "extensions/mock_extension_special_storage_policy.cc",
      "extensions/mock_extension_special_storage_policy.h",
      "extensions/test_blacklist.cc",
      "extensions/test_blacklist.h",
      "extensions/test_blacklist_state_fetcher.cc",
      "extensions/test_blacklist_state_fetcher.h",
      "extensions/test_extension_environment.cc",
      "extensions/test_extension_environment.h",
      "extensions/test_extension_prefs.cc",
      "extensions/test_extension_prefs.h",
      "extensions/test_extension_service.cc",
      "extensions/test_extension_service.h",
      "extensions/test_extension_system.cc",
      "extensions/test_extension_system.h",
      "media_galleries/media_galleries_test_util.cc",
      "media_galleries/media_galleries_test_util.h",
    ]
    deps += [
      "//components/storage_monitor:test_support",
    ]
  }

  if (enable_mdns) {
    sources += [
      "local_discovery/test_service_discovery_client.cc",
      "local_discovery/test_service_discovery_client.h",
    ]
  }

  if (enable_app_list) {
    sources += [
      "ui/app_list/test/chrome_app_list_test_support.cc",
      "ui/app_list/test/chrome_app_list_test_support.h",
    ]
  }

  if (enable_wifi_bootstrapping) {
    sources += [
      "local_discovery/wifi/mock_wifi_manager.cc",
      "local_discovery/wifi/mock_wifi_manager.h",
    ]
  }
}
