# 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("browsing_data") {
  sources = [
    "browsing_data_change_listening.h",
    "browsing_data_counter_wrapper.cc",
    "browsing_data_counter_wrapper.h",
    "browsing_data_remover_helper.cc",
    "browsing_data_remover_helper.h",
    "cache_counter.cc",
    "cache_counter.h",
    "ios_browsing_data_counter_factory.cc",
    "ios_browsing_data_counter_factory.h",
    "ios_chrome_browsing_data_remover.h",
    "ios_chrome_browsing_data_remover.mm",
  ]
  deps = [
    "//base",
    "//components/autofill/core/browser",
    "//components/browser_sync",
    "//components/browsing_data/core",
    "//components/history/core/browser",
    "//components/keyed_service/core",
    "//components/omnibox/browser",
    "//components/password_manager/core/browser",
    "//components/prefs",
    "//components/sessions",
    "//ios/chrome/browser",
    "//ios/chrome/browser/autofill",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/history",
    "//ios/chrome/browser/passwords",
    "//ios/chrome/browser/search_engines",
    "//ios/chrome/browser/sessions",
    "//ios/chrome/browser/sessions:serialisation",
    "//ios/chrome/browser/signin",
    "//ios/chrome/browser/sync",
    "//ios/net",
    "//ios/public/provider/chrome/browser",
    "//ios/web",
    "//net",
    "//url",
  ]
  public_deps = [
    "//components/search_engines",
  ]
  allow_circular_includes_from = [ "//ios/chrome/browser/signin" ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "browsing_data_removal_controller_unittest.mm",
    "cache_counter_unittest.cc",
  ]
  deps = [
    ":browsing_data",
    ":browsing_data_internal",
    "//base",
    "//base/test:test_support",
    "//components/browsing_data/core",
    "//components/prefs",
    "//components/prefs:test_support",
    "//ios/chrome/browser/browser_state:test_support",
    "//ios/web",
    "//ios/web:test_support",
    "//net",
    "//testing/gtest",
    "//third_party/ocmock",
  ]
}

source_set("browsing_data_internal") {
  sources = [
    "browsing_data_removal_controller.h",
    "browsing_data_removal_controller.mm",
  ]
  deps = [
    ":browsing_data",
    "//base",
    "//components/browsing_data/core",
    "//components/open_from_clipboard",
    "//components/signin/ios/browser",
    "//ios/chrome/browser:browser_internal",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/native_app_launcher:native_app_launcher_internal",
    "//ios/chrome/browser/sessions:serialisation",
    "//ios/chrome/browser/signin",
    "//ios/chrome/browser/snapshots",
    "//ios/chrome/browser/ui:ui_internal",
    "//ios/public/provider/chrome/browser",
    "//ios/public/provider/chrome/browser/native_app_launcher",
    "//ios/web",
    "//net",
  ]
  libs = [ "WebKit.framework" ]
}
