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

config("h5vcc_internal_config") {
  # For cobalt_build_id.h
  include_dirs = [ target_gen_dir ]
}

config("h5vcc_external_config") {
  defines = []
  if (enable_account_manager) {
    defines += [ "COBALT_ENABLE_ACCOUNT_MANAGER" ]
  }
}

static_library("h5vcc") {
  has_pedantic_warnings = true

  sources = [
    "h5vcc.cc",
    "h5vcc.h",
    "h5vcc_accessibility.cc",
    "h5vcc_accessibility.h",
    "h5vcc_audio_config.cc",
    "h5vcc_audio_config.h",
    "h5vcc_audio_config_array.cc",
    "h5vcc_audio_config_array.h",
    "h5vcc_crash_log.cc",
    "h5vcc_crash_log.h",
    "h5vcc_deep_link_event_target.cc",
    "h5vcc_deep_link_event_target.h",
    "h5vcc_event_listener_container.h",
    "h5vcc_metrics.cc",
    "h5vcc_metrics.h",
    "h5vcc_net_log.cc",
    "h5vcc_net_log.h",
    "h5vcc_platform_service.cc",
    "h5vcc_platform_service.h",
    "h5vcc_runtime.cc",
    "h5vcc_runtime.h",
    "h5vcc_runtime_event_target.cc",
    "h5vcc_runtime_event_target.h",
    "h5vcc_screen.cc",
    "h5vcc_screen.h",
    "h5vcc_settings.cc",
    "h5vcc_settings.h",
    "h5vcc_storage.cc",
    "h5vcc_storage.h",
    "h5vcc_system.cc",
    "h5vcc_system.h",
    "h5vcc_trace_event.cc",
    "h5vcc_trace_event.h",
  ]
  configs += [ ":h5vcc_internal_config" ]
  public_configs = [ ":h5vcc_external_config" ]
  deps = [
    ":metric_event_handler_wrapper",
    ":script_callback_wrapper",
    "//cobalt/base",
    "//cobalt/browser:browser_switches",
    "//cobalt/browser/metrics",
    "//cobalt/build:cobalt_build_id",
    "//cobalt/cache",
    "//cobalt/configuration",
    "//cobalt/dom",
    "//cobalt/media",
    "//cobalt/network",
    "//cobalt/persistent_storage:persistent_settings",
    "//cobalt/script",
    "//cobalt/speech",
    "//cobalt/storage",
    "//cobalt/trace_event",
    "//cobalt/watchdog",
    "//cobalt/web:dom_exception",
    "//cobalt/worker",
    "//net",
    "//starboard:starboard_group",
    "//third_party/protobuf:protobuf_lite",
  ]
  if (enable_in_app_dial) {
    sources += [
      "dial/dial_http_request.cc",
      "dial/dial_http_request.h",
      "dial/dial_http_response.cc",
      "dial/dial_http_response.h",
      "dial/dial_server.cc",
      "dial/dial_server.h",
    ]
    deps += [
      "//cobalt/network:cobalt_dial_server",
      "//net:http_server",
    ]
  }

  if (enable_account_manager) {
    sources += [
      "h5vcc_account_manager_internal.cc",
      "h5vcc_account_manager_internal.h",
    ]
  }

  if (sb_is_evergreen) {
    sources += [
      "h5vcc_updater.cc",
      "h5vcc_updater.h",
    ]
    deps += [ "//cobalt/updater" ]
  }
}

source_set("script_callback_wrapper") {
  sources = [ "script_callback_wrapper.h" ]

  deps = [ "//cobalt/script" ]
}

source_set("metric_event_handler_wrapper") {
  sources = [ "metric_event_handler_wrapper.h" ]

  deps = [
    ":script_callback_wrapper",
    "//cobalt/browser:generated_types",
    "//cobalt/script",
  ]
}
