diff --git a/build/bromite_patches_list.txt b/build/bromite_patches_list.txt index 13c0de48..5c0dd5ef 100644 --- a/build/bromite_patches_list.txt +++ b/build/bromite_patches_list.txt @@ -202,8 +202,8 @@ Partition-blobs-by-top-frame-url.patch Disable-add-to-home-screen-prompt.patch Remove-http-referrals-in-cross-origin-navigation.patch Add-kill-switch-for-unsupported-clangd-flags.patch - Fix-WebWorker-requestAnimationFrame.patch + 00Enable-ThirdPartyStoragePartitioning-flag.patch 00Enable-CrossSiteFlagNetworkAnonymizationKey-flag.patch 00OpenSearch--miscellaneous--fixup-.patch @@ -244,7 +244,6 @@ Fix-WebWorker-requestAnimationFrame.patch 00Fix-windows-build.patch 00ungoogled-chr-no-special-hosts-domains--add-fixup-.patch 00Disable-fetching-of-all-field-trials--add-fixup-.patch -00Add-an-always-incognito-mode--add-fixup-.patch 00Move-navigation-bar-to-bottom--add-fixup-.patch 00Add-menu-item-to-view-source--add-fixup-.patch 00Add-AudioContextAPI-flags.patch diff --git a/build/patches/00Add-AudioContextAPI-flags.patch b/build/patches/00Add-AudioContextAPI-flags.patch index 1f851042..14ea0b13 100644 --- a/build/patches/00Add-AudioContextAPI-flags.patch +++ b/build/patches/00Add-AudioContextAPI-flags.patch @@ -77,7 +77,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -620,6 +620,11 @@ BASE_FEATURE(kWebRtcUseMinMaxVEADimensions, +@@ -621,6 +621,11 @@ BASE_FEATURE(kWebRtcUseMinMaxVEADimensions, #endif ); @@ -92,7 +92,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h -@@ -246,6 +246,9 @@ BLINK_COMMON_EXPORT bool IsPlzDedicatedWorkerEnabled(); +@@ -247,6 +247,9 @@ BLINK_COMMON_EXPORT bool IsPlzDedicatedWorkerEnabled(); BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kWebRtcUseMinMaxVEADimensions); diff --git a/build/patches/00Add-an-always-incognito-mode--add-fixup-.patch b/build/patches/00Add-an-always-incognito-mode--add-fixup-.patch deleted file mode 100644 index 13af5759..00000000 --- a/build/patches/00Add-an-always-incognito-mode--add-fixup-.patch +++ /dev/null @@ -1,81 +0,0 @@ -From: Your Name -Date: Mon, 7 Nov 2022 12:39:07 +0000 -Subject: Add an always-incognito mode (add fixup) - ---- - .../offline_pages/android/offline_page_bridge.cc | 16 ++++++++-------- - .../android/offline_page_model_factory.cc | 1 - - .../android/request_coordinator_factory.cc | 5 +++++ - 3 files changed, 13 insertions(+), 9 deletions(-) - -diff --git a/chrome/browser/offline_pages/android/offline_page_bridge.cc b/chrome/browser/offline_pages/android/offline_page_bridge.cc ---- a/chrome/browser/offline_pages/android/offline_page_bridge.cc -+++ b/chrome/browser/offline_pages/android/offline_page_bridge.cc -@@ -159,13 +159,7 @@ void ValidateFileCallback( - int64_t offline_id, - const GURL& url, - const base::FilePath& file_path, -- SimpleFactoryKey* key, - bool is_trusted) { -- // in always incognito, never trust input file (show file name in url) -- ProfileKey* profile_key = ProfileKey::FromSimpleFactoryKey(key); -- if(profile_key->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled)) -- is_trusted = false; -- - // If trusted, the launch url will be the http/https url of the offline - // page. If the file path is content URI, directly open it. Otherwise, the - // launch url will be the file URL pointing to the archive file of the offline -@@ -794,9 +788,15 @@ void OfflinePageBridge::GetPageByOfflineIdDone( - } - - if (offline_page_model_->IsArchiveInInternalDir(offline_page->file_path)) { -+ bool is_trusted = true; -+ // in always incognito, never trust input file (show file name in url) -+ ProfileKey* profile_key = ProfileKey::FromSimpleFactoryKey(key_); -+ if(profile_key->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled)) -+ is_trusted = false; -+ - ValidateFileCallback(launch_location, j_callback_obj, - offline_page->offline_id, offline_page->url, -- offline_page->file_path, key_, true /* is_trusted*/); -+ offline_page->file_path, is_trusted); - return; - } - -@@ -806,7 +806,7 @@ void OfflinePageBridge::GetPageByOfflineIdDone( - offline_page->file_size, offline_page->digest), - base::BindOnce(&ValidateFileCallback, launch_location, j_callback_obj, - offline_page->offline_id, offline_page->url, -- offline_page->file_path, key_)); -+ offline_page->file_path)); - } - - void OfflinePageBridge::GetSizeAndComputeDigestDone( -diff --git a/chrome/browser/offline_pages/android/offline_page_model_factory.cc b/chrome/browser/offline_pages/android/offline_page_model_factory.cc ---- a/chrome/browser/offline_pages/android/offline_page_model_factory.cc -+++ b/chrome/browser/offline_pages/android/offline_page_model_factory.cc -@@ -49,7 +49,6 @@ OfflinePageModel* OfflinePageModelFactory::GetForKey(SimpleFactoryKey* key) { - OfflinePageModel* OfflinePageModelFactory::GetForBrowserContext( - content::BrowserContext* browser_context) { - Profile* profile = Profile::FromBrowserContext(browser_context); -- profile = profile->GetOriginalProfile(); - return GetForKey(profile->GetProfileKey()); - } - -diff --git a/chrome/browser/offline_pages/android/request_coordinator_factory.cc b/chrome/browser/offline_pages/android/request_coordinator_factory.cc ---- a/chrome/browser/offline_pages/android/request_coordinator_factory.cc -+++ b/chrome/browser/offline_pages/android/request_coordinator_factory.cc -@@ -86,6 +86,11 @@ RequestCoordinator* RequestCoordinatorFactory::GetForBrowserContext( - - KeyedService* RequestCoordinatorFactory::BuildServiceInstanceFor( - content::BrowserContext* context) const { -+ if(context->IsOffTheRecord() && -+ Profile::FromBrowserContext(context)->GetOriginalProfile() -+ ->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled) == false) { -+ return nullptr; -+ } - std::unique_ptr policy(new OfflinerPolicy()); - std::unique_ptr offliner; - OfflinePageModel* model = --- -2.25.1 diff --git a/build/patches/00Eyeo-Adblock.patch b/build/patches/00Eyeo-Adblock.patch index efff1c8f..dabad59e 100644 --- a/build/patches/00Eyeo-Adblock.patch +++ b/build/patches/00Eyeo-Adblock.patch @@ -486,7 +486,7 @@ Subject: Diff from 108.0.5359.47 content/renderer/render_frame_impl.h | 4 + ...web_request_proxying_url_loader_factory.cc | 5 + .../browser/extension_event_histogram_value.h | 13 + - .../extension_function_histogram_value.h | 35 + + .../extension_function_histogram_value.h | 32 + .../common/mojom/api_permission_id.mojom | 5 + gclient/.gclient | 25 + gclient/.gclient_ci_android | 22 + @@ -502,10 +502,10 @@ Subject: Diff from 108.0.5359.47 .../core/frame/local_frame_mojo_handler.h | 5 + .../url_loader/mojo_url_loader_client.cc | 6 +- tools/adblock/interdiff.py | 87 + - tools/metrics/histograms/enums.xml | 40 + + tools/metrics/histograms/enums.xml | 37 + tools/perf/benchmarks/eyeo.py | 1193 + tools/perf/page_sets/eyeo_page_set.py | 978 + - 502 files changed, 146224 insertions(+), 22 deletions(-) + 502 files changed, 146218 insertions(+), 22 deletions(-) create mode 100644 chrome/browser/adblock/README.md create mode 100644 chrome/browser/adblock/adblock_content_browser_client.cc create mode 100644 chrome/browser/adblock/adblock_content_browser_client.h @@ -1119,7 +1119,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//components/autofill/android:autofill_java", "//components/autofill/android:prefeditor_autofill_java", "//components/autofill_assistant/android:public_dependencies_java", -@@ -4162,6 +4169,7 @@ group("jni_headers") { +@@ -4161,6 +4168,7 @@ group("jni_headers") { "//chrome/browser/ui/messages/android:jni_headers", "//chrome/browser/util:jni_headers", "//chrome/browser/webauthn/android:jni_headers", @@ -160982,12 +160982,10 @@ diff --git a/extensions/browser/extension_function_histogram_value.h b/extension #ifndef EXTENSIONS_BROWSER_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_ #define EXTENSIONS_BROWSER_EXTENSION_FUNCTION_HISTOGRAM_VALUE_H_ -@@ -1786,6 +1790,37 @@ enum HistogramValue { +@@ -1786,6 +1790,34 @@ enum HistogramValue { AUTOTESTPRIVATE_REMOVEFUSEBOXTEMPDIR = 1723, AUTOTESTPRIVATE_GETTHROUGHPUTTRACKERDATA = 1724, ENTERPRISE_REMOTEAPPS_SORTLAUNCHER = 1725, -+<<<<<<< HEAD -+======= + PASSWORDSPRIVATE_SHOWADDSHORTCUTDIALOG = 1726, + ACTION_GETBADGETEXTCOLOR = 1727, + ACTION_SETBADGETEXTCOLOR = 1728, @@ -161016,7 +161014,6 @@ diff --git a/extensions/browser/extension_function_histogram_value.h b/extension + ADBLOCKPRIVATE_GETSESSIONBLOCKEDADSCOUNT = 5019, + ADBLOCKPRIVATE_GETCUSTOMFILTERS = 5020, + -+>>>>>>> b6e42af3ffff6... Squashed commits // Last entry: Add new entries above, then run: // tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY @@ -161536,12 +161533,10 @@ diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums -@@ -35802,6 +35811,34 @@ Called by update_extension_histograms.py.--> +@@ -35802,6 +35811,31 @@ Called by update_extension_histograms.py.--> -+<<<<<<< HEAD -+======= + + + @@ -161567,11 +161562,10 @@ diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums + + + -+>>>>>>> b6e42af3ffff6... Squashed commits -@@ -36436,6 +36473,7 @@ Called by update_extension_permission.py.--> +@@ -36436,6 +36470,7 @@ Called by update_extension_permission.py.--> @@ -161579,7 +161573,7 @@ diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums -@@ -97869,6 +97907,8 @@ Full version information for the fingerprint enum values: +@@ -97869,6 +97904,8 @@ Full version information for the fingerprint enum values: diff --git a/build/patches/AImageReader-CFI-crash-mitigations.patch b/build/patches/AImageReader-CFI-crash-mitigations.patch index 56966884..2bf03d98 100644 --- a/build/patches/AImageReader-CFI-crash-mitigations.patch +++ b/build/patches/AImageReader-CFI-crash-mitigations.patch @@ -30,9 +30,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html gpu/config/gpu_workaround_list.txt | 1 + gpu/ipc/service/gpu_init.cc | 5 +++++ gpu/ipc/service/stream_texture_android.cc | 11 ++++++++++- - media/base/media_switches.cc | 4 ++++ + media/base/media_switches.cc | 5 +++++ media/base/media_switches.h | 1 + - 12 files changed, 65 insertions(+), 5 deletions(-) + 12 files changed, 66 insertions(+), 5 deletions(-) diff --git a/base/android/android_image_reader_compat.cc b/base/android/android_image_reader_compat.cc --- a/base/android/android_image_reader_compat.cc @@ -231,27 +231,28 @@ diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -853,6 +853,10 @@ BASE_FEATURE(kMediaDrmPreprovisioning, - BASE_FEATURE(kMediaDrmPreprovisioningAtStartup, +@@ -854,6 +854,11 @@ BASE_FEATURE(kMediaDrmPreprovisioningAtStartup, "MediaDrmPreprovisioningAtStartup", base::FEATURE_ENABLED_BY_DEFAULT); -+// Enables the Android Image Reader path for Video decoding(for AVDA and MCVD) -+const base::Feature kAImageReaderVideoOutput{"AImageReaderVideoOutput", -+ base::FEATURE_ENABLED_BY_DEFAULT}; -+ ++// Enables the Android Image Reader path for Video decoding(for AVDA and MCVD) ++BASE_FEATURE(kAImageReaderVideoOutput, ++ "AImageReaderVideoOutput", ++ base::FEATURE_ENABLED_BY_DEFAULT); ++ // Enable picture in picture web api for android. BASE_FEATURE(kPictureInPictureAPI, + "PictureInPictureAPI", diff --git a/media/base/media_switches.h b/media/base/media_switches.h --- a/media/base/media_switches.h +++ b/media/base/media_switches.h -@@ -58,6 +58,7 @@ MEDIA_EXPORT extern const char kWaveOutBuffers[]; - MEDIA_EXPORT extern const char kEnableProtectedVideoBuffers[]; - MEDIA_EXPORT extern const char kForceProtectedVideoOutputBuffers[]; - MEDIA_EXPORT extern const char kDisableAudioInput[]; -+MEDIA_EXPORT extern const base::Feature kAImageReaderVideoOutput; - MEDIA_EXPORT extern const char kUseOverlaysForVideo[]; - MEDIA_EXPORT extern const char kMinVideoDecoderOutputBufferSize[]; - MEDIA_EXPORT extern const char kAudioCapturerWithEchoCancellation[]; +@@ -246,6 +246,7 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kMediaControlsExpandGesture); + MEDIA_EXPORT BASE_DECLARE_FEATURE(kMediaDrmPersistentLicense); + MEDIA_EXPORT BASE_DECLARE_FEATURE(kMediaDrmPreprovisioning); + MEDIA_EXPORT BASE_DECLARE_FEATURE(kMediaDrmPreprovisioningAtStartup); ++MEDIA_EXPORT BASE_DECLARE_FEATURE(kAImageReaderVideoOutput); + MEDIA_EXPORT BASE_DECLARE_FEATURE(kCanPlayHls); + MEDIA_EXPORT BASE_DECLARE_FEATURE(kPictureInPictureAPI); + MEDIA_EXPORT BASE_DECLARE_FEATURE(kHlsPlayer); -- 2.25.1 diff --git a/build/patches/Add-a-proxy-configuration-page.patch b/build/patches/Add-a-proxy-configuration-page.patch index 2879c8cc..fb363542 100644 --- a/build/patches/Add-a-proxy-configuration-page.patch +++ b/build/patches/Add-a-proxy-configuration-page.patch @@ -21,8 +21,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/prefs/browser_prefs.cc | 4 + .../prefs/chrome_command_line_pref_store.cc | 2 +- chrome/browser/resources/proxy_config.css | 61 +++ - chrome/browser/resources/proxy_config.html | 79 ++++ - chrome/browser/resources/proxy_config.js | 266 +++++++++++ + chrome/browser/resources/proxy_config.html | 78 ++++ + chrome/browser/resources/proxy_config.js | 267 +++++++++++ chrome/browser/ui/BUILD.gn | 2 + .../webui/chrome_web_ui_controller_factory.cc | 3 + chrome/browser/ui/webui/proxy_config_ui.cc | 418 ++++++++++++++++++ @@ -283,7 +283,7 @@ diff --git a/chrome/browser/resources/proxy_config.html b/chrome/browser/resourc new file mode 100644 --- /dev/null +++ b/chrome/browser/resources/proxy_config.html -@@ -0,0 +1,79 @@ +@@ -0,0 +1,78 @@ + + + @@ -297,8 +297,7 @@ new file mode 100644 + + + -+ -+ ++ + + + @@ -367,7 +366,7 @@ diff --git a/chrome/browser/resources/proxy_config.js b/chrome/browser/resources new file mode 100644 --- /dev/null +++ b/chrome/browser/resources/proxy_config.js -@@ -0,0 +1,266 @@ +@@ -0,0 +1,267 @@ +/* + This file is part of Bromite. + @@ -385,6 +384,7 @@ new file mode 100644 + along with Bromite. If not, see . +*/ + ++import {$} from 'chrome://resources/js/util.js'; +import {addSingletonGetter} from 'chrome://resources/js/cr.m.js'; + +/** @@ -932,7 +932,7 @@ new file mode 100644 + + const PrefService::Preference* const pref = + pref_service_->FindPreference(proxy_config::prefs::kProxy); -+ ProxyConfigDictionary proxy_dict(pref->GetValue()->Clone()); ++ ProxyConfigDictionary proxy_dict(pref->GetValue()->GetDict().Clone()); + ProxyPrefs::ProxyMode mode; + if (!proxy_dict.GetMode(&mode) || mode == ProxyPrefs::MODE_SYSTEM) { + availability = net::ProxyConfigService::CONFIG_UNSET; @@ -944,8 +944,8 @@ new file mode 100644 +void ProxyConfigMessageHandler::OnClear(const base::Value::List& list) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + -+ const base::Value cfg = ProxyConfigDictionary::CreateSystem(); -+ pref_service_->Set(proxy_config::prefs::kProxy, cfg); ++ const base::Value::Dict cfg = ProxyConfigDictionary::CreateSystem(); ++ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone()); + pref_service_->CommitPendingWrite(); + OnEnableNotifyUIWithState(list); +} @@ -1056,22 +1056,22 @@ new file mode 100644 + +void ProxyConfigMessageHandler::apply(const net::ProxyConfig& proxyConfig) { + if (proxyConfig.auto_detect()) { -+ const base::Value cfg = ProxyConfigDictionary::CreateAutoDetect(); -+ pref_service_->Set(proxy_config::prefs::kProxy, cfg); ++ const base::Value::Dict cfg = ProxyConfigDictionary::CreateAutoDetect(); ++ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone()); + } else if (proxyConfig.has_pac_url()) { -+ const base::Value cfg = ProxyConfigDictionary::CreatePacScript(proxyConfig.pac_url().spec(), proxyConfig.pac_mandatory()); -+ pref_service_->Set(proxy_config::prefs::kProxy, cfg); ++ const base::Value::Dict cfg = ProxyConfigDictionary::CreatePacScript(proxyConfig.pac_url().spec(), proxyConfig.pac_mandatory()); ++ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone()); + } else if (proxyConfig.proxy_rules().type == net::ProxyConfig::ProxyRules::Type::EMPTY) { -+ const base::Value cfg = ProxyConfigDictionary::CreateDirect(); -+ pref_service_->Set(proxy_config::prefs::kProxy, cfg); ++ const base::Value::Dict cfg = ProxyConfigDictionary::CreateDirect(); ++ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone()); + } else { + auto proxyRulesAsString = proxyConfig.proxy_rules().ToString(); + auto bypassRulesAsString = proxyConfig.proxy_rules().bypass_rules.ToString(); + + // fixed servers -+ const base::Value cfg = ProxyConfigDictionary::CreateFixedServers(proxyRulesAsString, ++ const base::Value::Dict cfg = ProxyConfigDictionary::CreateFixedServers(proxyRulesAsString, + bypassRulesAsString, proxyConfig.proxy_rules().reverse_bypass); -+ pref_service_->Set(proxy_config::prefs::kProxy, cfg); ++ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone()); + } + pref_service_->CommitPendingWrite(); + @@ -1193,7 +1193,7 @@ diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/pro } +bool ProxyConfigDictionary::HasReverseBypass() const { -+ const base::Value* value = dict_.FindKey(kProxyReverseBypass); ++ const base::Value* value = dict_.Find(kProxyReverseBypass); + if (!value || !value->is_bool()) { + return false; + } @@ -1266,7 +1266,7 @@ diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/pro - if (!bypass_list.empty()) + if (!bypass_list.empty()) { dict.Set(kProxyBypassList, base::Value(bypass_list)); -+ dict.SetKey(kProxyReverseBypass, base::Value(reverse_bypass)); ++ dict.Set(kProxyReverseBypass, base::Value(reverse_bypass)); + } return dict; } diff --git a/build/patches/Add-an-always-incognito-mode.patch b/build/patches/Add-an-always-incognito-mode.patch index 16533c38..5d1e85a3 100644 --- a/build/patches/Add-an-always-incognito-mode.patch +++ b/build/patches/Add-an-always-incognito-mode.patch @@ -24,7 +24,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../java/res/xml/incognito_preferences.xml | 37 ++++ .../java/res/xml/privacy_preferences.xml | 5 + .../AlwaysIncognitoLinkInterceptor.java | 53 ++++++ - .../chrome/browser/ChromeTabbedActivity.java | 6 +- + .../chrome/browser/ChromeTabbedActivity.java | 9 +- .../chrome/browser/app/ChromeActivity.java | 4 + .../AppMenuPropertiesDelegateImpl.java | 26 ++- .../ChromeContextMenuPopulator.java | 7 +- @@ -35,16 +35,17 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/history/HistoryManager.java | 18 +- .../chrome/browser/history/HistoryPage.java | 16 ++ .../native_page/NativePageFactory.java | 4 +- - .../chrome/browser/ntp/RecentTabsManager.java | 3 +- + .../chrome/browser/ntp/RecentTabsManager.java | 27 ++- .../privacy/settings/IncognitoSettings.java | 160 ++++++++++++++++++ .../browser/settings/SettingsActivity.java | 4 + - .../HistoricalTabModelObserver.java | 8 +- + .../HistoricalTabModelObserver.java | 6 +- .../tab/tab_restore/HistoricalTabSaver.java | 2 +- .../tab_restore/HistoricalTabSaverImpl.java | 17 +- .../tabbed_mode/TabbedRootUiCoordinator.java | 4 +- .../browser/tabmodel/ChromeTabCreator.java | 5 +- .../tabmodel/TabModelSelectorImpl.java | 3 + .../browser/tabmodel/TabPersistentStore.java | 9 + + .../browser/toolbar/ToolbarManager.java | 4 +- .../webapps/WebappIntentDataProvider.java | 14 ++ chrome/browser/about_flags.cc | 4 + .../browser/android/historical_tab_saver.cc | 22 ++- @@ -56,9 +57,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../flags/android/chrome_feature_list.cc | 4 +- chrome/browser/history/history_tab_helper.cc | 18 ++ chrome/browser/history/history_tab_helper.h | 10 +- - .../android/offline_page_bridge.cc | 13 +- - .../android/offline_page_model_factory.cc | 21 ++- - .../android/request_coordinator_factory.cc | 21 ++- + .../android/offline_page_bridge.cc | 11 +- + .../android/offline_page_model_factory.cc | 20 ++- + .../android/request_coordinator_factory.cc | 26 ++- .../offline_page_model_factory.h | 1 + .../offline_pages/recent_tab_helper.cc | 19 ++- .../browser/offline_pages/recent_tab_helper.h | 3 + @@ -67,6 +68,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/ui/android/native_page/BUILD.gn | 2 + .../browser/ui/native_page/NativePage.java | 12 +- .../strings/android_chrome_strings.grd | 31 ++++ + .../browser/toolbar/LocationBarModel.java | 11 +- chrome/browser/ui/messages/android/BUILD.gn | 1 + .../snackbar/INeedSnackbarManager.java | 27 +++ chrome/common/pref_names.cc | 6 + @@ -82,7 +84,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../omnibox/browser/base_search_provider.cc | 2 +- components/omnibox/browser/search_provider.cc | 4 +- .../host_content_settings_map_factory.cc | 1 + - 63 files changed, 682 insertions(+), 74 deletions(-) + 65 files changed, 721 insertions(+), 77 deletions(-) create mode 100644 chrome/android/java/res/xml/incognito_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java @@ -244,7 +246,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate; import org.chromium.chrome.browser.IntentHandler.TabOpenType; import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout; -@@ -1904,8 +1905,9 @@ public class ChromeTabbedActivity extends ChromeActivity tabs) { -+ boolean is_always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); - HashMap idToGroup = new HashMap<>(); - List entries = new ArrayList<>(); - -@@ -72,7 +76,7 @@ public class HistoricalTabModelObserver implements TabModelObserver { +@@ -72,7 +75,6 @@ public class HistoricalTabModelObserver implements TabModelObserver { entries.add(historicalGroup); idToGroup.put(groupId, historicalGroup); } - -+ fix me! mHistoricalTabSaver.createHistoricalBulkClosure(entries); } } @@ -1006,6 +1048,27 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer TabModel model = mTabModelSelector.getModel(isIncognito); if (model.isIncognito() != isIncognito) { +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 +--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +@@ -38,6 +38,7 @@ import org.chromium.base.supplier.OneshotSupplier; + import org.chromium.base.supplier.Supplier; + import org.chromium.chrome.R; + import org.chromium.chrome.browser.ActivityTabProvider; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.IntentHandler; + import org.chromium.chrome.browser.app.tab_activity_glue.TabReparentingController; + import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton; +@@ -526,7 +527,8 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve + return ret; + } + }, +- SearchEngineLogoUtils.getInstance()); ++ SearchEngineLogoUtils.getInstance(), ++ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()); + mControlContainer = controlContainer; + assert mControlContainer != null; + diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java @@ -1113,7 +1176,7 @@ diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/and const JavaParamRef& state, - jint saved_state_version) { + jint saved_state_version, -+ bool is_always_incognito) { ++ jboolean is_always_incognito) { void* data = env->GetDirectBufferAddress(state); int size = env->GetDirectBufferCapacity(state); @@ -1332,38 +1395,23 @@ diff --git a/chrome/browser/offline_pages/android/offline_page_bridge.cc b/chrom using base::android::ConvertJavaStringToUTF8; using base::android::ConvertUTF16ToJavaString; -@@ -156,7 +159,13 @@ void ValidateFileCallback( - int64_t offline_id, - const GURL& url, - const base::FilePath& file_path, -+ SimpleFactoryKey* key, - bool is_trusted) { -+ // in always incognito, never trust input file (show file name in url) -+ ProfileKey* profile_key = ProfileKey::FromSimpleFactoryKey(key); -+ if(profile_key->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled)) -+ is_trusted = false; -+ - // If trusted, the launch url will be the http/https url of the offline - // page. If the file path is content URI, directly open it. Otherwise, the - // launch url will be the file URL pointing to the archive file of the offline -@@ -787,7 +796,7 @@ void OfflinePageBridge::GetPageByOfflineIdDone( +@@ -785,9 +788,15 @@ void OfflinePageBridge::GetPageByOfflineIdDone( + } + if (offline_page_model_->IsArchiveInInternalDir(offline_page->file_path)) { ++ bool is_trusted = true; ++ // in always incognito, never trust input file (show file name in url) ++ ProfileKey* profile_key = ProfileKey::FromSimpleFactoryKey(key_); ++ if(profile_key->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled)) ++ is_trusted = false; ++ ValidateFileCallback(launch_location, j_callback_obj, offline_page->offline_id, offline_page->url, - offline_page->file_path, true /* is_trusted*/); -+ offline_page->file_path, key_, true /* is_trusted*/); ++ offline_page->file_path, is_trusted); return; } -@@ -797,7 +806,7 @@ void OfflinePageBridge::GetPageByOfflineIdDone( - offline_page->file_size, offline_page->digest), - base::BindOnce(&ValidateFileCallback, launch_location, j_callback_obj, - offline_page->offline_id, offline_page->url, -- offline_page->file_path)); -+ offline_page->file_path, key_)); - } - - void OfflinePageBridge::GetSizeAndComputeDigestDone( diff --git a/chrome/browser/offline_pages/android/offline_page_model_factory.cc b/chrome/browser/offline_pages/android/offline_page_model_factory.cc --- a/chrome/browser/offline_pages/android/offline_page_model_factory.cc +++ b/chrome/browser/offline_pages/android/offline_page_model_factory.cc @@ -1377,15 +1425,7 @@ diff --git a/chrome/browser/offline_pages/android/offline_page_model_factory.cc namespace offline_pages { -@@ -46,6 +49,7 @@ OfflinePageModel* OfflinePageModelFactory::GetForKey(SimpleFactoryKey* key) { - OfflinePageModel* OfflinePageModelFactory::GetForBrowserContext( - content::BrowserContext* browser_context) { - Profile* profile = Profile::FromBrowserContext(browser_context); -+ profile = profile->GetOriginalProfile(); - return GetForKey(profile->GetProfileKey()); - } - -@@ -54,13 +58,15 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( +@@ -54,13 +57,15 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( scoped_refptr background_task_runner = base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()}); @@ -1403,7 +1443,7 @@ diff --git a/chrome/browser/offline_pages/android/offline_page_model_factory.cc // If base::PathService::Get returns false, the temporary_archives_dir will be // empty, and no temporary pages will be saved during this chrome lifecycle. base::FilePath temporary_archives_dir; -@@ -69,7 +75,6 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( +@@ -69,7 +74,6 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( temporary_archives_dir.Append(chrome::kOfflinePageArchivesDirname); } @@ -1411,7 +1451,7 @@ diff --git a/chrome/browser/offline_pages/android/offline_page_model_factory.cc auto archive_manager = std::make_unique( temporary_archives_dir, persistent_archives_dir, DownloadPrefs::GetDefaultDownloadDirectory(), background_task_runner, -@@ -87,4 +92,14 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( +@@ -87,4 +91,14 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( return model; } @@ -1459,7 +1499,19 @@ diff --git a/chrome/browser/offline_pages/android/request_coordinator_factory.cc // Depends on OfflinePageModelFactory in SimpleDependencyManager. } -@@ -111,4 +118,16 @@ KeyedService* RequestCoordinatorFactory::BuildServiceInstanceFor( +@@ -79,6 +86,11 @@ RequestCoordinator* RequestCoordinatorFactory::GetForBrowserContext( + + KeyedService* RequestCoordinatorFactory::BuildServiceInstanceFor( + content::BrowserContext* context) const { ++ if(context->IsOffTheRecord() && ++ Profile::FromBrowserContext(context)->GetOriginalProfile() ++ ->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled) == false) { ++ return nullptr; ++ } + std::unique_ptr policy(new OfflinerPolicy()); + std::unique_ptr offliner; + OfflinePageModel* model = +@@ -111,4 +123,16 @@ KeyedService* RequestCoordinatorFactory::BuildServiceInstanceFor( return request_coordinator; } @@ -1687,6 +1739,55 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro <link1>Search history</link1> and <link2>other forms of activity</link2> may be saved in your Google Account when you’re signed in. You can delete them anytime. +diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java +--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java ++++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java +@@ -178,6 +178,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro + protected GURL mVisibleGurl = GURL.emptyGURL(); + protected String mFormattedFullUrl; + protected String mUrlForDisplay; ++ private boolean mIsAlwaysIncognito; + + /** + * Default constructor for this class. +@@ -192,7 +193,8 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro + public LocationBarModel(Context context, NewTabPageDelegate newTabPageDelegate, + @NonNull UrlFormatter urlFormatter, @NonNull ProfileProvider profileProvider, + @NonNull OfflineStatus offlineStatus, +- @NonNull SearchEngineLogoUtils searchEngineLogoUtils) { ++ @NonNull SearchEngineLogoUtils searchEngineLogoUtils, ++ boolean isAlwaysIncognito) { + mContext = context; + mNtpDelegate = newTabPageDelegate; + mUrlFormatter = urlFormatter; +@@ -200,6 +202,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro + mOfflineStatus = offlineStatus; + mPrimaryColor = ChromeColors.getDefaultThemeColor(context, false); + mSearchEngineLogoUtils = searchEngineLogoUtils; ++ mIsAlwaysIncognito = isAlwaysIncognito; + } + + /** +@@ -429,6 +432,10 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro + if (mOptimizationsEnabled) { + autocompleteSchemeClassifier = mChromeAutocompleteSchemeClassifier; + cachedSpannableDisplayText = mSpannableDisplayTextCache.get(cacheKey); ++ if (mIsAlwaysIncognito) { ++ // the profile may be destroyed and no longer be valid ++ autocompleteSchemeClassifier = new ChromeAutocompleteSchemeClassifier(getProfile()); ++ } + } else { + autocompleteSchemeClassifier = new ChromeAutocompleteSchemeClassifier(getProfile()); + } +@@ -446,7 +453,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro + } + } + } finally { +- if (!mOptimizationsEnabled) { ++ if (!mOptimizationsEnabled || mIsAlwaysIncognito) { + autocompleteSchemeClassifier.destroy(); + } + } diff --git a/chrome/browser/ui/messages/android/BUILD.gn b/chrome/browser/ui/messages/android/BUILD.gn --- a/chrome/browser/ui/messages/android/BUILD.gn +++ b/chrome/browser/ui/messages/android/BUILD.gn diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index 1c4a2ce5..62fd48b0 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -29,7 +29,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../DownloadLocationDialogCoordinator.java | 8 +- chrome/browser/flag_descriptions.cc | 5 + chrome/browser/flag_descriptions.h | 3 + - .../flags/android/chrome_feature_list.cc | 5 + + .../flags/android/chrome_feature_list.cc | 6 + .../flags/android/chrome_feature_list.h | 1 + .../browser/flags/ChromeFeatureList.java | 1 + chrome/browser/importer/profile_writer.cc | 12 + @@ -45,7 +45,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ui/shell_dialogs/select_file_dialog.h | 2 + .../select_file_dialog_android.cc | 6 + ui/shell_dialogs/select_file_dialog_android.h | 2 + - 35 files changed, 847 insertions(+), 29 deletions(-) + 35 files changed, 848 insertions(+), 29 deletions(-) diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml @@ -1287,13 +1287,14 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse &kCriticalPersistedTabData, &kCommerceCoupons, &kCCTBackgroundTab, -@@ -1156,6 +1157,10 @@ BASE_FEATURE(kWebApkTrampolineOnInitialIntent, +@@ -1156,6 +1157,11 @@ BASE_FEATURE(kWebApkTrampolineOnInitialIntent, "WebApkTrampolineOnInitialIntent", base::FEATURE_ENABLED_BY_DEFAULT); +// disabled by default because of an issue on Android 6.0 -+const base::Feature kBookmarksExportUseSaf{"BookmarksExportUseSaf", -+ base::FEATURE_DISABLED_BY_DEFAULT}; ++BASE_FEATURE(kBookmarksExportUseSaf, ++ "BookmarksExportUseSaf", ++ base::FEATURE_DISABLED_BY_DEFAULT); + static jboolean JNI_ChromeFeatureList_IsEnabled( JNIEnv* env, diff --git a/build/patches/Add-lifetime-options-for-permissions.patch b/build/patches/Add-lifetime-options-for-permissions.patch index b177fcee..ac30180e 100644 --- a/build/patches/Add-lifetime-options-for-permissions.patch +++ b/build/patches/Add-lifetime-options-for-permissions.patch @@ -1298,15 +1298,15 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p if (ignore_callbacks_from_prompt_) return; DCHECK(view_); -@@ -586,7 +597,7 @@ void PermissionRequestManager::Deny() { - std::vector::iterator requests_iter; - for (requests_iter = requests_.begin(); requests_iter != requests_.end(); - requests_iter++) { -- StorePermissionActionForUMA((*requests_iter)->requesting_origin(), -+ StorePermissionActionForUMA((*requests_iter, is_one_time, lifetime_option)->requesting_origin(), +@@ -589,7 +600,7 @@ void PermissionRequestManager::Deny() { + StorePermissionActionForUMA((*requests_iter)->requesting_origin(), (*requests_iter)->request_type(), PermissionAction::DENIED); - PermissionDeniedIncludingDuplicates(*requests_iter); +- PermissionDeniedIncludingDuplicates(*requests_iter); ++ PermissionDeniedIncludingDuplicates(*requests_iter, is_one_time, lifetime_option); + } + + NotifyRequestDecided(PermissionAction::DENIED); @@ -967,25 +978,25 @@ PermissionRequest* PermissionRequestManager::GetExistingRequest( void PermissionRequestManager::PermissionGrantedIncludingDuplicates( diff --git a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch index 4b5d9fea..fbf60ec1 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -5,7 +5,7 @@ Subject: Add menu item to bookmark all tabs License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- chrome/android/java/res/menu/main_menu.xml | 7 +++ - .../chrome/browser/ChromeTabbedActivity.java | 26 ++++++++ + .../chrome/browser/ChromeTabbedActivity.java | 24 ++++++++ .../browser/bookmarks/BookmarkBridge.java | 60 +++++++++++++++++++ .../browser/bookmarks/BookmarkUtils.java | 4 ++ .../bookmarks/android/bookmark_bridge.cc | 17 ++++++ @@ -25,7 +25,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/bookmarks/browser/bookmark_node.h | 5 ++ components/bookmarks/browser/model_loader.cc | 3 +- .../bookmark_specifics_conversions.cc | 1 + - 21 files changed, 202 insertions(+), 10 deletions(-) + 21 files changed, 200 insertions(+), 10 deletions(-) diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml --- a/chrome/android/java/res/menu/main_menu.xml @@ -54,16 +54,15 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -77,6 +77,8 @@ import org.chromium.chrome.browser.back_press.MinimizeAppAndCloseTabBackPressHan +@@ -77,6 +77,7 @@ import org.chromium.chrome.browser.back_press.MinimizeAppAndCloseTabBackPressHan import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.browserservices.intents.WebappConstants; import org.chromium.chrome.browser.compositor.CompositorViewHolder; -+import org.chromium.chrome.browser.bookmarks.BookmarkBridge; +import org.chromium.chrome.browser.bookmarks.BookmarkModel; import org.chromium.chrome.browser.compositor.layouts.Layout; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome; import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone; -@@ -2202,6 +2204,8 @@ public class ChromeTabbedActivity extends ChromeActivity getTabModelSelector().closeAllTabs(), /*isIncognito=*/false); RecordUserAction.record("MobileMenuCloseAllTabs"); @@ -72,7 +71,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct } else if (id == R.id.close_all_incognito_tabs_menu_id) { // Close only incognito tabs CloseAllTabsDialog.show(this, getModalDialogManagerSupplier(), -@@ -2254,6 +2258,28 @@ public class ChromeTabbedActivity extends ChromeActivity { + for (int i = 0; i < tabModel.getCount(); i++) { + Tab tab = tabModel.getTabAt(i); + if (tab.isNativePage()) { + continue; + } -+ bridge.addToTabsCollection(this, tab); ++ bookmarkModel.addToTabsCollection(this, tab); + } -+ bridge.finishedAddingToTabsCollection(this, getSnackbarManager()); ++ bookmarkModel.finishedAddingToTabsCollection(this, getSnackbarManager()); + }); + } + diff --git a/build/patches/Add-menu-item-to-view-source.patch b/build/patches/Add-menu-item-to-view-source.patch index c51926e0..469a5faa 100644 --- a/build/patches/Add-menu-item-to-view-source.patch +++ b/build/patches/Add-menu-item-to-view-source.patch @@ -42,7 +42,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -2228,6 +2228,8 @@ public class ChromeTabbedActivity extends ChromeActivityversion_on_disk()); -@@ -156,6 +157,9 @@ void PermissionRevocationRequest::CheckAndRevokeIfBlocklisted() { +@@ -156,10 +157,14 @@ void PermissionRevocationRequest::CheckAndRevokeIfBlocklisted() { url::Origin::Create(origin_), base::BindOnce(&PermissionRevocationRequest::OnSiteReputationReady, weak_factory_.GetWeakPtr())); @@ -1977,22 +1977,19 @@ diff --git a/chrome/browser/permissions/permission_revocation_request.cc b/chrom } void PermissionRevocationRequest::OnSiteReputationReady( -@@ -180,6 +184,7 @@ void PermissionRevocationRequest::OnSiteReputationReady( - default: - should_revoke_permission = false; - } + const CrowdDenyPreloadData::SiteReputation* site_reputation) { +#if BUILDFLAG(FULL_SAFE_BROWSING) - DCHECK(g_browser_process->safe_browsing_service()); - if (should_revoke_permission && - g_browser_process->safe_browsing_service()) { -@@ -191,6 +196,7 @@ void PermissionRevocationRequest::OnSiteReputationReady( - weak_factory_.GetWeakPtr(), site_reputation)); + if (crowd_deny_request_start_time_.has_value()) { + crowd_deny_request_duration_ = + base::TimeTicks::Now() - crowd_deny_request_start_time_.value(); +@@ -192,6 +197,7 @@ void PermissionRevocationRequest::OnSiteReputationReady( return; } -+#endif } ++#endif NotifyCallback(Outcome::PERMISSION_NOT_REVOKED); } + diff --git a/chrome/browser/permissions/quiet_notification_permission_ui_config.cc b/chrome/browser/permissions/quiet_notification_permission_ui_config.cc --- a/chrome/browser/permissions/quiet_notification_permission_ui_config.cc +++ b/chrome/browser/permissions/quiet_notification_permission_ui_config.cc diff --git a/build/patches/Disable-text-fragments-by-default.patch b/build/patches/Disable-text-fragments-by-default.patch index 48ec9f0f..65d66a60 100644 --- a/build/patches/Disable-text-fragments-by-default.patch +++ b/build/patches/Disable-text-fragments-by-default.patch @@ -13,11 +13,11 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/flag_descriptions.h | 3 +++ chrome/browser/ui/prefs/prefs_tab_helper.cc | 2 +- content/child/runtime_features.cc | 1 + - third_party/blink/common/features.cc | 4 ++++ + third_party/blink/common/features.cc | 5 +++++ third_party/blink/public/common/features.h | 1 + third_party/blink/renderer/core/dom/document.cc | 5 +++++ .../blink/renderer/platform/runtime_enabled_features.json5 | 5 ++--- - 10 files changed, 31 insertions(+), 4 deletions(-) + 10 files changed, 32 insertions(+), 4 deletions(-) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc @@ -102,13 +102,14 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -496,6 +496,10 @@ BASE_FEATURE(kDropInputEventsBeforeFirstPaint, +@@ -496,6 +496,11 @@ BASE_FEATURE(kDropInputEventsBeforeFirstPaint, "DropInputEventsBeforeFirstPaint", base::FEATURE_DISABLED_BY_DEFAULT); +// Enable text snippets in URL fragments. https://crbug.com/919204. -+const base::Feature kTextFragmentAnchor{"TextFragmentAnchor", -+ base::FEATURE_DISABLED_BY_DEFAULT}; ++BASE_FEATURE(kTextFragmentAnchor, ++ "TextFragmentAnchor", ++ base::FEATURE_DISABLED_BY_DEFAULT); + // File handling icons. https://crbug.com/1218213 BASE_FEATURE(kFileHandlingIcons, @@ -116,14 +117,14 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h -@@ -608,6 +608,7 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kPrewarmDefaultFontFamilies); - BLINK_COMMON_EXPORT extern const base::FeatureParam kPrewarmStandard; - BLINK_COMMON_EXPORT extern const base::FeatureParam kPrewarmFixed; - BLINK_COMMON_EXPORT extern const base::FeatureParam kPrewarmSerif; -+BLINK_COMMON_EXPORT extern const base::Feature kTextFragmentAnchor; - BLINK_COMMON_EXPORT extern const base::FeatureParam kPrewarmSansSerif; - BLINK_COMMON_EXPORT extern const base::FeatureParam kPrewarmCursive; - BLINK_COMMON_EXPORT extern const base::FeatureParam kPrewarmFantasy; +@@ -216,6 +216,7 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kResourceLoadViaDataPipe); + BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kServiceWorkerUpdateDelay); + BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kStopInBackground); + BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kDropInputEventsBeforeFirstPaint); ++BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kTextFragmentAnchor); + BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kFileHandlingIcons); + BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kAllowSyncXHRInPageDismissal); + BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kPrefetchPrivacyChanges); diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc diff --git a/build/patches/Enable-share-intent.patch b/build/patches/Enable-share-intent.patch index c3c91b16..30625920 100644 --- a/build/patches/Enable-share-intent.patch +++ b/build/patches/Enable-share-intent.patch @@ -41,7 +41,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -972,6 +972,7 @@ chrome_java_sources = [ +@@ -971,6 +971,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallUma.java", "java/src/org/chromium/chrome/browser/sharing/shared_clipboard/SharedClipboardMessageHandler.java", "java/src/org/chromium/chrome/browser/sharing/sms_fetcher/SmsFetcherMessageHandler.java", diff --git a/build/patches/Experimental-user-scripts-support.patch b/build/patches/Experimental-user-scripts-support.patch index a7c40c92..df6d4918 100644 --- a/build/patches/Experimental-user-scripts-support.patch +++ b/build/patches/Experimental-user-scripts-support.patch @@ -2607,10 +2607,9 @@ new file mode 100644 +js_library("view_script_source") { + deps = [ + "//ui/webui/resources/js:cr.m", -+ "//ui/webui/resources/js:util.m", ++ "//ui/webui/resources/js:util", + ] +} -\ No newline at end of file diff --git a/components/user_scripts/browser/resources/user-script-ui/user-scripts-ui.html b/components/user_scripts/browser/resources/user-script-ui/user-scripts-ui.html new file mode 100644 --- /dev/null @@ -2620,7 +2619,7 @@ new file mode 100644 + + + -+ Local State Debug Page ++ Userscript View Source + + + @@ -2630,14 +2629,13 @@ new file mode 100644 + + + -\ No newline at end of file diff --git a/components/user_scripts/browser/resources/user-script-ui/user-scripts-ui.js b/components/user_scripts/browser/resources/user-script-ui/user-scripts-ui.js new file mode 100644 --- /dev/null +++ b/components/user_scripts/browser/resources/user-script-ui/user-scripts-ui.js @@ -0,0 +1,9 @@ +import {sendWithPromise} from 'chrome://resources/js/cr.m.js'; -+import {$} from 'chrome://resources/js/util.m.js'; ++import {$} from 'chrome://resources/js/util.js'; + +document.addEventListener('DOMContentLoaded', function() { + const urlParams = new URLSearchParams(window.location.search); @@ -2645,7 +2643,6 @@ new file mode 100644 + $('content').textContent = textContent[0].content; + }); +}); -\ No newline at end of file diff --git a/components/user_scripts/browser/ui/user_scripts_ui.cc b/components/user_scripts/browser/ui/user_scripts_ui.cc new file mode 100644 --- /dev/null @@ -5071,19 +5068,19 @@ new file mode 100755 + // Not IPv6 (either IPv4 or just a normal address). + port_separator_pos = host_and_port.find(':'); + } else { // IPv6. -+ size_t host_end_pos = host_and_port.find(']'); -+ if (host_end_pos == base::StringPiece::npos) ++ size_t ipv6_host_end_pos = host_and_port.find(']'); ++ if (ipv6_host_end_pos == base::StringPiece::npos) + return ParseResult::kInvalidHost; -+ if (host_end_pos == 1) ++ if (ipv6_host_end_pos == 1) + return ParseResult::kEmptyHost; + -+ if (host_end_pos < host_and_port.length() - 1) { ++ if (ipv6_host_end_pos < host_and_port.length() - 1) { + // The host isn't the only component. Check for a port. This would + // require a ':' to follow the closing ']' from the host. -+ if (host_and_port[host_end_pos + 1] != ':') ++ if (host_and_port[ipv6_host_end_pos + 1] != ':') + return ParseResult::kInvalidHost; + -+ port_separator_pos = host_end_pos + 1; ++ port_separator_pos = ipv6_host_end_pos + 1; + } + } + diff --git a/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch b/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch index a2496751..011cf2f0 100644 --- a/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch +++ b/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch @@ -59,7 +59,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink +void Document::injectScripts() { + // determine whether this is a search results page + const WTF::String& host = url_.Host(); -+ if ((host == nullptr) || host.IsEmpty()) ++ if ((host == nullptr) || host.empty()) + return; + + auto* bodyElement = body(); @@ -108,7 +108,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink + for (unsigned i = 0; i < source_length; ++i) { + Element* element = s->item(i); + const AtomicString& nonce = element->nonce(); -+ if ((nonce != g_null_atom) && !nonce.IsEmpty()) ++ if ((nonce != g_null_atom) && !nonce.empty()) + return nonce; + } + return g_null_atom; diff --git a/build/patches/Move-navigation-bar-to-bottom.patch b/build/patches/Move-navigation-bar-to-bottom.patch index 20d3db59..ad33a782 100644 --- a/build/patches/Move-navigation-bar-to-bottom.patch +++ b/build/patches/Move-navigation-bar-to-bottom.patch @@ -57,14 +57,14 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/flag_descriptions.cc | 4 ++ chrome/browser/flag_descriptions.h | 3 ++ .../flags/android/cached_feature_flags.cc | 18 +++++++ - .../flags/android/chrome_feature_list.cc | 3 ++ + .../flags/android/chrome_feature_list.cc | 2 + .../browser/flags/CachedFeatureFlags.java | 19 +++++++ .../browser/flags/ChromeFeatureList.java | 4 ++ .../chrome/browser/ui/appmenu/AppMenu.java | 25 +++++++++ .../ui/appmenu/AppMenuHandlerImpl.java | 11 ++++ .../omnibox/LocationBarCoordinator.java | 9 +++- .../browser/omnibox/UrlBarCoordinator.java | 11 +++- - .../suggestions/AutocompleteCoordinator.java | 20 +++++-- + .../suggestions/AutocompleteCoordinator.java | 18 ++++++- .../suggestions/AutocompleteMediator.java | 7 ++- .../OmniboxSuggestionsDropdown.java | 22 +++++++- .../OmniboxSuggestionsDropdownEmbedder.java | 4 ++ @@ -85,7 +85,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../accessibility/AccessibilitySettings.java | 16 ++++++ .../AccessibilitySettingsDelegate.java | 6 +++ .../render_widget_host_view_android.cc | 3 ++ - 73 files changed, 771 insertions(+), 59 deletions(-) + 73 files changed, 770 insertions(+), 57 deletions(-) diff --git a/cc/base/features.cc b/cc/base/features.cc --- a/cc/base/features.cc @@ -108,7 +108,7 @@ diff --git a/cc/base/features.h b/cc/base/features.h // that resets the scale at the end. When enabled, this aovids recomputing // raster scale during elastic overscroll. CC_BASE_EXPORT BASE_DECLARE_FEATURE(kAvoidRasterDuringElasticOverscroll); -+CC_BASE_EXPORT extern const base::Feature kMoveTopToolbarToBottom; ++CC_BASE_EXPORT BASE_DECLARE_FEATURE(kMoveTopToolbarToBottom); // When enabled, the double tap to zoom will be disabled when the viewport // meta tag is properly set for mobile using content=width=device-width @@ -1293,7 +1293,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se } // clang-format off - mLocationBarCoordinator = new LocationBarCoordinator(mSearchBox, mAnchorView, -+ mLocationBarCoordinator = new LocationBarCoordinator(mSearchBox, anchorView, mAnchorView, ++ mLocationBarCoordinator = new LocationBarCoordinator(mSearchBox, mAnchorView, mAnchorView, mProfileSupplier, PrivacyPreferencesManagerImpl.getInstance(), mSearchBoxDataProvider, null, new WindowDelegate(getWindow()), getWindowAndroid(), /*activityTabSupplier=*/() -> null, getModalDialogManagerSupplier(), @@ -1366,7 +1366,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicato 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 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -177,6 +177,9 @@ import org.chromium.url.GURL; +@@ -178,6 +178,9 @@ import org.chromium.url.GURL; import java.util.List; @@ -1376,7 +1376,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar /** * Contains logic for managing the toolbar visual component. This class manages the interactions * with the rest of the application to ensure the toolbar is always visually up to date. -@@ -668,7 +671,7 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -670,7 +673,7 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve mEphemeralTabCoordinatorSupplier); // clang-format off LocationBarCoordinator locationBarCoordinator = new LocationBarCoordinator( @@ -1385,7 +1385,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar PrivacyPreferencesManagerImpl.getInstance(), mLocationBarModel, mActionModeController.getActionModeCallback(), new WindowDelegate(mActivity.getWindow()), windowAndroid, mActivityTabProvider, -@@ -925,11 +928,13 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -927,11 +930,13 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve // the height won't be measured by the background image. if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1399,7 +1399,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mControlContainer.removeOnLayoutChangeListener(mLayoutChangeListener); mLayoutChangeListener = null; } -@@ -1309,13 +1314,25 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -1311,13 +1316,25 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve return mLocationBar.getOmniboxStub().isUrlBarFocused(); } @@ -1427,7 +1427,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mScrimCoordinator, mOmniboxFocusStateSupplier, mBottomSheetController, mActivityLifecycleDispatcher, mIsWarmOnResumeSupplier, mTabModelSelector, mTabContentManager, mCompositorViewHolder, -@@ -1324,8 +1341,9 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -1326,8 +1343,9 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve mBottomControlsCoordinatorSupplier.set(new BottomControlsCoordinator(mActivity, mWindowAndroid, mLayoutManager, mCompositorViewHolder.getResourceManager(), mBrowserControlsSizer, mFullscreenManager, @@ -1439,7 +1439,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar } /** -@@ -2089,6 +2107,15 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -2091,6 +2109,15 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve private void setControlContainerTopMargin(int margin) { final ViewGroup.MarginLayoutParams layoutParams = ((ViewGroup.MarginLayoutParams) mControlContainer.getLayoutParams()); @@ -1663,12 +1663,11 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse #include "base/metrics/field_trial_params.h" #include "base/no_destructor.h" #include "base/strings/string_piece_forward.h" -@@ -258,6 +259,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -258,6 +259,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kKitKatSupported, &kLensCameraAssistedSearch, &kLensOnQuickActionSearchWidget, -+ &kMoveTopToolbarToBottom, -+ &kMostRecentTabOnBackgroundCloseTab, ++ &features::kMoveTopToolbarToBottom, &kNewInstanceFromDraggedLink, &kNewTabPageTilesTitleWrapAround, &kNewWindowAppMenu, @@ -1900,17 +1899,15 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow import java.util.ArrayList; import java.util.List; -@@ -75,8 +77,7 @@ public class AutocompleteCoordinator implements UrlFocusChangeListener, UrlTextC - private final @NonNull AutocompleteMediator mMediator; - private final @NonNull Supplier mModalDialogManagerSupplier; +@@ -77,6 +79,7 @@ public class AutocompleteCoordinator implements UrlFocusChangeListener, UrlTextC private @Nullable OmniboxSuggestionsDropdown mDropdown; -- private @NonNull ObserverList mScrollListenerList = -- new ObserverList<>(); + private @NonNull ObserverList mScrollListenerList = + new ObserverList<>(); + private final @NonNull OmniboxSuggestionsDropdownEmbedder mDropdownEmbedder; public AutocompleteCoordinator(@NonNull ViewGroup parent, @NonNull AutocompleteDelegate delegate, -@@ -99,6 +100,7 @@ public class AutocompleteCoordinator implements UrlFocusChangeListener, UrlTextC +@@ -99,6 +102,7 @@ public class AutocompleteCoordinator implements UrlFocusChangeListener, UrlTextC PropertyModel listModel = new PropertyModel(SuggestionListProperties.ALL_KEYS); ModelList listItems = new ModelList(); @@ -1918,7 +1915,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow listModel.set(SuggestionListProperties.EMBEDDER, dropdownEmbedder); listModel.set(SuggestionListProperties.VISIBLE, false); listModel.set(SuggestionListProperties.SUGGESTION_MODELS, listItems); -@@ -154,7 +156,7 @@ public class AutocompleteCoordinator implements UrlFocusChangeListener, UrlTextC +@@ -154,7 +158,7 @@ public class AutocompleteCoordinator implements UrlFocusChangeListener, UrlTextC public void inflate() { OmniboxSuggestionsDropdown dropdown; try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) { @@ -1927,7 +1924,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow } // Start with visibility GONE to ensure that show() is called. -@@ -232,6 +234,16 @@ public class AutocompleteCoordinator implements UrlFocusChangeListener, UrlTextC +@@ -232,6 +236,16 @@ public class AutocompleteCoordinator implements UrlFocusChangeListener, UrlTextC ViewGroup container = (ViewGroup) ((ViewStub) mParent.getRootView().findViewById( R.id.omnibox_results_container_stub)) .inflate(); @@ -1944,7 +1941,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow mHolder = new SuggestionListViewHolder(container, dropdown); for (int i = 0; i < mCallbacks.size(); i++) { -@@ -458,4 +470,4 @@ public class AutocompleteCoordinator implements UrlFocusChangeListener, UrlTextC +@@ -458,4 +472,4 @@ public class AutocompleteCoordinator implements UrlFocusChangeListener, UrlTextC listener.onSuggestionDropdownOverscrolledToTop(); } } diff --git a/build/patches/OpenSearch-miscellaneous.patch b/build/patches/OpenSearch-miscellaneous.patch index c151e94e..5f7ef5a4 100644 --- a/build/patches/OpenSearch-miscellaneous.patch +++ b/build/patches/OpenSearch-miscellaneous.patch @@ -12,11 +12,11 @@ Add verbose logging License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../settings/SearchEngineAdapter.java | 4 +- - .../search_engine_tab_helper.cc | 51 ++++++++++++++----- + .../search_engine_tab_helper.cc | 47 ++++++++++++++----- .../renderer/chrome_render_frame_observer.cc | 2 + .../search_engines/template_url_fetcher.cc | 23 +++++++-- - .../search_engines/template_url_service.h | 8 +-- - 5 files changed, 65 insertions(+), 23 deletions(-) + .../search_engines/template_url_service.h | 8 ++-- + 5 files changed, 62 insertions(+), 22 deletions(-) diff --git a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java b/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java --- a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java @@ -80,17 +80,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro return std::u16string(); } -@@ -114,22 +119,27 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( - const GURL& page_url, - const GURL& osdd_url) { - // Checks to see if we should generate a keyword based on the OSDD, and if -- // necessary uses TemplateURLFetcher to download the OSDD and create a -+ // necessary uses TemplateURLFetcher to download the OSDD and create a { -+ LOG(INFO) << "OpenSearch: frame mismatch on page " << page_url; - // keyword. -+ } - - // Make sure that the page is the current page and other basic checks. +@@ -121,15 +126,18 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( // When |page_url| has file: scheme, this method doesn't work because of // http://b/issue?id=863583. For that reason, this doesn't check and allow // urls referring to osdd urls with same schemes. @@ -112,7 +102,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro // If the current page is a form submit, find the last page that was not a // form submit and use its url to generate the keyword from. -@@ -139,8 +149,10 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( +@@ -139,8 +147,10 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( (index > 0) && IsFormSubmit(entry); entry = controller.GetEntryAtIndex(index)) --index; @@ -124,7 +114,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro // Autogenerate a keyword for the autodetected case; in the other cases we'll // generate a keyword later after fetching the OSDD. -@@ -148,6 +160,12 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( +@@ -148,6 +158,12 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( if (keyword.empty()) return; @@ -137,7 +127,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro auto* frame = web_contents()->GetPrimaryMainFrame(); mojo::Remote url_loader_factory; frame->CreateNetworkServiceDefaultFactory( -@@ -155,6 +173,7 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( +@@ -155,6 +171,7 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( // Download the OpenSearch description document. If this is successful, a // new keyword will be created when done. @@ -145,7 +135,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro TemplateURLFetcherFactory::GetForProfile(profile)->ScheduleDownload( keyword, osdd_url, entry->GetFavicon().url, frame->GetLastCommittedOrigin(), url_loader_factory.get(), -@@ -196,11 +215,18 @@ void SearchEngineTabHelper::GenerateKeywordIfNecessary( +@@ -196,11 +213,18 @@ void SearchEngineTabHelper::GenerateKeywordIfNecessary( if (last_index <= 0) return; @@ -166,7 +156,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro TemplateURLService* url_service = TemplateURLServiceFactory::GetForProfile(profile); if (!url_service) -@@ -211,7 +237,6 @@ void SearchEngineTabHelper::GenerateKeywordIfNecessary( +@@ -211,7 +235,6 @@ void SearchEngineTabHelper::GenerateKeywordIfNecessary( return; } diff --git a/build/patches/Partition-Blink-memory-cache.patch b/build/patches/Partition-Blink-memory-cache.patch index b0976ea5..316ea51f 100644 --- a/build/patches/Partition-Blink-memory-cache.patch +++ b/build/patches/Partition-Blink-memory-cache.patch @@ -85,7 +85,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc b/ bool MemoryCache::Contains(const Resource* resource) const { - if (!resource || resource->Url().IsEmpty()) -+ if (!resource || resource->Url().IsEmpty() || resource->CacheIdentifier().IsEmpty()) ++ if (!resource || resource->Url().IsEmpty() || resource->CacheIdentifier().empty()) return false; const auto resource_maps_it = @@ -99,7 +99,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/memory_cache.cc b/ - Resource* MemoryCache::ResourceForURL(const KURL& resource_url, const String& cache_identifier) const { -+ if (cache_identifier.IsEmpty()) return nullptr; ++ if (cache_identifier.empty()) return nullptr; DCHECK(WTF::IsMainThread()); if (!resource_url.IsValid() || resource_url.IsNull()) return nullptr; diff --git a/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch b/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch index 21aaa06f..98d07093 100644 --- a/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch +++ b/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch @@ -14,10 +14,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/about_flags.cc | 7 ++++++ chrome/browser/flag_descriptions.cc | 5 ++++ chrome/browser/flag_descriptions.h | 3 +++ - .../flags/android/chrome_feature_list.cc | 4 ++++ + .../flags/android/chrome_feature_list.cc | 5 ++++ .../flags/android/chrome_feature_list.h | 1 + .../browser/flags/ChromeFeatureList.java | 1 + - 9 files changed, 53 insertions(+) + 9 files changed, 54 insertions(+) diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialog.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialog.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialog.java @@ -185,12 +185,13 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse &kCloseTabSuggestions, &kBookmarksExportUseSaf, &kCriticalPersistedTabData, -@@ -544,6 +545,9 @@ BASE_FEATURE(kConditionalTabStripAndroid, +@@ -543,6 +544,10 @@ BASE_FEATURE(kConditionalTabStripAndroid, "ConditionalTabStripAndroid", base::FEATURE_DISABLED_BY_DEFAULT); -+const base::Feature kCloseAllTabsModalDialog{"CloseAllTabsModalDialog", -+ base::FEATURE_ENABLED_BY_DEFAULT}; ++BASE_FEATURE(kCloseAllTabsModalDialog, ++ "CloseAllTabsModalDialog", ++ base::FEATURE_ENABLED_BY_DEFAULT); + // Used in downstream code. BASE_FEATURE(kCastDeviceFilter, diff --git a/build/patches/Remove-binary-blob-integrations.patch b/build/patches/Remove-binary-blob-integrations.patch index 38983253..ff7ed804 100644 --- a/build/patches/Remove-binary-blob-integrations.patch +++ b/build/patches/Remove-binary-blob-integrations.patch @@ -25,7 +25,7 @@ Parts of this patch were developed by csagan5, uazo and others. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- ...em_webview_bundle.AndroidManifest.expected | 5 - - chrome/android/BUILD.gn | 46 +- + chrome/android/BUILD.gn | 47 +- chrome/android/chrome_java_sources.gni | 5 - .../features/cablev2_authenticator/BUILD.gn | 2 - chrome/android/java/AndroidManifest.xml | 68 --- @@ -94,7 +94,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/signin/public/android/BUILD.gn | 3 - .../signin/AccountRenameChecker.java | 16 - components/webauthn/android/BUILD.gn | 10 - - .../webauthn/AuthenticatorImpl.java | 50 +- + .../webauthn/AuthenticatorImpl.java | 59 +- .../webauthn/Fido2ApiCallHelper.java | 23 +- .../push_messaging/push_messaging_manager.cc | 2 +- content/public/android/BUILD.gn | 4 - @@ -108,7 +108,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html third_party/android_deps/BUILD.gn | 539 +----------------- .../preconditions/javatests/BUILD.gn | 1 - .../gms/ChromiumPlayServicesAvailability.java | 10 +- - 84 files changed, 87 insertions(+), 2015 deletions(-) + 84 files changed, 88 insertions(+), 2024 deletions(-) diff --git a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected b/android_webview/expectations/system_webview_bundle.AndroidManifest.expected --- a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected @@ -205,15 +205,17 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:base_java", "//base:base_java_test_support", "//base:jni_java", -@@ -2579,7 +2568,6 @@ if (current_toolchain == default_toolchain) { +@@ -2579,9 +2568,7 @@ if (current_toolchain == default_toolchain) { # is in a DFM. android_library("base_module_java") { sources = [ - "java/src/com/google/ipc/invalidation/ticl/android2/channel/GcmRegistrationTaskService.java", "java/src/org/chromium/chrome/app/TrichromeZygotePreload.java", - "java/src/org/chromium/chrome/browser/ChromeBackgroundService.java", +- "java/src/org/chromium/chrome/browser/ChromeBackgroundService.java", "java/src/org/chromium/chrome/browser/ChromeBackupAgent.java", -@@ -2595,8 +2583,6 @@ if (current_toolchain == default_toolchain) { + "java/src/org/chromium/chrome/browser/DeferredStartupHandler.java", + "java/src/org/chromium/chrome/browser/app/bluetooth/BluetoothNotificationService.java", +@@ -2595,8 +2582,6 @@ if (current_toolchain == default_toolchain) { "java/src/org/chromium/chrome/browser/base/SplitCompatBackupAgent.java", "java/src/org/chromium/chrome/browser/base/SplitCompatContentProvider.java", "java/src/org/chromium/chrome/browser/base/SplitCompatCustomTabsService.java", @@ -222,7 +224,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "java/src/org/chromium/chrome/browser/base/SplitCompatIntentService.java", "java/src/org/chromium/chrome/browser/base/SplitCompatJobService.java", "java/src/org/chromium/chrome/browser/base/SplitCompatMinidumpUploadJobService.java", -@@ -2621,17 +2607,11 @@ if (current_toolchain == default_toolchain) { +@@ -2621,17 +2606,11 @@ if (current_toolchain == default_toolchain) { "java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java", "java/src/org/chromium/chrome/browser/prerender/ChromePrerenderService.java", "java/src/org/chromium/chrome/browser/provider/ChromeBrowserProvider.java", @@ -240,7 +242,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//base:base_java", "//base:jni_java", "//chrome/browser/download/android:file_provider_java", -@@ -2645,7 +2625,6 @@ if (current_toolchain == default_toolchain) { +@@ -2645,7 +2624,6 @@ if (current_toolchain == default_toolchain) { "//components/media_router/browser/android:cast_options_provider_java", "//components/minidump_uploader:minidump_uploader_java", "//components/module_installer/android:module_installer_java", @@ -248,7 +250,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_collection_collection_java", "//ui/android:ui_no_recycler_view_java", -@@ -2665,7 +2644,6 @@ if (current_toolchain == default_toolchain) { +@@ -2665,7 +2643,6 @@ if (current_toolchain == default_toolchain) { # Deps to pull services into base module. # TODO(crbug.com/1126301): Consider moving these to the chrome module to # reduce base dex size. @@ -3395,7 +3397,23 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } /** -@@ -238,10 +196,7 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -215,14 +173,7 @@ public final class AuthenticatorImpl implements Authenticator { + */ + public void getMatchingCredentialIds(String relyingPartyId, byte[][] credentialIds, + boolean requireThirdPartyPayment, GetMatchingCredentialIdsResponseCallback callback) { +- if (mGmsCorePackageVersion < GMSCORE_MIN_VERSION_GET_MATCHING_CRED_IDS) { +- callback.onResponse(new ArrayList()); +- return; +- } +- +- getFido2CredentialRequest().handleGetMatchingCredentialIdsRequest(mRenderFrameHost, +- relyingPartyId, credentialIds, requireThirdPartyPayment, callback, +- status -> onError(status)); ++ callback.onResponse(new ArrayList()); + } + + @Override +@@ -238,10 +189,7 @@ public final class AuthenticatorImpl implements Authenticator { // reason, this method will return true but chrome will ignore conditional requests. // Android surfaces only platform credentials on conditional requests, use IsUVPAA as a // proxy for availability. @@ -3407,7 +3425,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } @Override -@@ -251,8 +206,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -251,8 +199,6 @@ public final class AuthenticatorImpl implements Authenticator { if (!mIsOperationPending || mGetAssertionCallback == null) { return; } @@ -3416,7 +3434,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } /** -@@ -302,7 +255,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -302,7 +248,6 @@ public final class AuthenticatorImpl implements Authenticator { mIsOperationPending = false; mMakeCredentialCallback = null; mGetAssertionCallback = null; diff --git a/build/patches/Remove-contextual-search-manager.patch b/build/patches/Remove-contextual-search-manager.patch index 094803b5..a965e089 100644 --- a/build/patches/Remove-contextual-search-manager.patch +++ b/build/patches/Remove-contextual-search-manager.patch @@ -524,7 +524,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -1734,7 +1734,7 @@ public class ChromeTabbedActivity extends ChromeActivity { if (ChromeFeatureList.isEnabled(ChromeFeatureList.FEATURE_NOTIFICATION_GUIDE)) { +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/segmentation_platform/ContextualPageActionController.java b/chrome/android/java/src/org/chromium/chrome/browser/segmentation_platform/ContextualPageActionController.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/segmentation_platform/ContextualPageActionController.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/segmentation_platform/ContextualPageActionController.java +@@ -106,10 +106,6 @@ public class ContextualPageActionController { + protected void initActionProviders(Supplier shoppingServiceSupplier, + Supplier bookmarkModelSupplier) { + mActionProviders.clear(); +- if (AdaptiveToolbarFeatures.isPriceTrackingPageActionEnabled()) { +- mActionProviders.add(new PriceTrackingActionProvider( +- shoppingServiceSupplier, bookmarkModelSupplier)); +- } + if (AdaptiveToolbarFeatures.isReaderModePageActionEnabled()) { + mActionProviders.add(new ReaderModeActionProvider()); + } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabHelpers.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabHelpers.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabHelpers.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabHelpers.java @@ -1920,7 +1943,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar 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 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -92,8 +92,6 @@ import org.chromium.chrome.browser.omnibox.suggestions.OmniboxPedalDelegate; +@@ -93,8 +93,6 @@ import org.chromium.chrome.browser.omnibox.suggestions.OmniboxPedalDelegate; import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler; import org.chromium.chrome.browser.page_info.ChromePageInfo; import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations; @@ -1929,7 +1952,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory; -@@ -1994,22 +1992,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -1996,22 +1994,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve @VisibleForTesting public void showPriceDropIPH() { @@ -1952,7 +1975,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar } /** -@@ -2018,21 +2000,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -2020,21 +2002,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve * viewed in the tab switcher grid. */ private void maybeShowPriceDropIPH() { diff --git a/build/patches/Remove-signin-and-sync-integrations.patch b/build/patches/Remove-signin-and-sync-integrations.patch index d79ffa11..bc265e06 100644 --- a/build/patches/Remove-signin-and-sync-integrations.patch +++ b/build/patches/Remove-signin-and-sync-integrations.patch @@ -35,6 +35,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../java/res/xml/manage_sync_preferences.xml | 12 - .../java/res/xml/privacy_preferences.xml | 4 - .../org/chromium/chrome/browser/AppHooks.java | 34 --- + .../chrome/browser/BackupSigninProcessor.java | 54 ---- .../chrome/browser/ChromeBackupAgentImpl.java | 9 +- .../chrome/browser/ChromeBackupWatcher.java | 10 - .../chrome/browser/ChromeTabbedActivity.java | 9 - @@ -42,7 +43,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../AutofillAssistantPreferenceFragment.java | 17 +- .../bookmarks/BookmarkItemsAdapter.java | 56 +---- .../bookmarks/BookmarkPromoHeader.java | 230 +----------------- - .../ClearBrowsingDataFragment.java | 64 +---- + .../ClearBrowsingDataFragment.java | 79 +----- .../ClearBrowsingDataFragmentBasic.java | 27 +- .../contacts_picker/ChromePickerAdapter.java | 67 +---- .../browser/customtabs/CustomTabActivity.java | 6 - @@ -120,7 +121,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../ProfileOAuth2TokenServiceDelegate.java | 52 ---- .../net/HttpNegotiateAuthenticator.java | 88 +------ .../chromoting/base/OAuthTokenFetcher.java | 2 - - 101 files changed, 91 insertions(+), 2538 deletions(-) + 102 files changed, 92 insertions(+), 2606 deletions(-) diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn @@ -514,15 +515,15 @@ diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/ private void maybeUpdateSignInPromo() { // Only call #setupPromoViewFromCache() if SignInPromo is visible to avoid potentially // blocking the UI thread for several seconds if the accounts cache is not populated -@@ -173,7 +167,7 @@ public class FeedSurfaceMediator - FeedSurfaceMediator.this.switchToStream(headerIndex); - } +@@ -158,7 +152,7 @@ public class FeedSurfaceMediator + super.onDismissPromo(); + mCoordinator.updateHeaderViews(false); } - } + } */ - @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) - public static void setPrefForTest( + /** + * Internal implementation of Stream.StreamsMediator. @@ -192,7 +186,6 @@ public class FeedSurfaceMediator private final Context mContext; private final @Nullable SnapScrollHelper mSnapScrollHelper; @@ -884,6 +885,73 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java b /** * This is deprecated, and should not be called. Use FeedHooks instead. */ +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BackupSigninProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/BackupSigninProcessor.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/BackupSigninProcessor.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/BackupSigninProcessor.java +@@ -37,63 +37,9 @@ public final class BackupSigninProcessor { + * @param activity The current activity. + */ + public static void start(final Activity activity) { +- // Warning, another layer relies on SigninManager being instantiated at this moment, don't +- // move this call around. +- // TODO(crbug.com/1336196): Delete comment above once the dependency is gone. +- SigninManager signinManager = IdentityServicesProvider.get().getSigninManager( +- Profile.getLastUsedRegularProfile()); +- final String accountName = getBackupFlowSigninAccountName(); +- if (!signinManager.isSyncOptInAllowed() || TextUtils.isEmpty(accountName)) { +- setBackupFlowSigninComplete(); +- return; +- } +- +- final AccountManagerFacade accountManagerFacade = +- AccountManagerFacadeProvider.getInstance(); +- accountManagerFacade.getAccounts().then(accounts -> { +- AccountUtils.checkChildAccountStatus( +- accountManagerFacade, accounts, (isChild, unused) -> { +- if (isChild) { +- // TODO(crbug.com/1318350): Pre-AllowSyncOffForChildAccounts, the backup +- // sign-in for child accounts would happen in SigninChecker anyways. +- // Maybe it should be handled by this class once the feature launches. +- setBackupFlowSigninComplete(); +- return; +- } +- +- Account account = AccountUtils.findAccountByName(accounts, accountName); +- if (account == null) { +- setBackupFlowSigninComplete(); +- return; +- } +- +- signinAndEnableSync(account, activity); +- }); +- }); + } + + private static void signinAndEnableSync(@NonNull Account account, Activity activity) { +- IdentityServicesProvider.get() +- .getSigninManager(Profile.getLastUsedRegularProfile()) +- .signinAndEnableSync(SigninAccessPoint.POST_DEVICE_RESTORE_BACKGROUND_SIGNIN, +- account, new SignInCallback() { +- @Override +- public void onSignInComplete() { +- UnifiedConsentServiceBridge +- .setUrlKeyedAnonymizedDataCollectionEnabled( +- Profile.getLastUsedRegularProfile(), true); +- SyncService.get().setFirstSetupComplete( +- SyncFirstSetupCompleteSource.ANDROID_BACKUP_RESTORE); +- setBackupFlowSigninComplete(); +- } +- +- @Override +- public void onSignInAborted() { +- // If sign-in failed, give up and mark as complete. +- // TODO(crbug.com/1371130): Measure how often this happens. +- setBackupFlowSigninComplete(); +- } +- }); + } + + /** diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackupAgentImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackupAgentImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackupAgentImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBackupAgentImpl.java @@ -1621,14 +1689,58 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C implements BrowsingDataBridge.OnClearBrowsingDataListener, - Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener, - SignOutDialogCoordinator.Listener, SigninManager.SignInStateObserver { -+ Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener, SigninManager.SignInStateObserver { ++ Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener { private static final String CLEAR_DATA_PROGRESS_DIALOG_TAG = "clear_data_progress"; /** -@@ -674,21 +666,6 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat +@@ -228,8 +220,6 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat + + private OtherFormsOfHistoryDialogFragment mDialogAboutOtherFormsOfBrowsingHistory; + +- private SigninManager mSigninManager; +- + private ProgressDialog mProgressDialog; + private Item[] mItems; + private ClearBrowsingDataFetcher mFetcher; +@@ -539,8 +529,6 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat } + getActivity().setTitle(R.string.clear_browsing_data_title); + SettingsUtils.addPreferencesFromResource(this, R.xml.clear_browsing_data_preferences_tab); +- mSigninManager = IdentityServicesProvider.get().getSigninManager( +- Profile.getLastUsedRegularProfile()); + List options = getDialogOptions(); + mItems = new Item[options.size()]; + for (int i = 0; i < options.size(); i++) { +@@ -592,8 +580,6 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat + + // Text for sign-out option. + updateSignOutOfChromeText(); +- +- mSigninManager.addSignInStateObserver(this); } + @Override +@@ -639,7 +625,6 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat + for (Item item : mItems) { + item.destroy(); + } +- mSigninManager.removeSignInStateObserver(this); + } + + // We either show the dialog, or modify the current one to display our messages. This avoids +@@ -665,28 +650,7 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat + private void updateSignOutOfChromeText() { + ClickableSpansTextMessagePreference signOutOfChromeTextPref = + findPreference(ClearBrowsingDataFragment.PREF_SIGN_OUT_OF_CHROME_TEXT); +- if (ChromeFeatureList.isEnabled(ChromeFeatureList.ENABLE_CBD_SIGN_OUT) +- && mSigninManager.isSignOutAllowed()) { +- signOutOfChromeTextPref.setSummary(buildSignOutOfChromeText()); +- signOutOfChromeTextPref.setVisible(true); +- } else { +- signOutOfChromeTextPref.setVisible(false); +- } +- } +- - @VisibleForTesting - SpannableString buildSignOutOfChromeText() { - return SpanApplier.applySpans(getContext().getString(R.string.sign_out_of_chrome_link), @@ -1642,12 +1754,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/C - -> SignOutDialogCoordinator.show(requireContext(), - ((ModalDialogManagerHolder) getActivity()).getModalDialogManager(), this, - ActionType.CLEAR_PRIMARY_ACCOUNT, GAIAServiceType.GAIA_SERVICE_TYPE_NONE); -- } -- ++ signOutOfChromeTextPref.setVisible(false); + } + /** - * This method shows the important sites dialog. After the dialog is shown, we correctly clear. - */ -@@ -751,43 +728,4 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat +@@ -751,43 +715,4 @@ public abstract class ClearBrowsingDataFragment extends PreferenceFragmentCompat ignoredDomains, ignoredDomainReasons); } } diff --git a/build/patches/Remove-voice-recognition-integration.patch b/build/patches/Remove-voice-recognition-integration.patch index fa661a6d..e5b5a4f9 100644 --- a/build/patches/Remove-voice-recognition-integration.patch +++ b/build/patches/Remove-voice-recognition-integration.patch @@ -474,7 +474,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se 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 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -89,7 +89,6 @@ import org.chromium.chrome.browser.omnibox.OverrideUrlLoadingDelegate; +@@ -90,7 +90,6 @@ import org.chromium.chrome.browser.omnibox.OverrideUrlLoadingDelegate; import org.chromium.chrome.browser.omnibox.SearchEngineLogoUtils; import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener; import org.chromium.chrome.browser.omnibox.suggestions.OmniboxPedalDelegate; @@ -482,7 +482,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar import org.chromium.chrome.browser.page_info.ChromePageInfo; import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations; import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl; -@@ -2057,11 +2056,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -2059,11 +2058,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve return mLocationBar.getOmniboxStub(); } diff --git a/build/patches/Restore-Search-Ready-Omnibox-flag.patch b/build/patches/Restore-Search-Ready-Omnibox-flag.patch index c1e5a403..49d4e97b 100644 --- a/build/patches/Restore-Search-Ready-Omnibox-flag.patch +++ b/build/patches/Restore-Search-Ready-Omnibox-flag.patch @@ -90,9 +90,9 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse "ShareButtonInTopToolbar", base::FEATURE_DISABLED_BY_DEFAULT); -+BASE_FEATURE(kSearchReadyOmniboxFeature{ ++BASE_FEATURE(kSearchReadyOmniboxFeature, + "SearchReadyOmnibox", -+ base::FEATURE_DISABLED_BY_DEFAULT}; ++ base::FEATURE_DISABLED_BY_DEFAULT); + BASE_FEATURE(kShowScrollableMVTOnNTPAndroid, "ShowScrollableMVTOnNTPAndroid", diff --git a/build/patches/Revert-Delete-block-external-form-redirects.patch b/build/patches/Revert-Delete-block-external-form-redirects.patch index 7ba4f0d8..99924d49 100644 --- a/build/patches/Revert-Delete-block-external-form-redirects.patch +++ b/build/patches/Revert-Delete-block-external-form-redirects.patch @@ -13,9 +13,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../android/external_intents_features.cc | 7 ++++++- .../android/external_intents_features.h | 1 + .../ExternalIntentsFeatures.java | 6 ++++++ - .../ExternalNavigationHandler.java | 19 +++++++++++++++++++ - .../ExternalNavigationHandlerTest.java | 11 +++++++---- - 9 files changed, 60 insertions(+), 5 deletions(-) + .../ExternalNavigationHandler.java | 21 +++++++++++++++++++ + .../ExternalNavigationHandlerTest.java | 11 ++++++---- + 9 files changed, 62 insertions(+), 5 deletions(-) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc @@ -152,7 +152,7 @@ diff --git a/components/external_intents/android/java/src/org/chromium/component private OverrideUrlLoadingResult shouldOverrideUrlLoadingInternal( ExternalNavigationParams params, Intent targetIntent, GURL browserFallbackUrl, MutableBoolean canLaunchExternalFallbackResult) { -@@ -1637,6 +1643,19 @@ public class ExternalNavigationHandler { +@@ -1637,6 +1643,21 @@ public class ExternalNavigationHandler { return OverrideUrlLoadingResult.forNoOverride(); } @@ -160,6 +160,8 @@ diff --git a/components/external_intents/android/java/src/org/chromium/component + // protocols. + // TODO(tedchoc): Turn this on by default once we verify this change does + // not break the world. ++ int pageTransitionCore = params.getPageTransition() & PageTransition.CORE_MASK; ++ boolean isFormSubmit = pageTransitionCore == PageTransition.FORM_SUBMIT; + boolean isRedirectFromFormSubmit = isFormSubmit && params.isRedirect(); + if (isRedirectFromFormSubmit && !incomingIntentRedirect && !params.hasUserGesture() + && blockExternalFormRedirectsWithoutGesture()) { diff --git a/build/patches/Revert-removal-of-execution-context-address-space.patch b/build/patches/Revert-removal-of-execution-context-address-space.patch index 75521390..7bd24366 100644 --- a/build/patches/Revert-removal-of-execution-context-address-space.patch +++ b/build/patches/Revert-removal-of-execution-context-address-space.patch @@ -17,14 +17,10 @@ This reverts commit 11f6a3e29bee9a6590a4fd56b28e8048200c18d0. Original License: BSD-3-Clause - https://spdx.org/licenses/BSD-3-Clause.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../renderer_host/policy_container_host.cc | 2 +- - content/renderer/policy_container_util.cc | 1 + - .../public/mojom/frame/policy_container.mojom | 2 ++ - .../public/platform/web_policy_container.h | 1 + .../execution_context/execution_context.cc | 9 +++++ .../execution_context/execution_context.h | 4 +++ .../core/exported/web_shared_worker_impl.cc | 1 + - .../renderer/core/frame/policy_container.cc | 11 ++++++ + .../renderer/core/frame/policy_container.cc | 10 ++++++ .../renderer/core/frame/policy_container.h | 11 ++++++ .../renderer/core/frame/web_frame_test.cc | 34 +++++++++++++++++++ .../layout_worklet_global_scope_proxy.cc | 2 +- @@ -57,54 +53,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../audio_worklet_global_scope_test.cc | 1 + .../webaudio/audio_worklet_thread_test.cc | 1 + .../worklet/worklet_thread_test_common.cc | 2 +- - 40 files changed, 195 insertions(+), 25 deletions(-) + 36 files changed, 189 insertions(+), 24 deletions(-) -diff --git a/content/browser/renderer_host/policy_container_host.cc b/content/browser/renderer_host/policy_container_host.cc ---- a/content/browser/renderer_host/policy_container_host.cc -+++ b/content/browser/renderer_host/policy_container_host.cc -@@ -201,7 +201,7 @@ void PolicyContainerPolicies::AddContentSecurityPolicies( - blink::mojom::PolicyContainerPoliciesPtr - PolicyContainerPolicies::ToMojoPolicyContainerPolicies() const { - return blink::mojom::PolicyContainerPolicies::New( -- cross_origin_embedder_policy.value, referrer_policy, -+ cross_origin_embedder_policy.value, referrer_policy, ip_address_space, - mojo::Clone(content_security_policies), is_anonymous, sandbox_flags, - ip_address_space, can_navigate_top_without_user_gesture); - } -diff --git a/content/renderer/policy_container_util.cc b/content/renderer/policy_container_util.cc ---- a/content/renderer/policy_container_util.cc -+++ b/content/renderer/policy_container_util.cc -@@ -18,6 +18,7 @@ std::unique_ptr ToWebPolicyContainer( - blink::WebPolicyContainerPolicies{ - in->policies->cross_origin_embedder_policy, - in->policies->referrer_policy, -+ in->policies->ip_address_space, - ToWebContentSecurityPolicies( - std::move(in->policies->content_security_policies)), - in->policies->is_anonymous, -diff --git a/third_party/blink/public/mojom/frame/policy_container.mojom b/third_party/blink/public/mojom/frame/policy_container.mojom ---- a/third_party/blink/public/mojom/frame/policy_container.mojom -+++ b/third_party/blink/public/mojom/frame/policy_container.mojom -@@ -19,6 +19,8 @@ struct PolicyContainerPolicies { - network.mojom.CrossOriginEmbedderPolicyValue.kNone; - network.mojom.ReferrerPolicy referrer_policy = - network.mojom.ReferrerPolicy.kDefault; -+ network.mojom.IPAddressSpace ip_address_space = -+ network.mojom.IPAddressSpace.kUnknown; - array content_security_policies; - bool is_anonymous = false; - network.mojom.WebSandboxFlags sandbox_flags = -diff --git a/third_party/blink/public/platform/web_policy_container.h b/third_party/blink/public/platform/web_policy_container.h ---- a/third_party/blink/public/platform/web_policy_container.h -+++ b/third_party/blink/public/platform/web_policy_container.h -@@ -23,6 +23,7 @@ struct WebPolicyContainerPolicies { - network::mojom::CrossOriginEmbedderPolicyValue::kNone; - network::mojom::ReferrerPolicy referrer_policy = - network::mojom::ReferrerPolicy::kDefault; -+ network::mojom::IPAddressSpace ip_address_space; - WebVector content_security_policies; - bool is_anonymous = false; - network::mojom::WebSandboxFlags sandbox_flags = diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc --- a/third_party/blink/renderer/core/execution_context/execution_context.cc +++ b/third_party/blink/renderer/core/execution_context/execution_context.cc @@ -159,15 +109,7 @@ diff --git a/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc diff --git a/third_party/blink/renderer/core/frame/policy_container.cc b/third_party/blink/renderer/core/frame/policy_container.cc --- a/third_party/blink/renderer/core/frame/policy_container.cc +++ b/third_party/blink/renderer/core/frame/policy_container.cc -@@ -37,6 +37,7 @@ std::unique_ptr PolicyContainer::CreateFromWebPolicyContainer( - mojom::blink::PolicyContainerPolicies::New( - container->policies.cross_origin_embedder_policy, - container->policies.referrer_policy, -+ container->policies.ip_address_space, - ConvertToMojoBlink( - std::move(container->policies.content_security_policies)), - container->policies.is_anonymous, container->policies.sandbox_flags, -@@ -52,12 +53,22 @@ network::mojom::blink::ReferrerPolicy PolicyContainer::GetReferrerPolicy() +@@ -52,12 +52,22 @@ network::mojom::blink::ReferrerPolicy PolicyContainer::GetReferrerPolicy() return policies_->referrer_policy; } diff --git a/build/patches/User-agent-customization.patch b/build/patches/User-agent-customization.patch index b6f18b14..3cf8e60a 100644 --- a/build/patches/User-agent-customization.patch +++ b/build/patches/User-agent-customization.patch @@ -33,7 +33,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../strings/android_chrome_strings.grd | 35 ++++ chrome/common/pref_names.cc | 13 ++ chrome/common/pref_names.h | 8 + + .../WebsitePreferenceBridge.java | 2 +- + .../android/website_preference_bridge.cc | 10 +- .../widget/RadioButtonWithEditText.java | 11 + + .../core/browser/host_content_settings_map.cc | 8 +- .../embedder_support/user_agent_utils.cc | 15 +- .../navigation_controller_android.cc | 4 + .../navigation_controller_android.h | 1 + @@ -41,7 +44,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/web_contents/web_contents_impl.cc | 4 + .../framehost/NavigationControllerImpl.java | 3 +- content/renderer/render_thread_impl.cc | 1 - - 31 files changed, 766 insertions(+), 16 deletions(-) + 34 files changed, 776 insertions(+), 26 deletions(-) create mode 100644 chrome/android/java/res/layout/custom_useragent_preferences.xml create mode 100644 chrome/android/java/res/xml/useragent_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java @@ -329,7 +332,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting + boolean isOverrideUserAgentEnabled(boolean desktopMode); + void setOverrideUserAgentEnabled(boolean enabled, boolean desktopMode); + String getOverrideUserAgentValue(boolean desktopMode); -+ void setOverrideUserAgentValue(String timezone, boolean desktopMode); ++ void setOverrideUserAgentValue(String customTimezone, boolean desktopMode); + boolean isDesktopModeViewportMetaEnabled(); + void setDesktopModeViewportMetaEnabled(boolean enabled); } @@ -1084,6 +1087,41 @@ diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h #if !BUILDFLAG(IS_ANDROID) extern const char kLensRegionSearchEnabled[]; +diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java +--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java ++++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java +@@ -467,6 +467,6 @@ public class WebsitePreferenceBridge { + String toDomainWildcardPattern(String pattern); + String toHostOnlyPattern(String pattern); + String getCustomTimezone(BrowserContextHandle browserContextHandle); +- void setCustomTimezone(BrowserContextHandle browserContextHandle, String timezone); ++ void setCustomTimezone(BrowserContextHandle browserContextHandle, String customTimezone); + } + } +diff --git a/components/browser_ui/site_settings/android/website_preference_bridge.cc b/components/browser_ui/site_settings/android/website_preference_bridge.cc +--- a/components/browser_ui/site_settings/android/website_preference_bridge.cc ++++ b/components/browser_ui/site_settings/android/website_preference_bridge.cc +@@ -1021,15 +1021,15 @@ JNI_WebsitePreferenceBridge_ToHostOnlyPattern( + static void JNI_WebsitePreferenceBridge_SetCustomTimezone( + JNIEnv* env, + const JavaParamRef& jbrowser_context_handle, +- const JavaParamRef& timezone) { +- std::string new_timezone = ConvertJavaStringToUTF8(env, timezone); ++ const JavaParamRef& custom_timezone) { ++ std::string new_timezone = ConvertJavaStringToUTF8(env, custom_timezone); + GetHostContentSettingsMap(jbrowser_context_handle)->SetTimezoneOverrideValue(new_timezone); + } + + static base::android::ScopedJavaLocalRef JNI_WebsitePreferenceBridge_GetCustomTimezone( + JNIEnv* env, + const JavaParamRef& jbrowser_context_handle) { +- std::string timezone; +- GetHostContentSettingsMap(jbrowser_context_handle)->GetTimezoneOverrideValue(timezone); +- return ConvertUTF8ToJavaString(env, timezone); ++ std::string custom_timezone; ++ GetHostContentSettingsMap(jbrowser_context_handle)->GetTimezoneOverrideValue(custom_timezone); ++ return ConvertUTF8ToJavaString(env, custom_timezone); + } diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java --- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java +++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java @@ -1105,6 +1143,26 @@ diff --git a/components/browser_ui/widget/android/java/src/org/chromium/componen } /** +diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc +--- a/components/content_settings/core/browser/host_content_settings_map.cc ++++ b/components/content_settings/core/browser/host_content_settings_map.cc +@@ -604,12 +604,12 @@ void HostContentSettingsMap::SetClockForTesting(base::Clock* clock) { + provider->SetClockForTesting(clock); + } + +-void HostContentSettingsMap::GetTimezoneOverrideValue(std::string& timezone) const { +- GetPrefProvider()->GetPrefTimezoneOverrideValue(timezone); ++void HostContentSettingsMap::GetTimezoneOverrideValue(std::string& custom_timezone) const { ++ GetPrefProvider()->GetPrefTimezoneOverrideValue(custom_timezone); + } + +-void HostContentSettingsMap::SetTimezoneOverrideValue(const std::string& timezone) { +- GetPrefProvider()->SetPrefTimezoneOverrideValue(timezone); ++void HostContentSettingsMap::SetTimezoneOverrideValue(const std::string& custom_timezone) { ++ GetPrefProvider()->SetPrefTimezoneOverrideValue(custom_timezone); + } + + void HostContentSettingsMap::RecordExceptionMetrics() { diff --git a/components/embedder_support/user_agent_utils.cc b/components/embedder_support/user_agent_utils.cc --- a/components/embedder_support/user_agent_utils.cc +++ b/components/embedder_support/user_agent_utils.cc