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

# This target includes all mojom interfaces which can be used from
# renderer/platform. In particular these mojom interfaces can't use types that
# are typemapped to a type in renderer/core.
mojom("mojom_platform") {
  sources = [
    "ad_tagging/ad_frame.mojom",
    "appcache/appcache.mojom",
    "appcache/appcache_info.mojom",
    "array_buffer/array_buffer_contents.mojom",
    "associated_interfaces/associated_interfaces.mojom",
    "background_fetch/background_fetch.mojom",
    "blob/blob.mojom",
    "blob/blob_registry.mojom",
    "blob/blob_url_store.mojom",
    "blob/data_element.mojom",
    "blob/serialized_blob.mojom",
    "cache_storage/cache_storage.mojom",
    "choosers/file_chooser.mojom",
    "clipboard/clipboard.mojom",
    "color_chooser/color_chooser.mojom",
    "contacts/contacts_manager.mojom",
    "cookie_store/cookie_store.mojom",
    "crash/crash_memory_metrics_reporter.mojom",
    "csp/content_security_policy.mojom",
    "devtools/console_message.mojom",
    "devtools/devtools_agent.mojom",
    "dom_storage/session_storage_namespace.mojom",
    "dom_storage/storage_area.mojom",
    "dom_storage/storage_partition_service.mojom",
    "feature_policy/feature_policy.mojom",
    "fetch/fetch_api_request.mojom",
    "fetch/fetch_api_response.mojom",
    "file/file_utilities.mojom",
    "filesystem/file_system.mojom",
    "filesystem/file_writer.mojom",
    "frame/document_interface_broker.mojom",
    "frame/find_in_page.mojom",
    "frame/frame_host_test_interface.mojom",
    "frame/navigation_initiator.mojom",
    "leak_detector/leak_detector.mojom",
    "loader/code_cache.mojom",
    "loader/navigation_predictor.mojom",
    "loader/pause_subresource_loading_handle.mojom",
    "loader/previews_resource_loading_hints.mojom",
    "loader/url_loader_factory_bundle.mojom",
    "manifest/display_mode.mojom",
    "manifest/manifest.mojom",
    "manifest/manifest_manager.mojom",
    "mediastream/media_devices.mojom",
    "mediastream/media_stream.mojom",
    "net/ip_address_space.mojom",
    "notifications/notification.mojom",
    "page/display_cutout.mojom",
    "payments/payment_app.mojom",
    "plugins/plugin_registry.mojom",
    "presentation/presentation.mojom",
    "quota/quota_dispatcher_host.mojom",
    "quota/quota_types.mojom",
    "referrer.mojom",
    "script/script_type.mojom",
    "serial/serial.mojom",
    "service_worker/dispatch_fetch_event_params.mojom",
    "service_worker/navigation_preload_state.mojom",
    "service_worker/service_worker_client.mojom",
    "service_worker/service_worker_error_type.mojom",
    "service_worker/service_worker_event_status.mojom",
    "service_worker/service_worker_fetch_response_callback.mojom",
    "service_worker/service_worker_installed_scripts_manager.mojom",
    "service_worker/service_worker_provider_type.mojom",
    "service_worker/service_worker_state.mojom",
    "service_worker/service_worker_stream_handle.mojom",
    "speech/speech_recognition_error.mojom",
    "speech/speech_recognition_grammar.mojom",
    "speech/speech_recognition_result.mojom",
    "speech/speech_recognizer.mojom",
    "use_counter/css_property_id.mojom",
    "wake_lock/wake_lock.mojom",
    "webaudio/audio_context_manager.mojom",
    "worker/dedicated_worker_factory.mojom",
    "worker/shared_worker.mojom",
    "worker/shared_worker_client.mojom",
    "worker/shared_worker_connector.mojom",
    "worker/shared_worker_creation_context_type.mojom",
    "worker/shared_worker_host.mojom",
    "worker/shared_worker_info.mojom",
    "worker/worker_content_settings_proxy.mojom",
    "worker/worker_main_script_load_params.mojom",
  ]

  if (is_win) {
    sources += [ "dwrite_font_proxy/dwrite_font_proxy.mojom" ]
  }

  public_deps = [
    ":android_mojo_bindings",
    ":speech_recognition_error_code",
    "//components/payments/mojom",
    "//components/services/filesystem/public/interfaces",
    "//mojo/public/mojom/base",
    "//services/device/public/mojom",
    "//services/network/public/mojom",
    "//services/service_manager/public/mojom",
    "//skia/public/interfaces",
    "//third_party/blink/public:web_feature_mojo_bindings",
    "//third_party/blink/public/mojom/usb",
    "//ui/gfx/geometry/mojo",
    "//url/mojom:url_mojom_gurl",
    "//url/mojom:url_mojom_origin",
  ]

  # iOS doesn't use and must not depend on //media
  if (!is_ios) {
    public_deps += [
      "//media/capture/mojom:video_capture",
      "//media/mojo/interfaces",
    ]
  }

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

  export_class_attribute_blink = "PLATFORM_EXPORT"
  export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1"
  export_header_blink = "third_party/blink/renderer/platform/platform_export.h"
}

