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

group("web_app_group") {
  public_configs = [ "//build/config/compiler:wexit_time_destructors" ]
}

group("web_app_test_group") {
}

source_set("web_applications") {
  sources = [
    "abstract_web_app_database.h",
    "external_web_apps.cc",
    "external_web_apps.h",
    "file_utils_wrapper.cc",
    "file_utils_wrapper.h",
    "system_web_app_manager.cc",
    "system_web_app_manager.h",
    "web_app.cc",
    "web_app.h",
    "web_app_database.cc",
    "web_app_database.h",
    "web_app_database_factory.cc",
    "web_app_database_factory.h",
    "web_app_icon_manager.cc",
    "web_app_icon_manager.h",
    "web_app_install_finalizer.cc",
    "web_app_install_finalizer.h",
    "web_app_install_manager.cc",
    "web_app_install_manager.h",
    "web_app_install_task.cc",
    "web_app_install_task.h",
    "web_app_registrar.cc",
    "web_app_registrar.h",
    "web_app_sync_bridge.cc",
    "web_app_sync_bridge.h",
    "web_app_sync_manager.cc",
    "web_app_sync_manager.h",
    "web_app_tab_helper.cc",
    "web_app_tab_helper.h",
  ]

  deps = [
    ":web_app_group",
    "//chrome/browser/web_applications/components",
    "//chrome/common",
    "//components/pref_registry",
    "//components/sync",
    "//content/public/browser",
    "//skia",
  ]

  if (is_chromeos) {
    deps += [
      "//ash/public/cpp:cpp",
      "//chromeos/constants",
      "//components/arc:arc_base",
      "//components/arc/common",
    ]
  }

  public_deps = [
    "//chrome/browser/web_applications/proto",
  ]
}

source_set("web_applications_test_support") {
  testonly = true

  sources = [
    "test/test_app_registrar.cc",
    "test/test_app_registrar.h",
    "test/test_data_retriever.cc",
    "test/test_data_retriever.h",
    "test/test_file_utils.cc",
    "test/test_file_utils.h",
    "test/test_install_finalizer.cc",
    "test/test_install_finalizer.h",
    "test/test_pending_app_manager.cc",
    "test/test_pending_app_manager.h",
    "test/test_system_web_app_manager.cc",
    "test/test_system_web_app_manager.h",
    "test/test_web_app_database.cc",
    "test/test_web_app_database.h",
    "test/test_web_app_database_factory.cc",
    "test/test_web_app_database_factory.h",
    "test/test_web_app_ui_manager.cc",
    "test/test_web_app_ui_manager.h",
    "test/test_web_app_url_loader.cc",
    "test/test_web_app_url_loader.h",
    "test/web_app_test.cc",
    "test/web_app_test.h",
  ]

  deps = [
    ":web_app_test_group",
    ":web_applications",
    "//base/test:test_support",
    "//chrome/browser",
    "//chrome/browser/web_applications/components",
    "//components/crx_file:crx_file",
    "//components/sync:test_support_model",
    "//content/test:test_support",
    "//testing/gtest",
  ]
}

source_set("web_applications_unit_tests") {
  testonly = true

  sources = [
    "web_app_database_unittest.cc",
    "web_app_icon_manager_unittest.cc",
    "web_app_install_manager_unittest.cc",
    "web_app_install_task_unittest.cc",
    "web_app_registrar_unittest.cc",
  ]

  deps = [
    ":web_app_test_group",
    ":web_applications",
    ":web_applications_test_support",
    "//base/test:test_support",
    "//chrome/browser",
    "//chrome/browser/web_applications/components",
    "//chrome/common",
    "//chrome/test:test_support",
    "//content/public/browser",
    "//content/test:test_support",
    "//skia",
  ]

  if (is_chromeos) {
    deps += [
      "//chrome/browser/chromeos",
      "//components/arc:arc",
      "//components/arc:arc_test_support",
      "//components/arc/common",
    ]
  }
}

# TODO(loyso): Erase this and move WebAppProvider into web_applications set.
# crbug.com/877898
source_set("web_applications_on_extensions") {
  sources = [
    "web_app_provider.cc",
    "web_app_provider.h",
    "web_app_provider_factory.cc",
    "web_app_provider_factory.h",
  ]

  deps = [
    ":web_app_group",
    ":web_applications",
    "//chrome/browser/web_applications/bookmark_apps",
    "//chrome/browser/web_applications/components",
    "//chrome/browser/web_applications/extensions",
    "//chrome/common",
    "//components/keyed_service/content",
    "//components/pref_registry:pref_registry",
    "//extensions/browser",
  ]
}

source_set("unit_tests") {
  testonly = true

  deps = [
    ":web_app_test_group",
    ":web_applications_unit_tests",
    "//chrome/browser/web_applications/bookmark_apps:unit_tests",
    "//chrome/browser/web_applications/components:unit_tests",
    "//chrome/browser/web_applications/extensions:unit_tests",
  ]
}

source_set("browser_tests") {
  testonly = true

  deps = [
    ":web_app_test_group",
    "//chrome/browser/web_applications/bookmark_apps:browser_tests",
    "//chrome/browser/web_applications/components:browser_tests",
    "//chrome/browser/web_applications/extensions:browser_tests",
  ]
}
