# Copyright 2021 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("context_menu") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "context_menu_configuration_provider.h",
    "context_menu_configuration_provider.mm",
  ]
  deps = [
    ":context_menu_ui",
    "//base",
    "//components/search_engines",
    "//components/url_param_filter/core",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/favicon",
    "//ios/chrome/browser/policy:policy_util",
    "//ios/chrome/browser/prefs:pref_names",
    "//ios/chrome/browser/search_engines",
    "//ios/chrome/browser/ui:feature_flags",
    "//ios/chrome/browser/ui/alert_coordinator",
    "//ios/chrome/browser/ui/commands",
    "//ios/chrome/browser/ui/context_menu/link_preview",
    "//ios/chrome/browser/ui/image_util:web",
    "//ios/chrome/browser/ui/incognito_reauth:incognito_reauth_commands",
    "//ios/chrome/browser/ui/incognito_reauth:incognito_reauth_scene_agent",
    "//ios/chrome/browser/ui/lens:lens_availability",
    "//ios/chrome/browser/ui/main:scene_state_header",
    "//ios/chrome/browser/ui/menu",
    "//ios/chrome/browser/ui/util",
    "//ios/chrome/browser/ui/util:url_with_title",
    "//ios/chrome/browser/url_loading",
    "//ios/chrome/browser/web/image_fetch",
    "//ios/chrome/browser/web_state_list",
    "//ios/chrome/common/ui/favicon:favicon_constants",
    "//ios/public/provider/chrome/browser/context_menu:context_menu_api",
    "//ios/public/provider/chrome/browser/lens:lens_api",
    "//ios/web/common",
    "//ios/web/common:features",
    "//ui/base",
    "//url",
  ]
}

source_set("context_menu_ui") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "context_menu_utils.h",
    "context_menu_utils.mm",
  ]
  deps = [
    "//base",
    "//components/url_formatter",
    "//ios/chrome/common/ui/colors",
    "//ios/chrome/common/ui/favicon",
    "//ios/web/common:features",
    "//ios/web/public/ui",
    "//url",
  ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true

  deps = [
    ":context_menu_ui",
    "//base",
    "//base/test:test_support",
    "//components/url_formatter",
    "//ios/web/common",
    "//ios/web/public",
    "//net",
    "//testing/gtest",
  ]

  sources = [ "context_menu_utils_unittest.mm" ]
}

source_set("eg2_tests") {
  configs += [
    "//build/config/compiler:enable_arc",
    "//build/config/ios:xctest_config",
  ]
  testonly = true
  sources = [ "context_menu_egtest.mm" ]
  deps = [
    "//base",
    "//base/test:test_support",
    "//components/strings",
    "//components/url_param_filter/core",
    "//components/url_param_filter/core:test_support",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser/metrics:eg_test_support+eg2",
    "//ios/chrome/browser/ui/fullscreen:feature_flags",
    "//ios/chrome/browser/ui/fullscreen/test:eg_test_support+eg2",
    "//ios/chrome/test:eg_test_support+eg2",
    "//ios/chrome/test/earl_grey:eg_test_support+eg2",
    "//ios/testing/earl_grey:eg_test_support+eg2",
    "//ios/third_party/earl_grey2:test_lib",
    "//ios/web/common:features",
    "//ios/web/public/test:element_selector",
    "//net:test_support",
    "//url",
  ]
  frameworks = [ "UIKit.framework" ]
}
