chromium/third_party/blink/public/mojom/BUILD.gn

# Copyright 2018 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//printing/buildflags/buildflags.gni")
import("//third_party/blink/public/public_features.gni")
import("//third_party/blink/renderer/config.gni")

if (is_android) {
  import("//build/config/android/config.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.
#
# Source targets outside of Blink that want to depend on mojom_platform should
# instead depend on //content/public/common, which ultimately exposes it as a
# public dependency. This is because the non-Blink variant of the
# mojom_platform C++ bindings is linked into the //content component and
# //content/public/common has private dependencies there.
mojom("mojom_platform") {
  generate_java = true
  sources = [
    "ad_tagging/ad_evidence.mojom",
    "aggregation_service/aggregatable_report.mojom",
    "ai/ai_manager.mojom",
    "ai/ai_rewriter.mojom",
    "ai/ai_summarizer.mojom",
    "ai/ai_text_session.mojom",
    "ai/ai_text_session_info.mojom",
    "ai/ai_writer.mojom",
    "ai/model_streaming_responder.mojom",
    "annotation/annotation.mojom",
    "app_banner/app_banner.mojom",
    "array_buffer/array_buffer_contents.mojom",
    "associated_interfaces/associated_interfaces.mojom",
    "autoplay/autoplay.mojom",
    "back_forward_cache_not_restored_reasons.mojom",
    "background_fetch/background_fetch.mojom",
    "background_sync/background_sync.mojom",
    "badging/badging.mojom",
    "browser_interface_broker.mojom",
    "browsing_topics/browsing_topics.mojom",
    "cache_storage/cache_storage.mojom",
    "call_stack_generator/call_stack_generator.mojom",
    "choosers/color_chooser.mojom",
    "choosers/date_time_chooser.mojom",
    "choosers/file_chooser.mojom",
    "choosers/popup_menu.mojom",
    "clipboard/clipboard.mojom",
    "close_watcher/close_listener.mojom",
    "commit_result/commit_result.mojom",
    "compute_pressure/web_pressure_manager.mojom",
    "compute_pressure/web_pressure_manager_automation.mojom",
    "content_extraction/inner_html.mojom",
    "content_extraction/inner_text.mojom",
    "content_index/content_index.mojom",
    "context_menu/context_menu.mojom",
    "conversions/conversions.mojom",
    "cookie_manager/cookie_manager_automation.mojom",
    "cookie_store/cookie_store.mojom",
    "crash/crash_memory_metrics_reporter.mojom",
    "credentialmanagement/credential_manager.mojom",
    "css/preferred_color_scheme.mojom",
    "css/preferred_contrast.mojom",
    "data_transfer/data_transfer.mojom",
    "device/device.mojom",
    "device_posture/device_posture_provider.mojom",
    "device_posture/device_posture_provider_automation.mojom",
    "devtools/console_message.mojom",
    "devtools/devtools_agent.mojom",
    "devtools/devtools_frontend.mojom",
    "devtools/inspector_issue.mojom",
    "disk_allocator.mojom",
    "dom_storage/dom_storage.mojom",
    "dom_storage/session_storage_namespace.mojom",
    "dom_storage/storage_area.mojom",
    "drag/drag.mojom",
    "favicon/favicon_url.mojom",
    "feature_observer/feature_observer.mojom",
    "fenced_frame/fenced_frame_config.mojom",
    "fetch/fetch_api_request.mojom",
    "fetch/fetch_api_response.mojom",
    "file/file_utilities.mojom",
    "file_system_access/file_system_access_access_handle_host.mojom",
    "file_system_access/file_system_access_cloud_identifier.mojom",
    "file_system_access/file_system_access_data_transfer_token.mojom",
    "file_system_access/file_system_access_directory_handle.mojom",
    "file_system_access/file_system_access_error.mojom",
    "file_system_access/file_system_access_file_delegate_host.mojom",
    "file_system_access/file_system_access_file_handle.mojom",
    "file_system_access/file_system_access_file_modification_host.mojom",
    "file_system_access/file_system_access_file_writer.mojom",
    "file_system_access/file_system_access_manager.mojom",
    "file_system_access/file_system_access_observer.mojom",
    "file_system_access/file_system_access_observer_host.mojom",
    "file_system_access/file_system_access_transfer_token.mojom",
    "filesystem/file_system.mojom",
    "font_access/font_access.mojom",
    "forms/form_control_type.mojom",
    "geolocation/geolocation_service.mojom",
    "hid/hid.mojom",
    "hyphenation/hyphenation.mojom",
    "idle/idle_manager.mojom",
    "image_downloader/image_downloader.mojom",
    "input/focus_type.mojom",
    "input/gesture_event.mojom",
    "input/handwriting_gesture_result.mojom",
    "input/ime_host.mojom",
    "input/input_event.mojom",
    "input/input_event_result.mojom",
    "input/input_handler.mojom",
    "input/pointer_lock_context.mojom",
    "input/pointer_lock_result.mojom",
    "input/scroll_direction.mojom",
    "input/stylus_writing_gesture.mojom",
    "input/touch_event.mojom",
    "interest_group/ad_auction_service.mojom",
    "interest_group/ad_display_size.mojom",
    "interest_group/interest_group_types.mojom",
    "keyboard_lock/keyboard_lock.mojom",
    "lcp_critical_path_predictor/lcp_critical_path_predictor.mojom",
    "leak_detector/leak_detector.mojom",
    "link_to_text/link_to_text.mojom",
    "loader/code_cache.mojom",
    "loader/content_security_notifier.mojom",
    "loader/fetch_client_settings_object.mojom",
    "loader/fetch_later.mojom",
    "loader/javascript_framework_detection.mojom",
    "loader/keep_alive_handle.mojom",
    "loader/keep_alive_handle_factory.mojom",
    "loader/mixed_content.mojom",
    "loader/navigation_predictor.mojom",
    "loader/pause_subresource_loading_handle.mojom",
    "loader/referrer.mojom",
    "loader/request_context_frame_type.mojom",
    "loader/resource_load_info.mojom",
    "loader/resource_load_info_notifier.mojom",
    "loader/same_document_navigation_type.mojom",
    "loader/transferrable_url_loader.mojom",
    "loader/url_loader_factory_bundle.mojom",
    "lock_screen/lock_screen.mojom",
    "locks/lock_manager.mojom",
    "manifest/capture_links.mojom",
    "manifest/display_mode.mojom",
    "manifest/manifest.mojom",
    "manifest/manifest_launch_handler.mojom",
    "manifest/manifest_manager.mojom",
    "manifest/manifest_observer.mojom",
    "media/capture_handle_config.mojom",
    "media/fullscreen_video_element.mojom",
    "media/renderer_audio_input_stream_factory.mojom",
    "media/renderer_audio_output_stream_factory.mojom",
    "mediastream/aec_dump.mojom",
    "mediastream/media_devices.mojom",
    "mediastream/media_stream.mojom",
    "mime/mime_registry.mojom",
    "navigation/navigation_api_history_entry_arrays.mojom",
    "navigation/navigation_initiator_activation_and_ad_status.mojom",
    "navigation/navigation_policy.mojom",
    "navigation/prefetched_signed_exchange_info.mojom",
    "navigation/renderer_content_settings.mojom",
    "navigation/renderer_eviction_reason.mojom",
    "navigation/system_entropy.mojom",
    "navigation/was_activated_option.mojom",
    "notifications/notification.mojom",
    "notifications/notification_service.mojom",
    "on_device_translation/translation_manager.mojom",
    "on_device_translation/translator.mojom",
    "oom_intervention/oom_intervention.mojom",
    "opengraph/metadata.mojom",
    "origin_trials/origin_trials_settings.mojom",
    "parakeet/ad_request.mojom",
    "payments/payment_app.mojom",
    "peerconnection/peer_connection_tracker.mojom",
    "performance_manager/v8_detailed_memory_reporter.mojom",
    "permissions/permission.mojom",
    "permissions/permission_automation.mojom",
    "permissions/permission_status.mojom",
    "permissions_policy/document_policy_feature.mojom",
    "permissions_policy/permissions_policy.mojom",
    "permissions_policy/permissions_policy_feature.mojom",
    "permissions_policy/policy_disposition.mojom",
    "permissions_policy/policy_value.mojom",
    "picture_in_picture/picture_in_picture.mojom",
    "picture_in_picture_window_options/picture_in_picture_window_options.mojom",
    "plugins/plugin_registry.mojom",
    "preloading/anchor_element_interaction_host.mojom",
    "prerender/prerender.mojom",
    "presentation/presentation.mojom",
    "private_aggregation/private_aggregation_host.mojom",
    "push_messaging/push_messaging.mojom",
    "push_messaging/push_messaging_status.mojom",
    "render_accessibility.mojom",
    "renderer_preference_watcher.mojom",
    "renderer_preferences.mojom",
    "reporting/reporting.mojom",
    "safe_url_pattern.mojom",
    "script_source_location.mojom",
    "scroll/scroll_enums.mojom",
    "scroll/scroll_into_view_params.mojom",
    "scroll/scrollbar_mode.mojom",
    "security_context/insecure_request_policy.mojom",
    "selection_menu/selection_menu_behavior.mojom",
    "sensor/web_sensor_provider.mojom",
    "sensor/web_sensor_provider_automation.mojom",
    "service_worker/controller_service_worker_mode.mojom",
    "service_worker/dispatch_fetch_event_params.mojom",
    "service_worker/service_worker_ancestor_frame_type.mojom",
    "service_worker/service_worker_client.mojom",
    "service_worker/service_worker_container_type.mojom",
    "service_worker/service_worker_embedded_worker_status.mojom",
    "service_worker/service_worker_error_type.mojom",
    "service_worker/service_worker_event_status.mojom",
    "service_worker/service_worker_fetch_handler_bypass_option.mojom",
    "service_worker/service_worker_fetch_handler_type.mojom",
    "service_worker/service_worker_fetch_response_callback.mojom",
    "service_worker/service_worker_installed_scripts_manager.mojom",
    "service_worker/service_worker_running_status_callback.mojom",
    "service_worker/service_worker_state.mojom",
    "service_worker/service_worker_stream_handle.mojom",
    "service_worker/service_worker_worker_client.mojom",
    "service_worker/service_worker_worker_client_registry.mojom",
    "site_engagement/site_engagement.mojom",
    "smart_card/smart_card.mojom",
    "sms/webotp_service.mojom",
    "speculation_rules/speculation_rules.mojom",
    "speech/speech_synthesis.mojom",
    "storage_access/storage_access_automation.mojom",
    "subapps/sub_apps_service.mojom",
    "timing/performance_mark_or_measure.mojom",
    "timing/resource_timing.mojom",
    "use_counter/use_counter_feature.mojom",
    "user_agent/user_agent_metadata.mojom",
    "v8_cache_options.mojom",
    "wake_lock/wake_lock.mojom",
    "web_install/web_install.mojom",
    "web_launch/web_launch.mojom",
    "webaudio/audio_context_manager.mojom",
    "webdatabase/web_database.mojom",
    "webid/digital_identity_request.mojom",
    "webid/federated_auth_request.mojom",
    "webid/federated_auth_request_automation.mojom",
    "webpreferences/web_preferences.mojom",
    "websockets/websocket_connector.mojom",
    "webtransport/web_transport_connector.mojom",
    "widget/device_emulation_params.mojom",
    "widget/platform_widget.mojom",
    "widget/record_content_to_visible_time_request.mojom",
    "widget/visual_properties.mojom",
    "window_features/window_features.mojom",
    "worker/dedicated_worker_host.mojom",
    "worker/shared_worker_client.mojom",
    "worker/shared_worker_creation_context_type.mojom",
    "worker/shared_worker_host.mojom",
    "worker/shared_worker_info.mojom",
    "worker/subresource_loader_updater.mojom",
    "worker/worker_content_settings_proxy.mojom",
    "worker/worker_main_script_load_params.mojom",
    "worker/worker_options.mojom",
    "worker/worklet_global_scope_creation_params.mojom",
  ]

  if (is_android) {
    sources += [ "input/synchronous_compositor.mojom" ]
  }

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

  if (is_mac) {
    sources += [ "input/text_input_host.mojom" ]
  }

  if (use_blink_extensions_chromeos) {
    sources += [ "chromeos/diagnostics/cros_diagnostics.mojom" ]
  }

  if (use_blink_extensions_webview) {
    sources += [ "webview/webview_media_integrity.mojom" ]
  }

  public_deps = [
    ":android_mojo_bindings",
    ":authenticator_test_mojo_bindings",
    ":color_scheme_mojo_bindings",
    ":mojom_mhtml_load_result",
    ":script_type_mojo_bindings",
    ":web_feature_mojo_bindings",
    "//cc/mojom",
    "//components/attribution_reporting:data_host_mojom",
    "//components/attribution_reporting:mojom",
    "//components/payments/mojom",
    "//components/schema_org/common:mojom",
    "//components/services/filesystem/public/mojom",
    "//device/bluetooth/public/mojom",
    "//mojo/public/mojom/base",
    "//services/device/public/mojom",
    "//services/device/public/mojom:generic_sensor",
    "//services/network/public/mojom",
    "//services/network/public/mojom:mojom_ip_address",
    "//services/network/public/mojom:mojom_proxy_config",
    "//services/network/public/mojom:url_loader_base",
    "//services/network/public/mojom:websocket_mojom",
    "//services/service_manager/public/mojom",
    "//services/viz/public/mojom",
    "//skia/public/mojom",
    "//third_party/blink/public/mojom/gpu",
    "//third_party/blink/public/mojom/origin_trial_feature",
    "//third_party/blink/public/mojom/origin_trial_state",
    "//third_party/blink/public/mojom/private_network_device",
    "//third_party/blink/public/mojom/quota",
    "//third_party/blink/public/mojom/service_worker:storage",
    "//third_party/blink/public/mojom/storage_key",
    "//third_party/blink/public/mojom/tokens",
    "//third_party/blink/public/mojom/usb",
    "//ui/accessibility/mojom",
    "//ui/base/cursor/mojom",
    "//ui/base/dragdrop/mojom",
    "//ui/base/ime/mojom",
    "//ui/base/mojom",
    "//ui/display/mojom",
    "//ui/events/mojom",
    "//ui/events/mojom:event_latency_metadata_mojom",
    "//ui/gfx/geometry/mojom",
    "//ui/gfx/image/mojom",
    "//ui/gfx/mojom",
    "//ui/gfx/range/mojom",
    "//url/mojom:url_mojom_gurl",
    "//url/mojom:url_mojom_origin",
    "//url/mojom:url_mojom_scheme_host_port",
  ]

  if (is_android) {
    # Direct deps (instead of transitive deps) are necessary for java targets.
    public_deps += [
      "//services/network/public/mojom:cookies_mojom",
      "//services/network/public/mojom:mojom_attribution",
      "//services/network/public/mojom:mojom_network_param",
      "//services/network/public/mojom:mojom_schemeful_site",
      "//services/network/public/mojom:mojom_storage_access_api",
      "//ui/accessibility:ax_enums_mojo",
      "//ui/latency/mojom",
    ]
  } else {
    sources += [
      "direct_sockets/direct_sockets.mojom",
      "printing/web_printing.mojom",
      "serial/serial.mojom",
    ]
  }

  if (is_mac) {
    public_deps += [
      "//ui/base/mojom",
      "//ui/gfx/range/mojom",
    ]
  }

  # Chromium without blink doesn't use and must not depend on //media
  if (use_blink) {
    public_deps += [
      "//media/capture/mojom:video_capture",
      "//media/capture/mojom:video_capture_types",
      "//media/mojo/mojom",
    ]
  }

  enabled_features = []
  if (is_linux || is_chromeos) {
    enabled_features += [ "renderer_pref_system_font_family_name" ]
  }
  if (use_ozone) {
    enabled_features += [ "is_selection_clipboard_buffer_possible" ]
  }
  if (is_android || is_ios) {
    enabled_features += [ "is_using_open_color_chooser" ]
  }
  if (is_android || is_ios) {
    enabled_features += [ "is_android_or_ios" ]
  }

  shared_cpp_typemaps = [
    {
      types = [
        {
          mojom = "blink.mojom.AllowedDragOperations"
          cpp = "::blink::DragOperationsMask"
          copyable_pass_by_value = true
        },
      ]
      traits_headers =
          [ "//third_party/blink/public/common/page/drag_mojom_traits.h" ]
      traits_public_deps = [ "//third_party/blink/public/common:headers" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.Event"
          cpp = "::std::unique_ptr<::blink::WebCoalescedInputEvent>"
          move_only = true
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/input/web_coalesced_input_event_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.OriginWithPossibleWildcards"
          cpp = "::blink::OriginWithPossibleWildcards"
        },
        {
          mojom = "blink.mojom.ParsedPermissionsPolicyDeclaration"
          cpp = "::blink::ParsedPermissionsPolicyDeclaration"
        },
      ]
      traits_headers = [
        "//third_party/blink/public/common/permissions_policy/origin_with_possible_wildcards.h",
        "//third_party/blink/public/common/permissions_policy/permissions_policy_declaration.h",
      ]
      traits_private_headers = [ "//third_party/blink/common/permissions_policy/permissions_policy_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.FramePolicy"
          cpp = "::blink::FramePolicy"
        },
      ]
      traits_headers =
          [ "//third_party/blink/common/frame/frame_policy_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.NavigationDownloadPolicy"
          cpp = "::blink::NavigationDownloadPolicy"
        },
        {
          mojom = "blink.mojom.NavigationDownloadTypes"
          cpp = "::blink::NavigationDownloadPolicy::NavigationDownloadTypes"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/navigation/navigation_policy_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.MediaDeviceInfo"
          cpp = "::blink::WebMediaDeviceInfo"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/mediastream/media_devices_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.MediaStreamDevice"
          cpp = "::blink::MediaStreamDevice"
        },
        {
          mojom = "blink.mojom.StreamControls"
          cpp = "::blink::StreamControls"
        },
        {
          mojom = "blink.mojom.TrackControls"
          cpp = "::blink::TrackControls"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/mediastream/media_stream_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.VisualProperties"
          cpp = "::blink::VisualProperties"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/widget/visual_properties_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.FrameVisualProperties"
          cpp = "::blink::FrameVisualProperties"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/frame/frame_visual_properties_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.DeviceEmulationParams"
          cpp = "::blink::DeviceEmulationParams"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/widget/device_emulation_params_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.URLLoaderFactoryBundle"
          cpp = "::std::unique_ptr<::blink::PendingURLLoaderFactoryBundle>"
          nullable_is_same_type = true
          move_only = true
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/loader/url_loader_factory_bundle_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.RendererPreferences"
          cpp = "::blink::RendererPreferences"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.WebPreferences"
          cpp = "::blink::web_pref::WebPreferences"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.ColorProviderColorMaps"
          cpp = "::blink::ColorProviderColorMaps"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/page/color_provider_color_maps_mojom_traits.h" ]
      traits_public_deps = [ "//ui/color" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.Impression"
          cpp = "::blink::Impression"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/navigation/impression_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.UntrustworthyContextMenuParams"
          cpp = "::blink::UntrustworthyContextMenuParams"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/context_menu_data/context_menu_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.FrameAdEvidence"
          cpp = "::blink::FrameAdEvidence"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/frame/frame_ad_evidence_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.FrameOwnerElementType"
          cpp = "::blink::FrameOwnerElementType"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/frame/frame_owner_element_type_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.JavaScriptFrameworkDetectionResult"
          cpp = "::blink::JavaScriptFrameworkDetectionResult"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/loader/javascript_framework_detection_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.SHA256HashValue"
          cpp = "::net::SHA256HashValue"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/navigation/prefetched_signed_exchange_info_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.LinkGenerationError"
          cpp = "::shared_highlighting::LinkGenerationError"
        },
        {
          mojom = "blink.mojom.LinkGenerationReadyStatus"
          cpp = "::shared_highlighting::LinkGenerationReadyStatus"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/link_to_text/link_to_text_mojom_traits.h" ]
      traits_public_deps = [ "//components/shared_highlighting/core/common" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.Opaque"
          cpp = "::blink::FencedFrame::Opaque"
        },
        {
          mojom = "blink.mojom.AdAuctionData"
          cpp = "::blink::FencedFrame::AdAuctionData"
        },
        {
          mojom = "blink.mojom.SharedStorageBudgetMetadata"
          cpp = "::blink::FencedFrame::SharedStorageBudgetMetadata"
        },
        {
          mojom = "blink.mojom.ReportingDestination"
          cpp = "::blink::FencedFrame::ReportingDestination"
        },
        {
          mojom = "blink.mojom.DeprecatedFencedFrameMode"
          cpp = "::blink::FencedFrame::DeprecatedFencedFrameMode"
        },
        {
          mojom = "blink.mojom.PotentiallyOpaqueURL"
          cpp = "::blink::FencedFrame::RedactedFencedFrameProperty<GURL>"
        },
        {
          mojom = "blink.mojom.PotentiallyOpaqueSize"
          cpp = "::blink::FencedFrame::RedactedFencedFrameProperty<::gfx::Size>"
        },
        {
          mojom = "blink.mojom.PotentiallyOpaqueBool"
          cpp = "::blink::FencedFrame::RedactedFencedFrameProperty<bool>"
        },
        {
          mojom = "blink.mojom.PotentiallyOpaqueAdAuctionData"
          cpp = "::blink::FencedFrame::RedactedFencedFrameProperty<::blink::FencedFrame::AdAuctionData>"
        },
        {
          mojom = "blink.mojom.PotentiallyOpaqueConfigVector"
          cpp = "::blink::FencedFrame::RedactedFencedFrameProperty<std::vector<::blink::FencedFrame::RedactedFencedFrameConfig>>"
        },
        {
          mojom = "blink.mojom.PotentiallyOpaqueSharedStorageBudgetMetadata"
          cpp = "::blink::FencedFrame::RedactedFencedFrameProperty<::blink::FencedFrame::SharedStorageBudgetMetadata>"
        },
        {
          mojom = "blink.mojom.FencedFrameConfig"
          cpp = "::blink::FencedFrame::RedactedFencedFrameConfig"
        },
        {
          mojom = "blink.mojom.FencedFrameProperties"
          cpp = "::blink::FencedFrame::RedactedFencedFrameProperties"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/fenced_frame/redacted_fenced_frame_config_mojom_traits.h" ]
      traits_public_deps = [ "//third_party/blink/public/common:headers" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.SafeUrlPattern"
          cpp = "::blink::SafeUrlPattern"
        },
        {
          mojom = "blink.mojom.UrlPatternPart"
          cpp = "::liburlpattern::Part"
        },
        {
          mojom = "blink.mojom.PatternTemplate"
          cpp = "::liburlpattern::Part"
        },
        {
          mojom = "blink.mojom.FixedPattern"
          cpp = "::liburlpattern::Part"
        },
        {
          mojom = "blink.mojom.WildcardPattern"
          cpp = "::liburlpattern::Part"
        },
        {
          mojom = "blink.mojom.Modifier"
          cpp = "::liburlpattern::Modifier"
        },
      ]
      traits_headers = [
        "//third_party/blink/public/common/safe_url_pattern_mojom_traits.h",
      ]
      traits_public_deps = [ "//third_party/blink/public/common:headers" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AdCurrency"
          cpp = "::blink::AdCurrency"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.ServiceWorkerEmbeddedWorkerStatus"
          cpp = "::blink::EmbeddedWorkerStatus"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/service_worker/embedded_worker_status.h" ]
      traits_private_headers = [ "//third_party/blink/public/common/service_worker/service_worker_embedded_worker_status_mojom_traits.h" ]
    },
  ]
  cpp_typemaps = [
    {
      types = [
        {
          mojom = "blink.mojom.DirectFromSellerSignalsSubresource"
          cpp = "::blink::DirectFromSellerSignalsSubresource"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.DirectFromSellerSignals"
          cpp = "::blink::DirectFromSellerSignals"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AuctionAdConfigMaybePromiseJson"
          cpp = "::blink::AuctionConfig::MaybePromiseJson"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AuctionAdConfigMaybePromisePerBuyerSignals"
          cpp = "::blink::AuctionConfig::MaybePromisePerBuyerSignals"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AuctionAdConfigBuyerTimeouts"
          cpp = "::blink::AuctionConfig::BuyerTimeouts"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AdKeywordReplacement"
          cpp = "::blink::AuctionConfig::AdKeywordReplacement"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AuctionAdConfigMaybePromiseDeprecatedRenderURLReplacements"
          cpp = "::blink::AuctionConfig::MaybePromiseDeprecatedRenderURLReplacements"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AuctionAdConfigBuyerCurrencies"
          cpp = "::blink::AuctionConfig::BuyerCurrencies"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AuctionAdConfigMaybePromiseBuyerCurrencies"
          cpp = "::blink::AuctionConfig::MaybePromiseBuyerCurrencies"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AuctionAdConfigMaybePromiseBuyerTimeouts"
          cpp = "::blink::AuctionConfig::MaybePromiseBuyerTimeouts"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom =
              "blink.mojom.AuctionAdConfigMaybePromiseDirectFromSellerSignals"
          cpp = "::blink::AuctionConfig::MaybePromiseDirectFromSellerSignals"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AuctionAdConfigNonSharedParams"
          cpp = "::blink::AuctionConfig::NonSharedParams"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AuctionAdServerResponseConfig"
          cpp = "::blink::AuctionConfig::ServerResponseConfig"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AuctionAdConfig"
          cpp = "::blink::AuctionConfig"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/auction_config_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.ClipboardBuffer"
          cpp = "::ui::ClipboardBuffer"
        },
      ]
      traits_headers = [ "//ui/base/mojom/clipboard_blink_mojom_traits.h" ]
      traits_public_deps = [ "//ui/base/clipboard:clipboard_types" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.CredentialType"
          cpp = "::password_manager::CredentialType"
        },
        {
          mojom = "blink.mojom.CredentialMediationRequirement"
          cpp = "::password_manager::CredentialMediationRequirement"
        },
        {
          mojom = "blink.mojom.CredentialInfo"
          cpp = "::password_manager::CredentialInfo"
        },
        {
          mojom = "blink.mojom.CredentialManagerError"
          cpp = "::password_manager::CredentialManagerError"
        },
      ]
      traits_headers = [ "//components/password_manager/content/common/credential_manager_mojom_traits.h" ]
      traits_sources = [ "//components/password_manager/content/common/credential_manager_mojom_traits.cc" ]
      traits_public_deps = [
        "//base",
        "//components/password_manager/core/common",
      ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.FetchAPIDataElement"
          cpp = "::network::DataElement"
          move_only = true
        },
        {
          mojom = "blink.mojom.FetchAPIRequestBody"
          cpp = "::scoped_refptr<::network::ResourceRequestBody>"
          nullable_is_same_type = true
          copyable_pass_by_value = true
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/fetch/fetch_api_request_body_mojom_traits.h" ]
      traits_public_deps = [
        "//base",
        "//services/network/public/cpp:cpp_base",
      ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.FetchAPIRequestHeaders"
          cpp = "::blink::FetchAPIRequestHeadersMap"
          move_only = true
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/fetch/fetch_api_request_headers_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AdSize"
          cpp = "::blink::AdSize"
        },
        {
          mojom = "blink.mojom.AdDescriptor"
          cpp = "::blink::AdDescriptor"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/ad_display_size_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.InterestGroup"
          cpp = "::blink::InterestGroup"
        },
        {
          mojom = "blink.mojom.InterestGroupAd"
          cpp = "::blink::InterestGroup::Ad"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/interest_group/interest_group_mojom_traits.h" ]
      traits_public_deps = [ "//url/mojom:mojom_traits" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.ManifestImageResource"
          cpp = "::blink::Manifest::ImageResource"
        },

        {
          mojom = "blink.mojom.ManifestLaunchHandler"
          cpp = "::blink::Manifest::LaunchHandler"
        },

        {
          mojom = "blink.mojom.ManifestRelatedApplication"
          cpp = "::blink::Manifest::RelatedApplication"
        },

        {
          mojom = "blink.mojom.ManifestShareTarget"
          cpp = "::blink::Manifest::ShareTarget"
        },

        {
          mojom = "blink.mojom.ManifestShortcutItem"
          cpp = "::blink::Manifest::ShortcutItem"
        },

        {
          mojom = "blink.mojom.ManifestTranslationItem"
          cpp = "::blink::Manifest::TranslationItem"
        },

        {
          mojom = "blink.mojom.ManifestTabStrip"
          cpp = "::blink::Manifest::TabStrip"
        },
      ]
      traits_headers = [
        "//third_party/blink/public/common/common_export.h",
        "//third_party/blink/public/common/manifest/manifest.h",
      ]
      traits_private_headers = [
        "//third_party/blink/public/common/manifest/manifest_mojom_traits.h",
      ]
      traits_sources =
          [ "//third_party/blink/common/manifest/manifest_mojom_traits.cc" ]
      traits_deps = [
        "//net",
        "//ui/gfx/geometry/mojom:mojom_traits",
        "//url",
      ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.NotificationData"
          cpp = "::blink::PlatformNotificationData"
        },

        {
          mojom = "blink.mojom.NotificationResources"
          cpp = "::blink::NotificationResources"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/notifications/notification_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.PolicyValue"
          cpp = "::blink::PolicyValue"
        },
      ]
      traits_headers = [ "//third_party/blink/common/permissions_policy/policy_value_mojom_traits.h" ]
      traits_sources = [ "//third_party/blink/common/permissions_policy/policy_value_mojom_traits.cc" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.UseCounterFeature"
          cpp = "::blink::UseCounterFeature"
        },
      ]
      traits_headers = [ "//third_party/blink/common/use_counter/use_counter_feature_mojom_traits.h" ]
      traits_sources = [ "//third_party/blink/common/use_counter/use_counter_feature_mojom_traits.cc" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.UserAgentBrandVersion"
          cpp = "::blink::UserAgentBrandVersion"
        },

        {
          mojom = "blink.mojom.UserAgentMetadata"
          cpp = "::blink::UserAgentMetadata"
        },
        {
          mojom = "blink.mojom.UserAgentOverride"
          cpp = "::blink::UserAgentOverride"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/user_agent/user_agent_mojom_traits.h" ]
      traits_sources =
          [ "//third_party/blink/common/user_agent/user_agent_mojom_traits.cc" ]
    },
  ]
  if (is_chromeos && use_cups) {
    cpp_typemaps += [
      {
        types = [
          {
            mojom = "blink.mojom.WebPrintJobTemplateAttributes"
            cpp = "::std::unique_ptr<::printing::PrintSettings>"
            move_only = true
            nullable_is_same_type = true
          },
          {
            mojom = "blink.mojom.WebPrintingSides"
            cpp = "::printing::mojom::DuplexMode"
          },
          {
            mojom = "blink.mojom.WebPrinterState"
            cpp = "ipp_pstate_t"
          },
          {
            mojom = "blink.mojom.WebPrinterStateReason"
            cpp = "::printing::PrinterStatus::PrinterReason::Reason"
          },
        ]
        traits_headers =
            [ "//chrome/browser/printing/web_api/web_printing_mojom_traits.h" ]
        traits_sources =
            [ "//chrome/browser/printing/web_api/web_printing_mojom_traits.cc" ]
        traits_public_deps = [ "//printing:settings" ]
        traits_deps = [
          "//printing/backend",
          "//printing/mojom",
        ]
      },
    ]
  }
  blink_cpp_typemaps = [
    {
      types = [
        # TODO(dcheng): The structs for the variant subtypes should be
        # registered here as well, but it becomes tricky, because one of the C++
        # types is defined outside dragging code.
        {
          mojom = "blink.mojom.DragData"
          cpp = "::blink::WebDragData"
        },
      ]
      traits_headers =
          [ "//third_party/blink/renderer/platform/mojo/drag_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.FetchAPIRequestBody"
          cpp = "::blink::ResourceRequestBody"
          nullable_is_same_type = true
          move_only = true
        },
      ]
      traits_headers = [
        "//third_party/blink/renderer/platform/loader/fetch/resource_request.h",
      ]
      traits_private_headers = [ "//third_party/blink/renderer/platform/loader/fetch/fetch_api_request_body_mojom_traits.h" ]
      traits_deps =
          [ "//third_party/blink/renderer/platform/network:make_generated" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.FetchAPIRequestHeaders"
          cpp = "::WTF::HashMap<::WTF::String, WTF::String, WTF::CaseFoldingHashTraits<WTF::String>>"
          move_only = true
        },
      ]
      traits_headers = [ "//third_party/blink/renderer/platform/mojo/fetch_api_request_headers_mojom_traits.h" ]
      traits_public_deps = [ "//third_party/blink/renderer/platform/wtf" ]
    },
  ]
  cpp_typemaps += shared_cpp_typemaps
  blink_cpp_typemaps += shared_cpp_typemaps

  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"

  # Don't scramble message IDs so they are redistributable to external tests.
  scramble_message_ids = false
}

