# 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/config/jumbo.gni")
import("//third_party/blink/renderer/platform/platform.gni")

# Intentionally depends on generator targets so to depend only on generated
# mojo biding header files. This is needed to use mojo interfaces from a static
# library such as platform:test_support without causing duplicated symbols.
# There is no tool to detect missing indirect generated header dependency today
# and this is easy to be broken when mojom files are updated to depend on
# another.
jumbo_source_set("generator") {
  public_deps = [
    "//third_party/blink/public/mojom:mojom_platform_blink_headers",
    "//url/mojom:url_mojom_gurl_blink_headers",
    "//url/mojom:url_mojom_origin_blink_headers",
  ]
}

blink_platform_sources("blob") {
  sources = [
    "blob_bytes_provider.cc",
    "blob_bytes_provider.h",
    "blob_data.cc",
    "blob_data.h",
    "blob_registry.cc",
    "blob_registry.h",
    "blob_url.cc",
    "blob_url.h",
    "serialized_blob_struct_traits.cc",
    "serialized_blob_struct_traits.h",
  ]

  deps = [
    "//services/network/public/mojom:mojom_blink",
  ]
}

jumbo_source_set("unit_tests") {
  visibility = [ "//third_party/blink/renderer/platform:*" ]
  testonly = true

  sources = [
    "blob_bytes_provider_test.cc",
    "blob_data_test.cc",
  ]

  configs += [ "//third_party/blink/renderer/platform:blink_platform_config" ]

  deps = [
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/blink/renderer/platform:platform",
  ]
}

jumbo_source_set("test_support") {
  # This target defines test files for platform:test_support that
  # blink_platform_unittests and blink_unittests can use.
  visibility = [ "//third_party/blink/renderer/platform:test_support" ]
  testonly = true

  # Source files that can be called from blink_platform_unittests and
  # blink_unittests.
  sources = [
    "testing/fake_blob.cc",
    "testing/fake_blob.h",
    "testing/fake_blob_registry.cc",
    "testing/fake_blob_registry.h",
    "testing/fake_blob_url_store.cc",
    "testing/fake_blob_url_store.h",
  ]

  configs += [
    "//third_party/blink/renderer:non_test_config",
    "//third_party/blink/renderer/platform:blink_platform_config",
  ]

  public_deps = [
    ":generator",
    "//third_party/blink/public:blink_headers",
  ]
}
