# Copyright 2015 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("//ios/build/config.gni")
import("//ios/web/js_compile.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//testing/test.gni")
import("//tools/grit/grit_rule.gni")

group("all_tests") {
  testonly = true
  deps = [
    ":ios_web_inttests",
    ":ios_web_unittests",
  ]
}

source_set("web") {
  public_deps = [
    ":service_names",

    # TODO(crbug.com/616244): Remove private files from public dependencies.
    "//ios/web/navigation:core",
    "//ios/web/net",
    "//ios/web/public",
    "//ios/web/public/download",
    "//ios/web/web_state:web_state_impl_header",
    "//ios/web/web_state/ui",
    "//ios/web/web_state/ui:wk_web_view_configuration_provider",
    "//ios/web/webui",
    "//net",
  ]

  deps = [
    ":core",
    ":js_resources",
    ":navigation_resources",
    ":resources",
    ":service_names",
    "//base",
    "//ios/web/download",
    "//ios/web/interstitials",
    "//ios/web/navigation",
    "//ios/web/net",
    "//ios/web/public",
    "//ios/web/web_state",
    "//ios/web/web_state:error_translation_util",
    "//ios/web/web_state:navigation_context",
    "//ios/web/web_state:web_view_internal_creation_util",
    "//services/catalog/public/cpp",
    "//services/network:network_service",
    "//services/network/public/mojom",
    "//services/service_manager",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/mojom",
  ]

  sources = [
    "browser_state.mm",
    "browser_url_rewriter_impl.h",
    "browser_url_rewriter_impl.mm",
    "crw_navigation_item_storage.mm",
    "features.mm",
    "network_context_owner.cc",
    "service_manager_connection_impl.cc",
    "service_manager_connection_impl.h",
    "service_manager_context.h",
    "service_manager_context.mm",
    "url_scheme_util.mm",
    "url_util.cc",
    "web_browser_manifest.h",
    "web_browser_manifest.mm",
    "web_client.mm",
    "web_kit_constants.cc",
    "web_packaged_services_manifest.h",
    "web_packaged_services_manifest.mm",
    "web_sub_thread.cc",
    "web_sub_thread.h",
    "web_thread_impl.cc",
    "web_thread_impl.h",
    "web_view_creation_util.mm",
  ]

  libs = [ "WebKit.framework" ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

mojom("service_names") {
  sources = [
    "public/service_names.mojom",
  ]
}

source_set("core") {
  configs += [ "//build/config/compiler:enable_arc" ]
  deps = [
    "//base",
    "//url",
  ]

  sources = [
    "history_state_util.cc",
    "history_state_util.h",
  ]
}

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

  deps = [
    ":web",
    "//base",
    "//base/test:test_support",
    "//ios/testing/earl_grey:earl_grey_support",
    "//ios/third_party/earl_grey:earl_grey+link",
    "//ios/web/interstitials",
    "//ios/web/public/test",
    "//net",
  ]

  sources = [
    "public/test/earl_grey/js_test_util.h",
    "public/test/earl_grey/js_test_util.mm",
    "public/test/earl_grey/web_view_actions.h",
    "public/test/earl_grey/web_view_actions.mm",
    "public/test/earl_grey/web_view_matchers.h",
    "public/test/earl_grey/web_view_matchers.mm",
  ]
}

source_set("run_all_unittests") {
  testonly = true
  sources = [
    "test/run_all_unittests.cc",
  ]
  deps = [
    "//base",
    "//base/test:test_support",
    "//ios/web/public/test",
    "//ios/web/public/test/http_server",
    "//mojo/core/embedder",
  ]
}

bundle_data("ios_web_unittests_bundle_data") {
  testonly = true
  sources = [
    "test/data/chrome.html",
    "test/data/testbadpass.pkpass",
    "test/data/testfavicon.png",
    "test/data/testpass.pkpass",
  ]
  outputs = [
    "{{bundle_resources_dir}}/{{source_root_relative_dir}}/" +
        "{{source_file_part}}",
  ]
}

test("ios_web_unittests") {
  deps = [
    # Ensure all required data are present in the bundle, and that the
    # test runner is linked.
    ":ios_web_unittests_bundle_data",
    ":run_all_unittests",

    # Add individual test source_set targets here.
    ":ios_web_general_unittests",
    ":ios_web_navigation_unittests",
    ":ios_web_net_unittests",
    ":ios_web_public_unittests",
    ":ios_web_web_state_js_unittests",
    ":ios_web_web_state_ui_unittests",
    ":ios_web_web_state_unittests",
    ":ios_web_webui_unittests",
    "//ios/testing:http_server_bundle_data",
    "//ios/web/download:download_unittests",
    "//ios/web/interstitials:interstitials_unittests",
  ]

  assert_no_deps = ios_assert_no_deps
  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("ios_web_general_unittests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  deps = [
    ":core",
    ":web",
    "//base",
    "//base/test:test_support",
    "//components/url_formatter",
    "//ios/net",
    "//ios/testing:ocmock_support",
    "//ios/web/public",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//ios/web/test:mojo_bindings",
    "//ios/web/test:test_constants",
    "//ios/web/test:test_support",
    "//net:test_support",
    "//services/service_manager/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base:test_support",
  ]

  sources = [
    "browser_state_unittest.cc",
    "history_state_util_unittest.mm",
    "network_context_owner_unittest.cc",
    "service_manager_connection_impl_unittest.cc",
    "test/web_test_unittest.mm",
    "url_scheme_util_unittest.mm",
    "url_util_unittest.cc",
    "web_client_unittest.mm",
    "web_thread_unittest.cc",
  ]
}

source_set("ios_web_navigation_unittests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  deps = [
    ":core",
    ":web",
    "//base",
    "//base/test:test_support",
    "//components/url_formatter",
    "//ios/net",
    "//ios/testing:ocmock_support",
    "//ios/web/navigation",
    "//ios/web/navigation:core",
    "//ios/web/public",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//ios/web/test:mojo_bindings",
    "//ios/web/test:test_constants",
    "//ios/web/test:test_support",
    "//ios/web/test/fakes",
    "//ios/web/web_state/ui:crw_web_view_navigation_proxy",
    "//net:test_support",
    "//services/service_manager/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base:test_support",
  ]

  sources = [
    "navigation/crw_navigation_item_holder_unittest.mm",
    "navigation/crw_navigation_item_storage_unittest.mm",
    "navigation/crw_session_controller_unittest.mm",
    "navigation/crw_session_storage_unittest.mm",
    "navigation/error_retry_state_machine_unittest.mm",
    "navigation/navigation_item_impl_unittest.mm",
    "navigation/navigation_item_storage_test_util.h",
    "navigation/navigation_item_storage_test_util.mm",
    "navigation/navigation_manager_impl_unittest.mm",
    "navigation/navigation_manager_util_unittest.mm",
    "navigation/nscoder_util_unittest.mm",
    "navigation/wk_based_navigation_manager_impl_unittest.mm",
    "navigation/wk_navigation_util_unittest.mm",
  ]
}

