# Copyright 2014 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("//build/config/ui.gni")
import("//testing/test.gni")

assert(is_chromeos)

component("app_list") {
  sources = [
    "app_list_export.h",
    "app_list_metrics.cc",
    "app_list_metrics.h",
    "app_list_util.cc",
    "app_list_util.h",
    "app_list_view_delegate.h",
    "paged_view_structure.cc",
    "paged_view_structure.h",
    "views/app_list_drag_and_drop_host.h",
    "views/app_list_folder_view.cc",
    "views/app_list_folder_view.h",
    "views/app_list_item_view.cc",
    "views/app_list_item_view.h",
    "views/app_list_main_view.cc",
    "views/app_list_main_view.h",
    "views/app_list_menu_model_adapter.cc",
    "views/app_list_menu_model_adapter.h",
    "views/app_list_page.cc",
    "views/app_list_page.h",
    "views/app_list_view.cc",
    "views/app_list_view.h",
    "views/apps_container_view.cc",
    "views/apps_container_view.h",
    "views/apps_grid_view.cc",
    "views/apps_grid_view.h",
    "views/apps_grid_view_folder_delegate.h",
    "views/assistant/assistant_main_stage.cc",
    "views/assistant/assistant_main_stage.h",
    "views/assistant/assistant_main_view.cc",
    "views/assistant/assistant_main_view.h",
    "views/assistant/assistant_page_view.cc",
    "views/assistant/assistant_page_view.h",
    "views/assistant/dialog_plate.cc",
    "views/assistant/dialog_plate.h",
    "views/assistant/privacy_info_view.cc",
    "views/assistant/privacy_info_view.h",
    "views/contents_view.cc",
    "views/contents_view.h",
    "views/expand_arrow_view.cc",
    "views/expand_arrow_view.h",
    "views/folder_background_view.cc",
    "views/folder_background_view.h",
    "views/folder_header_view.cc",
    "views/folder_header_view.h",
    "views/folder_header_view_delegate.h",
    "views/ghost_image_view.cc",
    "views/ghost_image_view.h",
    "views/horizontal_page.cc",
    "views/horizontal_page.h",
    "views/horizontal_page_container.cc",
    "views/horizontal_page_container.h",
    "views/page_switcher.cc",
    "views/page_switcher.h",
    "views/pulsing_block_view.cc",
    "views/pulsing_block_view.h",
    "views/remove_query_confirmation_dialog.cc",
    "views/remove_query_confirmation_dialog.h",
    "views/search_box_view.cc",
    "views/search_box_view.h",
    "views/search_result_actions_view.cc",
    "views/search_result_actions_view.h",
    "views/search_result_actions_view_delegate.h",
    "views/search_result_answer_card_view.cc",
    "views/search_result_answer_card_view.h",
    "views/search_result_base_view.cc",
    "views/search_result_base_view.h",
    "views/search_result_container_view.cc",
    "views/search_result_container_view.h",
    "views/search_result_list_view.cc",
    "views/search_result_list_view.h",
    "views/search_result_page_view.cc",
    "views/search_result_page_view.h",
    "views/search_result_suggestion_chip_view.cc",
    "views/search_result_suggestion_chip_view.h",
    "views/search_result_tile_item_list_view.cc",
    "views/search_result_tile_item_list_view.h",
    "views/search_result_tile_item_view.cc",
    "views/search_result_tile_item_view.h",
    "views/search_result_view.cc",
    "views/search_result_view.h",
    "views/suggestion_chip_container_view.cc",
    "views/suggestion_chip_container_view.h",
    "views/top_icon_animation_view.cc",
    "views/top_icon_animation_view.h",
  ]

  defines = [ "APP_LIST_IMPLEMENTATION" ]

  deps = [
    "//ash/app_list/resources",
    "//ash/app_menu",
    "//ash/assistant/model",
    "//ash/assistant/ui",
    "//ash/assistant/ui:constants",
    "//ash/assistant/util",
    "//ash/keyboard/ui",
    "//ash/public/cpp/app_list/vector_icons",
    "//ash/public/cpp/vector_icons",
    "//ash/resources/vector_icons",
    "//ash/strings",
    "//base",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//cc/paint",
    "//chromeos:chromeos",
    "//components/keyed_service/core",
    "//components/sync",
    "//mojo/public/cpp/bindings",
    "//services/content/public/cpp",
    "//skia",
    "//third_party/icu",
    "//ui/accessibility",
    "//ui/aura",
    "//ui/base",
    "//ui/base/ime",
    "//ui/base/ime/chromeos",
    "//ui/chromeos/search_box",
    "//ui/compositor",
    "//ui/display",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/resources",
    "//ui/strings",
    "//ui/views",
    "//ui/wm",
    "//ui/wm/public",
  ]

  # TODO(hejq): Remove this once app_list is migrated. http://crbug.com/733662
  public_deps = [
    "//ash/app_list/model:app_list_model",
    "//ash/app_list/model:search_model",
    "//ash/public/cpp",
    "//services/content/public/mojom",
  ]
}

static_library("test_support") {
  testonly = true

  sources = [
    "test/app_list_test_model.cc",
    "test/app_list_test_model.h",
    "test/app_list_test_view_delegate.cc",
    "test/app_list_test_view_delegate.h",
    "test/test_search_result.cc",
    "test/test_search_result.h",
    "views/test/apps_grid_view_test_api.cc",
    "views/test/apps_grid_view_test_api.h",
  ]

  deps = [
    ":app_list",
    "//base",
    "//services/content/public/cpp/test:test_support",
    "//ui/base:base",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]
}

executable("app_list_demo") {
  testonly = true

  sources = [
    "demo/app_list_demo_views.cc",
  ]

  deps = [
    ":app_list",
    ":test_support",
    "//base",
    "//build/win:default_exe_manifest",
    "//content",
    "//content/public/browser",
    "//skia",
    "//ui/base",
    "//ui/events",
    "//ui/resources",
    "//ui/resources:ui_test_pak",
    "//ui/views",
    "//ui/views_content_client",
    "//url",
  ]
}

test("app_list_unittests") {
  sources = [
    "folder_image_unittest.cc",
    "test/run_all_unittests.cc",
    "views/app_list_main_view_unittest.cc",
    "views/app_list_menu_model_adapter_unittest.cc",
    "views/app_list_view_unittest.cc",
    "views/apps_grid_view_unittest.cc",
    "views/folder_header_view_unittest.cc",
    "views/search_box_view_unittest.cc",
    "views/search_result_answer_card_view_unittest.cc",
    "views/search_result_list_view_unittest.cc",
    "views/search_result_page_view_unittest.cc",
    "views/search_result_tile_item_list_view_unittest.cc",
  ]

  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  deps = [
    ":app_list",
    ":test_support",
    "//ash/keyboard/ui",
    "//ash/public/cpp/app_list/vector_icons",
    "//base",
    "//base/test:test_support",
    "//chromeos/constants",
    "//mojo/core/embedder",
    "//mojo/public/cpp/bindings",
    "//services/content/public/cpp",
    "//services/content/public/cpp/test:test_support",
    "//services/content/public/mojom",
    "//skia",
    "//testing/gtest",
    "//ui/accessibility",
    "//ui/base",
    "//ui/chromeos/search_box",
    "//ui/compositor",
    "//ui/events:test_support",
    "//ui/gfx:test_support",
    "//ui/gl:test_support",
    "//ui/resources",
    "//ui/views",
    "//ui/views:test_support",
  ]

  data_deps = [
    "//third_party/mesa_headers",
    "//ui/resources:ui_test_pak_data",
  ]
}
