# Copyright 2016 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.

source_set("activity_services") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "activity_params.h",
    "activity_params.mm",
    "activity_scenario.h",
    "activity_service_coordinator.h",
    "activity_service_coordinator.mm",
    "activity_service_histograms.h",
    "activity_service_histograms.mm",
    "activity_service_mediator.h",
    "activity_service_mediator.mm",
    "activity_type_util.h",
    "activity_type_util.mm",
    "canonical_url_retriever.h",
    "canonical_url_retriever.mm",
  ]
  deps = [
    "//base",
    "//components/bookmarks/browser",
    "//components/bookmarks/common",
    "//components/prefs",
    "//components/ui_metrics",
    "//ios/chrome/app/strings:ios_strings",
    "//ios/chrome/browser",
    "//ios/chrome/browser/bookmarks",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/main:public",
    "//ios/chrome/browser/sync",
    "//ios/chrome/browser/tabs",
    "//ios/chrome/browser/ui/activity_services/activities",
    "//ios/chrome/browser/ui/activity_services/data",
    "//ios/chrome/browser/ui/activity_services/requirements",
    "//ios/chrome/browser/ui/commands",
    "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
    "//ios/chrome/browser/ui/default_promo",
    "//ios/chrome/browser/ui/main:default_browser_scene_agent",
    "//ios/chrome/browser/ui/main:scene_state_header",
    "//ios/chrome/browser/ui/util",
    "//ios/chrome/browser/ui/util:url_with_title",
    "//ios/chrome/browser/web",
    "//ios/chrome/browser/web_state_list",
    "//ui/base",
    "//url",
  ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "activity_service_mediator_unittest.mm",
    "activity_type_util_unittest.mm",
    "canonical_url_retriever_unittest.mm",
  ]
  deps = [
    ":activity_services",
    "//base",
    "//base/test:test_support",
    "//components/bookmarks/browser",
    "//components/bookmarks/test",
    "//components/prefs:test_support",
    "//components/send_tab_to_self",
    "//components/sync/driver:driver",
    "//components/ui_metrics",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser:pref_names",
    "//ios/chrome/browser/bookmarks",
    "//ios/chrome/browser/browser_state:test_support",
    "//ios/chrome/browser/download",
    "//ios/chrome/browser/snapshots",
    "//ios/chrome/browser/snapshots:test_utils",
    "//ios/chrome/browser/sync",
    "//ios/chrome/browser/tabs",
    "//ios/chrome/browser/ui:feature_flags",
    "//ios/chrome/browser/ui/activity_services/activities",
    "//ios/chrome/browser/ui/activity_services/data",
    "//ios/chrome/browser/ui/activity_services/requirements",
    "//ios/chrome/browser/ui/commands",
    "//ios/chrome/browser/ui/util",
    "//ios/testing:ocmock_support",
    "//ios/web",
    "//ios/web/common:user_agent",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base",
    "//ui/base:test_support",
    "//url",
  ]
}

source_set("eg2_tests") {
  configs += [
    "//build/config/compiler:enable_arc",
    "//build/config/ios:xctest_config",
  ]
  testonly = true

  sources = [ "activity_service_controller_egtest.mm" ]

  deps = [
    "//components/strings",
    "//ios/chrome/app/strings:ios_strings_grit",
    "//ios/chrome/test/earl_grey:eg_test_support+eg2",
    "//ios/testing/earl_grey:eg_test_support+eg2",
    "//ios/third_party/earl_grey2:test_lib",
    "//ios/web/public/test/http_server",
    "//ui/base",
  ]

  frameworks = [ "UIKit.framework" ]
}
