# 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",
    "pagination_controller.cc",
    "pagination_controller.h",
    "pagination_model.cc",
    "pagination_model.h",
    "pagination_model_observer.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/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/suggestion_chip_view.cc",
    "views/suggestion_chip_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/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",
    "//services/ws/public/cpp",
    "//services/ws/public/mojom",
    "//services/ws/remote_view_host",
    "//skia",
    "//third_party/icu",
    "//ui/accessibility",
    "//ui/aura",
    "//ui/base",
    "//ui/base/ime",
    "//ui/chromeos/search_box",
    "//ui/compositor",
    "//ui/display",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/keyboard/",
    "//ui/resources",
    "//ui/strings",
    "//ui/views",
    "//ui/views/mus/remote_view:remote_view_host",
    "//ui/wm",
  ]

  # 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",
    "pagination_model_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/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/keyboard",
    "//ui/resources",
    "//ui/views",
    "//ui/views:test_support",
  ]

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