source_set("ios_web_net_unittests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  deps = [
    ":core",
    ":web",
    "//base",
    "//base/test:test_support",
    "//components/url_formatter",
    "//ios/net",
    "//ios/net:test_support",
    "//ios/testing:ocmock_support",
    "//ios/web/navigation",
    "//ios/web/net/cookies",
    "//ios/web/public",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//ios/web/test:mojo_bindings",
    "//ios/web/test:test_constants",
    "//ios/web/test:test_support",
    "//ios/web/test/fakes",
    "//ios/web/web_state:wk_web_view_security_util",
    "//net:test_support",
    "//services/service_manager/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base:test_support",
  ]

  sources = [
    "net/cert_host_pair_unittest.cc",
    "net/cert_policy_unittest.cc",
    "net/cookies/system_cookie_store_util_unittest.mm",
    "net/cookies/wk_cookie_util_unittest.mm",
    "net/cookies/wk_http_system_cookie_store_unittest.mm",
    "net/crw_cert_verification_controller_unittest.mm",
    "net/crw_ssl_status_updater_unittest.mm",
    "net/request_group_util_unittest.mm",
    "net/request_tracker_impl_unittest.mm",
    "net/web_http_protocol_handler_delegate_unittest.mm",
  ]
}

source_set("test_support") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "public/test/crw_mock_web_state_delegate.h",
    "public/test/crw_mock_web_state_delegate.mm",
  ]
  deps = [
    "//ios/testing:ocmock_support",
    "//ios/web",
  ]
}

