# 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_account_info.cc",
    "h5vcc_account_info.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 += [
      "//net: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",
  ]
}