# Kept separate from "mojom_platform" because the Java bindings are specifically
# needed by Android's implementation of payments
# (in components/payments/content/android and chrome/android/).
mojom("android_mojo_bindings") {
  sources = [
    "payments/payment_request.mojom",
  ]
  public_deps = [
    "//components/payments/mojom",
  ]

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

  export_class_attribute_blink = "PLATFORM_EXPORT"
  export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1"
  export_header_blink = "third_party/blink/renderer/platform/platform_export.h"
}

# Kept separate from "mojom_platform" because the Java bindings are needed by
# Android's implementation of speech recognition.
mojom_component("speech_recognition_error_code") {
  sources = [
    "speech/speech_recognition_error_code.mojom",
  ]

  macro_prefix = "SPEECH_RECOGNITION_ERROR_CODE_MOJOM"
  output_prefix = "speech_recognition_error_code_mojom"
}

# This target can include mojom interfaces which do use types that are
# typemapped to a type in renderer/core. This also means these interfaces are
# not available from renderer/platform.
# Note that service_worker_object.mojom and service_worker.mojom depend
# on transferable_message.mojom, and controller_service_worker.mojom and
# service_worker_registration.mojom depend on service_worker_object.mojom, so
# we put these service worker mojom files here rather than mojom_platform
# target.
# In future we may have a separate mojom target for the things that may have
# modules dependencies if it looks necessary, at that time we can put all of
# those high-level service worker mojom files there.
mojom("mojom_core") {
  sources = [
    "messaging/cloneable_message.mojom",
    "messaging/transferable_message.mojom",
    "messaging/user_activation_snapshot.mojom",
    "portal/portal.mojom",
    "service_worker/controller_service_worker.mojom",
    "service_worker/service_worker.mojom",
    "service_worker/service_worker_container.mojom",
    "service_worker/service_worker_object.mojom",
    "service_worker/service_worker_provider.mojom",
    "service_worker/service_worker_registration.mojom",
  ]

  public_deps = [
    ":mojom_platform",
    "//components/payments/mojom",
    "//mojo/public/mojom/base",
    "//services/network/public/mojom",
    "//services/service_manager/public/mojom",
    "//skia/public/interfaces",
    "//third_party/blink/public:web_feature_mojo_bindings",
    "//url/mojom:url_mojom_gurl",
    "//url/mojom:url_mojom_origin",
  ]

  overridden_deps_blink = [
    ":mojom_platform",
    "//services/network/public/mojom",
  ]
  component_deps_blink = [ "//third_party/blink/renderer/platform" ]

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

  export_class_attribute_blink = "CORE_EXPORT"
  export_define_blink = "BLINK_CORE_IMPLEMENTATION=1"
  export_header_blink = "third_party/blink/renderer/core/core_export.h"
}

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

  public_deps = [
    ":mojom_core",

    # TODO(https://crbug.com/822804): Remove when mojom bindings deps checks
    # get fixed.
    ":mojom_platform",
    "//mojo/public/mojom/base",
    "//skia/public/interfaces",
    "//url/mojom:url_mojom_gurl",
    "//url/mojom:url_mojom_origin",
  ]

  overridden_deps_blink = [
    ":mojom_core",
    ":mojom_platform",
  ]
  component_deps_blink = [ "//third_party/blink/renderer/core" ]

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

  export_class_attribute_blink = "MODULES_EXPORT"
  export_define_blink = "BLINK_MODULES_IMPLEMENTATION=1"
  export_header_blink = "third_party/blink/renderer/modules/modules_export.h"
}
