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

static_library("sync_sessions") {
  sources = [
    "favicon_cache.cc",
    "favicon_cache.h",
    "local_session_event_handler_impl.cc",
    "local_session_event_handler_impl.h",
    "local_session_event_router.h",
    "lost_navigations_recorder.cc",
    "lost_navigations_recorder.h",
    "open_tabs_ui_delegate.cc",
    "open_tabs_ui_delegate.h",
    "open_tabs_ui_delegate_impl.cc",
    "open_tabs_ui_delegate_impl.h",
    "proxy_tabs_data_type_controller.cc",
    "proxy_tabs_data_type_controller.h",
    "session_model_type_controller.cc",
    "session_model_type_controller.h",
    "session_store.cc",
    "session_store.h",
    "session_sync_bridge.cc",
    "session_sync_bridge.h",
    "session_sync_prefs.cc",
    "session_sync_prefs.h",
    "session_sync_service.cc",
    "session_sync_service.h",
    "session_sync_service_impl.cc",
    "session_sync_service_impl.h",
    "sessions_global_id_mapper.cc",
    "sessions_global_id_mapper.h",
    "sync_sessions_client.cc",
    "sync_sessions_client.h",
    "synced_session.cc",
    "synced_session.h",
    "synced_session_tracker.cc",
    "synced_session_tracker.h",
    "synced_tab_delegate.cc",
    "synced_tab_delegate.h",
    "synced_window_delegate.h",
    "synced_window_delegates_getter.cc",
    "synced_window_delegates_getter.h",
    "tab_node_pool.cc",
    "tab_node_pool.h",
    "task_tracker.cc",
    "task_tracker.h",
  ]

  public_deps = [
    "//components/sessions",
    "//components/sync",
    "//components/sync:device_info",
  ]

  deps = [
    "//base",
    "//components/bookmarks/browser",
    "//components/favicon/core",
    "//components/history/core/browser",
    "//components/keyed_service/core",
    "//components/prefs",
    "//components/variations",
    "//components/version_info",
    "//google_apis",
    "//ui/base:base",
    "//ui/gfx",
    "//url",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "mock_sync_sessions_client.cc",
    "mock_sync_sessions_client.h",
    "session_sync_test_helper.cc",
    "session_sync_test_helper.h",
    "test_matchers.cc",
    "test_matchers.h",
    "test_synced_window_delegates_getter.cc",
    "test_synced_window_delegates_getter.h",
  ]

  public_deps = [
    ":sync_sessions",
    "//base",
    "//components/sessions:test_support",
    "//components/sync",
    "//testing/gmock",
    "//testing/gtest",
    "//url",
  ]

  deps = []
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "favicon_cache_unittest.cc",
    "local_session_event_handler_impl_unittest.cc",
    "lost_navigations_recorder_unittest.cc",
    "open_tabs_ui_delegate_impl_unittest.cc",
    "session_store_unittest.cc",
    "session_sync_bridge_unittest.cc",
    "sessions_global_id_mapper_unittest.cc",
    "synced_session_tracker_unittest.cc",
    "synced_session_unittest.cc",
    "tab_node_pool_unittest.cc",
    "task_tracker_unittest.cc",
  ]

  deps = [
    ":sync_sessions",
    ":test_support",
    "//base/test:test_support",
    "//components/bookmarks/browser",
    "//components/favicon/core/test:test_support",
    "//components/history/core/browser",
    "//components/prefs:test_support",
    "//components/sessions:test_support",
    "//components/sync",
    "//components/sync:test_support_driver",
    "//components/sync:test_support_engine",
    "//components/sync:test_support_model",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/base:base",
    "//url",
  ]
}
