# 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.

source_set("tools_menu") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "reading_list_menu_view_item.h",
    "reading_list_menu_view_item.mm",
    "tools_menu_constants.h",
    "tools_menu_constants.mm",
    "tools_menu_model.h",
    "tools_menu_model.mm",
    "tools_menu_view_controller.h",
    "tools_menu_view_controller.mm",
    "tools_menu_view_item.h",
    "tools_menu_view_item.mm",
    "tools_menu_view_tools_cell.h",
    "tools_menu_view_tools_cell.mm",
    "tools_popup_controller.h",
    "tools_popup_controller.mm",
  ]
  deps = [
    "//base",
    "//base:i18n",
    "//components/strings",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser",
    "//ios/chrome/browser/ui",
    "//ios/chrome/browser/ui/colors",
    "//ios/chrome/browser/ui/commands",
    "//ios/chrome/browser/ui/popup_menu",
    "//ios/chrome/browser/ui/reading_list",
    "//ios/chrome/browser/ui/reading_list:reading_list_ui",
    "//ios/chrome/browser/ui/toolbar:resource_macros",
    "//ios/chrome/common",
    "//ios/public/provider/chrome/browser",
    "//ios/public/provider/chrome/browser/user_feedback",
    "//ios/shared/chrome/browser/ui/tools_menu",
    "//ios/third_party/material_components_ios",
    "//ios/third_party/material_roboto_font_loader_ios",
    "//ios/web:user_agent",
    "//ui/base",
  ]
  libs = [
    "QuartzCore.framework",
    "UIKit.framework",
  ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "tools_menu_view_controller_unittest.mm",
    "tools_menu_view_item_unittest.mm",
  ]
  deps = [
    ":tools_menu",
    "//base",
    "//ios/chrome/browser:browser",
    "//ios/chrome/browser/ui/commands:commands",
    "//ios/shared/chrome/browser/ui/tools_menu",
    "//ios/web:user_agent",
    "//testing/gtest",
  ]
}

source_set("eg_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "request_desktop_mobile_site_egtest.mm",
    "tools_popup_menu_egtest.mm",
  ]
  deps = [
    ":tools_menu",
    "//base",
    "//components/strings",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser:browser",
    "//ios/chrome/browser/ui",
    "//ios/chrome/browser/ui:ui_internal",
    "//ios/chrome/browser/ui/toolbar",
    "//ios/chrome/test/earl_grey:test_support",
    "//ios/third_party/earl_grey",
    "//ios/web/public/test",
    "//ios/web/public/test/http_server",
    "//ui/base",
  ]
  libs = [ "XCTest.framework" ]
}
