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

component("app_list") {
  sources = [
    "app_list_constants.cc",
    "app_list_constants.h",
    "app_list_export.h",
    "app_list_features.cc",
    "app_list_features.h",
    "app_list_switches.cc",
    "app_list_switches.h",
    "app_list_util.cc",
    "app_list_util.h",
    "app_list_view_delegate.h",
    "pagination_controller.cc",
    "pagination_controller.h",
    "pagination_model.cc",
    "pagination_model.h",
    "pagination_model_observer.h",
    "search/dictionary_data_store.cc",
    "search/dictionary_data_store.h",
    "search/history.cc",
    "search/history.h",
    "search/history_data.cc",
    "search/history_data.h",
    "search/history_data_observer.h",
    "search/history_data_store.cc",
    "search/history_data_store.h",
    "search/history_types.h",
    "search_provider.cc",
    "search_provider.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_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/image_shadow_animator.cc",
    "views/image_shadow_animator.h",
    "views/indicator_chip_view.cc",
    "views/indicator_chip_view.h",
    "views/page_switcher.h",
    "views/page_switcher_horizontal.cc",
    "views/page_switcher_horizontal.h",
    "views/page_switcher_vertical.cc",
    "views/page_switcher_vertical.h",
    "views/pulsing_block_view.cc",
    "views/pulsing_block_view.h",
    "views/search_box_view.cc",
    "views/search_box_view.h",
    "views/search_box_view_delegate.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_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_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/speech_view.cc",
    "views/speech_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 = [
    "//base",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//cc/paint",
    "//components/keyed_service/core",
    "//components/sync",
    "//components/wallpaper",
    "//mojo/public/cpp/bindings",
    "//services/ui/public/cpp",
    "//services/ui/public/interfaces",
    "//skia",
    "//third_party/icu",
    "//ui/accessibility",
    "//ui/app_list/resources",
    "//ui/app_list/vector_icons",
    "//ui/aura",
    "//ui/base",
    "//ui/base/ime",
    "//ui/compositor",
    "//ui/display",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/keyboard/",
    "//ui/resources",
    "//ui/strings",
    "//ui/views",
    "//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/app_list/model:speech_ui_model",
    "//ash/public/cpp:cpp",
  ]
}

static_library("test_support") {
  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",
    "//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/config:exe_and_shlib_deps",
    "//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/controls/webview",
    "//ui/views_content_client",
    "//url",
  ]
}

test("app_list_unittests") {
  sources = [
    "app_list_item_list_unittest.cc",
    "app_list_model_unittest.cc",
    "folder_image_unittest.cc",
    "pagination_model_unittest.cc",
    "search/history_data_store_unittest.cc",
    "search/term_break_iterator_unittest.cc",
    "search/tokenized_string_char_iterator_unittest.cc",
    "search/tokenized_string_match_unittest.cc",
    "search/tokenized_string_unittest.cc",
    "test/run_all_unittests.cc",
    "views/app_list_main_view_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",
    "views/speech_view_unittest.cc",
  ]

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

  deps = [
    ":app_list",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//mojo/edk/system",
    "//skia",
    "//testing/gtest",
    "//ui/accessibility",
    "//ui/app_list/vector_icons",
    "//ui/base",
    "//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:osmesa",
    "//ui/resources:ui_test_pak_data",
  ]
}
