# Copyright 2014 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/split_static_library.gni")
import("//build/config/chromecast_build.gni")
import("//third_party/WebKit/Source/bindings/bindings.gni")
import("//third_party/WebKit/Source/bindings/modules/v8/generated.gni")
import("//third_party/WebKit/Source/bindings/modules/v8/v8.gni")
import("//third_party/WebKit/Source/build/scripts/scripts.gni")
import("//third_party/WebKit/Source/modules/modules.gni")
import("//third_party/WebKit/Source/modules/modules_idl_files.gni")

visibility = [ "//third_party/WebKit/Source/*" ]

if (!is_component_build && is_win) {
  # This target as a static library (for non-component builds) is >2GB for
  # official builds and some goma builds on Windows. This causes linking to
  # fail. As a workaround, force using a split static library for these
  # configurations.
  modules_target_type = "split_static_library"
} else {
  modules_target_type = "component"
}

config("modules_implementation") {
  defines = [ "BLINK_MODULES_IMPLEMENTATION=1" ]

  if (is_chromecast) {
    defines += [
      "BLINK_MSLOG=LOG(INFO)",
      "BLINK_SBLOG=LOG(INFO)",
    ]
  }
}

make_names("module_names") {
  in_files = [ "indexeddb/IndexedDBNames.json5" ]
  outputs = [
    "$blink_modules_output_dir/IndexedDBNames.cpp",
    "$blink_modules_output_dir/IndexedDBNames.h",
  ]
  deps = []  # Don't use default deps (otherwise it will be circular).
}

