# 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/features.gni")
import("//build/config/ui.gni")

# Collection of all components. You wouldn't link to this, but this is rather
# to reference the files so they can be compiled by the build system.
group("all_components") {
  testonly = true  # You shouldn't actually link to this.
  visibility = [ "//:*" ]  # Only for the root targets to bring in.

  deps = [
    "//components/auto_login_parser",
    "//components/autofill/content/browser",
    "//components/autofill/content/common",
    "//components/autofill/content/renderer",
    "//components/bookmarks/browser",
    "//components/bookmarks/common",
    "//components/bookmarks/test",
    "//components/captive_portal",
    "//components/cdm/browser",
    "//components/cdm/common",
    "//components/cdm/renderer",
    "//components/cloud_devices/common",
    "//components/component_updater",
    "//components/content_settings/core/browser",
    "//components/content_settings/core/common",
    "//components/crash/app",
    "//components/crash/browser",
    "//components/crx_file",
    "//components/data_reduction_proxy/browser",
    "//components/data_reduction_proxy/common",
    "//components/dom_distiller/core",
    "//components/domain_reliability",
    "//components/enhanced_bookmarks",
    "//components/favicon/core",
    "//components/favicon_base",
    "//components/feedback",
    "//components/gcm_driver",
    "//components/google/core/browser",
    "//components/history/core/browser",
    "//components/history/core/common",
    "//components/history/core/test",
    "//components/infobars/core",
    "//components/infobars/test:test_support",
    "//components/invalidation",
    "//components/json_schema",
    "//components/keyed_service/content",
    "//components/language_usage_metrics",
    "//components/leveldb_proto",
    "//components/metrics",
    "//components/native_app_window",
    "//components/navigation_interception",
    "//components/navigation_metrics",
    "//components/network_time",
    "//components/omaha_query_params",
    "//components/omnibox",
    "//components/onc",
    "//components/os_crypt",
    "//components/pairing",
    "//components/password_manager/content/browser",
    "//components/password_manager/core/browser",
    "//components/password_manager/core/common",
    "//components/pdf/browser",
    "//components/pdf/common",
    "//components/pdf/renderer",
    "//components/plugins/renderer",
    "//components/policy",
    "//components/power",
    "//components/precache/core",
    "//components/precache/content",
    "//components/pref_registry",
    "//components/proximity_auth",
    "//components/query_parser",
    "//components/rappor",
    "//components/renderer_context_menu",
    "//components/resources:components_resources",
    "//components/search",
    "//components/search_engines",
    "//components/search_provider_logos",
    "//components/sessions",
    "//components/signin/core/browser",
    "//components/startup_metric_utils",
    "//components/strings",
    "//components/sync_driver",
    "//components/tracing",
    "//components/translate/content/browser",
    "//components/translate/content/common",
    "//components/translate/content/renderer",
    "//components/translate/core/browser",
    "//components/translate/core/common",
    "//components/url_fixer",
    "//components/url_matcher",
    "//components/user_manager",
    "//components/user_prefs",
    "//components/variations",
    "//components/visitedlink/browser",
    "//components/visitedlink/common",
    "//components/visitedlink/renderer",
    "//components/web_cache/browser",
    "//components/web_cache/common",
    "//components/web_cache/renderer",
    "//components/web_modal",
    "//components/webdata/common",
    "//components/wifi",
  ]

  if (!is_win && !is_mac) {
    deps -= [ "//components/wifi" ]
  }
  if (!is_chromeos) {
    deps -= [ "//components/pairing" ]
  }
  if (!toolkit_views) {
    deps -= [ "//components/native_app_window" ]
  }

  if (is_ios) {
    deps -= [ "//components/keyed_service/content" ]
  }

  if (!enable_plugins) {
    deps -= [
      "//components/pdf/browser",
      "//components/pdf/common",
      "//components/pdf/renderer",
    ]
  }

  if (is_android) {
    deps -= [
      "//components/autofill/content/browser",  # Blocked on content/blink.
      "//components/autofill/content/common",  # Blocked on content.
      "//components/autofill/content/renderer",  # Blocked on content/blink.
      "//components/crash/app",  # Should work, needs checking.
      "//components/crash/browser",  # Should work, needs checking.
      "//components/captive_portal",  # Should work, needs checking.
      "//components/cloud_devices/common",  # Should work, needs checking.
      "//components/cdm/browser",  # Blocked on content.
      "//components/cdm/common",  # Blocked on content.
      "//components/cdm/renderer",  # Blocked on content.
      "//components/data_reduction_proxy/browser",  # Should work, needs checking.
      "//components/data_reduction_proxy/common",  # Should work, needs checking.
      "//components/dom_distiller/core",  # Blocked on content.
      "//components/domain_reliability",  # Blocked on content.
      "//components/favicon_base",  # Should work, needs checking.
      "//components/favicon/core",  # Blocked on keyed service.
      "//components/feedback",  # Blocked on content.
      "//components/gcm_driver",  # Should work, needs checking.
      "//components/google/core/browser",  # Should work, needs checking.
      "//components/history/core/browser",  # Should work, needs checking.
      "//components/history/core/common",  # Should work, needs checking.
      "//components/history/core/test",  # Should work, needs checking.
      "//components/infobars/core",  # Should work, needs checking.
      "//components/infobars/test:test_support",  # Should work, needs checking.
      "//components/invalidation",  # Should work, needs checking.
      "//components/json_schema",  # Should work, needs checking.
      "//components/keyed_service/content",  # Blocked on content.
      "//components/navigation_interception",  # Blocked on content.
      "//components/omnibox",  # Should work, needs checking.
      "//components/password_manager/content/browser",  # Blocked on content.
      "//components/password_manager/core/browser",  # Should work, needs checking.
      "//components/password_manager/core/common",  # Should work, needs checking.
      "//components/plugins/renderer",  # Blocked on blink.
      "//components/power",  # Blocked on content.
      "//components/policy",  # Blocked on content (indirectly via autofill).
      "//components/precache/content",  # Blocked on content.
      "//components/precache/core",  # Should work, needs checking.
      "//components/rappor",  # Should work, needs checking.
      "//components/renderer_context_menu",  # Blocked on content.
      "//components/search_engines",  # Should work, needs checking.
      "//components/search_provider_logos",  # Should work, needs checking.
      "//components/sessions",  # Blocked on content.
      "//components/signin/core/browser",  # Should work, needs checking.
      "//components/translate/content/browser",  # Blocked on content.
      "//components/translate/content/common",  # Blocked on content.
      "//components/translate/content/renderer",  # Blocked on content.
      "//components/user_prefs",  # Blocked on content.
      "//components/visitedlink/browser",  # Blocked on content.
      "//components/visitedlink/common",  # Blocked on content.
      "//components/visitedlink/renderer",  # Blocked on blink
      "//components/web_cache/browser",  # Blocked on content and blink.
      "//components/web_cache/renderer",  # Blocked on content and blink.
      "//components/web_modal",  # Blocked on content.
    ]
  }

  if (!is_ios && !is_android) {
    deps += [
      "//components/copresence",
      "//components/storage_monitor",
    ]
  }
}

