# Copyright 2019 The Chromium Authors
# 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")
import("//arkweb//build/features/features.gni")

component("shared_mojom_traits") {
  output_name = "cc_shared_mojom_traits"
  defines = [ "IS_CC_SHARED_MOJOM_TRAITS_IMPL" ]
  sources = [
    "render_frame_metadata_mojom_traits.cc",
    "render_frame_metadata_mojom_traits.h",
  ]
  public_deps = [
    ":mojom_shared",
    "//cc",
    "//mojo/public/cpp/base:shared_typemap_traits",
    "//ui/gfx/geometry/mojom:mojom_traits",
  ]
}

mojom("mojom") {
  generate_java = true
  sources = [
    "browser_controls_state.mojom",
    "overscroll_behavior.mojom",
    "render_frame_metadata.mojom",
    "touch_action.mojom",
  ]

  enabled_features = []

  if (is_android || is_ohos || is_arkweb) {
    enabled_features += [ "is_android_or_ios_or_arkweb" ]
    enabled_features += [ "arkweb_menu" ]
  }

  public_deps = [
    ":mojom_browser_controls",
    "//mojo/public/mojom/base",
    "//services/viz/public/mojom",
    "//skia/public/mojom",
    "//ui/gfx/geometry/mojom",
  ]

  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"

  shared_typemap = [
    {
      types = [
        {
          mojom = "cc.mojom.BrowserControlsState"
          cpp = "::cc::BrowserControlsState"
        },
      ]
      traits_headers = [ "//cc/ipc/cc_param_traits_macros.h" ]
      traits_public_deps = [ "//cc/ipc" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.TouchAction"
          cpp = "::cc::TouchAction"
        },
      ]
      traits_headers = [ "//cc/ipc/cc_param_traits_macros.h" ]
      traits_public_deps = [ "//cc/ipc" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.OverscrollBehavior"
          cpp = "::cc::OverscrollBehavior"
        },
      ]
      traits_headers = [ "//cc/ipc/cc_param_traits_macros.h" ]
      traits_public_deps = [ "//cc/ipc" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.RenderFrameMetadata"
          cpp = "::cc::RenderFrameMetadata"
        },
      ]
      traits_headers = [ "//cc/mojom/render_frame_metadata_mojom_traits.h" ]
      traits_public_deps = [ ":shared_mojom_traits" ]
    },
  ]

  cpp_typemaps = shared_typemap
  blink_cpp_typemaps = shared_typemap

  deps = [ "//services/viz/public/mojom:surfaces" ]
}

mojom("mojom_browser_controls") {
  generate_java = true
  sources = [
    "browser_controls_offset_tag_modifications.mojom",
    "browser_controls_offset_tags.mojom",
    "browser_controls_params.mojom",
  ]

  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"

  shared_typemaps = [
    {
      types = [
        {
          mojom = "cc.mojom.BrowserControlsOffsetTagModifications"
          cpp = "::cc::BrowserControlsOffsetTagModifications"
        },
        {
          mojom = "cc.mojom.BrowserControlsOffsetTags"
          cpp = "::cc::BrowserControlsOffsetTags"
        },
      ]
      traits_headers = [
        "//cc/mojom/browser_controls_offset_tag_modifications_mojom_traits.h",
      ]
      traits_public_deps = [ "//components/viz/common" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.BrowserControlsParams"
          cpp = "::cc::BrowserControlsParams"
        },
      ]
      traits_headers = [ "browser_controls_params_mojom_traits.h" ]
    },
  ]
  cpp_typemaps = shared_typemaps
  blink_cpp_typemaps = shared_typemaps

  deps = [ "//services/viz/public/mojom:surfaces" ]
}

mojom("mojom_layer_trees") {
  generate_java = true
  sources = [
    "element_id.mojom",
    "hit_test_opaqueness.mojom",
    "layer_selection_bound.mojom",
    "layer_tree_debug_state.mojom",
    "layer_type.mojom",
    "missing_tile_reason.mojom",
    "paint_flags.mojom",
    "render_surface_reason.mojom",
    "scrollbar_animator.mojom",
    "synced_scroll_offset.mojom",
    "ui_resource_id.mojom",
  ]
  cpp_typemaps = [
    {
      types = [
        {
          mojom = "cc.mojom.ElementId"
          cpp = "::cc::ElementId"
          nullable_is_same_type = true
          copyable_pass_by_value = true
        },
      ]
      traits_headers = [ "element_id_mojom_traits.h" ]
      traits_public_deps = [ "//cc/paint" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.HitTestOpaqueness"
          cpp = "::cc::HitTestOpaqueness"
        },
      ]
      traits_headers = [ "hit_test_opaqueness_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.FilterQuality"
          cpp = "::cc::PaintFlags::FilterQuality"
        },
        {
          mojom = "cc.mojom.DynamicRangeLimit"
          cpp = "::cc::PaintFlags::DynamicRangeLimitMixture"
        },
      ]
      traits_headers = [ "paint_flags_mojom_traits.h" ]
      traits_public_deps = [ "//cc/paint" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.RenderSurfaceReason"
          cpp = "::cc::RenderSurfaceReason"
        },
      ]
      traits_headers = [ "render_surface_reason_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.ScrollbarAnimator"
          cpp = "::cc::LayerTreeSettings::ScrollbarAnimator"
        },
      ]
      traits_headers = [ "scrollbar_animator_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.SyncedScrollOffset"
          cpp = "::scoped_refptr<::cc::SyncedScrollOffset>"
          nullable_is_same_type = true
          copyable_pass_by_value = true
        },
      ]
      traits_headers = [ "//cc/mojom/synced_scroll_offset_mojom_traits.h" ]
      traits_sources = [ "//cc/mojom/synced_scroll_offset_mojom_traits.cc" ]
      traits_public_deps = [ "//ui/gfx/geometry/mojom" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.UIResourceId"
          cpp = "::cc::UIResourceId"
          copyable_pass_by_value = true
        },
      ]
      traits_headers = [ "ui_resource_id_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.LayerTreeDebugState"
          cpp = "::cc::LayerTreeDebugState"
        },
      ]
      traits_headers = [ "layer_tree_debug_state_mojom_traits.h" ]
    },
    {
      types = [
        {
          mojom = "cc.mojom.LayerSelectionBound"
          cpp = "::cc::LayerSelectionBound"
        },
        {
          mojom = "cc.mojom.LayerSelection"
          cpp = "::cc::LayerSelection"
        },
      ]
      traits_headers = [ "//cc/mojom/layer_selection_bound_mojom_traits.h" ]
      traits_sources = [ "//cc/mojom/layer_selection_bound_mojom_traits.cc" ]
      traits_public_deps = [ "//cc:layer_selection_bound" ]
    },
  ]
  public_deps = [
    "//skia/public/mojom",
    "//ui/gfx/geometry/mojom",
    "//ui/gfx/mojom",
  ]
}