target("jumbo_" + modules_target_type, "modules") {
  output_name = "blink_modules"

  if (modules_target_type == "split_static_library") {
    split_count = 5
  }

  visibility = []  # Allow re-assignment of list.
  visibility = [ "//third_party/WebKit/*" ]

  sources = [
    "EventModules.h",
    "EventModulesFactory.h",
    "EventTargetModules.h",
    "ModulesExport.h",
    "ModulesInitializer.cpp",
    "ModulesInitializer.h",
  ]

  # Compile sources generated by module_names script.
  sources += get_target_outputs(":module_names")

  sources += bindings_modules_v8_files
  sources += rebase_path(
          [ bindings_generated_v8_context_snapshot_external_references_file ],
          ".",
          "//")

  configs += [
    ":modules_implementation",

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
    "//third_party/WebKit/Source:config",
    "//third_party/WebKit/Source:non_test_config",
    "//third_party/WebKit/Source:inside_blink",
    "//third_party/WebKit/Source/core:blink_core_pch",
  ]

  deps = [
    ":make_modules_generated",
    ":module_names",
    "//device/geolocation/public/interfaces:interfaces_blink",
    "//third_party/WebKit/Source/bindings/modules:generated",
    "//third_party/WebKit/Source/bindings/modules/v8:bindings_modules_conditional_features",
    "//third_party/WebKit/Source/bindings/modules/v8:bindings_modules_impl",
    "//third_party/WebKit/Source/core",
    "//third_party/WebKit/Source/modules/accessibility",
    "//third_party/WebKit/Source/modules/app_banner",
    "//third_party/WebKit/Source/modules/audio_output_devices",
    "//third_party/WebKit/Source/modules/background_fetch",
    "//third_party/WebKit/Source/modules/background_sync",
    "//third_party/WebKit/Source/modules/battery",
    "//third_party/WebKit/Source/modules/beacon",
    "//third_party/WebKit/Source/modules/bluetooth",
    "//third_party/WebKit/Source/modules/broadcastchannel",
    "//third_party/WebKit/Source/modules/budget",
    "//third_party/WebKit/Source/modules/cachestorage",
    "//third_party/WebKit/Source/modules/canvas",
    "//third_party/WebKit/Source/modules/canvas2d",
    "//third_party/WebKit/Source/modules/compositorworker",
    "//third_party/WebKit/Source/modules/credentialmanager",
    "//third_party/WebKit/Source/modules/crypto",
    "//third_party/WebKit/Source/modules/csspaint",
    "//third_party/WebKit/Source/modules/device_orientation",
    "//third_party/WebKit/Source/modules/document_metadata",
    "//third_party/WebKit/Source/modules/donottrack",
    "//third_party/WebKit/Source/modules/encoding",
    "//third_party/WebKit/Source/modules/encryptedmedia",
    "//third_party/WebKit/Source/modules/eventsource",
    "//third_party/WebKit/Source/modules/exported",
    "//third_party/WebKit/Source/modules/fetch",
    "//third_party/WebKit/Source/modules/filesystem",
    "//third_party/WebKit/Source/modules/gamepad",
    "//third_party/WebKit/Source/modules/geolocation",
    "//third_party/WebKit/Source/modules/imagebitmap",
    "//third_party/WebKit/Source/modules/imagecapture",
    "//third_party/WebKit/Source/modules/indexeddb",
    "//third_party/WebKit/Source/modules/installation",
    "//third_party/WebKit/Source/modules/installedapp",
    "//third_party/WebKit/Source/modules/keyboard_lock",
    "//third_party/WebKit/Source/modules/media_capabilities",
    "//third_party/WebKit/Source/modules/media_controls",
    "//third_party/WebKit/Source/modules/mediacapturefromelement",
    "//third_party/WebKit/Source/modules/mediarecorder",
    "//third_party/WebKit/Source/modules/mediasession",
    "//third_party/WebKit/Source/modules/mediasource",
    "//third_party/WebKit/Source/modules/mediastream",
    "//third_party/WebKit/Source/modules/navigatorcontentutils",
    "//third_party/WebKit/Source/modules/netinfo",
    "//third_party/WebKit/Source/modules/nfc",
    "//third_party/WebKit/Source/modules/notifications",
    "//third_party/WebKit/Source/modules/offscreencanvas",
    "//third_party/WebKit/Source/modules/offscreencanvas2d",
    "//third_party/WebKit/Source/modules/payments",
    "//third_party/WebKit/Source/modules/peerconnection",
    "//third_party/WebKit/Source/modules/permissions",
    "//third_party/WebKit/Source/modules/plugins",
    "//third_party/WebKit/Source/modules/presentation",
    "//third_party/WebKit/Source/modules/push_messaging",
    "//third_party/WebKit/Source/modules/quota",
    "//third_party/WebKit/Source/modules/remoteplayback",
    "//third_party/WebKit/Source/modules/screen_orientation",
    "//third_party/WebKit/Source/modules/sensor",
    "//third_party/WebKit/Source/modules/serviceworkers",
    "//third_party/WebKit/Source/modules/shapedetection",
    "//third_party/WebKit/Source/modules/speech",
    "//third_party/WebKit/Source/modules/srcobject",
    "//third_party/WebKit/Source/modules/storage",
    "//third_party/WebKit/Source/modules/time_zone_monitor",
    "//third_party/WebKit/Source/modules/vibration",
    "//third_party/WebKit/Source/modules/vr",
    "//third_party/WebKit/Source/modules/wake_lock",
    "//third_party/WebKit/Source/modules/webaudio",
    "//third_party/WebKit/Source/modules/webauth",
    "//third_party/WebKit/Source/modules/webdatabase",
    "//third_party/WebKit/Source/modules/webgl",
    "//third_party/WebKit/Source/modules/webmidi",
    "//third_party/WebKit/Source/modules/webshare",
    "//third_party/WebKit/Source/modules/websockets",
    "//third_party/WebKit/Source/modules/webusb",
    "//third_party/icu",
    "//third_party/sqlite",
    "//third_party/zlib",
  ]

  if (is_win) {
    cflags = [ "/wd4334" ]  # Result of 32-bit shift implicitly converted to 64 bits.
  }

  if (remove_webcore_debug_symbols) {
    configs -= [ "//build/config/compiler:default_symbols" ]
    configs += remove_webcore_symbols_config
  }
}