# Kept separate from "mojom_platform" because the Java bindings are
# needed by Android's implementation (in chrome/android or in android_webview)
# for following mojom files.
mojom("android_mojo_bindings") {
  generate_java = true
  sources = [
    "android_font_lookup/android_font_lookup.mojom",
    "blob/blob.mojom",
    "blob/blob_registry.mojom",
    "blob/blob_url_store.mojom",
    "blob/data_element.mojom",
    "blob/file_backed_blob_factory.mojom",
    "blob/serialized_blob.mojom",
    "contacts/contacts_manager.mojom",
    "digital_goods/digital_goods.mojom",
    "document_metadata/document_metadata.mojom",
    "facilitated_payments/payment_link_handler.mojom",
    "font_unique_name_lookup/font_unique_name_lookup.mojom",
    "handwriting/handwriting.mojom",
    "input/input_host.mojom",
    "input/input_messages.mojom",
    "installation/installation.mojom",
    "installedapp/installed_app_provider.mojom",
    "installedapp/related_application.mojom",
    "mediasession/media_session.mojom",
    "payments/payment_credential.mojom",
    "payments/payment_handler_host.mojom",
    "payments/payment_request.mojom",
    "webauthn/authenticator.mojom",
    "webshare/share_error.mojom",
    "webshare/webshare.mojom",
  ]

  public_deps = [
    "//components/digital_goods/mojom",
    "//components/payments/mojom",
    "//components/schema_org/common:mojom",
    "//mojo/public/mojom/base",
    "//services/media_session/public/mojom",
    "//services/network/public/mojom",
    "//services/network/public/mojom:mojom_schemeful_site",
    "//url/mojom:url_mojom_gurl",
    "//url/mojom:url_mojom_origin",
  ]

  # This uses target_os rather than current_os (which is what is_android is set
  # from) for the case of generating the v8 context snapshot for android. When
  # generating the snapshot for android, blink is compiled with
  # current_os="linux" and target_os="android". Using target_os is necessary as
  # we need to compile in the same way as would happen when current_os="android".
  if (target_os_is_android) {
    sources += [ "remote_objects/remote_objects.mojom" ]

    # Direct deps (instead of transitive deps) are necessary for java targets.
    public_deps += [ "//services/network/public/mojom:url_loader_base" ]
  }

  # This Android unhandled-tap feature uses another mojo source, add it in.
  if (enable_unhandled_tap) {
    sources += [ "unhandled_tap_notifier/unhandled_tap_notifier.mojom" ]
    public_deps += [ "//ui/gfx/geometry/mojom" ]
  }

  cpp_typemaps = [
    {
      types = [
        {
          mojom = "blink.mojom.AuthenticatorTransport"
          cpp = "::device::FidoTransportProtocol"
        },
        {
          mojom = "blink.mojom.PublicKeyCredentialType"
          cpp = "::device::CredentialType"
        },
        {
          mojom = "blink.mojom.PublicKeyCredentialParameters"
          cpp = "::device::PublicKeyCredentialParams::CredentialInfo"
        },
        {
          mojom = "blink.mojom.PublicKeyCredentialDescriptor"
          cpp = "::device::PublicKeyCredentialDescriptor"
        },
        {
          mojom = "blink.mojom.AuthenticatorAttachment"
          cpp = "::device::AuthenticatorAttachment"
        },
        {
          mojom = "blink.mojom.UserVerificationRequirement"
          cpp = "::device::UserVerificationRequirement"
        },
        {
          mojom = "blink.mojom.AuthenticatorSelectionCriteria"
          cpp = "::device::AuthenticatorSelectionCriteria"
        },
        {
          mojom = "blink.mojom.PublicKeyCredentialRpEntity"
          cpp = "::device::PublicKeyCredentialRpEntity"
        },
        {
          mojom = "blink.mojom.PublicKeyCredentialUserEntity"
          cpp = "::device::PublicKeyCredentialUserEntity"
        },
        {
          mojom = "blink.mojom.CableAuthentication"
          cpp = "::device::CableDiscoveryData"
        },
        {
          mojom = "blink.mojom.AttestationConveyancePreference"
          cpp = "::device::AttestationConveyancePreference"
        },
        {
          mojom = "blink.mojom.LargeBlobSupport"
          cpp = "::device::LargeBlobSupport"
        },
      ]
      traits_headers = [ "authenticator_mojom_traits.h" ]
      traits_sources = [ "authenticator_mojom_traits.cc" ]
      traits_public_deps = [
        "//base",
        "//device/fido",
      ]
    },
  ]

  blink_cpp_typemaps = [
    {
      types = [
        {
          mojom = "blink.mojom.SerializedBlob"
          cpp = "::scoped_refptr<::blink::BlobDataHandle>"
          nullable_is_same_type = true
        },
      ]
      traits_headers = [ "//third_party/blink/renderer/platform/blob/serialized_blob_mojom_traits.h" ]
    },
  ]

  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"

  # Don't scramble message IDs so they are redistributable to external tests.
  scramble_message_ids = false
}

