diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index cafe1a00..7754a013 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -17,7 +17,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../app/bookmarks/BookmarkActivity.java | 31 ++ .../native_page/NativePageFactory.java | 9 +- chrome/browser/BUILD.gn | 11 +- - .../bookmarks/android/bookmark_bridge.cc | 266 ++++++++++++++++ + .../bookmarks/android/bookmark_bridge.cc | 197 ++++++++++++ .../bookmarks/android/bookmark_bridge.h | 30 +- .../browser/bookmarks/BookmarkBridge.java | 39 +++ .../browser/bookmarks/BookmarkDelegate.java | 10 + @@ -36,9 +36,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/importer/profile_writer.h | 6 + .../preferences/ChromePreferenceKeys.java | 3 + .../strings/android_chrome_strings.grd | 18 ++ - chrome/common/BUILD.gn | 3 + - chrome/utility/BUILD.gn | 5 + + chrome/utility/BUILD.gn | 7 + + .../importer/bookmarks_file_importer.cc | 4 + .../headless_select_file_dialog.cc | 4 + + .../content/content_bookmark_parser_utils.cc | 3 + .../add-bookmark-import-export-actions.inc | 12 + .../add-bookmark-import-export-actions.inc | 4 + .../add-bookmark-import-export-actions.inc | 1 + @@ -50,7 +51,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 + - 39 files changed, 872 insertions(+), 24 deletions(-) + 40 files changed, 809 insertions(+), 24 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 @@ -268,7 +269,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn configs += [ "//build/config/compiler:wexit_time_destructors", "//build/config:precompiled_headers", -@@ -3697,8 +3706,6 @@ static_library("browser") { +@@ -3704,8 +3713,6 @@ static_library("browser") { "bookmarks/bookmark_expanded_state_tracker.h", "bookmarks/bookmark_expanded_state_tracker_factory.cc", "bookmarks/bookmark_expanded_state_tracker_factory.h", @@ -280,19 +281,20 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn 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 -@@ -68,6 +68,27 @@ +@@ -68,6 +68,28 @@ #include "content/public/browser/web_contents.h" #include "url/gurl.h" +#include "base/android/content_uri_utils.h" +#include "base/android/path_utils.h" +#include "base/strings/utf_string_conversions.h" -+#include "chrome/utility/importer/bookmark_html_reader.h" +#include "chrome/browser/bookmarks/bookmark_html_writer.h" +#include "chrome/browser/importer/profile_writer.h" +#include "chrome/browser/platform_util.h" +#include "chrome/browser/ui/chrome_select_file_policy.h" +#include "components/user_data_importer/common/imported_bookmark_entry.h" ++#include "components/user_data_importer/content/content_bookmark_parser.h" ++#include "components/user_data_importer/content/content_bookmark_parser_utils.h" +#include "chrome/common/url_constants.h" +#include "components/favicon_base/favicon_usage_data.h" +#include "components/search_engines/template_url.h" @@ -308,65 +310,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/browser/bookmarks/android/jni_headers/BookmarkBridge_jni.h" -@@ -86,6 +107,57 @@ using bookmarks::android::JavaBookmarkIdGetType; - using content::BrowserThread; - using power_bookmarks::PowerBookmarkMeta; - -+namespace internal { -+ -+// Returns true if |url| has a valid scheme that we allow to import. We -+// filter out the URL with a unsupported scheme. -+bool CanImportURL(const GURL& url) { -+ // The URL is not valid. -+ if (!url.is_valid()) -+ return false; -+ -+ // Filter out the URLs with unsupported schemes. -+ const char* const kInvalidSchemes[] = {"wyciwyg", "place"}; -+ for (size_t i = 0; i < std::size(kInvalidSchemes); ++i) { -+ if (url.SchemeIs(kInvalidSchemes[i])) -+ return false; -+ } -+ -+ // Check if |url| is about:blank. -+ if (url == url::kAboutBlankURL) -+ return true; -+ -+ // If |url| starts with chrome:// or about:, check if it's one of the URLs -+ // that we support. -+ if (url.SchemeIs(content::kChromeUIScheme) || -+ url.SchemeIs(url::kAboutScheme)) { -+ if (url.host_piece() == chrome::kChromeUIAboutHost) -+ return true; -+ -+ GURL fixed_url(url_formatter::FixupURL(url.spec(), std::string())); -+ const base::span hosts = chrome::ChromeURLHosts(); -+ for (const base::cstring_view host : hosts) { -+ if (fixed_url.DomainIs(host)) { -+ return true; -+ } -+ } -+ -+ if (base::Contains(chrome::ChromeDebugURLs(), fixed_url.spec())) { -+ return true; -+ } -+ -+ // If url has either chrome:// or about: schemes but wasn't found in the -+ // above lists, it means we don't support it, so we don't allow the user -+ // to import it. -+ return false; -+ } -+ -+ // Otherwise, we assume the url has a valid (importable) scheme. -+ return true; -+} -+ -+} // internal -+ - namespace { - // The key used to connect the instance of the bookmark bridge to the bookmark - // model. -@@ -296,6 +368,10 @@ BookmarkBridge::~BookmarkBridge() { +@@ -296,6 +318,10 @@ BookmarkBridge::~BookmarkBridge() { partner_bookmarks_shim_observation_.Reset(); bookmark_model_observation_.Reset(); profile_observation_.Reset(); @@ -377,7 +321,7 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse } void BookmarkBridge::Destroy(JNIEnv* env) { -@@ -847,6 +923,196 @@ jint BookmarkBridge::GetTotalBookmarkCount( +@@ -847,6 +873,177 @@ jint BookmarkBridge::GetTotalBookmarkCount( return count; } @@ -525,43 +469,24 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browse +} + +void BookmarkBridge::FileSelectedImplOnUIThread(const base::FilePath& path, -+ const std::string& contents) { ++ const std::string& contents) { + if (contents.empty()) + return; + + // the following import logic comes from BookmarksFileImporter class -+ std::vector bookmarks; -+ std::vector search_engines; -+ favicon_base::FaviconUsageDataList favicons; -+ -+ bookmark_html_reader::ImportBookmarksFile( -+ base::RepeatingCallback(), -+ base::BindRepeating(internal::CanImportURL), -+ contents, -+ &bookmarks, -+ &search_engines, -+ &favicons); ++ user_data_importer::BookmarkParser::ParsedBookmarks parsed_bookmarks = ++ user_data_importer::ParseBookmarksUnsafe(contents); + + auto *writer = new ProfileWriter(profile_); + -+ if (!bookmarks.empty()) { ++ if (!parsed_bookmarks.bookmarks.empty()) { + // adding bookmarks will begin extensive changes to the model -+ writer->AddBookmarksWithModel(bookmark_model_, bookmarks, u"Imported"); -+ } -+ if (!search_engines.empty()) { -+ TemplateURLService::OwnedTemplateURLVector owned_template_urls; -+ for (const auto& search_engine : search_engines) { -+ std::unique_ptr owned_template_url = CreateTemplateURL( -+ search_engine.url, search_engine.keyword, search_engine.display_name); -+ if (owned_template_url) -+ owned_template_urls.push_back(std::move(owned_template_url)); -+ } -+ writer->AddKeywords(std::move(owned_template_urls), false); ++ writer->AddBookmarksWithModel(bookmark_model_, parsed_bookmarks.bookmarks, u"Imported"); + } + + std::stringstream message; -+ message << "Imported " << bookmarks.size() << " bookmarks and " << -+ search_engines.size() << " search engines from " << path.MaybeAsASCII(); ++ message << "Imported " << parsed_bookmarks.bookmarks.size() << " bookmarks " << ++ " from " << path.MaybeAsASCII(); + auto result = message.str(); + + select_file_dialog_->ShowToast(result); @@ -987,7 +912,7 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows + // use the download ui and standard file saving + DownloadLocationDialogController controller = new DownloadLocationDialogController() { + @Override -+ public void onDownloadLocationDialogComplete(String returnedPath) {} ++ public void onDownloadLocationDialogComplete(String returnedPath, boolean didUserConfirm) {} + + @Override + public void onDownloadLocationDialogCanceled() {} @@ -1435,34 +1360,39 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Virtual Reality -diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn ---- a/chrome/common/BUILD.gn -+++ b/chrome/common/BUILD.gn -@@ -339,6 +339,9 @@ static_library("common_lib") { - "chrome_descriptors_android.h", - "media/chrome_media_drm_bridge_client.cc", - "media/chrome_media_drm_bridge_client.h", -+ ## Bromite dependencies for bookmark import functionality -+ "//components/user_data_importer/common/imported_bookmark_entry.cc", -+ "//components/user_data_importer/common/imported_bookmark_entry.h", - ] - } else { - # Non-Android. diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn --- a/chrome/utility/BUILD.gn +++ b/chrome/utility/BUILD.gn -@@ -222,6 +222,11 @@ static_library("utility") { +@@ -222,6 +222,13 @@ static_library("utility") { deps += [ "//chrome/services/pdf:lib" ] } -+ sources += [ -+ "importer/bookmark_html_reader.cc", -+ "importer/bookmark_html_reader.h", -+ ] ++ if (is_android) { ++ sources += [ ++ "importer/bookmarks_file_importer.cc", ++ "importer/bookmarks_file_importer.h", ++ ] ++ } + # NSS decryptor is not needed on ChromeOS. if (!is_chromeos && use_nss_certs) { sources += [ +diff --git a/chrome/utility/importer/bookmarks_file_importer.cc b/chrome/utility/importer/bookmarks_file_importer.cc +--- a/chrome/utility/importer/bookmarks_file_importer.cc ++++ b/chrome/utility/importer/bookmarks_file_importer.cc +@@ -103,8 +103,12 @@ void BookmarksFileImporter::StartImport( + user_data_importer::ParseBookmarksUnsafe(raw_html); + + if (!parsed_bookmarks.bookmarks.empty()) { ++#if BUILDFLAG(IS_ANDROID) ++ std::u16string first_folder_name; ++#else + std::u16string first_folder_name = + bridge_->GetLocalizedString(IDS_BOOKMARK_GROUP); ++#endif + std::erase_if(parsed_bookmarks.bookmarks, + [](user_data_importer::ImportedBookmarkEntry bookmark) { + return !internal::CanImportURL(bookmark.url); diff --git a/components/headless/select_file_dialog/headless_select_file_dialog.cc b/components/headless/select_file_dialog/headless_select_file_dialog.cc --- a/components/headless/select_file_dialog/headless_select_file_dialog.cc +++ b/components/headless/select_file_dialog/headless_select_file_dialog.cc @@ -1477,6 +1407,29 @@ diff --git a/components/headless/select_file_dialog/headless_select_file_dialog. SelectFileDialogCallback callback_; }; +diff --git a/components/user_data_importer/content/content_bookmark_parser_utils.cc b/components/user_data_importer/content/content_bookmark_parser_utils.cc +--- a/components/user_data_importer/content/content_bookmark_parser_utils.cc ++++ b/components/user_data_importer/content/content_bookmark_parser_utils.cc +@@ -89,6 +89,7 @@ std::optional GetTimeAttribute(const std::string& attribute_list, + + // Given the URL of a page and a favicon data URL, adds an appropriate record + // to the given favicon usage vector. ++[[maybe_unused]] + void DataURLToFaviconUsage(const GURL& link_url, + const GURL& favicon_data, + favicon_base::FaviconUsageDataList* favicons) { +@@ -438,9 +439,11 @@ BookmarkParser::ParsedBookmarks ParseBookmarksUnsafe( + } + parsing_result.bookmarks.push_back(std::move(entry)); + ++#if !BUILDFLAG(IS_ANDROID) + // Save the favicon. DataURLToFaviconUsage will handle the case where + // there is no favicon. + DataURLToFaviconUsage(url, favicon, &parsing_result.favicons); ++#endif + + continue; + } diff --git a/cromite_flags/chrome/browser/about_flags_cc/add-bookmark-import-export-actions.inc b/cromite_flags/chrome/browser/about_flags_cc/add-bookmark-import-export-actions.inc new file mode 100644 --- /dev/null diff --git a/build/patches/Add-custom-tab-intents-privacy-option.patch b/build/patches/Add-custom-tab-intents-privacy-option.patch index 2070b0df..5073f0e6 100644 --- a/build/patches/Add-custom-tab-intents-privacy-option.patch +++ b/build/patches/Add-custom-tab-intents-privacy-option.patch @@ -14,8 +14,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../java/res/xml/privacy_preferences.xml | 15 ++++++ .../browser/LaunchIntentDispatcher.java | 21 ++++++++ - .../CustomTabIntentDataProvider.java | 4 +- - .../customtabs/CustomTabsConnection.java | 1 + + .../CustomTabIntentDataProvider.java | 22 ++++---- + .../customtabs/CustomTabsConnection.java | 3 +- .../IncognitoCustomTabIntentDataProvider.java | 14 +++++ .../privacy/settings/PrivacySettings.java | 51 +++++++++++++++++++ .../flags/android/chrome_feature_list.cc | 2 +- @@ -25,7 +25,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../OriginVerifier.java | 5 ++ .../core/common/language_experiments.cc | 1 + .../add-custom-tab-intents-privacy-option.inc | 1 + - 13 files changed, 146 insertions(+), 3 deletions(-) + 13 files changed, 156 insertions(+), 13 deletions(-) create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-custom-tab-intents-privacy-option.grdp create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-custom-tab-intents-privacy-option.inc @@ -109,6 +109,49 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +@@ -233,16 +233,16 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid + + // Extra whose value is an array of ints that is supplied to + // SyntheticTrialRegistry::RegisterExternalExperiments(). +- public static final String EXPERIMENT_IDS = +- "org.chromium.chrome.browser.customtabs.AGA_EXPERIMENT_IDS"; ++ // public static final String EXPERIMENT_IDS = ++ // "org.chromium.chrome.browser.customtabs.AGA_EXPERIMENT_IDS"; + + // These Extra Intent parameters allow an Intent to enable or disable a set of Features. + // The set of Features that may be enabled or disabled is restricted by the code, + // and initially only two Features may be enabled together, or disabled together. +- public static final String EXPERIMENTS_ENABLE = +- "org.chromium.chrome.browser.customtabs.EXPERIMENTS_ENABLE"; +- public static final String EXPERIMENTS_DISABLE = +- "org.chromium.chrome.browser.customtabs.EXPERIMENTS_DISABLE"; ++ // public static final String EXPERIMENTS_ENABLE = ++ // "org.chromium.chrome.browser.customtabs.EXPERIMENTS_ENABLE"; ++ // public static final String EXPERIMENTS_DISABLE = ++ // "org.chromium.chrome.browser.customtabs.EXPERIMENTS_DISABLE"; + + /** + * Extra that, if set, makes the Custom Tab Activity's height to be x pixels, the Custom Tab +@@ -682,7 +682,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid + TrustedWebActivityIntentBuilder.EXTRA_SCREEN_ORIENTATION, + ScreenOrientation.DEFAULT)); + +- mGsaExperimentIds = IntentUtils.safeGetIntArrayExtra(intent, EXPERIMENT_IDS); ++ mGsaExperimentIds = null; //IntentUtils.safeGetIntArrayExtra(intent, EXPERIMENT_IDS); + + mBreakPointDp = getActivityBreakPointFromIntent(intent); + mInitialActivityHeight = getInitialActivityHeightFromIntent(intent); +@@ -695,8 +695,8 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid + intent, EXTRA_ACTIVITY_HEIGHT_RESIZE_BEHAVIOR, ACTIVITY_HEIGHT_DEFAULT); + mIsPartialCustomTabFixedHeight = activityHeightResizeBehavior == ACTIVITY_HEIGHT_FIXED; + +- mInteractWithBackground = CustomTabsIntent.isBackgroundInteractionEnabled(intent); +- if (IntentUtils.safeHasExtra(intent, EXTRA_ENABLE_BACKGROUND_INTERACTION)) { ++ mInteractWithBackground = false; // CustomTabsIntent.isBackgroundInteractionEnabled(intent); ++ if (((false)) && IntentUtils.safeHasExtra(intent, EXTRA_ENABLE_BACKGROUND_INTERACTION)) { + @BackgroundInteractBehavior + int backgroundInteractBehavior = + IntentUtils.safeGetIntExtra( @@ -1267,7 +1267,9 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid public @CustomTabProfileType int getCustomTabMode() { return AlwaysIncognitoLinkInterceptor.isAlwaysIncognito() @@ -123,6 +166,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java +@@ -780,7 +780,7 @@ public class CustomTabsConnection { + ThreadUtils.assertOnUiThread(); + if (extras == null) return; + int[] experimentIds = +- IntentUtils.safeGetIntArray(extras, CustomTabIntentDataProvider.EXPERIMENT_IDS); ++ null; //IntentUtils.safeGetIntArray(extras, CustomTabIntentDataProvider.EXPERIMENT_IDS); + if (experimentIds == null) return; + // When ids are set through cct, they should not override existing ids. + boolean override = false; @@ -996,6 +996,7 @@ public class CustomTabsConnection { PostTask.postTask( TaskTraits.UI_DEFAULT, @@ -379,5 +431,5 @@ new file mode 100644 --- /dev/null +++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-custom-tab-intents-privacy-option.inc @@ -0,0 +1 @@ -+SET_CROMITE_FEATURE_DISABLED(kCCTIntentFeatureOverrides); ++// explicitly empty -- diff --git a/build/patches/Add-lifetime-options-for-permissions.patch b/build/patches/Add-lifetime-options-for-permissions.patch index 72e125ba..a3e22b0d 100644 --- a/build/patches/Add-lifetime-options-for-permissions.patch +++ b/build/patches/Add-lifetime-options-for-permissions.patch @@ -79,8 +79,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../permission_prompt_android.cc | 8 +- .../permission_prompt_android.h | 3 +- .../android/permissions_android_strings.grd | 17 ++++ - .../geolocation_permission_context_android.cc | 27 ++++-- - .../geolocation_permission_context_android.h | 10 ++- + .../geolocation_permission_context_android.cc | 30 +++++-- + .../geolocation_permission_context_android.h | 8 ++ .../embedded_permission_prompt_flow_model.cc | 2 +- .../permissions/permission_context_base.cc | 64 ++++++++++++-- .../permissions/permission_context_base.h | 26 +++++- @@ -89,7 +89,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/permissions/permission_request.h | 18 +++- .../permissions/permission_request_manager.cc | 45 ++++++---- .../permissions/permission_request_manager.h | 11 ++- - 37 files changed, 506 insertions(+), 73 deletions(-) + 37 files changed, 507 insertions(+), 73 deletions(-) diff --git a/chrome/browser/permissions/last_tab_standing_tracker.cc b/chrome/browser/permissions/last_tab_standing_tracker.cc --- a/chrome/browser/permissions/last_tab_standing_tracker.cc @@ -285,8 +285,8 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c .getDefaultColor()); } } -+ if (isSessionPermission(contentType)) { -+ switchPreference.setSummary(switchPreference.getSummary() + " " + ++ if (preference instanceof ChromeSwitchPreference && isSessionPermission(contentType)) { ++ ((ChromeSwitchPreference)preference).setSummary(preference.getSummary() + " " + + getString(R.string.page_info_android_permission_session_permission)); + } } @@ -852,37 +852,38 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr bool is_default_search = IsRequestingOriginDSE(request_data.requesting_origin); if (decision == PermissionDecision::kAllow && -@@ -210,7 +221,7 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( +@@ -209,7 +220,7 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, request_data.embedding_origin, std::move(callback), false /* persist */, - PermissionDecision::kDeny, -- request_data.prompt_options); -+ request_data.prompt_options, lifetime_option); +- PermissionDecision::kDeny, ++ PermissionDecision::kDeny, lifetime_option, + request_data.prompt_options); return; } - -@@ -231,7 +242,7 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( +@@ -230,7 +241,7 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, request_data.embedding_origin, std::move(callback), false /* persist */, - PermissionDecision::kDeny, -- request_data.prompt_options); -+ request_data.prompt_options, lifetime_option); +- PermissionDecision::kDeny, ++ PermissionDecision::kDeny, lifetime_option, + request_data.prompt_options); return; } - -@@ -244,13 +255,13 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( +@@ -243,14 +254,14 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + base::BindOnce( &GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown, weak_factory_.GetWeakPtr(), request_data.requesting_origin, - request_data.embedding_origin, persist, decision, -- request_data.prompt_options)); -+ request_data.prompt_options, lifetime_option)); +- request_data.embedding_origin, persist, decision, ++ request_data.embedding_origin, persist, decision, lifetime_option, + request_data.prompt_options)); return; } FinishNotifyPermissionSet(request_data.id, request_data.requesting_origin, request_data.embedding_origin, std::move(callback), - persist, decision, request_data.prompt_options); -+ persist, decision, request_data.prompt_options, lifetime_option); ++ persist, decision, lifetime_option, request_data.prompt_options); } content::PermissionResult @@ -900,25 +901,29 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr requesting_origin, embedding_origin, std::move(location_settings_dialog_callback_), - persist, decision, prompt_options); -+ persist, decision, prompt_options, lifetime_option); ++ persist, decision, lifetime_option, prompt_options); location_settings_dialog_request_id_ = PermissionRequestID(content::GlobalRenderFrameHostId(0, 0), -@@ -461,7 +472,7 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( +@@ -460,7 +471,7 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( + const GURL& embedding_origin, BrowserPermissionCallback callback, bool persist, - PermissionDecision decision, -- std::optional prompt_options) { -+ std::optional prompt_options, content_settings::mojom::LifetimeMode lifetime_option) { +- PermissionDecision decision, ++ PermissionDecision decision, content_settings::mojom::LifetimeMode lifetime_option, + std::optional prompt_options) { PermissionRequestData request_data( this, id, - content::PermissionRequestDescription( -@@ -471,7 +482,7 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( +@@ -469,9 +480,10 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( + blink::PermissionType::GEOLOCATION)), + requesting_origin, embedding_origin); request_data.prompt_options = prompt_options.value_or(std::monostate()); - GeolocationPermissionContext::NotifyPermissionSet( +- GeolocationPermissionContext::NotifyPermissionSet( ++ GeolocationPermissionContext::NotifyPermissionSetImpl( request_data, - std::move(callback), persist, decision, /*is_final_decision=*/true); -+ std::move(callback), persist, decision, /*is_final_decision=*/true, lifetime_option); ++ std::move(callback), persist, decision, /*is_final_decision=*/true, ++ /*use_lifetime_option*/ true, lifetime_option); } void GeolocationPermissionContextAndroid::SetLocationSettingsForTesting( @@ -938,24 +943,22 @@ diff --git a/components/permissions/contexts/geolocation_permission_context_andr content::PermissionResult UpdatePermissionStatusWithDeviceStatus( content::WebContents* web_contents, content::PermissionResult result, -@@ -137,6 +143,7 @@ class GeolocationPermissionContextAndroid +@@ -136,6 +142,7 @@ class GeolocationPermissionContextAndroid + const GURL& embedding_origin, bool persist, PermissionDecision decision, - std::optional prompt_options, + content_settings::mojom::LifetimeMode lifetime_option, + std::optional prompt_options, LocationSettingsDialogOutcome prompt_outcome); - void FinishNotifyPermissionSet(const PermissionRequestID& id, -@@ -145,7 +152,8 @@ class GeolocationPermissionContextAndroid +@@ -145,6 +152,7 @@ class GeolocationPermissionContextAndroid BrowserPermissionCallback callback, bool persist, PermissionDecision decision, -- std::optional prompt_options); -+ std::optional prompt_options, -+ content_settings::mojom::LifetimeMode lifetime_option); ++ content_settings::mojom::LifetimeMode lifetime_option, + std::optional prompt_options); std::unique_ptr location_settings_; - diff --git a/components/permissions/embedded_permission_prompt_flow_model.cc b/components/permissions/embedded_permission_prompt_flow_model.cc --- a/components/permissions/embedded_permission_prompt_flow_model.cc +++ b/components/permissions/embedded_permission_prompt_flow_model.cc @@ -1069,7 +1072,7 @@ diff --git a/components/permissions/permission_context_base.cc b/components/perm +} + +void PermissionContextBase::UpdateSettingImpl(const PermissionRequestData& request_data, -+ base::Value setting, ++ PermissionSetting setting, + bool is_one_time, + bool use_lifetime_option, + content_settings::mojom::LifetimeMode lifetime_option) { @@ -1112,7 +1115,7 @@ diff --git a/components/permissions/permission_context_base.h b/components/permi // Store the decided permission state. Virtual since the permission might be // stored with different restrictions (for example for desktop notifications). + void UpdateSettingImpl(const PermissionRequestData& request_data, -+ base::Value setting, ++ PermissionSetting setting, + bool is_one_time, + bool use_lifetime_option, + content_settings::mojom::LifetimeMode lifetime_option); diff --git a/build/patches/Add-option-to-disable-snapshots.patch b/build/patches/Add-option-to-disable-snapshots.patch index 590db3ba..1b60bde0 100644 --- a/build/patches/Add-option-to-disable-snapshots.patch +++ b/build/patches/Add-option-to-disable-snapshots.patch @@ -20,7 +20,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser TabUtils.setDrawableAndUpdateImageMatrix(thumbnail, result, thumbnailSize); } else { - thumbnail.setImageDrawable(null); -+ TabListFaviconProvider.TabFavicon tabFavicon = model.get(TabProperties.FAVICON); ++ TabFavicon tabFavicon = model.get(TabProperties.FAVICON); + if (tabFavicon != null) { + thumbnail.setScaleType(ImageView.ScaleType.CENTER); + thumbnail.setImageDrawable( @@ -199,7 +199,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -6067,6 +6067,14 @@ To change this setting, BEGIN_LINKdelete the Chrome d +@@ -6194,6 +6194,14 @@ To change this setting, BEGIN_LINKdelete the Chrome d Your %1$swww.amazon.com timer ran out. It'll start again tomorrow. diff --git a/build/patches/Add-webGL-site-setting.patch b/build/patches/Add-webGL-site-setting.patch index ff8fe52d..86a1d176 100644 --- a/build/patches/Add-webGL-site-setting.patch +++ b/build/patches/Add-webGL-site-setting.patch @@ -166,7 +166,7 @@ new file mode 100644 + WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE, + WebsiteSettingsRegistry::ALL_PLATFORMS, + ContentSettingsInfo::INHERIT_IN_INCOGNITO, -+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS); ++ PermissionSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS); + + content_settings::WebsiteSettingsRegistry::GetInstance() + ->GetMutable(ContentSettingsType::WEBGL) diff --git a/build/patches/Add-webRTC-site-settings.patch b/build/patches/Add-webRTC-site-settings.patch index 2e0ed316..b6e5800f 100644 --- a/build/patches/Add-webRTC-site-settings.patch +++ b/build/patches/Add-webRTC-site-settings.patch @@ -12,9 +12,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../bromite_content_settings/webrtc.inc | 22 +++++ .../bromite_content_settings/WEBRTC.inc | 1 + .../peer_connection_dependency_factory.cc | 6 ++ - .../peerconnection/rtc_rtp_receiver.cc | 10 ++ - .../modules/peerconnection/rtc_rtp_sender.cc | 10 ++ - 7 files changed, 170 insertions(+) + .../peerconnection/rtc_rtp_receiver.cc | 11 +++ + .../modules/peerconnection/rtc_rtp_sender.cc | 11 +++ + 7 files changed, 172 insertions(+) create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebRTCContentSetting.java create mode 100644 components/browser_ui/strings/bromite_content_settings/webrtc.grdp create mode 100644 components/content_settings/core/browser/bromite_content_settings/webrtc.inc @@ -164,7 +164,7 @@ new file mode 100644 + WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE, + WebsiteSettingsRegistry::ALL_PLATFORMS, + ContentSettingsInfo::INHERIT_IN_INCOGNITO, -+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS); ++ PermissionSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS); + + content_settings::WebsiteSettingsRegistry::GetInstance() + ->GetMutable(ContentSettingsType::WEBRTC) @@ -210,16 +210,17 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_d diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc -@@ -16,6 +16,8 @@ +@@ -16,6 +16,9 @@ #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" #include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" +#include "third_party/blink/public/platform/web_content_settings_client.h" +#include "third_party/blink/public/web/web_local_frame.h" ++#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_rtcp_parameters.h" -@@ -288,6 +290,14 @@ RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(ScriptState* state, +@@ -288,6 +291,14 @@ RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(ScriptState* state, if (kind != "audio" && kind != "video") return nullptr; @@ -237,16 +238,17 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver. diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc -@@ -21,6 +21,8 @@ +@@ -21,6 +21,9 @@ #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" #include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" +#include "third_party/blink/public/platform/web_content_settings_client.h" +#include "third_party/blink/public/web/web_local_frame.h" ++#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_encoding_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h" -@@ -1035,6 +1037,14 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(ScriptState* state, +@@ -1035,6 +1038,14 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(ScriptState* state, if (kind != "audio" && kind != "video") return nullptr; diff --git a/build/patches/Android-fonts-fingerprinting-mitigation.patch b/build/patches/Android-fonts-fingerprinting-mitigation.patch index d2d6b933..08dd4d46 100644 --- a/build/patches/Android-fonts-fingerprinting-mitigation.patch +++ b/build/patches/Android-fonts-fingerprinting-mitigation.patch @@ -34,15 +34,15 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ...ndroid-fonts-fingerprinting-mitigation.inc | 5 + skia/BUILD.gn | 12 + .../include/ports/SkFontConfigInterface.h | 2 + - .../skia/include/ports/SkFontMgr_android.h | 40 +- + .../skia/include/ports/SkFontMgr_android.h | 42 +- .../skia/src/ports/SkFontConfigInterface.cpp | 4 + .../ports/SkFontConfigInterface_direct.cpp | 5 + .../src/ports/SkFontConfigInterface_direct.h | 1 + - .../skia/src/ports/SkFontMgr_android.cpp | 274 ++- + .../skia/src/ports/SkFontMgr_android.cpp | 279 ++- .../skia/src/ports/SkFontMgr_android_data.cpp | 1640 +++++++++++++++++ .../src/ports/SkFontMgr_android_parser.cpp | 49 +- .../skia/src/ports/SkFontMgr_android_parser.h | 5 +- - 36 files changed, 2408 insertions(+), 76 deletions(-) + 36 files changed, 2415 insertions(+), 76 deletions(-) create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Android-fonts-fingerprinting-mitigation.grdp create mode 100644 components/component_updater/installer_policies/fonts_pack_component_installer.cc create mode 100644 components/component_updater/installer_policies/fonts_pack_component_installer.h @@ -106,7 +106,7 @@ diff --git a/chrome/android/java/res/xml/developer_preferences.xml b/chrome/andr diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -7944,6 +7944,13 @@ static_library("browser") { +@@ -7951,6 +7951,13 @@ static_library("browser") { } } @@ -884,7 +884,7 @@ diff --git a/third_party/skia/include/ports/SkFontMgr_android.h b/third_party/sk #include -@@ -40,9 +45,42 @@ struct SkFontMgr_Android_CustomFonts { +@@ -40,9 +45,44 @@ struct SkFontMgr_Android_CustomFonts { * system IO resources on initialization. */ bool fIsolated; @@ -925,6 +925,8 @@ diff --git a/third_party/skia/include/ports/SkFontMgr_android.h b/third_party/sk /** Create a font manager for Android. If 'custom' is NULL, use only system fonts. */ -SK_API sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* custom, ++SK_API sk_sp SkFontMgr_New_Android(std::unique_ptr custom); ++ +SK_API sk_sp SkFontMgr_New_Android(std::unique_ptr custom, std::unique_ptr scanner); #endif // SkFontMgr_android_DEFINED @@ -969,7 +971,15 @@ diff --git a/third_party/skia/src/ports/SkFontConfigInterface_direct.h b/third_p diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia/src/ports/SkFontMgr_android.cpp --- a/third_party/skia/src/ports/SkFontMgr_android.cpp +++ b/third_party/skia/src/ports/SkFontMgr_android.cpp -@@ -27,6 +27,7 @@ +@@ -16,6 +16,7 @@ + #include "include/core/SkStream.h" + #include "include/core/SkString.h" + #include "include/ports/SkFontMgr_android.h" ++#include "include/ports/SkFontScanner_FreeType.h" + #include "include/private/base/SkFixed.h" + #include "include/private/base/SkTArray.h" + #include "include/private/base/SkTDArray.h" +@@ -27,6 +28,7 @@ #include "src/core/SkTypefaceCache.h" #include "src/ports/SkFontMgr_android_parser.h" #include "src/ports/SkTypeface_proxy.h" @@ -977,7 +987,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia #include #include -@@ -36,6 +37,91 @@ using namespace skia_private; +@@ -36,6 +38,91 @@ using namespace skia_private; class SkData; namespace { @@ -1069,7 +1079,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia class SkTypeface_AndroidSystem : public SkTypeface_proxy { public: static sk_sp Make(sk_sp realTypeface, -@@ -109,7 +195,8 @@ using StreamForPathCache = skia_private::THashMapisFixedPitch(), -@@ -205,15 +339,18 @@ public: +@@ -205,15 +340,18 @@ public: return fStyles[index]; } @@ -1237,7 +1247,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia SkString fFallbackFor; friend struct NameToFamily; -@@ -234,24 +371,26 @@ struct NameToFamily { +@@ -234,24 +372,26 @@ struct NameToFamily { class SkFontMgr_Android : public SkFontMgr { public: @@ -1268,7 +1278,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia } this->buildNameToFamilyMap(families, custom ? custom->fIsolated : false); this->findDefaultStyleSet(); -@@ -309,33 +448,53 @@ protected: +@@ -309,33 +449,53 @@ protected: return sset->matchStyle(style); } @@ -1337,7 +1347,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia } } return nullptr; -@@ -358,7 +517,7 @@ protected: +@@ -358,7 +518,7 @@ protected: for (int bcp47Index = bcp47Count; bcp47Index --> 0;) { SkLanguage lang(bcp47[bcp47Index]); while (!lang.getTag().isEmpty()) { @@ -1346,7 +1356,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia find_family_style_character(currentFamilyName, fFallbackNameToFamilyMap, style, SkToBool(elegant), lang.getTag(), character); -@@ -369,7 +528,7 @@ protected: +@@ -369,7 +529,7 @@ protected: lang = lang.getParent(); } } @@ -1355,7 +1365,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia find_family_style_character(currentFamilyName, fFallbackNameToFamilyMap, style, SkToBool(elegant), SkString(), character); -@@ -420,6 +579,7 @@ protected: +@@ -420,6 +580,7 @@ protected: private: std::unique_ptr fScanner; @@ -1363,7 +1373,7 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia TArray> fStyleSets; sk_sp fDefaultStyleSet; -@@ -441,7 +601,7 @@ private: +@@ -441,7 +602,7 @@ private: } sk_sp newSet = @@ -1372,16 +1382,20 @@ diff --git a/third_party/skia/src/ports/SkFontMgr_android.cpp b/third_party/skia if (0 == newSet->count()) { return; } -@@ -486,7 +646,7 @@ static char const * const gSystemFontUseStrings[] = { +@@ -486,7 +647,11 @@ static char const * const gSystemFontUseStrings[] = { } // namespace -sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* custom, std::unique_ptr scanner) { ++sk_sp SkFontMgr_New_Android(std::unique_ptr custom) { ++ return SkFontMgr_New_Android(std::move(custom), SkFontScanner_Make_FreeType()); ++} ++ +sk_sp SkFontMgr_New_Android(std::unique_ptr custom, std::unique_ptr scanner) { if (custom) { SkASSERT(0 <= custom->fSystemFontUse); SkASSERT(custom->fSystemFontUse < std::size(gSystemFontUseStrings)); -@@ -496,5 +656,5 @@ sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* cust +@@ -496,5 +661,5 @@ sk_sp SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* cust custom->fFontsXml, custom->fFallbackFontsXml); } diff --git a/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch b/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch index ceab4d31..45157964 100644 --- a/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch +++ b/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch @@ -15,9 +15,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../modules/webaudio/base_audio_context.cc | 12 ++++++++++++ .../renderer/modules/webaudio/base_audio_context.h | 2 ++ .../modules/webaudio/offline_audio_context.cc | 1 + - .../renderer/modules/webaudio/realtime_analyser.cc | 7 +++++++ + .../renderer/modules/webaudio/realtime_analyser.cc | 9 ++++++++- .../platform/runtime_enabled_features.json5 | 5 ++--- - 11 files changed, 56 insertions(+), 4 deletions(-) + 11 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 cromite_flags/chrome/browser/about_flags_cc/AudioBuffer-AnalyserNode-fp-mitigations.inc create mode 100644 cromite_flags/third_party/blink/common/features_cc/AudioBuffer-AnalyserNode-fp-mitigations.inc create mode 100644 cromite_flags/third_party/blink/common/features_h/AudioBuffer-AnalyserNode-fp-mitigations.inc @@ -196,11 +196,13 @@ diff --git a/third_party/blink/renderer/modules/webaudio/realtime_analyser.cc b/ // Clip to valid range. UNSAFE_TODO(destination[i]) = static_cast(ClampTo(scaled_value, 0, UCHAR_MAX)); -@@ -325,6 +331,7 @@ void RealtimeAnalyser::ConvertFloatToDb(DOMFloat32Array* destination_array) { +@@ -324,7 +330,8 @@ void RealtimeAnalyser::ConvertFloatToDb(DOMFloat32Array* destination_array) { + for (unsigned i = 0; i < len; ++i) { float linear_value = UNSAFE_TODO(source[i]); double db_mag = audio_utilities::LinearToDecibels(linear_value); - UNSAFE_TODO(destination[i]) = static_cast(db_mag); -+ destination[i] = BaseAudioContext::ShuffleAudioData(destination[i], i); +- UNSAFE_TODO(destination[i]) = static_cast(db_mag); ++ auto v = static_cast(db_mag); ++ UNSAFE_TODO(destination[i]) = BaseAudioContext::ShuffleAudioData(v, i); } } } diff --git a/build/patches/Block-gateway-attacks-via-websockets.patch b/build/patches/Block-gateway-attacks-via-websockets.patch index 0fcd15f6..66f322af 100644 --- a/build/patches/Block-gateway-attacks-via-websockets.patch +++ b/build/patches/Block-gateway-attacks-via-websockets.patch @@ -7,45 +7,19 @@ This approach is not comprehensive, see also: License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../execution_context/execution_context.cc | 15 +++++++++ .../execution_context/execution_context.h | 1 + .../renderer/core/loader/base_fetch_context.h | 1 + .../core/loader/frame_fetch_context.cc | 20 ++++++++++++ .../core/loader/frame_fetch_context.h | 1 + .../core/loader/worker_fetch_context.cc | 21 +++++++++++++ .../core/loader/worker_fetch_context.h | 1 + - .../core/workers/installed_scripts_manager.cc | 4 +-- + .../core/workers/installed_scripts_manager.cc | 2 +- .../background_fetch_manager.cc | 31 +++++++++++++++++++ .../websockets/websocket_channel_impl.cc | 5 +++ .../modules/websockets/websocket_common.cc | 30 ++++++++++++++++++ .../modules/websockets/websocket_common.h | 4 +++ - 12 files changed, 132 insertions(+), 2 deletions(-) + 11 files changed, 116 insertions(+), 1 deletion(-) -diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc ---- a/third_party/blink/renderer/core/execution_context/execution_context.cc -+++ b/third_party/blink/renderer/core/execution_context/execution_context.cc -@@ -710,6 +710,21 @@ void ExecutionContext::WriteIntoTrace( - proto->set_world_type(GetWorldType(*this)); - } - -+String ExecutionContext::addressSpaceForBindings() const { -+ switch (AddressSpace()) { -+ case network::mojom::IPAddressSpace::kPublic: -+ case network::mojom::IPAddressSpace::kUnknown: -+ return "public"; -+ -+ case network::mojom::IPAddressSpace::kPrivate: -+ return "private"; -+ -+ case network::mojom::IPAddressSpace::kLocal: -+ return "local"; -+ } -+ NOTREACHED(); -+} -+ - bool ExecutionContext::CrossOriginIsolatedCapabilityOrDisabledWebSecurity() - const { - return Agent::IsWebSecurityDisabled() || CrossOriginIsolatedCapability(); diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h --- a/third_party/blink/renderer/core/execution_context/execution_context.h +++ b/third_party/blink/renderer/core/execution_context/execution_context.h @@ -84,7 +58,7 @@ diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/thi + network::mojom::IPAddressSpace target_space = + network::mojom::IPAddressSpace::kPublic; + if (network_utils::IsReservedIPAddress(request_url.Host())) -+ target_space = network::mojom::IPAddressSpace::kPrivate; ++ target_space = network::mojom::IPAddressSpace::kLocal; + if (SecurityOrigin::Create(request_url)->IsLocalhost()) + target_space = network::mojom::IPAddressSpace::kLocal; + @@ -133,7 +107,7 @@ diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.cc b/th + network::mojom::IPAddressSpace target_space = + network::mojom::IPAddressSpace::kPublic; + if (network_utils::IsReservedIPAddress(request_url.Host())) -+ target_space = network::mojom::IPAddressSpace::kPrivate; ++ target_space = network::mojom::IPAddressSpace::kLocal; + if (SecurityOrigin::Create(request_url)->IsLocalhost()) + target_space = network::mojom::IPAddressSpace::kLocal; + @@ -161,12 +135,9 @@ diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.h b/thi diff --git a/third_party/blink/renderer/core/workers/installed_scripts_manager.cc b/third_party/blink/renderer/core/workers/installed_scripts_manager.cc --- a/third_party/blink/renderer/core/workers/installed_scripts_manager.cc +++ b/third_party/blink/renderer/core/workers/installed_scripts_manager.cc -@@ -33,9 +33,9 @@ InstalledScriptsManager::ScriptData::ScriptData( - // place so that this is shareable out of worker code. - response_address_space_ = network::mojom::IPAddressSpace::kPublic; +@@ -35,7 +35,7 @@ InstalledScriptsManager::ScriptData::ScriptData( if (network_utils::IsReservedIPAddress(script_url_.Host())) -- response_address_space_ = network::mojom::IPAddressSpace::kLocal; -+ response_address_space_ = network::mojom::IPAddressSpace::kPrivate; + response_address_space_ = network::mojom::IPAddressSpace::kLocal; if (SecurityOrigin::Create(script_url_)->IsLocalhost()) - response_address_space_ = network::mojom::IPAddressSpace::kLoopback; + response_address_space_ = network::mojom::IPAddressSpace::kLocal; @@ -193,7 +164,7 @@ diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetc + network::mojom::IPAddressSpace target_space = + network::mojom::IPAddressSpace::kPublic; + if (network_utils::IsReservedIPAddress(request_url.Host())) -+ target_space = network::mojom::IPAddressSpace::kPrivate; ++ target_space = network::mojom::IPAddressSpace::kLocal; + if (SecurityOrigin::Create(request_url)->IsLocalhost()) + target_space = network::mojom::IPAddressSpace::kLocal; + @@ -265,7 +236,7 @@ diff --git a/third_party/blink/renderer/modules/websockets/websocket_common.cc b + network::mojom::IPAddressSpace target_space = + network::mojom::IPAddressSpace::kPublic; + if (network_utils::IsReservedIPAddress(request_url.Host())) -+ target_space = network::mojom::IPAddressSpace::kPrivate; ++ target_space = network::mojom::IPAddressSpace::kLocal; + if (SecurityOrigin::Create(request_url)->IsLocalhost()) + target_space = network::mojom::IPAddressSpace::kLocal; + diff --git a/build/patches/Cromite-Branding--improve-settings-ui.patch b/build/patches/Cromite-Branding--improve-settings-ui.patch index 2f42d25c..4a63b5b6 100644 --- a/build/patches/Cromite-Branding--improve-settings-ui.patch +++ b/build/patches/Cromite-Branding--improve-settings-ui.patch @@ -18,7 +18,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -627,7 +627,7 @@ chrome_java_resources = [ +@@ -634,7 +634,7 @@ chrome_java_resources = [ "java/res/xml/manage_sync_preferences.xml", "java/res/xml/personalize_google_services_preferences.xml", "java/res/xml/incognito_preferences.xml", @@ -218,8 +218,8 @@ new file mode 100644 + app:isPreferenceVisible="false" /> + + { +- sPackageInfo = null; +- }); + } + } diff --git a/chrome/browser/ui/android/google_bottom_bar/java/src/org/chromium/chrome/browser/ui/google_bottom_bar/GoogleBottomBarActionsHandler.java b/chrome/browser/ui/android/google_bottom_bar/java/src/org/chromium/chrome/browser/ui/google_bottom_bar/GoogleBottomBarActionsHandler.java --- a/chrome/browser/ui/android/google_bottom_bar/java/src/org/chromium/chrome/browser/ui/google_bottom_bar/GoogleBottomBarActionsHandler.java +++ b/chrome/browser/ui/android/google_bottom_bar/java/src/org/chromium/chrome/browser/ui/google_bottom_bar/GoogleBottomBarActionsHandler.java diff --git a/build/patches/Disable-UA-full-version.patch b/build/patches/Disable-UA-full-version.patch index a5434f2e..bb366b64 100644 --- a/build/patches/Disable-UA-full-version.patch +++ b/build/patches/Disable-UA-full-version.patch @@ -7,22 +7,23 @@ getHighEntropyValues will return only the major version 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 --- - .../renderer/core/frame/navigator_ua_data.cc | 16 ++++++++++++++-- - 1 file changed, 14 insertions(+), 2 deletions(-) + .../renderer/core/frame/navigator_ua_data.cc | 17 +++++++++++++++-- + 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/third_party/blink/renderer/core/frame/navigator_ua_data.cc b/third_party/blink/renderer/core/frame/navigator_ua_data.cc --- a/third_party/blink/renderer/core/frame/navigator_ua_data.cc +++ b/third_party/blink/renderer/core/frame/navigator_ua_data.cc -@@ -7,6 +7,8 @@ +@@ -7,6 +7,9 @@ #include "base/compiler_specific.h" #include "base/task/single_thread_task_runner.h" #include "third_party/blink/public/common/features.h" +#include "base/version.h" +#include "base/strings/strcat.h" ++#include "base/strings/string_number_conversions.h" #include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" #include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" -@@ -65,6 +67,16 @@ void MaybeRecordMetric(bool record_identifiability, +@@ -65,6 +68,16 @@ void MaybeRecordMetric(bool record_identifiability, execution_context); } @@ -39,7 +40,7 @@ diff --git a/third_party/blink/renderer/core/frame/navigator_ua_data.cc b/third_ } // namespace NavigatorUAData::NavigatorUAData(ExecutionContext* context) -@@ -103,7 +115,7 @@ void NavigatorUAData::SetFullVersionList( +@@ -103,7 +116,7 @@ void NavigatorUAData::SetFullVersionList( const UserAgentBrandList& full_version_list) { for (const auto& brand_version : full_version_list) { AddBrandFullVersion(String::FromUTF8(brand_version.brand), @@ -48,7 +49,7 @@ diff --git a/third_party/blink/renderer/core/frame/navigator_ua_data.cc b/third_ } } -@@ -125,7 +137,7 @@ void NavigatorUAData::SetModel(const String& model) { +@@ -125,7 +138,7 @@ void NavigatorUAData::SetModel(const String& model) { } void NavigatorUAData::SetUAFullVersion(const String& ua_full_version) { diff --git a/build/patches/Disable-all-predictors-code.patch b/build/patches/Disable-all-predictors-code.patch index aa47c99c..e0636484 100644 --- a/build/patches/Disable-all-predictors-code.patch +++ b/build/patches/Disable-all-predictors-code.patch @@ -6,6 +6,7 @@ Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- chrome/browser/BUILD.gn | 4 +--- + .../background_download_service_factory.cc | 2 +- .../preloading_model_keyed_service.cc | 3 +++ .../preloading_model_keyed_service_factory.cc | 4 +--- .../optimization_guide/chrome_hints_manager.cc | 1 + @@ -13,7 +14,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../optimization_guide_keyed_service.cc | 1 - chrome/browser/permissions/BUILD.gn | 2 -- .../permissions/chrome_permissions_client.cc | 2 -- - .../prediction_model_handler_provider.cc | 4 ++-- + .../passage_embedder_delegate.cc | 2 ++ + .../prediction_model_handler_provider.cc | 9 ++++++--- .../predictors/autocomplete_action_predictor.cc | 2 ++ .../predictors/loading_predictor_config.cc | 4 ++-- chrome/browser/predictors/predictors_features.cc | 3 +-- @@ -24,6 +26,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ...fication_content_detection_service_factory.cc | 6 ++++++ .../ui/autofill/chrome_autofill_client.cc | 15 --------------- chrome/browser/ui/tab_helpers.cc | 1 - + .../autofill_ml_internals_page_handler.cc | 2 ++ + .../autofill_ml_internals_page_handler.h | 3 +++ + .../autofill_ml_internals_ui.cc | 3 +++ .../read_anything/read_aloud_app_model.cc | 16 ++++++++++++++-- .../read_anything/read_aloud_app_model.h | 9 ++++++++- .../read_anything_app_controller.cc | 10 ++++++++++ @@ -37,8 +42,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../prediction_model_download_manager.cc | 6 ++++-- .../delivery/prediction_model_fetcher_impl.cc | 1 + .../core/hints/hints_fetcher.cc | 1 + - .../core/hints/hints_manager.cc | 1 + - .../core/optimization_guide_features.cc | 14 ++++++++------ + .../core/hints/hints_manager.cc | 2 ++ + .../core/optimization_guide_features.cc | 12 ++++++------ components/optimization_guide/features.gni | 3 +-- .../core/page_content_annotations_features.cc | 4 ++++ .../page_content_annotations_model_manager.cc | 1 + @@ -57,7 +62,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../core/html/parser/html_document_parser.cc | 1 + .../document_speculation_rules.cc | 1 + .../platform/runtime_enabled_features.json5 | 2 +- - 52 files changed, 122 insertions(+), 78 deletions(-) + 57 files changed, 136 insertions(+), 80 deletions(-) create mode 100644 cromite_flags/chrome/browser/browser_features_cc/Disable-all-predictors-code.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Disable-all-predictors-code.inc create mode 100644 cromite_flags/chrome/common/chrome_features_cc/Disable-all-predictors-code.inc @@ -87,6 +92,18 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "//components/safe_browsing/content/browser/password_protection", "//components/safe_browsing/content/browser/web_ui", "//components/safe_browsing/content/common/proto:download_file_types_proto", +diff --git a/chrome/browser/download/background_download_service_factory.cc b/chrome/browser/download/background_download_service_factory.cc +--- a/chrome/browser/download/background_download_service_factory.cc ++++ b/chrome/browser/download/background_download_service_factory.cc +@@ -179,7 +179,7 @@ BackgroundDownloadServiceFactory::BuildServiceInstanceFor( + } + #endif // BUILDFLAG(IS_CHROMEOS) + +- if (!key->IsOffTheRecord()) { ++ if (((false)) && !key->IsOffTheRecord()) { + clients->insert(std::make_pair( + download::DownloadClient::OPTIMIZATION_GUIDE_PREDICTION_MODELS, + std::make_unique( diff --git a/chrome/browser/navigation_predictor/preloading_model_keyed_service.cc b/chrome/browser/navigation_predictor/preloading_model_keyed_service.cc --- a/chrome/browser/navigation_predictor/preloading_model_keyed_service.cc +++ b/chrome/browser/navigation_predictor/preloading_model_keyed_service.cc @@ -222,6 +239,23 @@ diff --git a/chrome/browser/permissions/chrome_permissions_client.cc b/chrome/br return selectors; } +diff --git a/chrome/browser/permissions/prediction_service/passage_embedder_delegate.cc b/chrome/browser/permissions/prediction_service/passage_embedder_delegate.cc +--- a/chrome/browser/permissions/prediction_service/passage_embedder_delegate.cc ++++ b/chrome/browser/permissions/prediction_service/passage_embedder_delegate.cc +@@ -17,11 +17,13 @@ PassageEmbedderDelegate::PassageEmbedderDelegate(Profile* profile) + : profile_(profile) {} + + Embedder* PassageEmbedderDelegate::get_passage_embedder() { ++#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + if (auto* prediction_model_handler_provider = + PredictionModelHandlerProviderFactory::GetForBrowserContext( + profile_)) { + return prediction_model_handler_provider->GetPassageEmbedder(); + } ++#endif + return nullptr; + } + diff --git a/chrome/browser/permissions/prediction_service/prediction_model_handler_provider.cc b/chrome/browser/permissions/prediction_service/prediction_model_handler_provider.cc --- a/chrome/browser/permissions/prediction_service/prediction_model_handler_provider.cc +++ b/chrome/browser/permissions/prediction_service/prediction_model_handler_provider.cc @@ -239,6 +273,18 @@ diff --git a/chrome/browser/permissions/prediction_service/prediction_model_hand #include "components/permissions/prediction_service/prediction_model_handler.h" #endif // BUILDFLAG(BUILD_WITH_TFLITE_LIB) +@@ -26,7 +26,10 @@ namespace permissions { + PredictionModelHandlerProvider::PredictionModelHandlerProvider( + OptimizationGuideKeyedService* optimization_guide, + passage_embeddings::Embedder* passage_embedder) +- : passage_embedder_(passage_embedder) { ++#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) ++ : passage_embedder_(passage_embedder) ++#endif ++ { + VLOG(1) << "[PermissionsAI] PredictionModelHandlerProvider ctor"; + // We set up model handlers if necessary in order of preference: + // Aiv4, Aiv3, Aiv1 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 @@ -303,7 +349,7 @@ diff --git a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc -@@ -1195,7 +1195,6 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -1196,7 +1196,6 @@ void ChromeBrowserMainExtraPartsProfiles:: base::FeatureList::IsEnabled( permissions::features::kPermissionOnDeviceGeolocationPredictions) || base::FeatureList::IsEnabled(permissions::features::kPermissionsAIv1)) { @@ -404,6 +450,66 @@ diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc OpenerHeuristicService::Get(web_contents->GetBrowserContext()); if (optimization_guide::features::IsOptimizationHintsEnabled()) { OptimizationGuideWebContentsObserver::CreateForWebContents(web_contents); +diff --git a/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_page_handler.cc b/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_page_handler.cc +--- a/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_page_handler.cc ++++ b/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_page_handler.cc +@@ -12,9 +12,11 @@ AutofillMlInternalsPageHandlerImpl::AutofillMlInternalsPageHandlerImpl( + mojo::PendingReceiver receiver, + autofill::MLLogRouter* log_router) + : receiver_(this, std::move(receiver)) { ++#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + if (log_router) { + log_router_observation_.Observe(log_router); + } ++#endif + } + + void AutofillMlInternalsPageHandlerImpl::SetPage( +diff --git a/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_page_handler.h b/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_page_handler.h +--- a/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_page_handler.h ++++ b/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_page_handler.h +@@ -8,6 +8,7 @@ + #include "base/scoped_observation.h" + #include "components/autofill/core/browser/ml_model/logging/autofill_ml_internals.mojom.h" + #include "components/autofill/core/browser/ml_model/logging/ml_log_router.h" ++#include "components/optimization_guide/machine_learning_tflite_buildflags.h" + #include "mojo/public/cpp/bindings/pending_receiver.h" + #include "mojo/public/cpp/bindings/receiver.h" + #include "mojo/public/cpp/bindings/remote.h" +@@ -35,8 +36,10 @@ class AutofillMlInternalsPageHandlerImpl + private: + mojo::Receiver receiver_; + mojo::Remote page_; ++#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + base::ScopedObservation + log_router_observation_{this}; ++#endif + }; + + #endif // CHROME_BROWSER_UI_WEBUI_AUTOFILL_ML_INTERNALS_AUTOFILL_ML_INTERNALS_PAGE_HANDLER_H_ +diff --git a/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_ui.cc b/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_ui.cc +--- a/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_ui.cc ++++ b/chrome/browser/ui/webui/autofill_ml_internals/autofill_ml_internals_ui.cc +@@ -11,6 +11,7 @@ + #include "chrome/grit/autofill_ml_internals_resources.h" + #include "chrome/grit/autofill_ml_internals_resources_map.h" + #include "components/autofill/core/browser/ml_model/logging/autofill_ml_internals.mojom.h" ++#include "components/optimization_guide/machine_learning_tflite_buildflags.h" + #include "content/public/browser/web_ui.h" + #include "content/public/browser/web_ui_data_source.h" + #include "ui/webui/webui_util.h" +@@ -29,9 +30,11 @@ AutofillMlInternalsUI::AutofillMlInternalsUI(content::WebUI* web_ui) + + void AutofillMlInternalsUI::BindInterface( + mojo::PendingReceiver receiver) { ++#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + page_handler_ = std::make_unique( + std::move(receiver), autofill::MLLogRouterFactory::GetForProfile( + Profile::FromWebUI(web_ui()))); ++#endif + } + + WEB_UI_CONTROLLER_TYPE_IMPL(AutofillMlInternalsUI) diff --git a/chrome/renderer/accessibility/read_anything/read_aloud_app_model.cc b/chrome/renderer/accessibility/read_anything/read_aloud_app_model.cc --- a/chrome/renderer/accessibility/read_anything/read_aloud_app_model.cc +++ b/chrome/renderer/accessibility/read_anything/read_aloud_app_model.cc @@ -806,6 +912,12 @@ diff --git a/components/optimization_guide/core/hints/hints_manager.cc b/compone switch (optimization_type_decision) { case OptimizationTypeDecision::kAllowedByOptimizationFilter: case OptimizationTypeDecision::kAllowedByHint: +@@ -2040,4 +2041,5 @@ void HintsManager::RemoveFetchedEntriesByHintKeys( + hint_cache_->RemoveHintsForHosts(std::move(on_success), hint_keys); + } + ++SET_CROMITE_FEATURE_DISABLED(kHintsBatchUpdateForActiveTabsAndTopHosts); + } // namespace optimization_guide diff --git a/components/optimization_guide/core/optimization_guide_features.cc b/components/optimization_guide/core/optimization_guide_features.cc --- a/components/optimization_guide/core/optimization_guide_features.cc +++ b/components/optimization_guide/core/optimization_guide_features.cc @@ -831,14 +943,12 @@ diff --git a/components/optimization_guide/core/optimization_guide_features.cc b } RequestContextSet GetAllowedContextsForPersonalizedMetadata() { -@@ -692,5 +687,12 @@ bool IsPrivacyGuideAiSettingsEnabled() { +@@ -692,5 +687,10 @@ bool IsPrivacyGuideAiSettingsEnabled() { return base::FeatureList::IsEnabled(kPrivacyGuideAiSettings); } +SET_CROMITE_FEATURE_DISABLED(kOptimizationHints); -+SET_CROMITE_FEATURE_DISABLED(kRemoteOptimizationGuideFetching); +SET_CROMITE_FEATURE_DISABLED(kOptimizationTargetPrediction); -+SET_CROMITE_FEATURE_DISABLED(kOptimizationGuideModelDownloading); +SET_CROMITE_FEATURE_DISABLED(kPushNotifications); +SET_CROMITE_FEATURE_DISABLED(kPreventLongRunningPredictionModels); +SET_CROMITE_FEATURE_DISABLED(kOptimizationGuideFetchingForSRP); diff --git a/build/patches/Disable-safety-check.patch b/build/patches/Disable-safety-check.patch index 25f464ea..33dd341a 100644 --- a/build/patches/Disable-safety-check.patch +++ b/build/patches/Disable-safety-check.patch @@ -32,7 +32,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//chrome/browser/safety_hub/android:java", "//chrome/browser/screenshot_monitor:java", "//chrome/browser/search_engines/android:java", -@@ -1128,8 +1127,6 @@ if (_is_default_toolchain) { +@@ -1136,8 +1135,6 @@ if (_is_default_toolchain) { "//chrome/browser/recent_tabs:junit", "//chrome/browser/recent_tabs/internal:junit", "//chrome/browser/safe_browsing/android:junit", @@ -41,7 +41,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn "//chrome/browser/search_engines/android:junit", "//chrome/browser/search_resumption:junit", "//chrome/browser/serial/android:junit", -@@ -1417,8 +1414,6 @@ if (_is_default_toolchain) { +@@ -1425,8 +1422,6 @@ if (_is_default_toolchain) { "//chrome/browser/quick_delete:javatests", "//chrome/browser/renderer_host/android:javatests", "//chrome/browser/safe_browsing/android:javatests", @@ -53,7 +53,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -941,7 +941,6 @@ chrome_java_sources = [ +@@ -942,7 +942,6 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingPasswordReuseDialogBridge.java", "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingReferringAppBridge.java", "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingSettingsNavigation.java", @@ -127,7 +127,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/FragmentDependencyProvider.java -@@ -32,13 +32,6 @@ import org.chromium.chrome.browser.privacy_sandbox.ChromeTrackingProtectionDeleg +@@ -34,13 +34,6 @@ import org.chromium.chrome.browser.privacy_sandbox.ChromeTrackingProtectionDeleg import org.chromium.chrome.browser.privacy_sandbox.PrivacySandboxSettingsBaseFragment; import org.chromium.chrome.browser.privacy_sandbox.TopicsManageFragment; import org.chromium.chrome.browser.profiles.Profile; @@ -141,7 +141,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme import org.chromium.chrome.browser.search_engines.settings.SearchEngineSettings; import org.chromium.chrome.browser.signin.SigninAndHistorySyncActivityLauncherImpl; import org.chromium.chrome.browser.site_settings.ChromeSiteSettingsDelegate; -@@ -125,18 +118,6 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -127,18 +120,6 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl delegate.setSnackbarManagerSupplier(mSnackbarManagerSupplier); baseSiteSettingsFragment.setSiteSettingsDelegate(delegate); } @@ -157,10 +157,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme - PasswordManagerHelper.getForProfile(mProfile), - new SettingsCustomTabLauncherImpl()); - } - if (fragment instanceof SearchEngineSettings) { - SearchEngineSettings settings = (SearchEngineSettings) fragment; - settings.setDisableAutoSwitchRunnable( -@@ -219,14 +200,6 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl + if (fragment instanceof CredentialEntryFragmentViewBase) { + CredentialEditUiFactory.create((CredentialEntryFragmentViewBase) fragment, mProfile); + } +@@ -224,14 +205,6 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl ((AutofillLocalIbanEditor) fragment) .setModalDialogManagerSupplier(mModalDialogManagerSupplier); } @@ -175,7 +175,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Fragme if (fragment instanceof INeedSnackbarManager) { ((INeedSnackbarManager)fragment).setSnackbarManagerSupplier(mSnackbarManagerSupplier); } -@@ -241,8 +214,5 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl +@@ -246,8 +219,5 @@ public class FragmentDependencyProvider extends FragmentManager.FragmentLifecycl if (fragment instanceof ManageSyncSettings) { ((ManageSyncSettings) fragment).setSnackbarManagerSupplier(mSnackbarManagerSupplier); } @@ -205,10 +205,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin import org.chromium.chrome.browser.flags.ChromeFeatureList; -import org.chromium.chrome.browser.safety_check.SafetyCheckSettingsFragment; -import org.chromium.chrome.browser.safety_hub.SafetyHubFragment; + import org.chromium.chrome.browser.password_manager.settings.PasswordSettings; import org.chromium.chrome.browser.sync.settings.GoogleServicesSettings; import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; - import org.chromium.components.browser_ui.accessibility.AccessibilitySettings; -@@ -46,10 +44,7 @@ public class SettingsNavigationImpl implements SettingsNavigation { +@@ -47,10 +45,7 @@ public class SettingsNavigationImpl implements SettingsNavigation { ClearBrowsingDataFragment.createFragmentArgs(context.getClass().getName()); break; case SettingsFragment.SAFETY_CHECK: @@ -220,7 +220,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin case SettingsFragment.MAIN: case SettingsFragment.PAYMENT_METHODS: case SettingsFragment.SITE: -@@ -108,11 +103,7 @@ public class SettingsNavigationImpl implements SettingsNavigation { +@@ -110,11 +105,7 @@ public class SettingsNavigationImpl implements SettingsNavigation { case SettingsFragment.PAYMENT_METHODS: return AutofillPaymentMethodsFragment.class; case SettingsFragment.SAFETY_CHECK: @@ -236,7 +236,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3451,7 +3451,6 @@ static_library("browser") { +@@ -3458,7 +3458,6 @@ static_library("browser") { "//chrome/browser/recent_tabs:jni_headers", "//chrome/browser/regional_capabilities", "//chrome/browser/safe_browsing/android:safe_browsing_enums", diff --git a/build/patches/Enable-gwp-asan-on-Android.patch b/build/patches/Enable-gwp-asan-on-Android.patch index 1b4000be..0bf71f23 100644 --- a/build/patches/Enable-gwp-asan-on-Android.patch +++ b/build/patches/Enable-gwp-asan-on-Android.patch @@ -168,7 +168,7 @@ diff --git a/chrome/browser/platform_util_android.cc b/chrome/browser/platform_u + } + + base::android::ScopedJavaGlobalRef obj; -+ obj.Reset(env, return_string); ++ obj.Reset(env, jni_zero::JavaRef::CreateLeaky(env, return_string)); + return ScopedJavaLocalRef(obj); +} diff --git a/chrome/browser/util/android/java/src/org/chromium/chrome/browser/util/PlatformUtil.java b/chrome/browser/util/android/java/src/org/chromium/chrome/browser/util/PlatformUtil.java diff --git a/build/patches/Enable-native-Android-autofill.patch b/build/patches/Enable-native-Android-autofill.patch index 77e425ad..875b166d 100644 --- a/build/patches/Enable-native-Android-autofill.patch +++ b/build/patches/Enable-native-Android-autofill.patch @@ -55,17 +55,16 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java -@@ -27,7 +27,9 @@ import androidx.preference.PreferenceCategory; +@@ -27,6 +27,8 @@ import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceGroup; import org.chromium.base.BuildInfo; +import org.chromium.base.StrictModeContext; - import org.chromium.base.metrics.RecordHistogram; +import org.chromium.base.supplier.Supplier; import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.build.annotations.Nullable; -@@ -60,6 +62,11 @@ import java.lang.annotation.Retention; +@@ -58,6 +60,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Locale; @@ -77,7 +76,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage /** * The "Passwords" screen in Settings, which allows the user to enable or disable password saving, * to view saved passwords (just the username and URL), and to delete saved passwords. -@@ -69,7 +76,7 @@ import java.util.Locale; +@@ -65,7 +72,7 @@ import java.util.Locale; public class PasswordSettings extends ChromeBaseSettingsFragment implements PasswordListObserver, Preference.OnPreferenceClickListener, @@ -86,7 +85,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage @IntDef({ TrustedVaultBannerState.NOT_SHOWN, TrustedVaultBannerState.OFFER_OPT_IN, -@@ -99,6 +106,12 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -95,6 +102,12 @@ public class PasswordSettings extends ChromeBaseSettingsFragment public static final String PREF_TRUSTED_VAULT_BANNER = "trusted_vault_banner"; public static final String PREF_KEY_MANAGE_ACCOUNT_LINK = "manage_account_link"; @@ -99,7 +98,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage private static final String PREF_KEY_CATEGORY_SAVED_PASSWORDS = "saved_passwords"; private static final String PREF_KEY_CATEGORY_EXCEPTIONS = "exceptions"; private static final String PREF_KEY_SAVED_PASSWORDS_NO_TEXT = "saved_passwords_no_text"; -@@ -131,6 +144,8 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -127,6 +140,8 @@ public class PasswordSettings extends ChromeBaseSettingsFragment private Preference mLinkPref; private Menu mMenu; @@ -108,7 +107,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage private @ManagePasswordsReferrer int mManagePasswordsReferrer; private final ObservableSupplierImpl mPageTitle = new ObservableSupplierImpl<>(); -@@ -315,6 +330,7 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -321,6 +336,7 @@ public class PasswordSettings extends ChromeBaseSettingsFragment } createSavePasswordsSwitch(); @@ -116,7 +115,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage if (shouldShowAutoSigninOption()) { createAutoSignInCheckbox(); } -@@ -588,6 +604,71 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -589,6 +605,71 @@ public class PasswordSettings extends ChromeBaseSettingsFragment getPrefService().getBoolean(Pref.CREDENTIALS_ENABLE_SERVICE)); } diff --git a/build/patches/Enable-search-engine-settings-desktop-ui.patch b/build/patches/Enable-search-engine-settings-desktop-ui.patch index 37db4708..626d960b 100644 --- a/build/patches/Enable-search-engine-settings-desktop-ui.patch +++ b/build/patches/Enable-search-engine-settings-desktop-ui.patch @@ -23,6 +23,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../search_engines_browser_proxy.ts | 8 +- .../search_page/search_engines_page.html | 14 +- .../settings/search_page/search_page.html | 6 +- + .../search_page/search_page_index.html | 5 + .../browser/resources/settings/settings.gni | 2 +- .../browser/resources/settings/settings.html | 8 +- .../settings/settings_ui/settings_ui.html | 6 + @@ -78,7 +79,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ui/webui/resources/images/BUILD.gn | 2 +- ui/webui/resources/js/BUILD.gn | 2 +- ui/webui/resources/js/load_time_data.ts | 17 +- - 71 files changed, 1161 insertions(+), 72 deletions(-) + 72 files changed, 1166 insertions(+), 72 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 @@ -100,7 +101,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin import org.chromium.base.IntentUtils; import org.chromium.chrome.browser.autofill.settings.AutofillPaymentMethodsFragment; import org.chromium.chrome.browser.autofill.settings.FinancialAccountsManagementFragment; -@@ -30,6 +33,13 @@ public class SettingsNavigationImpl implements SettingsNavigation { +@@ -31,6 +34,13 @@ public class SettingsNavigationImpl implements SettingsNavigation { /** Instantiated through SettingsNavigationFactory. */ SettingsNavigationImpl() {} @@ -419,7 +420,7 @@ new file mode 100644 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3691,6 +3691,9 @@ static_library("browser") { +@@ -3698,6 +3698,9 @@ static_library("browser") { "//components/user_scripts/android", ] } @@ -741,6 +742,21 @@ diff --git a/chrome/browser/resources/settings/search_page/search_page.html b/ch + style="max-width: calc(100vw)"> +diff --git a/chrome/browser/resources/settings/search_page/search_page_index.html b/chrome/browser/resources/settings/search_page/search_page_index.html +--- a/chrome/browser/resources/settings/search_page/search_page_index.html ++++ b/chrome/browser/resources/settings/search_page/search_page_index.html +@@ -3,6 +3,11 @@ + cr-view-manager[show-all] [slot=view][data-parent-view-id] { + display: none; + } ++ ++ settings-search-engines-page { ++ width: 90%; ++ } ++ + + + +@@ -154,6 +154,11 @@ for the previous order (main_preferences_legacy). --> android:key="useragent_settings" android:order="20" android:title="@string/prefs_useragent_settings"/> @@ -340,7 +338,7 @@ diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3675,6 +3675,13 @@ static_library("browser") { +@@ -3682,6 +3682,13 @@ static_library("browser") { ] deps += [ "//chrome/android/modules/dev_ui/provider:native" ] } @@ -402,23 +400,25 @@ diff --git a/chrome/browser/profiles/BUILD.gn b/chrome/browser/profiles/BUILD.gn diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc -@@ -590,6 +590,10 @@ +@@ -590,6 +590,11 @@ #include "chrome/browser/net/nss_service_factory.h" #endif +#if BUILDFLAG(IS_ANDROID) +#include "components/user_scripts/browser/userscripts_browser_client.h" ++#include "components/user_scripts/browser/renderer_startup_helper.h" +#endif + void AddProfilesExtraParts(ChromeBrowserMainParts* main_parts) { main_parts->AddParts(std::make_unique()); } -@@ -1430,6 +1434,9 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -1430,6 +1435,10 @@ void ChromeBrowserMainExtraPartsProfiles:: #endif WebDataServiceFactory::GetInstance(); webrtc_event_logging::WebRtcEventLogManagerKeyedServiceFactory::GetInstance(); +#if BUILDFLAG(IS_ANDROID) + user_scripts::UserScriptsBrowserClient::GetInstance(); ++ user_scripts::RendererStartupHelperFactory::GetInstance(); +#endif } @@ -685,16 +685,18 @@ diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer diff --git a/chrome/renderer/chrome_render_thread_observer.cc b/chrome/renderer/chrome_render_thread_observer.cc --- a/chrome/renderer/chrome_render_thread_observer.cc +++ b/chrome/renderer/chrome_render_thread_observer.cc -@@ -54,6 +54,8 @@ +@@ -54,6 +54,10 @@ #include "third_party/blink/public/web/web_security_policy.h" #include "third_party/blink/public/web/web_view.h" ++#if BUILDFLAG(IS_ANDROID) +#include "components/user_scripts/renderer/user_scripts_renderer_client.h" ++#endif + #if BUILDFLAG(IS_CHROMEOS) #include "chrome/renderer/ash_merge_session_loader_throttle.h" #endif -@@ -220,6 +222,9 @@ void ChromeRenderThreadObserver::SetConfiguration( +@@ -220,6 +224,9 @@ void ChromeRenderThreadObserver::SetConfiguration( chrome::mojom::DynamicParamsPtr params) { base::AutoLock lock(dynamic_params_lock_); dynamic_params_ = std::move(params); @@ -1716,8 +1718,6 @@ new file mode 100644 + +package org.chromium.components.user_scripts; + -+import static org.chromium.components.browser_ui.widget.BrowserUiListMenuUtils.buildMenuListItem; -+ +import android.content.Context; +import android.content.Intent; +import android.provider.Browser; @@ -1738,6 +1738,7 @@ new file mode 100644 + +import org.chromium.base.ApplicationStatus; +import org.chromium.base.ContextUtils; ++import org.chromium.components.browser_ui.widget.ListItemBuilder; +import org.chromium.components.browser_ui.widget.TintedDrawable; +import org.chromium.components.browser_ui.widget.BrowserUiListMenuUtils; +import org.chromium.ui.listmenu.BasicListMenu; @@ -1768,9 +1769,10 @@ new file mode 100644 + + ModelList menuItems = new ModelList(); + -+ menuItems.add(buildMenuListItem(R.string.remove, 0, 0, true)); -+ menuItems.add(buildMenuListItem(R.string.scripts_view_source, 0, 0, -+ info.ParserError == null || info.ParserError.isEmpty())); ++ menuItems.add(new ListItemBuilder().withTitleRes(R.string.remove).build()); ++ menuItems.add(new ListItemBuilder().withTitleRes(R.string.scripts_view_source) ++ .withEnabled(info.ParserError == null || info.ParserError.isEmpty()) ++ .build()); + + ListMenu.Delegate delegate = (model) -> { + int textId = model.get(ListMenuItemProperties.TITLE_ID); @@ -3448,7 +3450,7 @@ diff --git a/components/user_scripts/browser/BUILD.gn b/components/user_scripts/ new file mode 100755 --- /dev/null +++ b/components/user_scripts/browser/BUILD.gn -@@ -0,0 +1,77 @@ +@@ -0,0 +1,79 @@ +# This file is part of Bromite. + +# Bromite is free software: you can redistribute it and/or modify @@ -3489,6 +3491,8 @@ new file mode 100755 + "user_script_pref_info.h", + "ui/user_scripts_ui.h", + "ui/user_scripts_ui.cc", ++ "renderer_startup_helper.h", ++ "renderer_startup_helper.cc", + ] + + deps = [ @@ -3610,6 +3614,223 @@ new file mode 100755 +} // namespace extensions + +#endif // USERSCRIPTS_BROWSER_FILE_TASK_RUNNER_H_ +diff --git a/components/user_scripts/browser/renderer_startup_helper.cc b/components/user_scripts/browser/renderer_startup_helper.cc +new file mode 100644 +--- /dev/null ++++ b/components/user_scripts/browser/renderer_startup_helper.cc +@@ -0,0 +1,102 @@ ++#include "renderer_startup_helper.h" ++ ++#include "chrome/browser/profiles/incognito_helpers.h" ++#include "components/keyed_service/content/browser_context_dependency_manager.h" ++#include "content/public/browser/browser_context.h" ++#include "content/public/browser/render_process_host.h" ++#include "ipc/ipc_channel_proxy.h" ++ ++namespace user_scripts { ++ ++RendererStartupHelper::RendererStartupHelper(content::BrowserContext* browser_context) ++ : browser_context_(browser_context) { ++ DCHECK(browser_context); ++} ++ ++RendererStartupHelper::~RendererStartupHelper() { ++ for (auto& process_entry : process_mojo_map_) ++ process_entry.first->RemoveObserver(this); ++} ++ ++void RendererStartupHelper::OnRenderProcessHostCreated( ++ content::RenderProcessHost* host) { ++ InitializeProcess(host); ++} ++ ++void RendererStartupHelper::RenderProcessExited( ++ content::RenderProcessHost* host, ++ const content::ChildProcessTerminationInfo& info) { ++ UntrackProcess(host); ++} ++ ++void RendererStartupHelper::RenderProcessHostDestroyed( ++ content::RenderProcessHost* host) { ++ UntrackProcess(host); ++} ++ ++void RendererStartupHelper::InitializeProcess( ++ content::RenderProcessHost* process) { ++ //mojom::Renderer* renderer = ++ process_mojo_map_.emplace(process, BindNewRendererRemote(process)) ++ .first->second.get(); ++ process->AddObserver(this); ++} ++ ++void RendererStartupHelper::UntrackProcess( ++ content::RenderProcessHost* process) { ++ process->RemoveObserver(this); ++ process_mojo_map_.erase(process); ++} ++ ++mojo::PendingAssociatedRemote ++RendererStartupHelper::BindNewRendererRemote( ++ content::RenderProcessHost* process) { ++ mojo::AssociatedRemote renderer_interface; ++ process->GetChannel()->GetRemoteAssociatedInterface(&renderer_interface); ++ return renderer_interface.Unbind(); ++} ++ ++mojom::Renderer* RendererStartupHelper::GetRenderer( ++ content::RenderProcessHost* process) { ++ auto it = process_mojo_map_.find(process); ++ if (it == process_mojo_map_.end()) { ++ return nullptr; ++ } ++ return it->second.get(); ++} ++ ++// static ++RendererStartupHelper* RendererStartupHelperFactory::GetForBrowserContext( ++ content::BrowserContext* context) { ++ return static_cast( ++ GetInstance()->GetServiceForBrowserContext(context, true)); ++} ++ ++// static ++RendererStartupHelperFactory* RendererStartupHelperFactory::GetInstance() { ++ return base::Singleton::get(); ++} ++ ++RendererStartupHelperFactory::RendererStartupHelperFactory() ++ : BrowserContextKeyedServiceFactory( ++ "UserScriptRendererStartupHelper", ++ BrowserContextDependencyManager::GetInstance()) {} ++ ++RendererStartupHelperFactory::~RendererStartupHelperFactory() = default; ++ ++std::unique_ptr ++RendererStartupHelperFactory::BuildServiceInstanceForBrowserContext( ++ content::BrowserContext* context) const { ++ return std::make_unique(context); ++} ++ ++content::BrowserContext* RendererStartupHelperFactory::GetBrowserContextToUse( ++ content::BrowserContext* context) const { ++ return GetBrowserContextRedirectedInIncognito(context); ++} ++ ++bool RendererStartupHelperFactory::ServiceIsCreatedWithBrowserContext() const { ++ return true; ++} ++ ++} +diff --git a/components/user_scripts/browser/renderer_startup_helper.h b/components/user_scripts/browser/renderer_startup_helper.h +new file mode 100644 +--- /dev/null ++++ b/components/user_scripts/browser/renderer_startup_helper.h +@@ -0,0 +1,105 @@ ++ ++#ifndef USERSCRIPTS_BROWSER_RENDERER_STARTUP_HELPER_H_ ++#define USERSCRIPTS_BROWSER_RENDERER_STARTUP_HELPER_H_ ++ ++#include ++#include ++#include ++ ++#include "base/compiler_specific.h" ++#include "base/memory/raw_ptr.h" ++#include "base/memory/singleton.h" ++#include "components/keyed_service/content/browser_context_keyed_service_factory.h" ++#include "components/keyed_service/core/keyed_service.h" ++#include "content/public/browser/render_process_host_creation_observer.h" ++#include "content/public/browser/render_process_host_observer.h" ++#include "components/user_scripts/common/mojom/renderer.mojom.h" ++#include "mojo/public/cpp/bindings/associated_receiver_set.h" ++#include "mojo/public/cpp/bindings/associated_remote.h" ++#include "mojo/public/cpp/bindings/pending_associated_receiver.h" ++#include "mojo/public/cpp/bindings/pending_associated_remote.h" ++ ++namespace content { ++class BrowserContext; ++class RenderProcessHost; ++} // namespace content ++ ++namespace user_scripts { ++ ++class RendererStartupHelper : public KeyedService, ++ public content::RenderProcessHostCreationObserver, ++ public content::RenderProcessHostObserver { ++ public: ++ // This class sends messages to all renderers started for `browser_context`. ++ explicit RendererStartupHelper(content::BrowserContext* browser_context); ++ ++ RendererStartupHelper(const RendererStartupHelper&) = delete; ++ RendererStartupHelper& operator=(const RendererStartupHelper&) = delete; ++ ++ ~RendererStartupHelper() override; ++ ++ // content::RenderProcessHostCreationObserver: ++ void OnRenderProcessHostCreated( ++ content::RenderProcessHost* process_host) override; ++ ++ // content::RenderProcessHostObserver: ++ void RenderProcessExited( ++ content::RenderProcessHost* host, ++ const content::ChildProcessTerminationInfo& info) override; ++ void RenderProcessHostDestroyed(content::RenderProcessHost* host) override; ++ ++ // Returns mojom::Renderer* corresponding to `process`. This would return ++ // nullptr when it's called before `process` is inserted to ++ // `process_mojo_map_` or after it's deleted. Note that the callers should ++ // pass a valid content::RenderProcessHost*. ++ mojom::Renderer* GetRenderer(content::RenderProcessHost* process); ++ ++ private: ++ // Initializes the specified process, informing it of system state and loaded ++ // extensions. ++ void InitializeProcess(content::RenderProcessHost* process); ++ ++ // Untracks the given process. ++ void UntrackProcess(content::RenderProcessHost* process); ++ ++ mojo::PendingAssociatedRemote BindNewRendererRemote( ++ content::RenderProcessHost* process); ++ ++ raw_ptr browser_context_; // Not owned. ++ ++ // A map of render processes to mojo remotes. Being in this ++ // map means that have had the initial batch of IPC messages ++ // sent, including the set of loaded extensions. Further messages that ++ // activate, load, or unload extensions should not be sent until after this ++ // happens. ++ std::map> ++ process_mojo_map_; ++}; ++ ++class RendererStartupHelperFactory : public BrowserContextKeyedServiceFactory { ++ public: ++ RendererStartupHelperFactory(const RendererStartupHelperFactory&) = delete; ++ RendererStartupHelperFactory& operator=(const RendererStartupHelperFactory&) = ++ delete; ++ ++ static RendererStartupHelper* GetForBrowserContext( ++ content::BrowserContext* context); ++ static RendererStartupHelperFactory* GetInstance(); ++ ++ private: ++ friend struct base::DefaultSingletonTraits; ++ ++ RendererStartupHelperFactory(); ++ ~RendererStartupHelperFactory() override; ++ ++ // BrowserContextKeyedServiceFactory implementation: ++ std::unique_ptr BuildServiceInstanceForBrowserContext( ++ content::BrowserContext* profile) const override; ++ content::BrowserContext* GetBrowserContextToUse( ++ content::BrowserContext* context) const override; ++ bool ServiceIsCreatedWithBrowserContext() const override; ++}; ++ ++} ++ ++#endif diff --git a/components/user_scripts/browser/resources/browser_resources.grd b/components/user_scripts/browser/resources/browser_resources.grd new file mode 100644 --- /dev/null @@ -3881,7 +4102,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,723 @@ +@@ -0,0 +1,726 @@ +/* + This file is part of Bromite. + @@ -3909,6 +4130,7 @@ new file mode 100755 + +#include "base/memory/writable_shared_memory_region.h" +#include "base/strings/string_util.h" ++#include "base/strings/string_number_conversions.h" +#include "base/strings/strcat.h" +#include "base/files/file.h" +#include "base/files/file_path.h" @@ -3939,11 +4161,11 @@ new file mode 100755 +#include "ui/android/window_android.h" + +#include "../common/user_scripts_features.h" -+#include "../common/extension_messages.h" +#include "file_task_runner.h" +#include "user_script_prefs.h" +#include "user_script_pref_info.h" +#include "../common/host_id.h" ++#include "renderer_startup_helper.h" + +using content::BrowserThread; +using content::BrowserContext; @@ -4391,8 +4613,10 @@ new file mode 100755 + if (!region_for_process.IsValid()) + return; + -+ process->Send(new ExtensionMsg_UpdateUserScripts( -+ std::move(region_for_process))); ++ mojom::Renderer* renderer = ++ RendererStartupHelperFactory::GetForBrowserContext(browser_context()) ++ ->GetRenderer(process); ++ renderer->UpdateUserScripts(std::move(region_for_process)); +} + +void LoadScriptsOnFileTaskRunner( @@ -5395,7 +5619,7 @@ diff --git a/components/user_scripts/common/BUILD.gn b/components/user_scripts/c new file mode 100755 --- /dev/null +++ b/components/user_scripts/common/BUILD.gn -@@ -0,0 +1,48 @@ +@@ -0,0 +1,58 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. @@ -5419,10 +5643,6 @@ new file mode 100755 + "user_script.h", + "view_type.cc", + "view_type.h", -+ "extension_messages.cc", -+ "extension_messages.h", -+ "extension_message_generator.cc", -+ "extension_message_generator.h", + ] + + configs += [ @@ -5431,6 +5651,7 @@ new file mode 100755 + ] + + public_deps = [ ++ ":mojom", + "//content/public/common", + "//ipc", + "//skia", @@ -5444,6 +5665,19 @@ new file mode 100755 + "//crypto", + ] +} ++ ++mojom("mojom") { ++ disable_variants = true ++ ++ sources = [ ++ "mojom/renderer.mojom", ++ ] ++ ++ public_deps = [ ++ "//mojo/public/mojom/base", ++ "//third_party/blink/public/mojom:mojom_core", ++ ] ++} diff --git a/components/user_scripts/common/constants.h b/components/user_scripts/common/constants.h new file mode 100755 --- /dev/null @@ -5550,176 +5784,6 @@ new file mode 100755 +} // namespace extensions + +#endif // USERSCRIPTS_COMMON_ERROR_UTILS_H_ -diff --git a/components/user_scripts/common/extension_message_generator.cc b/components/user_scripts/common/extension_message_generator.cc -new file mode 100755 ---- /dev/null -+++ b/components/user_scripts/common/extension_message_generator.cc -@@ -0,0 +1,29 @@ -+// Copyright 2014 The Chromium Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// Get basic type definitions. -+#define IPC_MESSAGE_IMPL -+#include "components/user_scripts/common/extension_message_generator.h" -+ -+// Generate constructors. -+#include "ipc/struct_constructor_macros.h" -+#include "components/user_scripts/common/extension_message_generator.h" -+ -+// Generate param traits write methods. -+#include "ipc/param_traits_write_macros.h" -+namespace IPC { -+#include "components/user_scripts/common/extension_message_generator.h" -+} // namespace IPC -+ -+// Generate param traits read methods. -+#include "ipc/param_traits_read_macros.h" -+namespace IPC { -+#include "components/user_scripts/common/extension_message_generator.h" -+} // namespace IPC -+ -+// Generate param traits log methods. -+#include "ipc/param_traits_log_macros.h" -+namespace IPC { -+#include "components/user_scripts/common/extension_message_generator.h" -+} // namespace IPC -diff --git a/components/user_scripts/common/extension_message_generator.h b/components/user_scripts/common/extension_message_generator.h -new file mode 100755 ---- /dev/null -+++ b/components/user_scripts/common/extension_message_generator.h -@@ -0,0 +1,11 @@ -+// Copyright 2014 The Chromium Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// Multiply-included file, hence no include guard. -+ -+#undef USERSCRIPTS_COMMON_EXTENSION_MESSAGES_H_ -+#include "extension_messages.h" -+#ifndef USERSCRIPTS_COMMON_EXTENSION_MESSAGES_H_ -+#error "Failed to include header extension_messages.h" -+#endif -diff --git a/components/user_scripts/common/extension_messages.cc b/components/user_scripts/common/extension_messages.cc -new file mode 100755 ---- /dev/null -+++ b/components/user_scripts/common/extension_messages.cc -@@ -0,0 +1,40 @@ -+// Copyright 2014 The Chromium Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+#include "extension_messages.h" -+ -+#include -+ -+#include -+#include -+ -+#include "content/public/common/common_param_traits.h" -+ -+namespace IPC { -+ -+void ParamTraits::Write(base::Pickle* m, const param_type& p) { -+ WriteParam(m, p.type()); -+ WriteParam(m, p.id()); -+} -+ -+bool ParamTraits::Read(const base::Pickle* m, -+ base::PickleIterator* iter, -+ param_type* r) { -+ HostID::HostType type; -+ std::string id; -+ if (!ReadParam(m, iter, &type)) -+ return false; -+ if (!ReadParam(m, iter, &id)) -+ return false; -+ *r = HostID(type, id); -+ return true; -+} -+ -+void ParamTraits::Log( -+ const param_type& p, std::string* l) { -+ LogParam(p.type(), l); -+ LogParam(p.id(), l); -+} -+ -+} // namespace IPC -diff --git a/components/user_scripts/common/extension_messages.h b/components/user_scripts/common/extension_messages.h -new file mode 100755 ---- /dev/null -+++ b/components/user_scripts/common/extension_messages.h -@@ -0,0 +1,70 @@ -+// Copyright 2014 The Chromium Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// IPC messages for extensions. -+ -+#ifndef USERSCRIPTS_COMMON_EXTENSION_MESSAGES_H_ -+#define USERSCRIPTS_COMMON_EXTENSION_MESSAGES_H_ -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include "base/memory/read_only_shared_memory_region.h" -+#include "base/values.h" -+#include "content/public/common/common_param_traits.h" -+#include "constants.h" -+#include "host_id.h" -+#include "ipc/ipc_message_start.h" -+#include "ipc/ipc_message_macros.h" -+#include "url/gurl.h" -+#include "url/origin.h" -+ -+#define IPC_MESSAGE_START ExtensionMsgStart -+ -+IPC_ENUM_TRAITS_MAX_VALUE(HostID::HostType, HostID::HOST_TYPE_LAST) -+ -+// Singly-included section for custom IPC traits. -+#ifndef INTERNAL_USERSCRIPTS_COMMON_EXTENSION_MESSAGES_H_ -+#define INTERNAL_USERSCRIPTS_COMMON_EXTENSION_MESSAGES_H_ -+ -+namespace IPC { -+ -+template <> -+struct ParamTraits { -+ typedef HostID param_type; -+ static void Write(base::Pickle* m, const param_type& p); -+ static bool Read(const base::Pickle* m, -+ base::PickleIterator* iter, -+ param_type* r); -+ static void Log(const param_type& p, std::string* l); -+}; -+ -+ -+} // namespace IPC -+ -+#endif // INTERNAL_USERSCRIPTS_COMMON_EXTENSION_MESSAGES_H_ -+ -+// Notification that the user scripts have been updated. It has one -+// ReadOnlySharedMemoryRegion argument consisting of the pickled script data. -+// This memory region is valid in the context of the renderer. -+// If |owner| is not empty, then the shared memory handle refers to |owner|'s -+// programmatically-defined scripts. Otherwise, the handle refers to all -+// hosts' statically defined scripts. So far, only extension-hosts support -+// statically defined scripts; WebUI-hosts don't. -+// If |changed_hosts| is not empty, only the host in that set will -+// be updated. Otherwise, all hosts that have scripts in the shared memory -+// region will be updated. Note that the empty set => all hosts case is not -+// supported for per-extension programmatically-defined script regions; in such -+// regions, the owner is expected to list itself as the only changed host. -+// If |whitelisted_only| is true, this process should only run whitelisted -+// scripts and not all user scripts. -+IPC_MESSAGE_CONTROL1(ExtensionMsg_UpdateUserScripts, -+ base::ReadOnlySharedMemoryRegion) -+ -+#endif // USERSCRIPTS_COMMON_EXTENSION_MESSAGES_H_ diff --git a/components/user_scripts/common/host_id.cc b/components/user_scripts/common/host_id.cc new file mode 100755 --- /dev/null @@ -5796,6 +5860,23 @@ new file mode 100755 +}; + +#endif // USERSCRIPTS_COMMON_HOST_ID_H_ +diff --git a/components/user_scripts/common/mojom/renderer.mojom b/components/user_scripts/common/mojom/renderer.mojom +new file mode 100644 +--- /dev/null ++++ b/components/user_scripts/common/mojom/renderer.mojom +@@ -0,0 +1,12 @@ ++module user_scripts.mojom; ++ ++import "mojo/public/mojom/base/shared_memory.mojom"; ++ ++interface Renderer { ++ ++ // Notifies the renderer that the user scripts have been updated. It has one ++ // ReadOnlySharedMemoryRegion argument consisting of the pickled script data. ++ // This memory region is valid in the context of the renderer. ++ UpdateUserScripts(mojo_base.mojom.ReadOnlySharedMemoryRegion region); ++ ++}; diff --git a/components/user_scripts/common/script_constants.h b/components/user_scripts/common/script_constants.h new file mode 100755 --- /dev/null @@ -10039,7 +10120,7 @@ new file mode 100755 + : num_css(0u), + num_js(0u), + num_blocking_js(0u), -+ routing_id_(render_frame->GetRoutingID()), ++ frame_token_(render_frame->GetWebFrame()->GetLocalFrameToken()), + run_location_(location), + frame_url_(ScriptContext::GetDocumentLoaderURLForFrame( + render_frame->GetWebFrame())) {} @@ -10055,7 +10136,7 @@ diff --git a/components/user_scripts/renderer/scripts_run_info.h b/components/us new file mode 100755 --- /dev/null +++ b/components/user_scripts/renderer/scripts_run_info.h -@@ -0,0 +1,69 @@ +@@ -0,0 +1,70 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. @@ -10071,6 +10152,7 @@ new file mode 100755 + +#include "base/timer/elapsed_timer.h" +#include "../common/user_script.h" ++#include "third_party/blink/public/common/tokens/tokens.h" + +namespace content { +class RenderFrame; @@ -10110,10 +10192,10 @@ new file mode 100755 + const base::TimeDelta& elapsed); + + private: -+ // The routinig id to use to notify the browser of any injections. Since the ++ // The frame token to use to notify the browser of any injections. Since the + // frame may be deleted in injection, we don't hold on to a reference to it + // directly. -+ int routing_id_; ++ blink::LocalFrameToken frame_token_; + + // The run location at which injection is happening. + UserScript::RunLocation run_location_; @@ -10827,13 +10909,12 @@ diff --git a/components/user_scripts/renderer/user_script_set_manager.cc b/compo new file mode 100755 --- /dev/null +++ b/components/user_scripts/renderer/user_script_set_manager.cc -@@ -0,0 +1,76 @@ +@@ -0,0 +1,65 @@ +#include "user_script_set_manager.h" + +#include "base/logging.h" +#include "content/public/renderer/render_thread.h" +#include "../common/host_id.h" -+#include "../common/extension_messages.h" +#include "../common/user_scripts_features.h" +#include "user_script_set.h" + @@ -10854,16 +10935,6 @@ new file mode 100755 + observers_.RemoveObserver(observer); +} + -+bool UserScriptSetManager::OnControlMessageReceived( -+ const IPC::Message& message) { -+ bool handled = true; -+ IPC_BEGIN_MESSAGE_MAP(UserScriptSetManager, message) -+ IPC_MESSAGE_HANDLER(ExtensionMsg_UpdateUserScripts, OnUpdateUserScripts) -+ IPC_MESSAGE_UNHANDLED(handled = false) -+ IPC_END_MESSAGE_MAP() -+ return handled; -+} -+ +void UserScriptSetManager::GetAllInjections( + std::vector>* injections, + content::RenderFrame* render_frame, @@ -10908,7 +10979,7 @@ diff --git a/components/user_scripts/renderer/user_script_set_manager.h b/compon new file mode 100755 --- /dev/null +++ b/components/user_scripts/renderer/user_script_set_manager.h -@@ -0,0 +1,64 @@ +@@ -0,0 +1,56 @@ +#ifndef USERSCRIPTS_RENDER_SET_MANAGER_H_ +#define USERSCRIPTS_RENDER_SET_MANAGER_H_ + @@ -10949,19 +11020,11 @@ new file mode 100755 + int tab_id, + UserScript::RunLocation run_location); + -+private: -+#if BUILDFLAG(IS_ANDROID) -+ // content::RenderThreadObserver implementation. -+ bool OnControlMessageReceived(const IPC::Message& message) override; -+#endif -+ -+ base::ObserverList::Unchecked observers_; -+ + // Handle the UpdateUserScripts extension message. + void OnUpdateUserScripts(base::ReadOnlySharedMemoryRegion shared_memory); -+ //, const HostID& host_id, -+ //const std::set& changed_hosts, -+ //bool whitelisted_only); ++ ++private: ++ base::ObserverList::Unchecked observers_; + + // Scripts statically defined in extension manifests. + UserScriptSet static_scripts_; @@ -10977,7 +11040,7 @@ diff --git a/components/user_scripts/renderer/user_scripts_dispatcher.cc b/compo new file mode 100755 --- /dev/null +++ b/components/user_scripts/renderer/user_scripts_dispatcher.cc -@@ -0,0 +1,36 @@ +@@ -0,0 +1,64 @@ +#include "user_scripts_dispatcher.h" + +#include @@ -10993,11 +11056,12 @@ new file mode 100755 + +// ex ChromeExtensionsDispatcherDelegate +UserScriptsDispatcher::UserScriptsDispatcher() -+ : user_script_set_manager_observer_(this) { -+ user_script_set_manager_.reset(new UserScriptSetManager()); -+ script_injection_manager_.reset( -+ new ScriptInjectionManager(user_script_set_manager_.get())); -+ user_script_set_manager_observer_.Observe(user_script_set_manager_.get()); ++ : receiver_(this), ++ user_script_set_manager_observer_(this) { ++ user_script_set_manager_.reset(new UserScriptSetManager()); ++ script_injection_manager_.reset( ++ new ScriptInjectionManager(user_script_set_manager_.get())); ++ user_script_set_manager_observer_.Observe(user_script_set_manager_.get()); +} + +UserScriptsDispatcher::~UserScriptsDispatcher() { @@ -11006,6 +11070,11 @@ new file mode 100755 +void UserScriptsDispatcher::OnRenderThreadStarted(content::RenderThread* thread) { +} + ++void UserScriptsDispatcher::UpdateUserScripts( ++ base::ReadOnlySharedMemoryRegion shared_memory) { ++ user_script_set_manager_->OnUpdateUserScripts(std::move(shared_memory)); ++} ++ +void UserScriptsDispatcher::OnUserScriptsUpdated(const std::set& changed_hosts) { +} + @@ -11013,13 +11082,34 @@ new file mode 100755 + script_injection_manager_->OnRenderFrameCreated(render_frame); +} + ++void UserScriptsDispatcher::RegisterMojoInterfaces( ++ blink::AssociatedInterfaceRegistry* associated_interfaces) { ++ // This base::Unretained() is safe, because: ++ // 1) the Dispatcher is a RenderThreadObserver and outlives the RenderThread. ++ // 2) |asscoiated_interfaces| is owned by the RenderThread. ++ // As well the Dispatcher is owned by the ++ // ExtensionsRendererClient, which in turn is a leaky LazyInstance (and thus ++ // never deleted). ++ associated_interfaces->AddInterface(base::BindRepeating( ++ &UserScriptsDispatcher::OnRendererAssociatedRequest, base::Unretained(this))); ++} ++ ++void UserScriptsDispatcher::UnregisterMojoInterfaces( ++ blink::AssociatedInterfaceRegistry* associated_interfaces) { ++ associated_interfaces->RemoveInterface(mojom::Renderer::Name_); ++} ++ ++void UserScriptsDispatcher::OnRendererAssociatedRequest( ++ mojo::PendingAssociatedReceiver receiver) { ++ receiver_.Bind(std::move(receiver)); ++} ++ +} -\ No newline at end of file diff --git a/components/user_scripts/renderer/user_scripts_dispatcher.h b/components/user_scripts/renderer/user_scripts_dispatcher.h new file mode 100755 --- /dev/null +++ b/components/user_scripts/renderer/user_scripts_dispatcher.h -@@ -0,0 +1,49 @@ +@@ -0,0 +1,67 @@ +#ifndef USERSCRIPTS_RENDER_DISPATCHER_H_ +#define USERSCRIPTS_RENDER_DISPATCHER_H_ + @@ -11041,10 +11131,14 @@ new file mode 100755 +#include "../common/host_id.h" +#include "user_script_set_manager.h" +#include "script_injection.h" ++#include "components/user_scripts/common/mojom/renderer.mojom.h" ++#include "mojo/public/cpp/bindings/associated_receiver.h" ++#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h" + +namespace user_scripts { + +class UserScriptsDispatcher : public content::RenderThreadObserver, ++ public mojom::Renderer, + public UserScriptSetManager::Observer { + + public: @@ -11056,8 +11150,22 @@ new file mode 100755 + void OnRenderThreadStarted(content::RenderThread* thread); + void OnUserScriptsUpdated(const std::set& changed_hosts) override; + void OnRenderFrameCreated(content::RenderFrame* render_frame); ++ void UpdateUserScripts(base::ReadOnlySharedMemoryRegion shared_memory) override; + + private: ++ // RenderThreadObserver implementation: ++ void RegisterMojoInterfaces( ++ blink::AssociatedInterfaceRegistry* associated_interfaces) override; ++ void UnregisterMojoInterfaces( ++ blink::AssociatedInterfaceRegistry* associated_interfaces) override; ++ ++ void OnRendererAssociatedRequest( ++ mojo::PendingAssociatedReceiver receiver); ++ ++ // Extensions renderer receiver. This is an associated receiver because ++ // it is dependent on other messages sent on other associated channels. ++ mojo::AssociatedReceiver receiver_; ++ + std::unique_ptr user_script_set_manager_; + + std::unique_ptr script_injection_manager_; diff --git a/build/patches/Eyeo-Adblock-for-Cromite.patch b/build/patches/Eyeo-Adblock-for-Cromite.patch index b28af9c9..0588b691 100644 --- a/build/patches/Eyeo-Adblock-for-Cromite.patch +++ b/build/patches/Eyeo-Adblock-for-Cromite.patch @@ -28,14 +28,14 @@ suit Cromite logic. .../api/settings_private/prefs_util.cc | 14 + ...hrome_browser_main_extra_parts_profiles.cc | 2 - chrome/browser/resources/settings/BUILD.gn | 2 + - .../settings/adblock_page/adblock_page.html | 212 + - .../settings/adblock_page/adblock_page.ts | 303 + - .../settings/basic_page/basic_page.html | 4 + - .../settings/basic_page/basic_page.ts | 1 + + .../settings/adblock_page/adblock_page.html | 218 + + .../settings/adblock_page/adblock_page.ts | 311 + .../resources/settings/page_visibility.ts | 1 + - chrome/browser/resources/settings/route.ts | 4 + + chrome/browser/resources/settings/route.ts | 5 + chrome/browser/resources/settings/router.ts | 1 + chrome/browser/resources/settings/settings.ts | 1 + + .../settings/settings_main/settings_main.html | 7 + + .../settings/settings_main/settings_main.ts | 1 + .../settings/settings_menu/settings_menu.html | 5 + chrome/browser/ui/tab_helpers.cc | 3 +- .../extensions/api/_permission_features.json | 14 - @@ -43,11 +43,11 @@ suit Cromite logic. .../adblock/android/adblock_controller_jni.cc | 79 +- .../components/adblock/AdblockController.java | 51 +- components/adblock/content/browser/BUILD.gn | 24 +- - .../content/browser/adblock_blocking_page.cc | 182 + + .../content/browser/adblock_blocking_page.cc | 183 + .../content/browser/adblock_blocking_page.h | 75 + .../browser/adblock_content_browser_client.h | 241 +- .../browser/adblock_internals_page_handler.cc | 9 +- - .../browser/adblock_url_loader_factory.cc | 70 +- + .../browser/adblock_url_loader_factory.cc | 71 +- .../browser/adblock_webcontents_observer.cc | 62 +- .../browser/adblock_webcontents_observer.h | 5 +- .../content/browser/element_hider_impl.cc | 13 +- @@ -99,7 +99,7 @@ suit Cromite logic. .../adblock/core/subscription/subscription.cc | 20 + .../adblock/core/subscription/subscription.h | 3 + .../subscription_collection_impl.cc | 1 + - .../core/subscription/subscription_config.cc | 40 +- + .../core/subscription/subscription_config.cc | 41 +- .../core/subscription/subscription_config.h | 6 +- .../subscription_downloader_impl.cc | 19 +- .../subscription_persistent_metadata.h | 1 + @@ -115,6 +115,7 @@ suit Cromite logic. components/blocked_content/popup_blocker.h | 3 + .../browser/bromite_content_settings/ads.inc | 3 + components/error_page_strings.grdp | 16 + + .../resources/interstitial_enterprisewarn.css | 7 + .../websockets/websocket_connector_impl.cc | 6 +- .../public/browser/content_browser_client.cc | 4 +- .../public/browser/content_browser_client.h | 4 +- @@ -126,7 +127,7 @@ suit Cromite logic. .../renderer/core/exported/web_document.cc | 13 +- .../blink/renderer/core/html/html_element.cc | 8 +- .../definitions/adblock_private.d.ts | 14 + - 121 files changed, 9221 insertions(+), 618 deletions(-) + 122 files changed, 9249 insertions(+), 618 deletions(-) rename chrome/browser/adblock/android/java/res/xml/{adblock_preferences.xml => eyeo_adblock_preferences.xml} (59%) create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.html create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.ts @@ -155,7 +156,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j -@@ -98,11 +89,6 @@ for the previous order (main_preferences_legacy). --> +@@ -100,11 +91,6 @@ for the previous order (main_preferences_legacy). --> android:key="autofill_options" android:order="16" android:title="@string/autofill_options_title" /> @@ -167,7 +168,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j +@@ -136,6 +122,11 @@ for the previous order (main_preferences_legacy). --> android:key="adblock" android:order="13" android:title="@string/prefs_adblock"/> @@ -1197,7 +1198,7 @@ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc #include "components/adblock/content/browser/factories/content_security_policy_injector_factory.h" #include "components/adblock/content/browser/factories/element_hider_factory.h" #include "components/adblock/content/browser/factories/resource_classification_runner_factory.h" -@@ -946,7 +945,6 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -947,7 +946,6 @@ void ChromeBrowserMainExtraPartsProfiles:: // Makes manual testing possible. FakeSmartCardDeviceServiceFactory::GetInstance(); #endif @@ -1228,7 +1229,7 @@ diff --git a/chrome/browser/resources/settings/adblock_page/adblock_page.html b/ new file mode 100644 --- /dev/null +++ b/chrome/browser/resources/settings/adblock_page/adblock_page.html -@@ -0,0 +1,212 @@ +@@ -0,0 +1,218 @@ + -+ -+ -+ -+ + -+
++ ++ ++ + -+
-+
-+
Enable anti-circumvention and snippets
-+
-+ Snippets are pieces of JavaScript code, injected by the Adblock Plus, that execute within the context of a website and combat advanced ads that circumvent ordinary blocking. -+ The functionality is ONLY allowed for the list -+ abp-filters-anti-cv.txt -+ which is activated by this setting. -+
Open ABP anti-circumvention filter list repo -+
Open ABP Snippets Overview -+
-+
-+
-+ -+ -+
++
+ -+
-+
-+
-+ -+ Check for updates now -+ -+
-+ -+
-+ -+
-+
Built in Subscriptions ([[countEnabled]] selected)
++
++
++
Enable anti-circumvention and snippets
+
-+ Add the languages in which you regularly browse websites in ++ Snippets are pieces of JavaScript code, injected by the Adblock Plus, that execute within the context of a website and combat advanced ads that circumvent ordinary blocking. ++ The functionality is ONLY allowed for the list ++ abp-filters-anti-cv.txt ++ which is activated by this setting. ++
Open ABP anti-circumvention filter list repo ++
Open ABP Snippets Overview +
+
-+ -+ -+
-+ ++
++ ++ ++
++ ++
++
+
-+ -+
-+
-+ -+
-+ Allowed Domains ([[allowedDomainsCount]] added) -+
-+
-+ Support your favorite websites by adding them to this list. You might see ads on them. -+
-+
-+ -+
-+ -+
-+
-+ -+ -+ Add -+ -+ ++ ++ Check for updates now ++ ++
++ ++
++ ++
++
Built in Subscriptions ([[countEnabled]] selected)
++
++ Add the languages in which you regularly browse websites in +
+
-+
-+ -+
-+
-+ -+
-+ Custom Subscriptions ([[customSubscriptions.length]] added) -+
-+
-+ Add custom filter urls -+
-+
-+ -+
-+ +
-+
-+ -+
-+
-+ -+
-+ Custom Filters ([[customFilters.length]] added) -+
-+
-+ Add custom filter commands -+
-+
-+ -+
-+ ++
++
++ ++ ++ Add ++ ++ ++
+
+
-+
-+
-+
++
++
++
++ ++
++ Custom Subscriptions ([[customSubscriptions.length]] added) ++
++
++ Add custom filter urls ++
++
++ ++
++ ++
++
++ ++ ++ Add ++ ++ ++
++
++
++
++
++
++ ++
++ Custom Filters ([[customFilters.length]] added) ++
++
++ Add custom filter commands ++
++
++ ++
++ ++
++
++ ++ ++ Add ++ ++ ++
++
++
++
++
+ -+
-+ ++
++ ++ diff --git a/chrome/browser/resources/settings/adblock_page/adblock_page.ts b/chrome/browser/resources/settings/adblock_page/adblock_page.ts new file mode 100644 --- /dev/null +++ b/chrome/browser/resources/settings/adblock_page/adblock_page.ts -@@ -0,0 +1,303 @@ +@@ -0,0 +1,311 @@ +/* + This file is part of Bromite. + @@ -1477,6 +1484,8 @@ new file mode 100644 +import {CrCheckboxElement} from 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js'; +import {getTemplate} from './adblock_page.html.js'; +import {getToastManager} from 'chrome://resources/cr_elements/cr_toast/cr_toast_manager.js'; ++import {getSearchManager} from '../search_settings.js'; ++import type {SettingsPlugin} from '../settings_main/settings_plugin.js'; + +const SettingsAdblockPageElementBase = + I18nMixin(PrefsMixin(BaseMixin((PolymerElement)))); @@ -1492,8 +1501,8 @@ new file mode 100644 + last_installation_time: string; +} + -+export class SettingsAdblockPageElement extends -+ SettingsAdblockPageElementBase { ++export class SettingsAdblockPageElement extends SettingsAdblockPageElementBase ++ implements SettingsPlugin { + static get is() { + return 'settings-adblock-page'; + } @@ -1739,6 +1748,12 @@ new file mode 100644 + toastManager.duration = 5000; + toastManager.show("Starting update..."); + } ++ ++ // SettingsPlugin implementation ++ async searchContents(query: string) { ++ const searchRequest = await getSearchManager().search(query, this); ++ return searchRequest.getSearchResult(); ++ } +} + +declare global { @@ -1749,29 +1764,6 @@ new file mode 100644 + +customElements.define( + SettingsAdblockPageElement.is, SettingsAdblockPageElement); -diff --git a/chrome/browser/resources/settings/basic_page/basic_page.html b/chrome/browser/resources/settings/basic_page/basic_page.html ---- a/chrome/browser/resources/settings/basic_page/basic_page.html -+++ b/chrome/browser/resources/settings/basic_page/basic_page.html -@@ -8,4 +8,8 @@ - section="privacy"> - - -+ -+ -+ -
-diff --git a/chrome/browser/resources/settings/basic_page/basic_page.ts b/chrome/browser/resources/settings/basic_page/basic_page.ts ---- a/chrome/browser/resources/settings/basic_page/basic_page.ts -+++ b/chrome/browser/resources/settings/basic_page/basic_page.ts -@@ -16,6 +16,7 @@ import '../settings_page_styles.css.js'; - import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js'; - import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; - -+import '../adblock_page/adblock_page.js'; - import {routes} from '../route.js'; - import type {Route} from '../router.js'; - import {RouteObserverMixin} from '../router.js'; diff --git a/chrome/browser/resources/settings/page_visibility.ts b/chrome/browser/resources/settings/page_visibility.ts --- a/chrome/browser/resources/settings/page_visibility.ts +++ b/chrome/browser/resources/settings/page_visibility.ts @@ -1786,12 +1778,13 @@ diff --git a/chrome/browser/resources/settings/page_visibility.ts b/chrome/brows diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resources/settings/route.ts --- a/chrome/browser/resources/settings/route.ts +++ b/chrome/browser/resources/settings/route.ts -@@ -246,6 +246,10 @@ function createRoutes(): SettingsRoutes { +@@ -246,6 +246,11 @@ function createRoutes(): SettingsRoutes { r.FONTS.hasMigratedToPlugin = true; } + if (visibility.adblock !== false) { + r.ADBLOCK = r.BASIC.createSection('/adblock', 'adblock'); ++ r.ADBLOCK.hasMigratedToPlugin = true; + } + if (visibility.autofill !== false) { @@ -1819,6 +1812,34 @@ diff --git a/chrome/browser/resources/settings/settings.ts b/chrome/browser/reso export {PasswordCheckReferrer, PasswordManagerImpl, PasswordManagerPage, PasswordManagerProxy} from './autofill_page/password_manager_proxy.js'; export {BaseMixin} from './base_mixin.js'; export {SettingsBasicPageElement} from './basic_page/basic_page.js'; +diff --git a/chrome/browser/resources/settings/settings_main/settings_main.html b/chrome/browser/resources/settings/settings_main/settings_main.html +--- a/chrome/browser/resources/settings/settings_main/settings_main.html ++++ b/chrome/browser/resources/settings/settings_main/settings_main.html +@@ -188,6 +188,13 @@ +
+ + ++
++ ++
++ + +