# 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/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/horizontal_page.cc",
    "views/horizontal_page.h",
    "views/horizontal_page_container.cc",
    "views/horizontal_page_container.h",
    "views/image_shadow_animator.cc",
    "views/image_shadow_animator.h",
    "views/indicator_chip_view.cc",
    "views/indicator_chip_view.h",
    "views/page_switcher.cc",
    "views/page_switcher.h",
    "views/pulsing_block_view.cc",
    "views/pulsing_block_view.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/suggestions_container_view.cc",
    "views/suggestions_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/ui:constants",
    "//ash/public/cpp/app_list/vector_icons",
    "//ash/public/cpp/vector_icons",
    "//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/image_shadow_animator_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",
    "//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",
  ]
}