# 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.
#
# 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") {
  generate_java = true
  sources = [
    # We can't move these frame/*.mojom files to public/mojom/frame because
    # they depend in several .mojom files from the mojo_platform target.
    #
    # TODO(crbug.com/1078875): Reorganize how we assign frame/*mojom files to
    # mojom GN targets to match better the core/platform separation in C++.
    "frame/back_forward_cache_controller.mojom",
    "frame/blocked_navigation_types.mojom",
    "frame/find_in_page.mojom",
    "frame/frame.mojom",
    "frame/frame_owner_properties.mojom",
    "frame/frame_policy.mojom",
    "frame/frame_replication_state.mojom",
    "frame/frame_visual_properties.mojom",
    "frame/fullscreen.mojom",
    "frame/intrinsic_sizing_info.mojom",
    "frame/lifecycle.mojom",
    "frame/media_player_action.mojom",
    "frame/policy_container.mojom",
    "frame/remote_frame.mojom",
    "frame/reporting_observer.mojom",
    "frame/sudden_termination_disabler_type.mojom",
    "frame/text_autosizer_page_info.mojom",
    "frame/tree_scope_type.mojom",
    "frame/triggering_event_info.mojom",
    "frame/user_activation_notification_type.mojom",
    "frame/user_activation_update_types.mojom",
    "frame/view_transition_state.mojom",
    "frame/viewport_intersection_state.mojom",
    "page/browsing_context_group_info.mojom",
    "page/display_cutout.mojom",
    "page/draggable_region.mojom",
    "page/page.mojom",
    "page/page_visibility_state.mojom",
    "page/prerender_page_param.mojom",
    "page/widget.mojom",
    "page_state/page_state.mojom",
    "partitioned_popins/partitioned_popin_params.mojom",

    # transferable_message.mojom depends the other messaging/ mojom files here.
    "messaging/cloneable_message.mojom",
    "messaging/delegated_capability.mojom",
    "messaging/message_port_descriptor.mojom",
    "messaging/static_bitmap_image.mojom",
    "messaging/task_attribution_id.mojom",
    "messaging/transferable_message.mojom",
    "messaging/user_activation_snapshot.mojom",

    # Depends on cloneable message.
    "broadcastchannel/broadcast_channel.mojom",

    # Depends on frame_policy.mojom.
    "fenced_frame/fenced_frame.mojom",
    "navigation/navigation_params.mojom",

    # 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.
    "service_worker/controller_service_worker.mojom",
    "service_worker/embedded_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",
    "service_worker/service_worker_router_rule.mojom",

    # Similarly, shared_worker.mojom and shared_worker_connector.mojom have a
    # dependency on message_port_descriptor.mojom, so are put here rather than
    # in the mojom_platform target.
    "worker/shared_worker.mojom",
    "worker/shared_worker_connector.mojom",

    # Depends on controller_service_worker.mojom.
    "worker/dedicated_worker_host_factory.mojom",
    "worker/shared_worker_factory.mojom",
  ]

  public_deps = [
    ":android_mojo_bindings",
    ":color_scheme_mojo_bindings",
    ":mojom_platform",
    ":script_type_mojo_bindings",
    ":web_feature_mojo_bindings",
    "//cc/mojom",
    "//components/payments/mojom",
    "//gpu/ipc/common:interfaces",
    "//mojo/public/mojom/base",
    "//services/network/public/mojom",
    "//services/service_manager/public/mojom",
    "//services/viz/public/mojom",
    "//skia/public/mojom",
    "//third_party/blink/public/mojom/runtime_feature_state",
    "//third_party/blink/public/mojom/service_worker:storage",
    "//third_party/blink/public/mojom/storage_key",
    "//ui/base/dragdrop/mojom",
    "//ui/base/mojom",
    "//ui/color:mojom",
    "//ui/display/mojom",
    "//ui/gfx/geometry/mojom",
    "//ui/gfx/image/mojom",
    "//ui/gfx/mojom",
    "//ui/gfx/range/mojom",
    "//url/mojom:url_mojom_gurl",
    "//url/mojom:url_mojom_origin",
  ]

  if (is_android) {
    # Direct deps (instead of transitive deps) are necessary for java targets.
    public_deps += [
      "//services/network/public/mojom:cookies_mojom",
      "//services/network/public/mojom:mojom_attribution",
      "//services/network/public/mojom:mojom_storage_access_api",
      "//services/network/public/mojom:url_loader_base",
      "//third_party/blink/public/mojom/tokens",
      "//ui/base/ime/mojom",
      "//ui/base/mojom",
      "//ui/events/mojom",
    ]
  }
  if (is_mac) {
    public_deps += [
      "//ui/base/mojom",
      "//ui/gfx/range/mojom",
    ]
  }

  enabled_features = []
  if (use_aura) {
    enabled_features += [ "use_aura" ]
  }

  shared_cpp_typemaps = [
    {
      types = [
        {
          mojom = "blink.mojom.MessagePortDescriptor"
          cpp = "::blink::MessagePortDescriptor"
          move_only = true
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/messaging/message_port_descriptor_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.TaskAttributionId"
          cpp = "::blink::scheduler::TaskAttributionId"
          move_only = true
        },
      ]
      traits_headers = [
        "//third_party/blink/public/common/scheduler/task_attribution_id.h",
      ]
      traits_private_headers = [ "//third_party/blink/public/common/messaging/task_attribution_id_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.AcceleratedStaticBitmapImage"
          cpp = "::blink::AcceleratedImageInfo"
          move_only = true
        },
      ]
      traits_headers = [
        "//third_party/blink/public/common/messaging/accelerated_image_info.h",
      ]
      traits_private_headers = [ "//third_party/blink/public/common/messaging/accelerated_static_bitmap_image_mojom_traits.h" ]
      traits_deps = [ "//gpu/ipc/common" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.BrowsingContextGroupInfo"
          cpp = "::blink::BrowsingContextGroupInfo"
          default_constructible = false
        },
      ]
      traits_headers = [
        "//third_party/blink/public/common/page/browsing_context_group_info.h",
      ]
      traits_private_headers = [ "//third_party/blink/public/common/page/browsing_context_group_info_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.ServiceWorkerRouterRules"
          cpp = "::blink::ServiceWorkerRouterRules"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/service_worker/service_worker_router_rule.h" ]
      traits_private_headers = [ "//third_party/blink/public/common/service_worker/service_worker_router_rule_mojom_traits.h" ]
    },
  ]

  cpp_typemaps = [
    {
      types = [
        {
          mojom = "blink.mojom.CloneableMessage"
          cpp = "::blink::CloneableMessage"
          move_only = true
        },
      ]
      traits_headers =
          [ "//third_party/blink/public/common/messaging/cloneable_message.h" ]
      traits_private_headers = [ "//third_party/blink/public/common/messaging/cloneable_message_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.ViewTransitionState"
          cpp = "::blink::ViewTransitionState"
        },
        {
          mojom = "blink.mojom.ViewTransitionElement"
          cpp = "::blink::ViewTransitionElement"
        },
      ]
      traits_headers =
          [ "//third_party/blink/public/common/frame/view_transition_state.h" ]
      traits_private_headers = [ "//third_party/blink/public/common/frame/view_transition_state_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.TransferableMessage"
          cpp = "::blink::TransferableMessage"
          move_only = true
        },
      ]
      traits_headers = [
        "//third_party/blink/public/common/messaging/message_port_channel.h",
        "//third_party/blink/public/common/messaging/transferable_message.h",
      ]
      traits_private_headers = [ "//third_party/blink/public/common/messaging/transferable_message_mojom_traits.h" ]
    },
  ]
  cpp_typemaps += shared_cpp_typemaps

  blink_cpp_typemaps = [
    {
      types = [
        {
          mojom = "blink.mojom.CloneableMessage"
          cpp = "::blink::BlinkCloneableMessage"
          move_only = true
        },
      ]
      traits_headers = [ "//third_party/blink/renderer/core/messaging/blink_cloneable_message_mojom_traits.h" ]
      traits_public_deps = [ "//third_party/blink/public/common" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.TransferableMessage"
          cpp = "::blink::BlinkTransferableMessage"
          move_only = true
        },
        {
          mojom = "blink.mojom.SerializedArrayBufferContents"
          cpp = "::blink::ArrayBufferContents"
          move_only = true
        },
      ]
      traits_headers = [ "//third_party/blink/renderer/core/messaging/blink_transferable_message_mojom_traits.h" ]
      traits_public_deps = [
        "//third_party/blink/public/common",
        "//third_party/blink/renderer/platform/wtf",
      ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.ViewTransitionState"
          cpp = "::blink::ViewTransitionState"
        },
        {
          mojom = "blink.mojom.ViewTransitionElement"
          cpp = "::blink::ViewTransitionElement"
        },
      ]
      traits_headers =
          [ "//third_party/blink/public/common/frame/view_transition_state.h" ]
      traits_private_headers = [ "//third_party/blink/public/common/frame/view_transition_state_mojom_traits.h" ]
    },
  ]
  blink_cpp_typemaps += shared_cpp_typemaps

  overridden_deps_blink = [
    ":android_mojo_bindings",
    ":mojom_platform",
    "//cc/mojom",
    "//services/network/public/mojom",
    "//services/viz/public/mojom",
    "//third_party/blink/public/mojom/service_worker:storage",
  ]
  component_deps_blink = [
    "//cc/mojom",
    "//services/viz/public/mojom",
    "//third_party/blink/renderer/bindings:generate_bindings_all",
    "//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 = [
    "buckets/bucket_manager_host.mojom",
    "indexeddb/indexeddb.mojom",
    "shared_storage/shared_storage.mojom",
    "shared_storage/shared_storage_worklet_service.mojom",
    "storage_access/storage_access_handle.mojom",
  ]

  public_deps = [
    ":android_mojo_bindings",
    ":mojom_core",
    "//mojo/public/mojom/base",
    "//url/mojom:url_mojom_gurl",
    "//url/mojom:url_mojom_origin",
  ]

  overridden_deps_blink = [
    ":android_mojo_bindings",
    ":mojom_core",
  ]
  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"

  blink_cpp_typemaps = [
    {
      types = [
        {
          mojom = "blink.mojom.IDBDatabaseMetadata"
          cpp = "::blink::IDBDatabaseMetadata"
        },

        {
          mojom = "blink.mojom.IDBIndexKeys"
          cpp = "::blink::IDBIndexKeys"
          move_only = true
        },

        {
          mojom = "blink.mojom.IDBIndexMetadata"
          cpp = "::scoped_refptr<::blink::IDBIndexMetadata>"
        },

        {
          mojom = "blink.mojom.IDBKey"
          cpp = "::std::unique_ptr<::blink::IDBKey>"
          move_only = true
        },

        {
          mojom = "blink.mojom.IDBKeyPath"
          cpp = "::blink::IDBKeyPath"
        },

        {
          mojom = "blink.mojom.IDBObjectStoreMetadata"
          cpp = "::scoped_refptr<::blink::IDBObjectStoreMetadata>"
        },

        {
          mojom = "blink.mojom.IDBValue"
          cpp = "::std::unique_ptr<::blink::IDBValue>"
          move_only = true
        },
      ]
      traits_private_headers = [ "//third_party/blink/renderer/modules/indexeddb/indexed_db_blink_mojom_traits.h" ]
      traits_headers = [
        "//third_party/blink/renderer/modules/indexeddb/idb_key_path.h",
        "//third_party/blink/renderer/modules/indexeddb/idb_key_range.h",
        "//third_party/blink/renderer/modules/indexeddb/idb_metadata.h",
        "//third_party/blink/renderer/modules/indexeddb/idb_value.h",
      ]
      traits_deps = [ "//third_party/blink/renderer/platform/wtf" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.SharedStorageKeyArgument"
          cpp = "::WTF::String"
        },
        {
          mojom = "blink.mojom.SharedStorageValueArgument"
          cpp = "::WTF::String"
        },
      ]
      traits_headers = [ "//third_party/blink/renderer/modules/shared_storage/shared_storage_blink_mojom_traits.h" ]
    },
  ]

  cpp_typemaps = [
    {
      types = [
        {
          mojom = "blink.mojom.IDBDatabaseMetadata"
          cpp = "::blink::IndexedDBDatabaseMetadata"
        },

        {
          mojom = "blink.mojom.IDBIndexKeys"
          cpp = "::blink::IndexedDBIndexKeys"
        },

        {
          mojom = "blink.mojom.IDBIndexMetadata"
          cpp = "::blink::IndexedDBIndexMetadata"
        },

        {
          mojom = "blink.mojom.IDBKey"
          cpp = "::blink::IndexedDBKey"
        },

        {
          mojom = "blink.mojom.IDBKeyPath"
          cpp = "::blink::IndexedDBKeyPath"
        },

        {
          mojom = "blink.mojom.IDBKeyRange"
          cpp = "::blink::IndexedDBKeyRange"
        },

        {
          mojom = "blink.mojom.IDBObjectStoreMetadata"
          cpp = "::blink::IndexedDBObjectStoreMetadata"
        },
      ]
      traits_headers = [
        "//third_party/blink/public/common/indexeddb/indexeddb_key.h",
        "//third_party/blink/public/common/indexeddb/indexeddb_key_path.h",
        "//third_party/blink/public/common/indexeddb/indexeddb_key_range.h",
        "//third_party/blink/public/common/indexeddb/indexeddb_metadata.h",
      ]
      traits_private_headers = [ "//third_party/blink/public/common/indexeddb/indexed_db_default_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "blink.mojom.SharedStorageKeyArgument"
          cpp = "::std::u16string"
        },
        {
          mojom = "blink.mojom.SharedStorageValueArgument"
          cpp = "::std::u16string"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/shared_storage/shared_storage_mojom_traits.h" ]
    },
  ]
}