# TODO(GYP) enable when it links.
if (false) {

# To add a unit test to this target, make a "unit_test" source_set in your
# component (it's important to use a source_set instead of a static library or
# no tests will run) and add a reference here. You can add more than one unit
# test target if convenient.
test("components_unittests") {
  sources = [
    "test/run_all_unittests.cc",
  ]

  # Add only ":unit_tests" dependencies here. If your tests have dependencies
  # (this would at least include the component itself), they should be on the
  # test source set and not here.
  deps = [
    "//components/auto_login_parser:unit_tests",
    "//components/autofill/content/browser:unit_tests",
    "//components/autofill/core/browser:unit_tests",
    "//components/autofill/core/common:unit_tests",
    "//components/bookmarks/browser:unit_tests",
    "//components/captive_portal:unit_tests",
    "//components/cloud_devices/common:unit_tests",
    "//components/component_updater:unit_tests",
    "//components/content_settings/core/browser:unit_tests",
    "//components/content_settings/core/common:unit_tests",
    "//components/crx_file:unit_tests",
    "//components/data_reduction_proxy/browser:unit_tests",
    "//components/data_reduction_proxy/common:unit_tests",
    "//components/dom_distiller/core:unit_tests",
    "//components/domain_reliability:unit_tests",
    "//components/omnibox:unit_tests",
    "//components/ownership:unit_tests",
    "//components/proximity_auth:unit_tests",
  ]

  # TODO(GYP) need this target.
  #'breakpad/app/crash_keys_win_unittest.cc',

  # Precache tests need these defines.
  #configs += [ "//components/precache/core:precache_config" ]
}

}
