From 495edaac2377c78f34df5cd840eddece4ea2e9ac Mon Sep 17 00:00:00 2001 From: Carmelo Messina Date: Mon, 12 Aug 2024 18:26:41 +0200 Subject: [PATCH] Patches for 128 (Review) (#1362) --- .../Add-a-proxy-configuration-page.patch | 22 +- .../Add-an-always-incognito-mode.patch | 37 +- .../Add-bookmark-import-export-actions.patch | 54 ++- build/patches/Add-cromite-flags-support.patch | 6 +- ...-switch-for-unsupported-clangd-flags.patch | 7 +- .../Add-menu-item-to-bookmark-all-tabs.patch | 12 +- .../Add-option-to-force-tablet-UI.patch | 38 +- ...d-setting-to-invert-tap-and-long-tap.patch | 22 +- .../Add-support-for-writing-URIs.patch | 16 +- build/patches/Add-support-to-jxl.patch | 13 +- ...PiP-if-PopupsAndRedirects-are-active.patch | 16 +- ...ow-building-without-enable_reporting.patch | 23 +- ...Ask-for-restart-on-connection-change.patch | 4 +- build/patches/Customize-selection-popup.patch | 2 +- .../patches/Disable-all-predictors-code.patch | 20 +- .../Disable-conversion-measurement-api.patch | 56 +-- .../Disable-feeds-support-by-default.patch | 27 +- ...e-privacy-issues-in-password-manager.patch | 34 +- build/patches/Disable-privacy-sandbox.patch | 10 +- ...isable-speechSynthesis-getVoices-API.patch | 4 +- .../patches/Enable-gwp-asan-on-Android.patch | 2 +- .../Enable-native-Android-autofill.patch | 2 +- .../Enable-network-isolation-features.patch | 11 +- ...le-search-engine-settings-desktop-ui.patch | 56 ++- .../Experimental-user-scripts-support.patch | 230 ++++++------ build/patches/Eyeo-Adblock-for-Cromite.patch | 37 +- build/patches/Fix-chromium-build-bugs.patch | 26 +- .../Move-navigation-bar-to-bottom.patch | 197 +++++++++- .../patches/Partition-HSTS-cache-by-NAK.patch | 6 +- .../Partition-blobs-by-top-frame-URL.patch | 10 +- ...evert-Permit-blocking-of-view-source.patch | 2 +- ...script-content-setting-secondary-url.patch | 26 +- build/patches/Show-NTP-at-startup.patch | 138 ++++++-- build/patches/Site-setting-for-images.patch | 12 +- build/patches/Timezone-customization.patch | 28 +- build/patches/Viewport-Protection-flag.patch | 2 +- ...message-for-unsupported-hardware-aes.patch | 25 +- .../eyeo-beta-118.0.5993.48-base.patch | 335 +++++++++--------- ...eta-118.0.5993.48-chrome_integration.patch | 2 +- ...ed-chromium-no-special-hosts-domains.patch | 11 +- 40 files changed, 997 insertions(+), 584 deletions(-) diff --git a/build/patches/Add-a-proxy-configuration-page.patch b/build/patches/Add-a-proxy-configuration-page.patch index 1f3e3991..712d0409 100644 --- a/build/patches/Add-a-proxy-configuration-page.patch +++ b/build/patches/Add-a-proxy-configuration-page.patch @@ -18,7 +18,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/android/java/res/values/values.xml | 3 + .../java/res/xml/privacy_preferences.xml | 4 + .../privacy/settings/PrivacySettings.java | 1 + - .../chrome_autocomplete_provider_client.cc | 2 + + .../chrome_autocomplete_provider_client.cc | 1 + chrome/browser/browser_resources.grd | 3 + .../extensions/api/proxy/proxy_api_helpers.cc | 2 +- chrome/browser/net/proxy_service_factory.cc | 24 +- @@ -30,7 +30,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/resources/proxy_config.js | 278 +++++++++++++ chrome/browser/ui/BUILD.gn | 2 + .../webui/chrome_web_ui_controller_factory.cc | 3 + - chrome/browser/ui/webui/proxy_config_ui.cc | 392 ++++++++++++++++++ + chrome/browser/ui/webui/proxy_config_ui.cc | 389 ++++++++++++++++++ chrome/browser/ui/webui/proxy_config_ui.h | 31 ++ chrome/common/webui_url_constants.cc | 2 + chrome/common/webui_url_constants.h | 2 + @@ -40,7 +40,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../proxy_config/proxy_policy_handler.cc | 2 +- net/proxy_resolution/proxy_config.cc | 51 ++- net/proxy_resolution/proxy_config.h | 3 + - 25 files changed, 977 insertions(+), 17 deletions(-) + 25 files changed, 973 insertions(+), 17 deletions(-) create mode 100644 chrome/browser/resources/proxy_config.css create mode 100644 chrome/browser/resources/proxy_config.html create mode 100644 chrome/browser/resources/proxy_config.js @@ -88,12 +88,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc -@@ -319,6 +319,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() { +@@ -319,6 +319,7 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() { builtins_to_provide.push_back(chrome::kChromeUISettingsURL16); #endif builtins_to_provide.push_back(chrome::kChromeUIVersionURL16); -+ builtins_to_provide.push_back( -+ base::ASCIIToUTF16(chrome::kChromeUIProxyConfigURL)); ++ builtins_to_provide.push_back(chrome::kChromeUIProxyConfigURL16); return builtins_to_provide; } @@ -694,7 +693,7 @@ diff --git a/chrome/browser/ui/webui/proxy_config_ui.cc b/chrome/browser/ui/webu new file mode 100644 --- /dev/null +++ b/chrome/browser/ui/webui/proxy_config_ui.cc -@@ -0,0 +1,392 @@ +@@ -0,0 +1,389 @@ +/* + This file is part of Bromite. + @@ -756,7 +755,6 @@ new file mode 100644 +// this class's public methods are expected to run on the UI thread. +class ProxyConfigMessageHandler + : public WebUIMessageHandler, -+ public base::SupportsWeakPtr, + public net::ProxyConfigService::Observer { + public: + ProxyConfigMessageHandler(const ProxyConfigMessageHandler&) = delete; @@ -794,12 +792,10 @@ new file mode 100644 + + void apply(const net::ProxyConfig& config); + -+ base::WeakPtrFactory weak_ptr_factory_; ++ base::WeakPtrFactory weak_ptr_factory_{this}; +}; + -+ProxyConfigMessageHandler::ProxyConfigMessageHandler(Profile *profile) -+ : -+ weak_ptr_factory_(this) { ++ProxyConfigMessageHandler::ProxyConfigMessageHandler(Profile *profile) { + + // used to set new configuration preferences + pref_service_ = g_browser_process->local_state(); @@ -1149,7 +1145,7 @@ diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_const inline constexpr char kChromeUINetInternalsHost[] = "net-internals"; inline constexpr char kChromeUINetInternalsURL[] = "chrome://net-internals/"; inline constexpr char kChromeUINewTabHost[] = "newtab"; -+inline constexpr char kChromeUIProxyConfigURL[] = "chrome://proxy/"; ++inline constexpr char16_t kChromeUIProxyConfigURL16[] = u"chrome://proxy/"; +inline constexpr char kChromeUIProxyConfigHost[] = "proxy"; inline constexpr char kChromeUINewTabPageHost[] = "new-tab-page"; inline constexpr char kChromeUINewTabPageThirdPartyHost[] = diff --git a/build/patches/Add-an-always-incognito-mode.patch b/build/patches/Add-an-always-incognito-mode.patch index a15fba9e..c20af682 100644 --- a/build/patches/Add-an-always-incognito-mode.patch +++ b/build/patches/Add-an-always-incognito-mode.patch @@ -47,7 +47,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../tabmodel/TabModelSelectorImpl.java | 3 + .../browser/tabmodel/TabPersistentStore.java | 9 + .../browser/toolbar/ToolbarManager.java | 3 +- - .../webapps/WebappIntentDataProvider.java | 14 ++ + .../webapps/WebappIntentDataProvider.java | 15 ++ .../browser/android/historical_tab_saver.cc | 24 ++- .../chrome_autocomplete_provider_client.cc | 9 + .../chrome_autocomplete_provider_client.h | 1 + @@ -85,7 +85,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../add-an-always-incognito-mode.inc | 3 + .../add-an-always-incognito-mode.inc | 1 + net/base/file_stream_context.cc | 2 +- - 66 files changed, 780 insertions(+), 102 deletions(-) + 66 files changed, 781 insertions(+), 102 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 @@ -493,7 +493,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust + @Override + public @CustomTabProfileType int getCustomTabMode() { -+ return AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); ++ return AlwaysIncognitoLinkInterceptor.isAlwaysIncognito() + ? CustomTabProfileType.INCOGNITO + : CustomTabProfileType.REGULAR; + } @@ -1136,17 +1136,16 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar 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 -@@ -33,6 +33,9 @@ import org.chromium.components.browser_ui.widget.TintedDrawable; +@@ -33,6 +33,8 @@ import org.chromium.components.browser_ui.widget.TintedDrawable; import org.chromium.device.mojom.ScreenOrientationLockType; import org.chromium.ui.util.ColorUtils; -+import org.chromium.base.ContextUtils; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + /** Stores info about a web app. */ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider { private final Drawable mCloseButtonIcon; -@@ -45,6 +48,8 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider +@@ -45,6 +47,8 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider private final ColorProviderImpl mColorProvider; private final ColorProviderImpl mDarkColorProvider; @@ -1155,7 +1154,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI /** Returns the toolbar color to use if a custom color is not specified by the webapp. */ public static int getDefaultToolbarColor() { return Color.WHITE; -@@ -80,6 +85,10 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider +@@ -80,6 +84,10 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider mWebappExtras = webappExtras; mWebApkExtras = webApkExtras; mActivityType = (webApkExtras != null) ? ActivityType.WEB_APK : ActivityType.WEBAPP; @@ -1166,13 +1165,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI } @Override -@@ -175,6 +184,11 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider +@@ -175,6 +183,13 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider return mWebApkExtras; } + @Override -+ public boolean isIncognito() { -+ return mIsIncognito; ++ public @CustomTabProfileType int getCustomTabMode() { ++ return mIsIncognito ++ ? CustomTabProfileType.INCOGNITO ++ : CustomTabProfileType.REGULAR; + } + @Override @@ -1849,7 +1850,7 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ } /** -@@ -195,9 +199,10 @@ public interface NativePage { +@@ -195,7 +199,8 @@ public interface NativePage { * @return Type of the native page defined in {@link NativePageType}. */ private static @NativePageType int nativePageType( @@ -1857,11 +1858,17 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/ + GURL url, NativePage candidatePage, boolean isIncognito, boolean hasPdfDownload, + boolean isAlwaysIncognito) { if (hasPdfDownload) { -- // For navigation with associated pdf download (e.g. open a pdf link), pdf page should -+ // For navigation with associated pdf download (e.g. open a pdf link, isAlwaysIncognito), pdf page should + // For navigation with associated pdf download (e.g. open a pdf link), pdf page should // be created. - // Unlike other native pages, each pdf page could be different. We need to compare - // the entire url instead of the host to determine if the pdf candidate page could +@@ -213,7 +218,7 @@ public interface NativePage { + // created after the pdf document is re-downloaded in other parts of the code. + return NativePageType.NONE; + } else { +- return chromePageType(url, candidatePage, isIncognito); ++ return chromePageType(url, candidatePage, isIncognito, isAlwaysIncognito); + } + } + @@ -225,7 +230,7 @@ public interface NativePage { * which do not have chrome or chrome-native scheme. */ diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index 5825adf8..3e25e53a 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../menu/bookmark_toolbar_menu_improved.xml | 14 + .../browser/TabbedModeTabDelegateFactory.java | 5 +- .../app/bookmarks/BookmarkActivity.java | 32 ++ - .../browser/bookmarks/BookmarkBridge.java | 285 +++++++++++++++++ + .../browser/bookmarks/BookmarkBridge.java | 285 ++++++++++++++++++ .../browser/bookmarks/BookmarkDelegate.java | 10 + .../bookmarks/BookmarkManagerCoordinator.java | 9 + .../bookmarks/BookmarkManagerMediator.java | 23 ++ @@ -26,8 +26,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../bookmarks/BookmarkToolbarViewBinder.java | 6 + .../native_page/NativePageFactory.java | 11 +- chrome/browser/BUILD.gn | 11 +- - .../bookmarks/android/bookmark_bridge.cc | 287 ++++++++++++++++++ - .../bookmarks/android/bookmark_bridge.h | 30 +- + .../bookmarks/android/bookmark_bridge.cc | 282 +++++++++++++++++ + .../bookmarks/android/bookmark_bridge.h | 29 +- .../browser/bookmarks/bookmark_html_writer.cc | 11 + .../dialogs/DownloadLocationCustomView.java | 8 +- .../DownloadLocationDialogCoordinator.java | 10 +- @@ -53,7 +53,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ui/shell_dialogs/select_file_dialog_linux.cc | 4 + ui/shell_dialogs/select_file_dialog_linux.h | 2 + ui/shell_dialogs/select_file_dialog_win.cc | 5 + - 42 files changed, 919 insertions(+), 30 deletions(-) + 42 files changed, 913 insertions(+), 30 deletions(-) create mode 100644 cromite_flags/chrome/browser/about_flags_cc/add-bookmark-import-export-actions.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-bookmark-import-export-actions.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/add-bookmark-import-export-actions.inc @@ -878,7 +878,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse // Must come after all headers that specialize FromJniType() / ToJniType(). #include "chrome/android/chrome_jni_headers/BookmarkBridge_jni.h" -@@ -77,12 +99,96 @@ using bookmarks::android::JavaBookmarkIdGetType; +@@ -77,12 +99,97 @@ using bookmarks::android::JavaBookmarkIdGetType; using content::BrowserThread; using power_bookmarks::PowerBookmarkMeta; @@ -910,14 +910,15 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + return true; + + GURL fixed_url(url_formatter::FixupURL(url.spec(), std::string())); -+ for (size_t i = 0; i < chrome::kNumberOfChromeHostURLs; ++i) { -+ if (fixed_url.DomainIs(chrome::kChromeHostURLs[i])) ++ const base::span hosts = chrome::ChromeURLHosts(); ++ for (const base::cstring_view host : hosts) { ++ if (fixed_url.DomainIs(host)) { + return true; ++ } + } + -+ for (size_t i = 0; i < chrome::kNumberOfChromeDebugURLs; ++i) { -+ if (fixed_url == chrome::kChromeDebugURLs[i]) -+ return true; ++ if (base::Contains(chrome::ChromeDebugURLs(), fixed_url)) { ++ return true; + } + + // If url has either chrome:// or about: schemes but wasn't found in the @@ -975,7 +976,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse class BookmarkTitleComparer { public: explicit BookmarkTitleComparer(BookmarkBridge* bookmark_bridge, -@@ -223,6 +329,10 @@ BookmarkBridge::~BookmarkBridge() { +@@ -223,6 +330,10 @@ BookmarkBridge::~BookmarkBridge() { partner_bookmarks_shim_observation_.Reset(); bookmark_model_observation_.Reset(); profile_observation_.Reset(); @@ -986,7 +987,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse } void BookmarkBridge::Destroy(JNIEnv* env) { -@@ -762,6 +872,183 @@ jint BookmarkBridge::GetTotalBookmarkCount( +@@ -762,6 +873,177 @@ jint BookmarkBridge::GetTotalBookmarkCount( return count; } @@ -1007,10 +1008,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + ui::SelectFileDialog::FileTypeInfo file_type_info; + + const std::vector v_accept_types = { u"text/html" }; -+ -+ // Android needs the original MIME types and an additional capture value. -+ std::pair, bool> accept_types = -+ std::make_pair(v_accept_types, /* use_media_capture */ false); ++ select_file_dialog_->SetAcceptTypes(v_accept_types); + + select_file_dialog_->SelectFile( + ui::SelectFileDialog::SELECT_OPEN_FILE, @@ -1019,8 +1017,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + &file_type_info, + 0, + base::FilePath::StringType(), -+ window, -+ &accept_types ++ window + ); +} + @@ -1068,8 +1065,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + return std::make_unique(data); +} + -+void BookmarkBridge::FileSelected(const ui::SelectedFileInfo& file, int index, -+ void* params) { ++void BookmarkBridge::FileSelected(const ui::SelectedFileInfo& file, int index) { + base::FilePath path = file.path(); + base::ThreadPool::PostTaskAndReplyWithResult( + FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()}, @@ -1164,8 +1160,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse + LOG(INFO) << result; +} + -+void BookmarkBridge::FileSelectionCanceled(void* params) { -+} ++void BookmarkBridge::FileSelectionCanceled() {} + void BookmarkBridge::SetBookmarkTitle(JNIEnv* env, jlong id, @@ -1201,20 +1196,19 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser public: // All of the injected pointers must be non-null and must outlive `this`. BookmarkBridge(Profile* profile, -@@ -81,6 +86,12 @@ class BookmarkBridge : public ProfileObserver, +@@ -81,6 +86,11 @@ class BookmarkBridge : public ProfileObserver, bool IsDoingExtensiveChanges(JNIEnv* env); + // SelectFileDialog::Listener implementation. + void FileSelected(const ui::SelectedFileInfo& file, -+ int index, -+ void* params) override; -+ void FileSelectionCanceled(void* params) override; ++ int index) override; ++ void FileSelectionCanceled() override; + jboolean IsEditBookmarksEnabled(JNIEnv* env); void LoadEmptyPartnerBookmarkShimForTesting(JNIEnv* env); -@@ -93,6 +104,15 @@ class BookmarkBridge : public ProfileObserver, +@@ -93,6 +103,15 @@ class BookmarkBridge : public ProfileObserver, jlong id, jint type); @@ -1230,7 +1224,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser void GetAllFoldersWithDepths( JNIEnv* env, const base::android::JavaParamRef& j_folders_obj, -@@ -363,6 +383,9 @@ class BookmarkBridge : public ProfileObserver, +@@ -363,6 +382,9 @@ class BookmarkBridge : public ProfileObserver, void CreateOrDestroyAccountReadingListManagerIfNeeded(); const raw_ptr profile_; // weak @@ -1240,7 +1234,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser base::android::ScopedJavaGlobalRef java_bookmark_model_; const raw_ptr bookmark_model_; // weak const raw_ptr -@@ -377,6 +400,7 @@ class BookmarkBridge : public ProfileObserver, +@@ -377,6 +399,7 @@ class BookmarkBridge : public ProfileObserver, std::unique_ptr grouped_bookmark_actions_; PrefChangeRegistrar pref_change_registrar_; @@ -1248,7 +1242,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser // Information about the Partner bookmarks (must check for IsLoaded()). // This is owned by profile. -@@ -408,6 +432,10 @@ class BookmarkBridge : public ProfileObserver, +@@ -408,6 +431,10 @@ class BookmarkBridge : public ProfileObserver, bool suppress_observer_notifications_ = false; diff --git a/build/patches/Add-cromite-flags-support.patch b/build/patches/Add-cromite-flags-support.patch index 05c7debd..e8b65e26 100644 --- a/build/patches/Add-cromite-flags-support.patch +++ b/build/patches/Add-cromite-flags-support.patch @@ -993,10 +993,10 @@ new file mode 100644 diff --git a/components/flags_ui/flags_state.cc b/components/flags_ui/flags_state.cc --- a/components/flags_ui/flags_state.cc +++ b/components/flags_ui/flags_state.cc -@@ -361,6 +361,21 @@ void FlagsState::GetSwitchesAndFeaturesFromFlags( +@@ -360,6 +360,21 @@ void FlagsState::GetSwitchesAndFeaturesFromFlags( + for (const std::string& entry_name : enabled_entries) { const auto& entry_it = name_to_switch_map.find(entry_name); - CHECK(entry_it != name_to_switch_map.end(), base::NotFatalUntil::M130); + if (entry_it == name_to_switch_map.end()) { + // check if is a cromite feature + std::string::size_type pos = entry_name.find('@'); @@ -1012,9 +1012,9 @@ diff --git a/components/flags_ui/flags_state.cc b/components/flags_ui/flags_stat + } + NOTREACHED_NORETURN(); + } + CHECK(entry_it != name_to_switch_map.end(), base::NotFatalUntil::M130); const SwitchEntry& entry = entry_it->second; - if (!entry.switch_name.empty()) @@ -677,6 +692,27 @@ void FlagsState::GetFlagFeatureEntries( data.Set("links", std::move(links)); } diff --git a/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch b/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch index 718fe2d2..7b6ebc5f 100644 --- a/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch +++ b/build/patches/Add-kill-switch-for-unsupported-clangd-flags.patch @@ -7,9 +7,9 @@ Allows build with clangd by suppressing unsupported parameters Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - build/config/compiler/BUILD.gn | 10 +++++++++- + build/config/compiler/BUILD.gn | 11 ++++++++++- build_overrides/build.gni | 3 +++ - 2 files changed, 12 insertions(+), 1 deletion(-) + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn --- a/build/config/compiler/BUILD.gn @@ -22,7 +22,7 @@ diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn cflags_cc += [ # TODO(crbug.com/328490295): Fix and re-enable for C flags. "-Wenum-compare-conditional", -@@ -1965,6 +1964,15 @@ config("default_warnings") { +@@ -1965,6 +1964,16 @@ config("default_warnings") { # TODO(crbug.com/344680447): Fix and re-enable. cflags_cc += [ "-Wno-missing-template-arg-list-after-template-kw" ] } @@ -33,6 +33,7 @@ diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn + ] + cflags_cc -= [ + "-Wno-c++11-narrowing-const-reference", ++ "-Wno-missing-template-arg-list-after-template-kw", + ] + } } 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 221d8420..c5fff237 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -220,7 +220,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc --- a/chrome/browser/bookmarks/android/bookmark_bridge.cc +++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc -@@ -178,7 +178,7 @@ class FileBookmarksExportObserver: public BookmarksExportObserver { +@@ -179,7 +179,7 @@ class FileBookmarksExportObserver: public BookmarksExportObserver { JNIEnv* env = AttachCurrentThread(); Java_BookmarkBridge_bookmarksExported(env, obj_, window_->GetJavaObject(), @@ -229,7 +229,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse result == Result::kSuccess); delete this; } -@@ -349,6 +349,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { +@@ -350,6 +350,33 @@ jboolean BookmarkBridge::AreAccountBookmarkFoldersActive(JNIEnv* env) { return bookmark_model_->account_mobile_node() != nullptr; } @@ -263,7 +263,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse base::android::ScopedJavaLocalRef BookmarkBridge::GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url) { -@@ -461,6 +488,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( +@@ -462,6 +489,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( // Vector to temporarily contain all child bookmarks at same level for sorting std::vector bookmarks = { bookmark_model_->mobile_node(), @@ -271,7 +271,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse bookmark_model_->bookmark_bar_node(), bookmark_model_->other_node(), }; -@@ -554,6 +582,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( +@@ -555,6 +583,9 @@ std::vector BookmarkBridge::GetTopLevelFolderIdsImpl( top_level_folders.push_back(other_node); } @@ -281,7 +281,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse const BookmarkNode* reading_list_node = local_or_syncable_reading_list_manager_->GetRoot(); if (IsPermanentFolderVisible(ignore_visibility, reading_list_node)) { -@@ -1266,6 +1297,17 @@ void BookmarkBridge::GetBookmarksOfType( +@@ -1261,6 +1292,17 @@ void BookmarkBridge::GetBookmarksOfType( AddBookmarkNodesToBookmarkIdList(env, j_list, results); } @@ -313,7 +313,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser base::android::ScopedJavaLocalRef GetMostRecentlyAddedUserBookmarkIdForUrl(JNIEnv* env, const GURL& url); const bookmarks::BookmarkNode* GetMostRecentlyAddedUserBookmarkIdForUrlImpl( -@@ -223,6 +227,10 @@ class BookmarkBridge : public ProfileObserver, +@@ -222,6 +226,10 @@ class BookmarkBridge : public ProfileObserver, const base::android::JavaParamRef& j_list, jint type); diff --git a/build/patches/Add-option-to-force-tablet-UI.patch b/build/patches/Add-option-to-force-tablet-UI.patch index 22995f90..668a882c 100644 --- a/build/patches/Add-option-to-force-tablet-UI.patch +++ b/build/patches/Add-option-to-force-tablet-UI.patch @@ -7,36 +7,36 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../start_surface/StartSurfaceMediator.java | 5 +++- .../layout/custom_tabs_control_container.xml | 2 +- .../java/res/layout/recent_tabs_page.xml | 2 +- - .../java/res/values-sw600dp/dimens.xml | 4 +-- - chrome/android/java/res/values/dimens.xml | 6 +++- + .../java/res/values-sw600dp/dimens.xml | 4 ++-- + chrome/android/java/res/values/dimens.xml | 6 ++++- .../chrome/browser/WarmupManager.java | 5 +++- - .../settings/AccessibilitySettings.java | 13 +++++++++ - .../ChromeAccessibilitySettingsDelegate.java | 19 +++++++++++++ - .../chrome/browser/app/ChromeActivity.java | 4 ++- - .../overlays/strip/StripLayoutHelper.java | 10 +++++-- - .../strip/StripLayoutHelperManager.java | 7 ++++- - .../tabbed_mode/TabbedRootUiCoordinator.java | 4 ++- + .../settings/AccessibilitySettings.java | 13 ++++++++++ + .../ChromeAccessibilitySettingsDelegate.java | 19 +++++++++++++++ + .../chrome/browser/app/ChromeActivity.java | 4 +++- + .../overlays/strip/StripLayoutHelper.java | 10 ++++++-- + .../strip/StripLayoutHelperManager.java | 7 +++++- + .../tabbed_mode/TabbedRootUiCoordinator.java | 4 +++- .../chrome/browser/ui/RootUiCoordinator.java | 5 +++- chrome/browser/preferences/BUILD.gn | 1 + .../preferences/ChromePreferenceKeys.java | 1 + - .../preferences/ChromeSharedPreferences.java | 8 ++++++ + .../preferences/ChromeSharedPreferences.java | 8 +++++++ .../LegacyChromePreferenceKeys.java | 1 + .../SingleTabSwitcherOnNtpMediator.java | 1 + .../omnibox/LocationBarCoordinator.java | 2 +- - .../strings/android_chrome_strings.grd | 7 +++++ - .../java/res/layout/control_container.xml | 10 +++---- + .../strings/android_chrome_strings.grd | 7 ++++++ + .../java/res/layout/control_container.xml | 10 ++++---- .../java/res/layout/toolbar_tablet.xml | 2 +- .../java/res/values-sw600dp/dimens.xml | 5 ++-- .../toolbar/java/res/values/dimens.xml | 5 ++-- .../browser/toolbar/ControlContainer.java | 2 +- - .../toolbar/top/ToolbarControlContainer.java | 28 ++++++++++++++++++- + .../toolbar/top/ToolbarControlContainer.java | 24 ++++++++++++++++++- .../browser/toolbar/top/ToolbarLayout.java | 5 +++- .../TabStripTransitionCoordinator.java | 2 +- - components/BUILD.gn | 6 ++-- + components/BUILD.gn | 6 ++--- .../res/xml/accessibility_preferences.xml | 5 ++++ - .../AccessibilitySettingsDelegate.java | 11 ++++++++ - .../chromium/ui/base/DeviceFormFactor.java | 9 ++++++ - 32 files changed, 166 insertions(+), 31 deletions(-) + .../AccessibilitySettingsDelegate.java | 11 +++++++++ + .../chromium/ui/base/DeviceFormFactor.java | 9 +++++++ + 32 files changed, 162 insertions(+), 31 deletions(-) diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java --- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java @@ -525,7 +525,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow import android.graphics.Canvas; import android.graphics.PorterDuff; import android.graphics.Rect; -@@ -119,8 +120,33 @@ public class ToolbarControlContainer extends OptimizedFrameLayout +@@ -119,8 +120,29 @@ public class ToolbarControlContainer extends OptimizedFrameLayout } @Override @@ -552,10 +552,6 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow + view = findViewById(R.id.target_view_stub); + if (view != null) + ((MarginLayoutParams)view.getLayoutParams()).topMargin = tab_strip_height; -+ -+ view = findViewById(R.id.tab_switcher_toolbar_stub); -+ if (view != null) -+ ((MarginLayoutParams)view.getLayoutParams()).topMargin = tab_strip_height; + } mToolbarContainer = (ToolbarViewResourceFrameLayout) findViewById(R.id.toolbar_container); diff --git a/build/patches/Add-setting-to-invert-tap-and-long-tap.patch b/build/patches/Add-setting-to-invert-tap-and-long-tap.patch index 506213ad..b4c0aedf 100644 --- a/build/patches/Add-setting-to-invert-tap-and-long-tap.patch +++ b/build/patches/Add-setting-to-invert-tap-and-long-tap.patch @@ -13,13 +13,13 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../ChromeAccessibilitySettingsDelegate.java | 18 ++++++++++ .../contextmenu/ChromeContextMenuItem.java | 5 ++- .../ChromeContextMenuPopulator.java | 5 +++ - .../tab/TabContextMenuItemDelegate.java | 9 +++++ + .../tab/TabContextMenuItemDelegate.java | 8 +++++ .../flags/android/chrome_feature_list.cc | 1 + .../browser/flags/ChromeFeatureList.java | 5 +++ .../strings/android_chrome_strings.grd | 9 +++++ .../res/xml/accessibility_preferences.xml | 5 +++ .../AccessibilitySettingsDelegate.java | 2 ++ - .../contextmenu/ContextMenuItemDelegate.java | 2 ++ + .../contextmenu/ContextMenuItemDelegate.java | 3 ++ ...Add-setting-to-invert-tap-and-long-tap.inc | 8 +++++ ...Add-setting-to-invert-tap-and-long-tap.inc | 3 ++ ...Add-setting-to-invert-tap-and-long-tap.inc | 1 + @@ -164,7 +164,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java -@@ -328,11 +328,20 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { +@@ -328,6 +328,14 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { mTab.loadUrl(loadUrlParams); } @@ -179,12 +179,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextM /** * Called when the {@code url} is of an image and should be opened in a new page. * - * @param url The image URL to open. - */ -+ @Override - public void onOpenImageInNewTab(GURL url, Referrer referrer) { - LoadUrlParams loadUrlParams = new LoadUrlParams(url.getSpec()); - loadUrlParams.setReferrer(referrer); diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc @@ -281,7 +275,15 @@ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/c diff --git a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/contextmenu/ContextMenuItemDelegate.java b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/contextmenu/ContextMenuItemDelegate.java --- a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/contextmenu/ContextMenuItemDelegate.java +++ b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/contextmenu/ContextMenuItemDelegate.java -@@ -148,6 +148,8 @@ public interface ContextMenuItemDelegate { +@@ -9,6 +9,7 @@ import android.net.Uri; + import androidx.annotation.IntDef; + + import org.chromium.content_public.browser.WebContents; ++import org.chromium.content_public.common.Referrer; + import org.chromium.url.GURL; + + import java.lang.annotation.Retention; +@@ -148,6 +149,8 @@ public interface ContextMenuItemDelegate { */ GURL getPageUrl(); diff --git a/build/patches/Add-support-for-writing-URIs.patch b/build/patches/Add-support-for-writing-URIs.patch index b835d94f..53157613 100644 --- a/build/patches/Add-support-for-writing-URIs.patch +++ b/build/patches/Add-support-for-writing-URIs.patch @@ -9,8 +9,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- base/android/content_uri_utils.cc | 10 ++++++ base/android/content_uri_utils.h | 4 +++ - .../org/chromium/base/ContentUriUtils.java | 33 +++++++++++++++++++ - 3 files changed, 47 insertions(+) + .../org/chromium/base/ContentUriUtils.java | 34 +++++++++++++++++++ + 3 files changed, 48 insertions(+) diff --git a/base/android/content_uri_utils.cc b/base/android/content_uri_utils.cc --- a/base/android/content_uri_utils.cc @@ -49,7 +49,15 @@ diff --git a/base/android/content_uri_utils.h b/base/android/content_uri_utils.h diff --git a/base/android/java/src/org/chromium/base/ContentUriUtils.java b/base/android/java/src/org/chromium/base/ContentUriUtils.java --- a/base/android/java/src/org/chromium/base/ContentUriUtils.java +++ b/base/android/java/src/org/chromium/base/ContentUriUtils.java -@@ -22,6 +22,9 @@ import org.jni_zero.CalledByNative; +@@ -10,6 +10,7 @@ import android.content.res.AssetFileDescriptor; + import android.database.Cursor; + import android.net.Uri; + import android.os.Build; ++import android.os.ParcelFileDescriptor; + import android.provider.DocumentsContract; + import android.provider.MediaStore; + import android.text.TextUtils; +@@ -22,6 +23,9 @@ import org.jni_zero.CalledByNative; import java.io.File; import java.io.IOException; @@ -59,7 +67,7 @@ diff --git a/base/android/java/src/org/chromium/base/ContentUriUtils.java b/base /** This class provides methods to access content URI schemes. */ public abstract class ContentUriUtils { private static final String TAG = "ContentUriUtils"; -@@ -86,6 +89,36 @@ public abstract class ContentUriUtils { +@@ -86,6 +90,36 @@ public abstract class ContentUriUtils { return -1; } diff --git a/build/patches/Add-support-to-jxl.patch b/build/patches/Add-support-to-jxl.patch index a86b5e7a..8cc1f403 100644 --- a/build/patches/Add-support-to-jxl.patch +++ b/build/patches/Add-support-to-jxl.patch @@ -36,7 +36,7 @@ Enabled by default .../platform/graphics/bitmap_image_metrics.h | 4 +- .../renderer/platform/image-decoders/BUILD.gn | 9 + .../platform/image-decoders/image_decoder.cc | 23 + - .../image-decoders/jxl/jxl_image_decoder.cc | 685 ++++++++++++++++++ + .../image-decoders/jxl/jxl_image_decoder.cc | 686 ++++++++++++++++++ .../image-decoders/jxl/jxl_image_decoder.h | 123 ++++ .../jxl/jxl_image_decoder_test.cc | 626 ++++++++++++++++ .../blink/tools/commit_stats/git-dirs.txt | 1 + @@ -58,7 +58,7 @@ Enabled by default .../libjxl/gen_headers/jxl/jxl_export.h | 11 + tools/metrics/histograms/enums.xml | 1 + .../histograms/metadata/blink/enums.xml | 2 +- - 53 files changed, 1997 insertions(+), 17 deletions(-) + 53 files changed, 1998 insertions(+), 17 deletions(-) create mode 100644 build/linux/unbundle/libjxl.gn create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Add-support-to-jxl.inc create mode 100644 cromite_flags/third_party/blink/common/features_cc/Add-support-to-jxl.inc @@ -758,7 +758,7 @@ diff --git a/third_party/blink/renderer/platform/image-decoders/jxl/jxl_image_de new file mode 100644 --- /dev/null +++ b/third_party/blink/renderer/platform/image-decoders/jxl/jxl_image_decoder.cc -@@ -0,0 +1,685 @@ +@@ -0,0 +1,686 @@ +// Copyright 2021 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. @@ -785,9 +785,10 @@ new file mode 100644 + const skcms_TransferFunction& tf) { + // Override the transfer function with a known parametric curve. + profile.has_trc = true; ++ auto list = base::span(profile.trc); + for (int c = 0; c < 3; c++) { -+ profile.trc[c].table_entries = 0; -+ profile.trc[c].parametric = tf; ++ list[c].table_entries = 0; ++ list[c].parametric = tf; + } + return profile; +} @@ -1550,7 +1551,7 @@ new file mode 100644 + bool have_color_info_ = false; + + // Preserved for JXL pixel callback. Not owned. -+ ColorProfileTransform* xform_; ++ raw_ptr xform_; + + // Fields for animation support. + diff --git a/build/patches/Allow-DocumentPiP-if-PopupsAndRedirects-are-active.patch b/build/patches/Allow-DocumentPiP-if-PopupsAndRedirects-are-active.patch index 7ee18f85..e70ee91e 100644 --- a/build/patches/Allow-DocumentPiP-if-PopupsAndRedirects-are-active.patch +++ b/build/patches/Allow-DocumentPiP-if-PopupsAndRedirects-are-active.patch @@ -6,17 +6,25 @@ Allow documentPiP api use only with content setting popup allowed License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - .../picture_in_picture_controller_impl.cc | 7 +++++++ - 1 file changed, 7 insertions(+) + .../picture_in_picture_controller_impl.cc | 8 ++++++++ + 1 file changed, 8 insertions(+) diff --git a/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc b/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc --- a/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc +++ b/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc -@@ -383,6 +383,13 @@ void PictureInPictureControllerImpl::CreateDocumentPictureInPictureWindow( +@@ -27,6 +27,7 @@ + #include "third_party/blink/renderer/core/html/media/html_media_element.h" + #include "third_party/blink/renderer/core/html/media/html_video_element.h" + #include "third_party/blink/renderer/core/layout/layout_video.h" ++#include "third_party/blink/renderer/core/loader/document_loader.h" + #include "third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_event.h" + #include "third_party/blink/renderer/platform/heap/garbage_collected.h" + #include "third_party/blink/renderer/platform/runtime_enabled_features.h" +@@ -383,6 +384,13 @@ void PictureInPictureControllerImpl::CreateDocumentPictureInPictureWindow( return; } -+ if (!opener.GetFrame()->GetContentSettings()->allow_popup) { ++ if (!opener.GetFrame()->Loader().GetDocumentLoader()->GetContentSettings()->allow_popup) { + exception_state.ThrowDOMException(DOMExceptionCode::kNotAllowedError, + "Document PiP requires user popup permission"); + resolver->Reject(exception_state); diff --git a/build/patches/Allow-building-without-enable_reporting.patch b/build/patches/Allow-building-without-enable_reporting.patch index 1222f1cb..82e6386a 100644 --- a/build/patches/Allow-building-without-enable_reporting.patch +++ b/build/patches/Allow-building-without-enable_reporting.patch @@ -15,16 +15,16 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../Allow-building-without-enable_reporting.inc | 2 ++ net/base/features.cc | 1 + net/reporting/reporting_service.cc | 6 ++++++ - services/network/network_context.h | 4 ++-- + services/network/network_context.h | 6 +++--- services/network/public/mojom/BUILD.gn | 1 - - .../network/public/mojom/network_context.mojom | 2 ++ + .../network/public/mojom/network_context.mojom | 3 +++ .../core/frame/csp/content_security_policy.cc | 3 +++ .../blink/renderer/core/frame/local_frame.cc | 3 +++ .../blink/renderer/core/frame/local_frame.h | 4 +++- .../renderer/core/frame/reporting_context.cc | 9 +++++++++ .../renderer/core/frame/reporting_context.h | 7 +++++-- .../renderer/core/frame/reporting_observer.cc | 3 +-- - 20 files changed, 58 insertions(+), 25 deletions(-) + 20 files changed, 60 insertions(+), 26 deletions(-) create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Allow-building-without-enable_reporting.inc diff --git a/chrome/browser/net/chrome_report_sender.cc b/chrome/browser/net/chrome_report_sender.cc @@ -281,7 +281,12 @@ diff --git a/net/reporting/reporting_service.cc b/net/reporting/reporting_servic diff --git a/services/network/network_context.h b/services/network/network_context.h --- a/services/network/network_context.h +++ b/services/network/network_context.h -@@ -467,10 +467,10 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext +@@ -463,14 +463,14 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext + const GURL& url, + const std::optional& reporting_source, + const net::NetworkAnonymizationKey& network_anonymization_key, +- base::Value::Dict body) override; ++ base::Value::Dict body); void QueueEnterpriseReport(const std::string& type, const std::string& group, const GURL& url, @@ -316,7 +321,15 @@ diff --git a/services/network/public/mojom/network_context.mojom b/services/netw QueueReport(string type, string group, url.mojom.Url url, -@@ -1258,6 +1259,7 @@ interface NetworkContext { +@@ -1248,6 +1249,7 @@ interface NetworkContext { + NetworkAnonymizationKey network_anonymization_key, + mojo_base.mojom.DictionaryValue body); + ++ [EnableIf=enable_reporting] + QueueEnterpriseReport(string type, + string group, + url.mojom.Url url, +@@ -1258,6 +1260,7 @@ interface NetworkContext { // Note that this queued report will never be delivered if no reporting // endpoint matching is registered for with the provided // |network_isolation_key|. diff --git a/build/patches/Ask-for-restart-on-connection-change.patch b/build/patches/Ask-for-restart-on-connection-change.patch index 3fa5fe7e..65e4ef68 100644 --- a/build/patches/Ask-for-restart-on-connection-change.patch +++ b/build/patches/Ask-for-restart-on-connection-change.patch @@ -90,7 +90,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/in +import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; +import org.chromium.chrome.browser.ui.messages.snackbar.INeedSnackbarManager; +import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; -+import org.chromium.chrome.browser.tasks.tab_management.TabSwitcherLayout; ++import org.chromium.chrome.browser.hub.HubLayout; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.tabmodel.TabModelUtils; +import org.chromium.chrome.browser.tabmodel.TabModelSelector; @@ -205,7 +205,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/in + // TabWindowManager.Observer + @Override + public void onSceneChange(Layout layout) { -+ if (!(layout instanceof TabSwitcherLayout)) { ++ if (!(layout instanceof HubLayout)) { + SnackbarManager snackbarManager = mSnackbarManagerSupplier.get(); + snackbarManager.dismissSnackbars(this); + } diff --git a/build/patches/Customize-selection-popup.patch b/build/patches/Customize-selection-popup.patch index c0a09c15..b9de21e3 100644 --- a/build/patches/Customize-selection-popup.patch +++ b/build/patches/Customize-selection-popup.patch @@ -112,7 +112,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java -@@ -345,8 +345,13 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { +@@ -344,8 +344,13 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { public void onOpenImageInNewTab(GURL url, Referrer referrer) { LoadUrlParams loadUrlParams = new LoadUrlParams(url.getSpec()); loadUrlParams.setReferrer(referrer); diff --git a/build/patches/Disable-all-predictors-code.patch b/build/patches/Disable-all-predictors-code.patch index 43f368b0..e7d4db15 100644 --- a/build/patches/Disable-all-predictors-code.patch +++ b/build/patches/Disable-all-predictors-code.patch @@ -11,6 +11,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../optimization_guide/chrome_hints_manager.cc | 1 + .../model_validator_keyed_service.cc | 6 +++++- .../optimization_guide_keyed_service.cc | 1 - + .../predictors/autocomplete_action_predictor.cc | 2 ++ .../predictors/loading_predictor_config.cc | 4 ++-- chrome/browser/predictors/predictors_features.cc | 3 +-- chrome/browser/ui/tab_helpers.cc | 1 - @@ -27,7 +28,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/optimization_guide/features.gni | 3 +-- .../core/page_content_annotations_features.cc | 5 +++++ components/search/ntp_features.cc | 3 +++ - .../Disable-all-predictors-code.inc | 4 ++++ + .../Disable-all-predictors-code.inc | 3 +++ .../Disable-all-predictors-code.inc | 1 + .../features_cc/Disable-all-predictors-code.inc | 4 ++++ .../features_cc/Disable-all-predictors-code.inc | 1 + @@ -35,7 +36,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html services/webnn/features.gni | 2 +- .../document_speculation_rules.cc | 1 + .../platform/runtime_enabled_features.json5 | 2 +- - 30 files changed, 67 insertions(+), 35 deletions(-) + 31 files changed, 68 insertions(+), 35 deletions(-) create mode 100644 cromite_flags/chrome/browser/browser_features_cc/Disable-all-predictors-code.inc create mode 100644 cromite_flags/chrome/common/chrome_features_cc/Disable-all-predictors-code.inc create mode 100644 cromite_flags/components/permissions/features_cc/Disable-all-predictors-code.inc @@ -165,6 +166,18 @@ diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service. } optimization_guide::OptimizationGuideDecision +diff --git a/chrome/browser/predictors/autocomplete_action_predictor.cc b/chrome/browser/predictors/autocomplete_action_predictor.cc +--- a/chrome/browser/predictors/autocomplete_action_predictor.cc ++++ b/chrome/browser/predictors/autocomplete_action_predictor.cc +@@ -209,6 +209,8 @@ void AutocompleteActionPredictor::StartPrerendering( + + SetIsNavigationInDomainCallback(preloading_data); + ++ if ((true)) return; // was kOmniboxTriggerForPrerender2 ++ + // Create new PreloadingAttempt and pass all the values corresponding to this + // prerendering attempt for Prerender. + content::PreloadingAttempt* preloading_attempt = diff --git a/chrome/browser/predictors/loading_predictor_config.cc b/chrome/browser/predictors/loading_predictor_config.cc --- a/chrome/browser/predictors/loading_predictor_config.cc +++ b/chrome/browser/predictors/loading_predictor_config.cc @@ -479,8 +492,7 @@ diff --git a/cromite_flags/chrome/browser/browser_features_cc/Disable-all-predic new file mode 100644 --- /dev/null +++ b/cromite_flags/chrome/browser/browser_features_cc/Disable-all-predictors-code.inc -@@ -0,0 +1,4 @@ -+SET_CROMITE_FEATURE_DISABLED(kOmniboxTriggerForPrerender2); +@@ -0,0 +1,3 @@ +SET_CROMITE_FEATURE_DISABLED(kBookmarkTriggerForPrerender2); +SET_CROMITE_FEATURE_DISABLED(kNewTabPageTriggerForPrerender2); +SET_CROMITE_FEATURE_DISABLED(kSupportSearchSuggestionForPrerender2); diff --git a/build/patches/Disable-conversion-measurement-api.patch b/build/patches/Disable-conversion-measurement-api.patch index 77022c0e..0a90fb99 100644 --- a/build/patches/Disable-conversion-measurement-api.patch +++ b/build/patches/Disable-conversion-measurement-api.patch @@ -31,17 +31,13 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../public/browser/content_browser_client.cc | 7 +- .../public/browser/navigation_controller.cc | 1 - .../Disable-conversion-measurement-api.inc | 1 + - .../Disable-conversion-measurement-api.inc | 1 + - .../Disable-conversion-measurement-api.inc | 1 + - .../Disable-conversion-measurement-api.inc | 9 + + .../Disable-conversion-measurement-api.inc | 8 + .../attribution/request_headers_internal.cc | 1 + .../network/public/cpp/attribution_utils.cc | 2 + third_party/blink/renderer/core/page/page.cc | 2 +- - .../platform/runtime_enabled_features.json5 | 4 +- + .../platform/runtime_enabled_features.json5 | 10 +- ui/events/android/motion_event_android.cc | 6 +- - 28 files changed, 74 insertions(+), 378 deletions(-) - create mode 100644 cromite_flags/content/common/features_cc/Disable-conversion-measurement-api.inc - create mode 100644 cromite_flags/content/public/common/content_features_cc/Disable-conversion-measurement-api.inc + 26 files changed, 74 insertions(+), 381 deletions(-) create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Disable-conversion-measurement-api.inc create mode 100644 cromite_flags/third_party/blink/common/features_cc/Disable-conversion-measurement-api.inc @@ -252,8 +248,8 @@ diff --git a/content/browser/attribution_reporting/attribution_report_network_se scoped_refptr headers) { + if ((true)) { + std::move(sent_callback) -+ .Run(std::move(report), -+ SendResult(SendResult::Status::kSent, headers ? headers->response_code() : 200)); ++ .Run(report, ++ SendResult::Sent(SendResult::Sent::Result::kSent, 200)); + return; + } network::SimpleURLLoader* loader = it->get(); @@ -824,18 +820,6 @@ diff --git a/content/public/browser/navigation_controller.cc b/content/public/br is_pdf(input.is_pdf), has_rel_opener(input.has_rel_opener) { #if DCHECK_IS_ON() -diff --git a/cromite_flags/content/common/features_cc/Disable-conversion-measurement-api.inc b/cromite_flags/content/common/features_cc/Disable-conversion-measurement-api.inc -new file mode 100644 ---- /dev/null -+++ b/cromite_flags/content/common/features_cc/Disable-conversion-measurement-api.inc -@@ -0,0 +1 @@ -+SET_CROMITE_FEATURE_DISABLED(kAttributionReportingCrossAppWebOverride); -diff --git a/cromite_flags/content/public/common/content_features_cc/Disable-conversion-measurement-api.inc b/cromite_flags/content/public/common/content_features_cc/Disable-conversion-measurement-api.inc -new file mode 100644 ---- /dev/null -+++ b/cromite_flags/content/public/common/content_features_cc/Disable-conversion-measurement-api.inc -@@ -0,0 +1 @@ -+SET_CROMITE_FEATURE_DISABLED(kPrivacySandboxAdsAPIsOverride); diff --git a/cromite_flags/services/network/public/cpp/features_cc/Disable-conversion-measurement-api.inc b/cromite_flags/services/network/public/cpp/features_cc/Disable-conversion-measurement-api.inc new file mode 100644 --- /dev/null @@ -846,7 +830,7 @@ diff --git a/cromite_flags/third_party/blink/common/features_cc/Disable-conversi new file mode 100644 --- /dev/null +++ b/cromite_flags/third_party/blink/common/features_cc/Disable-conversion-measurement-api.inc -@@ -0,0 +1,9 @@ +@@ -0,0 +1,8 @@ +SET_CROMITE_FEATURE_DISABLED(kAdAuctionReportingWithMacroApi); +SET_CROMITE_FEATURE_DISABLED(kAdAuctionSignals); +SET_CROMITE_FEATURE_DISABLED(kBrowsingTopics); @@ -854,7 +838,6 @@ new file mode 100644 +SET_CROMITE_FEATURE_DISABLED(kBrowsingTopicsParameters); +SET_CROMITE_FEATURE_DISABLED(kFledgeBiddingAndAuctionServer); +SET_CROMITE_FEATURE_DISABLED(kInterestGroupStorage); -+SET_CROMITE_FEATURE_DISABLED(kPrivacySandboxAdsAPIs); +SET_CROMITE_FEATURE_DISABLED(kPrivateAggregationApi); diff --git a/services/network/attribution/request_headers_internal.cc b/services/network/attribution/request_headers_internal.cc --- a/services/network/attribution/request_headers_internal.cc @@ -901,6 +884,33 @@ diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/re diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 +@@ -279,7 +279,7 @@ + { + // Interest Group JS API/runtimeflag. + name: "AdInterestGroupAPI", +- status: "stable", ++ status: "experimental", + origin_trial_feature_name: "AdInterestGroupAPI", + implied_by: ["Fledge", "Parakeet"], + public: true, +@@ -368,15 +368,15 @@ + }, + { + name: "AttributionReporting", +- status: "stable", ++ status: "experimental", + base_feature: "none", + public: true, + }, + { + name: "AttributionReportingCrossAppWeb", ++ status: "experimental", + base_feature: "none", + public: true, +- status: "stable", + }, + { + // This only exists so we can use RuntimeEnabled in the IDL file @@ -4097,15 +4097,15 @@ }, { diff --git a/build/patches/Disable-feeds-support-by-default.patch b/build/patches/Disable-feeds-support-by-default.patch index c3abf38f..03d4d1bd 100644 --- a/build/patches/Disable-feeds-support-by-default.patch +++ b/build/patches/Disable-feeds-support-by-default.patch @@ -6,10 +6,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- chrome/browser/BUILD.gn | 9 +++++++++ chrome/browser/feed/android/web_feed_bridge.cc | 18 ++++++++++++++++++ - chrome/browser/prefs/browser_prefs.cc | 4 ++-- + chrome/browser/prefs/browser_prefs.cc | 10 +++++----- .../feed/core/shared_prefs/pref_names.cc | 2 +- components/feed/feed_feature_list.cc | 3 +++ - 5 files changed, 33 insertions(+), 3 deletions(-) + 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn @@ -109,6 +109,20 @@ diff --git a/chrome/browser/feed/android/web_feed_bridge.cc b/chrome/browser/fee diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc +@@ -251,11 +251,11 @@ + #endif + + #include "components/feed/buildflags.h" +-#if BUILDFLAG(ENABLE_FEED_V2) ++//#if BUILDFLAG(ENABLE_FEED_V2) + #include "components/feed/core/common/pref_names.h" // nogncheck + #include "components/feed/core/shared_prefs/pref_names.h" // nogncheck + #include "components/feed/core/v2/ios_shared_prefs.h" // nogncheck +-#endif ++//#endif + + #if BUILDFLAG(IS_ANDROID) + #include "chrome/browser/accessibility/accessibility_prefs/android/accessibility_prefs_controller.h" @@ -1898,10 +1898,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, ChromeRLZTrackerDelegate::RegisterProfilePrefs(registry); #endif @@ -122,6 +136,15 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse #if BUILDFLAG(IS_ANDROID) cdm::MediaDrmStorageImpl::RegisterProfilePrefs(registry); +@@ -2688,7 +2688,7 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs, + syncer::SyncPrefs::MaybeMigrateAutofillToPerAccountPref(profile_prefs); + #endif // !BUILDFLAG(IS_ANDROID) + +-#if BUILDFLAG(IS_ANDROID) ++#if BUILDFLAG(IS_ANDROID) && BUILDFLAG(ENABLE_FEED_V2) + // Added 06/2024 + feed::prefs::MigrateObsoleteFeedExperimentPref_Jun_2024(profile_prefs); + #endif // BUILDFLAG(IS_ANDROID) diff --git a/components/feed/core/shared_prefs/pref_names.cc b/components/feed/core/shared_prefs/pref_names.cc --- a/components/feed/core/shared_prefs/pref_names.cc +++ b/components/feed/core/shared_prefs/pref_names.cc diff --git a/build/patches/Disable-privacy-issues-in-password-manager.patch b/build/patches/Disable-privacy-issues-in-password-manager.patch index f754d882..551d4b8c 100644 --- a/build/patches/Disable-privacy-issues-in-password-manager.patch +++ b/build/patches/Disable-privacy-issues-in-password-manager.patch @@ -9,13 +9,15 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../password_store_android_backend_bridge_helper_impl.cc | 1 + .../android/password_store_android_local_backend.cc | 2 +- .../generated_password_leak_detection_pref.cc | 3 +-- + .../password_receiver_service_factory.cc | 2 +- + .../password_manager/password_sender_service_factory.cc | 2 +- .../affiliations/core/browser/affiliation_backend.cc | 1 + .../core/browser/affiliation_service_impl.cc | 4 ++++ components/affiliations/core/browser/facet_manager.cc | 4 ++++ .../leak_detection/leak_detection_check_factory_impl.cc | 5 +++++ .../browser/leak_detection/leak_detection_check_impl.cc | 3 +-- - .../Disable-privacy-issues-in-password-manager.inc | 3 +++ - 10 files changed, 21 insertions(+), 14 deletions(-) + .../Disable-privacy-issues-in-password-manager.inc | 1 + + 12 files changed, 21 insertions(+), 16 deletions(-) create mode 100644 cromite_flags/components/password_manager/core/browser/features/password_features_cc/Disable-privacy-issues-in-password-manager.inc diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml @@ -73,6 +75,30 @@ diff --git a/chrome/browser/password_manager/generated_password_leak_detection_p } // Returns whether the effective value of the Safe Browsing preferences for +diff --git a/chrome/browser/password_manager/password_receiver_service_factory.cc b/chrome/browser/password_manager/password_receiver_service_factory.cc +--- a/chrome/browser/password_manager/password_receiver_service_factory.cc ++++ b/chrome/browser/password_manager/password_receiver_service_factory.cc +@@ -55,7 +55,7 @@ PasswordReceiverServiceFactory::BuildServiceInstanceForBrowserContext( + content::BrowserContext* context) const { + // Password receiving on Android is handled in GMSCore, and hence no service + // should be instantiated. +-#if BUILDFLAG(IS_ANDROID) ++#if true + return nullptr; + #else + +diff --git a/chrome/browser/password_manager/password_sender_service_factory.cc b/chrome/browser/password_manager/password_sender_service_factory.cc +--- a/chrome/browser/password_manager/password_sender_service_factory.cc ++++ b/chrome/browser/password_manager/password_sender_service_factory.cc +@@ -50,7 +50,7 @@ PasswordSenderServiceFactory::BuildServiceInstanceForBrowserContext( + content::BrowserContext* context) const { + // Password sending on Android is handled in GMSCore, and hence no service + // should be instantiated. +-#if BUILDFLAG(IS_ANDROID) ++#if true + return nullptr; + #else + diff --git a/components/affiliations/core/browser/affiliation_backend.cc b/components/affiliations/core/browser/affiliation_backend.cc --- a/components/affiliations/core/browser/affiliation_backend.cc +++ b/components/affiliations/core/browser/affiliation_backend.cc @@ -144,8 +170,6 @@ diff --git a/cromite_flags/components/password_manager/core/browser/features/pas new file mode 100644 --- /dev/null +++ b/cromite_flags/components/password_manager/core/browser/features/password_features_cc/Disable-privacy-issues-in-password-manager.inc -@@ -0,0 +1,3 @@ +@@ -0,0 +1 @@ +SET_CROMITE_FEATURE_ENABLED(kFillOnAccountSelect); -+SET_CROMITE_FEATURE_DISABLED(kPasswordManagerEnableReceiverService); -+SET_CROMITE_FEATURE_DISABLED(kPasswordManagerEnableSenderService); -- diff --git a/build/patches/Disable-privacy-sandbox.patch b/build/patches/Disable-privacy-sandbox.patch index 8f5b11fb..e1588cbb 100644 --- a/build/patches/Disable-privacy-sandbox.patch +++ b/build/patches/Disable-privacy-sandbox.patch @@ -25,10 +25,12 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../tracking_protection_prefs.cc | 4 ++-- .../identity_manager/account_capabilities.cc | 2 +- .../features_cc/Disable-privacy-sandbox.inc | 1 + + .../Disable-privacy-sandbox.inc | 1 + .../features_cc/Disable-privacy-sandbox.inc | 4 ++++ third_party/blink/common/features.cc | 1 + - 17 files changed, 40 insertions(+), 28 deletions(-) + 18 files changed, 41 insertions(+), 28 deletions(-) create mode 100644 cromite_flags/content/common/features_cc/Disable-privacy-sandbox.inc + create mode 100644 cromite_flags/content/public/common/content_features_cc/Disable-privacy-sandbox.inc create mode 100644 cromite_flags/third_party/blink/common/features_cc/Disable-privacy-sandbox.inc diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc @@ -305,6 +307,12 @@ new file mode 100644 +++ b/cromite_flags/content/common/features_cc/Disable-privacy-sandbox.inc @@ -0,0 +1 @@ +SET_CROMITE_FEATURE_DISABLED(kPrivacySandboxAdsAPIsM1Override); +diff --git a/cromite_flags/content/public/common/content_features_cc/Disable-privacy-sandbox.inc b/cromite_flags/content/public/common/content_features_cc/Disable-privacy-sandbox.inc +new file mode 100644 +--- /dev/null ++++ b/cromite_flags/content/public/common/content_features_cc/Disable-privacy-sandbox.inc +@@ -0,0 +1 @@ ++SET_CROMITE_FEATURE_DISABLED(kPrivacySandboxAdsAPIsOverride); diff --git a/cromite_flags/third_party/blink/common/features_cc/Disable-privacy-sandbox.inc b/cromite_flags/third_party/blink/common/features_cc/Disable-privacy-sandbox.inc new file mode 100644 --- /dev/null diff --git a/build/patches/Disable-speechSynthesis-getVoices-API.patch b/build/patches/Disable-speechSynthesis-getVoices-API.patch index 2a34c870..ecdf28a4 100644 --- a/build/patches/Disable-speechSynthesis-getVoices-API.patch +++ b/build/patches/Disable-speechSynthesis-getVoices-API.patch @@ -43,7 +43,7 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc b/components/content_settings/renderer/content_settings_agent_impl.cc --- a/components/content_settings/renderer/content_settings_agent_impl.cc +++ b/components/content_settings/renderer/content_settings_agent_impl.cc -@@ -484,6 +484,14 @@ bool ContentSettingsAgentImpl::IsAllowlistedForContentSettingsCromite() const { +@@ -483,6 +483,14 @@ bool ContentSettingsAgentImpl::IsAllowlistedForContentSettingsCromite() const { return false; } @@ -58,7 +58,7 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc bool ContentSettingsAgentImpl::UpdateOverrides() { // Evaluate the content setting rules ContentSetting setting = CONTENT_SETTING_ALLOW; -@@ -494,7 +502,6 @@ bool ContentSettingsAgentImpl::UpdateOverrides() { +@@ -493,7 +501,6 @@ bool ContentSettingsAgentImpl::UpdateOverrides() { } return UpdateTimeZoneOverride( setting, content_setting_rules_->timezone_override_value); diff --git a/build/patches/Enable-gwp-asan-on-Android.patch b/build/patches/Enable-gwp-asan-on-Android.patch index 80005288..d0b6e592 100644 --- a/build/patches/Enable-gwp-asan-on-Android.patch +++ b/build/patches/Enable-gwp-asan-on-Android.patch @@ -122,7 +122,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tracing/setting diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc --- a/chrome/app/chrome_main_delegate.cc +++ b/chrome/app/chrome_main_delegate.cc -@@ -2017,7 +2017,7 @@ void ChromeMainDelegate::InitializeMemorySystem() { +@@ -2016,7 +2016,7 @@ void ChromeMainDelegate::InitializeMemorySystem() { const std::string process_type = command_line->GetSwitchValueASCII(switches::kProcessType); const bool is_browser_process = process_type.empty(); diff --git a/build/patches/Enable-native-Android-autofill.patch b/build/patches/Enable-native-Android-autofill.patch index 4041d642..f3bdad53 100644 --- a/build/patches/Enable-native-Android-autofill.patch +++ b/build/patches/Enable-native-Android-autofill.patch @@ -354,7 +354,7 @@ diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browse */ - @CalledByNative public static int getAndroidAutofillFrameworkAvailability(PrefService prefs) { -+ if ((true)) return true; ++ if ((true)) return AndroidAutofillAvailabilityStatus.AVAILABLE; if (sAndroidAutofillFrameworkAvailabilityForTesting != null) { return sAndroidAutofillFrameworkAvailabilityForTesting; } diff --git a/build/patches/Enable-network-isolation-features.patch b/build/patches/Enable-network-isolation-features.patch index c66b6fe3..4b9d384e 100644 --- a/build/patches/Enable-network-isolation-features.patch +++ b/build/patches/Enable-network-isolation-features.patch @@ -9,9 +9,9 @@ PartitionNelAndReportingByNetworkIsolationKey License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../base/features_cc/Enable-network-isolation-features.inc | 6 ++++++ - .../cpp/features_cc/Enable-network-isolation-features.inc | 1 + - 2 files changed, 7 insertions(+) + .../net/base/features_cc/Enable-network-isolation-features.inc | 3 +++ + .../cpp/features_cc/Enable-network-isolation-features.inc | 1 + + 2 files changed, 4 insertions(+) create mode 100644 cromite_flags/net/base/features_cc/Enable-network-isolation-features.inc create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Enable-network-isolation-features.inc @@ -19,13 +19,10 @@ diff --git a/cromite_flags/net/base/features_cc/Enable-network-isolation-feature new file mode 100644 --- /dev/null +++ b/cromite_flags/net/base/features_cc/Enable-network-isolation-features.inc -@@ -0,0 +1,6 @@ +@@ -0,0 +1,3 @@ +SET_CROMITE_FEATURE_ENABLED(kSplitCacheByNetworkIsolationKey); +SET_CROMITE_FEATURE_ENABLED(kSplitCodeCacheByNetworkIsolationKey); +SET_CROMITE_FEATURE_ENABLED(kPartitionConnectionsByNetworkIsolationKey); -+ -+SET_CROMITE_FEATURE_DISABLED(kEnableCrossSiteFlagNetworkIsolationKey); -+SET_CROMITE_FEATURE_DISABLED(kEnableFrameSiteSharedOpaqueNetworkIsolationKey); diff --git a/cromite_flags/services/network/public/cpp/features_cc/Enable-network-isolation-features.inc b/cromite_flags/services/network/public/cpp/features_cc/Enable-network-isolation-features.inc new file mode 100644 --- /dev/null diff --git a/build/patches/Enable-search-engine-settings-desktop-ui.patch b/build/patches/Enable-search-engine-settings-desktop-ui.patch index 9d0e34ef..f7117e20 100644 --- a/build/patches/Enable-search-engine-settings-desktop-ui.patch +++ b/build/patches/Enable-search-engine-settings-desktop-ui.patch @@ -44,8 +44,8 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../settings_localized_strings_provider.cc | 8 + ...ings_localized_strings_provider_android.cc | 198 +++++++++++++ ...tings_localized_strings_provider_android.h | 19 ++ - .../ui/webui/settings/settings_ui_android.cc | 134 +++++++++ - .../ui/webui/settings/settings_ui_android.h | 119 ++++++++ + .../ui/webui/settings/settings_ui_android.cc | 126 +++++++++ + .../ui/webui/settings/settings_ui_android.h | 103 +++++++ chrome/chrome_paks.gni | 11 + .../browser_ui/settings/SettingsLauncher.java | 2 + .../search_engine_desktop_ui.grdp | 6 + @@ -56,8 +56,9 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html content/browser/webui/web_ui_impl.cc | 14 +- content/browser/webui/web_ui_impl.h | 3 + content/public/browser/web_ui.h | 1 + + third_party/polymer/v3_0/BUILD.gn | 6 + ui/base/template_expressions.cc | 21 +- - ui/webui/BUILD.gn | 8 + + ui/webui/BUILD.gn | 7 + ui/webui/resources/BUILD.gn | 10 + .../customize_color_scheme_mode/BUILD.gn | 2 +- .../cr_components/help_bubble/BUILD.gn | 2 +- @@ -69,7 +70,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ui/webui/resources/include_polymer.gni | 2 +- ui/webui/resources/js/BUILD.gn | 2 +- ui/webui/resources/js/load_time_data.ts | 17 +- - 62 files changed, 1105 insertions(+), 61 deletions(-) + 63 files changed, 1086 insertions(+), 61 deletions(-) create mode 100644 chrome/app/settings_strings_android.grdp create mode 100644 chrome/browser/search_engines/android/java/res/layout/search_engine_layout.xml create mode 100644 chrome/browser/ui/webui/settings/settings_localized_strings_provider_android.cc @@ -1574,7 +1575,7 @@ diff --git a/chrome/browser/ui/webui/settings/settings_ui_android.cc b/chrome/br new file mode 100644 --- /dev/null +++ b/chrome/browser/ui/webui/settings/settings_ui_android.cc -@@ -0,0 +1,134 @@ +@@ -0,0 +1,126 @@ +// Copyright 2015 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. @@ -1620,7 +1621,6 @@ new file mode 100644 +#include "chrome/browser/ui/webui/webui_util.h" +#include "chrome/browser/ui/webui/theme_handler.h" +#include "chrome/browser/ui/webui/cr_components/customize_color_scheme_mode/customize_color_scheme_mode_handler.h" -+#include "chrome/browser/ui/webui/customize_themes/chrome_customize_themes_handler.h" +#include "chrome/browser/ui/webui/settings/settings_localized_strings_provider_android.h" + +#if !BUILDFLAG(OPTIMIZE_WEBUI) @@ -1678,13 +1678,6 @@ new file mode 100644 + web_ui()->AddMessageHandler(std::move(handler)); +} + -+void SettingsUI::CreateCustomizeThemesHandler( -+ mojo::PendingRemote -+ pending_client, -+ mojo::PendingReceiver -+ pending_handler) { -+} -+ +void SettingsUI::CreateThemeColorPickerHandler( + mojo::PendingReceiver + handler, @@ -1713,7 +1706,7 @@ diff --git a/chrome/browser/ui/webui/settings/settings_ui_android.h b/chrome/bro new file mode 100644 --- /dev/null +++ b/chrome/browser/ui/webui/settings/settings_ui_android.h -@@ -0,0 +1,119 @@ +@@ -0,0 +1,103 @@ +#ifndef CHROME_BROWSER_UI_WEBUI_SETTINGS_SETTINGS_UI_ANDROID_H_ +#define CHROME_BROWSER_UI_WEBUI_SETTINGS_SETTINGS_UI_ANDROID_H_ + @@ -1730,7 +1723,6 @@ new file mode 100644 +#include "ui/webui/resources/cr_components/help_bubble/help_bubble.mojom.h" + +#if !BUILDFLAG(IS_CHROMEOS_ASH) -+#include "ui/webui/resources/cr_components/customize_themes/customize_themes.mojom.h" +#include "ui/webui/resources/cr_components/theme_color_picker/theme_color_picker.mojom.h" +#endif // !BUILDFLAG(IS_CHROMEOS_ASH) + @@ -1759,7 +1751,6 @@ new file mode 100644 + // chrome://settings/manageProfile which only exists on !OS_CHROMEOS + // requires mojo bindings. + , -+ public customize_themes::mojom::CustomizeThemesHandlerFactory, + public theme_color_picker::mojom::ThemeColorPickerHandlerFactory +#endif // BUILDFLAG(IS_CHROMEOS_ASH) +{ @@ -1775,13 +1766,6 @@ new file mode 100644 + +#if !BUILDFLAG(IS_CHROMEOS_ASH) + // Instantiates the implementor of the -+ // customize_themes::mojom::CustomizeThemesHandlerFactory mojo interface -+ // passing the pending receiver that will be internally bound. -+ void BindInterface(mojo::PendingReceiver< -+ customize_themes::mojom::CustomizeThemesHandlerFactory> -+ pending_receiver); -+ -+ // Instantiates the implementor of the + // theme_color_picker::mojom::ThemeColorPickerHandlerFactory mojo interface + // passing the pending receiver that will be internally bound. + void BindInterface(mojo::PendingReceiver< @@ -1805,13 +1789,6 @@ new file mode 100644 + std::unique_ptr handler); + +#if !BUILDFLAG(IS_CHROMEOS_ASH) -+ // customize_themes::mojom::CustomizeThemesHandlerFactory: -+ void CreateCustomizeThemesHandler( -+ mojo::PendingRemote -+ pending_client, -+ mojo::PendingReceiver -+ pending_handler) override; -+ + // theme_color_picker::mojom::ThemeColorPickerHandlerFactory: + void CreateThemeColorPickerHandler( + mojo::PendingReceiver @@ -2023,6 +2000,22 @@ diff --git a/content/public/browser/web_ui.h b/content/public/browser/web_ui.h // Used by WebUIMessageHandlers. If the given message is already registered, // the call has no effect. +diff --git a/third_party/polymer/v3_0/BUILD.gn b/third_party/polymer/v3_0/BUILD.gn +--- a/third_party/polymer/v3_0/BUILD.gn ++++ b/third_party/polymer/v3_0/BUILD.gn +@@ -36,6 +36,12 @@ js_files = [ + "paper-spinner/paper-spinner-styles.js", + ] + ++if (is_android) { ++ js_files += [ ++ "iron-collapse/iron-collapse.js", ++ ] ++} ++ + # Also needed on LaCros for Print Preview. Remove once CrOS Print Preview + # launches. + if (is_chromeos) { diff --git a/ui/base/template_expressions.cc b/ui/base/template_expressions.cc --- a/ui/base/template_expressions.cc +++ b/ui/base/template_expressions.cc @@ -2066,14 +2059,13 @@ diff --git a/ui/base/template_expressions.cc b/ui/base/template_expressions.cc diff --git a/ui/webui/BUILD.gn b/ui/webui/BUILD.gn --- a/ui/webui/BUILD.gn +++ b/ui/webui/BUILD.gn -@@ -28,6 +28,14 @@ static_library("webui") { +@@ -28,6 +28,13 @@ static_library("webui") { "//ui/webui/resources/js/metrics_reporter:mojo_bindings", ] + if (is_android) { + public_deps += [ + "//ui/webui/resources/cr_components/customize_color_scheme_mode:mojom", -+ "//ui/webui/resources/cr_components/customize_themes:mojom", + "//ui/webui/resources/cr_components/theme_color_picker:mojom", + ] + } diff --git a/build/patches/Experimental-user-scripts-support.patch b/build/patches/Experimental-user-scripts-support.patch index 326d5446..5033f2d5 100644 --- a/build/patches/Experimental-user-scripts-support.patch +++ b/build/patches/Experimental-user-scripts-support.patch @@ -74,7 +74,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../user-script-ui/user-scripts-ui.js | 9 + .../browser/ui/user_scripts_ui.cc | 146 ++++ .../user_scripts/browser/ui/user_scripts_ui.h | 37 + - .../browser/user_script_loader.cc | 716 ++++++++++++++++ + .../browser/user_script_loader.cc | 708 +++++++++++++++ .../user_scripts/browser/user_script_loader.h | 168 ++++ .../browser/user_script_pref_info.cc | 34 + .../browser/user_script_pref_info.h | 72 ++ @@ -135,7 +135,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../Experimental-user-scripts-support.inc | 13 + ipc/ipc_message_start.h | 1 + tools/gritsettings/resource_ids.spec | 6 + - 108 files changed, 9492 insertions(+), 2 deletions(-) + 108 files changed, 9484 insertions(+), 2 deletions(-) create mode 100644 components/user_scripts/README.md create mode 100755 components/user_scripts/android/BUILD.gn create mode 100644 components/user_scripts/android/java/res/layout/accept_script_item.xml @@ -2758,7 +2758,7 @@ new file mode 100644 + base::Value::Dict scriptData; + for (const std::unique_ptr& js_file : + script->js_scripts()) { -+ base::StringPiece contents = js_file->GetContent(); ++ std::string_view contents = js_file->GetContent(); + scriptData.Set("content", contents.data()); + } + response.Append(std::move(scriptData)); @@ -2831,7 +2831,7 @@ diff --git a/components/user_scripts/browser/user_script_loader.cc b/components/ new file mode 100755 --- /dev/null +++ b/components/user_scripts/browser/user_script_loader.cc -@@ -0,0 +1,716 @@ +@@ -0,0 +1,708 @@ +/* + This file is part of Bromite. + @@ -2903,33 +2903,33 @@ new file mode 100755 + +namespace { + -+static const base::StringPiece kUserScriptBegin("// ==UserScript=="); -+static const base::StringPiece kUserScriptEnd("// ==/UserScript=="); -+static const base::StringPiece kNamespaceDeclaration("// @namespace"); -+static const base::StringPiece kNameDeclaration("// @name"); -+static const base::StringPiece kVersionDeclaration("// @version"); -+static const base::StringPiece kDescriptionDeclaration("// @description"); -+static const base::StringPiece kIncludeDeclaration("// @include"); -+static const base::StringPiece kExcludeDeclaration("// @exclude"); -+static const base::StringPiece kMatchDeclaration("// @match"); -+static const base::StringPiece kExcludeMatchDeclaration("// @exclude_match"); -+static const base::StringPiece kRunAtDeclaration("// @run-at"); -+static const base::StringPiece kRunAtDocumentStartValue("document-start"); -+static const base::StringPiece kRunAtDocumentEndValue("document-end"); -+static const base::StringPiece kRunAtDocumentIdleValue("document-idle"); -+static const base::StringPiece kUrlSourceDeclaration("// @url"); -+static const base::StringPiece kUrlHomePageDeclaration("// @homepage"); ++static const std::string_view kUserScriptBegin("// ==UserScript=="); ++static const std::string_view kUserScriptEnd("// ==/UserScript=="); ++static const std::string_view kNamespaceDeclaration("// @namespace"); ++static const std::string_view kNameDeclaration("// @name"); ++static const std::string_view kVersionDeclaration("// @version"); ++static const std::string_view kDescriptionDeclaration("// @description"); ++static const std::string_view kIncludeDeclaration("// @include"); ++static const std::string_view kExcludeDeclaration("// @exclude"); ++static const std::string_view kMatchDeclaration("// @match"); ++static const std::string_view kExcludeMatchDeclaration("// @exclude_match"); ++static const std::string_view kRunAtDeclaration("// @run-at"); ++static const std::string_view kRunAtDocumentStartValue("document-start"); ++static const std::string_view kRunAtDocumentEndValue("document-end"); ++static const std::string_view kRunAtDocumentIdleValue("document-idle"); ++static const std::string_view kUrlSourceDeclaration("// @url"); ++static const std::string_view kUrlHomePageDeclaration("// @homepage"); + +// internal use -+static const base::StringPiece kParserError("// @error"); -+static const base::StringPiece kForceDisabled("// @disabled"); ++static const std::string_view kParserError("// @error"); ++static const std::string_view kForceDisabled("// @disabled"); + +// Helper function to parse greasesmonkey headers -+bool GetDeclarationValue(const base::StringPiece& line, -+ const base::StringPiece& prefix, ++bool GetDeclarationValue(const std::string_view& line, ++ const std::string_view& prefix, + std::string* value) { -+ base::StringPiece::size_type index = line.find(prefix); -+ if (index == base::StringPiece::npos) ++ std::string_view::size_type index = line.find(prefix); ++ if (index == std::string_view::npos) + return false; + + std::string temp(line.data() + index + prefix.length(), @@ -2945,12 +2945,12 @@ new file mode 100755 +} // namespace + +// static -+bool UserScriptLoader::ParseMetadataHeader(const base::StringPiece& script_text, ++bool UserScriptLoader::ParseMetadataHeader(const std::string_view& script_text, + std::unique_ptr& script, + bool *found_metadata, + std::string& error_message) { + // http://wiki.greasespot.net/Metadata_block -+ base::StringPiece line; ++ std::string_view line; + size_t line_start = 0; + size_t line_end = line_start; + *found_metadata = false; @@ -2962,7 +2962,7 @@ new file mode 100755 + if (line_end == std::string::npos) + line_end = script_text.length() - 1; + -+ line = base::StringPiece(script_text.data() + line_start, ++ line = std::string_view(script_text.data() + line_start, + line_end - line_start); + + if (!*found_metadata) { @@ -3101,7 +3101,7 @@ new file mode 100755 + // create SHA256 of file + char raw[crypto::kSHA256Length] = {0}; + crypto::SHA256HashString(content, raw, crypto::kSHA256Length); -+ std::string key = base::Base64Encode(base::StringPiece(raw, crypto::kSHA256Length)); ++ std::string key = base::Base64Encode(std::string_view(raw, crypto::kSHA256Length)); + file->set_key(key); + + file->set_url(GURL(base::StrCat({"https://userscripts/file/", key, ".js"}))); @@ -3238,12 +3238,12 @@ new file mode 100755 + // allocating a new string. + for (const std::unique_ptr& js_file : + script->js_scripts()) { -+ base::StringPiece contents = js_file->GetContent(); ++ std::string_view contents = js_file->GetContent(); + pickle.WriteData(contents.data(), contents.length()); + } + for (const std::unique_ptr& css_file : + script->css_scripts()) { -+ base::StringPiece contents = css_file->GetContent(); ++ std::string_view contents = css_file->GetContent(); + pickle.WriteData(contents.data(), contents.length()); + } + } @@ -3411,17 +3411,11 @@ new file mode 100755 + ui::SelectFileDialog::FileTypeInfo::ANY_PATH; + base::FilePath suggested_name; + -+ std::vector types; -+ types.push_back(u"*/*"); /*= java SelectFileDialog.ALL_TYPES*/ -+ std::pair, bool> accept_types = std::make_pair( -+ types, false /*use_media_capture*/); -+ + dialog_->SelectFile( + ui::SelectFileDialog::SELECT_OPEN_FILE, + std::u16string() /* dialog title*/, suggested_name, &allowed_file_info, -+ 0 /* file type index */, std::string() /* default file extension */, -+ nativeWindow, -+ &accept_types /* params */); ++ 0 /* file type index */, base::FilePath::StringType() /* default file extension */, ++ nativeWindow); +} + + @@ -3528,7 +3522,7 @@ new file mode 100755 +} + +void UserScriptLoader::FileSelected( -+ const ui::SelectedFileInfo& file, int index, void* params) { ++ const ui::SelectedFileInfo& file, int index) { + if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts)) + LOG(INFO) << "UserScriptLoader: FileSelected " << file.path(); + @@ -3543,9 +3537,7 @@ new file mode 100755 + StartLoad(); +} + -+void UserScriptLoader::FileSelectionCanceled( -+ void* params) { -+} ++void UserScriptLoader::FileSelectionCanceled() {} + +} // namespace extensions diff --git a/components/user_scripts/browser/user_script_loader.h b/components/user_scripts/browser/user_script_loader.h @@ -3627,7 +3619,7 @@ new file mode 100755 + }; + + // Parses the includes out of |script| and returns them in |includes|. -+ static bool ParseMetadataHeader(const base::StringPiece& script_text, ++ static bool ParseMetadataHeader(const std::string_view& script_text, + std::unique_ptr& script, + bool *found_metadata, + std::string& error_message); @@ -3710,8 +3702,8 @@ new file mode 100755 + // Manage file dialog requests + scoped_refptr dialog_; + void FileSelected(const ui::SelectedFileInfo& file, -+ int index, void* params) override; -+ void FileSelectionCanceled(void* params) override; ++ int index) override; ++ void FileSelectionCanceled() override; + void LoadScriptFromPathOnFileTaskRunnerCallback( + bool result, const std::string& error ); + @@ -4430,13 +4422,13 @@ new file mode 100755 +namespace { + +std::string FormatErrorMessageInternal( -+ base::StringPiece format, -+ std::initializer_list args) { ++ std::string_view format, ++ std::initializer_list args) { + std::string format_str = format.as_string(); + base::StringTokenizer tokenizer(format_str, "*"); + tokenizer.set_options(base::StringTokenizer::RETURN_DELIMS); + -+ std::vector result_pieces; ++ std::vector result_pieces; + auto* args_it = args.begin(); + while (tokenizer.GetNext()) { + if (!tokenizer.token_is_delim()) { @@ -4460,8 +4452,8 @@ new file mode 100755 + +} // namespace + -+std::string ErrorUtils::FormatErrorMessage(base::StringPiece format, -+ base::StringPiece s1) { ++std::string ErrorUtils::FormatErrorMessage(std::string_view format, ++ std::string_view s1) { + return FormatErrorMessageInternal(format, {s1}); +} + @@ -4487,8 +4479,8 @@ new file mode 100755 +class ErrorUtils { + public: + // Creates an error messages from a pattern. -+ static std::string FormatErrorMessage(base::StringPiece format, -+ base::StringPiece s1); ++ static std::string FormatErrorMessage(std::string_view format, ++ std::string_view s1); + +}; + @@ -4865,7 +4857,7 @@ new file mode 100755 + +const char kPathSeparator[] = "/"; + -+bool IsStandardScheme(base::StringPiece scheme) { ++bool IsStandardScheme(std::string_view scheme) { + // "*" gets the same treatment as a standard scheme. + if (scheme == "*") + return true; @@ -4874,7 +4866,7 @@ new file mode 100755 + url::Component(0, static_cast(scheme.length()))); +} + -+bool IsValidPortForScheme(base::StringPiece scheme, base::StringPiece port) { ++bool IsValidPortForScheme(std::string_view scheme, std::string_view port) { + if (port == "*") + return true; + @@ -4897,14 +4889,14 @@ new file mode 100755 +// the path will have only a single wildcard at the end. This makes figuring +// out overlap much easier. It seems like there is probably a computer-sciency +// way to solve the general case, but we don't need that yet. -+base::StringPiece StripTrailingWildcard(base::StringPiece path) { ++std::string_view StripTrailingWildcard(std::string_view path) { + if (base::EndsWith(path, "*")) + path.remove_suffix(1); + return path; +} + +// Removes trailing dot from |host_piece| if any. -+base::StringPiece CanonicalizeHostForMatching(base::StringPiece host_piece) { ++std::string_view CanonicalizeHostForMatching(std::string_view host_piece) { + if (base::EndsWith(host_piece, ".")) + host_piece.remove_suffix(1); + return host_piece; @@ -4913,7 +4905,7 @@ new file mode 100755 +} // namespace + +// static -+bool URLPattern::IsValidSchemeForExtensions(base::StringPiece scheme) { ++bool URLPattern::IsValidSchemeForExtensions(std::string_view scheme) { + for (size_t i = 0; i < std::size(kValidSchemes); ++i) { + if (scheme == kValidSchemes[i]) + return true; @@ -4941,7 +4933,7 @@ new file mode 100755 + match_subdomains_(false), + port_("*") {} + -+URLPattern::URLPattern(int valid_schemes, base::StringPiece pattern) ++URLPattern::URLPattern(int valid_schemes, std::string_view pattern) + // Strict error checking is used, because this constructor is only + // appropriate when we know |pattern| is valid. + : valid_schemes_(valid_schemes), @@ -4981,7 +4973,7 @@ new file mode 100755 + return out << '"' << url_pattern.GetAsString() << '"'; +} + -+URLPattern::ParseResult URLPattern::Parse(base::StringPiece pattern) { ++URLPattern::ParseResult URLPattern::Parse(std::string_view pattern) { + spec_.clear(); + SetMatchAllURLs(false); + SetMatchSubdomains(false); @@ -4998,12 +4990,12 @@ new file mode 100755 + bool has_standard_scheme_separator = true; + + // Some urls also use ':' alone as the scheme separator. -+ if (scheme_end_pos == base::StringPiece::npos) { ++ if (scheme_end_pos == std::string_view::npos) { + scheme_end_pos = pattern.find(':'); + has_standard_scheme_separator = false; + } + -+ if (scheme_end_pos == base::StringPiece::npos) ++ if (scheme_end_pos == std::string_view::npos) + return ParseResult::kMissingSchemeSeparator; + + if (!SetScheme(pattern.substr(0, scheme_end_pos))) @@ -5027,7 +5019,7 @@ new file mode 100755 + path_start_pos = host_start_pos; + } else if (scheme_ == url::kFileScheme) { + size_t host_end_pos = pattern.find(kPathSeparator, host_start_pos); -+ if (host_end_pos == base::StringPiece::npos) { ++ if (host_end_pos == std::string_view::npos) { + // Allow hostname omission. + // e.g. file://* is interpreted as file:///*, + // file://foo* is interpreted as file:///foo*. @@ -5044,19 +5036,19 @@ new file mode 100755 + if (host_start_pos == host_end_pos) + return ParseResult::kEmptyHost; + -+ if (host_end_pos == base::StringPiece::npos) ++ if (host_end_pos == std::string_view::npos) + return ParseResult::kEmptyPath; + -+ base::StringPiece host_and_port = ++ std::string_view host_and_port = + pattern.substr(host_start_pos, host_end_pos - host_start_pos); + -+ size_t port_separator_pos = base::StringPiece::npos; ++ size_t port_separator_pos = std::string_view::npos; + if (host_and_port[0] != '[') { + // Not IPv6 (either IPv4 or just a normal address). + port_separator_pos = host_and_port.find(':'); + } else { // IPv6. + size_t ipv6_host_end_pos = host_and_port.find(']'); -+ if (ipv6_host_end_pos == base::StringPiece::npos) ++ if (ipv6_host_end_pos == std::string_view::npos) + return ParseResult::kInvalidHost; + if (ipv6_host_end_pos == 1) + return ParseResult::kEmptyHost; @@ -5071,21 +5063,21 @@ new file mode 100755 + } + } + -+ if (port_separator_pos != base::StringPiece::npos && ++ if (port_separator_pos != std::string_view::npos && + !SetPort(host_and_port.substr(port_separator_pos + 1))) { + return ParseResult::kInvalidPort; + } + + // Note: this substr() will be the entire string if the port position + // wasn't found. -+ base::StringPiece host_piece = host_and_port.substr(0, port_separator_pos); ++ std::string_view host_piece = host_and_port.substr(0, port_separator_pos); + + if (host_piece.empty()) + return ParseResult::kEmptyHost; + + if (host_piece == "*") { + match_subdomains_ = true; -+ host_piece = base::StringPiece(); ++ host_piece = std::string_view(); + } else if (base::StartsWith(host_piece, "*.")) { + if (host_piece.length() == 2) { + // We don't allow just '*.' as a host. @@ -5134,7 +5126,7 @@ new file mode 100755 + valid_schemes_ = valid_schemes; +} + -+void URLPattern::SetHost(base::StringPiece host) { ++void URLPattern::SetHost(std::string_view host) { + spec_.clear(); + host_.assign(host.data(), host.size()); +} @@ -5156,7 +5148,7 @@ new file mode 100755 + match_subdomains_ = val; +} + -+bool URLPattern::SetScheme(base::StringPiece scheme) { ++bool URLPattern::SetScheme(std::string_view scheme) { + spec_.clear(); + scheme_.assign(scheme.data(), scheme.size()); + if (scheme_ == "*") { @@ -5167,7 +5159,7 @@ new file mode 100755 + return true; +} + -+bool URLPattern::IsValidScheme(base::StringPiece scheme) const { ++bool URLPattern::IsValidScheme(std::string_view scheme) const { + if (valid_schemes_ == SCHEME_ALL) + return true; + @@ -5179,7 +5171,7 @@ new file mode 100755 + return false; +} + -+void URLPattern::SetPath(base::StringPiece path) { ++void URLPattern::SetPath(std::string_view path) { + spec_.clear(); + path_.assign(path.data(), path.size()); + path_escaped_ = path_; @@ -5187,7 +5179,7 @@ new file mode 100755 + base::ReplaceSubstringsAfterOffset(&path_escaped_, 0, "?", "\\?"); +} + -+bool URLPattern::SetPort(base::StringPiece port) { ++bool URLPattern::SetPort(std::string_view port) { + spec_.clear(); + if (IsValidPortForScheme(scheme_, port)) { + port_.assign(port.data(), port.size()); @@ -5252,14 +5244,14 @@ new file mode 100755 + return MatchesSecurityOriginHelper(*test_url); +} + -+bool URLPattern::MatchesScheme(base::StringPiece test) const { ++bool URLPattern::MatchesScheme(std::string_view test) const { + if (!IsValidScheme(test)) + return false; + + return scheme_ == "*" || test == scheme_; +} + -+bool URLPattern::MatchesHost(base::StringPiece host) const { ++bool URLPattern::MatchesHost(std::string_view host) const { + // TODO(devlin): This is a bit sad. Parsing urls is expensive. However, it's + // important that we do this conversion to a GURL in order to canonicalize the + // host (the pattern's host_ already is canonicalized from Parse()). We can't @@ -5270,8 +5262,8 @@ new file mode 100755 +} + +bool URLPattern::MatchesHost(const GURL& test) const { -+ base::StringPiece test_host(CanonicalizeHostForMatching(test.host_piece())); -+ const base::StringPiece pattern_host(CanonicalizeHostForMatching(host_)); ++ std::string_view test_host(CanonicalizeHostForMatching(test.host_piece())); ++ const std::string_view pattern_host(CanonicalizeHostForMatching(host_)); + + // If the hosts are exactly equal, we have a match. + if (test_host == pattern_host) @@ -5337,7 +5329,7 @@ new file mode 100755 + return !MatchesEffectiveTld() && scheme_ != "*" && !match_subdomains_; +} + -+bool URLPattern::MatchesPath(base::StringPiece test) const { ++bool URLPattern::MatchesPath(std::string_view test) const { + // Make the behaviour of OverlapsWith consistent with MatchesURL, which is + // need to match hosted apps on e.g. 'google.com' also run on 'google.com/'. + // The below if is a no-copy way of doing (test + "/*" == path_escaped_). @@ -5460,12 +5452,12 @@ new file mode 100755 + + // Note: Alias the function type (rather than using auto) because + // MatchesHost() is overloaded. -+ using match_function_type = bool (URLPattern::*)(base::StringPiece) const; ++ using match_function_type = bool (URLPattern::*)(std::string_view) const; + -+ auto get_intersection = [this, &other](base::StringPiece own_str, -+ base::StringPiece other_str, ++ auto get_intersection = [this, &other](std::string_view own_str, ++ std::string_view other_str, + match_function_type match_function, -+ base::StringPiece* out) { ++ std::string_view* out) { + if ((this->*match_function)(other_str)) { + *out = other_str; + return true; @@ -5477,10 +5469,10 @@ new file mode 100755 + return false; + }; + -+ base::StringPiece scheme; -+ base::StringPiece host; -+ base::StringPiece port; -+ base::StringPiece path; ++ std::string_view scheme; ++ std::string_view host; ++ std::string_view port; ++ std::string_view path; + // If any pieces fail to overlap, then there is no intersection. + if (!get_intersection(scheme_, other.scheme_, &URLPattern::MatchesScheme, + &scheme) || @@ -5492,14 +5484,14 @@ new file mode 100755 + } + + // Only match subdomains if both patterns match subdomains. -+ base::StringPiece subdomains; ++ std::string_view subdomains; + if (match_subdomains_ && other.match_subdomains_) { + // The host may be empty (e.g., in the case of *://*/* - in that case, only + // append '*' instead of '*.'. + subdomains = host.empty() ? "*" : "*."; + } + -+ base::StringPiece scheme_separator = ++ std::string_view scheme_separator = + IsStandardScheme(scheme) ? url::kStandardSchemeSeparator : ":"; + + std::string pattern_str = base::StrCat( @@ -5546,7 +5538,7 @@ new file mode 100755 + return true; +} + -+bool URLPattern::MatchesPortPattern(base::StringPiece port) const { ++bool URLPattern::MatchesPortPattern(std::string_view port) const { + return port_ == "*" || port_ == port; +} + @@ -5685,7 +5677,7 @@ new file mode 100755 + static const char kAllUrlsPattern[]; + + // Returns true if the given |scheme| is considered valid for extensions. -+ static bool IsValidSchemeForExtensions(base::StringPiece scheme); ++ static bool IsValidSchemeForExtensions(std::string_view scheme); + + // Returns the mask for all schemes considered valid for extensions. + static int GetValidSchemeMaskForExtensions(); @@ -5694,7 +5686,7 @@ new file mode 100755 + + // Convenience to construct a URLPattern from a string. If the string is not + // known ahead of time, use Parse() instead, which returns success or failure. -+ URLPattern(int valid_schemes, base::StringPiece pattern); ++ URLPattern(int valid_schemes, std::string_view pattern); + + URLPattern(); + URLPattern(const URLPattern& other); @@ -5712,7 +5704,7 @@ new file mode 100755 + // URLPattern::ParseResult::kSuccess on success, or an error code otherwise. + // On failure, this instance will have some intermediate values and is in an + // invalid state. -+ ParseResult Parse(base::StringPiece pattern_str); ++ ParseResult Parse(std::string_view pattern_str); + + // Gets the bitmask of valid schemes. + int valid_schemes() const { return valid_schemes_; } @@ -5721,7 +5713,7 @@ new file mode 100755 + // Gets the host the pattern matches. This can be an empty string if the + // pattern matches all hosts (the input was ://*/). + const std::string& host() const { return host_; } -+ void SetHost(base::StringPiece host); ++ void SetHost(std::string_view host); + + // Gets whether to match subdomains of host(). + bool match_subdomains() const { return match_subdomains_; } @@ -5730,7 +5722,7 @@ new file mode 100755 + // Gets the path the pattern matches with the leading slash. This can have + // embedded asterisks which are interpreted using glob rules. + const std::string& path() const { return path_; } -+ void SetPath(base::StringPiece path); ++ void SetPath(std::string_view path); + + // Returns true if this pattern matches all (valid) urls. + bool match_all_urls() const { return match_all_urls_; } @@ -5739,14 +5731,14 @@ new file mode 100755 + // Sets the scheme for pattern matches. This can be a single '*' if the + // pattern matches all valid schemes (as defined by the valid_schemes_ + // property). Returns false on failure (if the scheme is not valid). -+ bool SetScheme(base::StringPiece scheme); ++ bool SetScheme(std::string_view scheme); + // Note: You should use MatchesScheme() instead of this getter unless you + // absolutely need the exact scheme. This is exposed for testing. + const std::string& scheme() const { return scheme_; } + + // Returns true if the specified scheme can be used in this URL pattern, and + // false otherwise. Uses valid_schemes_ to determine validity. -+ bool IsValidScheme(base::StringPiece scheme) const; ++ bool IsValidScheme(std::string_view scheme) const; + + // Returns true if this instance matches the specified URL. Always returns + // false for invalid URLs. @@ -5759,14 +5751,14 @@ new file mode 100755 + // Note that if test is "filesystem", this may fail whereas MatchesURL + // may succeed. MatchesURL is smart enough to look at the inner_url instead + // of the outer "filesystem:" part. -+ bool MatchesScheme(base::StringPiece test) const; ++ bool MatchesScheme(std::string_view test) const; + + // Returns true if |test| matches our host. -+ bool MatchesHost(base::StringPiece test) const; ++ bool MatchesHost(std::string_view test) const; + bool MatchesHost(const GURL& test) const; + + // Returns true if |test| matches our path. -+ bool MatchesPath(base::StringPiece test) const; ++ bool MatchesPath(std::string_view test) const; + + // Returns true if the pattern matches all patterns in an (e)TLD. This + // includes patterns like *://*.com/*, *://*.co.uk/*, etc. A pattern that @@ -5789,7 +5781,7 @@ new file mode 100755 + bool MatchesSingleOrigin() const; + + // Sets the port. Returns false if the port is invalid. -+ bool SetPort(base::StringPiece port); ++ bool SetPort(std::string_view port); + const std::string& port() const { return port_; } + + // Returns a string representing this instance. @@ -5851,7 +5843,7 @@ new file mode 100755 + bool MatchesSecurityOriginHelper(const GURL& test) const; + + // Returns true if our port matches the |port| pattern (it may be "*"). -+ bool MatchesPortPattern(base::StringPiece port) const; ++ bool MatchesPortPattern(std::string_view port) const; + + // If the URLPattern contains a wildcard scheme, returns a list of + // equivalent literal schemes, otherwise returns the current scheme. @@ -6836,16 +6828,16 @@ new file mode 100755 + + // If external_content_ is set returns it as content otherwise it returns + // content_ -+ const base::StringPiece GetContent() const { ++ const std::string_view GetContent() const { + if (external_content_.data()) + return external_content_; + else + return content_; + } -+ void set_external_content(const base::StringPiece& content) { ++ void set_external_content(const std::string_view& content) { + external_content_ = content; + } -+ void set_content(const base::StringPiece& content) { ++ void set_content(const std::string_view& content) { + content_.assign(content.begin(), content.end()); + } + @@ -6870,7 +6862,7 @@ new file mode 100755 + + // The script content. It can be set to either loaded_content_ or + // externally allocated string. -+ base::StringPiece external_content_; ++ std::string_view external_content_; + + // Set when the content is loaded by LoadContent + std::string content_; @@ -7244,7 +7236,7 @@ new file mode 100755 + // Why? Is it just because we don't expose those types to JS? + static const struct { + ViewType type; -+ base::StringPiece name; ++ std::string_view name; + } constexpr kTypeMap[] = { + // {VIEW_TYPE_APP_WINDOW, "APP_WINDOW"}, + // {VIEW_TYPE_EXTENSION_BACKGROUND_PAGE, "BACKGROUND"}, @@ -8120,7 +8112,7 @@ new file mode 100755 + } + void OnDestruct() override { injection_->invalidate_render_frame(); } + -+ ScriptInjection* injection_; ++ raw_ptr injection_; +}; + +// static @@ -8442,7 +8434,7 @@ new file mode 100755 + std::unique_ptr injector_; + + // The RenderFrame into which this should inject the script. -+ content::RenderFrame* render_frame_; ++ raw_ptr render_frame_; + + // The associated injection host. + std::unique_ptr injection_host_; @@ -8573,7 +8565,7 @@ new file mode 100755 + void InvalidateAndResetFrame(bool force_reset); + + // The owning ScriptInjectionManager. -+ ScriptInjectionManager* manager_; ++ raw_ptr manager_; + + bool should_run_idle_ = true; // commit @9f2aac4 + @@ -8986,7 +8978,7 @@ new file mode 100755 + std::vector> rfo_helpers_; + + // The set of UserScripts associated with extensions. Owned by the Dispatcher. -+ UserScriptSetManager* user_script_set_manager_; ++ raw_ptr user_script_set_manager_; + + // Pending injections which are waiting for either the proper run location or + // user consent. @@ -9518,12 +9510,12 @@ new file mode 100755 + + // The associated user script. Owned by the UserScriptInjector that created + // this object. -+ const UserScript* script_; ++ raw_ptr script_; + + // The UserScriptSet that eventually owns the UserScript this + // UserScriptInjector points to. + // Outlives |this|. -+ UserScriptSet* const user_script_set_; ++ const raw_ptr user_script_set_; + + // The id of the associated user script. We cache this because when we update + // the |script_| associated with this injection, the old referance may be @@ -9677,14 +9669,14 @@ new file mode 100755 + size_t body_length = 0; + CHECK(iter.ReadData(&body, &body_length)); + script->js_scripts()[j]->set_external_content( -+ base::StringPiece(body, body_length)); ++ std::string_view(body, body_length)); + } + for (size_t j = 0; j < script->css_scripts().size(); ++j) { + const char* body = NULL; + size_t body_length = 0; + CHECK(iter.ReadData(&body, &body_length)); + script->css_scripts()[j]->set_external_content( -+ base::StringPiece(body, body_length)); ++ std::string_view(body, body_length)); + } + + if (only_inject_incognito && !script->is_incognito_enabled()) @@ -9776,7 +9768,7 @@ new file mode 100755 + return iter->second; + } + -+ base::StringPiece script_content = file.GetContent(); ++ std::string_view script_content = file.GetContent(); + blink::WebString source; + if (emulate_greasemonkey) { + // We add this dumb function wrapper for user scripts to emulate what @@ -9798,7 +9790,7 @@ new file mode 100755 + if (iter != script_sources_.end()) + return iter->second; + -+ base::StringPiece script_content = file.GetContent(); ++ std::string_view script_content = file.GetContent(); + return script_sources_ + .insert(std::make_pair( + url, blink::WebString::FromUTF8(script_content))) diff --git a/build/patches/Eyeo-Adblock-for-Cromite.patch b/build/patches/Eyeo-Adblock-for-Cromite.patch index b06682af..f139cada 100644 --- a/build/patches/Eyeo-Adblock-for-Cromite.patch +++ b/build/patches/Eyeo-Adblock-for-Cromite.patch @@ -55,7 +55,6 @@ deactivation of all pop-ups (default disabled) .../browser/adblock_url_loader_factory.h | 7 +- .../browser/adblock_webcontents_observer.cc | 25 +- .../browser/adblock_webcontents_observer.h | 5 +- - .../content_security_policy_injector_impl.cc | 1 + .../content/browser/element_hider_impl.cc | 2 +- .../browser/frame_hierarchy_builder.cc | 3 +- .../browser/resource_classification_runner.h | 9 + @@ -89,7 +88,7 @@ deactivation of all pop-ups (default disabled) .../serializer/flatbuffer_serializer.cc | 82 +- components/adblock/core/features.cc | 3 +- components/adblock/core/hash/schema_hash.h | 10 + - .../adblock/core/sitekey_storage_impl.cc | 7 + + .../adblock/core/sitekey_storage_impl.cc | 11 +- .../core/subscription/conversion_executors.h | 1 + .../filtering_configuration_maintainer.h | 4 + ...filtering_configuration_maintainer_impl.cc | 31 +- @@ -131,7 +130,7 @@ deactivation of all pop-ups (default disabled) .../blink/renderer/core/css/style_engine.h | 1 + .../renderer/core/exported/web_document.cc | 15 +- .../definitions/adblock_private.d.ts | 14 + - 121 files changed, 6140 insertions(+), 1301 deletions(-) + 120 files changed, 6140 insertions(+), 1304 deletions(-) create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.html create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.ts rename components/adblock/android/java/res/xml/{adblock_preferences.xml => eyeo_adblock_preferences.xml} (56%) @@ -2893,17 +2892,6 @@ diff --git a/components/adblock/content/browser/adblock_webcontents_observer.h b + raw_ptr settings_map_ = nullptr; }; #endif // COMPONENTS_ADBLOCK_CONTENT_BROWSER_ADBLOCK_WEBCONTENTS_OBSERVER_H_ -diff --git a/components/adblock/content/browser/content_security_policy_injector_impl.cc b/components/adblock/content/browser/content_security_policy_injector_impl.cc ---- a/components/adblock/content/browser/content_security_policy_injector_impl.cc -+++ b/components/adblock/content/browser/content_security_policy_injector_impl.cc -@@ -36,6 +36,7 @@ std::set GetCspInjections( - const std::vector frame_hierarchy_chain) { - TRACE_EVENT1("eyeo", "GetCspInjection", "url", request_url.spec()); - std::set injections; -+ if ((true)) return injections; - for (const auto& collection : subscription_collections) { - const auto injection = - collection->GetCspInjections(request_url, frame_hierarchy_chain); diff --git a/components/adblock/content/browser/element_hider_impl.cc b/components/adblock/content/browser/element_hider_impl.cc --- a/components/adblock/content/browser/element_hider_impl.cc +++ b/components/adblock/content/browser/element_hider_impl.cc @@ -4420,7 +4408,7 @@ diff --git a/components/adblock/core/converter/parser/url_filter.cc b/components + } piece.remove_suffix(1); } - if (piece.find('|') == base::StringPiece::npos) { + if (piece.find('|') == std::string_view::npos) { @@ -108,21 +112,21 @@ std::optional UrlFilter::FromString(std::string filter_str) { if (options->Csp().has_value() && options->Csp().value().empty() && @@ -4656,7 +4644,18 @@ new file mode 100644 diff --git a/components/adblock/core/sitekey_storage_impl.cc b/components/adblock/core/sitekey_storage_impl.cc --- a/components/adblock/core/sitekey_storage_impl.cc +++ b/components/adblock/core/sitekey_storage_impl.cc -@@ -37,6 +37,8 @@ void SitekeyStorageImpl::ProcessResponseHeaders( +@@ -27,9 +27,7 @@ + + namespace adblock { + +-SitekeyStorageImpl::SitekeyStorageImpl() { +- crypto::EnsureOpenSSLInit(); +-} ++SitekeyStorageImpl::SitekeyStorageImpl() {} + + SitekeyStorageImpl::~SitekeyStorageImpl() = default; + +@@ -37,6 +35,8 @@ void SitekeyStorageImpl::ProcessResponseHeaders( const GURL& request_url, const scoped_refptr& headers, const std::string& user_agent) { @@ -4665,7 +4664,7 @@ diff --git a/components/adblock/core/sitekey_storage_impl.cc b/components/adbloc if (user_agent.empty()) { LOG(WARNING) << "[eyeo] No user agent info"; return; -@@ -53,6 +55,7 @@ void SitekeyStorageImpl::ProcessResponseHeaders( +@@ -53,6 +53,7 @@ void SitekeyStorageImpl::ProcessResponseHeaders( std::optional> SitekeyStorageImpl::FindSiteKeyForAnyUrl(const std::vector& urls) const { @@ -4673,7 +4672,7 @@ diff --git a/components/adblock/core/sitekey_storage_impl.cc b/components/adbloc DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); for (const auto& url : urls) { auto elem = url_to_sitekey_map_.find(url); -@@ -66,6 +69,8 @@ SitekeyStorageImpl::FindSiteKeyForAnyUrl(const std::vector& urls) const { +@@ -66,6 +67,8 @@ SitekeyStorageImpl::FindSiteKeyForAnyUrl(const std::vector& urls) const { void SitekeyStorageImpl::ProcessSiteKey(const GURL& request_url, const SiteKey& site_key, const std::string& user_agent) { @@ -4682,7 +4681,7 @@ diff --git a/components/adblock/core/sitekey_storage_impl.cc b/components/adbloc DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(!site_key.value().empty()); auto site_key_pair = FindSiteKeyForAnyUrl({request_url}); -@@ -116,6 +121,8 @@ bool SitekeyStorageImpl::IsSitekeySignatureValid( +@@ -116,6 +119,8 @@ bool SitekeyStorageImpl::IsSitekeySignatureValid( const std::string& public_key_b64, const std::string& signature_b64, const std::string& data) const { diff --git a/build/patches/Fix-chromium-build-bugs.patch b/build/patches/Fix-chromium-build-bugs.patch index 9b9cb316..52626a24 100644 --- a/build/patches/Fix-chromium-build-bugs.patch +++ b/build/patches/Fix-chromium-build-bugs.patch @@ -8,12 +8,14 @@ https://bugs.chromium.org/p/chromium/issues/detail?id=1491776#c10 BUILD.gn | 1 - .../navigation_predictor_metrics_document_data.h | 2 ++ chrome/browser/safe_browsing/BUILD.gn | 1 + + chrome/browser/ui/browser_commands.cc | 1 + + .../webid/fedcm_account_selection_view_desktop.cc | 1 + .../omnibox/browser/autocomplete_classifier.cc | 4 ++-- components/omnibox/browser/omnibox_field_trial.cc | 4 ++-- .../phishing_classifier/phishing_image_embedder.cc | 14 +++----------- content/browser/browser_interface_binders.cc | 1 + net/BUILD.gn | 1 + - 8 files changed, 12 insertions(+), 16 deletions(-) + 10 files changed, 14 insertions(+), 16 deletions(-) diff --git a/BUILD.gn b/BUILD.gn --- a/BUILD.gn @@ -49,6 +51,28 @@ diff --git a/chrome/browser/safe_browsing/BUILD.gn b/chrome/browser/safe_browsin ] if (safe_browsing_mode == 1) { # "Safe Browsing Full" files in addition to the "basic" ones to use for +diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc +--- a/chrome/browser/ui/browser_commands.cc ++++ b/chrome/browser/ui/browser_commands.cc +@@ -5,6 +5,7 @@ + #include "chrome/browser/ui/browser_commands.h" + + #include ++#include + #include + #include + #include +diff --git a/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop.cc b/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop.cc +--- a/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop.cc ++++ b/chrome/browser/ui/views/webid/fedcm_account_selection_view_desktop.cc +@@ -6,6 +6,7 @@ + + #include "base/functional/bind.h" + #include "base/metrics/histogram_macros.h" ++#include "base/metrics/histogram_functions.h" + #include "chrome/browser/accessibility/accessibility_state_utils.h" + #include "chrome/browser/net/system_network_context_manager.h" + #include "chrome/browser/ui/browser_finder.h" diff --git a/components/omnibox/browser/autocomplete_classifier.cc b/components/omnibox/browser/autocomplete_classifier.cc --- a/components/omnibox/browser/autocomplete_classifier.cc +++ b/components/omnibox/browser/autocomplete_classifier.cc diff --git a/build/patches/Move-navigation-bar-to-bottom.patch b/build/patches/Move-navigation-bar-to-bottom.patch index 3fab5f2b..86b52b12 100644 --- a/build/patches/Move-navigation-bar-to-bottom.patch +++ b/build/patches/Move-navigation-bar-to-bottom.patch @@ -59,6 +59,12 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/feed/FeedListContentManager.java | 6 +- .../flags/android/chrome_feature_list.cc | 3 + .../browser/flags/ChromeFeatureList.java | 10 ++ + chrome/browser/hub/internal/BUILD.gn | 5 + + .../chrome/browser/hub/HubCoordinator.java | 8 + + .../chrome/browser/hub/HubManagerImpl.java | 17 +- + .../browser/hub/ReversedLinearLayout.java | 42 +++++ + .../android/res/layout/hub_layout.xml | 4 +- + .../android/res/layout/hub_toolbar_layout.xml | 2 +- chrome/browser/prefs/browser_prefs.cc | 2 +- .../chrome/browser/ui/appmenu/AppMenu.java | 40 ++++- .../ui/appmenu/AppMenuHandlerImpl.java | 10 ++ @@ -85,7 +91,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../AccessibilitySettingsDelegate.java | 7 + .../render_widget_host_view_android.cc | 3 + .../Move-navigation-bar-to-bottom.inc | 17 ++ - 72 files changed, 930 insertions(+), 74 deletions(-) + 78 files changed, 1002 insertions(+), 80 deletions(-) + create mode 100644 chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Move-navigation-bar-to-bottom.inc diff --git a/cc/base/features.cc b/cc/base/features.cc @@ -1962,6 +1969,192 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f sPaintPreviewDemo, sPrefetchBrowserInitiatedTriggers, sQueryTiles, +diff --git a/chrome/browser/hub/internal/BUILD.gn b/chrome/browser/hub/internal/BUILD.gn +--- a/chrome/browser/hub/internal/BUILD.gn ++++ b/chrome/browser/hub/internal/BUILD.gn +@@ -16,6 +16,7 @@ android_library("java") { + "//chrome/test/android:chrome_java_transit", + ] + sources = [ ++ "android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java", + "android/java/src/org/chromium/chrome/browser/hub/ApplyButtonData.java", + "android/java/src/org/chromium/chrome/browser/hub/FadeHubLayoutAnimationFactory.java", + "android/java/src/org/chromium/chrome/browser/hub/FadeHubLayoutAnimationFactoryImpl.java", +@@ -68,6 +69,10 @@ android_library("java") { + "//third_party/androidx:androidx_interpolator_interpolator_java", + "//ui/android:ui_no_recycler_view_java", + ] ++ deps += [ ++ "//base:base_cached_flags_java", ++ "//chrome/browser/flags:java", ++ ] + } + + android_resources("java_resources") { +diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java +--- a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java ++++ b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java +@@ -8,6 +8,7 @@ import android.content.Context; + import android.view.LayoutInflater; + import android.view.View; + import android.widget.FrameLayout; ++import android.widget.LinearLayout; + + import androidx.annotation.NonNull; + import androidx.annotation.Nullable; +@@ -18,6 +19,7 @@ import org.chromium.base.supplier.ObservableSupplierImpl; + import org.chromium.base.supplier.OneshotSupplier; + import org.chromium.base.supplier.TransitiveObservableSupplier; + import org.chromium.chrome.browser.feature_engagement.TrackerFactory; ++import org.chromium.chrome.browser.flags.ChromeFeatureList; + import org.chromium.chrome.browser.profiles.ProfileProvider; + import org.chromium.chrome.browser.tab.Tab; + import org.chromium.chrome.browser.toolbar.menu_button.MenuButtonCoordinator; +@@ -93,6 +95,12 @@ public class HubCoordinator implements PaneHubController, BackPressHandler { + HubPaneHostView hubPaneHostView = mContainerView.findViewById(R.id.hub_pane_host); + mHubPaneHostCoordinator = + new HubPaneHostCoordinator(hubPaneHostView, paneManager.getFocusedPaneSupplier()); ++ if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { ++ LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) ++ hubPaneHostView.getLayoutParams(); ++ params.bottomMargin = hubToolbarView.getHeight(); ++ hubPaneHostView.setLayoutParams(params); ++ } + + mHubLayoutController = hubLayoutController; + mHandleBackPressSupplier = new ObservableSupplierImpl<>(); +diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubManagerImpl.java b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubManagerImpl.java +--- a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubManagerImpl.java ++++ b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubManagerImpl.java +@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.hub; + + import android.content.Context; + import android.view.View; ++import android.view.ViewGroup; + import android.widget.FrameLayout.LayoutParams; + + import androidx.annotation.ColorInt; +@@ -16,6 +17,7 @@ import org.chromium.base.ValueChangedCallback; + import org.chromium.base.supplier.ObservableSupplier; + import org.chromium.base.supplier.ObservableSupplierImpl; + import org.chromium.base.supplier.OneshotSupplier; ++import org.chromium.chrome.browser.flags.ChromeFeatureList; + import org.chromium.chrome.browser.back_press.BackPressManager; + import org.chromium.chrome.browser.profiles.ProfileProvider; + import org.chromium.chrome.browser.tab.Tab; +@@ -111,7 +113,10 @@ public class HubManagerImpl implements HubManager, HubController { + LayoutParams params = (LayoutParams) mHubContainerView.getLayoutParams(); + assert params != null : "HubContainerView should always have layout params."; + mStatusIndicatorHeight = height; +- params.topMargin = mStatusIndicatorHeight + mAppHeaderHeight; ++ if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) ++ params.bottomMargin = mStatusIndicatorHeight + mAppHeaderHeight; ++ else ++ params.topMargin = mStatusIndicatorHeight + mAppHeaderHeight; + mHubContainerView.setLayoutParams(params); + } + +@@ -121,7 +126,10 @@ public class HubManagerImpl implements HubManager, HubController { + LayoutParams params = (LayoutParams) mHubContainerView.getLayoutParams(); + assert params != null : "HubContainerView should always have layout params."; + mAppHeaderHeight = height; +- params.topMargin = mStatusIndicatorHeight + mAppHeaderHeight; ++ if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) ++ params.bottomMargin = mStatusIndicatorHeight + mAppHeaderHeight; ++ else ++ params.topMargin = mStatusIndicatorHeight + mAppHeaderHeight; + mHubContainerView.setLayoutParams(params); + } + +@@ -242,6 +250,9 @@ public class HubManagerImpl implements HubManager, HubController { + mMenuOrKeyboardActionController.registerMenuOrKeyboardActionHandler( + menuOrKeyboardActionHandler); + } +- mSnackbarManager.setParentView(mHubContainerView); ++ if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) ++ mSnackbarManager.setParentView((ViewGroup)getPaneHostView()); ++ else ++ mSnackbarManager.setParentView(mHubContainerView); + } + } +diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java +@@ -0,0 +1,42 @@ ++package org.chromium.chrome.browser.hub; ++ ++import android.content.Context; ++import android.util.AttributeSet; ++import android.widget.LinearLayout; ++import android.view.Gravity; ++import android.view.View; ++ ++import org.chromium.chrome.browser.flags.ChromeFeatureList; ++ ++public class ReversedLinearLayout extends LinearLayout { ++ private boolean mReversedLayout; ++ ++ public ReversedLinearLayout(Context context) { ++ super(context); ++ setReversedLayout(); ++ } ++ ++ public ReversedLinearLayout(Context context, AttributeSet attrs) { ++ super(context, attrs); ++ setReversedLayout(); ++ } ++ ++ public ReversedLinearLayout(Context context, AttributeSet attrs, int defStyle) { ++ super(context, attrs, defStyle); ++ setReversedLayout(); ++ } ++ ++ private void setReversedLayout() { ++ mReversedLayout = ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled(); ++ if (mReversedLayout) ++ setGravity(Gravity.START | Gravity.BOTTOM); ++ } ++ ++ @Override ++ public View getChildAt(int i) { ++ if (mReversedLayout) ++ return super.getChildAt(getChildCount() - 1 - i); ++ else ++ return super.getChildAt(i); ++ } ++} +diff --git a/chrome/browser/hub/internal/android/res/layout/hub_layout.xml b/chrome/browser/hub/internal/android/res/layout/hub_layout.xml +--- a/chrome/browser/hub/internal/android/res/layout/hub_layout.xml ++++ b/chrome/browser/hub/internal/android/res/layout/hub_layout.xml +@@ -4,7 +4,7 @@ Copyright 2023 The Chromium Authors + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. + --> +- +@@ -13,4 +13,4 @@ found in the LICENSE file. + + + +- +\ No newline at end of file ++ +diff --git a/chrome/browser/hub/internal/android/res/layout/hub_toolbar_layout.xml b/chrome/browser/hub/internal/android/res/layout/hub_toolbar_layout.xml +--- a/chrome/browser/hub/internal/android/res/layout/hub_toolbar_layout.xml ++++ b/chrome/browser/hub/internal/android/res/layout/hub_toolbar_layout.xml +@@ -9,7 +9,7 @@ found in the LICENSE file. + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/hub_toolbar" + android:layout_width="match_parent" +- android:layout_height="wrap_content" ++ android:layout_height="@dimen/toolbar_height_no_shadow" + android:orientation="vertical"> + + (int32 error_code, CertVerifyResult cv_result, -@@ -1551,16 +1552,16 @@ interface NetworkContext { +@@ -1552,16 +1553,16 @@ interface NetworkContext { // Adds explicitly-specified data as if it was processed from an // HSTS header. Used by tests and implementation of chrome://net-internals. @@ -924,7 +924,7 @@ diff --git a/services/network/public/mojom/network_context.mojom b/services/netw => (mojo_base.mojom.DictionaryValue state); // Sets allowed and blocked origins respectively for the URLLoaderFactory -@@ -1579,7 +1580,7 @@ interface NetworkContext { +@@ -1580,7 +1581,7 @@ interface NetworkContext { // Deletes any dynamic data stored for |host| from the transport // security state. Returns true iff an entry was deleted. // See net::TransportSecurityState::DeleteDynamicDataForHost for more detail. diff --git a/build/patches/Partition-blobs-by-top-frame-URL.patch b/build/patches/Partition-blobs-by-top-frame-URL.patch index ff79c452..be83abaf 100644 --- a/build/patches/Partition-blobs-by-top-frame-URL.patch +++ b/build/patches/Partition-blobs-by-top-frame-URL.patch @@ -10,9 +10,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- storage/browser/blob/blob_url_store_impl.cc | 28 +++++++++++++++++++ storage/browser/blob/blob_url_store_impl.h | 9 ++++++ - .../public/mojom/blob/blob_url_store.mojom | 10 +++++-- + .../public/mojom/blob/blob_url_store.mojom | 8 ++++-- .../core/fileapi/public_url_manager.cc | 17 +++++++++++ - 4 files changed, 62 insertions(+), 2 deletions(-) + 4 files changed, 60 insertions(+), 2 deletions(-) diff --git a/storage/browser/blob/blob_url_store_impl.cc b/storage/browser/blob/blob_url_store_impl.cc --- a/storage/browser/blob/blob_url_store_impl.cc @@ -122,16 +122,14 @@ diff --git a/third_party/blink/public/mojom/blob/blob_url_store.mojom b/third_pa // TODO(https://crbug.com/1224926): Remove these once experiment is over. mojo_base.mojom.UnguessableToken? unsafe_agent_cluster_id, network.mojom.SchemefulSite? unsafe_top_level_site); -@@ -51,7 +53,11 @@ interface BlobURLStore { +@@ -51,7 +53,9 @@ interface BlobURLStore { // refer to, even after the URL is revoked. // As long as the token is alive, the resolved blob will also be kept alive. ResolveForNavigation(url.mojom.Url url, - pending_receiver token) => ( + pending_receiver token, + mojo_base.mojom.UnguessableToken unsafe_agent_cluster_id, -+ network.mojom.SchemefulSite? unsafe_top_level_site, -+ mojo_base.mojom.UnguessableToken unsafe_agent_cluster_id, -+ network.mojom.SchemefulSite? unsafe_top_level_site) => ( ++ network.mojom.SchemefulSite? unsafe_top_level_site) => ( // TODO(https://crbug.com/1224926): Remove this once experiment is over. mojo_base.mojom.UnguessableToken? unsafe_agent_cluster_id); }; diff --git a/build/patches/Revert-Permit-blocking-of-view-source.patch b/build/patches/Revert-Permit-blocking-of-view-source.patch index 4935bbeb..10cfc59a 100644 --- a/build/patches/Revert-Permit-blocking-of-view-source.patch +++ b/build/patches/Revert-Permit-blocking-of-view-source.patch @@ -16,7 +16,7 @@ diff --git a/components/policy/content/policy_blocklist_navigation_throttle.cc b } bool PolicyBlocklistNavigationThrottle::IsBlockedViewSourceNavigation() { -+ if ((true)) return false ++ if ((true)) return false; content::NavigationEntry* nav_entry = navigation_handle()->GetNavigationEntry(); if (!nav_entry || !nav_entry->IsViewSourceMode()) { diff --git a/build/patches/Revert-remove-allowscript-content-setting-secondary-url.patch b/build/patches/Revert-remove-allowscript-content-setting-secondary-url.patch index d6991653..29cda697 100644 --- a/build/patches/Revert-remove-allowscript-content-setting-secondary-url.patch +++ b/build/patches/Revert-remove-allowscript-content-setting-secondary-url.patch @@ -9,6 +9,7 @@ https://chromium-review.googlesource.com/c/chromium/src/+/5307559 .../renderer/content_settings_agent_impl.cc | 38 ++++++++++++++++++- .../renderer/content_settings_agent_impl.h | 6 +++ .../platform/web_content_settings_client.h | 12 ++++++ + .../renderer/core/frame/local_dom_window.cc | 6 ++- .../blink/renderer/core/frame/local_frame.cc | 13 ------- .../blink/renderer/core/frame/local_frame.h | 6 --- .../renderer/core/html/html_meta_element.cc | 4 +- @@ -18,7 +19,7 @@ https://chromium-review.googlesource.com/c/chromium/src/+/5307559 .../core/loader/frame_fetch_context.h | 13 ++++++- .../core/loader/worker_fetch_context.cc | 12 ++++-- .../core/loader/worker_fetch_context.h | 2 +- - 14 files changed, 139 insertions(+), 38 deletions(-) + 15 files changed, 144 insertions(+), 39 deletions(-) diff --git a/chrome/renderer/worker_content_settings_client.cc b/chrome/renderer/worker_content_settings_client.cc --- a/chrome/renderer/worker_content_settings_client.cc @@ -184,6 +185,29 @@ diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/t // Controls whether insecure scripts are allowed to execute for this frame. virtual bool AllowRunningInsecureContent(bool enabled_per_settings, const WebURL&) { +diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc +--- a/third_party/blink/renderer/core/frame/local_dom_window.cc ++++ b/third_party/blink/renderer/core/frame/local_dom_window.cc +@@ -50,6 +50,7 @@ + #include "third_party/blink/public/platform/task_type.h" + #include "third_party/blink/public/platform/web_string.h" + #include "third_party/blink/public/web/web_picture_in_picture_window_options.h" ++#include "third_party/blink/renderer/core/loader/frame_fetch_context.h" + #include "third_party/blink/renderer/bindings/core/v8/binding_security.h" + #include "third_party/blink/renderer/bindings/core/v8/capture_source_location.h" + #include "third_party/blink/renderer/bindings/core/v8/isolated_world_csp.h" +@@ -485,7 +486,10 @@ bool LocalDOMWindow::CanExecuteScripts( + } + return false; + } +- bool script_enabled = GetFrame()->ScriptEnabled(); ++ bool script_enabled = ++ FrameFetchContext::AllowScriptFromSourceWithoutNotifying( ++ Url(), GetFrame()->GetContentSettingsClient(), ++ GetFrame()->GetSettings()); + if (!script_enabled && reason == kAboutToExecuteScript) { + WebContentSettingsClient* settings_client = + GetFrame()->GetContentSettingsClient(); diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc diff --git a/build/patches/Show-NTP-at-startup.patch b/build/patches/Show-NTP-at-startup.patch index 320ac74e..d6af5b69 100644 --- a/build/patches/Show-NTP-at-startup.patch +++ b/build/patches/Show-NTP-at-startup.patch @@ -8,20 +8,27 @@ Until the real tab is opened, no data is retrieved. License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - .../android/java/res/xml/homepage_preferences.xml | 6 ++++++ - .../chrome/browser/BrowserRestartActivity.java | 1 + - .../chrome/browser/ChromeInactivityTracker.java | 13 +++++++++++++ - .../chrome/browser/ChromeTabbedActivity.java | 2 ++ - .../chrome/browser/tasks/ReturnToChromeUtil.java | 12 +++++++++++- - .../browser/preferences/ChromePreferenceKeys.java | 2 ++ - .../preferences/LegacyChromePreferenceKeys.java | 1 + - .../single_tab/SingleTabSwitcherCoordinator.java | 2 +- - .../single_tab/SingleTabSwitcherOnNtpMediator.java | 4 ++-- - .../show-ntp-at-startup.grdp | 9 +++++++++ - .../chrome_feature_list_cc/show-ntp-at-startup.inc | 2 ++ - 11 files changed, 50 insertions(+), 4 deletions(-) + .../java/res/xml/homepage_preferences.xml | 6 ++++ + .../browser/BrowserRestartActivity.java | 1 + + .../browser/ChromeInactivityTracker.java | 14 ++++++++ + .../chrome/browser/ChromeTabbedActivity.java | 2 ++ + .../browser/tasks/ReturnToChromeUtil.java | 16 ++++++++- + .../flags/android/chrome_feature_list.cc | 1 + + .../cromite/sShowNtpAtStartupAndroid.java | 33 +++++++++++++++++++ + .../preferences/ChromePreferenceKeys.java | 2 ++ + .../LegacyChromePreferenceKeys.java | 1 + + .../SingleTabSwitcherCoordinator.java | 2 +- + .../SingleTabSwitcherOnNtpMediator.java | 4 +-- + .../show-ntp-at-startup.grdp | 9 +++++ + .../about_flags_cc/show-ntp-at-startup.inc | 12 +++++++ + .../show-ntp-at-startup.inc | 5 +++ + .../show-ntp-at-startup.inc | 1 + + 15 files changed, 105 insertions(+), 4 deletions(-) + create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/show-ntp-at-startup.grdp + create mode 100644 cromite_flags/chrome/browser/about_flags_cc/show-ntp-at-startup.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc + create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/android/java/res/xml/homepage_preferences.xml --- a/chrome/android/java/res/xml/homepage_preferences.xml @@ -53,15 +60,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BrowserRestartA diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java -@@ -12,6 +12,7 @@ import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; +@@ -12,8 +12,10 @@ import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.lifecycle.DestroyObserver; import org.chromium.chrome.browser.lifecycle.PauseResumeWithNativeObserver; import org.chromium.chrome.browser.lifecycle.StartStopWithNativeObserver; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; ++import org.chromium.chrome.browser.flags.cromite.sShowNtpAtStartupAndroid; -@@ -55,6 +56,18 @@ public class ChromeInactivityTracker + /** + * Manages pref that can track the delay since the last stop of the tracked activity. +@@ -55,6 +57,18 @@ public class ChromeInactivityTracker mLifecycleDispatcher.register(this); } @@ -72,8 +82,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivit + + public boolean isNewStartup() { + return -+ ChromeFeatureList.sShowNtpAtStartupAndroid.isEnabled() -+ && ChromeSharedPreferences.getInstance().readBoolean( ++ sShowNtpAtStartupAndroid.getInstance().isEnabled() && ++ ChromeSharedPreferences.getInstance().readBoolean( + ChromePreferenceKeys.TABBED_ACTIVITY_IS_STARTUP, false); + } + @@ -95,7 +105,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java -@@ -19,6 +19,7 @@ import org.chromium.base.IntentUtils; +@@ -19,9 +19,11 @@ import org.chromium.base.IntentUtils; import org.chromium.base.cached_flags.IntCachedFieldTrialParameter; import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.R; @@ -103,10 +113,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToC import org.chromium.chrome.browser.ChromeInactivityTracker; import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.flags.ChromeFeatureList; -@@ -133,6 +134,15 @@ public final class ReturnToChromeUtil { ++import org.chromium.chrome.browser.flags.cromite.sShowNtpAtStartupAndroid; + import org.chromium.chrome.browser.magic_stack.HomeModulesMetricsUtils; + import org.chromium.chrome.browser.ntp.NewTabPage; + import org.chromium.chrome.browser.tab.Tab; +@@ -133,6 +135,18 @@ public final class ReturnToChromeUtil { return false; } ++ if (!sShowNtpAtStartupAndroid.getInstance().isEnabled()) ++ return false; ++ + boolean isMainIntentFromLauncherOrRestart = + IntentUtils.isMainIntentFromLauncher(intent) + || IntentUtils.safeGetBooleanExtra( @@ -119,7 +136,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToC // Checks whether to show the NTP homepage due to feature flag // HOME_SURFACE_RETURN_TIME_SECONDS. long lastVisibleTimeMs = inactivityTracker.getLastVisibleTimeMs(); -@@ -243,7 +253,7 @@ public final class ReturnToChromeUtil { +@@ -243,7 +257,7 @@ public final class ReturnToChromeUtil { TabModel currentTabModel, TabCreator tabCreator, HomeSurfaceTracker homeSurfaceTracker) { @@ -128,6 +145,55 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToC return false; } +diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc +--- a/chrome/browser/flags/android/chrome_feature_list.cc ++++ b/chrome/browser/flags/android/chrome_feature_list.cc +@@ -295,6 +295,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { + &kReportParentalControlSitesChild, + &kSearchInCCT, + &kSearchResumptionModuleAndroid, ++ &kShowNtpAtStartupAndroid, + &kShareCustomActionsInCCT, + &kSmallerTabStripTitleLimit, + &kSuppressToolbarCaptures, +diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java +@@ -0,0 +1,33 @@ ++/* ++ This file is part of Cromite. ++ ++ Cromite is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ Cromite is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with Cromite. If not, see . ++*/ ++ ++package org.chromium.chrome.browser.flags.cromite; ++ ++import org.chromium.base.cached_flags.CachedFlag; ++import org.chromium.chrome.browser.flags.ChromeFeatureMap; ++ ++public class sShowNtpAtStartupAndroid { ++ private static final CachedFlag sInstance = ++ new CachedFlag(ChromeFeatureMap.getInstance(), ++ "ShowNtpAtStartupAndroid", false); ++ ++ private sShowNtpAtStartupAndroid() {} ++ ++ public static CachedFlag getInstance() { ++ return sInstance; ++ } ++} diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java @@ -171,7 +237,7 @@ diff --git a/chrome/browser/single_tab/android/java/src/org/chromium/chrome/brow super.onPageLoadFinished(tab, url); mPropertyModel.set(TITLE, tab.getTitle()); - mPropertyModel.set(URL, getDomainUrl(tab.getUrl())); -+ mPropertyModel.set(URL, tab.getUrl().getPossiblyInvalidSpec())); ++ mPropertyModel.set(URL, tab.getUrl().getPossiblyInvalidSpec()); tab.removeObserver(this); } }; @@ -179,7 +245,7 @@ diff --git a/chrome/browser/single_tab/android/java/src/org/chromium/chrome/brow } else { mPropertyModel.set(TITLE, mMostRecentTab.getTitle()); - mPropertyModel.set(URL, getDomainUrl(mMostRecentTab.getUrl())); -+ mPropertyModel.set(URL, mMostRecentTab.getUrl().getPossiblyInvalidSpec())); ++ mPropertyModel.set(URL, mMostRecentTab.getUrl().getPossiblyInvalidSpec()); } } @@ -197,11 +263,37 @@ new file mode 100644 + Enable showing a NewTabPage at startup and allows selection of the last open tab + + +diff --git a/cromite_flags/chrome/browser/about_flags_cc/show-ntp-at-startup.inc b/cromite_flags/chrome/browser/about_flags_cc/show-ntp-at-startup.inc +new file mode 100644 +--- /dev/null ++++ b/cromite_flags/chrome/browser/about_flags_cc/show-ntp-at-startup.inc +@@ -0,0 +1,12 @@ ++#if BUILDFLAG(IS_ANDROID) ++ ++#ifdef FLAG_SECTION ++ ++ {"enable-show-ntp-at-startup", ++ "Show a NewTabPage at startup", ++ "Enable showing a NewTabPage at startup after leaving Cromite for a while.", kOsAndroid, ++ FEATURE_VALUE_TYPE(chrome::android::kShowNtpAtStartupAndroid)}, ++ ++#endif ++ ++#endif diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc new file mode 100644 --- /dev/null +++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc -@@ -0,0 +1,2 @@ +@@ -0,0 +1,5 @@ +SET_CROMITE_FEATURE_ENABLED(kStartSurfaceReturnTime); -+SET_CROMITE_FEATURE_ENABLED(kShowNtpAtStartupAndroid); ++ ++CROMITE_FEATURE(kShowNtpAtStartupAndroid, ++ "ShowNtpAtStartupAndroid", ++ base::FEATURE_ENABLED_BY_DEFAULT); +diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc +new file mode 100644 +--- /dev/null ++++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc +@@ -0,0 +1 @@ ++BASE_DECLARE_FEATURE(kShowNtpAtStartupAndroid); -- diff --git a/build/patches/Site-setting-for-images.patch b/build/patches/Site-setting-for-images.patch index 14da4d31..02fabfec 100644 --- a/build/patches/Site-setting-for-images.patch +++ b/build/patches/Site-setting-for-images.patch @@ -20,14 +20,14 @@ Require: Content-settings-infrastructure.patch .../platform/web_content_settings_client.h | 5 + .../blink/renderer/core/frame/local_frame.cc | 13 --- .../blink/renderer/core/frame/local_frame.h | 6 -- - .../renderer/core/html/image_document.cc | 5 +- + .../renderer/core/html/image_document.cc | 9 +- .../core/loader/frame_fetch_context.cc | 12 +-- .../core/loader/frame_fetch_context.h | 2 +- third_party/blink/renderer/core/page/page.cc | 5 +- .../platform/loader/fetch/fetch_context.h | 2 +- .../platform/loader/fetch/resource_fetcher.cc | 17 +++- .../platform/loader/fetch/resource_fetcher.h | 2 + - 21 files changed, 174 insertions(+), 36 deletions(-) + 21 files changed, 178 insertions(+), 36 deletions(-) create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-hdpi/permission_images.png create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-mdpi/permission_images.png create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xhdpi/permission_images.png @@ -362,14 +362,18 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/b diff --git a/third_party/blink/renderer/core/html/image_document.cc b/third_party/blink/renderer/core/html/image_document.cc --- a/third_party/blink/renderer/core/html/image_document.cc +++ b/third_party/blink/renderer/core/html/image_document.cc -@@ -140,7 +140,10 @@ void ImageDocumentParser::AppendBytes(const char* data, size_t length) { +@@ -140,7 +140,14 @@ void ImageDocumentParser::AppendBytes(const char* data, size_t length) { return; LocalFrame* frame = GetDocument()->GetFrame(); - bool allow_image = frame->ImagesEnabled(); + Settings* settings = frame->GetSettings(); + bool allow_image_renderer = !settings || settings->GetImagesEnabled(); -+ bool allow_image_content_setting = frame->GetContentSettings()->allow_image; ++ bool allow_image_content_setting = false; ++ if (auto* client = frame->GetContentSettingsClient()) { ++ allow_image_content_setting = client->AllowImage(allow_image_renderer, ++ GetDocument()->Url()); ++ } + bool allow_image = allow_image_renderer && allow_image_content_setting; if (!allow_image) { auto* client = frame->GetContentSettingsClient(); diff --git a/build/patches/Timezone-customization.patch b/build/patches/Timezone-customization.patch index c717c066..6604230b 100644 --- a/build/patches/Timezone-customization.patch +++ b/build/patches/Timezone-customization.patch @@ -30,9 +30,9 @@ Require: Content-settings-infrastructure.patch .../common/content_settings_mojom_traits.cc | 3 +- .../common/content_settings_mojom_traits.h | 5 + .../content_settings/core/common/pref_names.h | 3 + - .../renderer/content_settings_agent_impl.cc | 78 +++++++ + .../renderer/content_settings_agent_impl.cc | 77 +++++++ .../renderer/content_settings_agent_impl.h | 11 + - 22 files changed, 679 insertions(+), 1 deletion(-) + 22 files changed, 678 insertions(+), 1 deletion(-) create mode 100755 components/browser_ui/site_settings/android/java/res/layout/time_zone_select_dialog.xml create mode 100755 components/browser_ui/site_settings/android/java/res/layout/timezoneoverride_site_settings_preference.xml create mode 100755 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/TimezoneOverrideSiteSettingsPreference.java @@ -839,23 +839,15 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings.mojom.h" #include "components/content_settings/core/common/content_settings_pattern.h" -@@ -368,6 +370,7 @@ bool ContentSettingsAgentImpl::AllowScript(bool enabled_per_settings) { - allow = allow || IsAllowlistedForContentSettingsCromite(); +@@ -169,6 +171,7 @@ void ContentSettingsAgentImpl::DidCommitProvisionalLoad( + // correctly detect that a piece of content flipped from "not blocked" to + // "blocked". + ClearBlockedContentSettings(); // do not remove ++ UpdateOverrides(); - cached_script_permissions_[frame] = allow; -+ if (allow) UpdateOverrides(); - return allow; - } - -@@ -383,6 +386,7 @@ bool ContentSettingsAgentImpl::AllowScriptFromSource( - ContentSettingsType::JAVASCRIPT, script_url, enabled_per_settings); - } - allow = allow || IsAllowlistedForContentSettingsCromite(); -+ if (allow) UpdateOverrides(); - return allow; - } - -@@ -480,4 +484,78 @@ bool ContentSettingsAgentImpl::IsAllowlistedForContentSettingsCromite() const { + blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); + if (frame->Parent()) +@@ -480,4 +483,78 @@ bool ContentSettingsAgentImpl::IsAllowlistedForContentSettingsCromite() const { return false; } diff --git a/build/patches/Viewport-Protection-flag.patch b/build/patches/Viewport-Protection-flag.patch index c9f83759..8f1e5129 100644 --- a/build/patches/Viewport-Protection-flag.patch +++ b/build/patches/Viewport-Protection-flag.patch @@ -518,7 +518,7 @@ diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/ + if (with_zoom_factor) + ratio *= LayoutZoomFactor(); + else -+ ratio = page_zoom_factor_; ++ ratio = layout_zoom_factor_; return ratio; } diff --git a/build/patches/Warning-message-for-unsupported-hardware-aes.patch b/build/patches/Warning-message-for-unsupported-hardware-aes.patch index 949e965a..e4699260 100644 --- a/build/patches/Warning-message-for-unsupported-hardware-aes.patch +++ b/build/patches/Warning-message-for-unsupported-hardware-aes.patch @@ -10,17 +10,17 @@ attacks, so it is better to warn the user of the presence of an unsupported device. you can remove the message by going to chrome://flags/#no-hw-aes-warning --- - base/base_switches.cc | 2 ++ - base/base_switches.h | 1 + - chrome/BUILD.gn | 3 +++ - chrome/app/chrome_main_delegate.cc | 10 ++++++++++ - chrome/app/generated_resources.grd | 4 ++++ - chrome/browser/ui/startup/bad_flags_prompt.cc | 9 +++++++++ - .../browser/renderer_host/render_process_host_impl.cc | 1 + - .../Warning-message-for-unsupported-hardware-aes.inc | 9 +++++++++ - .../Warning-message-for-unsupported-hardware-aes.inc | 4 ++++ - .../Warning-message-for-unsupported-hardware-aes.inc | 1 + - 10 files changed, 44 insertions(+) + base/base_switches.cc | 2 ++ + base/base_switches.h | 1 + + chrome/BUILD.gn | 3 +++ + chrome/app/chrome_main_delegate.cc | 9 +++++++++ + chrome/app/generated_resources.grd | 4 ++++ + chrome/browser/ui/startup/bad_flags_prompt.cc | 9 +++++++++ + .../browser/renderer_host/render_process_host_impl.cc | 1 + + .../Warning-message-for-unsupported-hardware-aes.inc | 9 +++++++++ + .../Warning-message-for-unsupported-hardware-aes.inc | 4 ++++ + .../Warning-message-for-unsupported-hardware-aes.inc | 1 + + 10 files changed, 43 insertions(+) create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Warning-message-for-unsupported-hardware-aes.inc create mode 100644 cromite_flags/content/public/common/content_features_cc/Warning-message-for-unsupported-hardware-aes.inc create mode 100644 cromite_flags/content/public/common/content_features_h/Warning-message-for-unsupported-hardware-aes.inc @@ -81,12 +81,11 @@ diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegat #if BUILDFLAG(IS_WIN) #include -@@ -1290,6 +1293,13 @@ std::optional ChromeMainDelegate::BasicStartupComplete() { +@@ -1290,6 +1293,12 @@ std::optional ChromeMainDelegate::BasicStartupComplete() { return chrome::RESULT_CODE_INVALID_SANDBOX_STATE; #endif +if (!command_line.HasSwitch(switches::kProcessType)) { -+ crypto::EnsureOpenSSLInit(); + if (EVP_has_aes_hardware() == 0) { + base::CommandLine::ForCurrentProcess()->AppendSwitch(switches::kNoAESHardware); + } diff --git a/build/patches/eyeo-beta-118.0.5993.48-base.patch b/build/patches/eyeo-beta-118.0.5993.48-base.patch index 992a6058..ea78607e 100644 --- a/build/patches/eyeo-beta-118.0.5993.48-base.patch +++ b/build/patches/eyeo-beta-118.0.5993.48-base.patch @@ -27,7 +27,7 @@ Based on Chromium 118.0.5993.48 .../browser/adblock_webcontents_observer.cc | 188 +++ .../browser/adblock_webcontents_observer.h | 85 + .../content_security_policy_injector.h | 61 + - .../content_security_policy_injector_impl.cc | 125 ++ + .../content_security_policy_injector_impl.cc | 126 ++ .../content_security_policy_injector_impl.h | 66 + .../adblock/content/browser/element_hider.h | 70 + .../content/browser/element_hider_impl.cc | 323 ++++ @@ -223,7 +223,7 @@ Based on Chromium 118.0.5993.48 tools/eyeo/generate_modules.sh | 209 +++ tools/eyeo/snippets_deps.py | 61 + tools/gritsettings/resource_ids.spec | 9 + - 219 files changed, 22050 insertions(+), 3 deletions(-) + 219 files changed, 22051 insertions(+), 3 deletions(-) create mode 100644 components/adblock/CHANGELOG.md create mode 100644 components/adblock/LICENSE create mode 100644 components/adblock/README.md @@ -4234,7 +4234,7 @@ diff --git a/components/adblock/content/browser/content_security_policy_injector new file mode 100644 --- /dev/null +++ b/components/adblock/content/browser/content_security_policy_injector_impl.cc -@@ -0,0 +1,125 @@ +@@ -0,0 +1,126 @@ +/* + * This file is part of eyeo Chromium SDK, + * Copyright (C) 2006-present eyeo GmbH @@ -4267,12 +4267,13 @@ new file mode 100644 +namespace adblock { +namespace { + -+std::set GetCspInjections( ++std::set GetCspInjections( + const SubscriptionService::Snapshot subscription_collections, + const GURL request_url, + const std::vector frame_hierarchy_chain) { + TRACE_EVENT1("eyeo", "GetCspInjection", "url", request_url.spec()); -+ std::set injections; ++ std::set injections; ++ if ((true)) return injections; + for (const auto& collection : subscription_collections) { + const auto injection = + collection->GetCspInjections(request_url, frame_hierarchy_chain); @@ -4332,7 +4333,7 @@ new file mode 100644 + const GURL request_url, + const scoped_refptr headers, + InsertContentSecurityPolicyHeadersCallback callback, -+ std::set csp_injections) { ++ std::set csp_injections) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!csp_injections.empty()) { + for (const auto& c_i : csp_injections) { @@ -4415,7 +4416,7 @@ new file mode 100644 + const GURL request_url, + const scoped_refptr headers, + InsertContentSecurityPolicyHeadersCallback callback, -+ std::set csp_injections); ++ std::set csp_injections); + + void OnUpdatedHeadersParsed( + InsertContentSecurityPolicyHeadersCallback callback, @@ -4583,7 +4584,7 @@ new file mode 100644 +} + +void GenerateStylesheet(const GURL& url, -+ std::vector& input, ++ std::vector& input, + std::string& output) { + TRACE_EVENT1("eyeo", "GenerateStylesheet", "url", url.spec()); + // Chromium's Blink engine supports only up to 8,192 simple selectors, and @@ -4599,7 +4600,7 @@ new file mode 100644 + const size_t max_selector_count = 1024u; + for (size_t i = 0; i < input.size(); i += max_selector_count) { + const size_t batch_size = std::min(max_selector_count, input.size() - i); -+ const base::span selectors_batch(&input[i], batch_size); ++ const base::span selectors_batch(&input[i], batch_size); + output += base::JoinString(selectors_batch, ", ") + + " {display: none !important;}\n"; + } @@ -4607,7 +4608,7 @@ new file mode 100644 + +void GenerateElemHidingEmuJavaScript( + const GURL& url, -+ const std::vector& input, ++ const std::vector& input, + std::string& output) { + TRACE_EVENT1("eyeo", "GenerateElemHidingEmuJavaScript", "url", url.spec()); + // build the string with selectors @@ -4669,8 +4670,8 @@ new file mode 100644 + const SiteKey sitekey) { + TRACE_EVENT1("eyeo", "PrepareElemhideEmulationData", "url", url.spec()); + -+ std::vector stylesheet; -+ std::vector elemhide_js; ++ std::vector stylesheet; ++ std::vector elemhide_js; + base::Value::List snippet_js; + for (const auto& collection : subscription_collections) { + bool doc_allowlisted = !!collection->FindBySpecialFilter( @@ -5024,7 +5025,7 @@ new file mode 100644 +// Do not use GURL::IsAboutBlank for frame hierarchy, it returns true for valid +// src like `about:blank?eyeo=true` +bool IsExactlyAboutBlank(const GURL url) { -+ static const base::StringPiece kAboutBlankUrl = "about:blank"; ++ static const std::string_view kAboutBlankUrl = "about:blank"; + return url == kAboutBlankUrl; +} + @@ -8163,7 +8164,7 @@ new file mode 100644 +using ClassificationResult = ResourceClassifier::ClassificationResult; + +std::optional IsHeaderFilterOverruled( -+ base::StringPiece blocking_header_filter, ++ std::string_view blocking_header_filter, + std::set& allowing_filters) { + for (auto filter : allowing_filters) { + if (filter.header_filter.empty()) { @@ -8180,7 +8181,7 @@ new file mode 100644 +} + +bool ContainsHeaderValue(const scoped_refptr& headers, -+ base::StringPiece header_name, ++ std::string_view header_name, + const std::string& header_value) { + size_t iter = 0; + std::string value; @@ -8853,7 +8854,7 @@ new file mode 100644 + return kCustomFiltersUrl; +} + -+base::StringPiece RewriteUrl(flat::AbpResource type) { ++std::string_view RewriteUrl(flat::AbpResource type) { + switch (type) { + case flat::AbpResource_BlankText: + return "data:text/plain,"; @@ -8933,7 +8934,7 @@ new file mode 100644 +const std::string& CurrentSchemaVersion(); +const GURL& TestPagesSubscriptionUrl(); +const GURL& CustomFiltersUrl(); -+base::StringPiece RewriteUrl(flat::AbpResource type); ++std::string_view RewriteUrl(flat::AbpResource type); + +bool IsEyeoFilteringDisabledByDefault(); + @@ -9258,8 +9259,8 @@ new file mode 100644 + resource_id)); +} + -+bool RegexMatches(base::StringPiece pattern, -+ base::StringPiece input, ++bool RegexMatches(std::string_view pattern, ++ std::string_view input, + bool case_sensitive) { + re2::RE2::Options options; + options.set_case_sensitive(case_sensitive); @@ -9375,8 +9376,8 @@ new file mode 100644 +std::unique_ptr MakeFlatbufferDataFromResourceBundle( + int resource_id); + -+bool RegexMatches(base::StringPiece pattern, -+ base::StringPiece input, ++bool RegexMatches(std::string_view pattern, ++ std::string_view input, + bool case_sensitive); + +} // namespace utils @@ -9753,7 +9754,7 @@ new file mode 100644 +namespace adblock { + +struct HeaderFilterData { -+ base::StringPiece header_filter; ++ std::string_view header_filter; + GURL subscription_url; + // required by std::set + bool operator<(const HeaderFilterData& other) const { @@ -9792,7 +9793,7 @@ new file mode 100644 +namespace adblock { +namespace utils { + -+bool IsBadKeyword(base::StringPiece value) { ++bool IsBadKeyword(std::string_view value) { + return value == "http" || value == "https" || value == "com" || + value == "js" || value.size() < 2; +} @@ -9829,7 +9830,7 @@ new file mode 100644 +namespace adblock { +namespace utils { + -+bool IsBadKeyword(base::StringPiece value); ++bool IsBadKeyword(std::string_view value); + +} // namespace utils +} // namespace adblock @@ -9864,8 +9865,8 @@ new file mode 100644 + +namespace adblock { + -+std::optional ExtractRegexFilterFromPattern( -+ base::StringPiece filter_pattern) { ++std::optional ExtractRegexFilterFromPattern( ++ std::string_view filter_pattern) { + if (!(filter_pattern.size() > 2 && filter_pattern.front() == '/' && + filter_pattern.back() == '/')) { + return absl::nullopt; @@ -9907,8 +9908,8 @@ new file mode 100644 +// For a regex filter "/{expression}/" returns "{expression}". +// For non-regex filters, returns nullopt. +// Cheap, may be used to identify regex filter patterns. -+std::optional ExtractRegexFilterFromPattern( -+ base::StringPiece filter_pattern); ++std::optional ExtractRegexFilterFromPattern( ++ std::string_view filter_pattern); +} // namespace adblock + +#endif // COMPONENTS_ADBLOCK_CORE_COMMON_REGEX_FILTER_PATTERN_H_ @@ -10215,13 +10216,13 @@ new file mode 100644 +namespace adblock { +namespace { + -+constexpr auto kEnabledKey = base::StringPiece("enabled"); -+constexpr auto kDomainsKey = base::StringPiece("domains"); -+constexpr auto kCustomFiltersKey = base::StringPiece("filters"); -+constexpr auto kFilterListsKey = base::StringPiece("subscriptions"); ++constexpr auto kEnabledKey = std::string_view("enabled"); ++constexpr auto kDomainsKey = std::string_view("domains"); ++constexpr auto kCustomFiltersKey = std::string_view("filters"); ++constexpr auto kFilterListsKey = std::string_view("subscriptions"); + +base::Value::Dict ReadFromPrefs(PrefService* pref_service, -+ base::StringPiece configuration_name) { ++ std::string_view configuration_name) { + const auto& all_configurations = + pref_service + ->GetValue(filtering_configuration::prefs::kConfigurationsPrefsPath) @@ -10235,7 +10236,7 @@ new file mode 100644 + +void StoreToPrefs(const base::Value::Dict& configuration, + PrefService* pref_service, -+ base::StringPiece configuration_name) { ++ std::string_view configuration_name) { + // ScopedDictPrefUpdate requires an std::string for some reason: + static std::string kConfigurationsPrefsPathString( + filtering_configuration::prefs::kConfigurationsPrefsPath); @@ -10253,7 +10254,7 @@ new file mode 100644 +} + +bool AppendToList(base::Value::Dict& configuration, -+ base::StringPiece key, ++ std::string_view key, + const std::string& value) { + DCHECK(configuration.FindList(key)); // see SetDefaultValuesIfNeeded(). + auto* list = configuration.FindList(key); @@ -10266,7 +10267,7 @@ new file mode 100644 +} + +bool RemoveFromList(base::Value::Dict& configuration, -+ base::StringPiece key, ++ std::string_view key, + const std::string& value) { + DCHECK(configuration.FindList(key)); // see SetDefaultValuesIfNeeded(). + auto* list = configuration.FindList(key); @@ -10281,7 +10282,7 @@ new file mode 100644 + +template +std::vector GetFromList(const base::Value::Dict& configuration, -+ base::StringPiece key) { ++ std::string_view key) { + DCHECK(configuration.FindList(key)); // see SetDefaultValuesIfNeeded(). + const auto* list = configuration.FindList(key); + std::vector result; @@ -10844,7 +10845,7 @@ new file mode 100644 +void FlatbufferConverter::ConvertFilter( + const std::string& line, + FlatbufferSerializer& flatbuffer_serializer) { -+ const base::StringPiece filter_str = ++ const std::string_view filter_str = + base::TrimWhitespaceASCII(line, base::TRIM_ALL); + if (base::StartsWith(filter_str, kCommentPrefix) || filter_str.empty()) { + return; @@ -11057,9 +11058,9 @@ new file mode 100644 + +// static +std::optional ContentFilter::FromString( -+ base::StringPiece domain_list, ++ std::string_view domain_list, + FilterType filter_type, -+ base::StringPiece selector) { ++ std::string_view selector) { + DCHECK(filter_type == FilterType::ElemHide || + filter_type == FilterType::ElemHideException || + filter_type == FilterType::ElemHideEmulation); @@ -11090,7 +11091,7 @@ new file mode 100644 +} + +ContentFilter::ContentFilter(FilterType type, -+ base::StringPiece selector, ++ std::string_view selector, + DomainOption domains) + : type(type), + selector(selector.data(), selector.size()), @@ -11134,9 +11135,9 @@ new file mode 100644 + +class ContentFilter { + public: -+ static std::optional FromString(base::StringPiece domain_list, ++ static std::optional FromString(std::string_view domain_list, + FilterType type, -+ base::StringPiece selector); ++ std::string_view selector); + + ~ContentFilter(); + @@ -11146,7 +11147,7 @@ new file mode 100644 + + private: + ContentFilter(FilterType type, -+ base::StringPiece selector, ++ std::string_view selector, + DomainOption domains); +}; + @@ -11197,8 +11198,8 @@ new file mode 100644 +DomainOption::DomainOption() {} + +// static -+DomainOption DomainOption::FromString(base::StringPiece domains_list, -+ base::StringPiece separator) { ++DomainOption DomainOption::FromString(std::string_view domains_list, ++ std::string_view separator) { + static const std::string_view kExclusionPrefix = "~"; + auto lower_domains_list = base::ToLowerASCII(domains_list); + auto domains = @@ -11206,7 +11207,7 @@ new file mode 100644 + base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + + const auto first_include_domain_it = std::partition( -+ domains.begin(), domains.end(), [](base::StringPiece domain) { ++ domains.begin(), domains.end(), [](std::string_view domain) { + return base::StartsWith(domain, kExclusionPrefix); + }); + @@ -11266,9 +11267,9 @@ new file mode 100644 +DomainOption::~DomainOption() = default; + +// static -+bool DomainOption::HasSubdomainOrLocalhost(base::StringPiece domain) { ++bool DomainOption::HasSubdomainOrLocalhost(std::string_view domain) { + return (domain == "localhost") || -+ (domain.find(".") != base::StringPiece::npos); ++ (domain.find(".") != std::string_view::npos); +} + +} // namespace adblock @@ -11308,8 +11309,8 @@ new file mode 100644 + public: + DomainOption(); + -+ static DomainOption FromString(base::StringPiece domains_list, -+ base::StringPiece separator); ++ static DomainOption FromString(std::string_view domains_list, ++ std::string_view separator); + + DomainOption(const DomainOption& other); + DomainOption(DomainOption&& other); @@ -11327,7 +11328,7 @@ new file mode 100644 + DomainOption(std::vector exclude_domains, + std::vector include_domains); + -+ static bool HasSubdomainOrLocalhost(base::StringPiece domain); ++ static bool HasSubdomainOrLocalhost(std::string_view domain); + + std::vector exclude_domains_; + std::vector include_domains_; @@ -11363,7 +11364,7 @@ new file mode 100644 +namespace adblock { + +// static -+FilterType FilterClassifier::FilterTypeFromString(base::StringPiece separator) { ++FilterType FilterClassifier::FilterTypeFromString(std::string_view separator) { + if (base::StartsWith(separator, kElemHideFilterSeparator)) { + return FilterType::ElemHide; + } @@ -11425,7 +11426,7 @@ new file mode 100644 + +class FilterClassifier { + public: -+ static FilterType FilterTypeFromString(base::StringPiece separator); ++ static FilterType FilterTypeFromString(std::string_view separator); +}; + +} // namespace adblock @@ -11682,8 +11683,8 @@ new file mode 100644 + +// static +std::optional SnippetFilter::FromString( -+ base::StringPiece domain_list, -+ base::StringPiece snippet) { ++ std::string_view domain_list, ++ std::string_view snippet) { + if (snippet.empty()) { + VLOG(1) << "[eyeo] Filter has no snippet script."; + return {}; @@ -11750,8 +11751,8 @@ new file mode 100644 + +class SnippetFilter { + public: -+ static std::optional FromString(base::StringPiece domain_list, -+ base::StringPiece snippet); ++ static std::optional FromString(std::string_view domain_list, ++ std::string_view snippet); + + SnippetFilter(const SnippetFilter& other); + SnippetFilter(SnippetFilter&& other); @@ -11800,7 +11801,7 @@ new file mode 100644 +namespace adblock { + +SnippetTokenizer::SnippetScript SnippetTokenizer::Tokenize( -+ base::StringPiece input) { ++ std::string_view input) { + SnippetScript script; + std::string token; + std::vector arguments; @@ -11912,7 +11913,7 @@ new file mode 100644 + public: + using SnippetScript = std::vector>; + -+ static SnippetScript Tokenize(base::StringPiece input); ++ static SnippetScript Tokenize(std::string_view input); + + private: + static void AddEscapeChar(std::string& token, char ch); @@ -11967,7 +11968,7 @@ new file mode 100644 +// Pipe characters in anchor position (beginning & end) must be left as-is, in +// order for the tokenizer to see them as anchors. +std::string SanitizePipeCharacters(std::string pattern) { -+ auto piece = base::StringPiece(pattern); ++ auto piece = std::string_view(pattern); + // Skip up to 2 leading | characters, they are treated as anchors. These + // may not be replaced by the escaped variant. + int number_of_left_anchors = 0; @@ -11984,7 +11985,7 @@ new file mode 100644 + if (pattern_has_right_anchor) { + piece.remove_suffix(1); + } -+ if (piece.find('|') == base::StringPiece::npos) { ++ if (piece.find('|') == std::string_view::npos) { + // The most common case, pattern has no pipe characters apart from anchors. + // Avoid allocating new strings, pass the input out. + return pattern; @@ -12008,7 +12009,7 @@ new file mode 100644 +static constexpr char kOptionSymbol = '$'; + +bool IsGenericFilterIsNotSpecificEnough( -+ base::StringPiece filter_str, ++ std::string_view filter_str, + const std::optional& options) { + if (options.has_value() && (!options->Domains().GetExcludeDomains().empty() || + !options->Domains().GetIncludeDomains().empty() || @@ -12717,7 +12718,7 @@ new file mode 100644 + return base::ToLowerASCII(current_keyword); +} + -+FilterKeywordExtractor::FilterKeywordExtractor(base::StringPiece url) ++FilterKeywordExtractor::FilterKeywordExtractor(std::string_view url) + : input_(url.data(), url.size()), end_of_last_keyword_(input_.begin()) {} +FilterKeywordExtractor::~FilterKeywordExtractor() = default; + @@ -12774,7 +12775,7 @@ new file mode 100644 +// "adblockplus". +class FilterKeywordExtractor { + public: -+ explicit FilterKeywordExtractor(base::StringPiece url); ++ explicit FilterKeywordExtractor(std::string_view url); + ~FilterKeywordExtractor(); + std::optional GetNextKeyword(); + @@ -12956,9 +12957,9 @@ new file mode 100644 + ? builder_.CreateSharedString(options.Headers().value()) + : flatbuffers::Offset()); + -+ const std::optional keyword_pattern = ++ const std::optional keyword_pattern = + ExtractRegexFilterFromPattern(url_filter.pattern).has_value() -+ ? std::optional() ++ ? std::optional() + : url_filter.pattern; + + if (options.Headers().has_value()) { @@ -13014,7 +13015,7 @@ new file mode 100644 + +void FlatbufferSerializer::AddUrlFilterToIndex( + UrlFilterIndex& index, -+ std::optional pattern_text, ++ std::optional pattern_text, + flatbuffers::Offset filter) { + const auto keyword = + pattern_text ? FindCandidateKeyword(index, *pattern_text) : ""; @@ -13116,7 +13117,7 @@ new file mode 100644 + +std::string FlatbufferSerializer::FindCandidateKeyword( + UrlFilterIndex& index, -+ base::StringPiece value) { ++ std::string_view value) { + FilterKeywordExtractor keyword_extractor(value); + size_t last_size = std::numeric_limits::max(); + std::string keyword; @@ -13136,7 +13137,7 @@ new file mode 100644 + +// static +std::string FlatbufferSerializer::EscapeSelector( -+ const base::StringPiece& value) { ++ const std::string_view& value) { + std::string escaped; + base::ReplaceChars(value, "{", "\\7b ", &escaped); + base::ReplaceChars(escaped, "}", "\\7d ", &escaped); @@ -13251,7 +13252,7 @@ new file mode 100644 + std::vector>>; + + void AddUrlFilterToIndex(UrlFilterIndex& index, -+ std::optional pattern_text, ++ std::optional pattern_text, + flatbuffers::Offset filter); + void AddElemhideFilterForDomains( + ElemhideIndex& index, @@ -13283,9 +13284,9 @@ new file mode 100644 + WriteSnippetFilterIndex(const SnippetIndex& index); + + std::string FindCandidateKeyword(UrlFilterIndex& index, -+ base::StringPiece value); ++ std::string_view value); + -+ static std::string EscapeSelector(const base::StringPiece& value); ++ static std::string EscapeSelector(const std::string_view& value); + + static flat::ThirdParty ThirdPartyOptionToFb( + UrlFilterOptions::ThirdPartyOption option); @@ -14188,10 +14189,10 @@ new file mode 100644 + +namespace adblock { + -+DomainSplitter::DomainSplitter(base::StringPiece domain) ++DomainSplitter::DomainSplitter(std::string_view domain) + : domain_(base::TrimString(domain, ".", base::TRIM_ALL)) {} + -+std::optional DomainSplitter::FindNextSubdomain() { ++std::optional DomainSplitter::FindNextSubdomain() { + const auto old_dot_pos = dot_pos_; + if (dot_pos_ < domain_.size()) { + // Find next dot in domain, for future iteration to consume. @@ -14248,12 +14249,12 @@ new file mode 100644 +class DomainSplitter { + public: + // |domain| must outlive this, no copy made. -+ explicit DomainSplitter(base::StringPiece domain); ++ explicit DomainSplitter(std::string_view domain); + // Returns reference to part of |domain|. -+ std::optional FindNextSubdomain(); ++ std::optional FindNextSubdomain(); + + private: -+ const base::StringPiece domain_; ++ const std::string_view domain_; + size_t dot_pos_ = 0; +}; + @@ -15053,8 +15054,8 @@ new file mode 100644 + // Subscription because there may be multiple subscriptions and + // |elemhide_exceptions| from one subscriptions may remove + // |elemhide_selectors| from another. -+ std::vector elemhide_selectors; -+ std::vector elemhide_exceptions; ++ std::vector elemhide_selectors; ++ std::vector elemhide_exceptions; + }; + + class Snippet { @@ -15065,8 +15066,8 @@ new file mode 100644 + ~Snippet(); + Snippet& operator=(const Snippet&); + Snippet& operator=(Snippet&&); -+ base::StringPiece command; -+ std::vector arguments; ++ std::string_view command; ++ std::vector arguments; + }; + + virtual bool HasUrlFilter(const GURL& url, @@ -15088,9 +15089,9 @@ new file mode 100644 + virtual void FindCspFilters(const GURL& url, + const std::string& document_domain, + FilterCategory category, -+ std::set& results) const = 0; ++ std::set& results) const = 0; + // Find all rewrite filters matching category. -+ virtual std::set FindRewriteFilters( ++ virtual std::set FindRewriteFilters( + const GURL& url, + const std::string& document_domain, + FilterCategory category) const = 0; @@ -15185,8 +15186,8 @@ new file mode 100644 + net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); +} + -+bool DomainMatches(base::StringPiece filter_domain, -+ base::StringPiece document_domain) { ++bool DomainMatches(std::string_view filter_domain, ++ std::string_view document_domain) { + // document_domain is same as filter_domain: + // - document: subdomain.example.com + // - filter: subdomain.example.com @@ -15203,11 +15204,11 @@ new file mode 100644 +} + +bool DomainOnList( -+ base::StringPiece document_domain, ++ std::string_view document_domain, + const flatbuffers::Vector>* list) { + return std::any_of(list->begin(), list->end(), [&](auto* filter_domain) { + return DomainMatches( -+ base::StringPiece(filter_domain->c_str(), filter_domain->size()), ++ std::string_view(filter_domain->c_str(), filter_domain->size()), + document_domain); + }); +} @@ -15286,7 +15287,7 @@ new file mode 100644 + const GURL& url, + const std::string& document_domain, + FilterCategory category, -+ std::set& results) const { ++ std::set& results) const { + for (auto* filter : FindInternal(category != FilterCategory::Allowing + ? index_->url_csp_block() + : index_->url_csp_allow(), @@ -15295,17 +15296,17 @@ new file mode 100644 + DCHECK(category == FilterCategory::Allowing || filter->csp_filter()) + << "Blocking CSP filter must contain payload"; + results.insert(filter->csp_filter() -+ ? base::StringPiece(filter->csp_filter()->c_str(), ++ ? std::string_view(filter->csp_filter()->c_str(), + filter->csp_filter()->size()) -+ : base::StringPiece()); ++ : std::string_view()); + } +} + -+std::set InstalledSubscriptionImpl::FindRewriteFilters( ++std::set InstalledSubscriptionImpl::FindRewriteFilters( + const GURL& url, + const std::string& document_domain, + FilterCategory category) const { -+ std::set result; ++ std::set result; + for (auto* filter : FindInternal(category != FilterCategory::Allowing + ? index_->url_rewrite_block() + : index_->url_rewrite_allow(), @@ -15329,7 +15330,7 @@ new file mode 100644 + category, FindStrategy::FindAll)) { + DCHECK(category == FilterCategory::Allowing || filter->header_filter()) + << "Blocking header filter must contain header_filter() payload"; -+ results.insert({base::StringPiece(filter->header_filter()->c_str(), ++ results.insert({std::string_view(filter->header_filter()->c_str(), + filter->header_filter()->size()), + GetSourceUrl()}); + } @@ -15361,9 +15362,9 @@ new file mode 100644 + .empty(); +} + -+std::vector InstalledSubscriptionImpl::GetSelectorsForDomain( ++std::vector InstalledSubscriptionImpl::GetSelectorsForDomain( + const flat::ElemHideFiltersByDomain* category, -+ base::StringPiece domain) const { ++ std::string_view domain) const { + TRACE_EVENT1("eyeo", "InstalledSubscriptionImpl::GetSelectorsForDomain", + "domain", domain); + @@ -15372,7 +15373,7 @@ new file mode 100644 + return {}; + } + -+ std::vector selectors; ++ std::vector selectors; + for (auto* filter : *category->filter()) { + const bool filter_disallowed_by_excludes = + // Some exclusions apply on this domain: @@ -15474,7 +15475,7 @@ new file mode 100644 + +void InstalledSubscriptionImpl::FindFiltersForKeyword( + const UrlFilterIndex* index, -+ base::StringPiece keyword, ++ std::string_view keyword, + const GURL& url, + const GURL& lowercase_url, + std::optional content_type, @@ -15506,7 +15507,7 @@ new file mode 100644 + // During flatbuffer conversion, the pattern is lowercased for + // case-insensitive filters, and left in original form for case-sensitive + // filters. -+ const base::StringPiece pattern(filter->pattern()->c_str(), ++ const std::string_view pattern(filter->pattern()->c_str(), + filter->pattern()->size()); + if (const auto regex_pattern = ExtractRegexFilterFromPattern(pattern)) { + if (regex_matcher_->MatchesRegex(*regex_pattern, url, @@ -15590,7 +15591,7 @@ new file mode 100644 + if (sitekeys->size() != 0u) { + if (std::none_of( + sitekeys->begin(), sitekeys->end(), [&sitekey](const auto* it) { -+ return base::StringPiece(it->c_str(), it->size()) == sitekey; ++ return std::string_view(it->c_str(), it->size()) == sitekey; + })) { + // This filter requires a sitekey, and the one provided doesn't match. + return false; @@ -15660,7 +15661,7 @@ new file mode 100644 + if (IsActiveOnDomain(document_domain, nullptr, cur->exclude_domains())) { + for (const auto* line : (*cur->script())) { + InstalledSubscription::Snippet obj; -+ obj.command = base::StringPiece(line->command()->c_str(), ++ obj.command = std::string_view(line->command()->c_str(), + line->command()->size()); + obj.arguments.reserve(line->arguments()->size()); + @@ -15753,8 +15754,8 @@ new file mode 100644 + void FindCspFilters(const GURL& url, + const std::string& document_domain, + FilterCategory category, -+ std::set& results) const final; -+ std::set FindRewriteFilters( ++ std::set& results) const final; ++ std::set FindRewriteFilters( + const GURL& url, + const std::string& document_domain, + FilterCategory category) const final; @@ -15796,7 +15797,7 @@ new file mode 100644 + FindStrategy strategy) const; + void FindFiltersForKeyword( + const UrlFilterIndex* index, -+ base::StringPiece keyword, ++ std::string_view keyword, + const GURL& url, + const GURL& lowercase_url, + std::optional content_type, @@ -15823,9 +15824,9 @@ new file mode 100644 + const Domains* exclude_domains) const; + bool IsEmptyDomainAllowed(const Domains* include_domains, + const Domains* exclude_domains) const; -+ std::vector GetSelectorsForDomain( ++ std::vector GetSelectorsForDomain( + const flat::ElemHideFiltersByDomain* category, -+ base::StringPiece domain) const; ++ std::string_view domain) const; + + const std::unique_ptr buffer_; + const InstallationState installation_state_; @@ -16207,7 +16208,7 @@ new file mode 100644 + // The separator character can be anything but a letter, a digit, or one of + // the following: _, -, ., % + return !base::IsAsciiAlphaNumeric(c) && -+ base::StringPiece("_-.%").find(c) == base::StringPiece::npos; ++ std::string_view("_-.%").find(c) == std::string_view::npos; +} + +// Returns if |candidate| (e.g. "https://sub") is a valid start of |url|'s host. @@ -16222,7 +16223,7 @@ new file mode 100644 +// - https://sub +// - https://sub.domain.com/ +// - https://sub.domain.com/p -+bool IsValidStartOfHost(base::StringPiece candidate, const GURL& url) { ++bool IsValidStartOfHost(std::string_view candidate, const GURL& url) { + const GURL trimmed_url = url.GetWithEmptyPath(); + if (url.has_scheme()) { + DCHECK(base::StartsWith(candidate, url.scheme_piece())); @@ -16232,15 +16233,15 @@ new file mode 100644 + base::TrimString(candidate, ":/", base::TrimPositions::TRIM_LEADING); + return candidate.empty() || candidate == url.host_piece() || + (base::EndsWith(candidate, ".") && -+ candidate.find_first_of("/") == base::StringPiece::npos); ++ candidate.find_first_of("/") == std::string_view::npos); +} + +class PatternTokenizer { + public: -+ explicit PatternTokenizer(base::StringPiece filter_pattern) ++ explicit PatternTokenizer(std::string_view filter_pattern) + : consumed_filter_pattern_(filter_pattern) {} + -+ base::StringPiece NextToken() { ++ std::string_view NextToken() { + if (consumed_filter_pattern_.empty()) { + return {}; + } @@ -16276,20 +16277,20 @@ new file mode 100644 + } + + private: -+ constexpr static base::StringPiece kSeparators{"*^|"}; ++ constexpr static std::string_view kSeparators{"*^|"}; + // The tokenizer consumes |consumed_filter_pattern_| from the left as it + // advances. This is cheap, just incrementing the begin index. -+ base::StringPiece consumed_filter_pattern_; ++ std::string_view consumed_filter_pattern_; +}; + -+std::optional FindNextTokenInInput( -+ base::StringPiece consumed_input, ++std::optional FindNextTokenInInput( ++ std::string_view consumed_input, + PatternTokenizer tokenizer, + int recursion_depth); + +// Check if |consumed_input| starts with next token from |tokenizer| and +// continues matching subsequent tokens (recursively). -+bool NextTokenBeginsInput(base::StringPiece consumed_input, ++bool NextTokenBeginsInput(std::string_view consumed_input, + PatternTokenizer tokenizer, + int recursion_depth) { + if (++recursion_depth > kMaxRecursionDepth) { @@ -16336,8 +16337,8 @@ new file mode 100644 + +// Returns characters skipped in order to reach next token from |tokenizer|, or +// nullopt if not found. -+std::optional FindNextTokenInInput( -+ base::StringPiece consumed_input, ++std::optional FindNextTokenInInput( ++ std::string_view consumed_input, + PatternTokenizer tokenizer, + int recursion_depth) { + if (++recursion_depth > kMaxRecursionDepth) { @@ -16368,8 +16369,8 @@ new file mode 100644 + // followed by the right tokens, recursively). + // It is OK as long as there are no further tokens that require matching + // input. The "^" symbol matches EOF too. -+ return NextTokenBeginsInput(base::StringPiece(), tokenizer, recursion_depth) -+ ? std::optional{consumed_input} ++ return NextTokenBeginsInput(std::string_view(), tokenizer, recursion_depth) ++ ? std::optional{consumed_input} + : absl::nullopt; + } else if (token == "|") { + // If we're skipping characters, we can always skip enough to reach the end @@ -16379,7 +16380,7 @@ new file mode 100644 + // The searched token is just ASCII text. Keep searching for occurrences of + // it within consumed_input. + for (auto match_pos = consumed_input.find(token); -+ match_pos != base::StringPiece::npos; ++ match_pos != std::string_view::npos; + match_pos = consumed_input.find(token, match_pos + 1)) { + if (NextTokenBeginsInput(consumed_input.substr(match_pos + token.size()), + tokenizer, recursion_depth)) { @@ -16396,10 +16397,10 @@ new file mode 100644 + +} // namespace + -+bool DoesPatternMatchUrl(base::StringPiece filter_pattern, const GURL& url) { ++bool DoesPatternMatchUrl(std::string_view filter_pattern, const GURL& url) { + DCHECK(!ExtractRegexFilterFromPattern(filter_pattern)) + << "This function does not support regular expressions filters"; -+ const base::StringPiece input(url.spec()); ++ const std::string_view input(url.spec()); + PatternTokenizer tokenizer(filter_pattern); + const auto first_token = tokenizer.NextToken(); + if (first_token == "|") { @@ -16469,7 +16470,7 @@ new file mode 100644 +// Example: filter_pattern "||example.com^" will match url +// "https://subdomain/example.com/path.png" +// filter_pattern must NOT be a regex filter -+bool DoesPatternMatchUrl(base::StringPiece filter_pattern, const GURL& url); ++bool DoesPatternMatchUrl(std::string_view filter_pattern, const GURL& url); + +} // namespace adblock + @@ -16576,7 +16577,7 @@ new file mode 100644 +namespace { + +bool HasSubscriptionWithMatchingUrl(const std::vector& collection, -+ base::StringPiece pattern) { ++ std::string_view pattern) { + return std::find_if(collection.begin(), collection.end(), + [pattern](const GURL& url) { + return base::MatchPattern(url.spec(), pattern); @@ -16776,7 +16777,7 @@ new file mode 100644 + << timer.Elapsed(); +} + -+void RegexMatcher::PreBuildRegexPattern(base::StringPiece regular_expression, ++void RegexMatcher::PreBuildRegexPattern(std::string_view regular_expression, + bool case_sensitive) { + auto re2_pattern = BuildRe2Expression(regular_expression, case_sensitive); + if (re2_pattern) { @@ -16796,10 +16797,10 @@ new file mode 100644 + } +} + -+bool RegexMatcher::MatchesRegex(base::StringPiece regex_pattern, ++bool RegexMatcher::MatchesRegex(std::string_view regex_pattern, + const GURL& url, + bool case_sensitive) const { -+ const base::StringPiece input = url.spec(); ++ const std::string_view input = url.spec(); + const auto cache_key = std::make_pair(regex_pattern, case_sensitive); + + const auto cached_re2_expression = re2_cache_.find(cache_key); @@ -16836,7 +16837,7 @@ new file mode 100644 + if (!filter->pattern()) { + continue; // This filter has no keyword because it has an empty pattern. + } -+ const base::StringPiece filter_string(filter->pattern()->c_str(), ++ const std::string_view filter_string(filter->pattern()->c_str(), + filter->pattern()->size()); + const auto regex_string = ExtractRegexFilterFromPattern(filter_string); + if (!regex_string) { @@ -16847,7 +16848,7 @@ new file mode 100644 +} + +std::unique_ptr RegexMatcher::BuildRe2Expression( -+ base::StringPiece regular_expression, ++ std::string_view regular_expression, + bool case_sensitive) { + re2::RE2::Options options; + options.set_case_sensitive(case_sensitive); @@ -16864,7 +16865,7 @@ new file mode 100644 +} + +std::unique_ptr RegexMatcher::BuildIcuExpression( -+ base::StringPiece regular_expression, ++ std::string_view regular_expression, + bool case_sensitive) { + const icu::UnicodeString icu_pattern(regular_expression.data(), + regular_expression.length()); @@ -16934,10 +16935,10 @@ new file mode 100644 + // There are typically few of them and they are matched very often, so + // pre-build them. + void PreBuildRegexPatternsWithNoKeyword(const flat::Subscription* index); -+ void PreBuildRegexPattern(base::StringPiece regular_expression, ++ void PreBuildRegexPattern(std::string_view regular_expression, + bool case_sensitive); + -+ bool MatchesRegex(base::StringPiece regex_pattern, ++ bool MatchesRegex(std::string_view regex_pattern, + const GURL& url, + bool case_sensitive) const; + @@ -16946,14 +16947,14 @@ new file mode 100644 + flatbuffers::Vector>; + void PreBuildPatternsFrom(const UrlFilterIndex* index); + std::unique_ptr BuildRe2Expression( -+ base::StringPiece regular_expression, ++ std::string_view regular_expression, + bool case_sensitive); + std::unique_ptr BuildIcuExpression( -+ base::StringPiece regular_expression, ++ std::string_view regular_expression, + bool case_sensitive); + int CacheSize() const; + -+ using CacheKey = std::tuple; ++ using CacheKey = std::tuple; + std::map> re2_cache_; + std::map> icu_cache_; +}; @@ -17146,22 +17147,22 @@ new file mode 100644 + const std::vector& frame_hierarchy, + const SiteKey& sitekey) const = 0; + -+ virtual std::vector GetElementHideSelectors( ++ virtual std::vector GetElementHideSelectors( + const GURL& frame_url, + const std::vector& frame_hierarchy, + const SiteKey& sitekey) const = 0; -+ virtual std::vector GetElementHideEmulationSelectors( ++ virtual std::vector GetElementHideEmulationSelectors( + const GURL& frame_url) const = 0; + + virtual base::Value::List GenerateSnippets( + const GURL& frame_url, + const std::vector& frame_hierarchy) const = 0; + -+ virtual std::set GetCspInjections( ++ virtual std::set GetCspInjections( + const GURL& request_url, + const std::vector& frame_hierarchy) const = 0; + -+ virtual std::set GetRewriteFilters( ++ virtual std::set GetRewriteFilters( + const GURL& request_url, + const std::vector& frame_hierarchy, + FilterCategory category) const = 0; @@ -17217,10 +17218,10 @@ new file mode 100644 + : frame_hierarchy[0].host(); +} + -+std::vector ReduceSelectors( ++std::vector ReduceSelectors( + InstalledSubscription::Selectors& combined_selectors) { + // Populate result with blocking selectors. -+ std::vector final_selectors = ++ std::vector final_selectors = + std::move(combined_selectors.elemhide_selectors); + // Remove exceptions. + final_selectors.erase( @@ -17376,7 +17377,7 @@ new file mode 100644 + return absl::nullopt; +} + -+std::vector ++std::vector +SubscriptionCollectionImpl::GetElementHideSelectors( + const GURL& frame_url, + const std::vector& frame_hierarchy, @@ -17398,7 +17399,7 @@ new file mode 100644 + return ReduceSelectors(combined_selectors); +} + -+std::vector ++std::vector +SubscriptionCollectionImpl::GetElementHideEmulationSelectors( + const GURL& frame_url) const { + InstalledSubscription::Selectors combined_selectors; @@ -17435,11 +17436,11 @@ new file mode 100644 + return snippets; +} + -+std::set SubscriptionCollectionImpl::GetCspInjections( ++std::set SubscriptionCollectionImpl::GetCspInjections( + const GURL& request_url, + const std::vector& frame_hierarchy) const { -+ std::set blocking_filters{}; -+ std::set allowing_filters{}; ++ std::set blocking_filters{}; ++ std::set allowing_filters{}; + for (const auto& subscription : subscriptions_) { + subscription->FindCspFilters(request_url, + DocumentDomain(request_url, frame_hierarchy), @@ -17481,7 +17482,7 @@ new file mode 100644 + })) { + // This is a relatively rare case - we should have searched for + // domain-specific filters only. -+ std::set domain_specific_blocking{}; ++ std::set domain_specific_blocking{}; + for (const auto& subscription : subscriptions_) { + subscription->FindCspFilters( + request_url, DocumentDomain(request_url, frame_hierarchy), @@ -17506,11 +17507,11 @@ new file mode 100644 + return blocking_filters; +} + -+std::set SubscriptionCollectionImpl::GetRewriteFilters( ++std::set SubscriptionCollectionImpl::GetRewriteFilters( + const GURL& request_url, + const std::vector& frame_hierarchy, + FilterCategory category) const { -+ std::set result; ++ std::set result; + for (const auto& subscription : subscriptions_) { + const auto filters = subscription->FindRewriteFilters( + request_url, DocumentDomain(request_url, frame_hierarchy), category); @@ -17605,19 +17606,19 @@ new file mode 100644 + const std::vector& frame_hierarchy, + const SiteKey& sitekey) const final; + -+ std::vector GetElementHideSelectors( ++ std::vector GetElementHideSelectors( + const GURL& frame_url, + const std::vector& frame_hierarchy, + const SiteKey& sitekey) const final; -+ std::vector GetElementHideEmulationSelectors( ++ std::vector GetElementHideEmulationSelectors( + const GURL& frame_url) const final; + base::Value::List GenerateSnippets( + const GURL& frame_url, + const std::vector& frame_hierarchy) const final; -+ std::set GetCspInjections( ++ std::set GetCspInjections( + const GURL& request_url, + const std::vector& frame_hierarchy) const final; -+ std::set GetRewriteFilters( ++ std::set GetRewriteFilters( + const GURL& request_url, + const std::vector& frame_hierarchy, + FilterCategory category) const final; @@ -18075,7 +18076,7 @@ new file mode 100644 + // https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt). + // This preloaded subscription will be used as a substitute for a + // subscription with a URL that matches |url_pattern|. -+ base::StringPiece url_pattern; ++ std::string_view url_pattern; + + // Resource ID containing the binary flatbuffer data that defines this + // preloaded subscription. Examples: @@ -18699,11 +18700,11 @@ new file mode 100644 + +namespace adblock { +namespace { -+constexpr base::StringPiece kExpirationTimeKey = "expiration_time"; -+constexpr base::StringPiece kLastInstallationTimeKey = "last_installation_time"; -+constexpr base::StringPiece kVersionKey = "version"; -+constexpr base::StringPiece kDownloadCountKey = "download_count"; -+constexpr base::StringPiece kErrorCountKey = "error_count"; ++constexpr std::string_view kExpirationTimeKey = "expiration_time"; ++constexpr std::string_view kLastInstallationTimeKey = "last_installation_time"; ++constexpr std::string_view kVersionKey = "version"; ++constexpr std::string_view kDownloadCountKey = "download_count"; ++constexpr std::string_view kErrorCountKey = "error_count"; +} // namespace + +struct SubscriptionPersistentMetadataImpl::Metadata { @@ -20182,11 +20183,11 @@ new file mode 100644 + +} // namespace + -+std::optional UrlKeywordExtractor::GetNextKeyword() { -+ base::StringPiece current_keyword; ++std::optional UrlKeywordExtractor::GetNextKeyword() { ++ std::string_view current_keyword; + do { + const auto start_of_next_keyword = input_.find_first_not_of('\0'); -+ if (start_of_next_keyword == base::StringPiece::npos) { ++ if (start_of_next_keyword == std::string_view::npos) { + return absl::nullopt; + } + input_.remove_prefix(start_of_next_keyword); @@ -20197,7 +20198,7 @@ new file mode 100644 + return current_keyword; +} + -+UrlKeywordExtractor::UrlKeywordExtractor(base::StringPiece url) ++UrlKeywordExtractor::UrlKeywordExtractor(std::string_view url) + : url_with_nulls_(url.data(), url.size()) { + // The keywords returned by GetNextKeyword() will be passed to + // flatbuffers::Vector::LookupByKey(const char* key) which assumes |key| is @@ -20267,13 +20268,13 @@ new file mode 100644 +// could match anything. +class UrlKeywordExtractor { + public: -+ explicit UrlKeywordExtractor(base::StringPiece url); ++ explicit UrlKeywordExtractor(std::string_view url); + ~UrlKeywordExtractor(); -+ std::optional GetNextKeyword(); ++ std::optional GetNextKeyword(); + + private: + std::string url_with_nulls_; -+ base::StringPiece input_; ++ std::string_view input_; +}; + +} // namespace adblock diff --git a/build/patches/eyeo-beta-118.0.5993.48-chrome_integration.patch b/build/patches/eyeo-beta-118.0.5993.48-chrome_integration.patch index ae93a0d2..c5b22ebe 100644 --- a/build/patches/eyeo-beta-118.0.5993.48-chrome_integration.patch +++ b/build/patches/eyeo-beta-118.0.5993.48-chrome_integration.patch @@ -110,7 +110,7 @@ diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegat #include "chrome/browser/buildflags.h" #include "chrome/browser/chrome_content_browser_client.h" #include "chrome/browser/chrome_resource_bundle_helper.h" -@@ -1928,7 +1933,7 @@ content::ContentClient* ChromeMainDelegate::CreateContentClient() { +@@ -1927,7 +1932,7 @@ content::ContentClient* ChromeMainDelegate::CreateContentClient() { content::ContentBrowserClient* ChromeMainDelegate::CreateContentBrowserClient() { chrome_content_browser_client_ = diff --git a/build/patches/ungoogled-chromium-no-special-hosts-domains.patch b/build/patches/ungoogled-chromium-no-special-hosts-domains.patch index 70bed9d7..3d73f770 100644 --- a/build/patches/ungoogled-chromium-no-special-hosts-domains.patch +++ b/build/patches/ungoogled-chromium-no-special-hosts-domains.patch @@ -27,7 +27,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../one_google_bar_loader_impl.cc | 3 +- .../new_tab_page/promos/promo_service.cc | 6 +- .../from_gws_page_load_metrics_observer.cc | 6 +- - .../page_load_metrics_initialize.cc | 2 - + .../page_load_metrics_initialize.cc | 4 - chrome/browser/safe_browsing/BUILD.gn | 1 - chrome/browser/search_engines/BUILD.gn | 1 - .../ui_thread_search_terms_data.cc | 4 - @@ -63,7 +63,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ...gled-chromium-no-special-hosts-domains.inc | 1 + net/base/url_util.cc | 25 +- services/network/network_context.cc | 2 +- - 56 files changed, 55 insertions(+), 846 deletions(-) + 56 files changed, 55 insertions(+), 848 deletions(-) create mode 100644 cromite_flags/content/public/common/content_features_cc/ungoogled-chromium-no-special-hosts-domains.inc diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java @@ -674,15 +674,18 @@ diff --git a/chrome/browser/page_load_metrics/observers/from_gws_page_load_metri diff --git a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc --- a/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc +++ b/chrome/browser/page_load_metrics/page_load_metrics_initialize.cc -@@ -169,8 +169,6 @@ void PageLoadMetricsEmbedder::RegisterEmbedderObservers( +@@ -169,11 +169,7 @@ void PageLoadMetricsEmbedder::RegisterEmbedderObservers( tracker->AddObserver(std::make_unique()); tracker->AddObserver(std::make_unique()); tracker->AddObserver(std::make_unique()); - tracker->AddObserver(std::make_unique()); - tracker->AddObserver(std::make_unique()); tracker->AddObserver(std::make_unique()); +- tracker->AddObserver( +- std::make_unique()); + tracker->AddObserver(std::make_unique()); tracker->AddObserver( - std::make_unique()); + std::make_unique()); diff --git a/chrome/browser/safe_browsing/BUILD.gn b/chrome/browser/safe_browsing/BUILD.gn --- a/chrome/browser/safe_browsing/BUILD.gn +++ b/chrome/browser/safe_browsing/BUILD.gn