mojom("web_bluetooth_mojo_bindings") {
  visibility = [
    "//third_party/blink/common",
    "//third_party/blink/public/common:common",
    "//third_party/blink/public/common:headers",
  ]

  visibility_blink = [
    "//third_party/blink/common",
    "//third_party/blink/public/common:common",
    "//third_party/blink/public/common:headers",
    "//third_party/blink/renderer/platform:blink_platform_public_deps",
  ]

  sources = [ "bluetooth/web_bluetooth.mojom" ]

  public_deps = [ "//device/bluetooth/public/mojom" ]

  shared_cpp_typemaps = [
    {
      types = [
        {
          mojom = "blink.mojom.WebBluetoothDeviceId"
          cpp = "::blink::WebBluetoothDeviceId"
        },
      ]
      traits_headers = [ "//third_party/blink/public/common/bluetooth/web_bluetooth_device_id_mojom_traits.h" ]
    },
  ]

  blink_cpp_typemaps = [
    {
      types = [
        {
          mojom = "bluetooth.mojom.UUID"
          cpp = "::WTF::String"
          nullable_is_same_type = true
        },
      ]
      traits_private_headers = [
        "//third_party/blink/renderer/platform/mojo/bluetooth_mojom_traits.h",
      ]
      traits_public_deps = [ "//device/bluetooth" ]
    },
  ]

  blink_cpp_typemaps += shared_cpp_typemaps

  cpp_typemaps = shared_cpp_typemaps

  # The chromium variant must be linked with content and use the same export
  # settings in component build because of the WebBluetoothDeviceId typemap
  # inside content.
  export_class_attribute = "BLINK_COMMON_EXPORT"
  export_define = "BLINK_COMMON_IMPLEMENTATION=1"
  export_header = "third_party/blink/public/common/common_export.h"

  # Similarly, the blink variant must be linked with the platform component
  # since it uses types from it in its typemaps.
  export_class_attribute_blink = "BLINK_PLATFORM_EXPORT"
  export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1"
  export_header_blink = "third_party/blink/public/platform/web_common.h"
}