source_set("ios_web_public_unittests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  deps = [
    ":core",
    ":test_support",
    ":web",
    "//base",
    "//base/test:test_support",
    "//components/url_formatter",
    "//ios/net",
    "//ios/net:ios_net_unittests",
    "//ios/testing:ocmock_support",
    "//ios/web/public",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//ios/web/test:mojo_bindings",
    "//ios/web/test:test_constants",
    "//ios/web/test:test_support",
    "//ios/web/web_state:page_viewport_state",
    "//net:test_support",
    "//services/service_manager/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base:test_support",
  ]

  sources = [
    "public/crw_session_certificate_policy_cache_storage_unittest.mm",
    "public/origin_util_unittest.mm",
    "public/referrer_util_unittest.cc",
    "public/serializable_user_data_manager_unittest.mm",
    "public/ssl_status_unittest.cc",
    "public/user_agent_unittest.mm",
    "public/web_state/page_viewport_state_unittest.mm",
  ]
}

source_set("ios_web_web_state_unittests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  deps = [
    ":core",
    ":test_support",
    ":web",
    "//base",
    "//base/test:test_support",
    "//components/url_formatter",
    "//ios/net",
    "//ios/testing:ocmock_support",
    "//ios/web",
    "//ios/web/interstitials",
    "//ios/web/navigation",
    "//ios/web/public",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//ios/web/test:mojo_bindings",
    "//ios/web/test:test_constants",
    "//ios/web/test:test_support",
    "//ios/web/test/fakes",
    "//ios/web/web_state",
    "//ios/web/web_state:context_menu",
    "//ios/web/web_state:error_translation_util",
    "//ios/web/web_state:navigation_context",
    "//ios/web/web_state:session_certificate_policy_cache",
    "//ios/web/web_state:web_frame",
    "//ios/web/web_state:web_view_internal_creation_util",
    "//ios/web/web_state:wk_web_view_security_util",
    "//net:test_support",
    "//services/service_manager/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base:test_support",
    "//ui/gfx:test_support",
  ]

  sources = [
    "web_state/context_menu_params_utils_unittest.mm",
    "web_state/error_translation_util_unittest.mm",
    "web_state/navigation_context_impl_unittest.mm",
    "web_state/page_display_state_unittest.mm",
    "web_state/session_certificate_policy_cache_impl_unittest.mm",
    "web_state/session_certificate_policy_cache_storage_builder_unittest.mm",
    "web_state/web_frame_impl_unittest.mm",
    "web_state/web_frame_util_unittest.mm",
    "web_state/web_frames_manager_impl_unittest.mm",
    "web_state/web_state_delegate_bridge_unittest.mm",
    "web_state/web_state_impl_unittest.mm",
    "web_state/web_state_observer_bridge_unittest.mm",
    "web_state/web_state_policy_decider_bridge_unittest.mm",
    "web_state/web_state_unittest.mm",
    "web_state/web_view_internal_creation_util_unittest.mm",
    "web_state/wk_web_view_security_util_unittest.mm",
  ]
}

