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

# C++ headers and sources that can be used outside ash.
component("cpp") {
  sources = [
    "accelerators.cc",
    "accelerators.h",
    "app_list/app_list_config.cc",
    "app_list/app_list_config.h",
    "app_list/app_list_features.cc",
    "app_list/app_list_features.h",
    "app_list/app_list_switches.cc",
    "app_list/app_list_switches.h",
    "app_list/app_list_types.cc",
    "app_list/app_list_types.h",
    "app_list/internal_app_id_constants.h",
    "app_list/term_break_iterator.cc",
    "app_list/term_break_iterator.h",
    "app_list/tokenized_string.cc",
    "app_list/tokenized_string.h",
    "app_list/tokenized_string_char_iterator.cc",
    "app_list/tokenized_string_char_iterator.h",
    "app_list/tokenized_string_match.cc",
    "app_list/tokenized_string_match.h",
    "app_menu_constants.h",
    "app_types.h",
    "ash_client.cc",
    "ash_client.h",
    "ash_constants.h",
    "ash_features.cc",
    "ash_features.h",
    "ash_pref_names.cc",
    "ash_pref_names.h",
    "ash_public_export.h",
    "ash_switches.cc",
    "ash_switches.h",
    "ash_typography.cc",
    "ash_typography.h",
    "ash_view_ids.h",
    "assistant/assistant_state_base.cc",
    "assistant/assistant_state_base.h",
    "assistant/assistant_state_proxy.cc",
    "assistant/assistant_state_proxy.h",
    "assistant/default_voice_interaction_observer.h",
    "caption_buttons/caption_button_model.h",
    "caption_buttons/frame_back_button.cc",
    "caption_buttons/frame_back_button.h",
    "caption_buttons/frame_caption_button_container_view.cc",
    "caption_buttons/frame_caption_button_container_view.h",
    "caption_buttons/frame_caption_delegate.h",
    "caption_buttons/frame_size_button.cc",
    "caption_buttons/frame_size_button.h",
    "caption_buttons/frame_size_button_delegate.h",
    "default_frame_header.cc",
    "default_frame_header.h",
    "default_scale_factor_retriever.cc",
    "default_scale_factor_retriever.h",
    "frame_header.cc",
    "frame_header.h",
    "frame_utils.cc",
    "frame_utils.h",
    "gesture_action_type.h",
    "immersive/immersive_context.h",
    "immersive/immersive_focus_watcher.cc",
    "immersive/immersive_focus_watcher.h",
    "immersive/immersive_fullscreen_controller.cc",
    "immersive/immersive_fullscreen_controller.h",
    "immersive/immersive_fullscreen_controller_delegate.h",
    "immersive/immersive_revealed_lock.cc",
    "immersive/immersive_revealed_lock.h",
    "lock_screen_widget_factory.cc",
    "lock_screen_widget_factory.h",
    "login_constants.h",
    "menu_utils.cc",
    "menu_utils.h",
    "mus_property_mirror_ash.cc",
    "mus_property_mirror_ash.h",
    "network_icon_image_source.cc",
    "network_icon_image_source.h",
    "notification_utils.cc",
    "notification_utils.h",
    "power_utils.cc",
    "power_utils.h",
    "remote_shelf_item_delegate.cc",
    "remote_shelf_item_delegate.h",
    "rounded_corner_decorator.cc",
    "rounded_corner_decorator.h",
    "scale_utility.cc",
    "scale_utility.h",
    "session_types.h",
    "shelf_item.cc",
    "shelf_item.h",
    "shelf_item_delegate.cc",
    "shelf_item_delegate.h",
    "shelf_model.cc",
    "shelf_model.h",
    "shelf_model_observer.h",
    "shelf_prefs.cc",
    "shelf_prefs.h",
    "shelf_types.cc",
    "shelf_types.h",
    "shell_window_ids.cc",
    "shell_window_ids.h",
    "stylus_utils.cc",
    "stylus_utils.h",
    "system_tray_focus_observer.h",
    "tablet_mode.cc",
    "tablet_mode.h",
    "touch_uma.cc",
    "touch_uma.h",
    "wallpaper_types.h",
    "window_animation_types.h",
    "window_pin_type.cc",
    "window_pin_type.h",
    "window_properties.cc",
    "window_properties.h",
    "window_state_type.cc",
    "window_state_type.h",
  ]

  defines = [ "ASH_PUBLIC_IMPLEMENTATION" ]

  deps = [
    "//ash/public/cpp/vector_icons",
    "//chromeos/constants",
    "//chromeos/dbus:power_manager_proto",
    "//components/prefs",
    "//mojo/public/cpp/bindings",
    "//services/service_manager/public/cpp",
    "//services/ws/public/cpp",
    "//services/ws/public/mojom",
    "//skia/public/interfaces",
    "//ui/aura",
    "//ui/chromeos/strings",
    "//ui/compositor_extra",
    "//ui/display",
    "//ui/events/devices",
    "//ui/message_center/public/cpp",
    "//ui/views",
    "//ui/views/mus",
    "//ui/views/window/vector_icons",
    "//ui/wm",
    "//ui/wm/public",
  ]

  public_deps = [
    "//ash/public/interfaces:interfaces_internal",
    "//base",
    "//ui/gfx",
  ]

  allow_circular_includes_from =
      [ "//ash/public/interfaces:interfaces_internal" ]

  output_name = "ash_public_cpp"
}

source_set("manifest") {
  sources = [
    "manifest.cc",
    "manifest.h",
  ]

  deps = [
    "//ash/public/interfaces:interfaces_internal",
    "//base",
    "//chromeos/services/multidevice_setup/public/mojom",
    "//services/content/public/mojom",
    "//services/data_decoder/public/mojom",
    "//services/device/public/mojom",
    "//services/preferences/public/mojom",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/mojom",
    "//services/viz/public/interfaces",
    "//services/ws/public/cpp:manifest",
    "//services/ws/public/mojom",
  ]
}

source_set("manifest_for_tests") {
  testonly = true

  sources = [
    "test_manifest.cc",
    "test_manifest.h",
  ]

  deps = [
    ":manifest",
    "//ash/public/interfaces:test_interfaces",
    "//base",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/mojom",
  ]
}

# Using a test service because the traits need to pass handles around. Revisit
# this after Deserialize(Serialize()) API works with handles.
mojom("test_interfaces") {
  visibility = [ ":unit_tests" ]
  disable_variants = true

  sources = [
    "shelf_struct_traits_test_service.mojom",
  ]

  public_deps = [
    "//ash/public/interfaces:interfaces_internal",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "default_scale_factor_retriever_unittest.cc",
    "menu_utils_unittest.cc",
    "power_utils_unittest.cc",
    "rounded_corner_decorator_unittest.cc",
    "shelf_model_unittest.cc",
    "shelf_struct_mojom_traits_unittest.cc",
  ]

  deps = [
    ":cpp",
    ":test_interfaces",
    "//base",
    "//testing/gtest",
    "//ui/aura:test_support",
    "//ui/gfx:test_support",
  ]
}

source_set("test_support") {
  testonly = true
  sources = [
    "immersive/immersive_fullscreen_controller_test_api.cc",
    "immersive/immersive_fullscreen_controller_test_api.h",
    "test/test_keyboard_controller_observer.cc",
    "test/test_keyboard_controller_observer.h",
  ]

  deps = [
    ":cpp",
    "//base",
    "//services/service_manager/public/cpp",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/gfx",
    "//ui/keyboard:mojom",
    "//ui/views",
  ]
}
