# Copyright 2017 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("//mojo/public/tools/bindings/mojom.gni")
import("//testing/test.gni")

component("blink_common") {
  output_name = "blink_common"

  visibility = [
    "//chrome/*",
    "//content/*",
    "//third_party/WebKit/*",
    ":*",
  ]

  defines = [ "BLINK_COMMON_IMPLEMENTATION=1" ]

  sources = [
    "client_hints/client_hints.cc",
    "client_hints/client_hints.h",
    "common_export.h",
    "device_memory/approximated_device_memory.cc",
    "device_memory/approximated_device_memory.h",
    "message_port/cloneable_message.cc",
    "message_port/cloneable_message.h",
    "message_port/cloneable_message_struct_traits.cc",
    "message_port/cloneable_message_struct_traits.h",
    "message_port/message_port_channel.cc",
    "message_port/message_port_channel.h",
    "message_port/transferable_message.cc",
    "message_port/transferable_message.h",
    "message_port/transferable_message_struct_traits.cc",
    "message_port/transferable_message_struct_traits.h",
    "mime_util/mime_util.cc",
    "mime_util/mime_util.h",
    "origin_manifest/origin_manifest.cc",
    "origin_manifest/origin_manifest.h",
    "origin_trials/trial_token.cc",
    "origin_trials/trial_token.h",
    "origin_trials/trial_token_validator.cc",
    "origin_trials/trial_token_validator.h",
  ]

  public_deps = [
    ":mojo_bindings",
    ":mojo_platform_bindings",
  ]

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

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

test("blink_common_unittests") {
  visibility = [ "*" ]

  sources = [
    "device_memory/approximated_device_memory_unittest.cc",
    "mime_util/mime_util_unittest.cc",
    "origin_manifest/origin_manifest_unittest.cc",
    "origin_trials/trial_token_unittest.cc",
    "origin_trials/trial_token_validator_unittest.cc",
    "test/run_all_unittests.cc",
  ]

  deps = [
    ":blink_common",
    "//base",
    "//base/test:test_support",
    "//net",
    "//testing/gtest",
    "//third_party/boringssl",
  ]
}

# This target includes all mojom interfaces which can be used from
# Source/platform. In particular these mojom interfaces can't use types that
# are typemapped to a type in Source/core.
mojom("mojo_platform_bindings") {
  sources = [
    "blob/blob.mojom",
    "blob/blob_registry.mojom",
    "blob/size_getter.mojom",
  ]

  public_deps = [
    "//mojo/common:common_custom_types",
    "//url/mojo:url_mojom_gurl",
  ]

  export_class_attribute = "BLINK_COMMON_EXPORT"
  export_define = "BLINK_COMMON_IMPLEMENTATION=1"
  export_header = "third_party/WebKit/common/common_export.h"

  export_class_attribute_blink = "PLATFORM_EXPORT"
  export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1"
  export_header_blink = "third_party/WebKit/Source/platform/PlatformExport.h"
}

# This target can include mojom interfaces which do use types that are
# typemapped to a type in Source/core. This also means these interfaces are not
# available from Source/platform.
mojom("mojo_bindings") {
  sources = [
    "message_port/message_port.mojom",
  ]

  public_deps = [
    ":mojo_platform_bindings",
  ]

  overridden_deps = [ ":mojo_platform_bindings" ]
  component_deps = []

  overridden_deps_blink = [ ":mojo_platform_bindings" ]
  component_deps_blink = [ "//third_party/WebKit/Source/platform" ]

  export_class_attribute = "BLINK_COMMON_EXPORT"
  export_define = "BLINK_COMMON_IMPLEMENTATION=1"
  export_header = "third_party/WebKit/common/common_export.h"

  export_class_attribute_blink = "CORE_EXPORT"
  export_define_blink = "BLINK_CORE_IMPLEMENTATION=1"
  export_header_blink = "third_party/WebKit/Source/core/CoreExport.h"
}
