| # 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_buildflags") { |
| header = "cwv_web_view_buildflags.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_flags.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_ssl_status.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", |
| "public/cwv_download_task.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_observer.h", |
| "public/cwv_autofill_form.h", |
| "public/cwv_autofill_profile.h", |
| "public/cwv_autofill_suggestion.h", |
| "public/cwv_credit_card.h", |
| "public/cwv_credit_card_verifier.h", |
| "public/cwv_credit_card_verifier_data_source.h", |
| "public/cwv_credit_card_verifier_delegate.h", |
| "public/cwv_preferences_autofill.h", |
| "public/cwv_web_view_autofill.h", |
| "public/cwv_web_view_configuration_autofill.h", |
| ] |
| } |
| |
| ios_web_view_sources = [ |
| "internal/app/application_context.h", |
| "internal/app/application_context.mm", |
| "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_autocomplete_history_manager_factory.h", |
| "internal/autofill/web_view_autocomplete_history_manager_factory.mm", |
| "internal/autofill/web_view_legacy_strike_database_factory.h", |
| "internal/autofill/web_view_legacy_strike_database_factory.mm", |
| "internal/autofill/web_view_personal_data_manager_factory.h", |
| "internal/autofill/web_view_personal_data_manager_factory.mm", |
| "internal/autofill/web_view_strike_database_factory.h", |
| "internal/autofill/web_view_strike_database_factory.mm", |
| "internal/content_settings/web_view_cookie_settings_factory.h", |
| "internal/content_settings/web_view_cookie_settings_factory.mm", |
| "internal/content_settings/web_view_host_content_settings_map_factory.h", |
| "internal/content_settings/web_view_host_content_settings_map_factory.mm", |
| "internal/cwv_favicon.mm", |
| "internal/cwv_favicon_internal.h", |
| "internal/cwv_flags.mm", |
| "internal/cwv_flags_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_ssl_status_internal.h", |
| "internal/cwv_ssl_status.mm", |
| "internal/cwv_user_content_controller.mm", |
| "internal/cwv_user_content_controller_internal.h", |
| "internal/cwv_user_script.mm", |
| "internal/cwv_navigation_delegate.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.mm", |
| "internal/language/web_view_language_model_manager_factory.h", |
| "internal/language/web_view_language_model_manager_factory.mm", |
| "internal/language/web_view_url_language_histogram_factory.h", |
| "internal/language/web_view_url_language_histogram_factory.mm", |
| "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.h", |
| "internal/pref_names.mm", |
| "internal/signin/ios_web_view_signin_client.h", |
| "internal/signin/ios_web_view_signin_client.mm", |
| "internal/signin/web_view_account_tracker_service_factory.h", |
| "internal/signin/web_view_account_tracker_service_factory.mm", |
| "internal/signin/web_view_identity_manager_factory.h", |
| "internal/signin/web_view_identity_manager_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/sync/web_view_device_info_sync_service_factory.h", |
| "internal/sync/web_view_device_info_sync_service_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.h", |
| "internal/translate/web_view_translate_accept_languages_factory.mm", |
| "internal/translate/web_view_translate_client.h", |
| "internal/translate/web_view_translate_client.mm", |
| "internal/translate/web_view_translate_ranker_factory.h", |
| "internal/translate/web_view_translate_ranker_factory.mm", |
| "internal/translate/web_view_translate_service.h", |
| "internal/translate/web_view_translate_service.mm", |
| "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.h", |
| "internal/web_view_network_delegate.mm", |
| "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.h", |
| "internal/webdata_services/web_view_web_data_service_wrapper_factory.mm", |
| "internal/web_view_download_manager.h", |
| "internal/web_view_download_manager.mm", |
| "internal/cwv_download_task_internal.h", |
| "internal/cwv_download_task.mm", |
| ] |
| ios_web_view_sources += ios_web_view_public_headers |
| if (ios_web_view_enable_sync) { |
| ios_web_view_sources += [ |
| "internal/signin/cwv_identity.mm", |
| "internal/sync/cwv_sync_controller.mm", |
| "internal/sync/cwv_sync_controller_internal.h", |
| ] |
| } |
| 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_form.mm", |
| "internal/autofill/cwv_autofill_form_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.h", |
| ] |
| } |
| |
| ios_web_view_deps = [ |
| ":web_view_bundle", |
| ":web_view_buildflags", |
| ":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/flags_ui:switches", |
| "//components/gcm_driver", |
| "//components/history/core/common", |
| "//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/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:device_info", |
| "//components/sync:user_events", |
| "//components/language/ios/browser", |
| "//components/sync_sessions", |
| "//components/translate/core/browser", |
| "//components/translate/core/common", |
| "//components/translate/ios/browser", |
| "//components/variations/net", |
| "//components/version_info", |
| "//components/version_info:version_string", |
| "//components/web_resource", |
| "//components/webdata_services", |
| "//components/ssl_errors", |
| "//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_buildflags because: |
| # 1. Confusing to see headers for unsupported features in umbrella header. |
| # 2. A need to include cwv_web_view_buildflags.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_form_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_download_task_unittest.mm", |
| "internal/cwv_favicon_unittest.mm", |
| "internal/cwv_flags_unittest.mm", |
| "internal/cwv_html_element_unittest.mm", |
| "internal/cwv_preferences_unittest.mm", |
| "internal/cwv_preview_element_info_unittest.mm", |
| "internal/cwv_scroll_view_unittest.mm", |
| "internal/cwv_ssl_status_unittest.mm", |
| "internal/signin/cwv_identity_unittest.mm", |
| "internal/sync/cwv_sync_controller_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/browser_sync:test_support", |
| "//components/prefs:test_support", |
| "//components/signin/core/browser:internals_test_support", |
| "//components/signin/ios/browser:test_support", |
| "//components/sync:test_support_driver", |
| "//components/sync:test_support_model", |
| "//ios/web/public/test", |
| "//ios/web/public/test/fakes", |
| "//services/identity/public/cpp:test_support", |
| "//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_", |
| "${root_gen_dir}/components/strings/components_locale_settings_", |
| ] |
| |
| deps = [ |
| "//components/strings:components_locale_settings", |
| "//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", |
| ] |
| } |
| } |