# Copyright 2017 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("web_state_list") {
  sources = [
    "active_web_state_observation_forwarder.h",
    "active_web_state_observation_forwarder.mm",
    "all_web_state_observation_forwarder.h",
    "all_web_state_observation_forwarder.mm",
    "web_state_list.h",
    "web_state_list.mm",
    "web_state_list_delegate.h",
    "web_state_list_favicon_driver_observer.h",
    "web_state_list_favicon_driver_observer.mm",
    "web_state_list_observer.h",
    "web_state_list_observer.mm",
    "web_state_list_observer_bridge.h",
    "web_state_list_observer_bridge.mm",
    "web_state_list_order_controller.h",
    "web_state_list_order_controller.mm",
    "web_state_list_serialization.h",
    "web_state_list_serialization.mm",
    "web_state_opener.h",
    "web_state_opener.mm",
  ]
  deps = [
    "//base",
    "//components/favicon/core",
    "//components/favicon/ios",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/sessions:restoration_observer",
    "//ios/chrome/browser/sessions:serialisation",
    "//ios/web",
    "//ios/web/public/session",
  ]
  libs = [ "Foundation.framework" ]
  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("agents") {
  sources = [
    "tab_insertion_browser_agent.h",
    "tab_insertion_browser_agent.mm",
    "web_state_list_metrics_browser_agent.h",
    "web_state_list_metrics_browser_agent.mm",
  ]
  deps = [
    ":web_state_list",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/main:public",
    "//ios/chrome/browser/sessions:restoration_agent",
    "//ios/chrome/browser/sessions:restoration_observer",
    "//ios/web/public",
  ]
  libs = [ "Foundation.framework" ]
  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("test_support") {
  testonly = true
  sources = [
    "fake_web_state_list_delegate.h",
    "fake_web_state_list_delegate.mm",
  ]
  deps = [
    ":web_state_list",
    "//base",
  ]
  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "active_web_state_observation_forwarder_unittest.mm",
    "all_web_state_observation_forwarder_unittest.mm",
    "tab_insertion_browser_agent_unittest.mm",
    "web_state_list_favicon_driver_observer_unittest.mm",
    "web_state_list_order_controller_unittest.mm",
    "web_state_list_serialization_unittest.mm",
    "web_state_list_unittest.mm",
    "web_state_opener_unittest.mm",
  ]
  deps = [
    ":agents",
    ":test_support",
    ":web_state_list",
    "//base",
    "//components/favicon/ios",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/browser_state:test_support",
    "//ios/chrome/browser/main",
    "//ios/chrome/browser/main:test_support",
    "//ios/chrome/browser/sessions:serialisation",
    "//ios/chrome/browser/web",
    "//ios/web",
    "//ios/web/public/session",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//net",
    "//testing/gtest",
    "//ui/gfx",
    "//url",
  ]
  configs += [ "//build/config/compiler:enable_arc" ]
}
