# Copyright 2022 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

static_library("worker") {
  # Creates cycle with //cobalt/dom
  check_includes = false

  sources = [
    "abstract_worker.h",
    "client.cc",
    "client.h",
    "clients.cc",
    "clients.h",
    "dedicated_worker.cc",
    "dedicated_worker.h",
    "dedicated_worker_global_scope.cc",
    "dedicated_worker_global_scope.h",
    "extendable_event.cc",
    "extendable_event.h",
    "extendable_message_event.cc",
    "extendable_message_event.h",
    "fetch_event.cc",
    "fetch_event.h",
    "navigation_preload_manager.cc",
    "navigation_preload_manager.h",
    "service_worker.cc",
    "service_worker.h",
    "service_worker_container.cc",
    "service_worker_container.h",
    "service_worker_context.cc",
    "service_worker_context.h",
    "service_worker_global_scope.cc",
    "service_worker_global_scope.h",
    "service_worker_jobs.cc",
    "service_worker_jobs.h",
    "service_worker_object.cc",
    "service_worker_object.h",
    "service_worker_persistent_settings.cc",
    "service_worker_persistent_settings.h",
    "service_worker_registration.cc",
    "service_worker_registration.h",
    "service_worker_registration_map.cc",
    "service_worker_registration_map.h",
    "service_worker_registration_object.cc",
    "service_worker_registration_object.h",
    "window_client.cc",
    "window_client.h",
    "worker.cc",
    "worker.h",
    "worker_consts.h",
    "worker_global_scope.cc",
    "worker_global_scope.h",
    "worker_location.h",
    "worker_navigator.cc",
    "worker_navigator.h",
    "worker_settings.cc",
    "worker_settings.h",
  ]

  deps = [
    "//cobalt/browser:generated_bindings",
    "//cobalt/loader",
    "//cobalt/web",
    "//net",
    "//url",
  ]

  public_deps = [
    # Additionally, ensure that the include directories for generated
    # headers are put on the include directories for targets that depend
    # on this one.
    "//cobalt/browser:generated_types",
    "//cobalt/web:window_timers",
  ]
}

target(gtest_target_type, "worker_test") {
  testonly = true
  has_pedantic_warnings = true

  sources = [
    "dedicated_worker_global_scope_test.cc",
    "extendable_message_event_test.cc",
    "service_worker_global_scope_test.cc",
    "worker_global_scope_test.cc",
    "worker_location_test.cc",
    "worker_navigator_test.cc",
  ]

  deps = [
    ":worker",
    "//cobalt/base",
    "//cobalt/browser:browser",
    "//cobalt/browser:generated_bindings",
    "//cobalt/browser:generated_types",
    "//cobalt/browser:test_dependencies_on_browser",
    "//cobalt/css_parser",
    "//cobalt/cssom",
    "//cobalt/dom/testing:dom_testing",
    "//cobalt/dom_parser",
    "//cobalt/loader",
    "//cobalt/script",
    "//cobalt/script/v8c:engine",
    "//cobalt/test:run_all_unittests",
    "//cobalt/web/testing:web_testing",
    "//cobalt/worker/testing:worker_testing",
    "//net:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//url",
  ]
}