source_set("modules_testing") {
  sources = [
    "$bindings_modules_v8_output_dir/V8InternalsPartial.cpp",
    "$bindings_modules_v8_output_dir/V8InternalsPartial.h",
    "$bindings_modules_v8_output_dir/V8WorkerInternalsPartial.cpp",
    "$bindings_modules_v8_output_dir/V8WorkerInternalsPartial.h",
    "accessibility/testing/InternalsAccessibility.cpp",
    "accessibility/testing/InternalsAccessibility.h",
    "fetch/testing/InternalsFetch.cpp",
    "fetch/testing/InternalsFetch.h",
    "fetch/testing/WorkerInternalsFetch.cpp",
    "fetch/testing/WorkerInternalsFetch.h",
    "mediastream/testing/InternalsMediaStream.cpp",
    "mediastream/testing/InternalsMediaStream.h",
    "navigatorcontentutils/testing/InternalsNavigatorContentUtils.cpp",
    "navigatorcontentutils/testing/InternalsNavigatorContentUtils.h",
    "navigatorcontentutils/testing/NavigatorContentUtilsClientMock.cpp",
    "navigatorcontentutils/testing/NavigatorContentUtilsClientMock.h",
    "peerconnection/testing/InternalsRTCCertificate.cpp",
    "peerconnection/testing/InternalsRTCCertificate.h",
    "serviceworkers/testing/InternalsServiceWorker.cpp",
    "serviceworkers/testing/InternalsServiceWorker.h",
    "speech/testing/InternalsSpeechSynthesis.cpp",
    "speech/testing/InternalsSpeechSynthesis.h",
    "speech/testing/PlatformSpeechSynthesizerMock.cpp",
    "speech/testing/PlatformSpeechSynthesizerMock.h",
    "vibration/testing/InternalsVibration.cpp",
    "vibration/testing/InternalsVibration.h",
    "webaudio/testing/InternalsWebAudio.cpp",
    "webaudio/testing/InternalsWebAudio.h",
  ]

  configs += [
    "//third_party/WebKit/Source:config",
    "//third_party/WebKit/Source:inside_blink",
    "//third_party/WebKit/Source/core:blink_core_pch",
  ]

  deps = [
    "//third_party/WebKit/Source/core",
    "//third_party/WebKit/Source/modules",
  ]
}