source_set("ios_web_web_state_js_unittests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  deps = [
    ":core",
    ":web",
    "//base",
    "//base/test:test_support",
    "//components/url_formatter",
    "//ios/net",
    "//ios/testing:ocmock_support",
    "//ios/web/find_in_page",
    "//ios/web/public",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//ios/web/test:mojo_bindings",
    "//ios/web/test:test_constants",
    "//ios/web/test:test_support",
    "//ios/web/web_state:context_menu",
    "//ios/web/web_state:navigation_context",
    "//ios/web/web_state/js",
    "//ios/web/web_state/js:script_util",
    "//ios/web/web_state/ui:crw_wk_script_message_router",
    "//net:test_support",
    "//services/service_manager/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base:test_support",
  ]

  sources = [
    "web_state/js/common_js_unittest.mm",
    "web_state/js/context_menu_js_unittest.mm",
    "web_state/js/crw_js_injection_manager_unittest.mm",
    "web_state/js/crw_js_post_request_loader_unittest.mm",
    "web_state/js/crw_js_window_id_manager_unittest.mm",
    "web_state/js/find_in_page_unittest.mm",
    "web_state/js/message_js_unittest.mm",
    "web_state/js/page_script_util_unittest.mm",
  ]
}

source_set("ios_web_web_state_ui_unittests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  deps = [
    ":core",
    ":web",
    "//base",
    "//base/test:test_support",
    "//components/url_formatter",
    "//ios/net",
    "//ios/testing:ocmock_support",
    "//ios/web/navigation",
    "//ios/web/navigation:core",
    "//ios/web/public",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//ios/web/test:mojo_bindings",
    "//ios/web/test:test_constants",
    "//ios/web/test:test_support",
    "//ios/web/test/fakes:fakes",
    "//ios/web/web_state:context_menu",
    "//ios/web/web_state:navigation_context",
    "//ios/web/web_state:wk_web_view_security_util",
    "//ios/web/web_state/js",
    "//ios/web/web_state/js:script_util",
    "//ios/web/web_state/ui:crw_context_menu_controller",
    "//ios/web/web_state/ui:crw_wk_script_message_router",
    "//ios/web/web_state/ui:favicon_util",
    "//ios/web/web_state/ui:web_view_js_utils",
    "//net:test_support",
    "//services/service_manager/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base:test_support",
  ]

  sources = [
    "web_state/ui/crw_web_controller_unittest.mm",
    "web_state/ui/crw_web_view_content_view_unittest.mm",
    "web_state/ui/crw_web_view_proxy_impl_unittest.mm",
    "web_state/ui/crw_web_view_scroll_view_proxy_unittest.mm",
    "web_state/ui/crw_wk_navigation_states_unittest.mm",
    "web_state/ui/crw_wk_script_message_router_unittest.mm",
    "web_state/ui/favicon_util_unittest.mm",
    "web_state/ui/html_element_fetch_request_unittest.mm",
    "web_state/ui/web_view_js_utils_unittest.mm",
    "web_state/ui/wk_back_forward_list_item_holder_unittest.mm",
    "web_state/ui/wk_navigation_action_util_unittest.mm",
    "web_state/ui/wk_web_view_configuration_provider_unittest.mm",
  ]
}

source_set("ios_web_webui_unittests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  deps = [
    ":core",
    ":web",
    "//base",
    "//base/test:test_support",
    "//components/url_formatter",
    "//ios/net",
    "//ios/testing:ocmock_support",
    "//ios/web/public",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//ios/web/test:mojo_bindings",
    "//ios/web/test:test_constants",
    "//ios/web/test:test_support",
    "//net:test_support",
    "//services/network:test_support",
    "//services/service_manager/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base:test_support",
  ]

  sources = [
    "webui/crw_web_ui_manager_unittest.mm",
    "webui/crw_web_ui_page_builder_unittest.mm",
    "webui/mojo_facade_unittest.mm",
    "webui/url_fetcher_block_adapter_unittest.mm",
  ]
}

