# Copyright 2015 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")

# Depend upon //ash/public/cpp, which has a public_dep on this. The two targets
# must be bundled together as the typemaps depend upon //ash/public/cpp,
# and //ash/public/cpp needs to depend on this for generated code (such as
# enums and constants).
mojom("interfaces_internal") {
  visibility = [
    "//ash/public/cpp:*",
    "//ash/public/interfaces:test_interfaces",
  ]
  disable_variants = true

  sources = [
    "accessibility_controller.mojom",
    "accessibility_controller_enums.mojom",
    "accessibility_focus_ring_controller.mojom",
    "app_list.mojom",
    "app_list_view.mojom",
    "ash_message_center_controller.mojom",
    "assistant_controller.mojom",
    "assistant_image_downloader.mojom",
    "assistant_setup.mojom",
    "assistant_volume_control.mojom",
    "constants.mojom",
    "cros_display_config.mojom",
    "display_output_protection.mojom",
    "docked_magnifier_controller.mojom",
    "event_properties.mojom",
    "event_rewriter_controller.mojom",
    "first_run_helper.mojom",
    "highlighter_controller.mojom",
    "ime_controller.mojom",
    "ime_info.mojom",
    "keyboard_config.mojom",
    "keyboard_controller.mojom",
    "keyboard_controller_types.mojom",
    "kiosk_next_shell.mojom",
    "locale.mojom",
    "login_screen.mojom",
    "login_user_info.mojom",
    "media.mojom",
    "menu.mojom",
    "new_window.mojom",
    "night_light_controller.mojom",
    "note_taking_controller.mojom",
    "process_creation_time_recorder.mojom",
    "shelf.mojom",
    "shelf_integration_test_api.mojom",
    "shutdown.mojom",
    "system_tray.mojom",
    "tablet_mode.mojom",
    "tray_action.mojom",
    "update.mojom",
    "user_info.mojom",
    "voice_interaction_controller.mojom",
    "vpn_list.mojom",
    "wallpaper.mojom",
    "window_pin_type.mojom",
    "window_properties.mojom",
  ]

  public_deps = [
    "//chromeos/components/proximity_auth/public/interfaces",
    "//chromeos/services/assistant/public/mojom",
    "//components/account_id/interfaces",
    "//components/arc/common:notifications",
    "//components/sync/mojo:interfaces",
    "//mojo/public/mojom/base",
    "//services/content/public/mojom",
    "//services/preferences/public/mojom",
    "//skia/public/interfaces",
    "//ui/accessibility:ax_enums_mojo",
    "//ui/base/ime/chromeos/public/interfaces",
    "//ui/base/mojo",
    "//ui/display/mojo:interfaces",
    "//ui/events/mojo:interfaces",
    "//ui/gfx/geometry/mojo",
    "//ui/gfx/image/mojo:interfaces",
    "//ui/gfx/range/mojo",
    "//ui/message_center/public/mojo:mojo",
    "//url/mojom:url_mojom_gurl",
  ]

  component_output_prefix = "ash_public_interfaces_internal"
  export_class_attribute = "ASH_PUBLIC_EXPORT"
  export_define = "ASH_PUBLIC_IMPLEMENTATION=1"
  export_header = "ash/public/cpp/ash_public_export.h"
}

mojom("test_interfaces") {
  testonly = true
  disable_variants = true
  sources = [
    "login_screen_test_api.test-mojom",
    "shelf_test_api.test-mojom",
    "status_area_widget_test_api.test-mojom",
    "system_tray_test_api.test-mojom",
    "time_to_first_present_recorder_test_api.test-mojom",
  ]
  deps = [
    "//ash/public/interfaces:interfaces_internal",
    "//components/account_id/interfaces",
    "//mojo/public/mojom/base",
    "//ui/gfx/geometry/mojo",
  ]
}