group("make_modules_generated") {
  public_deps = [
    ":module_names",
    "//third_party/WebKit/Source/bindings/modules:bindings_modules_generated",
    "//third_party/WebKit/Source/core:core_event_interfaces",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "accessibility/AXObjectTest.cpp",
    "accessibility/AccessibilityObjectModelTest.cpp",
    "background_fetch/BackgroundFetchManagerTest.cpp",
    "cachestorage/CacheTest.cpp",
    "canvas/HTMLCanvasElementModuleTest.cpp",
    "canvas2d/CanvasRenderingContext2DAPITest.cpp",
    "canvas2d/CanvasRenderingContext2DTest.cpp",
    "compositorworker/AnimationWorkletGlobalScopeTest.cpp",
    "compositorworker/AnimationWorkletThreadTest.cpp",
    "compositorworker/CompositorWorkerThreadTest.cpp",
    "credentialmanager/CredentialsContainerTest.cpp",
    "credentialmanager/PasswordCredentialTest.cpp",
    "csspaint/PaintRenderingContext2DTest.cpp",
    "csspaint/PaintWorkletTest.cpp",
    "document_metadata/CopylessPasteExtractorTest.cpp",
    "eventsource/EventSourceParserTest.cpp",
    "fetch/BlobBytesConsumerTest.cpp",
    "fetch/BodyStreamBufferTest.cpp",
    "fetch/BytesConsumerForDataConsumerHandleTest.cpp",
    "fetch/BytesConsumerTest.cpp",
    "fetch/BytesConsumerTestUtil.cpp",
    "fetch/BytesConsumerTestUtil.h",
    "fetch/DataConsumerHandleTestUtil.cpp",
    "fetch/DataConsumerHandleTestUtil.h",
    "fetch/FetchDataLoaderTest.cpp",
    "fetch/FetchHeaderListTest.cpp",
    "fetch/FetchResponseDataTest.cpp",
    "fetch/FormDataBytesConsumerTest.cpp",
    "fetch/MultipartParserTest.cpp",
    "fetch/ReadableStreamBytesConsumerTest.cpp",
    "fetch/RequestTest.cpp",
    "fetch/ResponseTest.cpp",
    "filesystem/DOMFileSystemBaseTest.cpp",
    "indexeddb/IDBKeyPathTest.cpp",
    "indexeddb/IDBRequestTest.cpp",
    "indexeddb/IDBTestHelper.cpp",
    "indexeddb/IDBTransactionTest.cpp",
    "indexeddb/IDBValueWrappingTest.cpp",
    "indexeddb/MockWebIDBDatabase.cpp",
    "indexeddb/MockWebIDBDatabase.h",
    "media_controls/MediaControlsImplTest.cpp",
    "media_controls/MediaControlsOrientationLockDelegateTest.cpp",
    "media_controls/MediaControlsRotateToFullscreenDelegateTest.cpp",
    "media_controls/elements/MediaControlInputElementTest.cpp",
    "mediastream/MediaConstraintsTest.cpp",
    "notifications/NotificationDataTest.cpp",
    "notifications/NotificationImageLoaderTest.cpp",
    "notifications/NotificationResourcesLoaderTest.cpp",
    "offscreencanvas/OffscreenCanvasTest.cpp",
    "payments/AbortTest.cpp",
    "payments/CanMakePaymentTest.cpp",
    "payments/CompleteTest.cpp",
    "payments/OnPaymentResponseTest.cpp",
    "payments/PaymentAddressTest.cpp",
    "payments/PaymentEventDataConversionTest.cpp",
    "payments/PaymentRequestDetailsTest.cpp",
    "payments/PaymentRequestTest.cpp",
    "payments/PaymentRequestUpdateEventTest.cpp",
    "payments/PaymentResponseTest.cpp",
    "payments/PaymentTestHelper.cpp",
    "payments/PaymentTestHelper.h",
    "payments/PaymentsValidatorsTest.cpp",
    "peerconnection/RTCDataChannelTest.cpp",
    "peerconnection/RTCPeerConnectionTest.cpp",
    "presentation/MockWebPresentationClient.h",
    "presentation/PresentationAvailabilityTest.cpp",
    "presentation/PresentationReceiverTest.cpp",
    "presentation/PresentationRequestTest.cpp",
    "push_messaging/PushManagerTest.cpp",
    "push_messaging/PushMessageDataTest.cpp",
    "remoteplayback/RemotePlaybackTest.cpp",
    "serviceworkers/ServiceWorkerContainerTest.cpp",
    "serviceworkers/WebEmbeddedWorkerImplTest.cpp",
    "wake_lock/ScreenWakeLockTest.cpp",
    "webaudio/AudioBasicProcessorHandlerTest.cpp",
    "webaudio/AudioContextTest.cpp",
    "webaudio/AudioWorkletGlobalScopeTest.cpp",
    "webaudio/AudioWorkletThreadTest.cpp",
    "webaudio/BaseAudioContextTest.cpp",
    "webaudio/ConvolverNodeTest.cpp",
    "webaudio/DynamicsCompressorNodeTest.cpp",
    "webaudio/ScriptProcessorNodeTest.cpp",
    "webaudio/StereoPannerNodeTest.cpp",
    "webdatabase/QuotaTrackerTest.cpp",
    "websockets/DOMWebSocketTest.cpp",
    "websockets/DocumentWebSocketChannelTest.cpp",
  ]

  configs += [
    "//third_party/WebKit/Source:config",
    "//third_party/WebKit/Source:inside_blink",
    "//third_party/WebKit/Source/core:blink_core_pch",
  ]

  deps = [
    ":modules",
    ":modules_testing",
    "//services/network/public/interfaces:interfaces_blink",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/WebKit/Source/core",
    "//third_party/WebKit/Source/platform/wtf",
    "//v8",
  ]
}