test("ios_web_inttests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  deps = [
    ":web",
    "//base/test:test_support",
    "//ios/testing:embedded_test_server_support",
    "//ios/testing:http_server_bundle_data",
    "//ios/web:resources_grit",
    "//ios/web/download:download_inttests",
    "//ios/web/navigation:core",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//ios/web/public/test/http_server",
    "//ios/web/test:mojo_bindings",
    "//ios/web/test:packed_resources",
    "//ios/web/test:resources",
    "//ios/web/test:test_constants",
    "//ios/web/test:test_support",
    "//ios/web/web_state",
    "//ios/web/web_state:web_frame",
    "//mojo/core/embedder",
    "//net:test_support",
    "//services/network/public/cpp",
    "//services/service_manager/public/cpp",
    "//testing/gtest",
    "//ui/base:test_support",
  ]
  sources = [
    "browser_state_web_view_partition_inttest.mm",
    "navigation/history_state_operations_inttest.mm",
    "navigation/window_location_inttest.mm",
    "public/test/http_server_inttest.mm",
    "test/run_all_unittests.cc",
    "url_loader_inttest.mm",
    "web_state/bad_ssl_response_inttest.mm",
    "web_state/error_page_inttest.mm",
    "web_state/favicon_callbacks_inttest.mm",
    "web_state/http_auth_inttest.mm",
    "web_state/web_frame_impl_inttest.mm",
    "web_state/web_frame_web_state_observer_inttest.mm",
    "web_state/web_frames_manager_inttest.mm",
    "web_state/web_state_observer_inttest.mm",
    "webui/web_ui_mojo_inttest.mm",
  ]

  assert_no_deps = ios_assert_no_deps
}

js_compile_bundle("web_ui_bundle") {
  visibility = [ ":js_resources" ]
  closure_entry_point = "__crWeb.webUIBundle"

  sources = [
    "webui/resources/mojo_api.js",
    "webui/resources/web_ui_base.js",
    "webui/resources/web_ui_bind.js",
    "webui/resources/web_ui_bundle.js",
    "webui/resources/web_ui_send.js",
  ]
}

js_compile_bundle("main_frame_web_bundle") {
  visibility = [ ":js_resources" ]
  closure_entry_point = "__crWeb.mainFrameWebBundle"

  sources = [
    "web_state/js/resources/error.js",
    "web_state/js/resources/legacy.js",
    "web_state/js/resources/main_frame_context_menu.js",
    "web_state/js/resources/main_frame_web_bundle.js",
    "web_state/js/resources/navigation.js",
    "web_state/js/resources/scroll_workaround.js",
  ]
}

js_compile_bundle("all_frames_web_bundle") {
  visibility = [ ":js_resources" ]
  closure_entry_point = "__crWeb.allFramesWebBundle"

  sources = [
    "web_state/js/resources/all_frames_context_menu.js",
    "web_state/js/resources/all_frames_web_bundle.js",
    "web_state/js/resources/base.js",
    "web_state/js/resources/common.js",
    "web_state/js/resources/find_in_page.js",
    "web_state/js/resources/message.js",
  ]
}

js_compile_bundle("all_frames_document_end_web_bundle") {
  visibility = [ ":js_resources" ]
  closure_entry_point = "__crWeb.allFramesDocumentEndWebBundle"

  sources = [
    "web_state/js/resources/all_frames_document_end_web_bundle.js",
    "web_state/js/resources/plugin_placeholder.js",
    "web_state/js/resources/setup_frame.js",
  ]
}

js_compile_bundle("nav_bundle") {
  visibility = [ ":js_resources" ]
  closure_entry_point = "__crWeb.legacynavigation"

  sources = [
    "web_state/js/resources/legacy_navigation.js",
  ]
}

js_compile_checked("js_resources") {
  public_deps = [
    ":all_frames_document_end_web_bundle",
    ":all_frames_web_bundle",
    ":main_frame_web_bundle",
    ":nav_bundle",
    ":web_ui_bundle",
  ]

  sources = [
    "web_state/js/resources/post_request.js",
    "web_state/js/resources/window_id.js",
  ]
}

bundle_data("navigation_resources") {
  sources = [
    "navigation/resources/restore_session.html",
  ]
  outputs = [
    "{{bundle_resources_dir}}/{{source_file_part}}",
  ]
}

grit("resources") {
  source = "ios_web_resources.grd"

  # The .grd contains references to generated files.
  source_is_generated = true

  outputs = [
    "grit/ios_web_resources.h",
    "ios_web_resources.pak",
  ]
  grit_flags = [
    "-E",
    "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
  ]
  deps = [
    "//mojo/public/js:bindings",
  ]
}
