blob: 64f0c40a0416ee0bed377d8c0418df8f8288c5ec [file] [log] [blame]
# 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.
import("//build/buildflag_header.gni")
import("//build/config/ios/ios_sdk.gni")
import("//build/config/ios/rules.gni")
import("//build/config/locales.gni")
import("//components/cronet/native/include/headers.gni")
import("//components/grpc_support/include/headers.gni")
import("//ios/build/config.gni")
import("//ios/web/js_compile.gni")
import("//ios/web_view/features.gni")
import("//ios/web_view/repack.gni")
import("//testing/test.gni")
import("//tools/grit/repack.gni")
buildflag_header("web_view_features") {
header = "cwv_web_view_features.h"
flags = [
"IOS_WEB_VIEW_ENABLE_SYNC=$ios_web_view_enable_sync",
"IOS_WEB_VIEW_ENABLE_AUTOFILL=$ios_web_view_enable_autofill",
]
}
group("all_tests") {
testonly = true
deps = [
":ios_web_view_inttests",
":ios_web_view_unittests",
]
}
config("config") {
defines = [ "CWV_IMPLEMENTATION" ]
libs = [
"CoreGraphics.framework",
"Foundation.framework",
"MobileCoreServices.framework",
"UIKit.framework",
]
}
# These are defined as vars so they can be shared with different targets below.
ios_web_view_public_headers = [
"public/cwv_export.h",
"public/cwv_favicon.h",
"public/cwv_html_element.h",
"public/cwv_navigation_action.h",
"public/cwv_navigation_delegate.h",
"public/cwv_navigation_type.h",
"public/cwv_preferences.h",
"public/cwv_preview_element_info.h",
"public/cwv_script_command.h",
"public/cwv_scroll_view.h",
"public/cwv_scroll_view_delegate.h",
"public/cwv_translation_controller.h",
"public/cwv_translation_controller_delegate.h",
"public/cwv_translation_language.h",
"public/cwv_translation_policy.h",
"public/cwv_ui_delegate.h",
"public/cwv_user_content_controller.h",
"public/cwv_user_script.h",
"public/cwv_web_view.h",
"public/cwv_web_view_configuration.h",
]
if (ios_web_view_enable_sync) {
ios_web_view_public_headers += [
"public/cwv_identity.h",
"public/cwv_sync_controller.h",
"public/cwv_sync_controller_data_source.h",
"public/cwv_sync_controller_delegate.h",
"public/cwv_web_view_configuration_sync.h",
]
}
if (ios_web_view_enable_autofill) {
ios_web_view_public_headers += [
"public/cwv_autofill_controller.h",
"public/cwv_autofill_controller_delegate.h",
"public/cwv_autofill_data_manager.h",
"public/cwv_autofill_data_manager_delegate.h",
"public/cwv_autofill_profile.h",
"public/cwv_autofill_suggestion.h",
"public/cwv_credit_card.h",
"public/cwv_credit_card_verifier.h",
"public/cwv_password_controller.h",
"public/cwv_preferences_autofill.h",
"public/cwv_web_view_autofill.h",
"public/cwv_web_view_configuration_autofill.h",
"public/cwv_web_view_password.h",
]
}
ios_web_view_sources = [
"internal/app/application_context.cc",
"internal/app/application_context.h",
"internal/app/web_view_io_thread.h",
"internal/app/web_view_io_thread.mm",
"internal/autofill/web_view_autofill_client_ios.h",
"internal/autofill/web_view_autofill_client_ios.mm",
"internal/autofill/web_view_personal_data_manager_factory.cc",
"internal/autofill/web_view_personal_data_manager_factory.h",
"internal/content_settings/web_view_cookie_settings_factory.cc",
"internal/content_settings/web_view_cookie_settings_factory.h",
"internal/content_settings/web_view_host_content_settings_map_factory.cc",
"internal/content_settings/web_view_host_content_settings_map_factory.h",
"internal/cwv_favicon.mm",
"internal/cwv_favicon_internal.h",
"internal/cwv_html_element.mm",
"internal/cwv_html_element_internal.h",
"internal/cwv_navigation_action.mm",
"internal/cwv_navigation_action_internal.h",
"internal/cwv_navigation_type.mm",
"internal/cwv_navigation_type_internal.h",
"internal/cwv_preferences.mm",
"internal/cwv_preferences_internal.h",
"internal/cwv_preview_element_info.mm",
"internal/cwv_preview_element_info_internal.h",
"internal/cwv_script_command.mm",
"internal/cwv_script_command_internal.h",
"internal/cwv_scroll_view.mm",
"internal/cwv_scroll_view_internal.h",
"internal/cwv_user_content_controller.mm",
"internal/cwv_user_content_controller_internal.h",
"internal/cwv_user_script.mm",
"internal/cwv_web_view.mm",
"internal/cwv_web_view_configuration.mm",
"internal/cwv_web_view_configuration_internal.h",
"internal/cwv_web_view_internal.h",
"internal/ios_global_state_web_view_configuration.cc",
"internal/language/web_view_language_model_manager_factory.cc",
"internal/language/web_view_language_model_manager_factory.h",
"internal/language/web_view_url_language_histogram_factory.cc",
"internal/language/web_view_url_language_histogram_factory.h",
"internal/passwords/mock_credentials_filter.h",
"internal/passwords/mock_credentials_filter.mm",
"internal/passwords/web_view_password_manager_client.h",
"internal/passwords/web_view_password_manager_client.mm",
"internal/passwords/web_view_password_manager_driver.h",
"internal/passwords/web_view_password_manager_driver.mm",
"internal/passwords/web_view_password_manager_internals_service_factory.h",
"internal/passwords/web_view_password_manager_internals_service_factory.mm",
"internal/passwords/web_view_password_store_factory.h",
"internal/passwords/web_view_password_store_factory.mm",
"internal/pref_names.cc",
"internal/pref_names.h",
"internal/signin/ios_web_view_signin_client.h",
"internal/signin/ios_web_view_signin_client.mm",
"internal/signin/web_view_account_fetcher_service_factory.h",
"internal/signin/web_view_account_fetcher_service_factory.mm",
"internal/signin/web_view_account_tracker_service_factory.h",
"internal/signin/web_view_account_tracker_service_factory.mm",
"internal/signin/web_view_gaia_cookie_manager_service_factory.h",
"internal/signin/web_view_gaia_cookie_manager_service_factory.mm",
"internal/signin/web_view_identity_manager_factory.h",
"internal/signin/web_view_identity_manager_factory.mm",
"internal/signin/web_view_oauth2_token_service_factory.h",
"internal/signin/web_view_oauth2_token_service_factory.mm",
"internal/signin/web_view_profile_oauth2_token_service_ios_provider_impl.h",
"internal/signin/web_view_profile_oauth2_token_service_ios_provider_impl.mm",
"internal/signin/web_view_signin_client_factory.h",
"internal/signin/web_view_signin_client_factory.mm",
"internal/signin/web_view_signin_error_controller_factory.h",
"internal/signin/web_view_signin_error_controller_factory.mm",
"internal/signin/web_view_signin_manager_factory.h",
"internal/signin/web_view_signin_manager_factory.mm",
"internal/sync/web_view_model_type_store_service_factory.h",
"internal/sync/web_view_model_type_store_service_factory.mm",
"internal/sync/web_view_gcm_profile_service_factory.h",
"internal/sync/web_view_gcm_profile_service_factory.mm",
"internal/sync/web_view_profile_invalidation_provider_factory.h",
"internal/sync/web_view_profile_invalidation_provider_factory.mm",
"internal/sync/web_view_profile_sync_service_factory.h",
"internal/sync/web_view_profile_sync_service_factory.mm",
"internal/sync/web_view_sync_client.h",
"internal/sync/web_view_sync_client.mm",
"internal/translate/cwv_translation_controller.mm",
"internal/translate/cwv_translation_controller_internal.h",
"internal/translate/cwv_translation_language_internal.h",
"internal/translate/cwv_translation_language.mm",
"internal/translate/cwv_translation_policy.mm",
"internal/translate/web_view_translate_accept_languages_factory.cc",
"internal/translate/web_view_translate_accept_languages_factory.h",
"internal/translate/web_view_translate_client.h",
"internal/translate/web_view_translate_client.mm",
"internal/translate/web_view_translate_ranker_factory.cc",
"internal/translate/web_view_translate_ranker_factory.h",
"internal/translate/web_view_translate_service.cc",
"internal/translate/web_view_translate_service.h",
"internal/web_view_browser_state.h",
"internal/web_view_browser_state.mm",
"internal/web_view_early_page_script_provider.h",
"internal/web_view_early_page_script_provider.mm",
"internal/web_view_global_state_util.h",
"internal/web_view_global_state_util.mm",
"internal/web_view_java_script_dialog_presenter.h",
"internal/web_view_java_script_dialog_presenter.mm",
"internal/web_view_network_delegate.cc",
"internal/web_view_network_delegate.h",
"internal/web_view_url_request_context_getter.h",
"internal/web_view_url_request_context_getter.mm",
"internal/web_view_web_client.h",
"internal/web_view_web_client.mm",
"internal/web_view_web_main_delegate.h",
"internal/web_view_web_main_delegate.mm",
"internal/web_view_web_main_parts.h",
"internal/web_view_web_main_parts.mm",
"internal/web_view_web_state_policy_decider.h",
"internal/web_view_web_state_policy_decider.mm",
"internal/webdata_services/web_view_web_data_service_wrapper_factory.cc",
"internal/webdata_services/web_view_web_data_service_wrapper_factory.h",
]
ios_web_view_sources += ios_web_view_public_headers
if (ios_web_view_enable_sync) {
ios_web_view_sources += [ "internal/signin/cwv_identity.mm" ]
}
if (ios_web_view_enable_autofill) {
ios_web_view_sources += [
"internal/autofill/cwv_autofill_client_ios_bridge.h",
"internal/autofill/cwv_autofill_controller.mm",
"internal/autofill/cwv_autofill_controller_internal.h",
"internal/autofill/cwv_autofill_data_manager.mm",
"internal/autofill/cwv_autofill_data_manager_internal.h",
"internal/autofill/cwv_autofill_profile.mm",
"internal/autofill/cwv_autofill_profile_internal.h",
"internal/autofill/cwv_autofill_suggestion.mm",
"internal/autofill/cwv_autofill_suggestion_internal.h",
"internal/autofill/cwv_credit_card.mm",
"internal/autofill/cwv_credit_card_internal.h",
"internal/autofill/cwv_credit_card_verifier.mm",
"internal/autofill/cwv_credit_card_verifier_internal.h",
"internal/passwords/cwv_password_controller.mm",
"internal/passwords/cwv_password_controller_internal.h",
]
}
ios_web_view_deps = [
":web_view_bundle",
":web_view_features",
":web_view_resources",
"//base",
"//components/autofill/core/browser",
"//components/autofill/core/common",
"//components/autofill/ios/browser",
"//components/autofill/ios/form_util",
"//components/browser_sync",
"//components/content_settings/core/browser",
"//components/flags_ui",
"//components/gcm_driver",
"//components/image_fetcher/ios",
"//components/invalidation/impl",
"//components/infobars/core",
"//components/keyed_service/core",
"//components/keyed_service/ios",
"//components/language/core/browser",
"//components/language/core/common",
"//components/net_log",
"//services/network:network_service",
"//components/password_manager/core/browser",
"//components/password_manager/core/browser/form_parsing:form_parsing",
"//components/password_manager/core/common",
"//components/password_manager/ios",
"//components/password_manager/sync/browser",
"//components/pref_registry",
"//components/prefs",
"//components/proxy_config",
"//components/signin/core/browser",
"//components/signin/ios/browser",
"//components/signin/ios/browser:active_state_manager",
"//components/strings:components_strings_grit",
"//components/sync",
"//components/sync_sessions",
"//components/translate/core/browser",
"//components/translate/core/common",
"//components/translate/ios/browser",
"//components/version_info",
"//components/version_info:version_string",
"//components/web_resource",
"//components/webdata_services",
"//google_apis",
"//ios/components/io_thread",
"//ios/net",
"//ios/web",
"//ios/web/public",
"//ios/web/public/app",
"//ios/web/public/global_state",
"//net",
"//net:extras",
"//services/identity/public/cpp",
"//services/metrics/public/cpp:metrics_cpp",
"//ui/base",
"//url",
]
# Generate the umbrella header to exclude headers for disabled features.
# This is preferable to guarding header imports using flags defined in
# :web_view_features because:
# 1. Confusing to see headers for unsupported features in umbrella header.
# 2. A need to include cwv_web_view_features.h as part of public headers and
# any headers it itself includes, despite not being part of the public API.
action("web_view_umbrella_header") {
script = "//build/config/ios/generate_umbrella_header.py"
full_header_path = target_gen_dir + "/ChromeWebView.h"
outputs = [
full_header_path,
]
args = [
"--output-path",
rebase_path(full_header_path, root_build_dir),
]
args += rebase_path(ios_web_view_public_headers, root_build_dir)
}
ios_framework_bundle("web_view") {
output_name = ios_web_view_output_name
info_plist = "Info.plist"
public_headers = ios_web_view_public_headers
public_headers += get_target_outputs(":web_view_umbrella_header")
if (ios_web_view_include_cronet) {
public_headers += [ "//components/cronet/ios/Cronet.h" ]
public_headers += grpc_public_headers
public_headers += cronet_native_public_headers
}
sources = ios_web_view_sources
if (ios_web_view_include_cronet) {
sources += [ "//components/cronet/ios/Cronet.h" ]
}
deps = ios_web_view_deps
deps += [ ":web_view_umbrella_header" ]
if (ios_web_view_include_cronet) {
deps += [ "//components/cronet/ios:cronet_sources" ]
}
configs += [
":config",
"//build/config/compiler:enable_arc",
]
if (ios_web_view_include_cronet) {
configs -= [ "//build/config/compiler:default_symbols" ]
configs += [ "//build/config/compiler:symbols" ]
}
}
ios_web_view_test_sources = [
"internal/translate/fake_web_view_translate_client.h",
"internal/translate/fake_web_view_translate_client.mm",
]
source_set("run_all_unittests") {
testonly = true
sources = [
"test/run_all_unittests.cc",
]
deps = [
"//base",
"//base/test:test_support",
"//mojo/core/embedder",
]
}
test("ios_web_view_unittests") {
testonly = true
sources = [
"internal/autofill/cwv_autofill_controller_unittest.mm",
"internal/autofill/cwv_autofill_data_manager_unittest.mm",
"internal/autofill/cwv_autofill_profile_unittest.mm",
"internal/autofill/cwv_autofill_suggestion_unittest.mm",
"internal/autofill/cwv_credit_card_unittest.mm",
"internal/autofill/cwv_credit_card_verifier_unittest.mm",
"internal/cwv_favicon_unittest.mm",
"internal/cwv_html_element_unittest.mm",
"internal/cwv_preferences_unittest.mm",
"internal/cwv_preview_element_info_unittest.mm",
"internal/signin/cwv_identity_unittest.mm",
"internal/translate/cwv_translation_controller_unittest.mm",
"internal/translate/cwv_translation_language_unittest.mm",
"internal/translate/cwv_translation_policy_unittest.mm",
"internal/web_view_web_client_unittest.mm",
]
sources += ios_web_view_sources
sources += ios_web_view_test_sources
deps = [
":run_all_unittests",
"test:test_support",
"//base/test:test_support",
"//components/autofill/core/browser:test_support",
"//components/autofill/ios/browser:test_support",
"//components/autofill/ios/form_util:test_support",
"//components/prefs:test_support",
"//ios/web/public/test",
"//ios/web/public/test/fakes",
"//testing/gtest",
"//third_party/ocmock",
]
deps += ios_web_view_deps
configs += [ "//build/config/compiler:enable_arc" ]
assert_no_deps = ios_assert_no_deps
}
test("ios_web_view_inttests") {
testonly = true
deps = [
"//ios/web_view/test:inttests",
]
bundle_deps = [ ":web_view+bundle" ]
configs += [ "//build/config/compiler:enable_arc" ]
assert_no_deps = ios_assert_no_deps
}
js_compile_bundle("web_view_bundle") {
closure_entry_point = "__crWeb.webViewBundle"
sources = [
"//components/autofill/ios/browser/resources/autofill_controller.js",
"//components/autofill/ios/browser/resources/suggestion_controller.js",
"//components/autofill/ios/form_util/resources/fill.js",
"//components/autofill/ios/form_util/resources/form.js",
"//components/autofill/ios/form_util/resources/form_handlers.js",
"//components/password_manager/ios/resources/password_controller.js",
"resources/web_view_bundle.js",
]
}
repack_locales("repack_locales") {
visibility = [ ":web_view_resources" ]
source_patterns = [ "${root_gen_dir}/components/strings/components_strings_" ]
deps = [
"//components/strings:components_strings",
]
input_locales = ios_packed_locales
output_locales = ios_packed_locales_as_mac_outputs
copy_data_to_bundle = true
}
repack("repack_resources") {
visibility = [ ":web_view_resources" ]
deps = [
"//components/resources:components_resources",
"//ios/web:resources",
]
sources = [
"$root_gen_dir/components/components_resources.pak",
"$root_gen_dir/ios/web/ios_web_resources.pak",
]
output = "$target_gen_dir/web_view_resources.pak"
copy_data_to_bundle = true
}
ios_web_view_repack_all_scales("repack_scalable_resources") {
visibility = [ ":web_view_resources" ]
scales = [
"100",
"200",
"300",
]
}
group("web_view_resources") {
visibility = [ "//ios/web_view:*" ]
deps = [
":repack_locales",
":repack_resources",
]
if (ios_web_view_enable_autofill) {
deps += [ ":repack_scalable_resources" ]
}
}
if (additional_toolchains == [] || current_toolchain == default_toolchain) {
_package_dir = "$root_out_dir/ios_web_view"
action("ios_web_view_generate_license") {
_license_path = "$_package_dir/LICENSE"
script = "//tools/licenses.py"
inputs = [
"//buildtools/$host_os/gn",
]
outputs = [
_license_path,
]
args = [
"license_file",
rebase_path(_license_path, root_build_dir),
"--gn-target",
"//ios/web_view",
"--gn-out-dir",
".",
]
}
copy("ios_web_view_package_copy") {
sources = [
"$root_out_dir/$ios_web_view_output_name.framework",
"//AUTHORS",
"//chrome/VERSION",
]
outputs = [
"$_package_dir/{{source_file_part}}",
]
deps = [
":web_view",
]
}
if (enable_dsyms) {
action("ios_web_view_dsym_archive") {
script = "//chrome/tools/build/mac/archive_symbols.py"
# These are the dSYMs that will be archived. The sources list must be
# the target outputs that correspond to the dSYMs (since a dSYM is a
# directory it cannot be listed as a source file). The targets that
# generate both the dSYM and binary image are listed in deps.
_dsyms = [ "$root_out_dir/$ios_web_view_output_name.dSYM" ]
sources = [
"$root_out_dir/$ios_web_view_output_name.framework",
]
_output = "$_package_dir/$ios_web_view_output_name.dSYM.tar.bz2"
outputs = [
_output,
]
args = [ rebase_path(_output, root_out_dir) ] +
rebase_path(_dsyms, root_out_dir)
deps = [
":web_view",
]
}
} else {
group("ios_web_view_dsym_archive") {
}
}
group("ios_web_view_package") {
deps = [
":ios_web_view_dsym_archive",
":ios_web_view_generate_license",
":ios_web_view_package_copy",
]
}
}