From 8a454836f956a6f764049ef6d958b132c4f9f439 Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Wed, 24 Jul 2019 17:50:41 -0400 Subject: [PATCH 01/63] Update patches from Chromium 76.0.3809.132 to Chromium 77.0.3865.56 --- patches/build-config-BUILDCONFIG.gn.patch | 2 +- patches/build-config-android-config.gni.patch | 2 +- patches/chrome-BUILD.gn.patch | 28 +++++------ patches/chrome-VERSION.patch | 8 ++-- patches/chrome-android-BUILD.gn.patch | 20 ++++---- ...id-java-res-layout-toolbar_phone.xml.patch | 4 +- ...d-java-res-layout-toolbar_tablet.xml.patch | 2 +- ...e-android-java-res-values-dimens.xml.patch | 4 +- ...droid-java-res-values-v17-styles.xml.patch | 8 ++-- ...me-browser-ChromeTabbedActivity.java.patch | 4 +- ...erences-ChromePreferenceManager.java.patch | 2 +- ...arch_engines-TemplateUrlService.java.patch | 30 ------------ ...-browser-toolbar-ToolbarManager.java.patch | 10 ++-- ...rowser-toolbar-top-ToolbarPhone.java.patch | 12 ++--- ...e-browser-util-FeatureUtilities.java.patch | 6 +-- patches/chrome-android-java_sources.gni.patch | 4 +- patches/chrome-app-BUILD.gn.patch | 6 +-- patches/chrome-app-chrome_dll.rc.patch | 2 +- patches/chrome-browser-BUILD.gn.patch | 6 +-- patches/chrome-browser-about_flags.cc.patch | 4 +- ...e-autocomplete_classifier_factory.cc.patch | 2 +- ...hrome-browser-browser_process_impl.h.patch | 4 +- ...wser-chrome_content_browser_client.h.patch | 6 +-- ...ngs-tab_specific_content_settings.cc.patch | 6 +-- ...wser-devtools-devtools_ui_bindings.h.patch | 2 +- ...rivate-webrtc_logging_private_api.cc.patch | 2 +- ...-chrome_extensions_browser_client.cc.patch | 4 +- ...rowser-extensions-component_loader.h.patch | 8 ++-- ...tensions-extension_install_prompt.cc.patch | 4 +- ...xtensions-extension_install_prompt.h.patch | 2 +- ...r-extensions-extension_management.cc.patch | 4 +- ...rotocol-external_protocol_handler.cc.patch | 4 +- ...-external_process_importer_client.cc.patch | 4 +- ...ter-external_process_importer_host.h.patch | 2 +- ...me-browser-importer-importer_list.cc.patch | 2 +- patches/chrome-browser-io_thread.cc.patch | 12 ----- ...-media-webrtc-webrtc_log_uploader.cc.patch | 6 +-- ...rowser-net-chrome_network_delegate.h.patch | 12 ++--- ...chrome_url_request_context_getter.cc.patch | 29 ----------- ...-browser-net-net_error_tab_helper.cc.patch | 4 +- ...et-system_network_context_manager.cc.patch | 4 +- ...otification_platform_bridge_linux.cc.patch | 4 +- ...er-permissions-permission_manager.cc.patch | 10 ++-- ...r-permissions-permission_uma_util.cc.patch | 2 +- ...gins-chrome_plugin_service_filter.cc.patch | 4 +- ...-plugins-plugins_resource_service.cc.patch | 2 +- ...hrome-browser-prefs-browser_prefs.cc.patch | 6 +-- .../chrome-browser-profiles-profile.cc.patch | 4 +- ...profiles-profile_avatar_icon_util.cc.patch | 22 ++++----- ...ome-browser-profiles-profile_impl.cc.patch | 2 +- ...-browser-profiles-profile_io_data.cc.patch | 13 +---- ...-browser-profiles-profile_manager.cc.patch | 10 ++-- ...e-browser-profiles-profile_manager.h.patch | 10 ++-- ...text_menu-render_view_context_menu.h.patch | 4 +- ...r-resources-bookmarks-bookmarks.html.patch | 4 +- ...ser-resources-bookmarks-toolbar.html.patch | 2 +- ...er-resources-cryptotoken-enroller.js.patch | 21 -------- ...r-resources-downloads-downloads.html.patch | 4 +- ...ser-resources-downloads-manager.html.patch | 8 ++-- ...ser-resources-downloads-toolbar.html.patch | 2 +- ...rowser-resources-extensions-BUILD.gn.patch | 2 +- ...resources-extensions-extensions.html.patch | 4 +- ...-resources-extensions-item_list.html.patch | 4 +- ...er-resources-extensions-sidebar.html.patch | 6 +-- ...er-resources-extensions-toolbar.html.patch | 8 ++-- ...e-browser-resources-history-app.html.patch | 6 +-- ...owser-resources-history-history.html.patch | 4 +- ...-resources-history-history_item.html.patch | 2 +- ...sources-history-history_toolbar.html.patch | 2 +- ...s-local_discovery-local_discovery.js.patch | 6 +-- ...-browser-resources-settings-BUILD.gn.patch | 2 +- ...-settings-about_page-about_page.html.patch | 4 +- ...es-settings-about_page-about_page.js.patch | 4 +- ...ance_page-appearance_fonts_page.html.patch | 4 +- ...appearance_page-appearance_page.html.patch | 6 +-- ...autofill_page-passwords_section.html.patch | 4 +- ...-people_page-import_data_dialog.html.patch | 2 +- ...ettings-people_page-people_page.html.patch | 12 ++--- ...ngs-printing_page-printing_page.html.patch | 6 +-- ...cy_page-personalization_options.html.patch | 2 +- ...tings-privacy_page-privacy_page.html.patch | 2 +- ...-browser-resources-settings-route.js.patch | 6 +-- ...ser-resources-settings-settings.html.patch | 8 ++-- ...ettings-settings_ui-settings_ui.html.patch | 6 +-- ...ings-site_settings-site_details.html.patch | 4 +- ...ettings_page-site_settings_page.html.patch | 8 ++-- ..._settings_page-site_settings_page.js.patch | 4 +- ...browsing-client_side_model_loader.cc.patch | 2 +- ...e-browser-shell_integration_linux.cc.patch | 6 +-- ...-account_consistency_mode_manager.cc.patch | 4 +- ...er-spellcheck_hunspell_dictionary.cc.patch | 4 +- ...sync-profile_sync_service_factory.cc.patch | 4 +- patches/chrome-browser-ui-BUILD.gn.patch | 6 +-- ...-save_card_bubble_controller_impl.cc.patch | 4 +- patches/chrome-browser-ui-browser.h.patch | 4 +- ...rome-browser-ui-browser_navigator.cc.patch | 4 +- ...rowser-ui-cocoa-main_menu_builder.mm.patch | 2 +- ...ings-content_setting_bubble_model.cc.patch | 6 +-- ...-extension_action_view_controller.cc.patch | 8 ++-- ...s-extension_action_view_controller.h.patch | 2 +- ...ions-icon_with_badge_image_source.cc.patch | 2 +- ...rome-browser-ui-libgtkui-gtk_util.cc.patch | 4 +- ...me-browser-ui-page_info-page_info.cc.patch | 8 ++-- ...browser-ui-page_info-page_info_ui.cc.patch | 6 +-- ...r-ui-startup-startup_tab_provider.cc.patch | 4 +- .../chrome-browser-ui-tab_helpers.cc.patch | 4 +- ...chrome_location_bar_model_delegate.h.patch | 10 ++-- ...r-ui-toolbar-toolbar_actions_model.h.patch | 4 +- ...rowser-ui-views-accelerator_table.cc.patch | 4 +- ...ws-bookmarks-bookmark_bubble_view.cc.patch | 2 +- ...-views-download-download_item_view.h.patch | 2 +- ...-views-extensions-extension_popup.cc.patch | 2 +- ...ws-location_bar-location_bar_view.cc.patch | 6 +-- ...ews-location_bar-location_bar_view.h.patch | 10 ++-- ...ion_bubble-permission_prompt_impl.cc.patch | 2 +- ...ws-profiles-avatar_toolbar_button.cc.patch | 17 +------ ...ews-profiles-avatar_toolbar_button.h.patch | 8 ++-- ...ews-profiles-profile_chooser_view.cc.patch | 6 +-- ...iews-profiles-profile_chooser_view.h.patch | 8 ++-- ...me-browser-ui-views-tabs-tab_icon.cc.patch | 4 +- ...ser-ui-views-tabs-tab_style_views.cc.patch | 4 +- ...-toolbar-browser_actions_container.h.patch | 4 +- ...s-toolbar-browser_app_menu_button.cc.patch | 10 ++-- ...ser-ui-views-toolbar-toolbar_view.cc.patch | 4 +- ...wser-ui-views-toolbar-toolbar_view.h.patch | 10 ++-- ...s-translate-translate_bubble_view.cc.patch | 4 +- ...ws-translate-translate_bubble_view.h.patch | 4 +- ...r-ui-webui-bookmarks-bookmarks_ui.cc.patch | 4 +- ...-chrome_web_ui_controller_factory.cc.patch | 4 +- ...rome-browser-ui-webui-devtools_ui.cc.patch | 2 +- ...r-ui-webui-downloads-downloads_ui.cc.patch | 4 +- ...ui-webui-extensions-extensions_ui.cc.patch | 4 +- ...hrome-browser-ui-webui-history_ui.cc.patch | 4 +- ...edia_router_webui_message_handler.cc.patch | 35 -------------- ...ttings_localized_strings_provider.cc.patch | 4 +- ...ome-browser-ui-webui-theme_source.cc.patch | 10 ++-- ...de_detector-upgrade_detector_impl.cc.patch | 6 +-- ...ade_detector-upgrade_detector_impl.h.patch | 2 +- ...s-components-web_app_shortcut_mac.mm.patch | 4 +- patches/chrome-common-BUILD.gn.patch | 6 +-- patches/chrome-installer-linux-BUILD.gn.patch | 14 +++--- .../chrome-installer-mac-sign_chrome.py.patch | 2 +- ...me-installer-mac-signing-pipeline.py.patch | 2 +- ...me-installer-mini_installer-BUILD.gn.patch | 4 +- ...e-installer-setup-installer_state.cc.patch | 4 +- ...aller-util-google_update_settings.cc.patch | 4 +- patches/chrome-renderer-BUILD.gn.patch | 4 +- ...er-chrome_content_renderer_client.cc.patch | 4 +- ...rer-chrome_content_renderer_client.h.patch | 4 +- patches/chrome-test-BUILD.gn.patch | 4 +- patches/chrome-utility-BUILD.gn.patch | 2 +- ...utility-importer-firefox_importer.cc.patch | 4 +- ...-utility-importer-firefox_importer.h.patch | 4 +- ...ntent_settings-core-browser-BUILD.gn.patch | 2 +- ...ore-browser-content_settings_pref.cc.patch | 4 +- ...ser-content_settings_pref_provider.h.patch | 4 +- ...browser-content_settings_registry.cc.patch | 4 +- ...-crash-content-app-breakpad_linux.cc.patch | 10 ++-- ...owser-distiller_page_web_contents.cc.patch | 4 +- ...nternal-common-download_item_impl.cc.patch | 6 +-- ...onents-gcm_driver-gcm_client_impl.cc.patch | 10 ++-- ...lidation-impl-fcm_network_handler.cc.patch | 4 +- .../components-omnibox-browser-BUILD.gn.patch | 4 +- ...ox-browser-autocomplete_controller.h.patch | 4 +- ...ore-browser-password_form_filling.cc.patch | 4 +- ...wsing-db-v4_protocol_manager_util.cc.patch | 2 +- ...arch_engines-TemplateUrlService.java.patch | 30 ++++++++++++ ...ch_engines-prepopulated_engines.json.patch | 2 +- patches/components-sync-base-BUILD.gn.patch | 4 +- ...c-driver-glue-sync_engine_backend.cc.patch | 4 +- ...-sync-driver-glue-sync_engine_impl.h.patch | 4 +- ...-sync-driver-profile_sync_service.cc.patch | 4 +- ...s-sync-driver-profile_sync_service.h.patch | 6 +-- ...omponents-sync-engine-sync_manager.h.patch | 4 +- ...ync-engine_impl-sync_manager_impl.cc.patch | 4 +- ...c-engine_impl-sync_scheduler_impl.cc.patch | 4 +- ...nc-engine_impl-sync_scheduler_impl.h.patch | 2 +- ...okmarks-bookmark_change_processor.cc.patch | 16 +++---- ...ookmarks-bookmark_change_processor.h.patch | 2 +- ...vice_info-device_info_sync_bridge.cc.patch | 4 +- .../components-version_info-BUILD.gn.patch | 2 +- .../content-browser-browser_main_loop.h.patch | 4 +- ...hild_process_security_policy_impl.cc.patch | 4 +- ...e_host-navigation_controller_impl.cc.patch | 4 +- ...ser-frame_host-navigation_request.cc.patch | 10 ++-- ...ssions-permission_controller_impl.cc.patch | 8 ++-- ...rmissions-permission_service_impl.cc.patch | 10 ++-- ...nt-browser-storage_partition_impl.cc.patch | 6 +-- .../content-child-child_thread_impl.cc.patch | 4 +- patches/content-common-BUILD.gn.patch | 2 +- ...-public-browser-browser_main_parts.h.patch | 4 +- ...lic-browser-content_browser_client.h.patch | 4 +- ...ent-public-browser-permission_type.h.patch | 8 ++-- ...nt-public-browser-url_data_source.cc.patch | 8 ++-- ...ntent-renderer-render_thread_impl.cc.patch | 4 +- ...ons-browser-api-socket-tcp_socket.cc.patch | 4 +- ...r-api-web_request-web_request_api.cc.patch | 4 +- ...er-extension_event_histogram_value.h.patch | 8 ++-- ...ns-browser-updater-update_service.cc.patch | 2 +- ...mmon-permissions-permissions_data.cc.patch | 4 +- patches/extensions-renderer-BUILD.gn.patch | 6 +-- .../extensions-renderer-dispatcher.cc.patch | 4 +- ...r-native_extension_bindings_system.h.patch | 2 +- patches/google_apis-gaia-gaia_urls.cc.patch | 2 +- ...-blink-key_system_config_selector.cc.patch | 4 +- ...-chromium_bindings_configuration.gni.patch | 6 +-- patches/net-BUILD.gn.patch | 4 +- patches/net-cookies-canonical_cookie.cc.patch | 2 +- ...solution-proxy_resolution_service.cc.patch | 4 +- .../net-socket-socks5_client_socket.cc.patch | 8 ++-- .../services-network-network_context.cc.patch | 6 +-- ...ervices-network-tls_client_socket.cc.patch | 2 +- ...e_manager-sandbox-win-sandbox_win.cc.patch | 4 +- patches/testing-iossim-iossim.mm.patch | 13 ----- ...c-mojom-permissions-permission.mojom.patch | 10 ++-- ...e-html-canvas-html_canvas_element.cc.patch | 6 +-- ...enderer-core-svg-svg_path_element.cc.patch | 2 +- ...core-svg-svg_text_content_element.cc.patch | 4 +- ...arty-blink-renderer-modules-BUILD.gn.patch | 4 +- ...anvas2d-base_rendering_context_2d.cc.patch | 8 ++-- ...canvas2d-base_rendering_context_2d.h.patch | 2 +- ...vas2d-canvas_rendering_context_2d.cc.patch | 10 ++-- ...as2d-canvas_rendering_context_2d.idl.patch | 2 +- ...eerconnection-rtc_peer_connection.cc.patch | 20 ++++---- ...erer-modules-webaudio-audio_buffer.h.patch | 2 +- ...er-modules-webaudio-audio_buffer.idl.patch | 4 +- ...bgl-webgl2_rendering_context_base.cc.patch | 8 ++-- ...ebgl-webgl_rendering_context_base.cc.patch | 48 +++++++++---------- patches/tools-gritsettings-resource_ids.patch | 4 +- ..._schema_compiler-feature_compiler.py.patch | 4 +- ...ls-metrics-histograms-histograms.xml.patch | 4 +- patches/ui-base-BUILD.gn.patch | 4 +- patches/ui-native_theme-native_theme.h.patch | 6 +-- .../ui-native_theme-native_theme_mac.mm.patch | 2 +- .../ui-native_theme-native_theme_win.h.patch | 6 +-- ...ar-cr_toolbar_selection_overlay.html.patch | 8 ++-- ...elements-paper_button_style_css.html.patch | 12 ----- ...es-cr_elements-shared_style_css.html.patch | 2 +- ...ces-cr_elements-shared_vars_css.html.patch | 2 +- ...ui-webui-resources-css-md_colors.css.patch | 2 +- 240 files changed, 634 insertions(+), 778 deletions(-) delete mode 100644 patches/chrome-android-java-src-org-chromium-chrome-browser-search_engines-TemplateUrlService.java.patch delete mode 100644 patches/chrome-browser-io_thread.cc.patch delete mode 100644 patches/chrome-browser-net-chrome_url_request_context_getter.cc.patch delete mode 100644 patches/chrome-browser-resources-cryptotoken-enroller.js.patch delete mode 100644 patches/chrome-browser-ui-webui-media_router-media_router_webui_message_handler.cc.patch create mode 100644 patches/components-search_engines-android-java-src-org-chromium-components-search_engines-TemplateUrlService.java.patch delete mode 100644 patches/testing-iossim-iossim.mm.patch delete mode 100644 patches/ui-webui-resources-cr_elements-paper_button_style_css.html.patch diff --git a/patches/build-config-BUILDCONFIG.gn.patch b/patches/build-config-BUILDCONFIG.gn.patch index 3dc90e750b6..abdda3f3564 100644 --- a/patches/build-config-BUILDCONFIG.gn.patch +++ b/patches/build-config-BUILDCONFIG.gn.patch @@ -1,5 +1,5 @@ diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn -index 7063da0f26c5691f01214c2dc014128d7c8c5e09..3e18855c2a74036033999cd060a7f577925d0ee4 100644 +index db7ab0255b482d4e1fd20a31cfec86a24546602a..1cc44592d0d854f17cf3d2f5a5e0c2ed76b2d025 100644 --- a/build/config/BUILDCONFIG.gn +++ b/build/config/BUILDCONFIG.gn @@ -419,6 +419,7 @@ set_sources_assignment_filter(sources_assignment_filter) diff --git a/patches/build-config-android-config.gni.patch b/patches/build-config-android-config.gni.patch index c2f7ac19d1c..5c4bffb9cc2 100644 --- a/patches/build-config-android-config.gni.patch +++ b/patches/build-config-android-config.gni.patch @@ -1,5 +1,5 @@ diff --git a/build/config/android/config.gni b/build/config/android/config.gni -index 58838421c8a3cb995d3b41c59fac24523c57dafa..fb3715e80a24f7de149e7d7301e209a148c30d0f 100644 +index bed796ebe45e47af39bb3f27383cf23bc028adb3..7c0707454b7e3c435d793c1e300755f3d8bcb9c2 100644 --- a/build/config/android/config.gni +++ b/build/config/android/config.gni @@ -3,6 +3,7 @@ diff --git a/patches/chrome-BUILD.gn.patch b/patches/chrome-BUILD.gn.patch index 3b6aa634725..06def7ce625 100644 --- a/patches/chrome-BUILD.gn.patch +++ b/patches/chrome-BUILD.gn.patch @@ -1,5 +1,5 @@ diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn -index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace21f4991c 100644 +index 0c52ff3c73580e38b2828fabdeb0e9c340428ca3..c99d78bb59960edf586b9079677dcbf0b7ea6f92 100644 --- a/chrome/BUILD.gn +++ b/chrome/BUILD.gn @@ -190,6 +190,10 @@ if (!is_android && !is_mac) { @@ -13,7 +13,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace deps += [ ":chrome_dll", -@@ -289,6 +293,7 @@ if (!is_android && !is_mac) { +@@ -297,6 +301,7 @@ if (!is_android && !is_mac) { "//headless:headless_shell_lib", "//services/service_manager/embedder", ] @@ -21,7 +21,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace public_deps = [ ":xdg_mime", # Needs to be public for installer to consume files. -@@ -435,6 +440,7 @@ if (is_win) { +@@ -431,6 +436,7 @@ if (is_win) { "//third_party/wtl", "//ui/views", ] @@ -29,7 +29,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace ldflags = [ "/DELAYLOAD:advapi32.dll", -@@ -569,6 +575,7 @@ if (is_win) { +@@ -566,6 +572,7 @@ if (is_win) { "//headless:headless_shell_child_lib", "//services/service_manager/embedder", ] @@ -37,7 +37,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace ldflags = [ "/DELAYLOAD:comctl32.dll", -@@ -680,6 +687,11 @@ if (is_win) { +@@ -677,6 +684,11 @@ if (is_win) { ] } @@ -49,7 +49,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace mac_app_bundle("chrome_app") { output_name = chrome_product_full_name -@@ -713,6 +725,7 @@ if (is_win) { +@@ -710,6 +722,7 @@ if (is_win) { rebase_path("app/app.exports", root_build_dir) ] } } @@ -57,7 +57,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace compiled_action("chrome_app_strings") { tool = "//chrome/tools/build/mac:infoplist_strings_tool" -@@ -742,7 +755,7 @@ if (is_win) { +@@ -739,7 +752,7 @@ if (is_win) { args = [ "-b", @@ -66,7 +66,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace "-v", rebase_path(chrome_version_file, root_build_dir), "-g", -@@ -823,7 +836,7 @@ if (is_win) { +@@ -820,7 +833,7 @@ if (is_win) { # framework itself, that would cause a cyclical dependency. Instead, # this dependency directly copies the file into the framework's # resources directory. @@ -75,7 +75,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace } } -@@ -1249,6 +1262,7 @@ if (is_win) { +@@ -1247,6 +1260,7 @@ if (is_win) { "//services/service_manager/embedder", "//third_party/cld_3/src/src:cld_3", ] @@ -83,7 +83,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace if (is_component_build) { libs = [ "Carbon.framework" ] -@@ -1313,6 +1327,10 @@ if (is_win) { +@@ -1311,6 +1325,10 @@ if (is_win) { if (is_chrome_branded) { deps += [ ":default_apps" ] } @@ -94,7 +94,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace ldflags = [ "-Wl,-install_name,@executable_path/../Frameworks/$chrome_framework_name.framework/Versions/$chrome_version_full/$chrome_framework_name" ] -@@ -1483,6 +1501,7 @@ if (is_win) { +@@ -1475,6 +1493,7 @@ if (is_win) { group("browser_dependencies") { public_deps = [ @@ -102,7 +102,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace "//chrome/browser", "//chrome/common", "//components/gwp_asan/buildflags", -@@ -1556,13 +1575,14 @@ group("child_dependencies") { +@@ -1547,13 +1566,14 @@ group("child_dependencies") { # this is OK because all of content is linked into one library. "//content/browser", ] @@ -118,7 +118,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace ] output = "$target_gen_dir/chrome_exe_version.rc" } -@@ -1635,6 +1655,7 @@ group("resources") { +@@ -1626,6 +1646,7 @@ group("resources") { "//chrome/browser:resources", "//chrome/common:resources", "//chrome/renderer:resources", @@ -126,7 +126,7 @@ index e06ba8ee8bcf4cc240029fc66a7c2681786217a0..a77998f9bd28b8a9965a7e10611c2ace ] } -@@ -1886,6 +1907,7 @@ if (is_android) { +@@ -1882,6 +1903,7 @@ if (is_android) { "//content/public/common:service_names", "//services/service_manager/embedder", ] diff --git a/patches/chrome-VERSION.patch b/patches/chrome-VERSION.patch index 283afe0de8f..8cc79acbf8d 100644 --- a/patches/chrome-VERSION.patch +++ b/patches/chrome-VERSION.patch @@ -1,11 +1,11 @@ diff --git a/chrome/VERSION b/chrome/VERSION -index 36f2781c0fca0d01ba636fc8b1f1dfa3a55f500e..34a721bdf884f3773a67db1efe07d02389ffae15 100644 +index 4fc319c61a279d59aabd6cd3f0ff30f230c1f27b..0779f0789b193c7116e9568ff401b7caafcc7118 100644 --- a/chrome/VERSION +++ b/chrome/VERSION @@ -1,4 +1,4 @@ - MAJOR=76 + MAJOR=77 MINOR=0 --BUILD=3809 --PATCH=132 +-BUILD=3865 +-PATCH=56 +BUILD=72 +PATCH=0 diff --git a/patches/chrome-android-BUILD.gn.patch b/patches/chrome-android-BUILD.gn.patch index 5d5a5d860e0..350daf5b093 100644 --- a/patches/chrome-android-BUILD.gn.patch +++ b/patches/chrome-android-BUILD.gn.patch @@ -1,17 +1,17 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn -index 17311184c47823594b49ad07d41bd870efa7af17..8f11dbdaa0491f676a867f5e0ce134d7e32b5a1d 100644 +index 0c5467af2bce341e0b3f0835899c820f60adbc87..fa406bae2b98570995ba1331d2145723e13a9866 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -42,7 +42,7 @@ if (dfmify_devtools) { - import("//chrome/android/features/devtools/devtools_module_tmpl.gni") - } +@@ -31,7 +31,7 @@ import("java_sources.gni") + import("static_initializers.gni") + import("trichrome.gni") --manifest_package = "org.chromium.chrome" -+declare_args() { manifest_package = "org.chromium.chrome" } - test_manifest_package = "org.chromium.chrome.tests" +-chrome_public_manifest_package = "org.chromium.chrome" ++declare_args() { chrome_public_manifest_package = "org.chromium.chrome" } + chrome_public_test_manifest_package = "org.chromium.chrome.tests" - chrome_public_jinja_variables = default_chrome_public_jinja_variables + -@@ -110,6 +110,7 @@ android_resources("chrome_app_java_resources") { + chrome_public_jinja_variables = +@@ -100,6 +100,7 @@ android_resources("chrome_app_java_resources") { deps = [ ":chrome_strings_grd", ":ui_locale_string_resources", @@ -19,7 +19,7 @@ index 17311184c47823594b49ad07d41bd870efa7af17..8f11dbdaa0491f676a867f5e0ce134d7 "//chrome/android/webapk/libs/common:splash_resources", "//chrome/app:java_strings_grd", "//components/autofill/android:autofill_java_resources", -@@ -496,6 +497,7 @@ java_group("chrome_all_java") { +@@ -524,6 +525,7 @@ java_group("chrome_all_java") { group("jni_headers") { public_deps = [ ":chrome_jni_headers", diff --git a/patches/chrome-android-java-res-layout-toolbar_phone.xml.patch b/patches/chrome-android-java-res-layout-toolbar_phone.xml.patch index fbbfb107a7b..68d2ba6213f 100644 --- a/patches/chrome-android-java-res-layout-toolbar_phone.xml.patch +++ b/patches/chrome-android-java-res-layout-toolbar_phone.xml.patch @@ -1,5 +1,5 @@ diff --git a/chrome/android/java/res/layout/toolbar_phone.xml b/chrome/android/java/res/layout/toolbar_phone.xml -index 62a3a3f3dc36d6417519832e987466ff26a18ea2..3c8c8cf4d83efae421571f57a5cc978dad4dab53 100644 +index fe66549d3ac660c12186e0c9c78c7ed525f2015d..9f2fad8590812ececbf1b9d04ec493c2ed7da425 100644 --- a/chrome/android/java/res/layout/toolbar_phone.xml +++ b/chrome/android/java/res/layout/toolbar_phone.xml @@ -31,6 +31,7 @@ @@ -12,7 +12,7 @@ index 62a3a3f3dc36d6417519832e987466ff26a18ea2..3c8c8cf4d83efae421571f57a5cc978d + diff --git a/patches/chrome-android-java-res-layout-toolbar_tablet.xml.patch b/patches/chrome-android-java-res-layout-toolbar_tablet.xml.patch index 4b7cd9f991a..aeeef6e3a5a 100644 --- a/patches/chrome-android-java-res-layout-toolbar_tablet.xml.patch +++ b/patches/chrome-android-java-res-layout-toolbar_tablet.xml.patch @@ -1,5 +1,5 @@ diff --git a/chrome/android/java/res/layout/toolbar_tablet.xml b/chrome/android/java/res/layout/toolbar_tablet.xml -index 4ead17fd19f45a22d4c13877726b58658ac82e89..1a1d924eabe7f45f3f0c4b406bbac096a2375a2d 100644 +index 12630f4cd02676d1676eaea5617bf20689192697..b7a56a2411f439d3ac476bcf33f5996d5ef047ac 100644 --- a/chrome/android/java/res/layout/toolbar_tablet.xml +++ b/chrome/android/java/res/layout/toolbar_tablet.xml @@ -75,6 +75,7 @@ diff --git a/patches/chrome-android-java-res-values-dimens.xml.patch b/patches/chrome-android-java-res-values-dimens.xml.patch index ef98172f380..81f16f0db9f 100644 --- a/patches/chrome-android-java-res-values-dimens.xml.patch +++ b/patches/chrome-android-java-res-values-dimens.xml.patch @@ -1,8 +1,8 @@ diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml -index 2d3a1ddc2d73e0a76b7115d6e0fa1bedd0ab659c..b803e7ed86d9632dd4f97d0d5bc7356ed6656ee9 100644 +index e0a078063054229131277ff3878e6ef3ebeee61f..d93f0de960c134608342ba21c80151b9b6f80515 100644 --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml -@@ -285,7 +285,7 @@ +@@ -287,7 +287,7 @@ 40dp diff --git a/patches/chrome-android-java-res-values-v17-styles.xml.patch b/patches/chrome-android-java-res-values-v17-styles.xml.patch index 0390119101c..95f0f5ee1bc 100644 --- a/patches/chrome-android-java-res-values-v17-styles.xml.patch +++ b/patches/chrome-android-java-res-values-v17-styles.xml.patch @@ -1,10 +1,10 @@ diff --git a/chrome/android/java/res/values-v17/styles.xml b/chrome/android/java/res/values-v17/styles.xml -index c851e676d0dffd3e5a53641e3cb4f2f434d3a984..fbb0802b0f13383131fce4a19ebc74cbce1d91b4 100644 +index 5b41c992fb2b17c1b8a8a06ecc09460c4190fa86..b4a36c8d48dcc89a1dd0e9c661f4d3eedc757ed8 100644 --- a/chrome/android/java/res/values-v17/styles.xml +++ b/chrome/android/java/res/values-v17/styles.xml -@@ -930,4 +930,5 @@ - @dimen/omnibox_suggestion_edit_url_min_height - @color/default_icon_color +@@ -995,4 +995,5 @@ + viewStart + @style/TextAppearance.BlackTitle1 + diff --git a/patches/chrome-android-java-src-org-chromium-chrome-browser-ChromeTabbedActivity.java.patch b/patches/chrome-android-java-src-org-chromium-chrome-browser-ChromeTabbedActivity.java.patch index 919d232c5fe..139aae27375 100644 --- a/patches/chrome-android-java-src-org-chromium-chrome-browser-ChromeTabbedActivity.java.patch +++ b/patches/chrome-android-java-src-org-chromium-chrome-browser-ChromeTabbedActivity.java.patch @@ -1,8 +1,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -index 6bdd439f89a68e8b53bf077547ad04bc35414674..366524b92af5979ed4be1bac159cae6da8896a09 100644 +index a168b085348c218c2951964beb37e0a25d754836..ad5cf672b9548a4f9921c4bc3521a0c8111e998d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -182,7 +182,7 @@ import java.util.Locale; +@@ -174,7 +174,7 @@ import java.util.Locale; * are accessible via a chrome specific tab switching UI. */ public class ChromeTabbedActivity diff --git a/patches/chrome-android-java-src-org-chromium-chrome-browser-preferences-ChromePreferenceManager.java.patch b/patches/chrome-android-java-src-org-chromium-chrome-browser-preferences-ChromePreferenceManager.java.patch index defe5bf5bc9..708bcc87765 100644 --- a/patches/chrome-android-java-src-org-chromium-chrome-browser-preferences-ChromePreferenceManager.java.patch +++ b/patches/chrome-android-java-src-org-chromium-chrome-browser-preferences-ChromePreferenceManager.java.patch @@ -1,5 +1,5 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java -index 80072b7f7afc55c1d893416b614267edbfb7b2da..091832ed91eea9462378b30ac3ec717e648e211e 100644 +index e269ba6c0436afc362804823e557dfe38c600c3b..fc3699b450c22a9731ccce0723e69dfcf813cf3c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java @@ -21,7 +21,7 @@ import java.util.Set; diff --git a/patches/chrome-android-java-src-org-chromium-chrome-browser-search_engines-TemplateUrlService.java.patch b/patches/chrome-android-java-src-org-chromium-chrome-browser-search_engines-TemplateUrlService.java.patch deleted file mode 100644 index 6ea203beac6..00000000000 --- a/patches/chrome-android-java-src-org-chromium-chrome-browser-search_engines-TemplateUrlService.java.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.java b/chrome/android/java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.java -index 55c72cd215f525a17853cd63f79ecb8b537d4102..3bec2e2c5aedcbf631aadc058c2167c1641a626d 100644 ---- a/chrome/android/java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.java -@@ -11,6 +11,7 @@ import org.chromium.base.ThreadUtils; - import org.chromium.base.VisibleForTesting; - import org.chromium.base.annotations.CalledByNative; - import org.chromium.base.task.PostTask; -+import org.chromium.chrome.browser.search_engines.BraveTemplateUrlService; - import org.chromium.content_public.browser.UiThreadTaskTraits; - - import java.util.ArrayList; -@@ -49,7 +50,7 @@ public class TemplateUrlService { - public static TemplateUrlService getInstance() { - ThreadUtils.assertOnUiThread(); - if (sService == null) { -- sService = new TemplateUrlService(); -+ sService = new BraveTemplateUrlService(); - } - return sService; - } -@@ -59,7 +60,7 @@ public class TemplateUrlService { - private final ObserverList mObservers = - new ObserverList(); - -- private TemplateUrlService() { -+ protected TemplateUrlService() { - // Note that this technically leaks the native object, however, TemlateUrlService - // is a singleton that lives forever and there's no clean shutdown of Chrome on Android - mNativeTemplateUrlServiceAndroid = nativeInit(); diff --git a/patches/chrome-android-java-src-org-chromium-chrome-browser-toolbar-ToolbarManager.java.patch b/patches/chrome-android-java-src-org-chromium-chrome-browser-toolbar-ToolbarManager.java.patch index 45011365879..11a3f4bd00c 100644 --- a/patches/chrome-android-java-src-org-chromium-chrome-browser-toolbar-ToolbarManager.java.patch +++ b/patches/chrome-android-java-src-org-chromium-chrome-browser-toolbar-ToolbarManager.java.patch @@ -1,16 +1,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -index 5e062152c274c9f03aecd657ac9009705ac48db5..510e5501295785f689599c358ee4ef0112598a48 100644 +index 795a84107a8665a7795a14cba33687d5e5e9f460..4396a998f1e9999a0e59f5b2a72bf1a2c70aec68 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -777,6 +777,7 @@ public class ToolbarManager implements ScrimObserver, ToolbarTabController, UrlF +@@ -782,6 +782,7 @@ public class ToolbarManager implements ScrimObserver, ToolbarTabController, UrlF }; final OnClickListener shareButtonListener = v -> { -+/* ++/* recordBottomToolbarUseForIPH(); RecordUserAction.record("MobileBottomToolbarShareButton"); boolean isIncognito = false; -@@ -784,6 +785,7 @@ public class ToolbarManager implements ScrimObserver, ToolbarTabController, UrlF +@@ -789,6 +790,7 @@ public class ToolbarManager implements ScrimObserver, ToolbarTabController, UrlF isIncognito = mTabModelSelector.getCurrentTab().isIncognito(); } mActivity.onShareMenuItemSelected(false, isIncognito); @@ -18,7 +18,7 @@ index 5e062152c274c9f03aecd657ac9009705ac48db5..510e5501295785f689599c358ee4ef01 }; mBottomControlsCoordinator = new BottomControlsCoordinator(mActivity.getFullscreenManager(), -@@ -1745,6 +1747,7 @@ public class ToolbarManager implements ScrimObserver, ToolbarTabController, UrlF +@@ -1772,6 +1774,7 @@ public class ToolbarManager implements ScrimObserver, ToolbarTabController, UrlF boolean editingAllowed = currentTab == null || mBookmarkBridge == null || mBookmarkBridge.isEditBookmarksEnabled(); mToolbar.updateBookmarkButton(isBookmarked, editingAllowed); diff --git a/patches/chrome-android-java-src-org-chromium-chrome-browser-toolbar-top-ToolbarPhone.java.patch b/patches/chrome-android-java-src-org-chromium-chrome-browser-toolbar-top-ToolbarPhone.java.patch index d1e4a98b14b..42f6915daa3 100644 --- a/patches/chrome-android-java-src-org-chromium-chrome-browser-toolbar-top-ToolbarPhone.java.patch +++ b/patches/chrome-android-java-src-org-chromium-chrome-browser-toolbar-top-ToolbarPhone.java.patch @@ -1,8 +1,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java -index a89b91492e39563c09629a6cd27dd70d685927eb..ddb6ba9ae2bb6a60b82a37d336a8d00fdb8480bc 100644 +index 6b0082fe76b27d72b5d90c7047e9e23173dd0afc..cc1ab03f9a7c149da521375cfc18b70aaa83fdd2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java -@@ -88,7 +88,7 @@ import java.util.List; +@@ -86,7 +86,7 @@ import java.util.List; /** * Phone specific toolbar implementation. */ @@ -11,7 +11,7 @@ index a89b91492e39563c09629a6cd27dd70d685927eb..ddb6ba9ae2bb6a60b82a37d336a8d00f NewTabPage.OnSearchBoxScrollListener, TabCountObserver { /** The amount of time transitioning from one theme color to another should take in ms. */ -@@ -426,10 +426,12 @@ public class ToolbarPhone extends ToolbarLayout implements Invalidator.Client, O +@@ -422,10 +422,12 @@ public class ToolbarPhone extends ToolbarLayout implements Invalidator.Client, O /** * Set the background color of the location bar to appropriately match the theme color. */ @@ -25,7 +25,7 @@ index a89b91492e39563c09629a6cd27dd70d685927eb..ddb6ba9ae2bb6a60b82a37d336a8d00f } /** -@@ -546,6 +548,7 @@ public class ToolbarPhone extends ToolbarLayout implements Invalidator.Client, O +@@ -542,6 +544,7 @@ public class ToolbarPhone extends ToolbarLayout implements Invalidator.Client, O .notifyEvent(EventConstants.PARTNER_HOME_PAGE_BUTTON_PRESSED); } } @@ -33,7 +33,7 @@ index a89b91492e39563c09629a6cd27dd70d685927eb..ddb6ba9ae2bb6a60b82a37d336a8d00f } @Override -@@ -719,7 +722,7 @@ public class ToolbarPhone extends ToolbarLayout implements Invalidator.Client, O +@@ -715,7 +718,7 @@ public class ToolbarPhone extends ToolbarLayout implements Invalidator.Client, O * @return The right bounds of the location bar after accounting for any visible left buttons. */ private int getBoundsAfterAccountingForRightButtons() { @@ -42,7 +42,7 @@ index a89b91492e39563c09629a6cd27dd70d685927eb..ddb6ba9ae2bb6a60b82a37d336a8d00f } private void updateToolbarBackground(int color) { -@@ -2129,6 +2132,7 @@ public class ToolbarPhone extends ToolbarLayout implements Invalidator.Client, O +@@ -2130,6 +2133,7 @@ public class ToolbarPhone extends ToolbarLayout implements Invalidator.Client, O } else { populateUrlClearFocusingAnimatorSet(animators); } diff --git a/patches/chrome-android-java-src-org-chromium-chrome-browser-util-FeatureUtilities.java.patch b/patches/chrome-android-java-src-org-chromium-chrome-browser-util-FeatureUtilities.java.patch index df6655889f9..91bd72cf1c1 100644 --- a/patches/chrome-android-java-src-org-chromium-chrome-browser-util-FeatureUtilities.java.patch +++ b/patches/chrome-android-java-src-org-chromium-chrome-browser-util-FeatureUtilities.java.patch @@ -1,8 +1,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java -index a1fd6aced1b2dfe6eca978d1977517383913cd37..0482c54fb467960002133d7203a43e2ec6baf6d1 100644 +index e5270f604ea8b8ee9f27b2e7c89e4945e6e45d60..deb382908cfd0112b7cc0ee02282d8eabf209b5f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java -@@ -491,6 +491,7 @@ public class FeatureUtilities { +@@ -457,6 +457,7 @@ public class FeatureUtilities { * @return Whether or not the bottom toolbar is enabled. */ public static boolean isBottomToolbarEnabled() { @@ -10,7 +10,7 @@ index a1fd6aced1b2dfe6eca978d1977517383913cd37..0482c54fb467960002133d7203a43e2e if (sIsBottomToolbarEnabled == null) { ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance(); -@@ -502,6 +503,7 @@ public class FeatureUtilities { +@@ -468,6 +469,7 @@ public class FeatureUtilities { && !DeviceFormFactor.isNonMultiDisplayContextOnTablet( ContextUtils.getApplicationContext()) && !isTabGroupsAndroidEnabled(); diff --git a/patches/chrome-android-java_sources.gni.patch b/patches/chrome-android-java_sources.gni.patch index 73b0b720e16..3c717850b9c 100644 --- a/patches/chrome-android-java_sources.gni.patch +++ b/patches/chrome-android-java_sources.gni.patch @@ -1,8 +1,8 @@ diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni -index 8aedf50897e9b40ca6b9617bb1a8ac766a6da16a..3ec678a94edda05c74640dcdbf63792a12ecc3dc 100644 +index ba374328abaf898aa5dd233f12673efb558c99ae..546ee1b26bbc68ca2c2d94aa42b93c836debac4f 100644 --- a/chrome/android/java_sources.gni +++ b/chrome/android/java_sources.gni -@@ -15,6 +15,7 @@ import("//components/offline_pages/buildflags/features.gni") +@@ -17,6 +17,7 @@ import("//components/offline_pages/buildflags/features.gni") import("//device/vr/buildflags/buildflags.gni") chrome_java_sources += public_autofill_assistant_java_sources diff --git a/patches/chrome-app-BUILD.gn.patch b/patches/chrome-app-BUILD.gn.patch index 8475bb01e1f..a5f626baa26 100644 --- a/patches/chrome-app-BUILD.gn.patch +++ b/patches/chrome-app-BUILD.gn.patch @@ -1,5 +1,5 @@ diff --git a/chrome/app/BUILD.gn b/chrome/app/BUILD.gn -index 590c4edcededad77172ae30e85b388b91d305b8e..ff494f3afd3dfaed475c89313116a45f64ffb565 100644 +index 6e5ec5df6fb27d3e359304ed1eed873256bdd349..070bb918c76a46a8f2f8003ecf9d616e8982bbec 100644 --- a/chrome/app/BUILD.gn +++ b/chrome/app/BUILD.gn @@ -186,6 +186,8 @@ grit("generated_resources") { @@ -20,10 +20,10 @@ index 590c4edcededad77172ae30e85b388b91d305b8e..ff494f3afd3dfaed475c89313116a45f defines = chrome_grit_defines output_dir = "$root_gen_dir/chrome" outputs = [ -@@ -348,6 +350,7 @@ static_library("test_support") { +@@ -347,6 +349,7 @@ static_library("test_support") { + "//components/gwp_asan/buildflags", "//components/nacl/common:buildflags", "//components/startup_metric_utils/browser:lib", - "//components/tracing", + "//components/unified_consent", "//content/public/app:both", "//content/public/common", diff --git a/patches/chrome-app-chrome_dll.rc.patch b/patches/chrome-app-chrome_dll.rc.patch index 02b7b7e2370..2581bf123ad 100644 --- a/patches/chrome-app-chrome_dll.rc.patch +++ b/patches/chrome-app-chrome_dll.rc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/app/chrome_dll.rc b/chrome/app/chrome_dll.rc -index d994493407e6dc5c640dd16ce488818800c09d14..90846e8502e2cda2fd3a3bad4749f9977c501b12 100644 +index 80a15b55d54f55ca13d6d79b3fd75d28ae0d647f..a0aa8fa83a4e93f7689a0ece2e6dbf9d10a4c175 100644 --- a/chrome/app/chrome_dll.rc +++ b/chrome/app/chrome_dll.rc @@ -164,6 +164,16 @@ END diff --git a/patches/chrome-browser-BUILD.gn.patch b/patches/chrome-browser-BUILD.gn.patch index ab0a6ad1608..46e28e5a260 100644 --- a/patches/chrome-browser-BUILD.gn.patch +++ b/patches/chrome-browser-BUILD.gn.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index 4f9844f6f8546efe591e679c41c7cd3b43c371a8..0e86b115bef94df9821adeffe944b0d3a63b587c 100644 +index c00a09a5ec2b58399559255ae2fc476f3135b78c..6df997d9187c4bec2b51887d7152a7243c42a23d 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -2142,6 +2142,7 @@ jumbo_split_static_library("browser") { +@@ -2180,6 +2180,7 @@ jumbo_split_static_library("browser") { "//ui/strings", "//ui/surface", "//ui/web_dialogs", @@ -10,7 +10,7 @@ index 4f9844f6f8546efe591e679c41c7cd3b43c371a8..0e86b115bef94df9821adeffe944b0d3 ] if (is_posix || is_fuchsia) { -@@ -2155,6 +2156,7 @@ jumbo_split_static_library("browser") { +@@ -2193,6 +2194,7 @@ jumbo_split_static_library("browser") { } if (is_android) { diff --git a/patches/chrome-browser-about_flags.cc.patch b/patches/chrome-browser-about_flags.cc.patch index f40702e27e6..9f62001985a 100644 --- a/patches/chrome-browser-about_flags.cc.patch +++ b/patches/chrome-browser-about_flags.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 61bb2977bb7c9711465a6928b45f6a69be7f4080..c8f888c1423d2e53fc94bffc9db0ab51c86e0a4d 100644 +index 2456729567158701ba9023f7741c117f25990c8c..3466bba226d9bcff427a78e3f18b1a4be0c5230f 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -254,14 +254,14 @@ const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = { +@@ -266,14 +266,14 @@ const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = { const FeatureEntry::Choice kTraceUploadURL[] = { {flags_ui::kGenericExperimentChoiceDisabled, "", ""}, {flag_descriptions::kTraceUploadUrlChoiceOther, switches::kTraceUploadURL, diff --git a/patches/chrome-browser-autocomplete-autocomplete_classifier_factory.cc.patch b/patches/chrome-browser-autocomplete-autocomplete_classifier_factory.cc.patch index d7b0aaaf610..efb80285f29 100644 --- a/patches/chrome-browser-autocomplete-autocomplete_classifier_factory.cc.patch +++ b/patches/chrome-browser-autocomplete-autocomplete_classifier_factory.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/autocomplete/autocomplete_classifier_factory.cc b/chrome/browser/autocomplete/autocomplete_classifier_factory.cc -index e3159144a0b7892e5580bfa910f2db97a81179a9..8ee42d9f6f7ac50c78a03e59aa2ba34e35dae725 100644 +index 7f4dd5ffd15a0ea17fb77d712897a86370da4266..52d8469ae70f38e7a3c714f4761d4172915af138 100644 --- a/chrome/browser/autocomplete/autocomplete_classifier_factory.cc +++ b/chrome/browser/autocomplete/autocomplete_classifier_factory.cc @@ -68,7 +68,12 @@ AutocompleteClassifierFactory::~AutocompleteClassifierFactory() { diff --git a/patches/chrome-browser-browser_process_impl.h.patch b/patches/chrome-browser-browser_process_impl.h.patch index a550a06d7d8..8d2128a57a5 100644 --- a/patches/chrome-browser-browser_process_impl.h.patch +++ b/patches/chrome-browser-browser_process_impl.h.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h -index 95a7bd8e8b581c6addec8b33880b2c03040f713a..b7037dd80a29bbd64a8ed66d4d01e585df589eed 100644 +index c02e294f5b2e388cda053ba03974bff53a7ba5da..c7f071ba6a9f726e45c3ad4e5b637a415ea7146d 100644 --- a/chrome/browser/browser_process_impl.h +++ b/chrome/browser/browser_process_impl.h -@@ -206,6 +206,7 @@ class BrowserProcessImpl : public BrowserProcess, +@@ -198,6 +198,7 @@ class BrowserProcessImpl : public BrowserProcess, static void RegisterPrefs(PrefRegistrySimple* registry); private: diff --git a/patches/chrome-browser-chrome_content_browser_client.h.patch b/patches/chrome-browser-chrome_content_browser_client.h.patch index fe7f0778bd9..c6a42eb46e1 100644 --- a/patches/chrome-browser-chrome_content_browser_client.h.patch +++ b/patches/chrome-browser-chrome_content_browser_client.h.patch @@ -1,9 +1,9 @@ diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h -index 499af0b670a1060f81c2b1dda8812865aac29670..b9d5d5f72fcd3a319472cb226ec83ca4b62f0180 100644 +index 069f597633a2924e0bdacd7cb1d92f5d418e6d87..a40200ffd46ec9deb623906633f4805fb63bf8dd 100644 --- a/chrome/browser/chrome_content_browser_client.h +++ b/chrome/browser/chrome_content_browser_client.h -@@ -637,6 +637,7 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { - content::BrowserContext* browser_context); +@@ -634,6 +634,7 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { + virtual const ui::NativeTheme* GetWebTheme() const; // For testing. private: + friend class BraveContentBrowserClient; diff --git a/patches/chrome-browser-content_settings-tab_specific_content_settings.cc.patch b/patches/chrome-browser-content_settings-tab_specific_content_settings.cc.patch index 9e5c3471484..b6dee9a46cf 100644 --- a/patches/chrome-browser-content_settings-tab_specific_content_settings.cc.patch +++ b/patches/chrome-browser-content_settings-tab_specific_content_settings.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/content_settings/tab_specific_content_settings.cc b/chrome/browser/content_settings/tab_specific_content_settings.cc -index f521d5f7842bcd128772a9c8b57b464ffee312f5..1a9a1b0ebb01a0db607dd88e426166e176146c75 100644 +index 34fde937fea30840585b21c0623443f7dcb6c46a..50de09977491c7961ce3fc643f175d1e1e24a7f4 100644 --- a/chrome/browser/content_settings/tab_specific_content_settings.cc +++ b/chrome/browser/content_settings/tab_specific_content_settings.cc -@@ -283,6 +283,7 @@ bool TabSpecificContentSettings::IsContentBlocked( +@@ -253,6 +253,7 @@ bool TabSpecificContentSettings::IsContentBlocked( content_type == CONTENT_SETTINGS_TYPE_ADS || content_type == CONTENT_SETTINGS_TYPE_SOUND || content_type == CONTENT_SETTINGS_TYPE_CLIPBOARD_READ || @@ -10,7 +10,7 @@ index f521d5f7842bcd128772a9c8b57b464ffee312f5..1a9a1b0ebb01a0db607dd88e426166e1 content_type == CONTENT_SETTINGS_TYPE_SENSORS) { const auto& it = content_settings_status_.find(content_type); if (it != content_settings_status_.end()) -@@ -306,6 +307,7 @@ bool TabSpecificContentSettings::IsContentAllowed( +@@ -276,6 +277,7 @@ bool TabSpecificContentSettings::IsContentAllowed( content_type != CONTENT_SETTINGS_TYPE_PPAPI_BROKER && content_type != CONTENT_SETTINGS_TYPE_MIDI_SYSEX && content_type != CONTENT_SETTINGS_TYPE_CLIPBOARD_READ && diff --git a/patches/chrome-browser-devtools-devtools_ui_bindings.h.patch b/patches/chrome-browser-devtools-devtools_ui_bindings.h.patch index 8faa4ced575..e2a2330a855 100644 --- a/patches/chrome-browser-devtools-devtools_ui_bindings.h.patch +++ b/patches/chrome-browser-devtools-devtools_ui_bindings.h.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/devtools/devtools_ui_bindings.h b/chrome/browser/devtools/devtools_ui_bindings.h -index f832069419217412657c1279712f821e6c036132..50fb5a5f2a6a3f0c910341115839f0d64737ec4d 100644 +index cc7e57e6c2e06dded26fce90dc22953c9785aae5..c535e148ea824e45506d37932e33ecc026e08d26 100644 --- a/chrome/browser/devtools/devtools_ui_bindings.h +++ b/chrome/browser/devtools/devtools_ui_bindings.h @@ -89,6 +89,9 @@ class DevToolsUIBindings : public DevToolsEmbedderMessageDispatcher::Delegate, diff --git a/patches/chrome-browser-extensions-api-webrtc_logging_private-webrtc_logging_private_api.cc.patch b/patches/chrome-browser-extensions-api-webrtc_logging_private-webrtc_logging_private_api.cc.patch index 1f81c76b514..4744357d8fc 100644 --- a/patches/chrome-browser-extensions-api-webrtc_logging_private-webrtc_logging_private_api.cc.patch +++ b/patches/chrome-browser-extensions-api-webrtc_logging_private-webrtc_logging_private_api.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc b/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc -index 8efee8786a5e875dfcd68f262c15a47e1512ab5e..6aea38bf2b9cbcaedd2bde00fd0f11cd2544ca87 100644 +index 3896f0b9e8f764fa425e0702c6ff97ba0a4b1bcf..37c067c77588130a78318d22eb695f70e982dc70 100644 --- a/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc +++ b/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc @@ -87,6 +87,7 @@ std::string HashIdWithOrigin(const std::string& security_origin, diff --git a/patches/chrome-browser-extensions-chrome_extensions_browser_client.cc.patch b/patches/chrome-browser-extensions-chrome_extensions_browser_client.cc.patch index 88d0c483ce1..f66e57e82f0 100644 --- a/patches/chrome-browser-extensions-chrome_extensions_browser_client.cc.patch +++ b/patches/chrome-browser-extensions-chrome_extensions_browser_client.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc -index 87a8ac4f1635d0f11067da7644987a2cff16aa06..4fc1deebd4ad047fa9f00efbd2d5490041b5d32e 100644 +index 37972b557b457ffd69215caf8d2616432fe7a3da..9be4fa73fe51417bc5e8ed88517089a6d6f6592c 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_client.cc +++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc @@ -9,6 +9,8 @@ @@ -11,7 +11,7 @@ index 87a8ac4f1635d0f11067da7644987a2cff16aa06..4fc1deebd4ad047fa9f00efbd2d54900 #include "build/build_config.h" #include "chrome/browser/app_mode/app_mode_utils.h" #include "chrome/browser/browser_process.h" -@@ -91,11 +93,12 @@ bool ExtensionsDisabled(const base::CommandLine& command_line) { +@@ -92,11 +94,12 @@ bool ExtensionsDisabled(const base::CommandLine& command_line) { ChromeExtensionsBrowserClient::ChromeExtensionsBrowserClient() { AddAPIProvider(std::make_unique()); AddAPIProvider(std::make_unique()); diff --git a/patches/chrome-browser-extensions-component_loader.h.patch b/patches/chrome-browser-extensions-component_loader.h.patch index 735baec7f9f..a78db28885c 100644 --- a/patches/chrome-browser-extensions-component_loader.h.patch +++ b/patches/chrome-browser-extensions-component_loader.h.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/extensions/component_loader.h b/chrome/browser/extensions/component_loader.h -index 3f8b640092721536276e478549d8ad5940fe4964..5d7f0ba46efdf2871f333f0010e8e51ad20e6163 100644 +index 77b0a1e8952ece2cd9bb7ea511d7b90b8f8c9abf..d2585bfa2279b5c6e31110e548a0174a9981e892 100644 --- a/chrome/browser/extensions/component_loader.h +++ b/chrome/browser/extensions/component_loader.h -@@ -84,7 +84,7 @@ class ComponentLoader { +@@ -81,7 +81,7 @@ class ComponentLoader { // the loader will skip loading component extensions that weren't supposed to // be loaded unless we are in signed user session (ChromeOS). For all other // platforms this |skip_session_components| is expected to be unset. @@ -11,7 +11,7 @@ index 3f8b640092721536276e478549d8ad5940fe4964..5d7f0ba46efdf2871f333f0010e8e51a // Similar to above but adds the default component extensions for kiosk mode. void AddDefaultComponentExtensionsForKioskMode(bool skip_session_components); -@@ -119,6 +119,7 @@ class ComponentLoader { +@@ -120,6 +120,7 @@ class ComponentLoader { } private: @@ -19,7 +19,7 @@ index 3f8b640092721536276e478549d8ad5940fe4964..5d7f0ba46efdf2871f333f0010e8e51a FRIEND_TEST_ALL_PREFIXES(ComponentLoaderTest, ParseManifest); // Information about a registered component extension. -@@ -164,6 +165,7 @@ class ComponentLoader { +@@ -165,6 +166,7 @@ class ComponentLoader { void AddDefaultComponentExtensionsWithBackgroundPagesForKioskMode(); #if BUILDFLAG(ENABLE_HANGOUT_SERVICES_EXTENSION) diff --git a/patches/chrome-browser-extensions-extension_install_prompt.cc.patch b/patches/chrome-browser-extensions-extension_install_prompt.cc.patch index 1a3b9f05ac8..0d9f00fcce0 100644 --- a/patches/chrome-browser-extensions-extension_install_prompt.cc.patch +++ b/patches/chrome-browser-extensions-extension_install_prompt.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc -index f1ed057b1277648c9aa2cb208f92236062f9ecd6..848481f4fef9f03f19ee744d5c77fffca79bee4e 100644 +index c84fc509e52a7abd829c3dc5c4f6b821e5c32fa9..386fdf4f001177d9a779a632568fe821cbfe94db 100644 --- a/chrome/browser/extensions/extension_install_prompt.cc +++ b/chrome/browser/extensions/extension_install_prompt.cc @@ -13,6 +13,7 @@ @@ -10,7 +10,7 @@ index f1ed057b1277648c9aa2cb208f92236062f9ecd6..848481f4fef9f03f19ee744d5c77fffc #include "chrome/browser/extensions/extension_install_prompt_show_params.h" #include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/extensions/permissions_updater.h" -@@ -512,7 +513,7 @@ void ExtensionInstallPrompt::ShowDialog( +@@ -509,7 +510,7 @@ void ExtensionInstallPrompt::ShowDialog( const SkBitmap* icon, const ShowDialogCallback& show_dialog_callback) { ShowDialog(done_callback, extension, icon, diff --git a/patches/chrome-browser-extensions-extension_install_prompt.h.patch b/patches/chrome-browser-extensions-extension_install_prompt.h.patch index 314461cc7ca..754aebcb217 100644 --- a/patches/chrome-browser-extensions-extension_install_prompt.h.patch +++ b/patches/chrome-browser-extensions-extension_install_prompt.h.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/extensions/extension_install_prompt.h b/chrome/browser/extensions/extension_install_prompt.h -index 44c0b01772fd3e2a1c1670eb077553e972e05e60..ddbf41e0c2a85293fe03249b9810932e02aa2c2b 100644 +index dcea843a6d7190d4e9e30d6ecce28028f18fd783..6f30d828db13b9f38f184499089d420cdbea4d4b 100644 --- a/chrome/browser/extensions/extension_install_prompt.h +++ b/chrome/browser/extensions/extension_install_prompt.h @@ -87,7 +87,7 @@ class ExtensionInstallPrompt { diff --git a/patches/chrome-browser-extensions-extension_management.cc.patch b/patches/chrome-browser-extensions-extension_management.cc.patch index 4a7bd83501d..05ab72e7987 100644 --- a/patches/chrome-browser-extensions-extension_management.cc.patch +++ b/patches/chrome-browser-extensions-extension_management.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc -index ab6c99a40a84961a61eea241a9dd346f8174eb48..dcdf09c4a5748032716fbc70bad7d12a15c7c566 100644 +index 0c051349bd1a862372dc975923e7fe5cc2129233..8bc5c167f712986694063d26c0dbd5cb5f7386e6 100644 --- a/chrome/browser/extensions/extension_management.cc +++ b/chrome/browser/extensions/extension_management.cc @@ -16,6 +16,7 @@ @@ -10,7 +10,7 @@ index ab6c99a40a84961a61eea241a9dd346f8174eb48..dcdf09c4a5748032716fbc70bad7d12a #include "chrome/browser/extensions/extension_management_constants.h" #include "chrome/browser/extensions/extension_management_internal.h" #include "chrome/browser/extensions/external_policy_loader.h" -@@ -626,7 +627,7 @@ KeyedService* ExtensionManagementFactory::BuildServiceInstanceFor( +@@ -625,7 +626,7 @@ KeyedService* ExtensionManagementFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { TRACE_EVENT0("browser,startup", "ExtensionManagementFactory::BuildServiceInstanceFor"); diff --git a/patches/chrome-browser-external_protocol-external_protocol_handler.cc.patch b/patches/chrome-browser-external_protocol-external_protocol_handler.cc.patch index 5b53f95cd84..989ebf2d5dc 100644 --- a/patches/chrome-browser-external_protocol-external_protocol_handler.cc.patch +++ b/patches/chrome-browser-external_protocol-external_protocol_handler.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/external_protocol/external_protocol_handler.cc b/chrome/browser/external_protocol/external_protocol_handler.cc -index a3f16ad264fd2238a1b33685bfdea4d60a091a17..1848f745ea5413beab4fe2a5504ecd572cc2874c 100644 +index f8df0bf3d43cd2a68898d34ecaaf72c986a30868..a119cfba5f34ee8dc9d54b6b4013a74285a87fab 100644 --- a/chrome/browser/external_protocol/external_protocol_handler.cc +++ b/chrome/browser/external_protocol/external_protocol_handler.cc -@@ -186,7 +186,7 @@ ExternalProtocolHandler::BlockState ExternalProtocolHandler::GetBlockState( +@@ -236,7 +236,7 @@ ExternalProtocolHandler::BlockState ExternalProtocolHandler::GetBlockState( // Always allow the hard-coded allowed schemes. for (size_t i = 0; i < base::size(kAllowedSchemes); ++i) { if (kAllowedSchemes[i] == scheme) diff --git a/patches/chrome-browser-importer-external_process_importer_client.cc.patch b/patches/chrome-browser-importer-external_process_importer_client.cc.patch index ce5f8940561..2bedb5eaee0 100644 --- a/patches/chrome-browser-importer-external_process_importer_client.cc.patch +++ b/patches/chrome-browser-importer-external_process_importer_client.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/importer/external_process_importer_client.cc b/chrome/browser/importer/external_process_importer_client.cc -index 7320911bb2c1e848eafe487f9b376df2177521e8..6e7278eb8fd6fc9fd2ad339192e4eb7cf7ba3964 100644 +index d6f6de319f3662dbd1d0b4bf469c8325aea127a9..dd7e12127a6339e1eff0da8307464eb0c256d615 100644 --- a/chrome/browser/importer/external_process_importer_client.cc +++ b/chrome/browser/importer/external_process_importer_client.cc -@@ -69,6 +69,12 @@ void ExternalProcessImporterClient::Start() { +@@ -67,6 +67,12 @@ void ExternalProcessImporterClient::Start() { localized_strings.try_emplace( IDS_BOOKMARK_BAR_FOLDER_NAME, l10n_util::GetStringUTF8(IDS_BOOKMARK_BAR_FOLDER_NAME)); diff --git a/patches/chrome-browser-importer-external_process_importer_host.h.patch b/patches/chrome-browser-importer-external_process_importer_host.h.patch index 970610fed25..ef79ef5a5e4 100644 --- a/patches/chrome-browser-importer-external_process_importer_host.h.patch +++ b/patches/chrome-browser-importer-external_process_importer_host.h.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/importer/external_process_importer_host.h b/chrome/browser/importer/external_process_importer_host.h -index 08c6f28746cc5f345114a942834db18f5c7a1d41..9b4ba999a26fb5600fce29eed80ad6f974e0a265 100644 +index f8bd5d50910b2a068b964a8377233bf5a25fe618..1af30b9cfc4aa7924864603ee0b10e995fb77ea7 100644 --- a/chrome/browser/importer/external_process_importer_host.h +++ b/chrome/browser/importer/external_process_importer_host.h @@ -72,10 +72,13 @@ class ExternalProcessImporterHost diff --git a/patches/chrome-browser-importer-importer_list.cc.patch b/patches/chrome-browser-importer-importer_list.cc.patch index db235f94664..8ccbcc00e61 100644 --- a/patches/chrome-browser-importer-importer_list.cc.patch +++ b/patches/chrome-browser-importer-importer_list.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/importer/importer_list.cc b/chrome/browser/importer/importer_list.cc -index 71659dd4133d71a90276f364ca685e78533b8979..f33c4354a6e5f7d69ca347e737e272494d1b036e 100644 +index 57c0506feeb1318ed0ed77b47ffce4babfe0b8e1..bc7c6e04098780d12c9c55d676f587ea5b7e8937 100644 --- a/chrome/browser/importer/importer_list.cc +++ b/chrome/browser/importer/importer_list.cc @@ -29,6 +29,9 @@ diff --git a/patches/chrome-browser-io_thread.cc.patch b/patches/chrome-browser-io_thread.cc.patch deleted file mode 100644 index 26696070a93..00000000000 --- a/patches/chrome-browser-io_thread.cc.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc -index 25cb1333363e32f3afe13239b40159dd3444e834..b6e8725370c9bc040b9f4b1ca3e5b61a7351144a 100644 ---- a/chrome/browser/io_thread.cc -+++ b/chrome/browser/io_thread.cc -@@ -237,6 +237,7 @@ net::URLRequestContextGetter* IOThread::system_url_request_context_getter() { - system_url_request_context_getter_ = - base::MakeRefCounted(this); - } else { -+ if (base::FeatureList::IsEnabled(network::features::kNetworkService)) - NOTREACHED(); - } - return system_url_request_context_getter_.get(); diff --git a/patches/chrome-browser-media-webrtc-webrtc_log_uploader.cc.patch b/patches/chrome-browser-media-webrtc-webrtc_log_uploader.cc.patch index acb09012c9d..65f19af23d8 100644 --- a/patches/chrome-browser-media-webrtc-webrtc_log_uploader.cc.patch +++ b/patches/chrome-browser-media-webrtc-webrtc_log_uploader.cc.patch @@ -1,12 +1,12 @@ diff --git a/chrome/browser/media/webrtc/webrtc_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_log_uploader.cc -index ff329ad9104cd0e87f376b8c1771620a771c0be1..904b50859dfb3f9289d9168b7bba8c088c5df141 100644 +index a89794d69357b7bd24853c7a7bb978cec265eb59..65546bb06a1876912fc39f1135c4b6f58c9170bc 100644 --- a/chrome/browser/media/webrtc/webrtc_log_uploader.cc +++ b/chrome/browser/media/webrtc/webrtc_log_uploader.cc -@@ -477,6 +477,7 @@ std::string WebRtcLogUploader::CompressLog(WebRtcLogBuffer* buffer) { +@@ -445,6 +445,7 @@ std::string WebRtcLogUploader::CompressLog(WebRtcLogBuffer* buffer) { void WebRtcLogUploader::UploadCompressedLog( const WebRtcLogUploadDoneData& upload_done_data, std::unique_ptr post_data) { + return; // feature disabled in Brave - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(main_sequence_checker_); DecreaseLogCount(); diff --git a/patches/chrome-browser-net-chrome_network_delegate.h.patch b/patches/chrome-browser-net-chrome_network_delegate.h.patch index ac229748afa..276e7aace49 100644 --- a/patches/chrome-browser-net-chrome_network_delegate.h.patch +++ b/patches/chrome-browser-net-chrome_network_delegate.h.patch @@ -1,12 +1,12 @@ diff --git a/chrome/browser/net/chrome_network_delegate.h b/chrome/browser/net/chrome_network_delegate.h -index 5286e342dec6199c2336622dc0f67eb11427300a..f29a144ad4e1311c3ebc38cfe1297c9113985bfe 100644 +index 12c8c497b87ba62f15e0737286467b9a492ae376..05f86e333337f795af8bc62af7c792ea0144c79b 100644 --- a/chrome/browser/net/chrome_network_delegate.h +++ b/chrome/browser/net/chrome_network_delegate.h -@@ -97,6 +97,7 @@ class ChromeNetworkDelegate : public net::NetworkDelegateImpl { +@@ -27,6 +27,7 @@ class ChromeNetworkDelegate { + // with false brings back the original (production) behaviors. static void EnableAccessToAllFilesForTesting(bool enabled); - private: + friend class BraveNetworkDelegateBase; - // NetworkDelegate implementation. - int OnBeforeURLRequest(net::URLRequest* request, - net::CompletionOnceCallback callback, + DISALLOW_COPY_AND_ASSIGN(ChromeNetworkDelegate); + }; + diff --git a/patches/chrome-browser-net-chrome_url_request_context_getter.cc.patch b/patches/chrome-browser-net-chrome_url_request_context_getter.cc.patch deleted file mode 100644 index 6c6f0502836..00000000000 --- a/patches/chrome-browser-net-chrome_url_request_context_getter.cc.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/chrome/browser/net/chrome_url_request_context_getter.cc b/chrome/browser/net/chrome_url_request_context_getter.cc -index a931ece03ee26647686419328b9884c2726468db..90d78c0576a8f8df12649ed6dd1a34c48caa4104 100644 ---- a/chrome/browser/net/chrome_url_request_context_getter.cc -+++ b/chrome/browser/net/chrome_url_request_context_getter.cc -@@ -5,7 +5,7 @@ - #include "chrome/browser/net/chrome_url_request_context_getter.h" - - #include -- -+#include "brave/components/brave_shields/browser/adblock_interceptor.h" - #include "base/bind.h" - #include "base/compiler_specific.h" - #include "base/macros.h" -@@ -50,6 +50,7 @@ class FactoryForMain : public ChromeURLRequestContextFactory { - : profile_io_data_(profile_io_data), - request_interceptors_(std::move(request_interceptors)) { - std::swap(protocol_handlers_, *protocol_handlers); -+ request_interceptors_.emplace_back(new brave_shields::AdBlockInterceptor); - } - - net::URLRequestContext* Create() override { -@@ -84,6 +85,7 @@ class FactoryForIsolatedApp : public ChromeURLRequestContextFactory { - network_context_request_(std::move(network_context_request)), - network_context_params_(std::move(network_context_params)) { - std::swap(protocol_handlers_, *protocol_handlers); -+ request_interceptors_.emplace_back(new brave_shields::AdBlockInterceptor); - } - - net::URLRequestContext* Create() override { diff --git a/patches/chrome-browser-net-net_error_tab_helper.cc.patch b/patches/chrome-browser-net-net_error_tab_helper.cc.patch index 71b8de4f9c5..a595064ee59 100644 --- a/patches/chrome-browser-net-net_error_tab_helper.cc.patch +++ b/patches/chrome-browser-net-net_error_tab_helper.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/net/net_error_tab_helper.cc b/chrome/browser/net/net_error_tab_helper.cc -index d39876436dd64faa0bae445c3e0ad1c666dbae17..88eb4e98bdb5a040e26c72f7c5eed9de8ef8bcc8 100644 +index f2dd356b43f396991446ab3a59067e8a44048014..c74fea87daf5b42be11275ee259ae01dfbb773b7 100644 --- a/chrome/browser/net/net_error_tab_helper.cc +++ b/chrome/browser/net/net_error_tab_helper.cc -@@ -234,6 +234,9 @@ void NetErrorTabHelper::InitializePref(WebContents* contents) { +@@ -233,6 +233,9 @@ void NetErrorTabHelper::InitializePref(WebContents* contents) { } bool NetErrorTabHelper::ProbesAllowed() const { diff --git a/patches/chrome-browser-net-system_network_context_manager.cc.patch b/patches/chrome-browser-net-system_network_context_manager.cc.patch index b91462fe043..f2c4a233a83 100644 --- a/patches/chrome-browser-net-system_network_context_manager.cc.patch +++ b/patches/chrome-browser-net-system_network_context_manager.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc -index 2c9b6e9536749bee6c7ca4dbd3c87410e0940f64..835a1af9866f93b779ef5e5be36f0eabe505b815 100644 +index 156b022694d82b7e5b281cc8790b5ad8926a5c9b..a59601dc01c1c94dc6b4e49a62c71e6b056d6e7a 100644 --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc -@@ -263,7 +263,7 @@ class SystemNetworkContextManager::URLLoaderFactoryForSystem +@@ -250,7 +250,7 @@ class SystemNetworkContextManager::URLLoaderFactoryForSystem if (!manager_) return; manager_->GetURLLoaderFactory()->CreateLoaderAndStart( diff --git a/patches/chrome-browser-notifications-notification_platform_bridge_linux.cc.patch b/patches/chrome-browser-notifications-notification_platform_bridge_linux.cc.patch index 229365dace4..1a6c48cf89f 100644 --- a/patches/chrome-browser-notifications-notification_platform_bridge_linux.cc.patch +++ b/patches/chrome-browser-notifications-notification_platform_bridge_linux.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/notifications/notification_platform_bridge_linux.cc b/chrome/browser/notifications/notification_platform_bridge_linux.cc -index aa6d15f6ebbdcc6e70374a46ca9c11d4c1bff854..5c2bdec672a402edbc3602887fdad9e3cc0056a8 100644 +index 04a4ac46f01173b3a8bdb4ebab1eeea03cfd6c1b..a2a0e8a90a2a564611ffc6e8f8240a63cf597fe6 100644 --- a/chrome/browser/notifications/notification_platform_bridge_linux.cc +++ b/chrome/browser/notifications/notification_platform_bridge_linux.cc -@@ -632,6 +632,7 @@ class NotificationPlatformBridgeLinuxImpl +@@ -648,6 +648,7 @@ class NotificationPlatformBridgeLinuxImpl actions.push_back("Activate"); // Always add a settings button for web notifications. if (notification_type != NotificationHandler::Type::EXTENSION && diff --git a/patches/chrome-browser-permissions-permission_manager.cc.patch b/patches/chrome-browser-permissions-permission_manager.cc.patch index 20dddb1432a..4d4e07cb450 100644 --- a/patches/chrome-browser-permissions-permission_manager.cc.patch +++ b/patches/chrome-browser-permissions-permission_manager.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc -index 3f612a3cf55ce07de9aa5aa29e94e2338377f90a..6f329e24de35557510651069a903853f34fbce42 100644 +index 9f535334da7e3ca1939e98a055ec93662a38b552..81f81e6d2b3dc359d262440dbd20cf995ba88c46 100644 --- a/chrome/browser/permissions/permission_manager.cc +++ b/chrome/browser/permissions/permission_manager.cc -@@ -88,7 +88,7 @@ PermissionStatus ContentSettingToPermissionStatus(ContentSetting setting) { +@@ -89,7 +89,7 @@ PermissionStatus ContentSettingToPermissionStatus(ContentSetting setting) { } // Helper method to convert PermissionType to ContentSettingType. @@ -11,9 +11,9 @@ index 3f612a3cf55ce07de9aa5aa29e94e2338377f90a..6f329e24de35557510651069a903853f switch (permission) { case PermissionType::MIDI: return CONTENT_SETTINGS_TYPE_MIDI; -@@ -132,6 +132,7 @@ ContentSettingsType PermissionTypeToContentSetting(PermissionType permission) { - case PermissionType::PERIODIC_BACKGROUND_SYNC: - return CONTENT_SETTINGS_TYPE_PERIODIC_BACKGROUND_SYNC; +@@ -137,6 +137,7 @@ ContentSettingsType PermissionTypeToContentSetting(PermissionType permission) { + case PermissionType::WAKE_LOCK_SYSTEM: + return CONTENT_SETTINGS_TYPE_WAKE_LOCK_SYSTEM; case PermissionType::NUM: + default: // This will hit the NOTREACHED below. diff --git a/patches/chrome-browser-permissions-permission_uma_util.cc.patch b/patches/chrome-browser-permissions-permission_uma_util.cc.patch index 625c907ed17..18bebf0040b 100644 --- a/patches/chrome-browser-permissions-permission_uma_util.cc.patch +++ b/patches/chrome-browser-permissions-permission_uma_util.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/permissions/permission_uma_util.cc b/chrome/browser/permissions/permission_uma_util.cc -index 97ae8e1ee0339d5714d3baef177a1e27ce219583..431c5256251904e83ed7c7a7245a39b4eef4f1db 100644 +index 50768c0a91bb5f29760e398ed9c6486a06334b49..18c8118777376ddd24e88ad38576be092e214ba0 100644 --- a/chrome/browser/permissions/permission_uma_util.cc +++ b/chrome/browser/permissions/permission_uma_util.cc @@ -65,7 +65,7 @@ namespace { diff --git a/patches/chrome-browser-plugins-chrome_plugin_service_filter.cc.patch b/patches/chrome-browser-plugins-chrome_plugin_service_filter.cc.patch index ca20e66cb67..02357bf63c9 100644 --- a/patches/chrome-browser-plugins-chrome_plugin_service_filter.cc.patch +++ b/patches/chrome-browser-plugins-chrome_plugin_service_filter.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/plugins/chrome_plugin_service_filter.cc b/chrome/browser/plugins/chrome_plugin_service_filter.cc -index 5c2a2d0adf1ca353d4ab8dd23475c9d6e6df3b55..dc8f62521ba5c78fcee7e79d028ee8ddc8964e7f 100644 +index 55801ac0fee766a5f46314137d4745ff8a1d7f24..9acdabbe23d440d7468cbc9ef3b1e589f74db12c 100644 --- a/chrome/browser/plugins/chrome_plugin_service_filter.cc +++ b/chrome/browser/plugins/chrome_plugin_service_filter.cc -@@ -52,7 +52,7 @@ class ProfileContentSettingObserver : public content_settings::Observer { +@@ -51,7 +51,7 @@ class ProfileContentSettingObserver : public content_settings::Observer { PluginService::GetInstance()->PurgePluginListCache(profile_, false); const GURL primary(primary_pattern.ToString()); diff --git a/patches/chrome-browser-plugins-plugins_resource_service.cc.patch b/patches/chrome-browser-plugins-plugins_resource_service.cc.patch index 407468e5925..3447f9bbea8 100644 --- a/patches/chrome-browser-plugins-plugins_resource_service.cc.patch +++ b/patches/chrome-browser-plugins-plugins_resource_service.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/plugins/plugins_resource_service.cc b/chrome/browser/plugins/plugins_resource_service.cc -index d7c3801df3e8766b2124b4c73ec3a46631aa5d3b..d6d391d47a4b4540f4177034da6ee475100c78b0 100644 +index 85003dd6cb04d27820e182c75fd76169b269a7e1..f3facf8c650cda32fa59bca6735c897f1aede5ca 100644 --- a/chrome/browser/plugins/plugins_resource_service.cc +++ b/chrome/browser/plugins/plugins_resource_service.cc @@ -55,7 +55,7 @@ const int kStartResourceFetchDelayMs = 60 * 1000; diff --git a/patches/chrome-browser-prefs-browser_prefs.cc.patch b/patches/chrome-browser-prefs-browser_prefs.cc.patch index 57f85203cf1..58858f7e63e 100644 --- a/patches/chrome-browser-prefs-browser_prefs.cc.patch +++ b/patches/chrome-browser-prefs-browser_prefs.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc -index 50312cdb0324e3dad18c77c96e5e609bfb259541..2298f9b60d2718d82e721dc8483b114931a30d0d 100644 +index b806315041d481b485a9329097b5b626ff0921b0..73e949fdb3b751b923e759c35f546c9ec38895ea 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -658,6 +658,7 @@ void RegisterLocalState(PrefRegistrySimple* registry) { +@@ -688,6 +688,7 @@ void RegisterLocalState(PrefRegistrySimple* registry) { #if defined(TOOLKIT_VIEWS) RegisterBrowserViewLocalPrefs(registry); #endif @@ -10,7 +10,7 @@ index 50312cdb0324e3dad18c77c96e5e609bfb259541..2298f9b60d2718d82e721dc8483b1149 } // Register prefs applicable to all profiles. -@@ -908,6 +909,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -945,6 +946,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #endif RegisterProfilePrefsForMigration(registry); diff --git a/patches/chrome-browser-profiles-profile.cc.patch b/patches/chrome-browser-profiles-profile.cc.patch index a1fe406766b..92b1243ba5d 100644 --- a/patches/chrome-browser-profiles-profile.cc.patch +++ b/patches/chrome-browser-profiles-profile.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc -index 71d736c9eaf3503e532d72c410f4d4dadff372cd..39114245329d5767f8b51a5c9120c76038018d04 100644 +index 28d3c597acc9e58bab439badb1d1dc9baa139048..4e4a3742f9133dcba49a2ec68a1181a345c5f63b 100644 --- a/chrome/browser/profiles/profile.cc +++ b/chrome/browser/profiles/profile.cc @@ -140,7 +140,7 @@ const char Profile::kProfileKey[] = "__PROFILE__"; @@ -11,7 +11,7 @@ index 71d736c9eaf3503e532d72c410f4d4dadff372cd..39114245329d5767f8b51a5c9120c760 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); #if defined(OS_ANDROID) registry->RegisterStringPref( -@@ -244,7 +244,7 @@ bool Profile::IsGuestSession() const { +@@ -257,7 +257,7 @@ bool Profile::IsGuestSession() const { chromeos::switches::kGuestSession); return is_guest_session; #else diff --git a/patches/chrome-browser-profiles-profile_avatar_icon_util.cc.patch b/patches/chrome-browser-profiles-profile_avatar_icon_util.cc.patch index 7f8facd6c79..57e4c12470e 100644 --- a/patches/chrome-browser-profiles-profile_avatar_icon_util.cc.patch +++ b/patches/chrome-browser-profiles-profile_avatar_icon_util.cc.patch @@ -1,17 +1,17 @@ diff --git a/chrome/browser/profiles/profile_avatar_icon_util.cc b/chrome/browser/profiles/profile_avatar_icon_util.cc -index b126966b32db51704639d19c47ed2c1c6c57652a..d8ace4398509ef4952aaab808a27b735bdfd282a 100644 +index c39443398d04974564cd53bc7705dc68cd65e6cc..508f734ab5af72caac46897764d77ada0fa23a50 100644 --- a/chrome/browser/profiles/profile_avatar_icon_util.cc +++ b/chrome/browser/profiles/profile_avatar_icon_util.cc -@@ -261,7 +261,7 @@ constexpr char kHighResAvatarFolderName[] = "Avatars"; - - // The size of the function-static kDefaultAvatarIconResources array below. - #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) +@@ -265,7 +265,7 @@ constexpr size_t kDefaultAvatarIconsCount = 1; + #elif defined(OS_CHROMEOS) + constexpr size_t kDefaultAvatarIconsCount = 27; + #else -constexpr size_t kDefaultAvatarIconsCount = 56; +constexpr size_t kDefaultAvatarIconsCount = 56 + kBraveDefaultAvatarIconsCount; - #else - constexpr size_t kDefaultAvatarIconsCount = 27; #endif -@@ -362,6 +362,7 @@ size_t GetPlaceholderAvatarIndex() { + + #if !defined(OS_ANDROID) +@@ -372,6 +372,7 @@ size_t GetPlaceholderAvatarIndex() { size_t GetModernAvatarIconStartIndex() { #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) @@ -19,11 +19,11 @@ index b126966b32db51704639d19c47ed2c1c6c57652a..d8ace4398509ef4952aaab808a27b735 return GetPlaceholderAvatarIndex() + 1; #else // Only use the placeholder avatar on ChromeOS and Android. -@@ -387,6 +388,7 @@ std::string GetPlaceholderAvatarIconUrl() { +@@ -397,6 +398,7 @@ std::string GetPlaceholderAvatarIconUrl() { const IconResourceInfo* GetDefaultAvatarIconResourceInfo(size_t index) { CHECK_LT(index, kDefaultAvatarIconsCount); + BRAVE_GET_DEFAULT_AVATAR_ICON_RESOURCE_INFO static const IconResourceInfo resource_info[kDefaultAvatarIconsCount] = { - // Old avatar icons: - {IDR_PROFILE_AVATAR_0, "avatar_generic.png", IDS_DEFAULT_AVATAR_LABEL_0}, + // Old avatar icons: + #if !defined(OS_ANDROID) diff --git a/patches/chrome-browser-profiles-profile_impl.cc.patch b/patches/chrome-browser-profiles-profile_impl.cc.patch index ad4ce212270..596d6c8df28 100644 --- a/patches/chrome-browser-profiles-profile_impl.cc.patch +++ b/patches/chrome-browser-profiles-profile_impl.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc -index 71619ca3d5271b0f813110dce0e5570b6eebdda7..97003f2bc6f1141ae49dc2a2ac58e5f861fd0615 100644 +index 084648e9606f9847ff722901fb95626677a17c1e..0bcb822c794146ceec8c52c01da8c973fa25b808 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc @@ -34,6 +34,7 @@ diff --git a/patches/chrome-browser-profiles-profile_io_data.cc.patch b/patches/chrome-browser-profiles-profile_io_data.cc.patch index 87495c2e791..4ef98067eb6 100644 --- a/patches/chrome-browser-profiles-profile_io_data.cc.patch +++ b/patches/chrome-browser-profiles-profile_io_data.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc -index a77de6f1abed2133190908db2fe3e417b05bc4f0..e67fcb11518b4d644425fe4275dd7aebb39e68a4 100644 +index 285f9e09a9020e8647fe363f7d3b0c867b1d26ea..10a247b701690ff70f1039a43d94dd164c3f18dd 100644 --- a/chrome/browser/profiles/profile_io_data.cc +++ b/chrome/browser/profiles/profile_io_data.cc @@ -24,6 +24,7 @@ @@ -10,7 +10,7 @@ index a77de6f1abed2133190908db2fe3e417b05bc4f0..e67fcb11518b4d644425fe4275dd7aeb #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h" -@@ -639,6 +640,9 @@ bool ProfileIOData::IsHandledProtocol(const std::string& scheme) { +@@ -417,6 +418,9 @@ bool ProfileIOData::IsHandledProtocol(const std::string& scheme) { extensions::kExtensionScheme, #endif content::kChromeUIScheme, @@ -20,12 +20,3 @@ index a77de6f1abed2133190908db2fe3e417b05bc4f0..e67fcb11518b4d644425fe4275dd7aeb url::kDataScheme, #if defined(OS_CHROMEOS) content::kExternalFileScheme, -@@ -925,7 +929,7 @@ void ProfileIOData::Init( - std::make_unique(); - - std::unique_ptr chrome_network_delegate( -- new ChromeNetworkDelegate( -+ new BraveProfileNetworkDelegate( - #if BUILDFLAG(ENABLE_EXTENSIONS) - io_thread_globals->extension_event_router_forwarder.get())); - #else diff --git a/patches/chrome-browser-profiles-profile_manager.cc.patch b/patches/chrome-browser-profiles-profile_manager.cc.patch index 00d573f9369..7ae2c1dc431 100644 --- a/patches/chrome-browser-profiles-profile_manager.cc.patch +++ b/patches/chrome-browser-profiles-profile_manager.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc -index 4cce9ca9fbf1ded2c4b8334f8ff9be0d43e97803..7b39473be45be8530eb91c1389c96aa65625a7d1 100644 +index bd2715738d89bc9a099d3be0614f720303b98086..0cd794e5c9b6d5dea803cc00b899524ba2ac75e6 100644 --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc -@@ -1503,9 +1503,11 @@ void ProfileManager::EnsureActiveProfileExistsBeforeDeletion( +@@ -1419,9 +1419,11 @@ void ProfileManager::EnsureActiveProfileExistsBeforeDeletion( const base::FilePath last_used_profile_path = GetLastUsedProfileDir(user_data_dir_); const base::FilePath guest_profile_path = GetGuestProfilePath(); @@ -14,7 +14,7 @@ index 4cce9ca9fbf1ded2c4b8334f8ff9be0d43e97803..7b39473be45be8530eb91c1389c96aa6 last_used_profile != nullptr && !last_used_profile->IsLegacySupervised()) { FinishDeletingProfile(profile_dir, last_used_profile_path); -@@ -1518,6 +1520,7 @@ void ProfileManager::EnsureActiveProfileExistsBeforeDeletion( +@@ -1434,6 +1436,7 @@ void ProfileManager::EnsureActiveProfileExistsBeforeDeletion( base::FilePath cur_path = profile->GetPath(); if (cur_path != profile_dir && cur_path != guest_profile_path && @@ -22,7 +22,7 @@ index 4cce9ca9fbf1ded2c4b8334f8ff9be0d43e97803..7b39473be45be8530eb91c1389c96aa6 !profile->IsLegacySupervised() && !IsProfileDirectoryMarkedForDeletion(cur_path)) { OnNewActiveProfileLoaded(profile_dir, cur_path, std::move(callback), -@@ -1537,6 +1540,7 @@ void ProfileManager::EnsureActiveProfileExistsBeforeDeletion( +@@ -1453,6 +1456,7 @@ void ProfileManager::EnsureActiveProfileExistsBeforeDeletion( // legacy-supervised. if (cur_path != profile_dir && cur_path != guest_profile_path && @@ -30,7 +30,7 @@ index 4cce9ca9fbf1ded2c4b8334f8ff9be0d43e97803..7b39473be45be8530eb91c1389c96aa6 !entry->IsLegacySupervised() && !IsProfileDirectoryMarkedForDeletion(cur_path)) { fallback_profile_path = cur_path; -@@ -1894,6 +1898,7 @@ void ProfileManager::ScheduleForcedEphemeralProfileForDeletion( +@@ -1867,6 +1871,7 @@ void ProfileManager::ScheduleForcedEphemeralProfileForDeletion( base::FilePath entry_path = entry->GetPath(); if (entry_path == profile_dir || entry_path == GetGuestProfilePath() || diff --git a/patches/chrome-browser-profiles-profile_manager.h.patch b/patches/chrome-browser-profiles-profile_manager.h.patch index a2f14a3ab8c..fa4a11cd6c5 100644 --- a/patches/chrome-browser-profiles-profile_manager.h.patch +++ b/patches/chrome-browser-profiles-profile_manager.h.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/profiles/profile_manager.h b/chrome/browser/profiles/profile_manager.h -index 257e27caed9f6ef1dc984d5cdbae82c3d0daa427..ab13240fbb230326ecd102fa8f60aa5eb17bc4ff 100644 +index 985c64458bdf2c547a5b9286b448aaa2513b2109..a677df807effba3589b6a067ffc940432b064839 100644 --- a/chrome/browser/profiles/profile_manager.h +++ b/chrome/browser/profiles/profile_manager.h -@@ -139,7 +139,7 @@ class ProfileManager : public content::NotificationObserver, +@@ -141,7 +141,7 @@ class ProfileManager : public content::NotificationObserver, // Get the name of the last used profile, or if that's undefined, the default // profile. @@ -11,7 +11,7 @@ index 257e27caed9f6ef1dc984d5cdbae82c3d0daa427..ab13240fbb230326ecd102fa8f60aa5e // Get the Profiles which are currently open, i.e. have open browsers or were // open the last time Chrome was running. Profiles that fail to initialize are -@@ -220,7 +220,7 @@ class ProfileManager : public content::NotificationObserver, +@@ -222,7 +222,7 @@ class ProfileManager : public content::NotificationObserver, // Initializes user prefs of |profile|. This includes profile name and // avatar values. @@ -20,12 +20,12 @@ index 257e27caed9f6ef1dc984d5cdbae82c3d0daa427..ab13240fbb230326ecd102fa8f60aa5e // Register and add testing profile to the ProfileManager. Use ONLY in tests. // This allows the creation of Profiles outside of the standard creation path -@@ -346,7 +346,7 @@ class ProfileManager : public content::NotificationObserver, +@@ -349,7 +349,7 @@ class ProfileManager : public content::NotificationObserver, // Apply settings for profiles created by the system rather than users: The // (desktop) Guest User profile and (desktop) System Profile. - void SetNonPersonalProfilePrefs(Profile* profile); + virtual void SetNonPersonalProfilePrefs(Profile* profile); - // For ChromeOS, determines if profile should be otr. + // Determines if profile should be OTR. bool ShouldGoOffTheRecord(Profile* profile); diff --git a/patches/chrome-browser-renderer_context_menu-render_view_context_menu.h.patch b/patches/chrome-browser-renderer_context_menu-render_view_context_menu.h.patch index df6e978bc65..13b46e0981f 100644 --- a/patches/chrome-browser-renderer_context_menu-render_view_context_menu.h.patch +++ b/patches/chrome-browser-renderer_context_menu-render_view_context_menu.h.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.h b/chrome/browser/renderer_context_menu/render_view_context_menu.h -index 824741727052dfd87f8f65df8bbb5adf4a9f1e2e..3caba335f84e5126c5912451b5dbcc807b21f62a 100644 +index 7e993b49e93d4a51baa2f6f4bc7953ddc099f4c6..f21255d047bbf411ce4d0509da828c7486f7c668 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu.h +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.h -@@ -113,6 +113,7 @@ class RenderViewContextMenu : public RenderViewContextMenuBase { +@@ -112,6 +112,7 @@ class RenderViewContextMenu : public RenderViewContextMenuBase { // Returns true if keyboard lock is active and requires the user to press and // hold escape to exit exclusive access mode. bool IsPressAndHoldEscRequiredToExitFullscreen() const; diff --git a/patches/chrome-browser-resources-bookmarks-bookmarks.html.patch b/patches/chrome-browser-resources-bookmarks-bookmarks.html.patch index 39ff82df906..8b0bff57b51 100644 --- a/patches/chrome-browser-resources-bookmarks-bookmarks.html.patch +++ b/patches/chrome-browser-resources-bookmarks-bookmarks.html.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/resources/bookmarks/bookmarks.html b/chrome/browser/resources/bookmarks/bookmarks.html -index b91e6202e695f7347963e1c0dbee0cea46622c62..47978779a4b4cf27b7715276fc068a6163d926df 100644 +index 077405e88cd2b5da78714c900d9d4e392981192e..0698a3fcee0f240fe9dc870292f2e4af7f4cd9d1 100644 --- a/chrome/browser/resources/bookmarks/bookmarks.html +++ b/chrome/browser/resources/bookmarks/bookmarks.html -@@ -28,6 +28,7 @@ +@@ -27,6 +27,7 @@ height: var(--md-toolbar-height); } diff --git a/patches/chrome-browser-resources-bookmarks-toolbar.html.patch b/patches/chrome-browser-resources-bookmarks-toolbar.html.patch index 520934e3907..c2a8715fe24 100644 --- a/patches/chrome-browser-resources-bookmarks-toolbar.html.patch +++ b/patches/chrome-browser-resources-bookmarks-toolbar.html.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/resources/bookmarks/toolbar.html b/chrome/browser/resources/bookmarks/toolbar.html -index 989db07d3c1f7a2ca97044590b04b02ebd86cb1a..cc5bb8387bd51505e7ea39fb4372a7a17b7d5594 100644 +index d008a5ae9a74c9c97d61dd3ec9540baa226d75b2..c430495b1a9501c3730a3a499663b202968c88f1 100644 --- a/chrome/browser/resources/bookmarks/toolbar.html +++ b/chrome/browser/resources/bookmarks/toolbar.html @@ -1,7 +1,7 @@ diff --git a/patches/chrome-browser-resources-cryptotoken-enroller.js.patch b/patches/chrome-browser-resources-cryptotoken-enroller.js.patch deleted file mode 100644 index e8b89ecf44e..00000000000 --- a/patches/chrome-browser-resources-cryptotoken-enroller.js.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git a/chrome/browser/resources/cryptotoken/enroller.js b/chrome/browser/resources/cryptotoken/enroller.js -index 239721a39805f4845f200a2ec5f0ff09fdee0f3e..829476d48cb0e9dba3bb419087998b323fe81f4f 100644 ---- a/chrome/browser/resources/cryptotoken/enroller.js -+++ b/chrome/browser/resources/cryptotoken/enroller.js -@@ -111,15 +111,7 @@ async function makeCertAndKey(opt_original) { - if (opt_original) { - transport = transportType(opt_original); - } -- if (transport !== null) { -- if (transport.length != 2) { -- throw Error('bad extension length'); -- } -- if (transport[0] < 3) { -- throw Error('too many bits set'); // Only 5 bits are defined. -- } -- } -- -+ - const keyalg = {name: 'ECDSA', namedCurve: 'P-256'}; - const keypair = - await crypto.subtle.generateKey(keyalg, true, ['sign', 'verify']); diff --git a/patches/chrome-browser-resources-downloads-downloads.html.patch b/patches/chrome-browser-resources-downloads-downloads.html.patch index bcbcf36b97d..ab14a6e1ede 100644 --- a/patches/chrome-browser-resources-downloads-downloads.html.patch +++ b/patches/chrome-browser-resources-downloads-downloads.html.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/resources/downloads/downloads.html b/chrome/browser/resources/downloads/downloads.html -index 05a625d0f349264f13bd98fff32984db56aadd2c..1ad650ef5011f79ebf6591ade055338a51a791d1 100644 +index ad88272334d24e2f60327ae30ab1d412a42a6351..43b6993c81b82d814f900d9d06baf6082ba0dd98 100644 --- a/chrome/browser/resources/downloads/downloads.html +++ b/chrome/browser/resources/downloads/downloads.html -@@ -8,6 +8,7 @@ +@@ -7,6 +7,7 @@ $i18n{title} diff --git a/patches/chrome-browser-resources-downloads-manager.html.patch b/patches/chrome-browser-resources-downloads-manager.html.patch index 1a648da2119..f337da16a1d 100644 --- a/patches/chrome-browser-resources-downloads-manager.html.patch +++ b/patches/chrome-browser-resources-downloads-manager.html.patch @@ -1,13 +1,13 @@ diff --git a/chrome/browser/resources/downloads/manager.html b/chrome/browser/resources/downloads/manager.html -index 015710be621743fbc082460a4203b67d8d76372c..8cae2e6f282e558e087a3b60f0a9a84fe9bc1ba8 100644 +index 3415eceeeb53203260a6b9c1d20e96f38dd2c55e..f05a3eabcb4e3f3ba88678880de9eb101f505d70 100644 --- a/chrome/browser/resources/downloads/manager.html +++ b/chrome/browser/resources/downloads/manager.html -@@ -20,7 +20,7 @@ +@@ -22,7 +22,7 @@ @@ -95,10 +97,12 @@ padding: 30px !important; } - :host-context([dark]) { - --settings-nav-item-color: #F4F4F4 !important; - border-color: transparent !important; - background-color: #161719; + @media (prefers-color-scheme: dark) { + :host { + --settings-nav-item-color: #F4F4F4 !important; + border-color: transparent !important; + background-color: #161719; + } } a[href] { @@ -123,8 +127,10 @@ height: 20px; } - :host-context([dark]) a[href].iron-selected iron-icon { - color: var(--settings-nav-item-color) !important; + @media (prefers-color-scheme: dark) { + a[href].iron-selected iron-icon { + color: var(--settings-nav-item-color) !important; + } } a[href], diff --git a/ui/webui/resources/br_elements/br_toolbar/br_toolbar.html b/ui/webui/resources/br_elements/br_toolbar/br_toolbar.html index 5be97f94420..36b2c1d7748 100644 --- a/ui/webui/resources/br_elements/br_toolbar/br_toolbar.html +++ b/ui/webui/resources/br_elements/br_toolbar/br_toolbar.html @@ -99,9 +99,11 @@ padding: 5px; color: #222; } - :host-context([dark]) .toolbar-extra.-slot-filled { - background: #444; - color: #dde1e2; + @media (prefers-color-scheme: dark) { + .toolbar-extra.-slot-filled { + background: #444; + color: #dde1e2; + } } diff --git a/ui/webui/resources/br_elements/shared_vars_css.html b/ui/webui/resources/br_elements/shared_vars_css.html index 36216fbd138..90ff89625a2 100644 --- a/ui/webui/resources/br_elements/shared_vars_css.html +++ b/ui/webui/resources/br_elements/shared_vars_css.html @@ -22,9 +22,11 @@ --cr-card-elevation_-_box-shadow: 0 !important; --cr-card-border-radius: 4px !important; } - html[dark] { - --cr-primary-text-color: #F4F4F4 !important; - --cr-secondary-text_-_color: #AEB1C2 !important; + @media (prefers-color-scheme: dark) { + html { + --cr-primary-text-color: #F4F4F4 !important; + --cr-secondary-text_-_color: #AEB1C2 !important; + } } diff --git a/ui/webui/resources/css/md_colors.css b/ui/webui/resources/css/md_colors.css index d343ce458ae..4f6d16e9c17 100644 --- a/ui/webui/resources/css/md_colors.css +++ b/ui/webui/resources/css/md_colors.css @@ -1,5 +1,4 @@ -html, -html[dark] { +html { --brave-toolbar-gradient: linear-gradient(-90deg, #A3278F 0%, #E52F50 100%); /* linear gradient: red500 -> magenta600 */ --md-background-color: rgb(233, 236, 239); /* neutral200 */ --md-loading-message-color: #5E6175; /* grey700 */ @@ -7,7 +6,9 @@ html[dark] { /* --md-toolbar-color: linear-gradient(to left, #b10e95, #e72f4e) !important; */ } -html[dark] { - --md-background-color: rgb(30, 32, 41); /* grey900 */ - --md-loading-message-color: #C2C4CF; /* grey400 */ +@media (prefers-color-scheme: dark) { + html { + --md-background-color: rgb(30, 32, 41); /* grey900 */ + --md-loading-message-color: #C2C4CF; /* grey400 */ + } } From 24a9ffddbbd0772c8fa4c9f1c373afe784a17ccc Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Fri, 23 Aug 2019 17:00:11 -0400 Subject: [PATCH 38/63] Disable kLookalikeUrlNavigationSuggestionsUI It used to be disabled by default, but enabled by experiments, so we explicitly disabled it. When we got rid of experiments we removed the explicit disablement as it was just disabled by default. Now Chromium flipped it to be enabled by default, so we need to explicitly disable it again. Removed from being explicitly disabled by us in this commit: commit 78c8700 Author: Pranjal Jumde Date: Tue May 21 00:04:17 2019 -0700 Issue 4552: Restore features to correct state after disabling field trials Chromium change: https://chromium.googlesource.com/chromium/src/+/0a4ecf746ae7ffb2659ae2857a730ea17c68f754 commit 0a4ecf746ae7ffb2659ae2857a730ea17c68f754 Author: Mustafa Emre Acer Date: Wed Jun 26 23:29:50 2019 +0000 Enable Lookalike URLs interstitial by default This CL enables the interstitial by default for lookalike domains in user's navigation history (i.e. site engagement). Matching with top domains is controlled by the topsites parameter. --- app/brave_main_delegate.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/app/brave_main_delegate.cc b/app/brave_main_delegate.cc index 4d8f64ceea5..79c2c5dd19f 100644 --- a/app/brave_main_delegate.cc +++ b/app/brave_main_delegate.cc @@ -158,6 +158,7 @@ bool BraveMainDelegate::BasicStartupComplete(int* exit_code) { // Disabled features. const std::unordered_set disabled_features = { autofill::features::kAutofillServerCommunication.name, + features::kLookalikeUrlNavigationSuggestionsUI.name, unified_consent::kUnifiedConsent.name, }; command_line.AppendFeatures(enabled_features, disabled_features); From 508e825bcd47a53e49b5e89715caf7288d56fec9 Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Mon, 26 Aug 2019 14:21:09 -0400 Subject: [PATCH 39/63] Fixes BraveRequestInfo::tab_origin. We populate this field from `network::ResourceRequest`s `top_frame_origin`, but it is being phased out in favor of `net::NetworkIsolationKey`. The transition has not fully completed yet, so in some cases `top_frame_origin` is populated while in others `trusted_network_isolation_key` is. cc: @iefremov Chromium change: https://chromium.googlesource.com/chromium/src/+/1b5366c62c02fd6edfe83703e57e4fcd14d38f64 commit 1b5366c62c02fd6edfe83703e57e4fcd14d38f64 Author: Shivani Sharma Date: Tue Jul 16 20:08:13 2019 +0000 Split cache: Network Isolation key for navigation resources Adds network isolation key in the ResourceRequest for navigations to be propagated to net::URLRequest. The key is also updated for redirects. Updates NavigationRequestInfo to have a network isolation key as a member instead of top frame origin. Also updated the corresponding intercepting browser tests in navigation_browsertest. Added browser tests to verify if the navigation resources (both main frame and sub frame) are expected to be cached including the redirect use case. Also removing the code in url_request_http_job.cc that was using top frame origin to create NIK if it was not already populated. This is because with this change we would have NIK being created in browser process for subresources, navigation resources and dedicated worker resources which were earlier using the top frame origin. (Note that sub-resources URL requests do not use this path and have their network isolation key filled up in the URLLoaderFactory). Bug: 984130 --- browser/net/url_context.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/browser/net/url_context.cc b/browser/net/url_context.cc index f9a98dd0c17..3e0cc0fe88c 100644 --- a/browser/net/url_context.cc +++ b/browser/net/url_context.cc @@ -184,7 +184,17 @@ void BraveRequestInfo::FillCTX( // ctx->tab_url = request.top_frame_origin; // TODO(iefremov): Replace with NetworkIsolationKey when it is available // in ResourceRequest - ctx->tab_origin = request.top_frame_origin.value_or(url::Origin()).GetURL(); + // TODO(iefremov): c77 - navigation doesn't populate top_frame_origin any more + // and uses NetworkIsolationKey instead. According to + // services/network/public/mojom/url_loader.mojom, this field "will most + // likely be removed at some point". + if (base::nullopt != request.top_frame_origin) { + ctx->tab_origin = request.top_frame_origin->GetURL(); + } else { + ctx->tab_origin = request.trusted_network_isolation_key.GetTopFrameOrigin() + .value_or(url::Origin()) + .GetURL(); + } // TODO(iefremov): We still need this for WebSockets, currently // |AddChannelRequest| provides only old-fashioned |site_for_cookies|. // (See |BraveProxyingWebSocket|). From 7bc4c2a477d0e360b00864b98cdc23b77153dcca Mon Sep 17 00:00:00 2001 From: Simon Hong Date: Tue, 27 Aug 2019 15:09:43 -0400 Subject: [PATCH 40/63] Fixes theme changing. This commit is a squash of 4 commits from brave/brave-core#3281. - Fix setting preferred color scheme logic for brave theme change - Fix system dark mode change affect brave theme on Win10 When brave theme is set to dark or light, system dark mode change should not affect brave theme. - CleanUp: Delete SystemThemeSupportDarkMode Upstream added ui::NativeTheme::SystemDarkModeSupported(). Replace ours with upstream one. - Add dark mode change test by modifying reg value for Windows This test can verify whether theme change notification is delivered or not. If brave theme option is not default, system dark theme change should not trigger theme change notificagtion delivery. Chromium change: https://chromium.googlesource.com/chromium/src/+/67fd4d9f35650a079f6a636b5d19de77856bd2cf commit 67fd4d9f35650a079f6a636b5d19de77856bd2cf Author: Alison Maher Date: Fri Jul 12 18:34:21 2019 +0000 Set preferred color scheme for high contrast This change adds logic to update the preferred color scheme based on the OS high contrast theme. If high contrast is not enabled, preferred color scheme will continue to be based on the OS dark mode state. A PreferredColorScheme enum was added to NativeTheme to keep track of the current high contrast/dark mode preferred color scheme. The updated preferred color scheme is used to evaluate the prefers-color-scheme media query. Bug: 970285 --- browser/themes/BUILD.gn | 3 +- browser/themes/brave_theme_service.cc | 13 +++- .../themes/brave_theme_service_browsertest.cc | 78 ++++++++++++++++++- browser/themes/brave_theme_utils.cc | 34 ++++---- browser/themes/brave_theme_utils.h | 19 +++-- browser/themes/brave_theme_utils_internal.cc | 28 +++++++ browser/themes/brave_theme_utils_internal.h | 18 +++++ browser/themes/brave_theme_utils_mac.mm | 14 +--- browser/themes/brave_theme_utils_win.cc | 25 ------ .../browser/chrome_content_browser_client.cc | 15 ++-- chromium_src/ui/native_theme/native_theme.h | 17 ++++ .../ui/native_theme/native_theme_win.cc | 23 ++++++ .../ui/native_theme/native_theme_win.h | 25 ++++++ patches/ui-native_theme-native_theme.h.patch | 10 +-- .../ui-native_theme-native_theme_win.cc.patch | 12 +++ .../ui-native_theme-native_theme_win.h.patch | 8 +- 16 files changed, 261 insertions(+), 81 deletions(-) create mode 100644 browser/themes/brave_theme_utils_internal.cc create mode 100644 browser/themes/brave_theme_utils_internal.h delete mode 100644 browser/themes/brave_theme_utils_win.cc create mode 100644 chromium_src/ui/native_theme/native_theme.h create mode 100644 chromium_src/ui/native_theme/native_theme_win.cc create mode 100644 chromium_src/ui/native_theme/native_theme_win.h create mode 100644 patches/ui-native_theme-native_theme_win.cc.patch diff --git a/browser/themes/BUILD.gn b/browser/themes/BUILD.gn index 0b4289799e2..6034e5ddd3f 100644 --- a/browser/themes/BUILD.gn +++ b/browser/themes/BUILD.gn @@ -7,8 +7,9 @@ source_set("themes") { "brave_theme_service_win.h", "brave_theme_utils.cc", "brave_theme_utils.h", + "brave_theme_utils_internal.cc", + "brave_theme_utils_internal.h", "brave_theme_utils_mac.mm", - "brave_theme_utils_win.cc", "theme_properties.cc", "theme_properties.h", ] diff --git a/browser/themes/brave_theme_service.cc b/browser/themes/brave_theme_service.cc index 96da4412099..cfec15a0665 100644 --- a/browser/themes/brave_theme_service.cc +++ b/browser/themes/brave_theme_service.cc @@ -180,6 +180,11 @@ void BraveThemeService::Init(Profile* profile) { if (brave::IsTorProfile(profile) || brave::IsGuestProfile(profile)) return; +#if defined(OS_WIN) + ui::IgnoreSystemDarkModeChange( + profile->GetPrefs()->GetInteger(kBraveThemeType) != + BraveThemeType::BRAVE_THEME_TYPE_DEFAULT); +#endif // Start with proper system theme to make brave theme and // base ui components theme use same theme. SetSystemTheme(static_cast( @@ -224,6 +229,12 @@ void BraveThemeService::OnPreferenceChanged(const std::string& pref_name) { // Changing theme type means default theme is not overridden anymore. profile()->GetPrefs()->SetBoolean(kUseOverriddenBraveThemeType, false); +#if defined(OS_WIN) + ui::IgnoreSystemDarkModeChange( + profile()->GetPrefs()->GetInteger(kBraveThemeType) != + BraveThemeType::BRAVE_THEME_TYPE_DEFAULT); +#endif + SetSystemTheme(static_cast( profile()->GetPrefs()->GetInteger(kBraveThemeType))); } @@ -266,5 +277,5 @@ bool BraveThemeService::SystemThemeModeEnabled() { switches::kForceDarkMode)) return true; - return SystemThemeSupportDarkMode(); + return ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeSupported(); } diff --git a/browser/themes/brave_theme_service_browsertest.cc b/browser/themes/brave_theme_service_browsertest.cc index a7be35e92d6..ea5dab8928b 100644 --- a/browser/themes/brave_theme_service_browsertest.cc +++ b/browser/themes/brave_theme_service_browsertest.cc @@ -18,6 +18,12 @@ #include "ui/native_theme/native_theme_dark_aura.h" #include "ui/native_theme/native_theme_observer.h" +#if defined(OS_WIN) +#include "base/run_loop.h" +#include "base/time/time.h" +#include "base/win/registry.h" +#endif + using BraveThemeServiceTest = InProcessBrowserTest; using BTS = BraveThemeService; @@ -94,9 +100,9 @@ IN_PROC_BROWSER_TEST_F(BraveThemeServiceTestWithoutSystemTheme, tp_private.GetColor(test_theme_property)); } -// Test whether appropriate native theme observer is called when brave theme is -// changed. -IN_PROC_BROWSER_TEST_F(BraveThemeServiceTest, NativeThemeObserverTest) { +// Test whether appropriate native/web theme observer is called when brave theme +// is changed. +IN_PROC_BROWSER_TEST_F(BraveThemeServiceTest, ThemeObserverTest) { Profile* profile = browser()->profile(); // Initially set to light. SetBraveThemeType(profile, BraveThemeType::BRAVE_THEME_TYPE_LIGHT); @@ -107,10 +113,17 @@ IN_PROC_BROWSER_TEST_F(BraveThemeServiceTest, NativeThemeObserverTest) { EXPECT_CALL( native_theme_observer, OnNativeThemeUpdated(ui::NativeTheme::GetInstanceForNativeUi())).Times(2); - ui::NativeTheme::GetInstanceForNativeUi()->AddObserver( &native_theme_observer); + TestNativeThemeObserver web_theme_observer; + EXPECT_CALL( + web_theme_observer, + OnNativeThemeUpdated(ui::NativeTheme::GetInstanceForWeb())).Times(2); + + ui::NativeTheme::GetInstanceForWeb()->AddObserver( + &web_theme_observer); + SetBraveThemeType(profile, BraveThemeType::BRAVE_THEME_TYPE_DARK); SetBraveThemeType(profile, BraveThemeType::BRAVE_THEME_TYPE_LIGHT); } @@ -140,3 +153,60 @@ IN_PROC_BROWSER_TEST_F(BraveThemeServiceTest, SystemThemeChangeTest) { ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeEnabled()); } } + +#if defined(OS_WIN) +// Test native theme notification is called properly by changing reg value. +// This simulates dark mode setting from Windows settings. +// And Toggle it twice from initial value to go back to initial value because +// reg value changes system value. Otherwise, dark mode config could be changed +// after running this test. +IN_PROC_BROWSER_TEST_F(BraveThemeServiceTest, DarkModeChangeByRegTest) { + if (!ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeSupported()) + return; + + base::win::RegKey hkcu_themes_regkey; + bool key_open_succeeded = hkcu_themes_regkey.Open( + HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\" + L"Themes\\Personalize", + KEY_WRITE) == ERROR_SUCCESS; + DCHECK(key_open_succeeded); + + DWORD apps_use_light_theme = 1; + hkcu_themes_regkey.ReadValueDW(L"AppsUseLightTheme", + &apps_use_light_theme); + const bool initial_dark_mode = apps_use_light_theme == 0; + + // Toggle dark mode and check get notification for default type (same as...). + auto* profile = browser()->profile(); + SetBraveThemeType(profile, BraveThemeType::BRAVE_THEME_TYPE_DEFAULT); + + apps_use_light_theme = !initial_dark_mode ? 0 : 1; + hkcu_themes_regkey.WriteValue(L"AppsUseLightTheme", apps_use_light_theme); + + TestNativeThemeObserver native_theme_observer_for_default; + EXPECT_CALL( + native_theme_observer_for_default, + OnNativeThemeUpdated(ui::NativeTheme::GetInstanceForNativeUi())).Times(1); + ui::NativeTheme::GetInstanceForNativeUi()->AddObserver( + &native_theme_observer_for_default); + + // Toggle dark mode and |native_theme_observer_for_light| will not get + // notification for light type. + SetBraveThemeType(profile, BraveThemeType::BRAVE_THEME_TYPE_LIGHT); + + TestNativeThemeObserver native_theme_observer_for_light; + EXPECT_CALL( + native_theme_observer_for_light, + OnNativeThemeUpdated(ui::NativeTheme::GetInstanceForNativeUi())).Times(0); + ui::NativeTheme::GetInstanceForNativeUi()->AddObserver( + &native_theme_observer_for_light); + + apps_use_light_theme = initial_dark_mode ? 0 : 1; + hkcu_themes_regkey.WriteValue(L"AppsUseLightTheme", apps_use_light_theme); + + // Timeout is used because we can't get notifiication with light theme. + base::RunLoop run_loop; + run_loop.RunWithTimeout(base::TimeDelta::FromMilliseconds(500));; +} +#endif diff --git a/browser/themes/brave_theme_utils.cc b/browser/themes/brave_theme_utils.cc index dd6b57623dc..585e2cf602f 100644 --- a/browser/themes/brave_theme_utils.cc +++ b/browser/themes/brave_theme_utils.cc @@ -5,6 +5,7 @@ #include "brave/browser/themes/brave_theme_utils.h" +#include "brave/browser/themes/brave_theme_utils_internal.h" #include "ui/native_theme/native_theme.h" #if defined(OS_WIN) @@ -12,9 +13,19 @@ #endif namespace ui { -void SetDarkMode(bool dark_mode) { - ui::NativeTheme::GetInstanceForNativeUi()->set_dark_mode(dark_mode); -} // namespace ui +// static +void BraveThemeUtils::SetDarkMode(bool dark_mode) { + NativeTheme::GetInstanceForNativeUi()->set_dark_mode(dark_mode); + NativeTheme::GetInstanceForWeb()->set_dark_mode(dark_mode); +} + +// static +void BraveThemeUtils::ReCalcAndSetPreferredColorScheme() { + auto scheme = + NativeTheme::GetInstanceForNativeUi()->CalculatePreferredColorScheme(); + NativeTheme::GetInstanceForNativeUi()->set_preferred_color_scheme(scheme); + NativeTheme::GetInstanceForWeb()->set_preferred_color_scheme(scheme); +} #if defined(OS_WIN) // This resets dark mode to os theme when user changes brave theme from @@ -33,7 +44,9 @@ void SetSystemTheme(BraveThemeType type) { // Follow os theme type for default type. if (type == BraveThemeType::BRAVE_THEME_TYPE_DEFAULT) { #if defined(OS_WIN) - DCHECK(SystemThemeSupportDarkMode()); + DCHECK( + ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeSupported()); + // This sets preferred color scheme on its own. ui::UpdateDarkModeStatus(); return; #else @@ -42,17 +55,6 @@ void SetSystemTheme(BraveThemeType type) { NOTREACHED(); #endif } - - ui::SetDarkMode(type == BraveThemeType::BRAVE_THEME_TYPE_DARK); - // Have to notify to observer explicitly because |ui::SetDarkMode()| just - // set ui::NativeTheme:dark_mode_ value. - ui::NativeTheme::GetInstanceForNativeUi()->NotifyObservers(); -} -#endif - -#if defined(OS_LINUX) -bool SystemThemeSupportDarkMode() { - // Linux doesn't support dark mode yet. - return false; + internal::SetSystemThemeForNonDarkModePlatform(type); } #endif diff --git a/browser/themes/brave_theme_utils.h b/browser/themes/brave_theme_utils.h index ee2ee1e08cb..28f29c82ec8 100644 --- a/browser/themes/brave_theme_utils.h +++ b/browser/themes/brave_theme_utils.h @@ -8,8 +8,6 @@ #include "brave/browser/themes/brave_theme_service.h" -bool SystemThemeSupportDarkMode(); - // When system supports system per-application system theme changing, set it. // Currently, only MacOS support it. // Otherewise, we need to overrides from native theme level and explicitly @@ -18,13 +16,18 @@ bool SystemThemeSupportDarkMode(); void SetSystemTheme(BraveThemeType type); // Inserted in the ui namespace to add into ui::NativeTheme/NativeThemeWin as a -// friend function. This function calls protected/private method of -// ui::NativeTheme::set_dark_mode(). It's a protected method that called by -// platform specific subclasses whenever system os theme is changed. -// But we want to change it for using brave theme also for webui/base ui -// modules like context menu. +// friend class. These methods call protected methods of ui::NativeTheme. They +// are protected methods that called by platform specific subclasses whenever +// system os theme is changed. But we want to change it for using brave theme +// also for webui/base ui modules like context menu. namespace ui { -void SetDarkMode(bool dark_mode); +class BraveThemeUtils { + public: + static void SetDarkMode(bool dark_mode); + // Recalculate preferred color scheme based on current dark mode that set by + // SetDarkMode() and set it to NativeTheme. + static void ReCalcAndSetPreferredColorScheme(); +}; } // namespace ui #endif // BRAVE_BROWSER_THEMES_BRAVE_THEME_UTILS_H_ diff --git a/browser/themes/brave_theme_utils_internal.cc b/browser/themes/brave_theme_utils_internal.cc new file mode 100644 index 00000000000..5019587eab0 --- /dev/null +++ b/browser/themes/brave_theme_utils_internal.cc @@ -0,0 +1,28 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "brave/browser/themes/brave_theme_utils.h" + +#include "ui/native_theme/native_theme.h" + +namespace internal { + +void SetSystemThemeForNonDarkModePlatform(BraveThemeType type) { + // Call SetDarkMode() first then call ReCalcPreferredColorScheme() because + // ReCalcPreferredColorScheme() calculates preferred color scheme based on dark + // mode. + ui::BraveThemeUtils::SetDarkMode(type == + BraveThemeType::BRAVE_THEME_TYPE_DARK); + ui::BraveThemeUtils::ReCalcAndSetPreferredColorScheme(); + // Have to notify observers explicitly because + // |ui::BraveThemeUtils::SetDarkMode()| and + // |ui::BraveThemeUtils::ReCalcPreferredColorScheme| just set + // ui::NativeTheme:dark_mode_ and ui::NativeTheme:preferred_color_scheme_ + // values. + ui::NativeTheme::GetInstanceForNativeUi()->NotifyObservers(); + ui::NativeTheme::GetInstanceForWeb()->NotifyObservers(); +} + +} // namespace internal diff --git a/browser/themes/brave_theme_utils_internal.h b/browser/themes/brave_theme_utils_internal.h new file mode 100644 index 00000000000..4319102f242 --- /dev/null +++ b/browser/themes/brave_theme_utils_internal.h @@ -0,0 +1,18 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef BRAVE_BROWSER_THEMES_BRAVE_THEME_UTILS_INTERNAL_H_ +#define BRAVE_BROWSER_THEMES_BRAVE_THEME_UTILS_INTERNAL_H_ + +#include "brave/browser/themes/brave_theme_service.h" + +namespace internal { + +// Reset dark mode and preferred color scheme and notify. +void SetSystemThemeForNonDarkModePlatform(BraveThemeType type); + +} // namespace internal + +#endif // BRAVE_BROWSER_THEMES_BRAVE_THEME_UTILS_INTERNAL_H_ diff --git a/browser/themes/brave_theme_utils_mac.mm b/browser/themes/brave_theme_utils_mac.mm index 1f905dcd9a8..82f8f7a96cf 100644 --- a/browser/themes/brave_theme_utils_mac.mm +++ b/browser/themes/brave_theme_utils_mac.mm @@ -8,18 +8,13 @@ #import #include "base/mac/sdk_forward_declarations.h" +#include "brave/browser/themes/brave_theme_utils_internal.h" #include "ui/native_theme/native_theme.h" -bool SystemThemeSupportDarkMode() { - // Dark mode is supported since Mojave. - if (@available(macOS 10.14, *)) - return true; - return false; -} - void SetSystemTheme(BraveThemeType type) { if (type == BRAVE_THEME_TYPE_DEFAULT) { - DCHECK(SystemThemeSupportDarkMode()); + DCHECK( + ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeSupported()); [NSApp setAppearance:nil]; return; } @@ -30,7 +25,6 @@ void SetSystemTheme(BraveThemeType type) { : NSAppearanceNameAqua; [NSApp setAppearance:[NSAppearance appearanceNamed:new_appearance_name]]; } else { - ui::SetDarkMode(type == BraveThemeType::BRAVE_THEME_TYPE_DARK); - ui::NativeTheme::GetInstanceForNativeUi()->NotifyObservers(); + internal::SetSystemThemeForNonDarkModePlatform(type); } } diff --git a/browser/themes/brave_theme_utils_win.cc b/browser/themes/brave_theme_utils_win.cc deleted file mode 100644 index 37cda8d51b0..00000000000 --- a/browser/themes/brave_theme_utils_win.cc +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (c) 2019 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "brave/browser/themes/brave_theme_utils.h" - -#include - -#include "base/win/registry.h" - -// Copied from ctor of NativeThemeWin. -bool SystemThemeSupportDarkMode() { - // Dark Mode currently targets UWP apps, which means Win32 apps need to use - // alternate, less reliable means of detecting the state. The following - // can break in future Windows versions. - base::win::RegKey hkcu_themes_regkey; - bool key_open_succeeded = - hkcu_themes_regkey.Open( - HKEY_CURRENT_USER, - L"Software\\Microsoft\\Windows\\CurrentVersion\\" - L"Themes\\Personalize", - KEY_READ | KEY_NOTIFY) == ERROR_SUCCESS; - return key_open_succeeded; -} diff --git a/chromium_src/chrome/browser/chrome_content_browser_client.cc b/chromium_src/chrome/browser/chrome_content_browser_client.cc index 8cc6efca11b..8a7ec7c4d8a 100644 --- a/chromium_src/chrome/browser/chrome_content_browser_client.cc +++ b/chromium_src/chrome/browser/chrome_content_browser_client.cc @@ -22,19 +22,20 @@ #if defined(OS_LINUX) #include "brave/browser/ui/views/brave_browser_main_extra_parts_views_linux.h" -#define ChromeBrowserMainExtraPartsViewsLinux BraveBrowserMainExtraPartsViewsLinux // NOLINT +#define ChromeBrowserMainExtraPartsViewsLinux \ + BraveBrowserMainExtraPartsViewsLinux // NOLINT #endif #define HandleNewTabURLRewrite HandleNewTabURLRewrite_ChromiumImpl #define HandleNewTabURLReverseRewrite HandleNewTabURLReverseRewrite_ChromiumImpl namespace search { - bool HandleNewTabURLRewrite(GURL * url, content::BrowserContext * bc) { - return false; - } - bool HandleNewTabURLReverseRewrite(GURL * url, content::BrowserContext * bc) { - return false; - } +bool HandleNewTabURLRewrite(GURL* url, content::BrowserContext* bc) { + return false; +} +bool HandleNewTabURLReverseRewrite(GURL* url, content::BrowserContext* bc) { + return false; +} } // namespace search #include "../../../../chrome/browser/chrome_content_browser_client.cc" // NOLINT diff --git a/chromium_src/ui/native_theme/native_theme.h b/chromium_src/ui/native_theme/native_theme.h new file mode 100644 index 00000000000..b77c1694327 --- /dev/null +++ b/chromium_src/ui/native_theme/native_theme.h @@ -0,0 +1,17 @@ +// Copyright (c) 2019 The Brave Authors +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// you can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef BRAVE_CHROMIUM_SRC_UI_NATIVE_THEME_NATIVE_THEME_H_ +#define BRAVE_CHROMIUM_SRC_UI_NATIVE_THEME_NATIVE_THEME_H_ + +namespace ui { +class BraveThemeUtils; +} // namespace ui + +#define BRAVE_UI_NATIVE_THEME_NATIVE_THEME_H_ friend class ui::BraveThemeUtils; +#include "../../../../ui/native_theme/native_theme.h" +#undef BRAVE_UI_NATIVE_THEME_NATIVE_THEME_H_ + +#endif // BRAVE_CHROMIUM_SRC_UI_NATIVE_THEME_NATIVE_THEME_H_ diff --git a/chromium_src/ui/native_theme/native_theme_win.cc b/chromium_src/ui/native_theme/native_theme_win.cc new file mode 100644 index 00000000000..70479b6972c --- /dev/null +++ b/chromium_src/ui/native_theme/native_theme_win.cc @@ -0,0 +1,23 @@ +// Copyright (c) 2019 The Brave Authors +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// you can obtain one at http://mozilla.org/MPL/2.0/. + +namespace { +bool s_ignore_system_dark_mode_change = false; +} // namespace + +#define BRAVE_NATIVETHEMEWIN_UPDATEDARKMODESTATUS \ + if (s_ignore_system_dark_mode_change) { \ + return; \ + } + +#include "../../../../ui/native_theme/native_theme_win.cc" // NOLINT + +namespace ui { + +void NATIVE_THEME_EXPORT IgnoreSystemDarkModeChange(bool ignore) { + s_ignore_system_dark_mode_change = ignore; +} + +} // namespace ui diff --git a/chromium_src/ui/native_theme/native_theme_win.h b/chromium_src/ui/native_theme/native_theme_win.h new file mode 100644 index 00000000000..a2f4c20e348 --- /dev/null +++ b/chromium_src/ui/native_theme/native_theme_win.h @@ -0,0 +1,25 @@ +// Copyright (c) 2019 The Brave Authors +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// you can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef BRAVE_CHROMIUM_SRC_UI_NATIVE_THEME_NATIVE_THEME_WIN_H_ +#define BRAVE_CHROMIUM_SRC_UI_NATIVE_THEME_NATIVE_THEME_WIN_H_ + +#define BRAVE_UI_NATIVE_THEME_NATIVE_THEME_WIN_H_ \ + private: \ + friend void UpdateDarkModeStatus(); + +#include "../../../../ui/native_theme/native_theme_win.h" // NOLINT +#undef BRAVE_UI_NATIVE_THEME_NATIVE_THEME_WIN_H_ + +namespace ui { + +// Set true when browser should not response to system theme change. +// If user set dark or light explicitly, browser should ignore system dark mode +// setting. +void NATIVE_THEME_EXPORT IgnoreSystemDarkModeChange(bool ignore); + +} // namespace ui + +#endif // BRAVE_CHROMIUM_SRC_UI_NATIVE_THEME_NATIVE_THEME_WIN_H_ diff --git a/patches/ui-native_theme-native_theme.h.patch b/patches/ui-native_theme-native_theme.h.patch index f9c5e191d43..66c0d326eb0 100644 --- a/patches/ui-native_theme-native_theme.h.patch +++ b/patches/ui-native_theme-native_theme.h.patch @@ -1,12 +1,12 @@ diff --git a/ui/native_theme/native_theme.h b/ui/native_theme/native_theme.h -index 97ced9d2495c33aad710d8ec5208b8107cd94ed9..c9760db651c897b6dfdaee11dc7ad44d3180c2b1 100644 +index 97ced9d2495c33aad710d8ec5208b8107cd94ed9..406189f160f7155b7348d22fd15968da8404ec81 100644 --- a/ui/native_theme/native_theme.h +++ b/ui/native_theme/native_theme.h -@@ -430,6 +430,7 @@ class NATIVE_THEME_EXPORT NativeTheme { +@@ -428,6 +428,7 @@ class NATIVE_THEME_EXPORT NativeTheme { + + // Returns the system's caption style. virtual base::Optional GetSystemCaptionStyle() const; ++ BRAVE_UI_NATIVE_THEME_NATIVE_THEME_H_ protected: -+ friend void SetDarkMode(bool dark_mode); NativeTheme(); - virtual ~NativeTheme(); - diff --git a/patches/ui-native_theme-native_theme_win.cc.patch b/patches/ui-native_theme-native_theme_win.cc.patch new file mode 100644 index 00000000000..056971b8bf3 --- /dev/null +++ b/patches/ui-native_theme-native_theme_win.cc.patch @@ -0,0 +1,12 @@ +diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc +index c6a0c1b9775f9d7e7a9be15d6f15ce84acf68b68..b45ac3b51627589931e4adce0cea3b320c0c804e 100644 +--- a/ui/native_theme/native_theme_win.cc ++++ b/ui/native_theme/native_theme_win.cc +@@ -1964,6 +1964,7 @@ void NativeThemeWin::UpdateDarkModeStatus() { + &apps_use_light_theme); + fDarkModeEnabled = (apps_use_light_theme == 0); + } ++ BRAVE_NATIVETHEMEWIN_UPDATEDARKMODESTATUS + set_dark_mode(fDarkModeEnabled); + set_preferred_color_scheme(CalculatePreferredColorScheme()); + NotifyObservers(); diff --git a/patches/ui-native_theme-native_theme_win.h.patch b/patches/ui-native_theme-native_theme_win.h.patch index 26e5d2ff706..7b589d77da6 100644 --- a/patches/ui-native_theme-native_theme_win.h.patch +++ b/patches/ui-native_theme-native_theme_win.h.patch @@ -1,12 +1,12 @@ diff --git a/ui/native_theme/native_theme_win.h b/ui/native_theme/native_theme_win.h -index 03be75f99e3da8c29a8bc856da9e6f6ceea9af20..2b6aa17d081c90eadca6976a1370d32ace3250d7 100644 +index 03be75f99e3da8c29a8bc856da9e6f6ceea9af20..96221ee7f855cbb246d6427b17b95517c6894032 100644 --- a/ui/native_theme/native_theme_win.h +++ b/ui/native_theme/native_theme_win.h -@@ -85,6 +85,7 @@ class NATIVE_THEME_EXPORT NativeThemeWin : public NativeTheme, +@@ -84,6 +84,7 @@ class NATIVE_THEME_EXPORT NativeThemeWin : public NativeTheme, + bool SystemDarkModeSupported() const override; PreferredColorScheme CalculatePreferredColorScheme() const override; ++ BRAVE_UI_NATIVE_THEME_NATIVE_THEME_WIN_H_ protected: -+ friend void UpdateDarkModeStatus(); friend class NativeTheme; friend class base::NoDestructor; - // Gets our singleton instance. From 23ab28cae136aec65721cb9e235cf449f12a8fc7 Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Fri, 16 Aug 2019 15:12:11 -0400 Subject: [PATCH 41/63] Fixes password import from Chrome on Linux. Passwords are no longer stored using native backend. Switch to importing from LoginDatabase like on other platforms. Chromium change: commit 6811de35a39128fb354f238bce350f9a4a643e9d Author: Mohamed Amir Yosef Date: Thu Jul 25 22:26:26 2019 +0000 [PasswordManager] Stop Using Native Backends on Linux systems Recent migrations moved all users who have been using the keying to the LoginDatabase. This CL forces all users to using LoginDatabase instead of native backends on Linux. TBR=pcc@chromium.org Change-Id: Ibac11e68d8f354ecf7f3c9828d95777ea5b3df60 Bug: 950269, 950267 --- utility/BUILD.gn | 9 +- utility/importer/brave_importer.cc | 13 --- utility/importer/chrome_importer.cc | 127 +++++++--------------------- 3 files changed, 33 insertions(+), 116 deletions(-) diff --git a/utility/BUILD.gn b/utility/BUILD.gn index fc780d8e535..8293abe50a2 100644 --- a/utility/BUILD.gn +++ b/utility/BUILD.gn @@ -35,6 +35,9 @@ source_set("utility") { ] deps += [ + "//base", + "//chrome/app:chromium_strings", + "//components/os_crypt", "//components/password_manager/core/browser", ] } @@ -50,10 +53,4 @@ source_set("utility") { if (brave_rewards_enabled) { deps += [ "//brave/components/services/bat_ledger:lib" ] } - - defines = [] - if (use_glib) { - defines += [ "USE_LIBSECRET" ] - deps += [ "//third_party/libsecret" ] - } } diff --git a/utility/importer/brave_importer.cc b/utility/importer/brave_importer.cc index d6039031a28..ffda5851eda 100644 --- a/utility/importer/brave_importer.cc +++ b/utility/importer/brave_importer.cc @@ -39,19 +39,6 @@ #include "sql/statement.h" #include "url/gurl.h" -#if defined(OS_LINUX) -#include "components/os_crypt/key_storage_config_linux.h" -#endif - -#if defined(USE_X11) -#if defined(USE_LIBSECRET) -#include "chrome/browser/password_manager/native_backend_libsecret.h" -#endif -#include "chrome/browser/password_manager/native_backend_kwallet_x.h" -#include "chrome/browser/password_manager/password_store_x.h" -#include "components/os_crypt/key_storage_util_linux.h" -#endif - using base::Time; BraveImporter::BraveImporter() { diff --git a/utility/importer/chrome_importer.cc b/utility/importer/chrome_importer.cc index 2d039b709d7..95820b4ecff 100644 --- a/utility/importer/chrome_importer.cc +++ b/utility/importer/chrome_importer.cc @@ -39,21 +39,9 @@ #if defined(OS_LINUX) #include "components/os_crypt/key_storage_config_linux.h" -#endif - -#if defined(USE_X11) -#if defined(USE_LIBSECRET) -#include "chrome/browser/password_manager/native_backend_libsecret.h" -#endif -#include "chrome/browser/password_manager/native_backend_kwallet_x.h" -#include "chrome/browser/password_manager/password_store_x.h" -#include "components/os_crypt/key_storage_util_linux.h" - -base::nix::DesktopEnvironment ChromeImporter::GetDesktopEnvironment() { - std::unique_ptr env(base::Environment::Create()); - return base::nix::GetDesktopEnvironment(env.get()); -} -#endif +#include "chrome/grit/chromium_strings.h" +#include "ui/base/l10n/l10n_util.h" +#endif // defined(OS_LINUX) using base::Time; @@ -314,92 +302,37 @@ double ChromeImporter::chromeTimeToDouble(int64_t time) { } void ChromeImporter::ImportPasswords(const base::FilePath& prefs_filename) { - #if !defined(USE_X11) - base::FilePath passwords_path = - source_path_.Append( - base::FilePath::StringType(FILE_PATH_LITERAL("Login Data"))); - - password_manager::LoginDatabase database(passwords_path); - if (!database.Init()) { - LOG(ERROR) << "LoginDatabase Init() failed"; - return; - } +#if defined(OS_LINUX) + // Set up crypt config. + std::unique_ptr config(new os_crypt::Config()); + config->product_name = l10n_util::GetStringUTF8(IDS_PRODUCT_NAME); + config->should_use_preference = false; + config->user_data_path = source_path_; + OSCrypt::SetConfig(std::move(config)); +#endif + base::FilePath passwords_path = source_path_.Append( + base::FilePath::StringType(FILE_PATH_LITERAL("Login Data"))); - std::vector> forms; - bool success = database.GetAutofillableLogins(&forms); - if (success) { - for (size_t i = 0; i < forms.size(); ++i) { - bridge_->SetPasswordForm(*forms[i].get()); - } - } - std::vector> blacklist; - success = database.GetBlacklistLogins(&blacklist); - if (success) { - for (size_t i = 0; i < blacklist.size(); ++i) { - bridge_->SetPasswordForm(*blacklist[i].get()); - } - } - #else - base::FilePath prefs_path = source_path_.Append(prefs_filename); - const base::Value *value; - scoped_refptr prefs = new JsonPrefStore(prefs_path); - int local_profile_id; - if (prefs->ReadPrefs() != PersistentPrefStore::PREF_READ_ERROR_NONE) { - return; - } - if (!prefs->GetValue(password_manager::prefs::kLocalProfileId, &value)) { - return; - } - if (!value->GetAsInteger(&local_profile_id)) { - return; - } + password_manager::LoginDatabase database(passwords_path); + if (!database.Init()) { + LOG(ERROR) << "LoginDatabase Init() failed"; + return; + } - std::unique_ptr backend; - base::nix::DesktopEnvironment desktop_env = GetDesktopEnvironment(); - - // WIP proper kEnableEncryptionSelection - os_crypt::SelectedLinuxBackend selected_backend = - os_crypt::SelectBackend(std::string(), true, desktop_env); - if (!backend && - (selected_backend == os_crypt::SelectedLinuxBackend::KWALLET || - selected_backend == os_crypt::SelectedLinuxBackend::KWALLET5)) { - base::nix::DesktopEnvironment used_desktop_env = - selected_backend == os_crypt::SelectedLinuxBackend::KWALLET - ? base::nix::DESKTOP_ENVIRONMENT_KDE4 - : base::nix::DESKTOP_ENVIRONMENT_KDE5; - backend.reset(new NativeBackendKWallet(local_profile_id, - used_desktop_env)); - } else if (selected_backend == os_crypt::SelectedLinuxBackend::GNOME_ANY || - selected_backend == - os_crypt::SelectedLinuxBackend::GNOME_KEYRING || - selected_backend == - os_crypt::SelectedLinuxBackend::GNOME_LIBSECRET) { - #if defined(USE_LIBSECRET) - if (!backend && - (selected_backend == os_crypt::SelectedLinuxBackend::GNOME_ANY || - selected_backend == - os_crypt::SelectedLinuxBackend::GNOME_LIBSECRET)) { - backend.reset(new NativeBackendLibsecret(local_profile_id)); - } - #endif + std::vector> forms; + bool success = database.GetAutofillableLogins(&forms); + if (success) { + for (size_t i = 0; i < forms.size(); ++i) { + bridge_->SetPasswordForm(*forms[i].get()); } - if (backend && backend->Init()) { - std::vector> forms; - bool success = backend->GetAutofillableLogins(&forms); - if (success) { - for (size_t i = 0; i < forms.size(); ++i) { - bridge_->SetPasswordForm(*forms[i].get()); - } - } - std::vector> blacklist; - success = backend->GetBlacklistLogins(&blacklist); - if (success) { - for (size_t i = 0; i < blacklist.size(); ++i) { - bridge_->SetPasswordForm(*blacklist[i].get()); - } - } + } + std::vector> blacklist; + success = database.GetBlacklistLogins(&blacklist); + if (success) { + for (size_t i = 0; i < blacklist.size(); ++i) { + bridge_->SetPasswordForm(*blacklist[i].get()); } - #endif + } } void ChromeImporter::ImportCookies() { From b9ed691f48f76c556492e73f45b89d6d81a90cc6 Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Mon, 12 Aug 2019 15:22:48 -0400 Subject: [PATCH 42/63] Unit tests: Fixes MCSClient API signature changes. Chromium change: https://chromium.googlesource.com/chromium/src/+/b36394cad79024db5bff0935006b34d0fd20b6dd commit b36394cad79024db5bff0935006b34d0fd20b6dd Author: Steven Zhu Date: Tue Jun 4 16:10:46 2019 +0000 [Chromecast] Pass in |io_task_runner| to GCM components. When |io_task_runner| is power managed, delayed tasks and timers running on it can wake up the system. Bug: internal b/132993317 --- components/gcm_driver/gcm_unittest.cc | 29 +++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/components/gcm_driver/gcm_unittest.cc b/components/gcm_driver/gcm_unittest.cc index 1de1c636e7a..a57231c3458 100644 --- a/components/gcm_driver/gcm_unittest.cc +++ b/components/gcm_driver/gcm_unittest.cc @@ -73,6 +73,7 @@ class FakeMCSClient : public MCSClient { FakeMCSClient(base::Clock* clock, ConnectionFactory* connection_factory, GCMStore* gcm_store, + scoped_refptr io_task_runner, GCMStatsRecorder* recorder); ~FakeMCSClient() override; void Login(uint64_t android_id, uint64_t security_token) override; @@ -92,11 +93,18 @@ class FakeMCSClient : public MCSClient { mcs_proto::DataMessageStanza last_data_message_stanza_; }; -FakeMCSClient::FakeMCSClient(base::Clock* clock, - ConnectionFactory* connection_factory, - GCMStore* gcm_store, - GCMStatsRecorder* recorder) - : MCSClient("", clock, connection_factory, gcm_store, recorder), +FakeMCSClient::FakeMCSClient( + base::Clock* clock, + ConnectionFactory* connection_factory, + GCMStore* gcm_store, + scoped_refptr io_task_runner, + GCMStatsRecorder* recorder) + : MCSClient("", + clock, + connection_factory, + gcm_store, + io_task_runner, + recorder), last_android_id_(0u), last_security_token_(0u), last_message_tag_(kNumProtoTypes) { @@ -165,6 +173,7 @@ class FakeGCMInternalsBuilder : public GCMInternalsBuilder { base::Clock* clock, ConnectionFactory* connection_factory, GCMStore* gcm_store, + scoped_refptr io_task_runner, GCMStatsRecorder* recorder) override; std::unique_ptr BuildConnectionFactory( const std::vector& endpoints, @@ -172,6 +181,7 @@ class FakeGCMInternalsBuilder : public GCMInternalsBuilder { base::RepeatingCallback< void(network::mojom::ProxyResolvingSocketFactoryRequest)> get_socket_factory_callback, + scoped_refptr io_task_runner, GCMStatsRecorder* recorder, network::NetworkConnectionTracker* network_connection_tracker) override; @@ -193,9 +203,10 @@ std::unique_ptr FakeGCMInternalsBuilder::BuildMCSClient( base::Clock* clock, ConnectionFactory* connection_factory, GCMStore* gcm_store, + scoped_refptr io_task_runner, GCMStatsRecorder* recorder) { - return base::WrapUnique( - new FakeMCSClient(clock, connection_factory, gcm_store, recorder)); + return base::WrapUnique(new FakeMCSClient( + clock, connection_factory, gcm_store, io_task_runner, recorder)); } std::unique_ptr @@ -205,6 +216,7 @@ FakeGCMInternalsBuilder::BuildConnectionFactory( base::RepeatingCallback< void(network::mojom::ProxyResolvingSocketFactoryRequest)> get_socket_factory_callback, + scoped_refptr io_task_runner, GCMStatsRecorder* recorder, network::NetworkConnectionTracker* network_connection_tracker) { return base::WrapUnique(new FakeConnectionFactory()); @@ -430,7 +442,8 @@ void GCMClientImplTest::InitializeGCMClient() { chrome_build_info.version = kChromeVersion; chrome_build_info.product_category_for_subtypes = kProductCategoryForSubtypes; gcm_client_->Initialize( - chrome_build_info, gcm_store_path(), task_runner_, base::DoNothing(), + chrome_build_info, gcm_store_path(), task_runner_, + base::ThreadTaskRunnerHandle::Get(), base::DoNothing(), base::MakeRefCounted( &test_url_loader_factory_), network::TestNetworkConnectionTracker::GetInstance(), From 68fc1d68817b61a40ce1500075b0cb521d907e14 Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Mon, 12 Aug 2019 15:37:27 -0400 Subject: [PATCH 43/63] Unit tests: fixes GCMDriver c'tor signature change. Chromium change: https://chromium.googlesource.com/chromium/src/+/a76a6e39300b764f4a0e3824b9d17e6c2bf51b73 commit a76a6e39300b764f4a0e3824b9d17e6c2bf51b73 Author: Alex Chau Date: Wed Jun 26 16:20:01 2019 +0000 Create WebPushSender for sending web-push messages - Created WebPushSender for sending out web-push messages using VAPID (https://developers.google.com/web/ilt/pwa/introduction-to-push-notifications#using_vapid) - Created WebPushMessage struct to encapsulate message_id into messages to make callbacks easier - Refactored across GCMEncryptionProvider / GCMDriver to use WebPushMessage and provide callback mechanism Bug: 966037 --- components/invalidation/fcm_unittest.cc | 10 ++++++++-- test/BUILD.gn | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/components/invalidation/fcm_unittest.cc b/components/invalidation/fcm_unittest.cc index aeed3d918c8..4f92b000006 100644 --- a/components/invalidation/fcm_unittest.cc +++ b/components/invalidation/fcm_unittest.cc @@ -20,6 +20,8 @@ #include "components/gcm_driver/instance_id/instance_id_driver.h" #include "components/invalidation/impl/status.h" #include "google_apis/gcm/engine/account_mapping.h" +#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" +#include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock.h" using base::TestMockTimeTaskRunner; @@ -73,8 +75,11 @@ class MockInstanceID : public InstanceID { class MockGCMDriver : public gcm::GCMDriver { public: MockGCMDriver() - : GCMDriver(/*store_path=*/base::FilePath(), - /*blocking_task_runner=*/nullptr) {} + : GCMDriver( + /*store_path=*/base::FilePath(), + /*blocking_task_runner=*/nullptr, + base::MakeRefCounted( + &test_url_loader_factory_)) {} ~MockGCMDriver() override = default; MOCK_METHOD4(ValidateRegistration, @@ -128,6 +133,7 @@ class MockGCMDriver : public gcm::GCMDriver { gcm::GCMDecryptionResult result)); private: + network::TestURLLoaderFactory test_url_loader_factory_; DISALLOW_COPY_AND_ASSIGN(MockGCMDriver); }; diff --git a/test/BUILD.gn b/test/BUILD.gn index ffeb4f4b662..b177053d355 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -248,6 +248,8 @@ test("brave_unit_tests") { "//components/sync_preferences", "//components/translate/core/browser:test_support", "//content/public/common", + "//services/network/public/cpp:cpp", + "//services/network:test_support", "//third_party/cacheinvalidation", ] From 2b979751c8f6dc08d5a6bc968434c418756da59c Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Mon, 12 Aug 2019 16:57:55 -0400 Subject: [PATCH 44/63] Unit tests: Fixes CreateProfileAsyncHelper signature. ProfileManagerWithoutInit::CreateProfileAsyncHelper overridden in TorUnittestProfileManager now returns unique_ptr to Profile. Chromium change: https://chromium.googlesource.com/chromium/src/+/8f0b748a630d30d0cdc08cd2e4b6dd64b139e97b commit 8f0b748a630d30d0cdc08cd2e4b6dd64b139e97b Author: Daniel Hosseinian Date: Fri Jun 7 18:21:04 2019 +0000 ProfileManager::RegisterTestingProfile() now takes a std::unique_ptr This commit clarifies previously established ownership semantics of Profiles within ProfileManager through the use of unique pointers. Changes were made to the parameters of ProfileManager::RegisterTestingProfile() and ProfileManager::RegisterProfile() to take a std::unique_ptr instead of a raw pointer. A further change was made to the return type of ProfileManager::CreateProfileAsyncHelper() from a raw pointer to a unique pointer. All callers to the aforementioned functions (including unit tests) that made calls to the two functions are updated to pass in unique pointers. Bug: 968187 --- browser/profiles/tor_unittest_profile_manager.cc | 12 ++++++------ browser/profiles/tor_unittest_profile_manager.h | 7 ++++--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/browser/profiles/tor_unittest_profile_manager.cc b/browser/profiles/tor_unittest_profile_manager.cc index e9405cfb234..037312d6c59 100644 --- a/browser/profiles/tor_unittest_profile_manager.cc +++ b/browser/profiles/tor_unittest_profile_manager.cc @@ -24,11 +24,12 @@ Profile* TorUnittestProfileManager::CreateProfileHelper( if (!base::CreateDirectory(path)) return nullptr; } - return CreateProfile(path, nullptr); + return CreateProfile(path, nullptr).release(); } -Profile* TorUnittestProfileManager::CreateProfileAsyncHelper( - const base::FilePath& path, Delegate* delegate) { +std::unique_ptr TorUnittestProfileManager::CreateProfileAsyncHelper( + const base::FilePath& path, + Delegate* delegate) { // ThreadTaskRunnerHandle::Get() is TestingProfile's "async" IOTaskRunner // (ref. TestingProfile::GetIOTaskRunner()). base::ThreadTaskRunnerHandle::Get()->PostTask( @@ -46,7 +47,7 @@ void TorUnittestProfileManager::InitProfileUserPrefs(Profile* profile) { } } -Profile* TorUnittestProfileManager::CreateProfile( +std::unique_ptr TorUnittestProfileManager::CreateProfile( const base::FilePath& path, Delegate* delegate) { TestingProfile::Builder profile_builder; sync_preferences::PrefServiceMockFactory factory; @@ -58,6 +59,5 @@ Profile* TorUnittestProfileManager::CreateProfile( profile_builder.SetPrefService(std::move(prefs)); profile_builder.SetPath(path); profile_builder.SetDelegate(delegate); - std::unique_ptr profile = profile_builder.Build(); - return profile.release(); + return profile_builder.Build(); } diff --git a/browser/profiles/tor_unittest_profile_manager.h b/browser/profiles/tor_unittest_profile_manager.h index dfe3a1792af..b06352c03fe 100644 --- a/browser/profiles/tor_unittest_profile_manager.h +++ b/browser/profiles/tor_unittest_profile_manager.h @@ -17,13 +17,14 @@ class TorUnittestProfileManager : public ProfileManagerWithoutInit { protected: Profile* CreateProfileHelper(const base::FilePath& path) override; - Profile* CreateProfileAsyncHelper(const base::FilePath& path, - Delegate* delegate) override; + std::unique_ptr CreateProfileAsyncHelper( + const base::FilePath& path, + Delegate* delegate) override; void InitProfileUserPrefs(Profile* profile) override; private: - Profile* CreateProfile(const base::FilePath& path, Delegate* delegate); + std::unique_ptr CreateProfile(const base::FilePath& path, Delegate* delegate); }; #endif // BRAVE_BROWSER_PROFILES_TOR_UNITTEST_PROFILE_MANAGER_H_ From 0c6a9c9d21bb7d68980ba8db7af0de7fb6dae2b9 Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Wed, 21 Aug 2019 17:08:50 -0400 Subject: [PATCH 45/63] Unit test: BraveSyncServiceTest.GetDisableReasons fix. Fixes expected results. GetDisabledReasons returns a different value from Chromium because one of the sync preferences had the initial value flipped. Chromium change: https://chromium.googlesource.com/chromium/src/+/84acadd70d0ef573faf775d712ba6cd430f931e2 commit 84acadd70d0ef573faf775d712ba6cd430f931e2 Author: Marc Treib Date: Mon Jul 8 16:02:25 2019 +0000 SyncPrefs: Change default value of "IsSyncRequested" to false This is achieved by migrating the "SyncSuppressed" pref to a new "SyncRequested" pref. Before this CL, there was a pref called "sync.suppress_start", which was the inverse of the "IsSyncRequested" flag in SyncPrefs/SyncUserSettings. It was false by default, meaning Sync was considered "requested" even if the user had never even attempted to turn on Sync. This CL migrates the value over to a new "sync.requested" pref, which is the inverse of the old pref, and has the correct default value (not requested). If the old pref has an explicit value, then the migration is simply "sync.requested := !sync.suppress_start". If the old pref does not have a value, then there's generally nothing to migrate (and thus the implicit value of "IsSyncRequested" will change to false, which is the sane default state). However, as one special case of the migration, if the old pref is not explicitly set, but "IsFirstSetupComplete" is true, then that means Sync was actually enabled, but (probably through some past bug in the Sync setup flow) "SetSyncRequested(true)" was just never called. To correctly migrate users in this state, we set the new "sync.requested" pref to true. Apart from the migration edge case mentioned above, the different default value does not introduce a behavior change: All sync setup flows must anyway call SetSyncRequested(true) since they can't be sure what the previous value was. Bug: 906034 --- components/brave_sync/brave_sync_service_unittest.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/components/brave_sync/brave_sync_service_unittest.cc b/components/brave_sync/brave_sync_service_unittest.cc index 8ed5ebcb93d..f58204dd154 100644 --- a/components/brave_sync/brave_sync_service_unittest.cc +++ b/components/brave_sync/brave_sync_service_unittest.cc @@ -729,10 +729,12 @@ TEST_F(BraveSyncServiceTest, GetPreferredDataTypes) { TEST_F(BraveSyncServiceTest, GetDisableReasons) { sync_prefs()->SetManagedForTest(true); EXPECT_EQ(sync_service()->GetDisableReasons(), - syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY); + syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY | + syncer::SyncService::DISABLE_REASON_USER_CHOICE); sync_service()->OnSetSyncEnabled(true); EXPECT_EQ(sync_service()->GetDisableReasons(), - syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY); + syncer::SyncService::DISABLE_REASON_ENTERPRISE_POLICY | + syncer::SyncService::DISABLE_REASON_USER_CHOICE); brave_sync_prefs()->SetMigratedBookmarksVersion(2); EXPECT_EQ(sync_service()->GetDisableReasons(), syncer::SyncService::DISABLE_REASON_NONE); From 23b9fef9f6e740c022c1529905ef81a23e0ace6c Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Wed, 21 Aug 2019 17:24:18 -0400 Subject: [PATCH 46/63] Browser Test: SendToOmniboxAndSubmit signature change. Now takes browser pointer instead of a location bar pointer. Chromium change: https://chromium.googlesource.com/chromium/src/+/ad9765ab97dfb00c188a331852abcbf40e818a14 commit ad9765ab97dfb00c188a331852abcbf40e818a14 Author: Evan Stade Date: Tue Jul 2 17:02:41 2019 +0000 Remove NOTIFICATION_AUTOCOMPLETE_CONTROLLER_RESULT_READY This was only used in tests. Those tests can instead use OmniboxControllerEmitter::Observer. This CL also combines the OmniboxApiTests that are browser tests with the ones that are interactive ui tests. They were split rather sloppily, with a common base class declared and defined in a header file they both included (but not mentioned in any BUILD.gn). Most of the affected tests are actually disabled anyway. Now they're all interactive ui tests. Bug: 268984 --- browser/brave_content_browser_client_browsertest.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/browser/brave_content_browser_client_browsertest.cc b/browser/brave_content_browser_client_browsertest.cc index 53121d55feb..f8b7f1968cd 100644 --- a/browser/brave_content_browser_client_browsertest.cc +++ b/browser/brave_content_browser_client_browsertest.cc @@ -275,8 +275,7 @@ IN_PROC_BROWSER_TEST_F(BraveContentBrowserClientTest, TypedMagnetURL) { content::WebContents* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); content::TestNavigationObserver observer(web_contents); - LocationBar* location_bar = browser()->window()->GetLocationBar(); - ui_test_utils::SendToOmniboxAndSubmit(location_bar, magnet_url().spec()); + ui_test_utils::SendToOmniboxAndSubmit(browser(), magnet_url().spec()); observer.Wait(); EXPECT_EQ(magnet_url(), web_contents->GetLastCommittedURL().spec()); } From 0229d24ce21611721ed1fcf7f0246f6242c54601 Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Wed, 21 Aug 2019 18:01:24 -0400 Subject: [PATCH 47/63] Browser Test: added missing overrides to BraveMockRenderViewContextMenu. Chromium change: https://chromium.googlesource.com/chromium/src/+/d6b794c59f423ead8b1f2633c7fd879710aa1382 commit d6b794c59f423ead8b1f2633c7fd879710aa1382 Author: Himanshu Jaju Date: Tue Jul 16 19:31:46 2019 +0000 Context menu for click to call Add tel scheme to list of schemes in url Screenshot for multiple devices: https://storage.cloud.google.com/chromium-translation-screenshots/d3ea7c88529dd93e5f403fa57d5df3bfadf8936a Screenshot for single device: https://storage.cloud.google.com/chromium-translation-screenshots/bc5be9872a3e0a2c30bbb9a80ac370cafa339988 Bug: 972060 --- .../brave_mock_render_view_context_menu.cc | 19 +++++++++++++++++-- .../brave_mock_render_view_context_menu.h | 9 ++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/browser/renderer_context_menu/brave_mock_render_view_context_menu.cc b/browser/renderer_context_menu/brave_mock_render_view_context_menu.cc index fdc9b237213..12c25aeb942 100644 --- a/browser/renderer_context_menu/brave_mock_render_view_context_menu.cc +++ b/browser/renderer_context_menu/brave_mock_render_view_context_menu.cc @@ -7,6 +7,7 @@ #include +#include "base/strings/string_number_conversions.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/renderer_context_menu/render_view_context_menu.h" @@ -95,6 +96,13 @@ void BraveMockRenderViewContextMenu::AddMenuItem(int command_id, items_.push_back(item); } +void BraveMockRenderViewContextMenu::AddMenuItemWithIcon( + int command_id, + const base::string16& title, + const gfx::ImageSkia& image) { + AddMenuItem(command_id, title); +} + void BraveMockRenderViewContextMenu::AddCheckItem(int command_id, const base::string16& title) { MockMenuItem item; @@ -147,6 +155,14 @@ void BraveMockRenderViewContextMenu::AddSubMenu(int command_id, } } +void BraveMockRenderViewContextMenu::AddSubMenuWithStringIdAndIcon( + int command_id, + int message_id, + ui::MenuModel* model, + const gfx::ImageSkia& image) { + AddSubMenu(command_id, base::NumberToString16(message_id), model); +} + void BraveMockRenderViewContextMenu::UpdateMenuItem( int command_id, bool enabled, @@ -203,8 +219,7 @@ void BraveMockRenderViewContextMenu::AddSpellCheckServiceItem(bool is_checked) { } void BraveMockRenderViewContextMenu::AddAccessibilityLabelsServiceItem( - bool is_checked) { -} + bool is_checked) {} content::RenderViewHost* BraveMockRenderViewContextMenu::GetRenderViewHost() const { diff --git a/browser/renderer_context_menu/brave_mock_render_view_context_menu.h b/browser/renderer_context_menu/brave_mock_render_view_context_menu.h index bb2035f6fb3..f47f69e76c6 100644 --- a/browser/renderer_context_menu/brave_mock_render_view_context_menu.h +++ b/browser/renderer_context_menu/brave_mock_render_view_context_menu.h @@ -57,11 +57,18 @@ class BraveMockRenderViewContextMenu : public ui::SimpleMenuModel::Delegate, // RenderViewContextMenuProxy implementation. void AddMenuItem(int command_id, const base::string16& title) override; + void AddMenuItemWithIcon(int command_id, + const base::string16& title, + const gfx::ImageSkia& image) override; void AddCheckItem(int command_id, const base::string16& title) override; void AddSeparator() override; void AddSubMenu(int command_id, const base::string16& label, ui::MenuModel* model) override; + void AddSubMenuWithStringIdAndIcon(int command_id, + int message_id, + ui::MenuModel* model, + const gfx::ImageSkia& image) override; void UpdateMenuItem(int command_id, bool enabled, bool hidden, @@ -72,8 +79,8 @@ class BraveMockRenderViewContextMenu : public ui::SimpleMenuModel::Delegate, void AddSpellCheckServiceItem(bool is_checked) override; void AddAccessibilityLabelsServiceItem(bool is_checked) override; content::RenderViewHost* GetRenderViewHost() const override; - content::BrowserContext* GetBrowserContext() const override; content::WebContents* GetWebContents() const override; + content::BrowserContext* GetBrowserContext() const override; // Attaches a RenderViewContextMenuObserver to be tested. void SetObserver(RenderViewContextMenuObserver* observer); From 6b4fe6be2ddaed1ee715195403bea0bab113496d Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Wed, 21 Aug 2019 18:19:25 -0400 Subject: [PATCH 48/63] Browser Test: Removed SetUrlRequestMocksEnabled. This function was removed along with url_request_mock_util.h. Chromium change: https://chromium.googlesource.com/chromium/src/+/779c64cbc9bf21539fe7b712df43b79952086704 commit 779c64cbc9bf21539fe7b712df43b79952086704 Author: Clark DuVall Date: Wed Jun 12 22:31:58 2019 +0000 Cleanup unnecessary non-network service code Bug: 934009 --- browser/extensions/brave_base_local_data_files_browsertest.cc | 4 ---- browser/extensions/brave_extension_provider_browsertest.cc | 1 - .../browser/https_everywhere_service_browsertest.cc | 3 --- .../browser/tracking_protection_service_browsertest.cc | 1 - 4 files changed, 9 deletions(-) diff --git a/browser/extensions/brave_base_local_data_files_browsertest.cc b/browser/extensions/brave_base_local_data_files_browsertest.cc index fb795510662..ca830a94802 100644 --- a/browser/extensions/brave_base_local_data_files_browsertest.cc +++ b/browser/extensions/brave_base_local_data_files_browsertest.cc @@ -14,7 +14,6 @@ #include "brave/components/brave_component_updater/browser/local_data_files_observer.h" #include "brave/components/brave_component_updater/browser/local_data_files_service.h" #include "chrome/browser/extensions/extension_browsertest.h" -#include "chrome/browser/net/url_request_mock_util.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/test/browser_test_utils.h" @@ -63,9 +62,6 @@ void BaseLocalDataFilesBrowserTest::MaybeSetUpEmbeddedTestServerOnMainThread() { if (!embedded_test_server_directory()) return; - base::PostTaskWithTraits( - FROM_HERE, {content::BrowserThread::IO}, - base::BindOnce(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); host_resolver()->AddRule("*", "127.0.0.1"); } diff --git a/browser/extensions/brave_extension_provider_browsertest.cc b/browser/extensions/brave_extension_provider_browsertest.cc index 41f3996932f..96ef5802f8c 100644 --- a/browser/extensions/brave_extension_provider_browsertest.cc +++ b/browser/extensions/brave_extension_provider_browsertest.cc @@ -13,7 +13,6 @@ #include "brave/components/brave_shields/browser/https_everywhere_service.h" #include "chrome/browser/extensions/crx_installer.h" #include "chrome/browser/extensions/extension_browsertest.h" -#include "chrome/browser/net/url_request_mock_util.h" #include "chrome/browser/ui/browser.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/test/browser_test_utils.h" diff --git a/components/brave_shields/browser/https_everywhere_service_browsertest.cc b/components/brave_shields/browser/https_everywhere_service_browsertest.cc index 863815fbcff..f3972b806c5 100644 --- a/components/brave_shields/browser/https_everywhere_service_browsertest.cc +++ b/components/brave_shields/browser/https_everywhere_service_browsertest.cc @@ -9,7 +9,6 @@ #include "brave/common/brave_paths.h" #include "brave/components/brave_shields/browser/https_everywhere_service.h" #include "chrome/browser/extensions/extension_browsertest.h" -#include "chrome/browser/net/url_request_mock_util.h" #include "chrome/browser/ui/browser.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/browser/browser_task_traits.h" @@ -41,8 +40,6 @@ class HTTPSEverywhereServiceTest : public ExtensionBrowserTest { void SetUpOnMainThread() override { ExtensionBrowserTest::SetUpOnMainThread(); - base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, - base::BindOnce(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); host_resolver()->AddRule("*", "127.0.0.1"); } diff --git a/components/brave_shields/browser/tracking_protection_service_browsertest.cc b/components/brave_shields/browser/tracking_protection_service_browsertest.cc index 213702e54fa..f6eeaf562da 100644 --- a/components/brave_shields/browser/tracking_protection_service_browsertest.cc +++ b/components/brave_shields/browser/tracking_protection_service_browsertest.cc @@ -15,7 +15,6 @@ #include "brave/components/brave_shields/browser/buildflags/buildflags.h" // For STP #include "brave/components/brave_shields/browser/tracking_protection_service.h" #include "chrome/browser/extensions/extension_browsertest.h" -#include "chrome/browser/net/url_request_mock_util.h" #include "chrome/browser/ui/browser.h" #include "chrome/test/base/ui_test_utils.h" #include "components/prefs/pref_service.h" From ca0cffd50031e4964bfa9093db21cd99b2c21bab Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Wed, 21 Aug 2019 18:25:11 -0400 Subject: [PATCH 49/63] Browser Test: Added a missing header include. --- browser/extensions/api/brave_wallet_api_browsertest.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/browser/extensions/api/brave_wallet_api_browsertest.cc b/browser/extensions/api/brave_wallet_api_browsertest.cc index a84179b3d9b..e468658757f 100644 --- a/browser/extensions/api/brave_wallet_api_browsertest.cc +++ b/browser/extensions/api/brave_wallet_api_browsertest.cc @@ -11,6 +11,7 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/test/browser_test_utils.h" +#include "extensions/common/extension.h" #include "extensions/common/extension_builder.h" #include "extensions/test/extension_test_message_listener.h" #include "net/dns/mock_host_resolver.h" From 30bf8d8f31f874e1dad0ea456cf4fb4f0bcad343 Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Wed, 21 Aug 2019 18:29:34 -0400 Subject: [PATCH 50/63] Browser Test: Rename ContextualSuggestionsService => RemoteSuggestionsService Chromium change: https://chromium.googlesource.com/chromium/src/+/06ec26ae93ec896440311c705d994d356a02897a commit 06ec26ae93ec896440311c705d994d356a02897a Author: Tommy C. Li Date: Mon Jun 10 18:01:42 2019 +0000 [omnibox] Rename ContextualSuggestionsService => RemoteSuggestionsService These suggestions requests are not always contextual, but always remote. This CL corrects a misnomer and is a followup to: https://chromium-review.googlesource.com/c/chromium/src/+/1640160 Bug: 963173 --- .../brave_autocomplete_provider_client_browsertest.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/autocomplete/brave_autocomplete_provider_client_browsertest.cc b/browser/autocomplete/brave_autocomplete_provider_client_browsertest.cc index ce2b4398f48..47b8370d1ef 100644 --- a/browser/autocomplete/brave_autocomplete_provider_client_browsertest.cc +++ b/browser/autocomplete/brave_autocomplete_provider_client_browsertest.cc @@ -36,8 +36,8 @@ IN_PROC_BROWSER_TEST_F(BraveAutocompleteProviderClientTest, incognito_client.GetAutocompleteClassifier()); EXPECT_EQ(normal_client.GetHistoryService(), incognito_client.GetHistoryService()); - EXPECT_EQ(normal_client.GetContextualSuggestionsService(true), - incognito_client.GetContextualSuggestionsService(true)); + EXPECT_EQ(normal_client.GetRemoteSuggestionsService(true), + incognito_client.GetRemoteSuggestionsService(true)); EXPECT_EQ(normal_client.GetDocumentSuggestionsService(true), incognito_client.GetDocumentSuggestionsService(true)); } From 81f201dfb9767da15506562444844bc75e38b85a Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Thu, 22 Aug 2019 14:31:58 -0400 Subject: [PATCH 51/63] Browser Test: Allow intentional crash. Chromium now enforces no renderer crashes assertion on browser tests. To allow an intentional crash test ScopedAllowRendererCrashes needs to be added. Chromium changes: https://chromium.googlesource.com/chromium/src/+/922389129506cc063b83ffddc7e27e0314ead777 commit 922389129506cc063b83ffddc7e27e0314ead777 Author: Lukasz Anforowicz Date: Mon Jun 17 20:26:46 2019 +0000 Start enforcing NoRendererCrashesAssertion in browser tests. Change-Id: Iec1b1090a675ff6af74661f5a000c41a9a8df940 Bug: 972220 https://chromium.googlesource.com/chromium/src/+/96eca2d491cd1153b0674c8e6983312a83d55dcf commit 96eca2d491cd1153b0674c8e6983312a83d55dcf Author: Lukasz Anforowicz Date: Thu Jun 13 20:46:42 2019 +0000 Prepare browser tests for NoRendererCrashesAssertion. This CL adds ScopedAllowRendererCrashes to browser tests that (expectedly or unexpectedly) might trigger a renderer crash. Right now a browser test might pass, even if a renderer process crashed during the test execution. After https://crrev.com/c/1650463 a renderer crash will trigger an explicit test failure, but before this enforcement can start, existing tests that experience renderer crashes (expectedly or unexpectedly) need to declare this via ScopedAllowRendererCrashes. This CL was uploaded by git cl split. R=bengr@chromium.org Bug: 972220 --- browser/brave_scheme_load_browsertest.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/browser/brave_scheme_load_browsertest.cc b/browser/brave_scheme_load_browsertest.cc index afd7b00b12a..89f28e9b9df 100644 --- a/browser/brave_scheme_load_browsertest.cc +++ b/browser/brave_scheme_load_browsertest.cc @@ -223,6 +223,7 @@ IN_PROC_BROWSER_TEST_F(BraveSchemeLoadBrowserTest, CrashURLTest) { content::WindowedNotificationObserver observer( content::NOTIFICATION_WEB_CONTENTS_DISCONNECTED, content::NotificationService::AllSources()); + content::ScopedAllowRendererCrashes allow_renderer_crashes(active_contents()); browser()->OpenURL( content::OpenURLParams(GURL("brave://crash/"), content::Referrer(), WindowOpenDisposition::CURRENT_TAB, From 891ebce275ac0f50fb4682517056f4f3e8c5c2cc Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Wed, 28 Aug 2019 17:09:48 -0400 Subject: [PATCH 52/63] Changed BraveProxyingWebSocket to align with C77 changes. Can't use it as is right now. The proxy is commented out in `BraveContentBrowserClient::CreateWebSocket`. Chromium changes: https://chromium.googlesource.com/chromium/src/+/c570adabe2a390ad16b8bbab2b9ffdd864ff7156 commit c570adabe2a390ad16b8bbab2b9ffdd864ff7156 Author: Yoichi Osato Date: Tue Jun 4 05:28:31 2019 +0000 [websocket] Reland: "Split interface mojom::WebSocketClient" This CL splits the interface to two parts so that WebRequestProxyingWebSocket or extensions proxy only handshake of WebSocket: interface WebSocketHandshakeClient { OnStartOpeningHandshake(WebSocketHandshakeRequest request); OnFinishOpeningHandshake(WebSocketHandshakeResponse response); OnAddChannelResponse(string selected_protocol, string extensions); }; interface WebSocketClient { OnDataFrame(bool fin, WebSocketMessageType type, array data); OnFlowControl(int64 quota); OnDropChannel(bool was_clean, uint16 code, string reason); OnClosingHandshake(); OnFailChannel(string reason); }; Performance gain of receive-arraybuffer-1MBx100.html: Mine: 1050 ms ToT : 1221 ms Relanding: The previous patch was reverted because of a browser test of "--disable-features=NetworkService". This patch fixes it to adapt a WebRequestAPI test to both expectations. Reverted-change: https://chromium-review.googlesource.com/c/chromium/src/+/1628497 Bug: 865001, 942989 https://chromium.googlesource.com/chromium/src/+/7ce089524dc096357034700d2e5b76ff29d50388 commit 7ce089524dc096357034700d2e5b76ff29d50388 Author: Yoichi Osato Date: Tue Jun 18 02:10:34 2019 +0000 Reland "[WebSocket] Add --websocket-renderer-receive-quota-max command line flag." Reason for reland: the culprit was not this patch. This patch was reverted because of compile failure on android: https://chromium-review.googlesource.com/c/chromium/src/+/1660391 However, relanding this don't cause compile failure. Bug: 865001 commit 04d43cf58c3473d83adfed27fb8dcb2ead6f4c3a Author: Yoichi Osato Date: Fri Jun 14 04:04:21 2019 +0000 [WebSocket] Add --websocket-renderer-receive-quota-max command line flag. This patch adds the flag that overrides default threshold value that the renderer calls AddReceiveFlowControlQuota() to the browser per receiving this amount of data so that the browser can continue sending remaining data to the renderer. Default value is 32k Bytes. The more the value is, browser tends the less stop sending packets and then consumes more memory. This flag will be used to investigate the performance issue. You can use this flag both on chrome and content_shell: $ ./chrome.exe --websocket-renderer-receive-quota-max=3000000 This flag sets the threshold 3M Bytes. Implementation detail: This patch moves the default value constant from blink to net/websockets/websocket_channel.h so that we can pass the command line flag to the renderer. This change also enables us to modify the value while considering sent buffer from a server later on for further optimization. Bug: 865001 https://chromium.googlesource.com/chromium/src/+/6894c69a9c069d2175794c8d11743298dddd65cf commit 6894c69a9c069d2175794c8d11743298dddd65cf Author: Yutaka Hirano Date: Fri Jun 28 12:54:45 2019 +0000 Rename WebSocketHandshakeClient messages In preparation to removing AddChannelRequest, rename AddChannelResponse to OnConnectionEstablished. OnFinishOpeningHandshake has been confusing because it doesn't mean successful handshake finish (i.e., connection establishment). Rename it to OnResponseReceived. Rename OnStartOpeningHandshake to OnOpeningHandshakeStarted for consistency. Bug: 967524 https://chromium.googlesource.com/chromium/src/+/8e0b4d43cebd21a0be442187fe33d325939857e1 commit 8e0b4d43cebd21a0be442187fe33d325939857e1 Author: Yutaka Hirano Date: Thu Jul 4 07:12:38 2019 +0000 Remove mojom::WebSocket::AddChannelRequest ...in order to remove the unnecessary overhead on the browser process when downloading / uploading payloads. With this CL, both mojom::WebSocket and mojom::WebSocketClient only pass though the proxy interface implemented in extensions/browser/api/web_request. With this CL, 1) NetworkContext::CreateWebSocket takes additional parameters. This makes the state transition in network::WebSocket a bit simpler. 2) blink::mojom::WebSocketConnector is introduced. mojom::WebSocketConnector::Connector corresponds to mojom::WebSocket::AddChannelRequest. 3) mojom::WebSocket is passed as a parameter of mojom::WebSocketHandshakeClient::OnConnectionEstablished. 4) Instead of mojom::WebSocket, the extensions module now receives a function to initiate a WebSocket opening handshake. 5) ContentBrowserClient::WillCreateWebSocket is split into three: WillInterceptWebSocket, GetWebSocketOptions and CreateWebSocket. This incurs an additional thread hop, but it will be fixed once the extensions module for WebSocket is moved to the UI thread. This improves [1] in my environment. Without the change: 318MB/s With the change : 389MB/s 1: third_party/blink/perf_tests/websocket/receive-arraybuffer-1MBx100.html Bug: 865001, 967524, 942989 --- browser/brave_content_browser_client.cc | 27 +++- browser/brave_content_browser_client.h | 12 +- browser/net/brave_proxying_web_socket.cc | 196 +++++++---------------- browser/net/brave_proxying_web_socket.h | 68 +++----- browser/net/resource_context_data.cc | 31 +++- browser/net/resource_context_data.h | 10 +- 6 files changed, 138 insertions(+), 206 deletions(-) diff --git a/browser/brave_content_browser_client.cc b/browser/brave_content_browser_client.cc index d97ccdb68c7..71571a0586c 100644 --- a/browser/brave_content_browser_client.cc +++ b/browser/brave_content_browser_client.cc @@ -241,15 +241,26 @@ bool BraveContentBrowserClient::WillCreateURLLoaderFactory( return use_proxy; } -void BraveContentBrowserClient::WillCreateWebSocket( +bool BraveContentBrowserClient::WillInterceptWebSocket( + content::RenderFrameHost* frame) { + //return (frame != nullptr); + return ChromeContentBrowserClient::WillInterceptWebSocket(frame); +} + +void BraveContentBrowserClient::CreateWebSocket( content::RenderFrameHost* frame, - network::mojom::WebSocketRequest* request, - network::mojom::AuthenticationHandlerPtr* auth_handler, - network::mojom::TrustedHeaderClientPtr* header_client, - uint32_t* options) { - ChromeContentBrowserClient::WillCreateWebSocket(frame, request, auth_handler, - header_client, options); - BraveProxyingWebSocket::ProxyWebSocket(frame, request, auth_handler); + content::ContentBrowserClient::WebSocketFactory factory, + const GURL& url, + const GURL& site_for_cookies, + const base::Optional& user_agent, + network::mojom::WebSocketHandshakeClientPtr handshake_client) { + ChromeContentBrowserClient::CreateWebSocket(frame, std::move(factory), url, + site_for_cookies, user_agent, + std::move(handshake_client)); + // TODO(max): can't hook in here any more. + //BraveProxyingWebSocket::ProxyWebSocket(frame, std::move(factory), url, + // site_for_cookies, user_agent, + // std::move(handshake_client)); } void BraveContentBrowserClient::MaybeHideReferrer( diff --git a/browser/brave_content_browser_client.h b/browser/brave_content_browser_client.h index 8933c23c566..674227c6917 100644 --- a/browser/brave_content_browser_client.h +++ b/browser/brave_content_browser_client.h @@ -64,12 +64,14 @@ class BraveContentBrowserClient : public ChromeContentBrowserClient { network::mojom::TrustedURLLoaderHeaderClientPtrInfo* header_client, bool* bypass_redirect_checks) override; - void WillCreateWebSocket( + bool WillInterceptWebSocket(content::RenderFrameHost* frame) override; + void CreateWebSocket( content::RenderFrameHost* frame, - network::mojom::WebSocketRequest* request, - network::mojom::AuthenticationHandlerPtr* auth_handler, - network::mojom::TrustedHeaderClientPtr* header_client, - uint32_t* options) override; + content::ContentBrowserClient::WebSocketFactory factory, + const GURL& url, + const GURL& site_for_cookies, + const base::Optional& user_agent, + network::mojom::WebSocketHandshakeClientPtr handshake_client) override; void MaybeHideReferrer(content::BrowserContext* browser_context, const GURL& request_url, diff --git a/browser/net/brave_proxying_web_socket.cc b/browser/net/brave_proxying_web_socket.cc index 770e930043a..7fc8ae923c1 100644 --- a/browser/net/brave_proxying_web_socket.cc +++ b/browser/net/brave_proxying_web_socket.cc @@ -20,31 +20,24 @@ #include "content/public/browser/render_process_host.h" BraveProxyingWebSocket::BraveProxyingWebSocket( - BraveRequestHandler* handler, - content::ResourceContext* resource_context, + WebSocketFactory factory, + const network::ResourceRequest& request, + network::mojom::WebSocketHandshakeClientPtr handshake_client, int process_id, - int frame_id, int frame_tree_node_id, - const url::Origin& origin, + content::ResourceContext* resource_context, scoped_refptr request_id_generator, - network::mojom::WebSocketPtr proxied_socket, - network::mojom::WebSocketRequest proxied_request, + BraveRequestHandler* handler, DisconnectCallback on_disconnect) : request_handler_(handler), process_id_(process_id), - frame_id_(frame_id), frame_tree_node_id_(frame_tree_node_id), - origin_(origin), + factory_(std::move(factory)), resource_context_(resource_context), request_id_generator_(std::move(request_id_generator)), - proxied_socket_(std::move(proxied_socket)), - on_disconnect_(std::move(on_disconnect)) { - binding_as_websocket_.Bind(std::move(proxied_request)); - - binding_as_websocket_.set_connection_error_handler( - base::BindRepeating(&BraveProxyingWebSocket::OnError, - base::Unretained(this), net::ERR_FAILED)); -} + forwarding_handshake_client_(std::move(handshake_client)), + request_(request), + on_disconnect_(std::move(on_disconnect)) {} BraveProxyingWebSocket::~BraveProxyingWebSocket() { if (ctx_) { @@ -55,52 +48,26 @@ BraveProxyingWebSocket::~BraveProxyingWebSocket() { // static bool BraveProxyingWebSocket::ProxyWebSocket( content::RenderFrameHost* frame, - network::mojom::WebSocketRequest* request, - network::mojom::AuthenticationHandlerPtr* auth_handler) { + content::ContentBrowserClient::WebSocketFactory factory, + const GURL& url, + const GURL& site_for_cookies, + const base::Optional& user_agent, + network::mojom::WebSocketHandshakeClientPtr handshake_client) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - network::mojom::WebSocketPtrInfo proxied_socket_ptr_info; - auto proxied_request = std::move(*request); - *request = mojo::MakeRequest(&proxied_socket_ptr_info); - base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::IO}, - base::BindOnce(&ResourceContextData::StartProxyingWebSocket, - frame->GetProcess()->GetBrowserContext() - ->GetResourceContext(), - frame->GetProcess()->GetID(), - frame->GetRoutingID(), - frame->GetFrameTreeNodeId(), - frame->GetLastCommittedOrigin(), - std::move(proxied_socket_ptr_info), - std::move(proxied_request))); + base::BindOnce( + &ResourceContextData::StartProxyingWebSocket, std::move(factory), url, + site_for_cookies, user_agent, handshake_client.PassInterface(), + frame->GetProcess()->GetBrowserContext()->GetResourceContext(), + frame->GetProcess()->GetID(), frame->GetRoutingID(), + frame->GetFrameTreeNodeId(), frame->GetLastCommittedOrigin())); return true; } -void BraveProxyingWebSocket::AddChannelRequest( - const GURL& url, - const std::vector& requested_protocols, - const GURL& site_for_cookies, - std::vector additional_headers, - network::mojom::WebSocketClientPtr client) { - if (binding_as_client_.is_bound() || !client || forwarding_client_) { - // Illegal request. - proxied_socket_ = nullptr; - return; - } - - request_.url = url; - // TODO(iefremov): site_for_cookies is not enough, we should find a way - // to initialize NetworkIsolationKey. - request_.site_for_cookies = site_for_cookies; - request_.request_initiator = origin_; - request_.render_frame_id = frame_id_; - websocket_protocols_ = requested_protocols; +void BraveProxyingWebSocket::Start() { request_id_ = request_id_generator_->Generate(); - - forwarding_client_ = std::move(client); - additional_headers_ = std::move(additional_headers); - // If the header client will be used, we start the request immediately, and // OnBeforeSendHeaders and OnSendHeaders will be handled there. Otherwise, // send these events before the request starts. @@ -136,48 +103,15 @@ void BraveProxyingWebSocket::AddChannelRequest( continuation.Run(net::OK); } -void BraveProxyingWebSocket::SendFrame( - bool fin, - network::mojom::WebSocketMessageType type, - const std::vector& data) { - proxied_socket_->SendFrame(fin, type, data); -} - -void BraveProxyingWebSocket::AddReceiveFlowControlQuota(int64_t quota) { - proxied_socket_->AddReceiveFlowControlQuota(quota); -} - -void BraveProxyingWebSocket::StartClosingHandshake( - uint16_t code, - const std::string& reason) { - proxied_socket_->StartClosingHandshake(code, reason); -} - -void BraveProxyingWebSocket::OnFailChannel(const std::string& reason) { - DCHECK(forwarding_client_); - forwarding_client_->OnFailChannel(reason); - - forwarding_client_ = nullptr; - int rv = net::ERR_FAILED; - if (reason == "HTTP Authentication failed; no valid credentials available" || - reason == "Proxy authentication failed") { - // This is needed to make some tests pass. - // TODO(yhirano): Remove this hack. - rv = net::ERR_ABORTED; - } - - OnError(rv); -} - -void BraveProxyingWebSocket::OnStartOpeningHandshake( +void BraveProxyingWebSocket::OnOpeningHandshakeStarted( network::mojom::WebSocketHandshakeRequestPtr request) { - DCHECK(forwarding_client_); - forwarding_client_->OnStartOpeningHandshake(std::move(request)); + DCHECK(forwarding_handshake_client_); + forwarding_handshake_client_->OnOpeningHandshakeStarted(std::move(request)); } -void BraveProxyingWebSocket::OnFinishOpeningHandshake( +void BraveProxyingWebSocket::OnResponseReceived( network::mojom::WebSocketHandshakeResponsePtr response) { - DCHECK(forwarding_client_); + DCHECK(forwarding_handshake_client_); response_.headers = base::MakeRefCounted(base::StringPrintf( @@ -190,10 +124,10 @@ void BraveProxyingWebSocket::OnFinishOpeningHandshake( response_.remote_endpoint = response->remote_endpoint; // TODO(yhirano): with both network service enabled or disabled, - // OnFinishOpeningHandshake is called with the original response headers. + // OnResponseReceived is called with the original response headers. // That means if OnHeadersReceived modified them the renderer won't see that // modification. This is the opposite of http(s) requests. - forwarding_client_->OnFinishOpeningHandshake(std::move(response)); + forwarding_handshake_client_->OnResponseReceived(std::move(response)); ContinueToHeadersReceived(); } @@ -223,45 +157,25 @@ void BraveProxyingWebSocket::ContinueToHeadersReceived() { OnHeadersReceivedComplete(net::OK); } -void BraveProxyingWebSocket::OnAddChannelResponse( +void BraveProxyingWebSocket::OnConnectionEstablished( + network::mojom::WebSocketPtr websocket, const std::string& selected_protocol, - const std::string& extensions) { - DCHECK(forwarding_client_); + const std::string& extensions, + uint64_t receive_quota_threshold) { + DCHECK(forwarding_handshake_client_); DCHECK(!is_done_); is_done_ = true; - forwarding_client_->OnAddChannelResponse(selected_protocol, extensions); -} - -void BraveProxyingWebSocket::OnDataFrame( - bool fin, - network::mojom::WebSocketMessageType type, - const std::vector& data) { - DCHECK(forwarding_client_); - forwarding_client_->OnDataFrame(fin, type, data); -} + forwarding_handshake_client_->OnConnectionEstablished( + std::move(websocket), selected_protocol, extensions, + receive_quota_threshold); -void BraveProxyingWebSocket::OnFlowControl(int64_t quota) { - DCHECK(forwarding_client_); - forwarding_client_->OnFlowControl(quota); -} - -void BraveProxyingWebSocket::OnDropChannel(bool was_clean, - uint16_t code, - const std::string& reason) { - DCHECK(forwarding_client_); - forwarding_client_->OnDropChannel(was_clean, code, reason); - forwarding_client_ = nullptr; - OnError(net::ERR_FAILED); -} - -void BraveProxyingWebSocket::OnClosingHandshake() { - DCHECK(forwarding_client_); - forwarding_client_->OnClosingHandshake(); + // Deletes |this|. + std::move(on_disconnect_).Run(this); } void BraveProxyingWebSocket::OnBeforeRequestComplete(int error_code) { - DCHECK(!binding_as_client_.is_bound()); + DCHECK(!binding_as_handshake_client_.is_bound()); DCHECK(request_.url.SchemeIsWSOrWSS()); if (error_code != net::OK) { OnError(error_code); @@ -292,14 +206,12 @@ void BraveProxyingWebSocket::OnBeforeRequestComplete(int error_code) { } void BraveProxyingWebSocket::ContinueToStartRequest(int error_code) { - DCHECK(!binding_as_client_.is_bound()); + DCHECK(!binding_as_handshake_client_.is_bound()); if (error_code != net::OK) { OnError(error_code); return; } - network::mojom::WebSocketClientPtr proxy; - base::flat_set used_header_names; std::vector additional_headers; for (net::HttpRequestHeaders::Iterator it(request_.headers); it.GetNext();) { @@ -314,13 +226,21 @@ void BraveProxyingWebSocket::ContinueToStartRequest(int error_code) { } } - binding_as_client_.Bind(mojo::MakeRequest(&proxy)); - binding_as_client_.set_connection_error_handler( - base::BindOnce(&BraveProxyingWebSocket::OnError, - base::Unretained(this), net::ERR_FAILED)); - proxied_socket_->AddChannelRequest( - request_.url, websocket_protocols_, request_.site_for_cookies, - std::move(additional_headers), std::move(proxy)); + // Here we detect mojo connection errors on |handshake_client|. See also + // CreateWebSocket in //network/services/public/mojom/network_context.mojom. + // Here we don't have |connection_client| so using |handshake_client| is the + // best. + network::mojom::WebSocketHandshakeClientPtr handshake_client; + binding_as_handshake_client_.Bind(mojo::MakeRequest(&handshake_client)); + binding_as_handshake_client_.set_connection_error_handler( + base::BindOnce(&BraveProxyingWebSocket::OnError, base::Unretained(this), + net::ERR_FAILED)); + network::mojom::AuthenticationHandlerPtr auth_handler; + network::mojom::TrustedHeaderClientPtr trusted_header_client; + + std::move(factory_).Run(request_.url, std::move(additional_headers), + std::move(handshake_client), std::move(auth_handler), + std::move(trusted_header_client)); } void BraveProxyingWebSocket::OnHeadersReceivedComplete(int error_code) { @@ -338,19 +258,17 @@ void BraveProxyingWebSocket::OnHeadersReceivedComplete(int error_code) { } void BraveProxyingWebSocket::PauseIncomingMethodCallProcessing() { - binding_as_client_.PauseIncomingMethodCallProcessing(); + binding_as_handshake_client_.PauseIncomingMethodCallProcessing(); } void BraveProxyingWebSocket::ResumeIncomingMethodCallProcessing() { - binding_as_client_.ResumeIncomingMethodCallProcessing(); + binding_as_handshake_client_.ResumeIncomingMethodCallProcessing(); } void BraveProxyingWebSocket::OnError(int error_code) { if (!is_done_) { is_done_ = true; } - if (forwarding_client_) - forwarding_client_->OnFailChannel(net::ErrorToString(error_code)); // Deletes |this|. std::move(on_disconnect_).Run(this); diff --git a/browser/net/brave_proxying_web_socket.h b/browser/net/brave_proxying_web_socket.h index faf02db8526..826365db5af 100644 --- a/browser/net/brave_proxying_web_socket.h +++ b/browser/net/brave_proxying_web_socket.h @@ -17,6 +17,7 @@ #include "base/optional.h" #include "brave/browser/net/resource_context_data.h" #include "brave/browser/net/url_context.h" +#include "content/public/browser/content_browser_client.h" #include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding_set.h" #include "services/network/public/cpp/resource_request.h" @@ -35,59 +36,43 @@ class ResourceContext; // Ensures that all web socket requests go through Brave network request // handling framework. Cargoculted from |WebRequestProxyingWebSocket|. class BraveProxyingWebSocket - : public network::mojom::WebSocket, - public network::mojom::WebSocketClient { + : public network::mojom::WebSocketHandshakeClient { public: + using WebSocketFactory = content::ContentBrowserClient::WebSocketFactory; using DisconnectCallback = base::OnceCallback; BraveProxyingWebSocket( - BraveRequestHandler* handler, - content::ResourceContext* resource_context, + WebSocketFactory factory, + const network::ResourceRequest& request, + network::mojom::WebSocketHandshakeClientPtr handshake_client, int process_id, - int frame_id, int frame_tree_node_id, - const url::Origin& origin, + content::ResourceContext* resource_context, scoped_refptr request_id_generator, - network::mojom::WebSocketPtr proxied_socket, - network::mojom::WebSocketRequest proxied_request, + BraveRequestHandler* handler, DisconnectCallback on_disconnect); ~BraveProxyingWebSocket() override; static bool ProxyWebSocket( content::RenderFrameHost* frame, - network::mojom::WebSocketRequest* request, - network::mojom::AuthenticationHandlerPtr* auth_handler); - - // mojom::WebSocket methods: - void AddChannelRequest( + content::ContentBrowserClient::WebSocketFactory factory, const GURL& url, - const std::vector& requested_protocols, const GURL& site_for_cookies, - std::vector additional_headers, - network::mojom::WebSocketClientPtr client) override; - void SendFrame(bool fin, - network::mojom::WebSocketMessageType type, - const std::vector& data) override; - void AddReceiveFlowControlQuota(int64_t quota) override; - void StartClosingHandshake(uint16_t code, const std::string& reason) override; - - // mojom::WebSocketClient methods: - void OnFailChannel(const std::string& reason) override; - void OnStartOpeningHandshake( + const base::Optional& user_agent, + network::mojom::WebSocketHandshakeClientPtr handshake_client); + + void Start(); + + // network::mojom::WebSocketHandShakeClient methods: + void OnOpeningHandshakeStarted( network::mojom::WebSocketHandshakeRequestPtr request) override; - void OnFinishOpeningHandshake( + void OnResponseReceived( network::mojom::WebSocketHandshakeResponsePtr response) override; - void OnAddChannelResponse(const std::string& selected_protocol, - const std::string& extensions) override; - void OnDataFrame(bool fin, - network::mojom::WebSocketMessageType type, - const std::vector& data) override; - void OnFlowControl(int64_t quota) override; - void OnDropChannel(bool was_clean, - uint16_t code, - const std::string& reason) override; - void OnClosingHandshake() override; + void OnConnectionEstablished(network::mojom::WebSocketPtr websocket, + const std::string& selected_protocol, + const std::string& extensions, + uint64_t receive_quota_threshold) override; private: void OnBeforeRequestComplete(int error_code); @@ -105,20 +90,17 @@ class BraveProxyingWebSocket std::shared_ptr ctx_; const int process_id_; - const int frame_id_; const int frame_tree_node_id_; - const url::Origin origin_; + content::ContentBrowserClient::WebSocketFactory factory_; content::ResourceContext* const resource_context_; scoped_refptr request_id_generator_; - network::mojom::WebSocketPtr proxied_socket_; - network::mojom::WebSocketClientPtr forwarding_client_; - mojo::Binding binding_as_websocket_{this}; - mojo::Binding binding_as_client_{this}; + network::mojom::WebSocketHandshakeClientPtr forwarding_handshake_client_; + mojo::Binding + binding_as_handshake_client_{this}; network::ResourceRequest request_; network::ResourceResponseHead response_; scoped_refptr override_headers_; - std::vector websocket_protocols_; std::vector additional_headers_; GURL redirect_url_; diff --git a/browser/net/resource_context_data.cc b/browser/net/resource_context_data.cc index 16b577f884f..35c944babcb 100644 --- a/browser/net/resource_context_data.cc +++ b/browser/net/resource_context_data.cc @@ -54,13 +54,16 @@ void ResourceContextData::StartProxying( // static void ResourceContextData::StartProxyingWebSocket( + content::ContentBrowserClient::WebSocketFactory factory, + const GURL& url, + const GURL& site_for_cookies, + const base::Optional& user_agent, + network::mojom::WebSocketHandshakeClientPtrInfo handshake_client, content::ResourceContext* resource_context, int render_process_id, int frame_id, int frame_tree_node_id, - const url::Origin& origin, - network::mojom::WebSocketPtrInfo proxied_socket_ptr_info, - network::mojom::WebSocketRequest proxied_request) { + const url::Origin& origin) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); auto* self = static_cast( @@ -75,16 +78,28 @@ void ResourceContextData::StartProxyingWebSocket( self->request_handler_.reset(new BraveRequestHandler); } + network::ResourceRequest request; + request.url = url; + // TODO(iefremov): site_for_cookies is not enough, we should find a way + // to initialize NetworkIsolationKey. + request.site_for_cookies = site_for_cookies; + if (user_agent) { + request.headers.SetHeader(net::HttpRequestHeaders::kUserAgent, *user_agent); + } + request.request_initiator = origin; + request.render_frame_id = frame_id; + auto proxy = std::make_unique( - self->request_handler_.get(), resource_context, render_process_id, - frame_id, frame_tree_node_id, origin, - self->request_id_generator_, - network::mojom::WebSocketPtr(std::move(proxied_socket_ptr_info)), - std::move(proxied_request), + std::move(factory), request, + network::mojom::WebSocketHandshakeClientPtr(std::move(handshake_client)), + render_process_id, frame_tree_node_id, resource_context, + self->request_id_generator_, self->request_handler_.get(), base::BindOnce(&ResourceContextData::RemoveProxyWebSocket, self->weak_factory_.GetWeakPtr())); + auto* raw_proxy = proxy.get(); self->websocket_proxies_.emplace(std::move(proxy)); + raw_proxy->Start(); } diff --git a/browser/net/resource_context_data.h b/browser/net/resource_context_data.h index 8028a74e25b..bd852f1fa37 100644 --- a/browser/net/resource_context_data.h +++ b/browser/net/resource_context_data.h @@ -15,6 +15,7 @@ #include "base/memory/ref_counted.h" #include "base/supports_user_data.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/content_browser_client.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" #include "services/network/public/mojom/websocket.mojom.h" @@ -61,13 +62,16 @@ class ResourceContextData : public base::SupportsUserData::Data { network::mojom::URLLoaderFactoryPtrInfo target_factory); static void StartProxyingWebSocket( + content::ContentBrowserClient::WebSocketFactory factory, + const GURL& url, + const GURL& site_for_cookies, + const base::Optional& user_agent, + network::mojom::WebSocketHandshakeClientPtrInfo handshake_client, content::ResourceContext* resource_context, int render_process_id, int frame_id, int frame_tree_node_id, - const url::Origin& origin, - network::mojom::WebSocketPtrInfo proxied_socket_ptr_info, - network::mojom::WebSocketRequest proxied_request); + const url::Origin& origin); void RemoveProxy(BraveProxyingURLLoaderFactory* proxy); void RemoveProxyWebSocket(BraveProxyingWebSocket* proxy); From 3536f827f4834e0419b39e7a774cb96b6edb9418 Mon Sep 17 00:00:00 2001 From: bridiver Date: Fri, 30 Aug 2019 15:04:48 -0700 Subject: [PATCH 53/63] apply https://chromium.googlesource.com/chromium/src/+/b21dff94e34c617b52a335ecf531b8010c9a3fa4%5E%21/ --- ...roxying_restricted_cookie_manager.cc.patch | 91 ++++++++++ ...proxying_restricted_cookie_manager.h.patch | 39 ++++ ...ings-core-browser-cookie_settings.cc.patch | 46 +++++ ...tings-core-browser-cookie_settings.h.patch | 31 ++++ ...ontent_settings-core-common-BUILD.gn.patch | 42 +++++ ...-core-common-cookie_settings_base.cc.patch | 75 +++++++- ...s-core-common-cookie_settings_base.h.patch | 114 ++++++++++++ ...tent_settings-core-common-features.h.patch | 21 +++ ...ndroid-media_resource_getter_impl.cc.patch | 25 +++ ...st-data-browsing_data-site_data.html.patch | 29 +++ ...net-base-layered_network_delegate.cc.patch | 26 +++ .../net-base-layered_network_delegate.h.patch | 30 ++++ patches/net-base-network_delegate.cc.patch | 21 +++ patches/net-base-network_delegate.h.patch | 29 +++ .../net-base-network_delegate_impl.cc.patch | 14 ++ .../net-base-network_delegate_impl.h.patch | 17 ++ patches/net-url_request-url_request.cc.patch | 15 ++ .../services-network-cookie_settings.cc.patch | 41 +++++ .../services-network-cookie_settings.h.patch | 24 +++ .../services-network-network_context.cc.patch | 50 ++++-- ...ojom-restricted_cookie_manager.mojom.patch | 70 ++++++++ ...network-restricted_cookie_manager.cc.patch | 170 ++++++++++++++++++ ...-network-restricted_cookie_manager.h.patch | 48 +++++ ...k-renderer-core-loader-cookie_jar.cc.patch | 33 ++++ ...modules-cookie_store-cookie_store.cc.patch | 61 +++++++ ...-modules-cookie_store-cookie_store.h.patch | 14 ++ 26 files changed, 1158 insertions(+), 18 deletions(-) create mode 100644 patches/android_webview-browser-network_service-aw_proxying_restricted_cookie_manager.cc.patch create mode 100644 patches/android_webview-browser-network_service-aw_proxying_restricted_cookie_manager.h.patch create mode 100644 patches/components-content_settings-core-browser-cookie_settings.cc.patch create mode 100644 patches/components-content_settings-core-browser-cookie_settings.h.patch create mode 100644 patches/components-content_settings-core-common-BUILD.gn.patch create mode 100644 patches/components-content_settings-core-common-cookie_settings_base.h.patch create mode 100644 patches/components-content_settings-core-common-features.h.patch create mode 100644 patches/content-browser-media-android-media_resource_getter_impl.cc.patch create mode 100644 patches/content-test-data-browsing_data-site_data.html.patch create mode 100644 patches/net-base-layered_network_delegate.cc.patch create mode 100644 patches/net-base-layered_network_delegate.h.patch create mode 100644 patches/net-base-network_delegate.cc.patch create mode 100644 patches/net-base-network_delegate.h.patch create mode 100644 patches/net-base-network_delegate_impl.cc.patch create mode 100644 patches/net-base-network_delegate_impl.h.patch create mode 100644 patches/net-url_request-url_request.cc.patch create mode 100644 patches/services-network-cookie_settings.cc.patch create mode 100644 patches/services-network-cookie_settings.h.patch create mode 100644 patches/services-network-public-mojom-restricted_cookie_manager.mojom.patch create mode 100644 patches/services-network-restricted_cookie_manager.cc.patch create mode 100644 patches/services-network-restricted_cookie_manager.h.patch create mode 100644 patches/third_party-blink-renderer-core-loader-cookie_jar.cc.patch create mode 100644 patches/third_party-blink-renderer-modules-cookie_store-cookie_store.cc.patch create mode 100644 patches/third_party-blink-renderer-modules-cookie_store-cookie_store.h.patch diff --git a/patches/android_webview-browser-network_service-aw_proxying_restricted_cookie_manager.cc.patch b/patches/android_webview-browser-network_service-aw_proxying_restricted_cookie_manager.cc.patch new file mode 100644 index 00000000000..92e0b57a026 --- /dev/null +++ b/patches/android_webview-browser-network_service-aw_proxying_restricted_cookie_manager.cc.patch @@ -0,0 +1,91 @@ +diff --git a/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.cc b/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.cc +index b1d84a8a3f6f16ac53206d0e30632ec2d736838b..611aa02030e3908caa9504f670c9708f6ed14d80 100644 +--- a/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.cc ++++ b/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.cc +@@ -66,13 +66,15 @@ AwProxyingRestrictedCookieManager::~AwProxyingRestrictedCookieManager() { + void AwProxyingRestrictedCookieManager::GetAllForUrl( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + network::mojom::CookieManagerGetOptionsPtr options, + GetAllForUrlCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + + if (AllowCookies(url, site_for_cookies)) { + underlying_restricted_cookie_manager_->GetAllForUrl( +- url, site_for_cookies, std::move(options), std::move(callback)); ++ url, site_for_cookies, top_frame_origin, std::move(options), ++ std::move(callback)); + } else { + std::move(callback).Run(std::vector()); + } +@@ -82,12 +84,13 @@ void AwProxyingRestrictedCookieManager::SetCanonicalCookie( + const net::CanonicalCookie& cookie, + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + SetCanonicalCookieCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + + if (AllowCookies(url, site_for_cookies)) { + underlying_restricted_cookie_manager_->SetCanonicalCookie( +- cookie, url, site_for_cookies, std::move(callback)); ++ cookie, url, site_for_cookies, top_frame_origin, std::move(callback)); + } else { + std::move(callback).Run(false); + } +@@ -96,6 +99,7 @@ void AwProxyingRestrictedCookieManager::SetCanonicalCookie( + void AwProxyingRestrictedCookieManager::AddChangeListener( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + network::mojom::CookieChangeListenerPtr listener, + AddChangeListenerCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); +@@ -110,20 +114,21 @@ void AwProxyingRestrictedCookieManager::AddChangeListener( + mojo::MakeRequest(&proxy_listener_ptr)); + + underlying_restricted_cookie_manager_->AddChangeListener( +- url, site_for_cookies, std::move(proxy_listener_ptr), ++ url, site_for_cookies, top_frame_origin, std::move(proxy_listener_ptr), + std::move(callback)); + } + + void AwProxyingRestrictedCookieManager::SetCookieFromString( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + const std::string& cookie, + SetCookieFromStringCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + + if (AllowCookies(url, site_for_cookies)) { + underlying_restricted_cookie_manager_->SetCookieFromString( +- url, site_for_cookies, cookie, std::move(callback)); ++ url, site_for_cookies, top_frame_origin, cookie, std::move(callback)); + } else { + std::move(callback).Run(); + } +@@ -132,12 +137,13 @@ void AwProxyingRestrictedCookieManager::SetCookieFromString( + void AwProxyingRestrictedCookieManager::GetCookiesString( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + GetCookiesStringCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + + if (AllowCookies(url, site_for_cookies)) { + underlying_restricted_cookie_manager_->GetCookiesString( +- url, site_for_cookies, std::move(callback)); ++ url, site_for_cookies, top_frame_origin, std::move(callback)); + } else { + std::move(callback).Run(""); + } +@@ -146,6 +152,7 @@ void AwProxyingRestrictedCookieManager::GetCookiesString( + void AwProxyingRestrictedCookieManager::CookiesEnabledFor( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + CookiesEnabledForCallback callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + std::move(callback).Run(AllowCookies(url, site_for_cookies)); diff --git a/patches/android_webview-browser-network_service-aw_proxying_restricted_cookie_manager.h.patch b/patches/android_webview-browser-network_service-aw_proxying_restricted_cookie_manager.h.patch new file mode 100644 index 00000000000..e4c6ac84b86 --- /dev/null +++ b/patches/android_webview-browser-network_service-aw_proxying_restricted_cookie_manager.h.patch @@ -0,0 +1,39 @@ +diff --git a/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.h b/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.h +index cd7bcb39d9580c5c26a5b65c2abee3f8cc40ed28..3c0523497853c77ce3391f4636d02935d5504590 100644 +--- a/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.h ++++ b/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.h +@@ -35,28 +35,34 @@ class AwProxyingRestrictedCookieManager + // network::mojom::RestrictedCookieManager interface: + void GetAllForUrl(const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + network::mojom::CookieManagerGetOptionsPtr options, + GetAllForUrlCallback callback) override; + void SetCanonicalCookie(const net::CanonicalCookie& cookie, + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + SetCanonicalCookieCallback callback) override; + void AddChangeListener(const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + network::mojom::CookieChangeListenerPtr listener, + AddChangeListenerCallback callback) override; + + void SetCookieFromString(const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + const std::string& cookie, + SetCookieFromStringCallback callback) override; + + void GetCookiesString(const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + GetCookiesStringCallback callback) override; + + void CookiesEnabledFor(const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + CookiesEnabledForCallback callback) override; + + // This one is internal. diff --git a/patches/components-content_settings-core-browser-cookie_settings.cc.patch b/patches/components-content_settings-core-browser-cookie_settings.cc.patch new file mode 100644 index 00000000000..b2c9aef24a4 --- /dev/null +++ b/patches/components-content_settings-core-browser-cookie_settings.cc.patch @@ -0,0 +1,46 @@ +diff --git a/components/content_settings/core/browser/cookie_settings.cc b/components/content_settings/core/browser/cookie_settings.cc +index 44b4fc031d81e6c4fb05ffaf2d103abe347edd29..5de7efb4e8b7695381fc05163c9908544d94fd1c 100644 +--- a/components/content_settings/core/browser/cookie_settings.cc ++++ b/components/content_settings/core/browser/cookie_settings.cc +@@ -17,8 +17,6 @@ + #include "components/pref_registry/pref_registry_syncable.h" + #include "components/prefs/pref_service.h" + #include "extensions/buildflags/buildflags.h" +-#include "net/base/net_errors.h" +-#include "net/base/static_cookie_policy.h" + #include "url/gurl.h" + + namespace content_settings { +@@ -123,10 +121,12 @@ void CookieSettings::ShutdownOnUIThread() { + pref_change_registrar_.RemoveAll(); + } + +-void CookieSettings::GetCookieSetting(const GURL& url, +- const GURL& first_party_url, +- content_settings::SettingSource* source, +- ContentSetting* cookie_setting) const { ++void CookieSettings::GetCookieSettingInternal( ++ const GURL& url, ++ const GURL& first_party_url, ++ bool is_third_party_request, ++ content_settings::SettingSource* source, ++ ContentSetting* cookie_setting) const { + DCHECK(cookie_setting); + // Auto-allow in extensions or for WebUI embedded in a secure origin. + if (first_party_url.SchemeIs(kChromeUIScheme) && +@@ -158,14 +158,11 @@ void CookieSettings::GetCookieSetting(const GURL& url, + info.secondary_pattern.MatchesAllHosts() && + ShouldBlockThirdPartyCookies() && + !first_party_url.SchemeIs(extension_scheme_); +- net::StaticCookiePolicy policy( +- net::StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES); + + // We should always have a value, at least from the default provider. + DCHECK(value); + ContentSetting setting = ValueToContentSetting(value.get()); +- bool block = +- block_third && policy.CanAccessCookies(url, first_party_url) != net::OK; ++ bool block = block_third && is_third_party_request; + *cookie_setting = block ? CONTENT_SETTING_BLOCK : setting; + } + diff --git a/patches/components-content_settings-core-browser-cookie_settings.h.patch b/patches/components-content_settings-core-browser-cookie_settings.h.patch new file mode 100644 index 00000000000..e25752976f0 --- /dev/null +++ b/patches/components-content_settings-core-browser-cookie_settings.h.patch @@ -0,0 +1,31 @@ +diff --git a/components/content_settings/core/browser/cookie_settings.h b/components/content_settings/core/browser/cookie_settings.h +index 481987cec25d7c5bd89a0d6c4342cbde02717c92..941ea0a55e0a1edd2ab8739670b4efd15d0d230e 100644 +--- a/components/content_settings/core/browser/cookie_settings.h ++++ b/components/content_settings/core/browser/cookie_settings.h +@@ -107,12 +107,6 @@ class CookieSettings : public CookieSettingsBase, + // called. + void ShutdownOnUIThread() override; + +- // content_settings::CookieSettingsBase: +- void GetCookieSetting(const GURL& url, +- const GURL& first_party_url, +- content_settings::SettingSource* source, +- ContentSetting* cookie_setting) const override; +- + static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); + + void AddObserver(Observer* obs) { observers_.AddObserver(obs); } +@@ -122,6 +116,13 @@ class CookieSettings : public CookieSettingsBase, + private: + ~CookieSettings() override; + ++ // content_settings::CookieSettingsBase: ++ void GetCookieSettingInternal(const GURL& url, ++ const GURL& first_party_url, ++ bool is_third_party_request, ++ content_settings::SettingSource* source, ++ ContentSetting* cookie_setting) const override; ++ + void OnCookiePreferencesChanged(); + + base::ThreadChecker thread_checker_; diff --git a/patches/components-content_settings-core-common-BUILD.gn.patch b/patches/components-content_settings-core-common-BUILD.gn.patch new file mode 100644 index 00000000000..ae46994a642 --- /dev/null +++ b/patches/components-content_settings-core-common-BUILD.gn.patch @@ -0,0 +1,42 @@ +diff --git a/components/content_settings/core/common/BUILD.gn b/components/content_settings/core/common/BUILD.gn +index f396acdb2e4c1cb114c00bfb7e33c5cdf1ae8995..78123bb06391651e82acf9e77e372eca39c807d4 100644 +--- a/components/content_settings/core/common/BUILD.gn ++++ b/components/content_settings/core/common/BUILD.gn +@@ -18,14 +18,16 @@ jumbo_static_library("common") { + "content_settings_utils.h", + "cookie_settings_base.cc", + "cookie_settings_base.h", +- "features.cc", +- "features.h", + "pref_names.cc", + "pref_names.h", + ] + + configs += [ "//build/config/compiler:wexit_time_destructors" ] + ++ public_deps = [ ++ ":features", ++ ] ++ + deps = [ + "//base", + "//mojo/public/cpp/base", +@@ -62,3 +64,18 @@ mojom("mojo_bindings") { + "//mojo/public/mojom/base", + ] + } ++ ++component("features") { ++ output_name = "content_settings_features" ++ ++ defines = [ "IS_CONTENT_SETTINGS_FEATURES_IMPL" ] ++ ++ sources = [ ++ "features.cc", ++ "features.h", ++ ] ++ ++ deps = [ ++ "//base", ++ ] ++} diff --git a/patches/components-content_settings-core-common-cookie_settings_base.cc.patch b/patches/components-content_settings-core-common-cookie_settings_base.cc.patch index d6efe985711..32321bae8a9 100644 --- a/patches/components-content_settings-core-common-cookie_settings_base.cc.patch +++ b/patches/components-content_settings-core-common-cookie_settings_base.cc.patch @@ -1,12 +1,73 @@ diff --git a/components/content_settings/core/common/cookie_settings_base.cc b/components/content_settings/core/common/cookie_settings_base.cc -index e4909a9b80ed30510843b72f0ede108d500f6ac3..518cc1d8522819572d217a6f7716e0cc912cfd5e 100644 +index e4909a9b80ed30510843b72f0ede108d500f6ac3..e3fb559b8654bb11c28f5d87083f4acfc1adce65 100644 --- a/components/content_settings/core/common/cookie_settings_base.cc +++ b/components/content_settings/core/common/cookie_settings_base.cc -@@ -57,6 +57,7 @@ bool CookieSettingsBase::IsCookieSessionOnly(const GURL& origin) const { - bool CookieSettingsBase::IsValidSetting(ContentSetting setting) { - return (setting == CONTENT_SETTING_ALLOW || - setting == CONTENT_SETTING_SESSION_ONLY || -+ setting == CONTENT_SETTING_DEFAULT || - setting == CONTENT_SETTING_BLOCK); +@@ -3,10 +3,23 @@ + // found in the LICENSE file. + + #include "components/content_settings/core/common/cookie_settings_base.h" ++#include "base/debug/stack_trace.h" ++#include "base/debug/task_trace.h" ++#include "base/feature_list.h" ++#include "components/content_settings/core/common/features.h" ++#include "net/base/net_errors.h" ++#include "net/base/static_cookie_policy.h" + #include "net/cookies/cookie_util.h" + #include "url/gurl.h" + + namespace content_settings { ++namespace { ++bool IsThirdPartyRequest(const GURL& url, const GURL& site_for_cookies) { ++ net::StaticCookiePolicy policy( ++ net::StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES); ++ return policy.CanAccessCookies(url, site_for_cookies) != net::OK; ++} ++} // namespace + + bool CookieSettingsBase::ShouldDeleteCookieOnExit( + const ContentSettingsForOneType& cookie_settings, +@@ -38,14 +51,44 @@ bool CookieSettingsBase::ShouldDeleteCookieOnExit( + return setting == CONTENT_SETTING_SESSION_ONLY || matches_session_only_rule; + } + ++void CookieSettingsBase::GetCookieSetting( ++ const GURL& url, ++ const GURL& first_party_url, ++ content_settings::SettingSource* source, ++ ContentSetting* cookie_setting) const { ++ GetCookieSettingInternal(url, first_party_url, ++ IsThirdPartyRequest(url, first_party_url), source, ++ cookie_setting); ++} ++ + bool CookieSettingsBase::IsCookieAccessAllowed( + const GURL& url, + const GURL& first_party_url) const { ++ DCHECK(!base::FeatureList::IsEnabled(kImprovedCookieControls) || ++ !first_party_url.is_empty() || url.is_empty()); + ContentSetting setting; + GetCookieSetting(url, first_party_url, nullptr, &setting); + return IsAllowed(setting); } ++bool CookieSettingsBase::IsCookieAccessAllowed( ++ const GURL& url, ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const { ++ // TODO(crbug.com/988398): top_frame_origin is not yet always available. ++ // Ensure that the DCHECK always passes and remove the FeatureList check. ++ if (!base::FeatureList::IsEnabled(kImprovedCookieControls)) ++ return IsCookieAccessAllowed(url, site_for_cookies); ++ DCHECK(top_frame_origin || site_for_cookies.is_empty()) ++ << url << " " << site_for_cookies; ++ ++ ContentSetting setting; ++ GetCookieSettingInternal( ++ url, top_frame_origin ? top_frame_origin->GetURL() : GURL(), ++ IsThirdPartyRequest(url, site_for_cookies), nullptr, &setting); ++ return IsAllowed(setting); ++} ++ + bool CookieSettingsBase::IsCookieSessionOnly(const GURL& origin) const { + ContentSetting setting; + GetCookieSetting(origin, origin, nullptr, &setting); diff --git a/patches/components-content_settings-core-common-cookie_settings_base.h.patch b/patches/components-content_settings-core-common-cookie_settings_base.h.patch new file mode 100644 index 00000000000..e1a2761849b --- /dev/null +++ b/patches/components-content_settings-core-common-cookie_settings_base.h.patch @@ -0,0 +1,114 @@ +diff --git a/components/content_settings/core/common/cookie_settings_base.h b/components/content_settings/core/common/cookie_settings_base.h +index e23181772fe8d3278c3c08ab2b3bc9178847162c..e9b045ca6a3507db9fc32fd581a94c1ec9916abc 100644 +--- a/components/content_settings/core/common/cookie_settings_base.h ++++ b/components/content_settings/core/common/cookie_settings_base.h +@@ -7,10 +7,53 @@ + + #include + ++#include "base/optional.h" + #include "components/content_settings/core/common/content_settings.h" + ++namespace url { ++class Origin; ++} ++ + namespace content_settings { + ++// Many CookieSettings methods handle the parameters |url|, |site_for_cookies| ++// |top_frame_origin| and |first_party_url|. ++// ++// |url| is the URL of the requested resource. ++// |site_for_cookies| is usually the URL shown in the omnibox but can also be ++// empty, e.g. for subresource loads initiated from cross-site iframes, and is ++// used to determine if a request is done in a third-party context. ++// |top_frame_origin| is the origin shown in the omnibox. ++// ++// Example: ++// https://a.com/index.html ++// ++// ++// ++// ++// ++// ++// When each of these resources get fetched, |top_frame_origin| will always be ++// "https://a.com" and |site_for_cookies| is set the following: ++// https://a.com/index.html -> https://a.com/ (1p request) ++// https://b.com/frame.html -> https://a.com/ (3p request) ++// https://a.com/img.jpg -> (treated as 3p request) ++// https://b.com/img.jpg -> (3p because from cross site iframe) ++// https://c.com/img.jpg -> (3p request in cross site iframe) ++// ++// Content settings can be used to allow or block access to cookies. ++// When third-party cookies are blocked, an ALLOW setting will give access to ++// cookies in third-party contexts. ++// The primary pattern of each setting is matched against |url|. ++// The secondary pattern is matched against |top_frame_origin|. ++// ++// Some methods only take |url| and |first_party_url|. For |first_party_url|, ++// clients either pass a value that is like |site_for_cookies| or ++// |top_frame_origin|. This is done inconsistently and needs to be fixed. + class CookieSettingsBase { + public: + CookieSettingsBase() = default; +@@ -31,12 +74,25 @@ class CookieSettingsBase { + bool is_https) const; + + // Returns true if the page identified by (|url|, |first_party_url|) is +- // allowed to access (i.e., read or write) cookies. ++ // allowed to access (i.e., read or write) cookies. |first_party_url| ++ // is used to determine third-party-ness of |url|. + // + // This may be called on any thread. ++ // DEPRECATED: Replace with IsCookieAccessAllowed(GURL, GURL, Origin). + bool IsCookieAccessAllowed(const GURL& url, + const GURL& first_party_url) const; + ++ // Similar to IsCookieAccessAllowed(GURL, GURL) but provides a mechanism ++ // to specify a separate |site_for_cookies|, which is used to determine ++ // whether a request is in a third_party context and |top_frame_origin|, which ++ // is used to check if there are any content_settings exceptions. ++ // |top_frame_origin| should at least be specified when |site_for_cookies| is ++ // non-empty. ++ bool IsCookieAccessAllowed( ++ const GURL& url, ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const; ++ + // Returns true if the cookie set by a page identified by |url| should be + // session only. Querying this only makes sense if |IsCookieAccessAllowed| + // has returned true. +@@ -45,10 +101,10 @@ class CookieSettingsBase { + bool IsCookieSessionOnly(const GURL& url) const; + + // A helper for applying third party cookie blocking rules. +- virtual void GetCookieSetting(const GURL& url, +- const GURL& first_party_url, +- content_settings::SettingSource* source, +- ContentSetting* cookie_setting) const = 0; ++ void GetCookieSetting(const GURL& url, ++ const GURL& first_party_url, ++ content_settings::SettingSource* source, ++ ContentSetting* cookie_setting) const; + + // Determines whether |setting| is a valid content setting for cookies. + static bool IsValidSetting(ContentSetting setting); +@@ -56,6 +112,13 @@ class CookieSettingsBase { + static bool IsAllowed(ContentSetting setting); + + private: ++ virtual void GetCookieSettingInternal( ++ const GURL& url, ++ const GURL& first_party_url, ++ bool is_third_party_request, ++ content_settings::SettingSource* source, ++ ContentSetting* cookie_setting) const = 0; ++ + DISALLOW_COPY_AND_ASSIGN(CookieSettingsBase); + }; + diff --git a/patches/components-content_settings-core-common-features.h.patch b/patches/components-content_settings-core-common-features.h.patch new file mode 100644 index 00000000000..f431764d8a3 --- /dev/null +++ b/patches/components-content_settings-core-common-features.h.patch @@ -0,0 +1,21 @@ +diff --git a/components/content_settings/core/common/features.h b/components/content_settings/core/common/features.h +index 817b2f1cc784f71a5174613dfe8a419a31aa755e..846d495ef9d157afc6f7d1f01dedb6f36d0ce8db 100644 +--- a/components/content_settings/core/common/features.h ++++ b/components/content_settings/core/common/features.h +@@ -5,6 +5,8 @@ + #ifndef COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_FEATURES_H_ + #define COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_FEATURES_H_ + ++#include "base/component_export.h" ++ + namespace base { + struct Feature; + } // namespace base +@@ -12,6 +14,7 @@ struct Feature; + namespace content_settings { + + // Feature to enable a better cookie controls ui. ++COMPONENT_EXPORT(CONTENT_SETTINGS_FEATURES) + extern const base::Feature kImprovedCookieControls; + + } // namespace content_settings diff --git a/patches/content-browser-media-android-media_resource_getter_impl.cc.patch b/patches/content-browser-media-android-media_resource_getter_impl.cc.patch new file mode 100644 index 00000000000..dd2fe0f1f87 --- /dev/null +++ b/patches/content-browser-media-android-media_resource_getter_impl.cc.patch @@ -0,0 +1,25 @@ +diff --git a/content/browser/media/android/media_resource_getter_impl.cc b/content/browser/media/android/media_resource_getter_impl.cc +index 5bf938f1ca81db832c1d6b0a1b522c06f09755b1..791058e5f549d26097cff0c2fec436de60d84cf7 100644 +--- a/content/browser/media/android/media_resource_getter_impl.cc ++++ b/content/browser/media/android/media_resource_getter_impl.cc +@@ -23,6 +23,7 @@ + #include "net/http/http_auth.h" + #include "services/network/public/mojom/restricted_cookie_manager.mojom.h" + #include "url/gurl.h" ++#include "url/origin.h" + + namespace content { + +@@ -148,8 +149,11 @@ void MediaResourceGetterImpl::GetCookies(const GURL& url, + browser_context_, url, render_process_id_, render_frame_id_); + network::mojom::RestrictedCookieManager* cookie_manager_ptr = + cookie_manager.get(); ++ // TODO(crbug.com/988398): Same check as in mojo_renderer_service.cc. Is this ++ // correct? ++ DCHECK(!site_for_cookies.is_empty()); + cookie_manager_ptr->GetCookiesString( +- url, site_for_cookies, ++ url, site_for_cookies, url::Origin::Create(site_for_cookies), + base::BindOnce(&ReturnResultOnUIThreadAndClosePipe, + std::move(cookie_manager), std::move(callback))); + } diff --git a/patches/content-test-data-browsing_data-site_data.html.patch b/patches/content-test-data-browsing_data-site_data.html.patch new file mode 100644 index 00000000000..370e2055d82 --- /dev/null +++ b/patches/content-test-data-browsing_data-site_data.html.patch @@ -0,0 +1,29 @@ +diff --git a/content/test/data/browsing_data/site_data.html b/content/test/data/browsing_data/site_data.html +index 5e798c8284a3976791f3d40e2a538ce43d10b6cb..0a2a8883d0bc6a1f430e9859853bc3a0730a01ba 100644 +--- a/content/test/data/browsing_data/site_data.html ++++ b/content/test/data/browsing_data/site_data.html +@@ -74,7 +74,7 @@ + function openFile_(name, options, callback, error) { + window.webkitRequestFileSystem(TEMPORARY, 1024, function (fs) { + fs.root.getFile(name, options, callback, error); +- }); ++ }, error); + } + + function setFileSystem() { +@@ -113,6 +113,7 @@ + open.result.close(); + success_(); + } ++ open.onerror = failure_; + } + + function hasIndexedDb() { +@@ -122,6 +123,7 @@ + open.result.close(); + domAutomationController.send(hasStore); + } ++ open.onerror = failure_; + } + + function setHistory() { diff --git a/patches/net-base-layered_network_delegate.cc.patch b/patches/net-base-layered_network_delegate.cc.patch new file mode 100644 index 00000000000..3ca15b17e44 --- /dev/null +++ b/patches/net-base-layered_network_delegate.cc.patch @@ -0,0 +1,26 @@ +diff --git a/net/base/layered_network_delegate.cc b/net/base/layered_network_delegate.cc +index 9f47088ed705af2fcaac3a5f9a771bd66e296696..f901dccc77b265cb4df0d03bc3702f29b27c1139 100644 +--- a/net/base/layered_network_delegate.cc ++++ b/net/base/layered_network_delegate.cc +@@ -229,14 +229,17 @@ void LayeredNetworkDelegate::OnCanAccessFileInternal( + + bool LayeredNetworkDelegate::OnForcePrivacyMode( + const GURL& url, +- const GURL& site_for_cookies) const { +- return OnForcePrivacyModeInternal(url, site_for_cookies) || +- nested_network_delegate_->ForcePrivacyMode(url, site_for_cookies); ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const { ++ return OnForcePrivacyModeInternal(url, site_for_cookies, top_frame_origin) || ++ nested_network_delegate_->ForcePrivacyMode(url, site_for_cookies, ++ top_frame_origin); + } + + bool LayeredNetworkDelegate::OnForcePrivacyModeInternal( + const GURL& url, +- const GURL& site_for_cookies) const { ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const { + return false; + } + diff --git a/patches/net-base-layered_network_delegate.h.patch b/patches/net-base-layered_network_delegate.h.patch new file mode 100644 index 00000000000..8df5ab2f4ab --- /dev/null +++ b/patches/net-base-layered_network_delegate.h.patch @@ -0,0 +1,30 @@ +diff --git a/net/base/layered_network_delegate.h b/net/base/layered_network_delegate.h +index 9c65037ba7901a038365079e6b613c6308aa109d..e8c855c93440d5bf1daabc54857f4014306c72a4 100644 +--- a/net/base/layered_network_delegate.h ++++ b/net/base/layered_network_delegate.h +@@ -89,8 +89,10 @@ class NET_EXPORT LayeredNetworkDelegate : public NetworkDelegate { + bool OnCanAccessFile(const URLRequest& request, + const base::FilePath& original_path, + const base::FilePath& absolute_path) const final; +- bool OnForcePrivacyMode(const GURL& url, +- const GURL& site_for_cookies) const final; ++ bool OnForcePrivacyMode( ++ const GURL& url, ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const final; + bool OnCancelURLRequestWithPolicyViolatingReferrerHeader( + const URLRequest& request, + const GURL& target_url, +@@ -170,8 +172,10 @@ class NET_EXPORT LayeredNetworkDelegate : public NetworkDelegate { + + // If this returns false, it short circuits the corresponding call in any + // nested NetworkDelegates. +- virtual bool OnForcePrivacyModeInternal(const GURL& url, +- const GURL& site_for_cookies) const; ++ virtual bool OnForcePrivacyModeInternal( ++ const GURL& url, ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const; + + // If this returns false, it short circuits the corresponding call in any + // nested NetworkDelegates. diff --git a/patches/net-base-network_delegate.cc.patch b/patches/net-base-network_delegate.cc.patch new file mode 100644 index 00000000000..2bfd5c1099d --- /dev/null +++ b/patches/net-base-network_delegate.cc.patch @@ -0,0 +1,21 @@ +diff --git a/net/base/network_delegate.cc b/net/base/network_delegate.cc +index d0f24537117038110493452c4736952653a4f775..dae5c827ae4cb03aa3cc8bd30a6601fd727733ae 100644 +--- a/net/base/network_delegate.cc ++++ b/net/base/network_delegate.cc +@@ -165,11 +165,13 @@ bool NetworkDelegate::CanAccessFile(const URLRequest& request, + return OnCanAccessFile(request, original_path, absolute_path); + } + +-bool NetworkDelegate::ForcePrivacyMode(const GURL& url, +- const GURL& site_for_cookies) const { ++bool NetworkDelegate::ForcePrivacyMode( ++ const GURL& url, ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const { + TRACE_EVENT0(NetTracingCategory(), "NetworkDelegate::ForcePrivacyMode"); + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); +- return OnForcePrivacyMode(url, site_for_cookies); ++ return OnForcePrivacyMode(url, site_for_cookies, top_frame_origin); + } + + bool NetworkDelegate::CancelURLRequestWithPolicyViolatingReferrerHeader( diff --git a/patches/net-base-network_delegate.h.patch b/patches/net-base-network_delegate.h.patch new file mode 100644 index 00000000000..ec1bc98f663 --- /dev/null +++ b/patches/net-base-network_delegate.h.patch @@ -0,0 +1,29 @@ +diff --git a/net/base/network_delegate.h b/net/base/network_delegate.h +index 49fe875c7d22b4880a7a97dda36ffa401855bdcc..e511559b76a9d8d648887ca624fa5a9752f24eb9 100644 +--- a/net/base/network_delegate.h ++++ b/net/base/network_delegate.h +@@ -106,7 +106,10 @@ class NET_EXPORT NetworkDelegate { + bool CanAccessFile(const URLRequest& request, + const base::FilePath& original_path, + const base::FilePath& absolute_path) const; +- bool ForcePrivacyMode(const GURL& url, const GURL& site_for_cookies) const; ++ bool ForcePrivacyMode( ++ const GURL& url, ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const; + + bool CancelURLRequestWithPolicyViolatingReferrerHeader( + const URLRequest& request, +@@ -316,8 +319,10 @@ class NET_EXPORT NetworkDelegate { + // Returns true if the given |url| has to be requested over connection that + // is not tracked by the server. Usually is false, unless user privacy + // settings block cookies from being get or set. +- virtual bool OnForcePrivacyMode(const GURL& url, +- const GURL& site_for_cookies) const = 0; ++ virtual bool OnForcePrivacyMode( ++ const GURL& url, ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const = 0; + + // Called when the |referrer_url| for requesting |target_url| during handling + // of the |request| is does not comply with the referrer policy (e.g. a diff --git a/patches/net-base-network_delegate_impl.cc.patch b/patches/net-base-network_delegate_impl.cc.patch new file mode 100644 index 00000000000..59c30e20894 --- /dev/null +++ b/patches/net-base-network_delegate_impl.cc.patch @@ -0,0 +1,14 @@ +diff --git a/net/base/network_delegate_impl.cc b/net/base/network_delegate_impl.cc +index e6656f525e8e8dbc03c3834805e97d232dc4a218..088e5eba482fd7e37a7c603d716794b3bdf2ec49 100644 +--- a/net/base/network_delegate_impl.cc ++++ b/net/base/network_delegate_impl.cc +@@ -93,7 +93,8 @@ bool NetworkDelegateImpl::OnCanAccessFile( + + bool NetworkDelegateImpl::OnForcePrivacyMode( + const GURL& url, +- const GURL& site_for_cookies) const { ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const { + return false; + } + diff --git a/patches/net-base-network_delegate_impl.h.patch b/patches/net-base-network_delegate_impl.h.patch new file mode 100644 index 00000000000..f1da2cc1b42 --- /dev/null +++ b/patches/net-base-network_delegate_impl.h.patch @@ -0,0 +1,17 @@ +diff --git a/net/base/network_delegate_impl.h b/net/base/network_delegate_impl.h +index e1c0fa7c1dd709abb837256bd733211bc5c5dde6..bde4910c61595e575e81d0865cd0e0007d584c4f 100644 +--- a/net/base/network_delegate_impl.h ++++ b/net/base/network_delegate_impl.h +@@ -95,8 +95,10 @@ class NET_EXPORT NetworkDelegateImpl : public NetworkDelegate { + const base::FilePath& original_path, + const base::FilePath& absolute_path) const override; + +- bool OnForcePrivacyMode(const GURL& url, +- const GURL& site_for_cookies) const override; ++ bool OnForcePrivacyMode( ++ const GURL& url, ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const override; + + bool OnCancelURLRequestWithPolicyViolatingReferrerHeader( + const URLRequest& request, diff --git a/patches/net-url_request-url_request.cc.patch b/patches/net-url_request-url_request.cc.patch new file mode 100644 index 00000000000..8b59b6f0fb3 --- /dev/null +++ b/patches/net-url_request-url_request.cc.patch @@ -0,0 +1,15 @@ +diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc +index 736dddbe7d647912b613c84385a2314a941fbd7e..5fec72700c49bbcf9b64713f05b1c5e53e1e96c2 100644 +--- a/net/url_request/url_request.cc ++++ b/net/url_request/url_request.cc +@@ -1155,8 +1155,8 @@ net::PrivacyMode URLRequest::DeterminePrivacyMode() const { + // with the network service - remove it. + bool enable_privacy_mode = !g_default_can_use_cookies; + if (network_delegate_) { +- enable_privacy_mode = +- network_delegate_->ForcePrivacyMode(url(), site_for_cookies_); ++ enable_privacy_mode = network_delegate_->ForcePrivacyMode( ++ url(), site_for_cookies_, network_isolation_key_.GetTopFrameOrigin()); + } + return enable_privacy_mode ? PRIVACY_MODE_ENABLED : PRIVACY_MODE_DISABLED; + } diff --git a/patches/services-network-cookie_settings.cc.patch b/patches/services-network-cookie_settings.cc.patch new file mode 100644 index 00000000000..2ec04de4af5 --- /dev/null +++ b/patches/services-network-cookie_settings.cc.patch @@ -0,0 +1,41 @@ +diff --git a/services/network/cookie_settings.cc b/services/network/cookie_settings.cc +index 0f56483e3e6c0f8ab2c1c3502ef112567ac0e301..14c953deed882e0b84aab95e9f2f2af2f1533d88 100644 +--- a/services/network/cookie_settings.cc ++++ b/services/network/cookie_settings.cc +@@ -7,8 +7,6 @@ + #include + + #include "base/bind.h" +-#include "net/base/net_errors.h" +-#include "net/base/static_cookie_policy.h" + + namespace network { + namespace { +@@ -30,10 +28,12 @@ CookieSettings::CreateDeleteCookieOnExitPredicate() const { + std::cref(content_settings_)); + } + +-void CookieSettings::GetCookieSetting(const GURL& url, +- const GURL& first_party_url, +- content_settings::SettingSource* source, +- ContentSetting* cookie_setting) const { ++void CookieSettings::GetCookieSettingInternal( ++ const GURL& url, ++ const GURL& first_party_url, ++ bool is_third_party_request, ++ content_settings::SettingSource* source, ++ ContentSetting* cookie_setting) const { + if (base::Contains(secure_origin_cookies_allowed_schemes_, + first_party_url.scheme()) && + url.SchemeIsCryptographic()) { +@@ -64,9 +64,7 @@ void CookieSettings::GetCookieSetting(const GURL& url, + } + } + +- net::StaticCookiePolicy policy( +- net::StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES); +- if (block_third && policy.CanAccessCookies(url, first_party_url) != net::OK) ++ if (block_third && is_third_party_request) + *cookie_setting = CONTENT_SETTING_BLOCK; + } + diff --git a/patches/services-network-cookie_settings.h.patch b/patches/services-network-cookie_settings.h.patch new file mode 100644 index 00000000000..7f58f59139c --- /dev/null +++ b/patches/services-network-cookie_settings.h.patch @@ -0,0 +1,24 @@ +diff --git a/services/network/cookie_settings.h b/services/network/cookie_settings.h +index 578af6b3722acc6a906b0cbe21ade34588148208..37814938c2341facb4bc9ae6a63499bf958a5637 100644 +--- a/services/network/cookie_settings.h ++++ b/services/network/cookie_settings.h +@@ -59,13 +59,14 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) CookieSettings + SessionCleanupCookieStore::DeleteCookiePredicate + CreateDeleteCookieOnExitPredicate() const; + ++ private: + // content_settings::CookieSettingsBase: +- void GetCookieSetting(const GURL& url, +- const GURL& first_party_url, +- content_settings::SettingSource* source, +- ContentSetting* cookie_setting) const override; ++ void GetCookieSettingInternal(const GURL& url, ++ const GURL& first_party_url, ++ bool is_third_party_request, ++ content_settings::SettingSource* source, ++ ContentSetting* cookie_setting) const override; + +- private: + // Returns true if at least one content settings is session only. + bool HasSessionOnlyOrigins() const; + diff --git a/patches/services-network-network_context.cc.patch b/patches/services-network-network_context.cc.patch index f7fcbd19681..6b5dde1c1f9 100644 --- a/patches/services-network-network_context.cc.patch +++ b/patches/services-network-network_context.cc.patch @@ -1,20 +1,48 @@ diff --git a/services/network/network_context.cc b/services/network/network_context.cc -index dffa1299b1cfce8609313435769189495fd8ccb5..dfe55713c506a5226478461ec4b20fd09c2d7833 100644 +index dffa1299b1cfce8609313435769189495fd8ccb5..aa933b21d1bca10bcc85a4a5b2287340979587cb 100644 --- a/services/network/network_context.cc +++ b/services/network/network_context.cc -@@ -439,6 +439,7 @@ class NetworkContext::ContextNetworkDelegate - bool OnCanGetCookiesInternal(const net::URLRequest& request, - const net::CookieList& cookie_list, - bool allowed_from_caller) override { -+ BRAVE_ON_CAN_GET_COOKIES_INTERNAL +@@ -62,6 +62,7 @@ + #include "net/traffic_annotation/network_traffic_annotation.h" + #include "net/url_request/report_sender.h" + #include "net/url_request/static_http_user_agent_settings.h" ++#include "net/url_request/url_request.h" + #include "net/url_request/url_request_context.h" + #include "net/url_request/url_request_context_builder.h" + #include "services/network/cookie_manager.h" +@@ -442,8 +443,9 @@ class NetworkContext::ContextNetworkDelegate return allowed_from_caller && network_context_->cookie_manager() ->cookie_settings() -@@ -450,6 +451,7 @@ class NetworkContext::ContextNetworkDelegate - const net::CanonicalCookie& cookie, - net::CookieOptions* options, - bool allowed_from_caller) override { -+ BRAVE_ON_CAN_SET_COOKIES_INTERNAL +- .IsCookieAccessAllowed(request.url(), +- request.site_for_cookies()); ++ .IsCookieAccessAllowed( ++ request.url(), request.site_for_cookies(), ++ request.network_isolation_key().GetTopFrameOrigin()); + } + + bool OnCanSetCookieInternal(const net::URLRequest& request, +@@ -453,15 +455,18 @@ class NetworkContext::ContextNetworkDelegate return allowed_from_caller && network_context_->cookie_manager() ->cookie_settings() +- .IsCookieAccessAllowed(request.url(), +- request.site_for_cookies()); ++ .IsCookieAccessAllowed( ++ request.url(), request.site_for_cookies(), ++ request.network_isolation_key().GetTopFrameOrigin()); + } + +- bool OnForcePrivacyModeInternal(const GURL& url, +- const GURL& site_for_cookies) const override { ++ bool OnForcePrivacyModeInternal( ++ const GURL& url, ++ const GURL& site_for_cookies, ++ const base::Optional& top_frame_origin) const override { + return !network_context_->cookie_manager() + ->cookie_settings() +- .IsCookieAccessAllowed(url, site_for_cookies); ++ .IsCookieAccessAllowed(url, site_for_cookies, top_frame_origin); + } + + void OnResponseStartedInternal(net::URLRequest* request, diff --git a/patches/services-network-public-mojom-restricted_cookie_manager.mojom.patch b/patches/services-network-public-mojom-restricted_cookie_manager.mojom.patch new file mode 100644 index 00000000000..c57923003f7 --- /dev/null +++ b/patches/services-network-public-mojom-restricted_cookie_manager.mojom.patch @@ -0,0 +1,70 @@ +diff --git a/services/network/public/mojom/restricted_cookie_manager.mojom b/services/network/public/mojom/restricted_cookie_manager.mojom +index daf226db5b312592cda7421022076f0fa0b29230..8f487f1e2490277e90abebb276e3480f7af716b6 100644 +--- a/services/network/public/mojom/restricted_cookie_manager.mojom ++++ b/services/network/public/mojom/restricted_cookie_manager.mojom +@@ -7,6 +7,7 @@ module network.mojom; + import "services/network/public/mojom/cookie_manager.mojom"; + import "mojo/public/mojom/base/time.mojom"; + import "url/mojom/url.mojom"; ++import "url/mojom/origin.mojom"; + + enum CookieMatchType { + EQUALS, +@@ -56,19 +57,26 @@ interface RestrictedCookieManager { + // |url| is an URL capable of receiving HTTP requests. |site_for_cookies| is + // the "site for cookies" values defined in RFC 6265bis, and roughly maps to + // the URL of the top-level frame in Document contexts, and to the script URL +- // in service workers. |options| filters the returned list of cookies. ++ // in service workers. |top_frame_origin| is the actual origin of the top ++ // level frame or the script url for service workers. |site_for_cookies| is ++ // used to determine if a cookie is accessed in a third-party context. ++ // |top_frame_origin| is used to check for content settings. ++ // |options| filters the returned list of cookies. + GetAllForUrl( + url.mojom.Url url, url.mojom.Url site_for_cookies, ++ url.mojom.Origin top_frame_origin, + CookieManagerGetOptions options) => (array cookies); + + SetCanonicalCookie(CanonicalCookie cookie, + url.mojom.Url url, +- url.mojom.Url site_for_cookies) => (bool success); ++ url.mojom.Url site_for_cookies, ++ url.mojom.Origin top_frame_origin) => (bool success); + + // Subscribes to changes in the cookies transmitted in a request to an URL. + // + // The subscription is canceled by closing the pipe. + AddChangeListener(url.mojom.Url url, url.mojom.Url site_for_cookies, ++ url.mojom.Origin top_frame_origin, + CookieChangeListener listener) => (); + + // Sets a cookie. If setting of this cookie is not permitted either by web +@@ -81,6 +89,7 @@ interface RestrictedCookieManager { + // to serialize with other operations. + [Sync] + SetCookieFromString(url.mojom.Url url, url.mojom.Url site_for_cookies, ++ url.mojom.Origin top_frame_origin, + string cookie) => (); + + // Used to get cookies for the given URL. Cookies that are blocked by user +@@ -92,7 +101,8 @@ interface RestrictedCookieManager { + // is bounded to will be treated as the renderer violating security rules. + [Sync] + GetCookiesString(url.mojom.Url url, +- url.mojom.Url site_for_cookies) => (string cookies); ++ url.mojom.Url site_for_cookies, ++ url.mojom.Origin top_frame_origin) => (string cookies); + + // Used to check if cookies are enabled for the given URL in context of a + // given site. +@@ -100,6 +110,8 @@ interface RestrictedCookieManager { + // Passing in |url| that does not match the origin RestrictedCookieManager + // is bounded to will be treated as the renderer violating security rules. + [Sync] +- CookiesEnabledFor(url.mojom.Url url, +- url.mojom.Url site_for_cookies) => (bool cookies_enabled); ++ CookiesEnabledFor( ++ url.mojom.Url url, ++ url.mojom.Url site_for_cookies, ++ url.mojom.Origin top_frame_origin) => (bool cookies_enabled); + }; diff --git a/patches/services-network-restricted_cookie_manager.cc.patch b/patches/services-network-restricted_cookie_manager.cc.patch new file mode 100644 index 00000000000..456ad5f1936 --- /dev/null +++ b/patches/services-network-restricted_cookie_manager.cc.patch @@ -0,0 +1,170 @@ +diff --git a/services/network/restricted_cookie_manager.cc b/services/network/restricted_cookie_manager.cc +index 0cf25a1761c1c1cd877a320eb9fd0192c4577822..f1825513f128876d504c05ba392b9def29c53549 100644 +--- a/services/network/restricted_cookie_manager.cc ++++ b/services/network/restricted_cookie_manager.cc +@@ -78,11 +78,13 @@ class RestrictedCookieManager::Listener : public base::LinkNode { + const RestrictedCookieManager* restricted_cookie_manager, + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + net::CookieOptions options, + mojom::CookieChangeListenerPtr mojo_listener) + : restricted_cookie_manager_(restricted_cookie_manager), + url_(url), + site_for_cookies_(site_for_cookies), ++ top_frame_origin_(top_frame_origin), + options_(options), + mojo_listener_(std::move(mojo_listener)) { + // TODO(pwnall): add a constructor w/options to net::CookieChangeDispatcher. +@@ -119,7 +121,7 @@ class RestrictedCookieManager::Listener : public base::LinkNode { + // being deleted at a later time, which can happen due to eviction or due to + // the user explicitly deleting all cookies. + if (!restricted_cookie_manager_->cookie_settings()->IsCookieAccessAllowed( +- url_, site_for_cookies_)) ++ url_, site_for_cookies_, top_frame_origin_)) + return; + + mojo_listener_->OnCookieChange(cookie, ToCookieChangeCause(cause)); +@@ -135,9 +137,13 @@ class RestrictedCookieManager::Listener : public base::LinkNode { + // The URL whose cookies this listener is interested in. + const GURL url_; + +- // Site context in which we're used; used for permission-checking. ++ // Site context in which we're used; used to determine if a cookie is accessed ++ // in a third-party context. + const GURL site_for_cookies_; + ++ // Site context in which we're used; used to check content settings. ++ const url::Origin top_frame_origin_; ++ + // CanonicalCookie::IncludeForRequestURL options for this listener's interest. + const net::CookieOptions options_; + +@@ -183,6 +189,7 @@ RestrictedCookieManager::~RestrictedCookieManager() { + void RestrictedCookieManager::GetAllForUrl( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + mojom::CookieManagerGetOptionsPtr options, + GetAllForUrlCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +@@ -204,12 +211,14 @@ void RestrictedCookieManager::GetAllForUrl( + url, net_options, + base::BindOnce(&RestrictedCookieManager::CookieListToGetAllForUrlCallback, + weak_ptr_factory_.GetWeakPtr(), url, site_for_cookies, +- net_options, std::move(options), std::move(callback))); ++ top_frame_origin, net_options, std::move(options), ++ std::move(callback))); + } + + void RestrictedCookieManager::CookieListToGetAllForUrlCallback( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + const net::CookieOptions& net_options, + mojom::CookieManagerGetOptionsPtr options, + GetAllForUrlCallback callback, +@@ -217,8 +226,8 @@ void RestrictedCookieManager::CookieListToGetAllForUrlCallback( + const net::CookieStatusList& excluded_cookies) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + +- bool blocked = +- !cookie_settings_->IsCookieAccessAllowed(url, site_for_cookies); ++ bool blocked = !cookie_settings_->IsCookieAccessAllowed(url, site_for_cookies, ++ top_frame_origin); + + std::vector result; + std::vector result_with_status; +@@ -294,6 +303,7 @@ void RestrictedCookieManager::SetCanonicalCookie( + const net::CanonicalCookie& cookie, + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + SetCanonicalCookieCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!ValidateAccessToCookiesAt(url)) { +@@ -302,8 +312,8 @@ void RestrictedCookieManager::SetCanonicalCookie( + } + + // TODO(morlovich): Try to validate site_for_cookies as well. +- bool blocked = +- !cookie_settings_->IsCookieAccessAllowed(url, site_for_cookies); ++ bool blocked = !cookie_settings_->IsCookieAccessAllowed(url, site_for_cookies, ++ top_frame_origin); + + if (blocked) { + if (network_context_client_) { +@@ -376,6 +386,7 @@ void RestrictedCookieManager::SetCanonicalCookieResult( + void RestrictedCookieManager::AddChangeListener( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + mojom::CookieChangeListenerPtr mojo_listener, + AddChangeListenerCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +@@ -386,9 +397,9 @@ void RestrictedCookieManager::AddChangeListener( + + net::CookieOptions net_options = + MakeOptionsForGet(role_, url, site_for_cookies); +- auto listener = +- std::make_unique(cookie_store_, this, url, site_for_cookies, +- net_options, std::move(mojo_listener)); ++ auto listener = std::make_unique( ++ cookie_store_, this, url, site_for_cookies, top_frame_origin, net_options, ++ std::move(mojo_listener)); + + listener->mojo_listener().set_connection_error_handler( + base::BindOnce(&RestrictedCookieManager::RemoveChangeListener, +@@ -406,6 +417,7 @@ void RestrictedCookieManager::AddChangeListener( + void RestrictedCookieManager::SetCookieFromString( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + const std::string& cookie, + SetCookieFromStringCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +@@ -421,7 +433,7 @@ void RestrictedCookieManager::SetCookieFromString( + // Further checks (origin_, settings), as well as logging done by + // SetCanonicalCookie() + SetCanonicalCookie( +- *parsed_cookie, url, site_for_cookies, ++ *parsed_cookie, url, site_for_cookies, top_frame_origin, + base::BindOnce([](SetCookieFromStringCallback user_callback, + bool success) { std::move(user_callback).Run(); }, + std::move(callback))); +@@ -430,6 +442,7 @@ void RestrictedCookieManager::SetCookieFromString( + void RestrictedCookieManager::GetCookiesString( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + GetCookiesStringCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // Checks done by GetAllForUrl. +@@ -438,7 +451,8 @@ void RestrictedCookieManager::GetCookiesString( + auto match_options = mojom::CookieManagerGetOptions::New(); + match_options->name = ""; + match_options->match_type = mojom::CookieMatchType::STARTS_WITH; +- GetAllForUrl(url, site_for_cookies, std::move(match_options), ++ GetAllForUrl(url, site_for_cookies, top_frame_origin, ++ std::move(match_options), + base::BindOnce( + [](GetCookiesStringCallback user_callback, + const std::vector& cookies) { +@@ -451,14 +465,15 @@ void RestrictedCookieManager::GetCookiesString( + void RestrictedCookieManager::CookiesEnabledFor( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + CookiesEnabledForCallback callback) { + if (!ValidateAccessToCookiesAt(url)) { + std::move(callback).Run(false); + return; + } + +- std::move(callback).Run( +- cookie_settings_->IsCookieAccessAllowed(url, site_for_cookies)); ++ std::move(callback).Run(cookie_settings_->IsCookieAccessAllowed( ++ url, site_for_cookies, top_frame_origin)); + } + + void RestrictedCookieManager::RemoveChangeListener(Listener* listener) { diff --git a/patches/services-network-restricted_cookie_manager.h.patch b/patches/services-network-restricted_cookie_manager.h.patch new file mode 100644 index 00000000000..707ea72c3f9 --- /dev/null +++ b/patches/services-network-restricted_cookie_manager.h.patch @@ -0,0 +1,48 @@ +diff --git a/services/network/restricted_cookie_manager.h b/services/network/restricted_cookie_manager.h +index 6f00581da9dc55a3d4d51bb0d2477bd80d67e561..0eb1cc7420e0d3e073ed150b529ad1cd96f11dd3 100644 +--- a/services/network/restricted_cookie_manager.h ++++ b/services/network/restricted_cookie_manager.h +@@ -60,29 +60,35 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) RestrictedCookieManager + + void GetAllForUrl(const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + mojom::CookieManagerGetOptionsPtr options, + GetAllForUrlCallback callback) override; + + void SetCanonicalCookie(const net::CanonicalCookie& cookie, + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + SetCanonicalCookieCallback callback) override; + + void AddChangeListener(const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + mojom::CookieChangeListenerPtr listener, + AddChangeListenerCallback callback) override; + + void SetCookieFromString(const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + const std::string& cookie, + SetCookieFromStringCallback callback) override; + + void GetCookiesString(const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + GetCookiesStringCallback callback) override; + void CookiesEnabledFor(const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + CookiesEnabledForCallback callback) override; + + private: +@@ -93,6 +99,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) RestrictedCookieManager + void CookieListToGetAllForUrlCallback( + const GURL& url, + const GURL& site_for_cookies, ++ const url::Origin& top_frame_origin, + const net::CookieOptions& net_options, + mojom::CookieManagerGetOptionsPtr options, + GetAllForUrlCallback callback, diff --git a/patches/third_party-blink-renderer-core-loader-cookie_jar.cc.patch b/patches/third_party-blink-renderer-core-loader-cookie_jar.cc.patch new file mode 100644 index 00000000000..7356e2f35fa --- /dev/null +++ b/patches/third_party-blink-renderer-core-loader-cookie_jar.cc.patch @@ -0,0 +1,33 @@ +diff --git a/third_party/blink/renderer/core/loader/cookie_jar.cc b/third_party/blink/renderer/core/loader/cookie_jar.cc +index 2445b749b3cae9b692e4537008cae120e2178928..5bb98eacb9196c127b2fa380816f7c1b52cf209d 100644 +--- a/third_party/blink/renderer/core/loader/cookie_jar.cc ++++ b/third_party/blink/renderer/core/loader/cookie_jar.cc +@@ -22,7 +22,8 @@ void CookieJar::SetCookie(const String& value) { + + RequestRestrictedCookieManagerIfNeeded(); + SCOPED_BLINK_UMA_HISTOGRAM_TIMER("Blink.CookieJar.SyncCookiesSetTime"); +- backend_->SetCookieFromString(cookie_url, document_->SiteForCookies(), value); ++ backend_->SetCookieFromString(cookie_url, document_->SiteForCookies(), ++ document_->TopFrameOrigin(), value); + } + + String CookieJar::Cookies() { +@@ -33,7 +34,8 @@ String CookieJar::Cookies() { + SCOPED_BLINK_UMA_HISTOGRAM_TIMER("Blink.CookieJar.SyncCookiesTime"); + RequestRestrictedCookieManagerIfNeeded(); + String value; +- backend_->GetCookiesString(cookie_url, document_->SiteForCookies(), &value); ++ backend_->GetCookiesString(cookie_url, document_->SiteForCookies(), ++ document_->TopFrameOrigin(), &value); + return value; + } + +@@ -45,7 +47,7 @@ bool CookieJar::CookiesEnabled() { + RequestRestrictedCookieManagerIfNeeded(); + bool cookies_enabled = false; + backend_->CookiesEnabledFor(cookie_url, document_->SiteForCookies(), +- &cookies_enabled); ++ document_->TopFrameOrigin(), &cookies_enabled); + return cookies_enabled; + } + diff --git a/patches/third_party-blink-renderer-modules-cookie_store-cookie_store.cc.patch b/patches/third_party-blink-renderer-modules-cookie_store-cookie_store.cc.patch new file mode 100644 index 00000000000..43d9fe77ef0 --- /dev/null +++ b/patches/third_party-blink-renderer-modules-cookie_store-cookie_store.cc.patch @@ -0,0 +1,61 @@ +diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc b/third_party/blink/renderer/modules/cookie_store/cookie_store.cc +index a3a5963bbd7b0cfeb5005dc0b8c9ac22dde9e2c0..5effb725450b944b12ff28b4abd381797e678c94 100644 +--- a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc ++++ b/third_party/blink/renderer/modules/cookie_store/cookie_store.cc +@@ -228,6 +228,20 @@ KURL DefaultSiteForCookies(ExecutionContext* execution_context) { + return scope->Url(); + } + ++scoped_refptr DefaultTopFrameOrigin( ++ ExecutionContext* execution_context) { ++ DCHECK(execution_context); ++ ++ if (auto* document = DynamicTo(execution_context)) { ++ // Can we avoid the copy? TopFrameOrigin is returned as const& but we need ++ // a scoped_refptr. ++ return document->TopFrameOrigin()->IsolatedCopy(); ++ } ++ ++ auto* scope = To(execution_context); ++ return scope->GetSecurityOrigin()->IsolatedCopy(); ++} ++ + } // namespace + + CookieStore::~CookieStore() = default; +@@ -450,7 +464,8 @@ CookieStore::CookieStore( + subscription_backend_(std::move(subscription_backend)), + change_listener_binding_(this), + default_cookie_url_(DefaultCookieURL(execution_context)), +- default_site_for_cookies_(DefaultSiteForCookies(execution_context)) { ++ default_site_for_cookies_(DefaultSiteForCookies(execution_context)), ++ default_top_frame_origin_(DefaultTopFrameOrigin(execution_context)) { + DCHECK(backend_); + } + +@@ -474,7 +489,7 @@ ScriptPromise CookieStore::DoRead( + + auto* resolver = MakeGarbageCollected(script_state); + backend_->GetAllForUrl( +- default_cookie_url_, default_site_for_cookies_, ++ default_cookie_url_, default_site_for_cookies_, default_top_frame_origin_, + std::move(backend_options), + WTF::Bind(backend_result_converter, WrapPersistent(resolver))); + return resolver->Promise(); +@@ -536,7 +551,7 @@ ScriptPromise CookieStore::DoWrite(ScriptState* script_state, + auto* resolver = MakeGarbageCollected(script_state); + backend_->SetCanonicalCookie( + std::move(canonical_cookie.value()), default_cookie_url_, +- default_site_for_cookies_, ++ default_site_for_cookies_, default_top_frame_origin_, + WTF::Bind(&CookieStore::OnSetCanonicalCookieResult, + WrapPersistent(resolver))); + return resolver->Promise(); +@@ -613,6 +628,7 @@ void CookieStore::StartObserving() { + change_listener_binding_.Bind( + mojo::MakeRequest(&change_listener, task_runner), task_runner); + backend_->AddChangeListener(default_cookie_url_, default_site_for_cookies_, ++ default_top_frame_origin_, + std::move(change_listener), {}); + } + diff --git a/patches/third_party-blink-renderer-modules-cookie_store-cookie_store.h.patch b/patches/third_party-blink-renderer-modules-cookie_store-cookie_store.h.patch new file mode 100644 index 00000000000..898c74982f8 --- /dev/null +++ b/patches/third_party-blink-renderer-modules-cookie_store-cookie_store.h.patch @@ -0,0 +1,14 @@ +diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_store.h b/third_party/blink/renderer/modules/cookie_store/cookie_store.h +index 3bb8eed6dc10d066b6233b928f81fc63b15fa832..f0556796f3fbf5fec3ffcf5c197f76ce560502a3 100644 +--- a/third_party/blink/renderer/modules/cookie_store/cookie_store.h ++++ b/third_party/blink/renderer/modules/cookie_store/cookie_store.h +@@ -169,6 +169,9 @@ class CookieStore final : public EventTargetWithInlineData, + + // The RFC 6265bis "site for cookies" for this store's ExecutionContext. + const KURL default_site_for_cookies_; ++ ++ // The context in which cookies are accessed. ++ const scoped_refptr default_top_frame_origin_; + }; + + } // namespace blink From 37531bdf62a0cee755d5063b808c188e7dcba8d2 Mon Sep 17 00:00:00 2001 From: bridiver Date: Fri, 30 Aug 2019 15:05:24 -0700 Subject: [PATCH 54/63] check site_for_cookies and top_frame_origin --- .../core/common/cookie_settings_base.cc | 20 ++++++ .../services/network/network_context.cc | 70 ------------------- ...-core-common-cookie_settings_base.cc.patch | 5 +- 3 files changed, 23 insertions(+), 72 deletions(-) create mode 100644 chromium_src/components/content_settings/core/common/cookie_settings_base.cc delete mode 100644 chromium_src/services/network/network_context.cc diff --git a/chromium_src/components/content_settings/core/common/cookie_settings_base.cc b/chromium_src/components/content_settings/core/common/cookie_settings_base.cc new file mode 100644 index 00000000000..074e04c8953 --- /dev/null +++ b/chromium_src/components/content_settings/core/common/cookie_settings_base.cc @@ -0,0 +1,20 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "components/content_settings/core/common/cookie_settings_base.h" + +#define BRAVE_IS_COOKIE_ACCESS_ALLOWED \ + GURL first_party_url = site_for_cookies; \ + if (first_party_url.is_empty() && top_frame_origin) { \ + first_party_url = top_frame_origin->GetURL(); \ + } \ + ContentSetting content_setting; \ + GetCookieSettingInternal( \ + url, first_party_url, \ + IsThirdPartyRequest(url, site_for_cookies), nullptr, &content_setting); \ + return IsAllowed(content_setting); + +#include "../../../../../components/content_settings/core/common/cookie_settings_base.cc" // NOLINT +#undef BRAVE_IS_COOKIE_ACCESS_ALLOWED diff --git a/chromium_src/services/network/network_context.cc b/chromium_src/services/network/network_context.cc deleted file mode 100644 index b378956e3bc..00000000000 --- a/chromium_src/services/network/network_context.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (c) 2019 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "services/network/network_context.h" - -#include -#include - -#include "url/gurl.h" -#include "components/content_settings/core/common/content_settings_pattern.h" - -bool IsWhitelistedCookieException(const GURL& request_url, - const GURL& first_party_url) { - // Check with the security team before adding exceptions. - - // 1st-party-dependent whitelist - std::map> whitelist_patterns = { - { - GURL("https://www.sliver.tv/"), - std::vector({ - ContentSettingsPattern::FromString("https://*.thetatoken.org:8700/*"), - }), - } - }; - - std::map>::iterator i = - whitelist_patterns.find(first_party_url.GetOrigin()); - if (i == whitelist_patterns.end()) { - return false; - } - std::vector &exceptions = i->second; - return std::any_of(exceptions.begin(), exceptions.end(), - [&request_url](const ContentSettingsPattern& pattern) { - return pattern.Matches(request_url); - }); -} - -GURL GetURLForCookieAccess(const net::URLRequest& request) { - if (!request.site_for_cookies().is_empty()) - return request.site_for_cookies(); - - if (request.network_isolation_key().IsFullyPopulated()) { - GURL origin(request.network_isolation_key().ToString()); - if (origin.is_valid()) - return origin; - } - - if (request.top_frame_origin().has_value()) - return request.top_frame_origin()->GetURL(); - - return GURL(); -} - -#define BRAVE_ON_CAN_GET_COOKIES_INTERNAL \ -return allowed_from_caller && \ - (network_context_->cookie_manager() \ - ->cookie_settings() \ - .IsCookieAccessAllowed( \ - request.url(), \ - GetURLForCookieAccess(request)) || \ - IsWhitelistedCookieException(request.url(), \ - GetURLForCookieAccess(request))); - -#define BRAVE_ON_CAN_SET_COOKIES_INTERNAL BRAVE_ON_CAN_GET_COOKIES_INTERNAL - -#include "../../../../services/network/network_context.cc" // NOLINT -#undef BRAVE_ON_CAN_GET_COOKIES_INTERNAL -#undef BRAVE_ON_CAN_SET_COOKIES_INTERNAL diff --git a/patches/components-content_settings-core-common-cookie_settings_base.cc.patch b/patches/components-content_settings-core-common-cookie_settings_base.cc.patch index 32321bae8a9..3c96e640741 100644 --- a/patches/components-content_settings-core-common-cookie_settings_base.cc.patch +++ b/patches/components-content_settings-core-common-cookie_settings_base.cc.patch @@ -1,5 +1,5 @@ diff --git a/components/content_settings/core/common/cookie_settings_base.cc b/components/content_settings/core/common/cookie_settings_base.cc -index e4909a9b80ed30510843b72f0ede108d500f6ac3..e3fb559b8654bb11c28f5d87083f4acfc1adce65 100644 +index e4909a9b80ed30510843b72f0ede108d500f6ac3..1502a691191a482789c001b14c162d638ca35731 100644 --- a/components/content_settings/core/common/cookie_settings_base.cc +++ b/components/content_settings/core/common/cookie_settings_base.cc @@ -3,10 +3,23 @@ @@ -26,7 +26,7 @@ index e4909a9b80ed30510843b72f0ede108d500f6ac3..e3fb559b8654bb11c28f5d87083f4acf bool CookieSettingsBase::ShouldDeleteCookieOnExit( const ContentSettingsForOneType& cookie_settings, -@@ -38,14 +51,44 @@ bool CookieSettingsBase::ShouldDeleteCookieOnExit( +@@ -38,14 +51,45 @@ bool CookieSettingsBase::ShouldDeleteCookieOnExit( return setting == CONTENT_SETTING_SESSION_ONLY || matches_session_only_rule; } @@ -54,6 +54,7 @@ index e4909a9b80ed30510843b72f0ede108d500f6ac3..e3fb559b8654bb11c28f5d87083f4acf + const GURL& url, + const GURL& site_for_cookies, + const base::Optional& top_frame_origin) const { ++ BRAVE_IS_COOKIE_ACCESS_ALLOWED + // TODO(crbug.com/988398): top_frame_origin is not yet always available. + // Ensure that the DCHECK always passes and remove the FeatureList check. + if (!base::FeatureList::IsEnabled(kImprovedCookieControls)) From a8a34a260506eb5031a2d9141b84e37bce384cac Mon Sep 17 00:00:00 2001 From: bridiver Date: Tue, 3 Sep 2019 13:14:56 -0700 Subject: [PATCH 55/63] chain brave_proxying_web_socket and web_request_api websocket proxy --- browser/brave_content_browser_client.cc | 29 +- .../net/brave_proxying_url_loader_factory.cc | 34 ++- .../net/brave_proxying_url_loader_factory.h | 9 +- browser/net/brave_proxying_web_socket.cc | 258 +++++++++++++----- browser/net/brave_proxying_web_socket.h | 61 ++++- browser/net/brave_request_handler.cc | 72 +++-- browser/net/brave_request_handler.h | 12 +- browser/net/resource_context_data.cc | 32 ++- browser/net/resource_context_data.h | 10 +- browser/net/url_context.cc | 54 ++-- browser/net/url_context.h | 4 +- 11 files changed, 403 insertions(+), 172 deletions(-) diff --git a/browser/brave_content_browser_client.cc b/browser/brave_content_browser_client.cc index 71571a0586c..5e54bf5bde3 100644 --- a/browser/brave_content_browser_client.cc +++ b/browser/brave_content_browser_client.cc @@ -243,8 +243,7 @@ bool BraveContentBrowserClient::WillCreateURLLoaderFactory( bool BraveContentBrowserClient::WillInterceptWebSocket( content::RenderFrameHost* frame) { - //return (frame != nullptr); - return ChromeContentBrowserClient::WillInterceptWebSocket(frame); + return (frame != nullptr); } void BraveContentBrowserClient::CreateWebSocket( @@ -254,13 +253,25 @@ void BraveContentBrowserClient::CreateWebSocket( const GURL& site_for_cookies, const base::Optional& user_agent, network::mojom::WebSocketHandshakeClientPtr handshake_client) { - ChromeContentBrowserClient::CreateWebSocket(frame, std::move(factory), url, - site_for_cookies, user_agent, - std::move(handshake_client)); - // TODO(max): can't hook in here any more. - //BraveProxyingWebSocket::ProxyWebSocket(frame, std::move(factory), url, - // site_for_cookies, user_agent, - // std::move(handshake_client)); + auto* proxy = BraveProxyingWebSocket::ProxyWebSocket( + frame, + std::move(factory), + url, + site_for_cookies, + user_agent, + std::move(handshake_client)); + + if (ChromeContentBrowserClient::WillInterceptWebSocket(frame)) { + ChromeContentBrowserClient::CreateWebSocket( + frame, + proxy->web_socket_factory(), + url, + site_for_cookies, + user_agent, + network::mojom::WebSocketHandshakeClientPtr(proxy->handshake_client())); + } else { + proxy->Start(); + } } void BraveContentBrowserClient::MaybeHideReferrer( diff --git a/browser/net/brave_proxying_url_loader_factory.cc b/browser/net/brave_proxying_url_loader_factory.cc index ab561986ca2..b80aa5369e8 100644 --- a/browser/net/brave_proxying_url_loader_factory.cc +++ b/browser/net/brave_proxying_url_loader_factory.cc @@ -17,7 +17,6 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" -#include "content/public/browser/resource_context.h" #include "content/public/common/url_utils.h" #include "mojo/public/cpp/system/data_pipe_producer.h" #include "mojo/public/cpp/system/string_data_source.h" @@ -66,7 +65,7 @@ BraveProxyingURLLoaderFactory::InProgressRequest::InProgressRequest( int frame_tree_node_id, uint32_t options, const network::ResourceRequest& request, - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, network::mojom::URLLoaderRequest loader_request, network::mojom::URLLoaderClientPtr client) @@ -78,7 +77,7 @@ BraveProxyingURLLoaderFactory::InProgressRequest::InProgressRequest( frame_tree_node_id_(frame_tree_node_id), routing_id_(routing_id), options_(options), - resource_context_(resource_context), + browser_context_(browser_context), traffic_annotation_(traffic_annotation), proxied_loader_binding_(this, std::move(loader_request)), target_client_(std::move(client)), @@ -117,7 +116,7 @@ void BraveProxyingURLLoaderFactory::InProgressRequest::RestartInternal() { ctx_ = std::make_shared(); brave::BraveRequestInfo::FillCTX(request_, render_process_id_, frame_tree_node_id_, request_id_, - resource_context_, ctx_); + browser_context_, ctx_); int result = factory_->request_handler_->OnBeforeURLRequest( ctx_, continuation, &redirect_url_); @@ -379,7 +378,7 @@ void BraveProxyingURLLoaderFactory::InProgressRequest:: ctx_ = std::make_shared(); brave::BraveRequestInfo::FillCTX(request_, render_process_id_, frame_tree_node_id_, request_id_, - resource_context_, ctx_); + browser_context_, ctx_); int result = factory_->request_handler_->OnBeforeStartTransaction( ctx_, continuation, &request_.headers); @@ -549,7 +548,7 @@ void BraveProxyingURLLoaderFactory::InProgressRequest:: ctx_ = std::make_shared(); brave::BraveRequestInfo::FillCTX(request_, render_process_id_, frame_tree_node_id_, request_id_, - resource_context_, ctx_); + browser_context_, ctx_); int result = factory_->request_handler_->OnHeadersReceived( ctx_, copyable_callback, current_response_.headers.get(), &override_headers_, &redirect_url_); @@ -574,6 +573,7 @@ void BraveProxyingURLLoaderFactory::InProgressRequest:: copyable_callback.Run(net::OK); } + void BraveProxyingURLLoaderFactory::InProgressRequest::OnRequestError( const network::URLLoaderCompletionStatus& status) { if (!request_completed_) { @@ -586,7 +586,7 @@ void BraveProxyingURLLoaderFactory::InProgressRequest::OnRequestError( BraveProxyingURLLoaderFactory::BraveProxyingURLLoaderFactory( BraveRequestHandler* request_handler, - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, int render_process_id, int frame_tree_node_id, network::mojom::URLLoaderFactoryRequest loader_request, @@ -594,13 +594,13 @@ BraveProxyingURLLoaderFactory::BraveProxyingURLLoaderFactory( scoped_refptr request_id_generator, DisconnectCallback on_disconnect) : request_handler_(request_handler), - resource_context_(resource_context), + browser_context_(browser_context), render_process_id_(render_process_id), frame_tree_node_id_(frame_tree_node_id), request_id_generator_(request_id_generator), disconnect_callback_(std::move(on_disconnect)), weak_factory_(this) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK(proxy_bindings_.empty()); DCHECK(!target_factory_.is_bound()); @@ -628,13 +628,11 @@ bool BraveProxyingURLLoaderFactory::MaybeProxyRequest( network::mojom::URLLoaderFactoryPtrInfo target_factory_info; *factory_receiver = mojo::MakeRequest(&target_factory_info); - base::PostTaskWithTraits( - FROM_HERE, {content::BrowserThread::IO}, - base::BindOnce( - &ResourceContextData::StartProxying, - browser_context->GetResourceContext(), render_process_id, - render_frame_host ? render_frame_host->GetFrameTreeNodeId() : 0, - std::move(proxied_receiver), std::move(target_factory_info))); + + ResourceContextData::StartProxying(browser_context, + render_process_id, + render_frame_host ? render_frame_host->GetFrameTreeNodeId() : 0, + std::move(proxied_receiver), std::move(target_factory_info)); return true; } @@ -646,7 +644,7 @@ void BraveProxyingURLLoaderFactory::CreateLoaderAndStart( const network::ResourceRequest& request, network::mojom::URLLoaderClientPtr client, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); // The request ID doesn't really matter in the Network Service path. It just // needs to be unique per-BrowserContext so request handlers can make sense of @@ -657,7 +655,7 @@ void BraveProxyingURLLoaderFactory::CreateLoaderAndStart( auto result = requests_.emplace( std::make_unique( this, brave_request_id, request_id, routing_id, render_process_id_, - frame_tree_node_id_, options, request, resource_context_, + frame_tree_node_id_, options, request, browser_context_, traffic_annotation, std::move(loader_request), std::move(client))); (*result.first)->Restart(); } diff --git a/browser/net/brave_proxying_url_loader_factory.h b/browser/net/brave_proxying_url_loader_factory.h index e4b830e2ecd..2abe404cc73 100644 --- a/browser/net/brave_proxying_url_loader_factory.h +++ b/browser/net/brave_proxying_url_loader_factory.h @@ -36,7 +36,6 @@ namespace content { class BrowserContext; class RenderFrameHost; -class ResourceContext; } // namespace content // Cargoculted from WebRequestProxyingURLLoaderFactory and @@ -59,7 +58,7 @@ class BraveProxyingURLLoaderFactory int32_t routing_id, uint32_t options, const network::ResourceRequest& request, - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, network::mojom::URLLoaderRequest loader_request, network::mojom::URLLoaderClientPtr client); @@ -118,7 +117,7 @@ class BraveProxyingURLLoaderFactory const int32_t routing_id_; const uint32_t options_; - content::ResourceContext* resource_context_; + content::BrowserContext* browser_context_; const net::MutableNetworkTrafficAnnotationTag traffic_annotation_; mojo::Binding proxied_loader_binding_; network::mojom::URLLoaderClientPtr target_client_; @@ -162,7 +161,7 @@ class BraveProxyingURLLoaderFactory // by calling MaybeProxyRequest(). BraveProxyingURLLoaderFactory( BraveRequestHandler* request_handler, - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, int render_process_id, int frame_tree_node_id, network::mojom::URLLoaderFactoryRequest request, @@ -201,7 +200,7 @@ class BraveProxyingURLLoaderFactory void MaybeRemoveProxy(); BraveRequestHandler* const request_handler_; - content::ResourceContext* resource_context_; + content::BrowserContext* browser_context_; const int render_process_id_; const int frame_tree_node_id_; diff --git a/browser/net/brave_proxying_web_socket.cc b/browser/net/brave_proxying_web_socket.cc index 7fc8ae923c1..332a43c52f9 100644 --- a/browser/net/brave_proxying_web_socket.cc +++ b/browser/net/brave_proxying_web_socket.cc @@ -25,7 +25,7 @@ BraveProxyingWebSocket::BraveProxyingWebSocket( network::mojom::WebSocketHandshakeClientPtr handshake_client, int process_id, int frame_tree_node_id, - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, scoped_refptr request_id_generator, BraveRequestHandler* handler, DisconnectCallback on_disconnect) @@ -33,9 +33,12 @@ BraveProxyingWebSocket::BraveProxyingWebSocket( process_id_(process_id), frame_tree_node_id_(frame_tree_node_id), factory_(std::move(factory)), - resource_context_(resource_context), + browser_context_(browser_context), request_id_generator_(std::move(request_id_generator)), forwarding_handshake_client_(std::move(handshake_client)), + binding_as_handshake_client_(this), + binding_as_auth_handler_(this), + binding_as_header_client_(this), request_(request), on_disconnect_(std::move(on_disconnect)) {} @@ -46,7 +49,7 @@ BraveProxyingWebSocket::~BraveProxyingWebSocket() { } // static -bool BraveProxyingWebSocket::ProxyWebSocket( +BraveProxyingWebSocket* BraveProxyingWebSocket::ProxyWebSocket( content::RenderFrameHost* frame, content::ContentBrowserClient::WebSocketFactory factory, const GURL& url, @@ -55,15 +58,12 @@ bool BraveProxyingWebSocket::ProxyWebSocket( network::mojom::WebSocketHandshakeClientPtr handshake_client) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - base::PostTaskWithTraits( - FROM_HERE, {content::BrowserThread::IO}, - base::BindOnce( - &ResourceContextData::StartProxyingWebSocket, std::move(factory), url, - site_for_cookies, user_agent, handshake_client.PassInterface(), - frame->GetProcess()->GetBrowserContext()->GetResourceContext(), - frame->GetProcess()->GetID(), frame->GetRoutingID(), - frame->GetFrameTreeNodeId(), frame->GetLastCommittedOrigin())); - return true; + return ResourceContextData::StartProxyingWebSocket( + std::move(factory), url, site_for_cookies, user_agent, + handshake_client.PassInterface(), + frame->GetProcess()->GetBrowserContext(), + frame->GetProcess()->GetID(), frame->GetRoutingID(), + frame->GetFrameTreeNodeId(), frame->GetLastCommittedOrigin()); } void BraveProxyingWebSocket::Start() { @@ -72,17 +72,21 @@ void BraveProxyingWebSocket::Start() { // OnBeforeSendHeaders and OnSendHeaders will be handled there. Otherwise, // send these events before the request starts. base::RepeatingCallback continuation; - continuation = base::BindRepeating( - &BraveProxyingWebSocket::OnBeforeRequestComplete, - weak_factory_.GetWeakPtr()); + if (proxy_has_extra_headers()) { + continuation = base::BindRepeating( + &BraveProxyingWebSocket::ContinueToStartRequest, + weak_factory_.GetWeakPtr()); + } else { + continuation = base::BindRepeating( + &BraveProxyingWebSocket::OnBeforeRequestComplete, + weak_factory_.GetWeakPtr()); + } - // TODO(yhirano): Consider having throttling here (probably with aligned with - // WebRequestProxyingURLLoaderFactory). bool should_collapse_initiator = false; ctx_ = std::make_shared(); brave::BraveRequestInfo::FillCTX(request_, process_id_, frame_tree_node_id_, request_id_, - resource_context_, ctx_); + browser_context_, ctx_); int result = request_handler_->OnBeforeURLRequest( ctx_, continuation, &redirect_url_); @@ -103,6 +107,35 @@ void BraveProxyingWebSocket::Start() { continuation.Run(net::OK); } +content::ContentBrowserClient::WebSocketFactory +BraveProxyingWebSocket::web_socket_factory() { + return base::BindOnce(&BraveProxyingWebSocket::WebSocketFactoryRun, + base::Unretained(this)); +} + +network::mojom::WebSocketHandshakeClientPtrInfo +BraveProxyingWebSocket::handshake_client() { + return forwarding_handshake_client_.PassInterface(); +} + +bool BraveProxyingWebSocket::proxy_has_extra_headers() { + return proxy_trusted_header_client_.is_bound(); +} + +void BraveProxyingWebSocket::WebSocketFactoryRun(const GURL& url, + std::vector additional_headers, + network::mojom::WebSocketHandshakeClientPtr handshake_client, + network::mojom::AuthenticationHandlerPtr auth_handler, + network::mojom::TrustedHeaderClientPtr trusted_header_client) { + DCHECK(!forwarding_handshake_client_); + proxy_url_ = url; + proxy_additional_headers_ = std::move(additional_headers); + forwarding_handshake_client_ = std::move(handshake_client); + proxy_auth_handler_ = std::move(auth_handler); + proxy_trusted_header_client_ = std::move(trusted_header_client); + Start(); +} + void BraveProxyingWebSocket::OnOpeningHandshakeStarted( network::mojom::WebSocketHandshakeRequestPtr request) { DCHECK(forwarding_handshake_client_); @@ -111,25 +144,31 @@ void BraveProxyingWebSocket::OnOpeningHandshakeStarted( void BraveProxyingWebSocket::OnResponseReceived( network::mojom::WebSocketHandshakeResponsePtr response) { - DCHECK(forwarding_handshake_client_); - - response_.headers = - base::MakeRefCounted(base::StringPrintf( - "HTTP/%d.%d %d %s", response->http_version.major_value(), - response->http_version.minor_value(), response->status_code, - response->status_text.c_str())); - for (const auto& header : response->headers) - response_.headers->AddHeader(header->name + ": " + header->value); + // response_.headers will be set in OnBeforeSendHeaders if + // proxy_has_extra_headers() is set. + if (!proxy_has_extra_headers()) { + response_.headers = + base::MakeRefCounted(base::StringPrintf( + "HTTP/%d.%d %d %s", response->http_version.major_value(), + response->http_version.minor_value(), response->status_code, + response->status_text.c_str())); + for (const auto& header : response->headers) + response_.headers->AddHeader(header->name + ": " + header->value); + } response_.remote_endpoint = response->remote_endpoint; - // TODO(yhirano): with both network service enabled or disabled, - // OnResponseReceived is called with the original response headers. - // That means if OnHeadersReceived modified them the renderer won't see that - // modification. This is the opposite of http(s) requests. + // TODO(yhirano): OnResponseReceived is called with the original + // response headers. That means if OnHeadersReceived modified them the + // renderer won't see that modification. This is the opposite of http(s) + // requests. forwarding_handshake_client_->OnResponseReceived(std::move(response)); - ContinueToHeadersReceived(); + if (!proxy_has_extra_headers() || response_.headers) { + ContinueToHeadersReceived(); + } else { + waiting_for_header_client_headers_received_ = true; + } } void BraveProxyingWebSocket::ContinueToHeadersReceived() { @@ -139,7 +178,7 @@ void BraveProxyingWebSocket::ContinueToHeadersReceived() { ctx_ = std::make_shared(); brave::BraveRequestInfo::FillCTX(request_, process_id_, frame_tree_node_id_, request_id_, - resource_context_, ctx_); + browser_context_, ctx_); int result = request_handler_->OnHeadersReceived( ctx_, continuation, response_.headers.get(), &override_headers_, &redirect_url_); @@ -164,18 +203,52 @@ void BraveProxyingWebSocket::OnConnectionEstablished( uint64_t receive_quota_threshold) { DCHECK(forwarding_handshake_client_); DCHECK(!is_done_); - is_done_ = true; - forwarding_handshake_client_->OnConnectionEstablished( std::move(websocket), selected_protocol, extensions, receive_quota_threshold); - // Deletes |this|. - std::move(on_disconnect_).Run(this); + OnError(net::ERR_FAILED); +} + +void BraveProxyingWebSocket::OnAuthRequired( + const net::AuthChallengeInfo& auth_info, + const scoped_refptr& headers, + const net::IPEndPoint& remote_endpoint, + OnAuthRequiredCallback callback) { + proxy_auth_handler_->OnAuthRequired( + auth_info, headers, remote_endpoint, std::move(callback)); +} + +void BraveProxyingWebSocket::OnBeforeSendHeaders( + const net::HttpRequestHeaders& headers, + OnBeforeSendHeadersCallback callback) { + DCHECK(proxy_has_extra_headers()); + + request_.headers = headers; + on_before_send_headers_callback_ = std::move(callback); + OnBeforeRequestComplete(net::OK); +} + +void BraveProxyingWebSocket::OnHeadersReceived( + const std::string& headers, + OnHeadersReceivedCallback callback) { + DCHECK(proxy_has_extra_headers()); + + // Note: since there are different pipes used for WebSocketClient and + // TrustedHeaderClient, there are no guarantees whether this or + // OnResponseReceived are called first. + on_headers_received_callback_ = std::move(callback); + response_.headers = base::MakeRefCounted(headers); + + if (!waiting_for_header_client_headers_received_) + return; + + waiting_for_header_client_headers_received_ = false; + ContinueToHeadersReceived(); } void BraveProxyingWebSocket::OnBeforeRequestComplete(int error_code) { - DCHECK(!binding_as_handshake_client_.is_bound()); + DCHECK(proxy_has_extra_headers() || !binding_as_handshake_client_.is_bound()); DCHECK(request_.url.SchemeIsWSOrWSS()); if (error_code != net::OK) { OnError(error_code); @@ -183,13 +256,13 @@ void BraveProxyingWebSocket::OnBeforeRequestComplete(int error_code) { } auto continuation = base::BindRepeating( - &BraveProxyingWebSocket::ContinueToStartRequest, + &BraveProxyingWebSocket::OnBeforeSendHeadersComplete, weak_factory_.GetWeakPtr()); ctx_ = std::make_shared(); brave::BraveRequestInfo::FillCTX(request_, process_id_, frame_tree_node_id_, request_id_, - resource_context_, ctx_); + browser_context_, ctx_); int result = request_handler_->OnBeforeStartTransaction( ctx_, continuation, &request_.headers); @@ -202,16 +275,40 @@ void BraveProxyingWebSocket::OnBeforeRequestComplete(int error_code) { return; DCHECK_EQ(net::OK, result); - ContinueToStartRequest(net::OK); + OnBeforeSendHeadersComplete(net::OK); } -void BraveProxyingWebSocket::ContinueToStartRequest(int error_code) { - DCHECK(!binding_as_handshake_client_.is_bound()); +void BraveProxyingWebSocket::OnBeforeSendHeadersCompleteFromProxy( + int error_code, + const net::HttpRequestHeaders& headers) { if (error_code != net::OK) { OnError(error_code); return; } + if (on_before_send_headers_callback_) + std::move(on_before_send_headers_callback_).Run(error_code, headers); + + ContinueToStartRequest(error_code); +} + +void BraveProxyingWebSocket::OnBeforeSendHeadersComplete(int error_code) { + DCHECK(proxy_has_extra_headers() || !binding_as_handshake_client_.is_bound()); + if (error_code != net::OK) { + OnError(error_code); + return; + } + + if (proxy_has_extra_headers()) { + DCHECK(on_before_send_headers_callback_); + proxy_trusted_header_client_->OnBeforeSendHeaders( + request_.headers, std::move(on_before_send_headers_callback_)); + } else { + ContinueToStartRequest(net::OK); + } +} + +void BraveProxyingWebSocket::ContinueToStartRequest(int error_code) { base::flat_set used_header_names; std::vector additional_headers; for (net::HttpRequestHeaders::Iterator it(request_.headers); it.GetNext();) { @@ -219,50 +316,80 @@ void BraveProxyingWebSocket::ContinueToStartRequest(int error_code) { network::mojom::HttpHeader::New(it.name(), it.value())); used_header_names.insert(base::ToLowerASCII(it.name())); } - for (const auto& header : additional_headers_) { - if (!used_header_names.contains(base::ToLowerASCII(header->name))) { - additional_headers.push_back( - network::mojom::HttpHeader::New(header->name, header->value)); + if (!proxy_additional_headers_.empty()) { + for (const auto& header : proxy_additional_headers_) { + if (!used_header_names.contains(base::ToLowerASCII(header->name))) { + additional_headers.push_back( + network::mojom::HttpHeader::New(header->name, header->value)); + } } } - // Here we detect mojo connection errors on |handshake_client|. See also - // CreateWebSocket in //network/services/public/mojom/network_context.mojom. - // Here we don't have |connection_client| so using |handshake_client| is the - // best. network::mojom::WebSocketHandshakeClientPtr handshake_client; binding_as_handshake_client_.Bind(mojo::MakeRequest(&handshake_client)); - binding_as_handshake_client_.set_connection_error_handler( - base::BindOnce(&BraveProxyingWebSocket::OnError, base::Unretained(this), - net::ERR_FAILED)); + binding_as_handshake_client_.set_connection_error_with_reason_handler( + base::BindOnce(&BraveProxyingWebSocket::OnMojoConnectionError, + base::Unretained(this))); + network::mojom::AuthenticationHandlerPtr auth_handler; + if (proxy_auth_handler_.is_bound()) + binding_as_auth_handler_.Bind(mojo::MakeRequest(&auth_handler)); + network::mojom::TrustedHeaderClientPtr trusted_header_client; + if (proxy_has_extra_headers()) + binding_as_header_client_.Bind(mojo::MakeRequest(&trusted_header_client)); - std::move(factory_).Run(request_.url, std::move(additional_headers), - std::move(handshake_client), std::move(auth_handler), + std::move(factory_).Run(request_.url, + std::move(additional_headers), + std::move(handshake_client), + std::move(auth_handler), std::move(trusted_header_client)); } +void BraveProxyingWebSocket::OnHeadersReceivedCompleteFromProxy( + int error_code, + const base::Optional& headers, + const GURL& url) { + if (on_headers_received_callback_) + std::move(on_headers_received_callback_).Run(net::OK, headers, GURL()); + + if (override_headers_) { + response_.headers = override_headers_; + override_headers_ = nullptr; + } +} + void BraveProxyingWebSocket::OnHeadersReceivedComplete(int error_code) { if (error_code != net::OK) { OnError(error_code); return; } - if (override_headers_) { - response_.headers = override_headers_; - override_headers_ = nullptr; + if (proxy_has_extra_headers()) { + proxy_trusted_header_client_->OnHeadersReceived( + override_headers_->raw_headers(), + base::BindOnce( + &BraveProxyingWebSocket::OnHeadersReceivedCompleteFromProxy, + weak_factory_.GetWeakPtr())); + } else { + if (override_headers_) { + response_.headers = override_headers_; + override_headers_ = nullptr; + } + ResumeIncomingMethodCallProcessing(); } - - ResumeIncomingMethodCallProcessing(); } void BraveProxyingWebSocket::PauseIncomingMethodCallProcessing() { binding_as_handshake_client_.PauseIncomingMethodCallProcessing(); + if (proxy_has_extra_headers()) + binding_as_header_client_.PauseIncomingMethodCallProcessing(); } void BraveProxyingWebSocket::ResumeIncomingMethodCallProcessing() { binding_as_handshake_client_.ResumeIncomingMethodCallProcessing(); + if (proxy_has_extra_headers()) + binding_as_header_client_.ResumeIncomingMethodCallProcessing(); } void BraveProxyingWebSocket::OnError(int error_code) { @@ -273,3 +400,12 @@ void BraveProxyingWebSocket::OnError(int error_code) { // Deletes |this|. std::move(on_disconnect_).Run(this); } + +// ResetWithReason +void BraveProxyingWebSocket::OnMojoConnectionError( + uint32_t custom_reason, + const std::string& description) { + forwarding_handshake_client_.ResetWithReason(custom_reason, description); + OnError(net::ERR_FAILED); + // Deletes |this|. +} diff --git a/browser/net/brave_proxying_web_socket.h b/browser/net/brave_proxying_web_socket.h index 826365db5af..b991567c71e 100644 --- a/browser/net/brave_proxying_web_socket.h +++ b/browser/net/brave_proxying_web_socket.h @@ -30,13 +30,13 @@ namespace content { class BrowserContext; class RenderFrameHost; -class ResourceContext; } // Ensures that all web socket requests go through Brave network request // handling framework. Cargoculted from |WebRequestProxyingWebSocket|. -class BraveProxyingWebSocket - : public network::mojom::WebSocketHandshakeClient { +class BraveProxyingWebSocket : public network::mojom::WebSocketHandshakeClient, + public network::mojom::AuthenticationHandler, + public network::mojom::TrustedHeaderClient { public: using WebSocketFactory = content::ContentBrowserClient::WebSocketFactory; using DisconnectCallback = @@ -48,13 +48,13 @@ class BraveProxyingWebSocket network::mojom::WebSocketHandshakeClientPtr handshake_client, int process_id, int frame_tree_node_id, - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, scoped_refptr request_id_generator, BraveRequestHandler* handler, DisconnectCallback on_disconnect); ~BraveProxyingWebSocket() override; - static bool ProxyWebSocket( + static BraveProxyingWebSocket* ProxyWebSocket( content::RenderFrameHost* frame, content::ContentBrowserClient::WebSocketFactory factory, const GURL& url, @@ -64,7 +64,11 @@ class BraveProxyingWebSocket void Start(); - // network::mojom::WebSocketHandShakeClient methods: + content::ContentBrowserClient::WebSocketFactory web_socket_factory(); + network::mojom::WebSocketHandshakeClientPtrInfo handshake_client(); + bool proxy_has_extra_headers(); + + // network::mojom::WebSocketHandshakeClient methods: void OnOpeningHandshakeStarted( network::mojom::WebSocketHandshakeRequestPtr request) override; void OnResponseReceived( @@ -74,15 +78,44 @@ class BraveProxyingWebSocket const std::string& extensions, uint64_t receive_quota_threshold) override; + // network::mojom::AuthenticationHandler method: + void OnAuthRequired(const net::AuthChallengeInfo& auth_info, + const scoped_refptr& headers, + const net::IPEndPoint& remote_endpoint, + OnAuthRequiredCallback callback) override; + + // network::mojom::TrustedHeaderClient methods: + void OnBeforeSendHeaders(const net::HttpRequestHeaders& headers, + OnBeforeSendHeadersCallback callback) override; + void OnHeadersReceived(const std::string& headers, + OnHeadersReceivedCallback callback) override; + private: + void WebSocketFactoryRun( + const GURL& url, + std::vector additional_headers, + network::mojom::WebSocketHandshakeClientPtr handshake_client, + network::mojom::AuthenticationHandlerPtr auth_handler, + network::mojom::TrustedHeaderClientPtr trusted_header_client); + + void OnBeforeSendHeadersComplete(int error_code); void OnBeforeRequestComplete(int error_code); void ContinueToStartRequest(int error_code); void OnHeadersReceivedComplete(int error_code); void ContinueToHeadersReceived(); + void OnBeforeSendHeadersCompleteFromProxy( + int error_code, + const net::HttpRequestHeaders& headers); + void OnHeadersReceivedCompleteFromProxy( + int error_code, + const base::Optional& headers, + const GURL& url); void PauseIncomingMethodCallProcessing(); void ResumeIncomingMethodCallProcessing(); void OnError(int result); + void OnMojoConnectionError(uint32_t custom_reason, + const std::string& description); BraveRequestHandler* const request_handler_; // TODO(iefremov): Get rid of shared_ptr, we should clearly own the pointer. @@ -92,21 +125,31 @@ class BraveProxyingWebSocket const int process_id_; const int frame_tree_node_id_; content::ContentBrowserClient::WebSocketFactory factory_; - content::ResourceContext* const resource_context_; + content::BrowserContext* const browser_context_; scoped_refptr request_id_generator_; network::mojom::WebSocketHandshakeClientPtr forwarding_handshake_client_; mojo::Binding - binding_as_handshake_client_{this}; + binding_as_handshake_client_; + mojo::Binding binding_as_auth_handler_; + mojo::Binding binding_as_header_client_; network::ResourceRequest request_; network::ResourceResponseHead response_; scoped_refptr override_headers_; - std::vector additional_headers_; GURL redirect_url_; bool is_done_ = false; + bool waiting_for_header_client_headers_received_ = false; uint64_t request_id_ = 0; + // chrome websocket proxy + GURL proxy_url_; + std::vector proxy_additional_headers_; + network::mojom::AuthenticationHandlerPtr proxy_auth_handler_; + network::mojom::TrustedHeaderClientPtr proxy_trusted_header_client_; + + OnHeadersReceivedCallback on_headers_received_callback_; + OnBeforeSendHeadersCallback on_before_send_headers_callback_; DisconnectCallback on_disconnect_; base::WeakPtrFactory weak_factory_{this}; diff --git a/browser/net/brave_request_handler.cc b/browser/net/brave_request_handler.cc index f02db54277c..b2358b646e9 100644 --- a/browser/net/brave_request_handler.cc +++ b/browser/net/brave_request_handler.cc @@ -41,19 +41,20 @@ #include "brave/browser/net/brave_translate_redirect_network_delegate_helper.h" #endif -BraveRequestHandler::BraveRequestHandler() { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); +BraveRequestHandler::BraveRequestHandler() + : task_runner_(base::ThreadTaskRunnerHandle::Get()) { SetupCallbacks(); // Initialize the preference change registrar. base::PostTaskWithTraits( FROM_HERE, {content::BrowserThread::UI}, base::Bind(&BraveRequestHandler::InitPrefChangeRegistrarOnUI, - base::Unretained(this))); + weak_factory_.GetWeakPtr())); } BraveRequestHandler::~BraveRequestHandler() = default; void BraveRequestHandler::SetupCallbacks() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); brave::OnBeforeURLRequestCallback callback = base::Bind(brave::OnBeforeURLRequest_SiteHacksWork); before_url_request_callbacks_.push_back(callback); @@ -104,7 +105,7 @@ void BraveRequestHandler::InitPrefChangeRegistrarOnUI() { pref_change_registrar_->Add( kReferralHeaders, base::Bind(&BraveRequestHandler::OnReferralHeadersChanged, - base::Unretained(this))); + weak_factory_ui_.GetWeakPtr())); // Retrieve current referral headers, if any. OnReferralHeadersChanged(); #endif @@ -114,36 +115,34 @@ void BraveRequestHandler::OnReferralHeadersChanged() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (const base::ListValue* referral_headers = g_browser_process->local_state()->GetList(kReferralHeaders)) { - base::PostTaskWithTraits( - FROM_HERE, {content::BrowserThread::IO}, + task_runner_->PostTask(FROM_HERE, base::Bind(&BraveRequestHandler::SetReferralHeaders, - base::Unretained(this), referral_headers->DeepCopy())); + weak_factory_ui_.GetWeakPtr(), + referral_headers->DeepCopy())); } } void BraveRequestHandler::SetReferralHeaders( base::ListValue* referral_headers) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); referral_headers_list_.reset(referral_headers); } -bool BraveRequestHandler::IsRequestIdentifierValid( - uint64_t request_identifier) { - return base::Contains(callbacks_, request_identifier); - return true; -} - int BraveRequestHandler::OnBeforeURLRequest( std::shared_ptr ctx, net::CompletionOnceCallback callback, GURL* new_url) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (before_url_request_callbacks_.empty()) { return net::OK; } ctx->new_url = new_url; ctx->event_type = brave::kOnBeforeRequest; callbacks_[ctx->request_identifier] = std::move(callback); - RunNextCallback(ctx); + base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, + base::Bind(&BraveRequestHandler::RunNextCallback, + weak_factory_.GetWeakPtr(), + ctx)); return net::ERR_IO_PENDING; } @@ -151,6 +150,7 @@ int BraveRequestHandler::OnBeforeStartTransaction( std::shared_ptr ctx, net::CompletionOnceCallback callback, net::HttpRequestHeaders* headers) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (before_start_transaction_callbacks_.empty()) { return net::OK; } @@ -158,7 +158,10 @@ int BraveRequestHandler::OnBeforeStartTransaction( ctx->headers = headers; ctx->referral_headers_list = referral_headers_list_.get(); callbacks_[ctx->request_identifier] = std::move(callback); - RunNextCallback(ctx); + base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, + base::Bind(&BraveRequestHandler::RunNextCallback, + weak_factory_.GetWeakPtr(), + ctx)); return net::ERR_IO_PENDING; } @@ -168,6 +171,7 @@ int BraveRequestHandler::OnHeadersReceived( const net::HttpResponseHeaders* original_response_headers, scoped_refptr* override_response_headers, GURL* allowed_unsafe_redirect_url) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!ctx->tab_origin.is_empty()) { brave::RemoveTrackableSecurityHeadersForThirdParty( ctx->request_url, url::Origin::Create(ctx->tab_origin), @@ -193,6 +197,7 @@ int BraveRequestHandler::OnHeadersReceived( void BraveRequestHandler::OnURLRequestDestroyed( std::shared_ptr ctx) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (base::Contains(callbacks_, ctx->request_identifier)) { callbacks_.erase(ctx->request_identifier); } @@ -201,12 +206,24 @@ void BraveRequestHandler::OnURLRequestDestroyed( void BraveRequestHandler::RunCallbackForRequestIdentifier( uint64_t request_identifier, int rv) { + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + task_runner_->PostTask(FROM_HERE, base::BindOnce( + &BraveRequestHandler::RunCallbackForRequestIdentifierInTaskRunner, + weak_factory_io_.GetWeakPtr(), request_identifier, rv)); +} + +void BraveRequestHandler::RunCallbackForRequestIdentifierInTaskRunner( + uint64_t request_identifier, + int rv) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!base::Contains(callbacks_, request_identifier)) + return; + std::map::iterator it = callbacks_.find(request_identifier); // We intentionally do the async call to maintain the proper flow // of URLLoader callbacks. - base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::IO}, - base::BindOnce(std::move(it->second), rv)); + task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(it->second), rv)); } // TODO(iefremov): Merge all callback containers into one and run only one loop @@ -215,10 +232,6 @@ void BraveRequestHandler::RunNextCallback( std::shared_ptr ctx) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - if (!base::Contains(callbacks_, ctx->request_identifier)) { - return; - } - // Continue processing callbacks until we hit one that returns PENDING int rv = net::OK; @@ -228,7 +241,9 @@ void BraveRequestHandler::RunNextCallback( brave::OnBeforeURLRequestCallback callback = before_url_request_callbacks_[ctx->next_url_request_index++]; brave::ResponseCallback next_callback = base::Bind( - &BraveRequestHandler::RunNextCallback, base::Unretained(this), ctx); + &BraveRequestHandler::RunNextCallback, + weak_factory_.GetWeakPtr(), + ctx); rv = callback.Run(next_callback, ctx); if (rv == net::ERR_IO_PENDING) { return; @@ -243,7 +258,9 @@ void BraveRequestHandler::RunNextCallback( brave::OnBeforeStartTransactionCallback callback = before_start_transaction_callbacks_[ctx->next_url_request_index++]; brave::ResponseCallback next_callback = base::Bind( - &BraveRequestHandler::RunNextCallback, base::Unretained(this), ctx); + &BraveRequestHandler::RunNextCallback, + weak_factory_.GetWeakPtr(), + ctx); rv = callback.Run(ctx->headers, next_callback, ctx); if (rv == net::ERR_IO_PENDING) { return; @@ -257,7 +274,9 @@ void BraveRequestHandler::RunNextCallback( brave::OnHeadersReceivedCallback callback = headers_received_callbacks_[ctx->next_url_request_index++]; brave::ResponseCallback next_callback = base::Bind( - &BraveRequestHandler::RunNextCallback, base::Unretained(this), ctx); + &BraveRequestHandler::RunNextCallback, + weak_factory_.GetWeakPtr(), + ctx); rv = callback.Run(ctx->original_response_headers, ctx->override_response_headers, ctx->allowed_unsafe_redirect_url, next_callback, ctx); @@ -277,8 +296,7 @@ void BraveRequestHandler::RunNextCallback( if (ctx->event_type == brave::kOnBeforeRequest) { if (!ctx->new_url_spec.empty() && - (ctx->new_url_spec != ctx->request_url.spec()) && - IsRequestIdentifierValid(ctx->request_identifier)) { + ctx->new_url_spec != ctx->request_url.spec()) { *ctx->new_url = GURL(ctx->new_url_spec); } if (ctx->blocked_by == brave::kAdBlocked) { diff --git a/browser/net/brave_request_handler.h b/browser/net/brave_request_handler.h index c3a93ec015b..5d3daa52a2b 100644 --- a/browser/net/brave_request_handler.h +++ b/browser/net/brave_request_handler.h @@ -11,6 +11,8 @@ #include #include +#include "base/sequence_checker.h" +#include "base/threading/thread_task_runner_handle.h" #include "brave/browser/net/url_context.h" #include "content/public/browser/browser_thread.h" #include "net/base/completion_once_callback.h" @@ -26,8 +28,6 @@ class BraveRequestHandler { BraveRequestHandler(); ~BraveRequestHandler(); - bool IsRequestIdentifierValid(uint64_t request_identifier); - int OnBeforeURLRequest(std::shared_ptr ctx, net::CompletionOnceCallback callback, GURL* new_url); @@ -46,6 +46,8 @@ class BraveRequestHandler { void RunCallbackForRequestIdentifier(uint64_t request_identifier, int rv); private: + void RunCallbackForRequestIdentifierInTaskRunner(uint64_t request_identifier, + int rv); void SetupCallbacks(); void InitPrefChangeRegistrarOnUI(); void SetReferralHeaders(base::ListValue* referral_headers); @@ -70,6 +72,12 @@ class BraveRequestHandler { std::unique_ptr pref_change_registrar_; + scoped_refptr task_runner_; + + SEQUENCE_CHECKER(sequence_checker_); + + base::WeakPtrFactory weak_factory_io_{this}; + base::WeakPtrFactory weak_factory_ui_{this}; base::WeakPtrFactory weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(BraveRequestHandler); }; diff --git a/browser/net/resource_context_data.cc b/browser/net/resource_context_data.cc index 35c944babcb..4a53e3fef21 100644 --- a/browser/net/resource_context_data.cc +++ b/browser/net/resource_context_data.cc @@ -10,31 +10,33 @@ #include "brave/browser/net/brave_proxying_url_loader_factory.h" #include "brave/browser/net/brave_proxying_web_socket.h" #include "brave/browser/net/brave_request_handler.h" -#include "content/public/browser/resource_context.h" +#include "content/public/browser/browser_context.h" // User data key for ResourceContextData. const void* const kResourceContextUserDataKey = &kResourceContextUserDataKey; ResourceContextData::ResourceContextData() : request_id_generator_(base::MakeRefCounted()), - weak_factory_(this) {} + weak_factory_(this) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); +} ResourceContextData::~ResourceContextData() = default; // static void ResourceContextData::StartProxying( - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, int render_process_id, int frame_tree_node_id, network::mojom::URLLoaderFactoryRequest request, network::mojom::URLLoaderFactoryPtrInfo target_factory) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); auto* self = static_cast( - resource_context->GetUserData(kResourceContextUserDataKey)); + browser_context->GetUserData(kResourceContextUserDataKey)); if (!self) { self = new ResourceContextData(); - resource_context->SetUserData(kResourceContextUserDataKey, + browser_context->SetUserData(kResourceContextUserDataKey, base::WrapUnique(self)); } @@ -43,7 +45,7 @@ void ResourceContextData::StartProxying( } auto proxy = std::make_unique( - self->request_handler_.get(), resource_context, render_process_id, + self->request_handler_.get(), browser_context, render_process_id, frame_tree_node_id, std::move(request), std::move(target_factory), self->request_id_generator_, base::BindOnce(&ResourceContextData::RemoveProxy, @@ -53,24 +55,24 @@ void ResourceContextData::StartProxying( } // static -void ResourceContextData::StartProxyingWebSocket( +BraveProxyingWebSocket* ResourceContextData::StartProxyingWebSocket( content::ContentBrowserClient::WebSocketFactory factory, const GURL& url, const GURL& site_for_cookies, const base::Optional& user_agent, network::mojom::WebSocketHandshakeClientPtrInfo handshake_client, - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, int render_process_id, int frame_id, int frame_tree_node_id, const url::Origin& origin) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); auto* self = static_cast( - resource_context->GetUserData(kResourceContextUserDataKey)); + browser_context->GetUserData(kResourceContextUserDataKey)); if (!self) { self = new ResourceContextData(); - resource_context->SetUserData(kResourceContextUserDataKey, + browser_context->SetUserData(kResourceContextUserDataKey, base::WrapUnique(self)); } @@ -92,14 +94,14 @@ void ResourceContextData::StartProxyingWebSocket( auto proxy = std::make_unique( std::move(factory), request, network::mojom::WebSocketHandshakeClientPtr(std::move(handshake_client)), - render_process_id, frame_tree_node_id, resource_context, + render_process_id, frame_tree_node_id, browser_context, self->request_id_generator_, self->request_handler_.get(), base::BindOnce(&ResourceContextData::RemoveProxyWebSocket, - self->weak_factory_.GetWeakPtr())); + self->weak_factory_.GetWeakPtr())); auto* raw_proxy = proxy.get(); self->websocket_proxies_.emplace(std::move(proxy)); - raw_proxy->Start(); + return raw_proxy; } diff --git a/browser/net/resource_context_data.h b/browser/net/resource_context_data.h index bd852f1fa37..d0e65aaac41 100644 --- a/browser/net/resource_context_data.h +++ b/browser/net/resource_context_data.h @@ -24,7 +24,7 @@ class BraveProxyingWebSocket; class BraveRequestHandler; namespace content { -class ResourceContext; +class BrowserContext; } // Used for both URLLoaders and WebSocket proxies. @@ -33,7 +33,7 @@ class RequestIDGenerator public: RequestIDGenerator() = default; int64_t Generate() { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); return ++id_; } @@ -55,19 +55,19 @@ class ResourceContextData : public base::SupportsUserData::Data { ~ResourceContextData() override; static void StartProxying( - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, int render_process_id, int frame_tree_node_id, network::mojom::URLLoaderFactoryRequest request, network::mojom::URLLoaderFactoryPtrInfo target_factory); - static void StartProxyingWebSocket( + static BraveProxyingWebSocket* StartProxyingWebSocket( content::ContentBrowserClient::WebSocketFactory factory, const GURL& url, const GURL& site_for_cookies, const base::Optional& user_agent, network::mojom::WebSocketHandshakeClientPtrInfo handshake_client, - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, int render_process_id, int frame_id, int frame_tree_node_id, diff --git a/browser/net/url_context.cc b/browser/net/url_context.cc index 3e0cc0fe88c..6849662e410 100644 --- a/browser/net/url_context.cc +++ b/browser/net/url_context.cc @@ -16,6 +16,7 @@ #include "brave/components/brave_shields/browser/brave_shields_web_contents_observer.h" #include "brave/components/brave_shields/common/brave_shield_constants.h" #include "brave/components/brave_webtorrent/browser/buildflags/buildflags.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_io_data.h" #include "chrome/browser/profiles/profile_manager.h" #include "components/prefs/testing_pref_service.h" @@ -24,6 +25,7 @@ #include "net/base/upload_data_stream.h" #if BUILDFLAG(ENABLE_BRAVE_WEBTORRENT) +#include "extensions/browser/extension_registry.h" #include "extensions/browser/info_map.h" #endif @@ -31,8 +33,27 @@ namespace brave { namespace { +bool IsWebTorrentDisabled(content::BrowserContext* browser_context) { +#if BUILDFLAG(ENABLE_BRAVE_WEBTORRENT) + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + DCHECK(browser_context); + auto* extension_registry = + extensions::ExtensionRegistry::Get(browser_context); + + if (!extension_registry) + return true; + + if (extension_registry->enabled_extensions().Contains( + brave_webtorrent_extension_id)) + return false; +#endif // BUILDFLAG(ENABLE_BRAVE_WEBTORRENT) + + return true; +} + bool IsWebTorrentDisabled(content::ResourceContext* resource_context) { #if BUILDFLAG(ENABLE_BRAVE_WEBTORRENT) + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); DCHECK(resource_context); const ProfileIOData* io_data = @@ -101,6 +122,7 @@ BraveRequestInfo::~BraveRequestInfo() = default; void BraveRequestInfo::FillCTXFromRequest(const net::URLRequest* request, std::shared_ptr ctx) { + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); ctx->request_identifier = request->identifier(); ctx->request_url = request->url(); if (request->initiator().has_value()) { @@ -160,8 +182,9 @@ void BraveRequestInfo::FillCTX( int render_process_id, int frame_tree_node_id, uint64_t request_identifier, - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, std::shared_ptr ctx) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); ctx->request_identifier = request_identifier; ctx->request_url = request.url; // TODO(iefremov): Replace GURL with Origin @@ -174,7 +197,7 @@ void BraveRequestInfo::FillCTX( ctx->resource_type = static_cast(request.resource_type); - ctx->is_webtorrent_disabled = IsWebTorrentDisabled(resource_context); + ctx->is_webtorrent_disabled = IsWebTorrentDisabled(browser_context); ctx->render_frame_id = request.render_frame_id; ctx->render_process_id = render_process_id; @@ -205,24 +228,17 @@ void BraveRequestInfo::FillCTX( ctx->frame_tree_node_id).GetOrigin(); } - ProfileIOData* io_data = - ProfileIOData::FromResourceContext(resource_context); - - ctx->allow_brave_shields = brave_shields::IsAllowContentSettingWithIOData( - io_data, ctx->tab_origin, ctx->tab_origin, CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kBraveShields) && - !ctx->tab_origin.SchemeIs(kChromeExtensionScheme); - ctx->allow_ads = brave_shields::IsAllowContentSettingWithIOData( - io_data, ctx->tab_origin, ctx->tab_origin, CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kAds); + Profile* profile = Profile::FromBrowserContext(browser_context); + ctx->allow_brave_shields = + brave_shields::GetBraveShieldsEnabled(profile, ctx->tab_origin); + ctx->allow_ads = + brave_shields::GetAdControlType(profile, ctx->tab_origin) == + brave_shields::ControlType::ALLOW; ctx->allow_http_upgradable_resource = - brave_shields::IsAllowContentSettingWithIOData(io_data, ctx->tab_origin, - ctx->tab_origin, CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kHTTPUpgradableResources); - ctx->allow_referrers = brave_shields::IsAllowContentSettingWithIOData( - io_data, ctx->tab_origin, ctx->tab_origin, CONTENT_SETTINGS_TYPE_PLUGINS, - brave_shields::kReferrers); - + !brave_shields::GetHTTPSEverywhereEnabled(profile, ctx->tab_origin); + ctx->allow_referrers = + brave_shields::GetCookieControlType(profile, ctx->tab_origin) == + brave_shields::ControlType::ALLOW; ctx->upload_data = GetUploadData(request); } diff --git a/browser/net/url_context.h b/browser/net/url_context.h index 38770764e8b..3a39bd09d67 100644 --- a/browser/net/url_context.h +++ b/browser/net/url_context.h @@ -16,7 +16,7 @@ #include "url/gurl.h" namespace content { -class ResourceContext; +class BrowserContext; } namespace network { @@ -109,7 +109,7 @@ struct BraveRequestInfo { int render_process_id, int frame_tree_node_id, uint64_t request_identifier, - content::ResourceContext* resource_context, + content::BrowserContext* browser_context, std::shared_ptr ctx); private: From f0fd878bcdfec4395c31d1f95f0045eab919720b Mon Sep 17 00:00:00 2001 From: bridiver Date: Tue, 3 Sep 2019 13:57:33 -0700 Subject: [PATCH 56/63] fix missing deps --- browser/net/BUILD.gn | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/browser/net/BUILD.gn b/browser/net/BUILD.gn index 87629407d6e..1f12ee20581 100644 --- a/browser/net/BUILD.gn +++ b/browser/net/BUILD.gn @@ -36,7 +36,10 @@ source_set("net") { "//base", "//brave/app:brave_generated_resources_grit", "//brave/browser/safebrowsing", + "//brave/browser/translate/buildflags", + "//brave/components/brave_referrals/buildflags", "//brave/components/brave_shields/browser", + "//brave/components/brave_webtorrent/browser/buildflags", "//brave/extensions:common", "//components/prefs", "//content/public/browser", @@ -65,6 +68,7 @@ source_set("net") { if (enable_brave_webtorrent) { deps += [ "//brave/components/brave_webtorrent/browser/net", + "//extensions/browser", ] } From 5476dff3952ab47f4949038c45637af579989b42 Mon Sep 17 00:00:00 2001 From: bridiver Date: Tue, 3 Sep 2019 13:57:53 -0700 Subject: [PATCH 57/63] use dedicated referrers check --- browser/net/url_context.cc | 3 +-- .../brave_shields/browser/brave_shields_util.cc | 12 ++++++++++++ .../brave_shields/browser/brave_shields_util.h | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/browser/net/url_context.cc b/browser/net/url_context.cc index 6849662e410..926f80b6bdd 100644 --- a/browser/net/url_context.cc +++ b/browser/net/url_context.cc @@ -237,8 +237,7 @@ void BraveRequestInfo::FillCTX( ctx->allow_http_upgradable_resource = !brave_shields::GetHTTPSEverywhereEnabled(profile, ctx->tab_origin); ctx->allow_referrers = - brave_shields::GetCookieControlType(profile, ctx->tab_origin) == - brave_shields::ControlType::ALLOW; + brave_shields::AllowReferrers(profile, ctx->tab_origin); ctx->upload_data = GetUploadData(request); } diff --git a/components/brave_shields/browser/brave_shields_util.cc b/components/brave_shields/browser/brave_shields_util.cc index 5af0943aed6..5aed04425e7 100644 --- a/components/brave_shields/browser/brave_shields_util.cc +++ b/components/brave_shields/browser/brave_shields_util.cc @@ -238,6 +238,18 @@ ControlType GetCookieControlType(HostContentSettingsMap* map, const GURL& url) { } } +bool AllowReferrers(Profile* profile, const GURL& url) { + return AllowReferrers( + HostContentSettingsMapFactory::GetForProfile(profile), url); +} + +bool AllowReferrers(HostContentSettingsMap* map, const GURL& url) { + ContentSetting setting = map->GetContentSetting( + url, GURL(), CONTENT_SETTINGS_TYPE_PLUGINS, kReferrers); + + return setting != CONTENT_SETTING_BLOCK; +} + void SetFingerprintingControlType(Profile* profile, ControlType type, const GURL& url) { diff --git a/components/brave_shields/browser/brave_shields_util.h b/components/brave_shields/browser/brave_shields_util.h index fa4f1e1ac1a..d5b0e2c2045 100644 --- a/components/brave_shields/browser/brave_shields_util.h +++ b/components/brave_shields/browser/brave_shields_util.h @@ -51,6 +51,10 @@ void SetCookieControlType(HostContentSettingsMap* map, const GURL& url); ControlType GetCookieControlType(Profile* profile, const GURL& url); ControlType GetCookieControlType(HostContentSettingsMap* map, const GURL& url); +// referrers is always set along with cookies so there is no setter and +// these is just included for backwards compat +bool AllowReferrers(Profile* profile, const GURL& url); +bool AllowReferrers(HostContentSettingsMap* map, const GURL& url); void SetFingerprintingControlType(Profile* profile, ControlType type, From 3793dd1279278e95124c5d82e1997551b93b3df1 Mon Sep 17 00:00:00 2001 From: bridiver Date: Tue, 3 Sep 2019 17:21:17 -0700 Subject: [PATCH 58/63] fix header handling crash --- browser/net/brave_proxying_web_socket.cc | 42 ++++++++++++++---------- browser/net/brave_proxying_web_socket.h | 2 +- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/browser/net/brave_proxying_web_socket.cc b/browser/net/brave_proxying_web_socket.cc index 332a43c52f9..358099734dc 100644 --- a/browser/net/brave_proxying_web_socket.cc +++ b/browser/net/brave_proxying_web_socket.cc @@ -13,6 +13,7 @@ #include "base/strings/stringprintf.h" #include "base/task/post_task.h" #include "brave/browser/net/brave_request_handler.h" +#include "brave/common/network_constants.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" @@ -82,7 +83,6 @@ void BraveProxyingWebSocket::Start() { weak_factory_.GetWeakPtr()); } - bool should_collapse_initiator = false; ctx_ = std::make_shared(); brave::BraveRequestInfo::FillCTX(request_, process_id_, frame_tree_node_id_, request_id_, @@ -90,11 +90,9 @@ void BraveProxyingWebSocket::Start() { int result = request_handler_->OnBeforeURLRequest( ctx_, continuation, &redirect_url_); - // It doesn't make sense to collapse WebSocket requests since they won't be - // associated with a DOM element. - DCHECK(!should_collapse_initiator); - - if (result == net::ERR_BLOCKED_BY_CLIENT) { + if (result == net::ERR_BLOCKED_BY_CLIENT || + // handle adblock kEmptyDataURI + redirect_url_ == kEmptyDataURI) { OnError(result); return; } @@ -183,7 +181,9 @@ void BraveProxyingWebSocket::ContinueToHeadersReceived() { ctx_, continuation, response_.headers.get(), &override_headers_, &redirect_url_); - if (result == net::ERR_BLOCKED_BY_CLIENT) { + if (result == net::ERR_BLOCKED_BY_CLIENT || + // handle adblock kEmptyDataURI + redirect_url_ == kEmptyDataURI) { OnError(result); return; } @@ -280,7 +280,7 @@ void BraveProxyingWebSocket::OnBeforeRequestComplete(int error_code) { void BraveProxyingWebSocket::OnBeforeSendHeadersCompleteFromProxy( int error_code, - const net::HttpRequestHeaders& headers) { + const base::Optional& headers) { if (error_code != net::OK) { OnError(error_code); return; @@ -289,7 +289,8 @@ void BraveProxyingWebSocket::OnBeforeSendHeadersCompleteFromProxy( if (on_before_send_headers_callback_) std::move(on_before_send_headers_callback_).Run(error_code, headers); - ContinueToStartRequest(error_code); + if (!proxy_has_extra_headers()) + ContinueToStartRequest(error_code); } void BraveProxyingWebSocket::OnBeforeSendHeadersComplete(int error_code) { @@ -300,11 +301,13 @@ void BraveProxyingWebSocket::OnBeforeSendHeadersComplete(int error_code) { } if (proxy_has_extra_headers()) { - DCHECK(on_before_send_headers_callback_); proxy_trusted_header_client_->OnBeforeSendHeaders( - request_.headers, std::move(on_before_send_headers_callback_)); + request_.headers, + base::BindOnce( + &BraveProxyingWebSocket::OnBeforeSendHeadersCompleteFromProxy, + weak_factory_.GetWeakPtr())); } else { - ContinueToStartRequest(net::OK); + OnBeforeSendHeadersCompleteFromProxy(net::OK, request_.headers); } } @@ -357,6 +360,8 @@ void BraveProxyingWebSocket::OnHeadersReceivedCompleteFromProxy( response_.headers = override_headers_; override_headers_ = nullptr; } + + ResumeIncomingMethodCallProcessing(); } void BraveProxyingWebSocket::OnHeadersReceivedComplete(int error_code) { @@ -365,18 +370,19 @@ void BraveProxyingWebSocket::OnHeadersReceivedComplete(int error_code) { return; } + std::string headers; + if (override_headers_) + headers = override_headers_->raw_headers(); + if (proxy_has_extra_headers()) { proxy_trusted_header_client_->OnHeadersReceived( - override_headers_->raw_headers(), + headers, base::BindOnce( &BraveProxyingWebSocket::OnHeadersReceivedCompleteFromProxy, weak_factory_.GetWeakPtr())); } else { - if (override_headers_) { - response_.headers = override_headers_; - override_headers_ = nullptr; - } - ResumeIncomingMethodCallProcessing(); + OnHeadersReceivedCompleteFromProxy( + error_code, base::Optional(headers), GURL()); } } diff --git a/browser/net/brave_proxying_web_socket.h b/browser/net/brave_proxying_web_socket.h index b991567c71e..16b36429a39 100644 --- a/browser/net/brave_proxying_web_socket.h +++ b/browser/net/brave_proxying_web_socket.h @@ -105,7 +105,7 @@ class BraveProxyingWebSocket : public network::mojom::WebSocketHandshakeClient, void ContinueToHeadersReceived(); void OnBeforeSendHeadersCompleteFromProxy( int error_code, - const net::HttpRequestHeaders& headers); + const base::Optional& headers); void OnHeadersReceivedCompleteFromProxy( int error_code, const base::Optional& headers, From 40333463c0e78e18dac39680e313416d9d347a99 Mon Sep 17 00:00:00 2001 From: bridiver Date: Tue, 3 Sep 2019 21:10:02 -0700 Subject: [PATCH 59/63] fix header handling --- browser/net/BUILD.gn | 1 + browser/net/brave_proxying_web_socket.cc | 81 +++++++++++++----------- browser/net/brave_proxying_web_socket.h | 1 - 3 files changed, 46 insertions(+), 37 deletions(-) diff --git a/browser/net/BUILD.gn b/browser/net/BUILD.gn index 1f12ee20581..68a8f39aa2e 100644 --- a/browser/net/BUILD.gn +++ b/browser/net/BUILD.gn @@ -37,6 +37,7 @@ source_set("net") { "//brave/app:brave_generated_resources_grit", "//brave/browser/safebrowsing", "//brave/browser/translate/buildflags", + "//brave/common", "//brave/components/brave_referrals/buildflags", "//brave/components/brave_shields/browser", "//brave/components/brave_webtorrent/browser/buildflags", diff --git a/browser/net/brave_proxying_web_socket.cc b/browser/net/brave_proxying_web_socket.cc index 358099734dc..03433a2eebe 100644 --- a/browser/net/brave_proxying_web_socket.cc +++ b/browser/net/brave_proxying_web_socket.cc @@ -89,6 +89,7 @@ void BraveProxyingWebSocket::Start() { browser_context_, ctx_); int result = request_handler_->OnBeforeURLRequest( ctx_, continuation, &redirect_url_); + // TODO(bridiver) - need to handle general case for redirect_url if (result == net::ERR_BLOCKED_BY_CLIENT || // handle adblock kEmptyDataURI @@ -127,10 +128,16 @@ void BraveProxyingWebSocket::WebSocketFactoryRun(const GURL& url, network::mojom::TrustedHeaderClientPtr trusted_header_client) { DCHECK(!forwarding_handshake_client_); proxy_url_ = url; - proxy_additional_headers_ = std::move(additional_headers); forwarding_handshake_client_ = std::move(handshake_client); proxy_auth_handler_ = std::move(auth_handler); proxy_trusted_header_client_ = std::move(trusted_header_client); + + if (!proxy_has_extra_headers()) { + for (const auto& header : additional_headers) { + request_.headers.SetHeader(header->name, header->value); + } + } + Start(); } @@ -255,6 +262,33 @@ void BraveProxyingWebSocket::OnBeforeRequestComplete(int error_code) { return; } + if (proxy_has_extra_headers()) { + proxy_trusted_header_client_->OnBeforeSendHeaders( + request_.headers, + base::BindOnce( + &BraveProxyingWebSocket::OnBeforeSendHeadersCompleteFromProxy, + weak_factory_.GetWeakPtr())); + } else { + OnBeforeSendHeadersCompleteFromProxy( + net::OK, request_.headers); + } +} + +void BraveProxyingWebSocket::OnBeforeSendHeadersCompleteFromProxy( + int error_code, + const base::Optional& headers) { + DCHECK(proxy_has_extra_headers() || !binding_as_handshake_client_.is_bound()); + if (error_code != net::OK) { + OnError(error_code); + return; + } + + // update the headers from the proxy + if (headers) + request_.headers = *headers; + else + request_.headers.Clear(); + auto continuation = base::BindRepeating( &BraveProxyingWebSocket::OnBeforeSendHeadersComplete, weak_factory_.GetWeakPtr()); @@ -275,56 +309,31 @@ void BraveProxyingWebSocket::OnBeforeRequestComplete(int error_code) { return; DCHECK_EQ(net::OK, result); - OnBeforeSendHeadersComplete(net::OK); + continuation.Run(net::OK); } -void BraveProxyingWebSocket::OnBeforeSendHeadersCompleteFromProxy( - int error_code, - const base::Optional& headers) { +void BraveProxyingWebSocket::OnBeforeSendHeadersComplete(int error_code) { + DCHECK(proxy_has_extra_headers() || !binding_as_handshake_client_.is_bound()); + if (error_code != net::OK) { OnError(error_code); return; } if (on_before_send_headers_callback_) - std::move(on_before_send_headers_callback_).Run(error_code, headers); + std::move(on_before_send_headers_callback_).Run( + error_code, base::Optional(request_.headers)); if (!proxy_has_extra_headers()) ContinueToStartRequest(error_code); } -void BraveProxyingWebSocket::OnBeforeSendHeadersComplete(int error_code) { - DCHECK(proxy_has_extra_headers() || !binding_as_handshake_client_.is_bound()); - if (error_code != net::OK) { - OnError(error_code); - return; - } - - if (proxy_has_extra_headers()) { - proxy_trusted_header_client_->OnBeforeSendHeaders( - request_.headers, - base::BindOnce( - &BraveProxyingWebSocket::OnBeforeSendHeadersCompleteFromProxy, - weak_factory_.GetWeakPtr())); - } else { - OnBeforeSendHeadersCompleteFromProxy(net::OK, request_.headers); - } -} - void BraveProxyingWebSocket::ContinueToStartRequest(int error_code) { - base::flat_set used_header_names; std::vector additional_headers; - for (net::HttpRequestHeaders::Iterator it(request_.headers); it.GetNext();) { - additional_headers.push_back( - network::mojom::HttpHeader::New(it.name(), it.value())); - used_header_names.insert(base::ToLowerASCII(it.name())); - } - if (!proxy_additional_headers_.empty()) { - for (const auto& header : proxy_additional_headers_) { - if (!used_header_names.contains(base::ToLowerASCII(header->name))) { - additional_headers.push_back( - network::mojom::HttpHeader::New(header->name, header->value)); - } + if (!proxy_has_extra_headers()) { + for (net::HttpRequestHeaders::Iterator it(request_.headers); it.GetNext();) { + additional_headers.push_back( + network::mojom::HttpHeader::New(it.name(), it.value())); } } diff --git a/browser/net/brave_proxying_web_socket.h b/browser/net/brave_proxying_web_socket.h index 16b36429a39..d81125a474a 100644 --- a/browser/net/brave_proxying_web_socket.h +++ b/browser/net/brave_proxying_web_socket.h @@ -144,7 +144,6 @@ class BraveProxyingWebSocket : public network::mojom::WebSocketHandshakeClient, // chrome websocket proxy GURL proxy_url_; - std::vector proxy_additional_headers_; network::mojom::AuthenticationHandlerPtr proxy_auth_handler_; network::mojom::TrustedHeaderClientPtr proxy_trusted_header_client_; From ac7eac2daa7f3fcd10e4f6b9317179653c420fe0 Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Wed, 4 Sep 2019 09:40:07 -0400 Subject: [PATCH 60/63] Lint fixes. --- ...utocomplete_provider_client_browsertest.cc | 3 +- .../brave_autocomplete_scheme_classifier.cc | 5 ++- browser/brave_browser_main_extra_parts.cc | 3 +- browser/brave_browser_main_extra_parts.h | 5 ++- .../brave_extension_provider_browsertest.cc | 39 ++++++++++++------- browser/net/brave_proxying_web_socket.cc | 3 +- browser/net/resource_context_data.cc | 1 + browser/net/resource_context_data.h | 1 + .../profiles/tor_unittest_profile_manager.h | 5 ++- browser/themes/brave_theme_utils_internal.cc | 7 ++-- browser/ui/webui/brave_rewards_source.cc | 3 +- browser/ui/webui/brave_rewards_source.h | 3 +- .../webui/brave_web_ui_controller_factory.h | 11 ++++-- .../browser/profiles/profile_io_data.cc | 3 +- .../https_everywhere_service_browsertest.cc | 30 ++++++++------ .../brave_shared_resources_data_source.cc | 4 +- .../brave_shared_resources_data_source.h | 17 +++++--- .../renderer/brave_shields_content_setting.cc | 31 +++++++++------ utility/importer/chrome_importer.cc | 1 + 19 files changed, 113 insertions(+), 62 deletions(-) diff --git a/browser/autocomplete/brave_autocomplete_provider_client_browsertest.cc b/browser/autocomplete/brave_autocomplete_provider_client_browsertest.cc index 47b8370d1ef..293fc07ea2a 100644 --- a/browser/autocomplete/brave_autocomplete_provider_client_browsertest.cc +++ b/browser/autocomplete/brave_autocomplete_provider_client_browsertest.cc @@ -1,4 +1,5 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ diff --git a/browser/autocomplete/brave_autocomplete_scheme_classifier.cc b/browser/autocomplete/brave_autocomplete_scheme_classifier.cc index a488758c8d1..178a547c0e9 100644 --- a/browser/autocomplete/brave_autocomplete_scheme_classifier.cc +++ b/browser/autocomplete/brave_autocomplete_scheme_classifier.cc @@ -1,9 +1,12 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "brave/browser/autocomplete/brave_autocomplete_scheme_classifier.h" +#include + #include "base/strings/string_util.h" #include "brave/common/url_constants.h" #include "brave/components/brave_webtorrent/browser/buildflags/buildflags.h" diff --git a/browser/brave_browser_main_extra_parts.cc b/browser/brave_browser_main_extra_parts.cc index 775dec8e09a..2f02b25a1dc 100644 --- a/browser/brave_browser_main_extra_parts.cc +++ b/browser/brave_browser_main_extra_parts.cc @@ -1,4 +1,5 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ diff --git a/browser/brave_browser_main_extra_parts.h b/browser/brave_browser_main_extra_parts.h index de6f46b7b28..1ac092fc78b 100644 --- a/browser/brave_browser_main_extra_parts.h +++ b/browser/brave_browser_main_extra_parts.h @@ -1,4 +1,5 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ @@ -12,7 +13,7 @@ class BraveBrowserMainExtraParts : public ChromeBrowserMainExtraParts { public: - explicit BraveBrowserMainExtraParts(); + BraveBrowserMainExtraParts(); ~BraveBrowserMainExtraParts() override; // ChromeBrowserMainExtraParts overrides. diff --git a/browser/extensions/brave_extension_provider_browsertest.cc b/browser/extensions/brave_extension_provider_browsertest.cc index 96ef5802f8c..2b30de88066 100644 --- a/browser/extensions/brave_extension_provider_browsertest.cc +++ b/browser/extensions/brave_extension_provider_browsertest.cc @@ -1,4 +1,5 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ @@ -29,8 +30,8 @@ namespace extensions { IN_PROC_BROWSER_TEST_F(BraveExtensionProviderTest, BlacklistExtension) { base::FilePath test_data_dir; GetTestDataDir(&test_data_dir); - const extensions::Extension* extension = - InstallExtension(test_data_dir.AppendASCII("should-be-blocked-extension"), 0); + const extensions::Extension* extension = InstallExtension( + test_data_dir.AppendASCII("should-be-blocked-extension"), 0); ASSERT_FALSE(extension); } @@ -45,15 +46,19 @@ IN_PROC_BROWSER_TEST_F(BraveExtensionProviderTest, WhitelistedExtension) { // Load an extension page with an ad image, and make sure it is NOT blocked. // It would otherwise be blocked though if it wasn't an extension. -IN_PROC_BROWSER_TEST_F(BraveExtensionProviderTest, AdsNotBlockedByDefaultBlockerInExtension) { +IN_PROC_BROWSER_TEST_F(BraveExtensionProviderTest, + AdsNotBlockedByDefaultBlockerInExtension) { base::FilePath test_data_dir; GetTestDataDir(&test_data_dir); - const extensions::Extension* extension = InstallExtensionSilently(extension_service(), + const extensions::Extension* extension = InstallExtensionSilently( + extension_service(), test_data_dir.AppendASCII("extension-compat-test-extension.crx")); - GURL url = GURL(std::string(kChromeExtensionScheme) + "://" + extension->id() + "/blocking.html"); + GURL url = GURL(std::string(kChromeExtensionScheme) + "://" + + extension->id() + "/blocking.html"); ui_test_utils::NavigateToURL(browser(), url); - content::WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); + content::WebContents* contents = + browser()->tab_strip_model()->GetActiveWebContents(); ASSERT_TRUE(content::WaitForLoadStop(contents)); EXPECT_EQ(url, contents->GetURL()); @@ -70,12 +75,15 @@ IN_PROC_BROWSER_TEST_F(BraveExtensionProviderTest, AdsNotBlockedByDefaultBlocker IN_PROC_BROWSER_TEST_F(BraveExtensionProviderTest, ExtensionsCanGetCookies) { base::FilePath test_data_dir; GetTestDataDir(&test_data_dir); - const extensions::Extension* extension = InstallExtensionSilently(extension_service(), + const extensions::Extension* extension = InstallExtensionSilently( + extension_service(), test_data_dir.AppendASCII("extension-compat-test-extension.crx")); - GURL url = GURL(std::string(kChromeExtensionScheme) + "://" + extension->id() + "/blocking.html"); + GURL url = GURL(std::string(kChromeExtensionScheme) + "://" + + extension->id() + "/blocking.html"); ui_test_utils::NavigateToURL(browser(), url); - content::WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); + content::WebContents* contents = + browser()->tab_strip_model()->GetActiveWebContents(); ASSERT_TRUE(content::WaitForLoadStop(contents)); EXPECT_EQ(url, contents->GetURL()); @@ -90,12 +98,15 @@ IN_PROC_BROWSER_TEST_F(BraveExtensionProviderTest, ExtensionsCanGetCookies) { IN_PROC_BROWSER_TEST_F(BraveExtensionProviderTest, ExtensionsCanSetCookies) { base::FilePath test_data_dir; GetTestDataDir(&test_data_dir); - const extensions::Extension* extension = InstallExtensionSilently(extension_service(), + const extensions::Extension* extension = InstallExtensionSilently( + extension_service(), test_data_dir.AppendASCII("extension-compat-test-extension.crx")); - GURL url = GURL(std::string(kChromeExtensionScheme) + "://" + extension->id() + "/blocking.html"); + GURL url = GURL(std::string(kChromeExtensionScheme) + "://" + + extension->id() + "/blocking.html"); ui_test_utils::NavigateToURL(browser(), url); - content::WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); + content::WebContents* contents = + browser()->tab_strip_model()->GetActiveWebContents(); ASSERT_TRUE(content::WaitForLoadStop(contents)); EXPECT_EQ(url, contents->GetURL()); @@ -107,4 +118,4 @@ IN_PROC_BROWSER_TEST_F(BraveExtensionProviderTest, ExtensionsCanSetCookies) { EXPECT_TRUE(as_expected); } -} // namespace extnesions +} // namespace extensions diff --git a/browser/net/brave_proxying_web_socket.cc b/browser/net/brave_proxying_web_socket.cc index 03433a2eebe..26f02750aaf 100644 --- a/browser/net/brave_proxying_web_socket.cc +++ b/browser/net/brave_proxying_web_socket.cc @@ -331,7 +331,8 @@ void BraveProxyingWebSocket::OnBeforeSendHeadersComplete(int error_code) { void BraveProxyingWebSocket::ContinueToStartRequest(int error_code) { std::vector additional_headers; if (!proxy_has_extra_headers()) { - for (net::HttpRequestHeaders::Iterator it(request_.headers); it.GetNext();) { + for (net::HttpRequestHeaders::Iterator it(request_.headers); + it.GetNext();) { additional_headers.push_back( network::mojom::HttpHeader::New(it.name(), it.value())); } diff --git a/browser/net/resource_context_data.cc b/browser/net/resource_context_data.cc index 4a53e3fef21..766a47366fe 100644 --- a/browser/net/resource_context_data.cc +++ b/browser/net/resource_context_data.cc @@ -5,6 +5,7 @@ #include "brave/browser/net/resource_context_data.h" +#include #include #include "brave/browser/net/brave_proxying_url_loader_factory.h" diff --git a/browser/net/resource_context_data.h b/browser/net/resource_context_data.h index d0e65aaac41..a478f4b56c8 100644 --- a/browser/net/resource_context_data.h +++ b/browser/net/resource_context_data.h @@ -9,6 +9,7 @@ #include #include #include +#include #include "base/containers/unique_ptr_adapters.h" #include "base/macros.h" diff --git a/browser/profiles/tor_unittest_profile_manager.h b/browser/profiles/tor_unittest_profile_manager.h index b06352c03fe..bd13a8500e1 100644 --- a/browser/profiles/tor_unittest_profile_manager.h +++ b/browser/profiles/tor_unittest_profile_manager.h @@ -6,6 +6,8 @@ #ifndef BRAVE_BROWSER_PROFILES_TOR_UNITTEST_PROFILE_MANAGER_H_ #define BRAVE_BROWSER_PROFILES_TOR_UNITTEST_PROFILE_MANAGER_H_ +#include + #include "chrome/browser/profiles/profile_manager.h" class TorUnittestProfileManager : public ProfileManagerWithoutInit { @@ -24,7 +26,8 @@ class TorUnittestProfileManager : public ProfileManagerWithoutInit { void InitProfileUserPrefs(Profile* profile) override; private: - std::unique_ptr CreateProfile(const base::FilePath& path, Delegate* delegate); + std::unique_ptr CreateProfile(const base::FilePath& path, + Delegate* delegate); }; #endif // BRAVE_BROWSER_PROFILES_TOR_UNITTEST_PROFILE_MANAGER_H_ diff --git a/browser/themes/brave_theme_utils_internal.cc b/browser/themes/brave_theme_utils_internal.cc index 5019587eab0..b9c80fa1c1c 100644 --- a/browser/themes/brave_theme_utils_internal.cc +++ b/browser/themes/brave_theme_utils_internal.cc @@ -3,16 +3,17 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "brave/browser/themes/brave_theme_utils.h" +#include "brave/browser/themes/brave_theme_utils_internal.h" +#include "brave/browser/themes/brave_theme_utils.h" #include "ui/native_theme/native_theme.h" namespace internal { void SetSystemThemeForNonDarkModePlatform(BraveThemeType type) { // Call SetDarkMode() first then call ReCalcPreferredColorScheme() because - // ReCalcPreferredColorScheme() calculates preferred color scheme based on dark - // mode. + // ReCalcPreferredColorScheme() calculates preferred color scheme based on + // dark mode. ui::BraveThemeUtils::SetDarkMode(type == BraveThemeType::BRAVE_THEME_TYPE_DARK); ui::BraveThemeUtils::ReCalcAndSetPreferredColorScheme(); diff --git a/browser/ui/webui/brave_rewards_source.cc b/browser/ui/webui/brave_rewards_source.cc index 3ff9dbb067a..16e41a1317c 100644 --- a/browser/ui/webui/brave_rewards_source.cc +++ b/browser/ui/webui/brave_rewards_source.cc @@ -1,4 +1,5 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ diff --git a/browser/ui/webui/brave_rewards_source.h b/browser/ui/webui/brave_rewards_source.h index 87a4ae3b4b9..c04b0f88834 100644 --- a/browser/ui/webui/brave_rewards_source.h +++ b/browser/ui/webui/brave_rewards_source.h @@ -1,4 +1,5 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ diff --git a/browser/ui/webui/brave_web_ui_controller_factory.h b/browser/ui/webui/brave_web_ui_controller_factory.h index 7cd2d0b45fd..05c4d3b3bd2 100644 --- a/browser/ui/webui/brave_web_ui_controller_factory.h +++ b/browser/ui/webui/brave_web_ui_controller_factory.h @@ -1,9 +1,12 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef BRAVE_BROWSER_UI_WEBUI_CHROME_WEB_UI_CONTROLLER_FACTORY_H_ -#define BRAVE_BROWSER_UI_WEBUI_CHROME_WEB_UI_CONTROLLER_FACTORY_H_ +#ifndef BRAVE_BROWSER_UI_WEBUI_BRAVE_WEB_UI_CONTROLLER_FACTORY_H_ +#define BRAVE_BROWSER_UI_WEBUI_BRAVE_WEB_UI_CONTROLLER_FACTORY_H_ + +#include #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" @@ -31,4 +34,4 @@ class BraveWebUIControllerFactory : public ChromeWebUIControllerFactory { DISALLOW_COPY_AND_ASSIGN(BraveWebUIControllerFactory); }; -#endif // BRAVE_BROWSER_UI_WEBUI_CHROME_WEB_UI_CONTROLLER_FACTORY_H_ +#endif // BRAVE_BROWSER_UI_WEBUI_BRAVE_WEB_UI_CONTROLLER_FACTORY_H_ diff --git a/chromium_src/chrome/browser/profiles/profile_io_data.cc b/chromium_src/chrome/browser/profiles/profile_io_data.cc index 9826e0a8323..d35b58b749a 100644 --- a/chromium_src/chrome/browser/profiles/profile_io_data.cc +++ b/chromium_src/chrome/browser/profiles/profile_io_data.cc @@ -1,4 +1,5 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ diff --git a/components/brave_shields/browser/https_everywhere_service_browsertest.cc b/components/brave_shields/browser/https_everywhere_service_browsertest.cc index f3972b806c5..e5172e6be10 100644 --- a/components/brave_shields/browser/https_everywhere_service_browsertest.cc +++ b/components/brave_shields/browser/https_everywhere_service_browsertest.cc @@ -1,4 +1,5 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ @@ -17,9 +18,10 @@ using extensions::ExtensionBrowserTest; -const std::string kHTTPSEverywhereComponentTestId("bhlmpjhncoojbkemjkeppfahkglffilp"); +const char kHTTPSEverywhereComponentTestId[] = + "bhlmpjhncoojbkemjkeppfahkglffilp"; -const std::string kHTTPSEverywhereComponentTestBase64PublicKey = +const char kHTTPSEverywhereComponentTestBase64PublicKey[] = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3tAm7HooTNVGQ9cm7Yuc" "M9sLM/V38JOXzdj7z9dyDIfO64N69Gr5dn3XRzLuD+Pyzpl8MzfY/tIbWNSw3I2a" "8YcEPmyHl2L4HByKTm+eJ02ArhtkgtZKjiTDc84KQcsTBHqINkMUQYeUN3VW1lz2" @@ -29,7 +31,7 @@ const std::string kHTTPSEverywhereComponentTestBase64PublicKey = "3wIDAQAB"; class HTTPSEverywhereServiceTest : public ExtensionBrowserTest { -public: + public: HTTPSEverywhereServiceTest() {} void SetUp() override { @@ -87,9 +89,8 @@ class HTTPSEverywhereServiceTest : public ExtensionBrowserTest { } void WaitForHTTPSEverywhereServiceThread() { - scoped_refptr io_helper( - new base::ThreadTestHelper( - g_brave_browser_process->https_everywhere_service()->GetTaskRunner())); + scoped_refptr io_helper(new base::ThreadTestHelper( + g_brave_browser_process->https_everywhere_service()->GetTaskRunner())); ASSERT_TRUE(io_helper->Run()); } }; @@ -100,7 +101,8 @@ IN_PROC_BROWSER_TEST_F(HTTPSEverywhereServiceTest, RedirectsKnownSite) { GURL url = embedded_test_server()->GetURL("www.digg.com", "/"); ui_test_utils::NavigateToURL(browser(), url); - content::WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); + content::WebContents* contents = + browser()->tab_strip_model()->GetActiveWebContents(); EXPECT_EQ(GURL("https://www.digg.com/"), contents->GetLastCommittedURL()); } @@ -110,7 +112,8 @@ IN_PROC_BROWSER_TEST_F(HTTPSEverywhereServiceTest, NoRedirectsNotKnownSite) { GURL url = embedded_test_server()->GetURL("www.brianbondy.com", "/"); ui_test_utils::NavigateToURL(browser(), url); - content::WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); + content::WebContents* contents = + browser()->tab_strip_model()->GetActiveWebContents(); GURL::Replacements clear_port; clear_port.ClearPort(); @@ -128,9 +131,12 @@ IN_PROC_BROWSER_TEST_F(HTTPSEverywhereServiceTest, RedirectsKnownSiteInIframe) { GURL iframe_url = embedded_test_server()->GetURL("www.digg.com", "/"); const char kIframeID[] = "test"; - content::WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); + content::WebContents* contents = + browser()->tab_strip_model()->GetActiveWebContents(); EXPECT_TRUE(NavigateIframeToURL(contents, kIframeID, iframe_url)); - content::RenderFrameHost* iframe_contents = ChildFrameAt(contents->GetMainFrame(), 0); + content::RenderFrameHost* iframe_contents = + ChildFrameAt(contents->GetMainFrame(), 0); WaitForLoadStop(contents); - EXPECT_EQ(GURL("https://www.digg.com/"), iframe_contents->GetLastCommittedURL()); + EXPECT_EQ(GURL("https://www.digg.com/"), + iframe_contents->GetLastCommittedURL()); } diff --git a/content/browser/webui/brave_shared_resources_data_source.cc b/content/browser/webui/brave_shared_resources_data_source.cc index 881bf0be5d7..28a68e2fd13 100644 --- a/content/browser/webui/brave_shared_resources_data_source.cc +++ b/content/browser/webui/brave_shared_resources_data_source.cc @@ -109,8 +109,8 @@ std::string BraveSharedResourcesDataSource::GetSource() { void BraveSharedResourcesDataSource::StartDataRequest( const std::string& path, - const ResourceRequestInfo::WebContentsGetter& wc_getter, - const URLDataSource::GotDataCallback& callback) { + const content::ResourceRequestInfo::WebContentsGetter& wc_getter, + const content::URLDataSource::GotDataCallback& callback) { int idr = GetIdrForPath(path); DCHECK_NE(-1, idr) << " path: " << path; scoped_refptr bytes; diff --git a/content/browser/webui/brave_shared_resources_data_source.h b/content/browser/webui/brave_shared_resources_data_source.h index 9c2cfaee1bb..03fe8b78d93 100644 --- a/content/browser/webui/brave_shared_resources_data_source.h +++ b/content/browser/webui/brave_shared_resources_data_source.h @@ -1,6 +1,13 @@ +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + #ifndef BRAVE_CONTENT_BROWSER_WEBUI_BRAVE_SHARED_RESOURCES_DATA_SOURCE_H_ #define BRAVE_CONTENT_BROWSER_WEBUI_BRAVE_SHARED_RESOURCES_DATA_SOURCE_H_ +#include + #include "base/compiler_specific.h" #include "base/macros.h" #include "base/single_thread_task_runner.h" @@ -8,10 +15,8 @@ namespace brave_content { -using namespace content; - // A DataSource for chrome://brave-resources/ URLs. -class BraveSharedResourcesDataSource : public URLDataSource { +class BraveSharedResourcesDataSource : public content::URLDataSource { public: BraveSharedResourcesDataSource(); ~BraveSharedResourcesDataSource() override; @@ -20,8 +25,8 @@ class BraveSharedResourcesDataSource : public URLDataSource { std::string GetSource() override; void StartDataRequest( const std::string& path, - const ResourceRequestInfo::WebContentsGetter& wc_getter, - const URLDataSource::GotDataCallback& callback) override; + const content::ResourceRequestInfo::WebContentsGetter& wc_getter, + const content::URLDataSource::GotDataCallback& callback) override; bool AllowCaching() override; std::string GetMimeType(const std::string& path) override; bool ShouldServeMimeTypeAsContentTypeHeader() override; @@ -37,4 +42,4 @@ class BraveSharedResourcesDataSource : public URLDataSource { } // namespace brave_content -#endif +#endif // BRAVE_CONTENT_BROWSER_WEBUI_BRAVE_SHARED_RESOURCES_DATA_SOURCE_H_ diff --git a/extensions/renderer/brave_shields_content_setting.cc b/extensions/renderer/brave_shields_content_setting.cc index e861eebe78f..39b768c4b00 100644 --- a/extensions/renderer/brave_shields_content_setting.cc +++ b/extensions/renderer/brave_shields_content_setting.cc @@ -1,9 +1,14 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* Copyright (c) 2019 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "brave/extensions/renderer/brave_shields_content_setting.h" +#include +#include +#include + #include "base/strings/stringprintf.h" #include "base/values.h" #include "content/public/common/console_message_level.h" @@ -38,16 +43,18 @@ v8::Local BraveShieldsContentSetting::Create( CHECK(property_values->GetDictionary(1u, &value_spec)); gin::Handle handle = gin::CreateHandle( - isolate, new BraveShieldsContentSetting(request_handler, type_refs, access_checker, - pref_name, *value_spec)); + isolate, + new BraveShieldsContentSetting(request_handler, type_refs, access_checker, + pref_name, *value_spec)); return handle.ToV8().As(); } -BraveShieldsContentSetting::BraveShieldsContentSetting(APIRequestHandler* request_handler, - const APITypeReferenceMap* type_refs, - const BindingAccessChecker* access_checker, - const std::string& pref_name, - const base::DictionaryValue& set_value_spec) +BraveShieldsContentSetting::BraveShieldsContentSetting( + APIRequestHandler* request_handler, + const APITypeReferenceMap* type_refs, + const BindingAccessChecker* access_checker, + const std::string& pref_name, + const base::DictionaryValue& set_value_spec) : request_handler_(request_handler), type_refs_(type_refs), access_checker_(access_checker), @@ -83,11 +90,13 @@ BraveShieldsContentSetting::BraveShieldsContentSetting(APIRequestHandler* reques BraveShieldsContentSetting::~BraveShieldsContentSetting() = default; -gin::WrapperInfo BraveShieldsContentSetting::kWrapperInfo = {gin::kEmbedderNativeGin}; +gin::WrapperInfo BraveShieldsContentSetting::kWrapperInfo = { + gin::kEmbedderNativeGin}; gin::ObjectTemplateBuilder BraveShieldsContentSetting::GetObjectTemplateBuilder( v8::Isolate* isolate) { - return Wrappable::GetObjectTemplateBuilder(isolate) + return Wrappable::GetObjectTemplateBuilder( + isolate) .SetMethod("get", &BraveShieldsContentSetting::Get) .SetMethod("set", &BraveShieldsContentSetting::Set); } @@ -149,7 +158,7 @@ void BraveShieldsContentSetting::HandleFunction(const std::string& method_name, request_handler_->StartRequest( context, "braveShields." + method_name, std::move(parse_result.arguments), parse_result.callback, v8::Local(), - binding::RequestThread::UI); + binding::RequestThread::UI); } } // namespace extensions diff --git a/utility/importer/chrome_importer.cc b/utility/importer/chrome_importer.cc index 95820b4ecff..b6174000816 100644 --- a/utility/importer/chrome_importer.cc +++ b/utility/importer/chrome_importer.cc @@ -7,6 +7,7 @@ #include #include +#include #include "base/files/file_util.h" #include "base/json/json_reader.h" From 9ca1b4c935979b0f9643d22377807241a992bb1c Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Wed, 4 Sep 2019 13:50:55 -0400 Subject: [PATCH 61/63] Removed unused var declaration in Android build. It was causing an error: ERROR at //brave/build/android/BUILD.gn:99:17: Assignment had no effect. jni_package = "brave" ^------ You set the variable "jni_package" here and it was unused before it went out of scope. See //brave/build/android/BUILD.gn:93:1: whence it was called. generate_jni("jni_headers") { ^---------------------------- See //brave/BUILD.gn:55:11: which caused the file to be included. deps = ["build/$target_os:brave"] ^----------------------- --- build/android/BUILD.gn | 2 -- 1 file changed, 2 deletions(-) diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn index 4e22d1d2180..4a37987ffc8 100755 --- a/build/android/BUILD.gn +++ b/build/android/BUILD.gn @@ -95,6 +95,4 @@ generate_jni("jni_headers") { "//brave/android/java/org/chromium/chrome/browser/preferences/website/BraveShieldsContentSettings.java", "//brave/android/java/org/chromium/chrome/browser/BraveActivity.java", ] - - jni_package = "brave" } From 8b98f10b064cd5d105b6b9a88ba913234050bd61 Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Wed, 4 Sep 2019 16:07:41 -0400 Subject: [PATCH 62/63] Disable features::kAudioServiceOutOfProcess. The feature used to be disabled by default but enabled in experiments. When we disabled experiments we removed the explicit disablement of the feature. Now the feaure has been flipped enabled by default on Linux and Mac/Windows are being enabled by default in upstream versions. Explicitly disabling it again, assuming we still want to. @jumde Chromium change: https://chromium.googlesource.com/chromium/src/+/65932d46ee07af807713aaca6f8f081412d26db8 commit 65932d46ee07af807713aaca6f8f081412d26db8 Author: Henrik Grunell Date: Wed Jun 12 09:05:03 2019 +0000 Enable AudioServiceAudioStreams and AudioServiceOutOfProcess by default on Linux. Bug: 672469,832666 Upstream changes: https://chromium.googlesource.com/chromium/src/+/f1623e97a8c7174f684e32267cc85872199a7a22 commit f1623e97a8c7174f684e32267cc85872199a7a22 Author: Henrik Grunell Date: Mon Aug 12 20:58:24 2019 +0000 Enable audio process with kill at hang by default on Mac. Enables features AudioServiceOutOfProcess and AudioServiceOutOfProcessKillAtHang by default on Mac. Also * Fixes audio process study names for Win and Linux in field trial config. * Sets default audio service teardown to 15 minutes on all platforms since it has been launched on all platforms (corrects a miss in some of the previous launches). This change is similar to the previous launch for Linux: https://chromium-review.googlesource.com/c/chromium/src/+/1648499 Bug: 974450 https://chromium.googlesource.com/chromium/src/+/8a41113b970a3b6c892d97a0f54a76da674a216a commit 8a41113b970a3b6c892d97a0f54a76da674a216a Author: Henrik Grunell Date: Mon Aug 19 09:25:19 2019 +0000 Enable audio process with kill at hang by default on Windows. Bug: 974448 --- app/brave_main_delegate.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/brave_main_delegate.cc b/app/brave_main_delegate.cc index 79c2c5dd19f..6381236e862 100644 --- a/app/brave_main_delegate.cc +++ b/app/brave_main_delegate.cc @@ -29,6 +29,7 @@ #include "components/omnibox/common/omnibox_features.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/unified_consent/feature.h" +#include "content/public/common/content_features.h" #include "extensions/common/extension_features.h" #include "services/network/public/cpp/features.h" #include "third_party/widevine/cdm/buildflags.h" @@ -158,6 +159,7 @@ bool BraveMainDelegate::BasicStartupComplete(int* exit_code) { // Disabled features. const std::unordered_set disabled_features = { autofill::features::kAutofillServerCommunication.name, + features::kAudioServiceOutOfProcess.name, features::kLookalikeUrlNavigationSuggestionsUI.name, unified_consent::kUnifiedConsent.name, }; From 0a92c1b3ae224c75f12c709c76e598d2d9828580 Mon Sep 17 00:00:00 2001 From: Max Karolinskiy Date: Thu, 25 Jul 2019 14:41:17 -0400 Subject: [PATCH 63/63] Update strings for 77.0.3865.65. --- app/app_management_strings.grdp | 13 +- app/brave_strings.grd | 54 +-- app/generated_resources.grd | 418 +++++++++++++---------- app/media_router_strings.grdp | 134 -------- app/onboarding_welcome_strings.grdp | 6 - app/profiles_strings.grdp | 3 + app/settings_brave_strings.grdp | 21 +- app/settings_strings.grdp | 491 ++++++++++++++++++++++------ app/vr_strings.grdp | 10 - 9 files changed, 676 insertions(+), 474 deletions(-) diff --git a/app/app_management_strings.grdp b/app/app_management_strings.grdp index cabba467e41..a174561ebf7 100644 --- a/app/app_management_strings.grdp +++ b/app/app_management_strings.grdp @@ -49,8 +49,8 @@ Permissions - - More permissions + + More settings and permissions This app can: @@ -76,4 +76,13 @@ Version: $14.0 + + Pinned by administrator + + + Contacts + + + Storage + diff --git a/app/brave_strings.grd b/app/brave_strings.grd index fef33a2f2bb..23c8ae4c570 100644 --- a/app/brave_strings.grd +++ b/app/brave_strings.grd @@ -589,7 +589,10 @@ Brave is unable to recover your settings. - + + About &Brave + + About &Brave OS @@ -615,9 +618,6 @@ Brave is unable to recover your settings. - - Sign in to sync and personalize Brave across your devices - Sync and personalize Brave across your devices @@ -737,6 +737,12 @@ Signing in anyway will merge Brave information like bookmarks, history, and othe Brave OS could not sync your data due to an error signing in. + + You clear cookies when you quit Brave. To keep syncing, change this $1settings. + + + settings + @@ -1149,40 +1155,6 @@ Please check your email at $2jane.doe@example.com Welcome to Brave - - Take Brave everywhere - - - Web browsing with Brave smarts - - - Not now - - - Sync and personalize Brave across your devices - - - - - - - Welcome to Brave - - - Get to Brave faster - - - Make Brave your default browser - - - Pin Brave to your taskbar - - - Select <div class="logo-small"></div> <strong>Brave</strong> - - - Click <strong>Switch anyway</strong>, if it appears - @@ -1247,6 +1219,12 @@ Please check your email at $2jane.doe@example.com Share a Brave tab + + + + Help us improve Brave + + diff --git a/app/generated_resources.grd b/app/generated_resources.grd index 8d3e36c365d..6f65b7622fc 100644 --- a/app/generated_resources.grd +++ b/app/generated_resources.grd @@ -901,8 +901,8 @@ are declared in tools/grit/grit_rule.gni. Save page &as... - - Distill page + + Toggle distilled page contents More too&ls @@ -2902,7 +2902,7 @@ are declared in tools/grit/grit_rule.gni. Sharing $1youtube.com to $2meet.google.com - Share this tab + Share this tab instead Stop @@ -3196,7 +3196,6 @@ are declared in tools/grit/grit_rule.gni. No-op Service - Installed theme "$1Snowflake Theme" @@ -3512,6 +3511,9 @@ are declared in tools/grit/grit_rule.gni. Read and change anything you type + + Launch and exit managed guest sessions + Display UI on the login screen @@ -3687,6 +3689,9 @@ are declared in tools/grit/grit_rule.gni. Replace the page you see when opening a new tab + + Run in the background when requested by a cooperating native application + @@ -4403,20 +4408,6 @@ Keep your key file in a safe place. You will need it to create new versions of y Updated just now - - - This page will use a lot of data. - - - Page paused. - - - Continue - - - Stop using data on this page - - Lite mode now makes browsing faster on all pages, including HTTPS. @@ -4830,9 +4821,6 @@ Keep your key file in a safe place. You will need it to create new versions of y Restore default shortcuts - - Customize this page - Brave backgrounds @@ -4932,12 +4920,27 @@ Keep your key file in a safe place. You will need it to create new versions of y Most visited sites - + Shortcuts are suggested based on websites you visit often - + Shortcuts are curated by you + + Current theme you have installed + + + Uninstall + + + Select color + + + Default + + + Hex color value + @@ -5034,8 +5037,8 @@ Keep your key file in a safe place. You will need it to create new versions of y Remember my choice - - Use app + + Open Stay in Brave @@ -5264,7 +5267,7 @@ Keep your key file in a safe place. You will need it to create new versions of y - Nope + No thanks @@ -6253,6 +6256,25 @@ Keep your key file in a safe place. You will need it to create new versions of y + + + + Call from your devices + + + Call from $1Jimmy's Pixel + + + + + + Call from Your Devices + + + Call from $1Jimmy's Pixel + + + @@ -6730,45 +6752,22 @@ Keep your key file in a safe place. You will need it to create new versions of y - - You've signed in and turned on Sync - - + Turn on sync? - + Sync your bookmarks, passwords, history, and more on all your devices - + Brave may use your history to personalize Search, ads, and other Brave services - + You can always choose what to sync in settings. - - - - Brave Sync - - - Your bookmarks, history, passwords, and other settings will be synced to your Brave Account so you can use them on all your devices - - - Personalize Brave services - - - Brave may use your browsing history to personalize Search, ads, and other Brave services - - - Brave may use your browsing history to personalize Search and other Brave services - - - Want to manage sync and personalization before they’re turned on? Visit <a id="settingsLink" href="chrome://settings">Settings</a></a>. - - + Yes, I'm in - + Settings @@ -7137,20 +7136,17 @@ Please help our engineers fix this problem. Tell us what happened right before y Sign in to $1Brave - + Sync is disabled by your administrator. - + Sync has been stopped via the Brave Dashboard. Confirm sync settings to start sync. - - Error signing in. - - - Oops, Sync has stopped working. + + Setup in progress... Sync isn’t working. Try signing in again. @@ -7201,20 +7197,12 @@ Please help our engineers fix this problem. Tell us what happened right before y Advanced settings - - - Setup in progress... - - - - - Please wait... - - - - - Sync everything - + + + + Please wait... + + @@ -7229,16 +7217,18 @@ Please help our engineers fix this problem. Tell us what happened right before y $1Sept 1, 2012. This doesn't include payment methods and addresses from Brave Pay. - - - Not signed in to $1Brave - - - (You're missing out—$1sign in) - - - sign in - + + + + Not signed in to $1Brave + + + (You're missing out—$1sign in) + + + sign in + + @@ -7258,7 +7248,6 @@ Please help our engineers fix this problem. Tell us what happened right before y This page could not be translated - Options @@ -7269,6 +7258,12 @@ Please help our engineers fix this problem. Tell us what happened right before y Change languages + + More languages... + + + Page is not in $1French ? + Translate @@ -7317,6 +7312,12 @@ Please help our engineers fix this problem. Tell us what happened right before y Language settings + + Language to translate into + + + Page language to translate + @@ -7328,6 +7329,12 @@ Please help our engineers fix this problem. Tell us what happened right before y Change Languages + + More Languages... + + + Page Is Not In $1French ? + Translate @@ -7376,10 +7383,19 @@ Please help our engineers fix this problem. Tell us what happened right before y Language Settings + + Language To Translate Into + + + Page Language To Translate + Unknown + + Reset + @@ -7598,6 +7614,22 @@ Please help our engineers fix this problem. Tell us what happened right before y Check Grammar With Spelling + + + Substitutions + + + Show Substitutions + + + Smart Quotes + + + Smart Dashes + + + Text Replacement + Always Show Bookmarks Bar @@ -8466,38 +8498,6 @@ Please help our engineers fix this problem. Tell us what happened right before y - - - Identity API Token Cache - - - Access Token - - - Extension Name - - - Extension Id - - - Token Status - - - Not Found - - - Token Present - - - Expiration Time - - - Scopes - - - Revoke - - A fast, simple, and secure web browser, built for the modern web. @@ -8757,10 +8757,10 @@ Please help our engineers fix this problem. Tell us what happened right before y Entered window overview mode - + Entered full screen - + Exited full screen @@ -8789,6 +8789,12 @@ Please help our engineers fix this problem. Tell us what happened right before y Refresh + + Clear + + + No log entries + Show: @@ -8972,16 +8978,16 @@ Please help our engineers fix this problem. Tell us what happened right before y - + No nearby devices found. - $1www.google.com wants to scan for nearby Bluetooth devices, the following devices have been found: + $1www.google.com wants to scan for nearby Bluetooth devices. The following devices have been found: - + Allow - + Block @@ -9065,6 +9071,17 @@ Please help our engineers fix this problem. Tell us what happened right before y Ads blocked on this site + + + Details + + + Ad removed. + + + This ad uses too many resources for your device, so Brave removed it. + + Windows Utilities @@ -9088,22 +9105,6 @@ Please help our engineers fix this problem. Tell us what happened right before y - - - - The web browser by Brave, for you - - - Sign in to Brave with your Brave Account to get your bookmarks, history, passwords, and other settings on all your devices. - - - Sign in - - - No thanks - - - @@ -9138,31 +9139,6 @@ Please help our engineers fix this problem. Tell us what happened right before y - - - - Open Windows Settings - - - Click <strong>Microsoft Edge</strong> under Web Browser - - - Switch anyway - - - Right click the <div class="logo-small"></div> icon in the taskbar - - - Select <strong>Pin to taskbar</strong> - - - Pin to taskbar - - - Continue - - - @@ -9243,6 +9219,101 @@ Please help our engineers fix this problem. Tell us what happened right before y Upload + + + + Save changes to $1README.md? + + + Save changes to files? + + + $1example.com will be able to save your changes directly to $2README.md. The site can save changes until you close this tab. + + + $1example.com will be able to save your changes directly to the files in $2My Project. The site can save changes until you close this tab. + + + Save changes + + + + + This page is allowed to save to files. + + + This page is allowed to view all the files in a folder on your device. + + + $1example.com can save your changes directly to $2README.md + + + $1example.com can save your changes directly to the following files + + + $1example.com can save your changes directly to the files in $2My Project + + + $1example.com can save your changes directly to the following folders + + + $1example.com can save your changes directly to the following files and folders + + + $1example.com can view all the files in $2My Project + + + $1example.com can view all the files in the following folders + + + $1example.com can view and save your changes directly to the following files and folders + + + Save changes + + + View changes + + + {0, plural, offset:2 + =1 {{1}README.md} + =2 {{1}README.md, {2}Brave.png} + other {{1}README.md, {2}Brave.png, and # more} + } + + + Expand... + + + Collapse... + + + Remove access + + + + + + Can't save to this folder + + + $1example.com can't save your changes to this folder because it contains system files. + + + Choose a different folder + + + + + Let site view files? + + + $1example.com will be able to view all files in $2My Project. The site can see any changes to the folder until you close this tab. + + + View files + + @@ -9505,6 +9576,9 @@ Please help our engineers fix this problem. Tell us what happened right before y Allow + + Try again + @@ -9531,6 +9605,16 @@ Please help our engineers fix this problem. Tell us what happened right before y Exit Private + + + + + Take Survey + + + Your feedback is important to us. + + - + diff --git a/app/media_router_strings.grdp b/app/media_router_strings.grdp index d57bb063745..c2062a6f63c 100644 --- a/app/media_router_strings.grdp +++ b/app/media_router_strings.grdp @@ -3,43 +3,14 @@ - - Media Router - Display on another screen &Cast... - - Cast - - - - - Back - - - Close - - - Search - - - View cast mode list - - - View device list - - - Stop, $1Living Room TV, $2Casting YouTube - - - Cast to - Cast $1google.com @@ -54,15 +25,6 @@ - - Select source - - - Share your screen - - - Stream a video or audio file - Cast $1my_media.mp3 @@ -93,39 +55,7 @@ Optimize fullscreen videos - - - Enable casting to cloud-based services like Brave Hangouts. - - - - Welcome to the Cast experience in Brave! - - - You can use this feature to display content from Brave on your TV or other devices. - - - - - Welcome to the Cast experience in Brave! - - - You can use this feature to display content from Brave on your TV or other devices. - - - - Ok, got it - - - - - Dismiss - - - - Error - Unable to cast $1youtube.com. @@ -135,9 +65,6 @@ Unable to cast tab. - - Only one session can be created at a time. - Unable to cast desktop. @@ -148,59 +75,6 @@ Unable to cast $1my_media.mp3. - - - Casting: $1Video - - - Cast - - - Stop - - - Play - - - Pause - - - Mute - - - Unmute - - - Seek - - - Volume - - - Current time - - - Duration - - - Smooth Motion [beta] - - - Use high bandwidth for best video or animation. Other people with slow connections may not see your content. - - - Always use mirroring - - - Show fullscreen videos on - - - Both screens - - - Remote screen - - Looking for devices @@ -230,14 +104,6 @@ Source not supported - - - Search - - - No matches - - Audio/Video diff --git a/app/onboarding_welcome_strings.grdp b/app/onboarding_welcome_strings.grdp index a06b3485c2e..3793c632f9e 100644 --- a/app/onboarding_welcome_strings.grdp +++ b/app/onboarding_welcome_strings.grdp @@ -2,9 +2,6 @@ - - Get started - Next @@ -91,9 +88,6 @@ Get Brave Search and Brave smarts everytime you browse - - Skip - Set as default diff --git a/app/profiles_strings.grdp b/app/profiles_strings.grdp index 35b079e734e..70171f709ca 100644 --- a/app/profiles_strings.grdp +++ b/app/profiles_strings.grdp @@ -469,6 +469,9 @@ Add profile + + Name + The new user couldn't be created. Please check your hard drive space and permissions and try again. diff --git a/app/settings_brave_strings.grdp b/app/settings_brave_strings.grdp index 979a731e4da..d11075a1a25 100644 --- a/app/settings_brave_strings.grdp +++ b/app/settings_brave_strings.grdp @@ -3,13 +3,13 @@ + + About Brave + + + Get help with Brave + - - About Brave - - - Get help with Brave - Updating Brave @@ -24,14 +24,19 @@ - + About Brave OS - + Get help with Brave OS + + + Clear cookies and site data when you quit Brave + + Brave Pay (copied to Brave) diff --git a/app/settings_strings.grdp b/app/settings_strings.grdp index ff00d631545..815a14425e3 100644 --- a/app/settings_strings.grdp +++ b/app/settings_strings.grdp @@ -12,6 +12,9 @@ + + Continue + More actions @@ -136,9 +139,6 @@ Download update using mobile data - - Continue - @@ -150,6 +150,12 @@ Report an issue + + Internet connection required + + + See what's new + Checking for updates @@ -163,6 +169,78 @@ + + Captions + + + Text size + + + Text font + + + Text color + + + Text opacity + + + Background opacity + + + 0 + + + 100 + + + Text shadow + + + None + + + Raised + + + Depressed + + + Uniform + + + Drop shadow + + + Background color + + + Black + + + White + + + Red + + + Green + + + Blue + + + Yellow + + + Cyan + + + Magenta + + + Default + Accessibility @@ -191,6 +269,42 @@ Select and customize text-to-speech voices + + Switch Access settings + + + Switch action assignment + + + Space + + + Enter + + + None + + + Select + + + Next + + + Previous + + + Auto-scan + + + Enable auto-scan + + + Scanning speed: $11.5s + + + $11.5s + Show large mouse cursor @@ -464,36 +578,6 @@ - - - Kiosk Next Shell (Dev) - - - Kiosk Next Shell - - - Enables the Kiosk Next Shell for the next sign in. - - - Disable the Kiosk Next Shell and return to the normal Brave OS experience. - - - Turn off - - - Turn off the Kiosk Next Shell - - - Turn on the Kiosk Next Shell - - - This will turn off the Kiosk Next Shell, sign you out and return you to the normal Brave OS experience. - - - This will sign you out and turn on the Kiosk Next Shell. - Linux (Beta) @@ -543,6 +627,12 @@ Replace your Linux apps and files with a previous backup + + Confirm Restore + + + Restoring from a backup will delete existing Linux applications and data in your Linux files folder. + USB preferences @@ -564,7 +654,7 @@ Plugin VM - Manage settings for running Plugin VM on your $1Bravebook + Set up permissions Give access to printers @@ -596,7 +686,7 @@ Brave Play Store - Install apps and games from Brave Play on your Bravebook. <a target="_blank" href="$1https://google.com/">Learn more</a> + Install apps and games from Brave Play on your $1Bravebook. <a target="_blank" href="$2https://google.com/">Learn more</a> Manage Android preferences @@ -608,6 +698,8 @@ Remove Android apps? + Apps you’ve downloaded from Brave Play will be deleted from this Bravebook. <br><br> @@ -629,6 +721,9 @@ Manage your apps + + Open App Management + @@ -1027,6 +1122,9 @@ Connected + + Connected, $1100% battery + Not connected @@ -1362,6 +1460,12 @@ Add Printer + + + Saved detected printers to your profile, or add a new printer. + + + Available printers to save Edit @@ -1369,9 +1473,15 @@ Remove + + Configure + Search printers + + Your saved printers + Add a nearby printer @@ -1513,6 +1623,14 @@ End User License Agreement + + Couldn't detect a printer. Please enter printer address again. + + + Unable to set up printer. Please check configuration and try again. + + + @@ -1552,7 +1670,7 @@ Set up or manage network file shares. - Add File Share + Add file share File share URL @@ -1566,6 +1684,9 @@ Password (optional) + + Remember sign-in info + Share mounted successfully. @@ -1591,7 +1712,7 @@ Invalid URL format. Server must be specified as a host name when SSO authentication is used. - Authentication Method + Authentication method Standard @@ -1601,67 +1722,127 @@ - + - - Kerberos Accounts + + Kerberos tickets - - Kerberos Accounts + + Kerberos tickets - - All Kerberos Accounts for single sign-on into certain apps and websites and file shares can be managed here. + + Choose a ticket to use for authentication. <a target="_blank" href="$1https://google.com/">Learn more</a> - - Accounts + + Tickets - - Add account + + Add a ticket - - Remove account from this device + + Refresh now - - Signed in + + Set as active ticket - - Sign in again + + Remove from this device - - Sign in + + Ticket removed - - Add Kerberos Account + + Valid for $17 hours 12 minutes - - Username + + Expired + + + Refresh + + + Active - + + Add a Kerberos ticket + + + Refresh a Kerberos ticket + + + To automatically refresh a ticket, check “Remember password.” Your password will be stored on your device only. + + + Kerberos username + + Password - + + Remember password + + + Refresh + + + Advanced + + + Configure Kerberos + + + Edit the configuration file + + Network problem or bad realm - - Username invalid (should be user@realm.com) + + Username invalid - + Username not known to server - + + A ticket with this username already exists + + Contacting server for realm failed - + Password invalid - + Password expired - + KDC does not support encryption type - - Oops! Something went wrong (error code $1123). + + Couldn't get Kerberos ticket. Try again, or contact your organization's device admin. (Error code $1123). + + + Section nested in group: $1[realms] (inside a block of curly braces '{ ... }) + + + Section syntax error: $1[realms + + + Expected opening curly brace: $1ticket_lifetime = 1d (in the line after 'EXAMPLE.COM = )' + + + Extra curly brace: $1} (without having a corresponding opening curly brace '{') + + + Relation syntax error: $1ticket_lifetime : 1d + + + Configuration option not supported: $1ccache_type = 1 + + + Section not supported: $1[appdefaults] + + + Failed to parse configuration @@ -1828,6 +2009,9 @@ Allow other users of this device to use this network + + Automatically connecting to a hidden network allows others to see your device and some network settings, and is not recommended. + Save identity and password @@ -1897,6 +2081,15 @@ Allow mobile data roaming + + On, not roaming + + + On, roaming + + + Roaming off + Mobile data network @@ -1984,6 +2177,8 @@ Port + + Change PIN @@ -1999,7 +2194,7 @@ Change - + Enter @@ -2032,6 +2227,22 @@ Enter PIN Unlock Key + + Incorrect PIN. Retries left: $13. + + + Incorrect PUK. Retries left: $13. + + + Invalid PIN. Retries left: $13. + + + Invalid PUK. Retries left: $13. + + + PIN values do not match. + + Prefer this network @@ -2499,16 +2710,9 @@ - - - Languages and input - - - - - Languages - - + + Languages + Language @@ -2876,12 +3080,6 @@ Brave Assistant - - Related info - - - Let the Assistant show you info related to what's on your screen - "Ok Brave" @@ -2903,9 +3101,6 @@ Voice match - - Teach your Assistant to recognize your voice - Retrain @@ -2987,8 +3182,8 @@ Do not allow sites to see text and images copied to the clipboard - - Cookies + + Cookies and site data Handlers @@ -3377,9 +3572,6 @@ Prevent third-party websites from saving and reading cookie data - - Keep local data only until you quit your browser - Adobe Flash Player Storage settings @@ -3581,9 +3773,6 @@ PINs do not match - - Continue - Show lock screen when waking from sleep @@ -3639,11 +3828,14 @@ Note: Your fingerprint may be less secure than a strong password or PIN. - delete [$1Fingerprint 1], button + delete [$1Fingerprint 1] Finger $11 + + Enable Brave media playback at lock screen + Add account @@ -3665,12 +3857,21 @@ Not updated yet + + More actions, $1abcd@google.com + Update account Sign in + + Update account, $1abcd@google.com + + + Sign in, $1abcd@google.com + Remove this account @@ -3680,15 +3881,30 @@ Primary account + + $1abcd@google.com was removed from this device + Set up your fingerprint - + + Touch the power button with your finger - + The fingerprint sensor is in the power button. Touch it lightly with any finger. + + + Touch the fingerprint sensor with your finger + + + The fingerprint sensor is the bottom right-hand key on your keyboard. Touch it lightly with any finger. + + + The fingerprint sensor is the top right-hand key on your keyboard. Touch it lightly with any finger. + + Fingerprint added. @@ -4610,8 +4826,14 @@ Use hardware acceleration when available - - Open proxy settings + + Open your computer's proxy settings + + + $1Brave is using proxy settings from an extension + + + $1Brave is using proxy settings from your administrator @@ -4624,7 +4846,7 @@ Android phone - Connect your Bravebook with your phone. <a target="_blank" href="$1https://google.com/">Learn more</a> + Connect your $1Bravebook with your phone. <a target="_blank" href="$2https://google.com/">Learn more</a> No eligible devices. <a target="_blank" href="$1https://google.com/">Learn more</a> @@ -4645,7 +4867,7 @@ Disabled - Unlock your Bravebook with your phone. <a target="_blank" href="$1https://google.com/">Learn more</a> + Unlock your $1Bravebook with your phone. <a target="_blank" href="$2https://google.com/">Learn more</a> Instant Tethering @@ -4657,16 +4879,16 @@ Messages - Send and receive text messages from your Bravebook. <a target="_blank" href="$1https://google.com/">Learn more</a> + Send and receive text messages from your $1Bravebook. <a target="_blank" href="$2https://google.com/">Learn more</a> Forget phone - Disconnect your phone from your Bravebook + Disconnect your phone from your $1Bravebook - Disconnect your phone from your Bravebook. They will no longer connect automatically. + Disconnect your phone from your $1Bravebook. They will no longer connect automatically. @@ -4929,6 +5151,9 @@ PIN must be at least 4 characters + + Too short + PIN must be at most 63 characters @@ -4953,4 +5178,52 @@ The security key is locked because the wrong PIN was entered too many times. To unlock it, remove and reinsert it. + + Show PINs + + + Hide PINs + + + Manage sign-in data + + + View and delete the sign-in data stored on your security key + + + Security key sign-in data + + + Website + + + Username + + + To view sign-in data, insert and touch your security key + + + To view sign-in data, enter the PIN for your security key. If you don’t know the PIN, you’ll need to reset the security key. + + + This security key does not have any sign-in data + + + This security key can't store any sign-in data + + + Your security key was removed. + + + Your security key is not protected with a PIN. To manage sign-in data, first create a PIN. + + + Your security key couldn't be read + + + Your sign-in data was deleted + + + Your sign-in data couldn't be deleted + diff --git a/app/vr_strings.grdp b/app/vr_strings.grdp index fabd938fef6..353e8953e0d 100644 --- a/app/vr_strings.grdp +++ b/app/vr_strings.grdp @@ -7,10 +7,6 @@ Press App button to exit - - XR Isolated Device Service - - Site is tracking your location @@ -150,18 +146,12 @@ New private tab - - New private tab - Settings Close private tabs - - Close private tabs - Tabs