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

import("//build/buildflag_header.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/features.gni")
import("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

# Public common API headers, mojom and libraries that can be linked and
# referenced both by browser-side and renderer-side components.
component("common") {
  output_name = "blink_common"

  public_deps = [
    "//third_party/blink/public/common:headers",
    "//third_party/blink/public/mojom:mojom_core",
  ]
  deps = [
    "//third_party/blink/common",
  ]
}

source_set("headers") {
  visibility = [
    "//chrome/*",
    "//content/*",
    "//third_party/blink/*",
    "//components/*",
    "//storage/*",
    ":*",
  ]

  sources = [
    "associated_interfaces/associated_interface_provider.h",
    "associated_interfaces/associated_interface_registry.h",
    "blob/blob_utils.h",
    "client_hints/client_hints.h",
    "device_memory/approximated_device_memory.h",
    "experiments/memory_ablation_experiment.h",
    "feature_policy/feature_policy.h",
    "features.h",
    "frame/frame_policy.h",
    "frame/sandbox_flags.h",
    "frame/user_activation_state.h",
    "frame/user_activation_update_source.h",
    "frame/user_activation_update_type.h",
    "manifest/manifest.h",
    "manifest/manifest_icon_selector.h",
    "manifest/manifest_share_target_util.h",
    "manifest/web_display_mode.h",
    "message_port/cloneable_message.h",
    "message_port/message_port_channel.h",
    "message_port/string_message_codec.h",
    "message_port/transferable_message.h",
    "mime_util/mime_util.h",
    "origin_policy/origin_policy.h",
    "origin_trials/origin_trial_policy.h",
    "origin_trials/trial_token.h",
    "origin_trials/trial_token_validator.h",
    "page/launching_process_state.h",
    "picture_in_picture/picture_in_picture_control_info.h",
    "privacy_preferences.h",
    "screen_orientation/web_screen_orientation_enum_traits.h",
    "screen_orientation/web_screen_orientation_lock_type.h",
    "screen_orientation/web_screen_orientation_type.h",
    "service_worker/service_worker_status_code.h",
    "service_worker/service_worker_type_converters.h",
    "service_worker/service_worker_utils.h",
  ]

  public_deps = [
    "//skia",
    "//third_party/blink/public/mojom:mojom_core_headers",
  ]

  deps = [
    "//base",
    "//mojo/public/cpp/system",
    "//net",
  ]

  # iOS doesn't use and must not depend on //media
  if (!is_ios) {
    deps += [ "//media" ]
  }

  if (is_android) {
    sources += [
      "font_unique_name_lookup/font_table_matcher.h",
      "font_unique_name_lookup/icu_fold_case_util.h",
    ]
    deps += [ ":font_unique_name_table_proto" ]
  }
}

if (is_android) {
  proto_library("font_unique_name_table_proto") {
    sources = [
      "font_unique_name_lookup/font_unique_name_table.proto",
    ]
  }
}