mojom("mojom_mhtml_load_result") {
  generate_java = true
  sources = [ "loader/mhtml_load_result.mojom" ]

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

mojom_component("script_type_mojo_bindings") {
  generate_java = true
  sources = [
    "script/script_evaluation_params.mojom",
    "script/script_type.mojom",
  ]

  macro_prefix = "SCRIPT_TYPE_MOJOM"
  output_prefix = "script_type_mojom"

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

# The web_feature_mojo_bindings is separated from the rest of the mojom files
# because the chromium typemap for blink mojo_bindings has private content
# dependencies.
mojom_component("web_feature_mojo_bindings") {
  generate_java = true
  sources = [
    "use_counter/metrics/css_property_id.mojom",
    "use_counter/metrics/web_feature.mojom",
    "use_counter/metrics/webdx_feature.mojom",
  ]

  macro_prefix = "WEB_FEATURE_MOJO_BINDINGS_MOJOM"
  output_prefix = "web_feature_mojo_bindings_mojom"
}

# The embedded_frame_sink_mojo_bindings is separated from the rest of mojom
# files because its deps contain too many files in Chromium that would pollute
# the include paths in generated mojom-blink files for other services.
mojom("embedded_frame_sink_mojo_bindings") {
  visibility = [ "//content/*" ]
  visibility_blink = [ "//third_party/blink/renderer/platform" ]
  sources = [ "frame_sinks/embedded_frame_sink.mojom" ]
  deps = [ "//services/viz/public/mojom" ]

  component_output_prefix = "blink_embedded_frame_sink_mojo_bindings"

  # The chromium variant must be linked with content and use the same export
  # settings in component build.
  export_class_attribute = "CONTENT_EXPORT"
  export_define = "CONTENT_IMPLEMENTATION=1"
  export_header = "content/common/content_export.h"
  export_class_attribute_blink = "BLINK_PLATFORM_EXPORT"
  export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1"
  export_header_blink = "third_party/blink/public/platform/web_common.h"
}

# This is a separate target because it needs unscrambled message IDs.
mojom("authenticator_test_mojo_bindings") {
  generate_java = true
  sources = [ "webauthn/virtual_authenticator.mojom" ]

  public_deps = [
    ":android_mojo_bindings",
    "//url/mojom:url_mojom_gurl",
  ]

  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"

  # Don't scramble message IDs so they are redistributable to external tests.
  scramble_message_ids = false

  cpp_typemaps = [
    {
      types = [
        {
          mojom = "blink.test.mojom.ClientToAuthenticatorProtocol"
          cpp = "::device::ProtocolVersion"
        },
        {
          mojom = "blink.test.mojom.Ctap2Version"
          cpp = "::device::Ctap2Version"
        },
      ]
      traits_headers =
          [ "//content/browser/webauth/virtual_authenticator_mojom_traits.h" ]
      traits_sources =
          [ "//content/browser/webauth/virtual_authenticator_mojom_traits.cc" ]
      traits_public_deps = [ "//device/fido" ]
    },
  ]
}

mojom("memory_usage_monitor_linux_mojo_bindings") {
  visibility = [
    "//content/browser:browser",
    "//third_party/blink/renderer/controller:controller",
  ]
  visibility_blink = [ "//third_party/blink/renderer/controller:controller" ]

  sources = [ "memory_usage_monitor_linux.mojom" ]

  public_deps = [ "//mojo/public/mojom/base" ]

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

mojom("color_scheme_mojo_bindings") {
  generate_java = true
  visibility_blink = [
    "//third_party/blink/public/mojom:mojom_core_blink",
    "//third_party/blink/public/mojom:mojom_platform_blink",
    "//third_party/blink/renderer/core:prerequisites",
    "//third_party/blink/renderer/modules",
    "//third_party/blink/renderer/platform",
  ]

  sources = [ "frame/color_scheme.mojom" ]

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