diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 73598bb2..782bf25a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -57,12 +57,13 @@ Yes/No ### Is the bug a crash? - +No + +-- or -- + Yes, this is the crash dump: ``` - + ``` ### Describe the bug diff --git a/CHANGELOG.md b/CHANGELOG.md index 63a2391f..ceca9640 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +# 91.0.4472.146 +* removed flags for device motion/orientation (fixes https://github.com/bromite/bromite/issues/1204) +* prevent crash on download on API level 21 (fixes https://github.com/bromite/bromite/issues/1184) +* fix crash reporting garbled UI for small screens (thanks to @uazo, https://github.com/bromite/bromite/pull/1236) +* add flag to enable/disable vibration API (fixes https://github.com/bromite/bromite/issues/1045) + +# 91.0.4472.143 +* add support for ISupportHelpAndFeedback +* JIT-less toggle (fixes https://github.com/bromite/bromite/issues/1235) +* enable crash reporting UI (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/944) + +# 91.0.4472.102 +* fix opening new tabs from links in always-incognito mode (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/1154) +* allow saving pages in incognito mode (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/1182) + +# 91.0.4472.97 +* add flag for omnibox autocomplete filtering (fixes https://github.com/bromite/bromite/issues/1152) +* enable IntentBlockExternalFormRedirectsNoGesture by default +* add flag to disable external intent requests +* fix for tab collection temporary/non-exportable (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/1138) + # 91.0.4472.50 * unexpire tab group flags `#enable-tab-groups` and `#enable-tab-groups-ui-improvements` * replace known good hostname used for DoH test (fixes https://github.com/bromite/bromite/issues/1148) diff --git a/README.md b/README.md index bc41c2f1..e1f75140 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,6 @@ ETH donations address: `0xf47ff39223d828f99fec5ab53bd068c5c0522042` * disable video autoplay by default, reintroduce site settings * mobile/desktop user agent customization * accessibility preference to force tablet UI -* use Alt+D to focus address bar You can inspect all functionality/privacy changes by reading the [patches](https://github.com/bromite/bromite/tree/master/build/patches) and/or the [CHANGELOG](./CHANGELOG.md). @@ -116,6 +115,8 @@ New flags: * `#export-bookmarks-use-saf`, disabled by default * `#allow-user-certificates`, disabled by default * `#cleartext-permitted`, enabled by default +* `#omnibox-autocomplete-filtering`, can be used to restrict omnibox autocomplete results +* `#disable-external-intent-requests` # Privacy limitations diff --git a/build/RELEASE b/build/RELEASE index d21f01d3..ab425d16 100644 --- a/build/RELEASE +++ b/build/RELEASE @@ -1 +1 @@ -91.0.4472.50 +91.0.4472.146 diff --git a/build/bromite_patches_list.txt b/build/bromite_patches_list.txt index ec34410c..1a3c6ae8 100644 --- a/build/bromite_patches_list.txt +++ b/build/bromite_patches_list.txt @@ -48,7 +48,6 @@ Add-exit-menu-item.patch Remove-help-menu-item.patch AudioBuffer-AnalyserNode-fp-mitigations.patch Multiple-fingerprinting-mitigations.patch -Add-flags-to-disable-device-motion-orientation-APIs.patch Disable-metrics-on-all-I-O-threads.patch Always-respect-async-dns-flag-regardless-of-SDK-version.patch Add-flag-to-configure-maximum-connections-per-host.patch @@ -148,4 +147,12 @@ Add-IsCleartextPermitted-flag.patch Disable-RTCGetCurrentBrowsingContextMedia-by-default.patch Disable-FLoC-by-default.patch Unexpire-tab-groups-flags.patch +Add-flag-for-omnibox-autocomplete-filtering.patch +Enable-IntentBlockExternalFormRedirectsNoGesture-by-default.patch +Add-flag-to-disable-external-intent-requests.patch +Logcat-crash-reports-UI.patch +Add-support-for-ISupportHelpAndFeedback.patch +JIT-less-toggle.patch +API-level-21-prevent-crash-on-download.patch +Add-vibration-flag.patch Automated-domain-substitution.patch diff --git a/build/patches/AImageReader-CFI-crash-mitigations.patch b/build/patches/AImageReader-CFI-crash-mitigations.patch index edb3516a..9ad3fe70 100644 --- a/build/patches/AImageReader-CFI-crash-mitigations.patch +++ b/build/patches/AImageReader-CFI-crash-mitigations.patch @@ -82,7 +82,7 @@ diff --git a/base/android/android_image_reader_compat.h b/base/android/android_i diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -1935,7 +1935,7 @@ +@@ -1940,7 +1940,7 @@ { "name": "enable-image-reader", "owners": [ "vikassoni", "liberato" ], @@ -225,7 +225,7 @@ diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -619,6 +619,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning", +@@ -627,6 +627,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning", const base::Feature kMediaDrmPreprovisioningAtStartup{ "MediaDrmPreprovisioningAtStartup", base::FEATURE_ENABLED_BY_DEFAULT}; diff --git a/build/patches/API-level-21-prevent-crash-on-download.patch b/build/patches/API-level-21-prevent-crash-on-download.patch new file mode 100644 index 00000000..85f47fec --- /dev/null +++ b/build/patches/API-level-21-prevent-crash-on-download.patch @@ -0,0 +1,38 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Sun, 27 Jun 2021 16:53:48 +0200 +Subject: API level 21: prevent crash on download + +On Lollipop 5.0.x it is not possible to use the system persistent bundle. +This patch ignores boolean settings for them and prevents the crash. + +See also: https://github.com/bromite/bromite/issues/1184 +--- + .../internal/BundleToPersistableBundleConverter.java | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BundleToPersistableBundleConverter.java b/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BundleToPersistableBundleConverter.java +--- a/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BundleToPersistableBundleConverter.java ++++ b/components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BundleToPersistableBundleConverter.java +@@ -85,9 +85,17 @@ class BundleToPersistableBundleConverter { + if (obj == null) { + persistableBundle.putString(key, null); + } else if (obj instanceof Boolean) { +- persistableBundle.putBoolean(key, (Boolean) obj); ++ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) { ++ failedKeys.add(key); ++ } else { ++ persistableBundle.putBoolean(key, (Boolean) obj); ++ } + } else if (obj instanceof boolean[]) { +- persistableBundle.putBooleanArray(key, (boolean[]) obj); ++ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) { ++ failedKeys.add(key); ++ } else { ++ persistableBundle.putBooleanArray(key, (boolean[]) obj); ++ } + } else if (obj instanceof Double) { + persistableBundle.putDouble(key, (Double) obj); + } else if (obj instanceof double[]) { +-- +2.17.1 + diff --git a/build/patches/Add-AllowUserCertificates-flag.patch b/build/patches/Add-AllowUserCertificates-flag.patch index e49f22be..f7600229 100644 --- a/build/patches/Add-AllowUserCertificates-flag.patch +++ b/build/patches/Add-AllowUserCertificates-flag.patch @@ -99,7 +99,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse &kAddToHomescreenIPH, &kAllowNewIncognitoTabIntents, &kAllowRemoteContextForNotifications, -@@ -333,6 +334,9 @@ const base::Feature* FindFeatureExposedToJava(const std::string& feature_name) { +@@ -334,6 +335,9 @@ const base::Feature* FindFeatureExposedToJava(const std::string& feature_name) { // Alphabetical: diff --git a/build/patches/Add-IsCleartextPermitted-flag.patch b/build/patches/Add-IsCleartextPermitted-flag.patch index 6b6a953e..7178db04 100644 --- a/build/patches/Add-IsCleartextPermitted-flag.patch +++ b/build/patches/Add-IsCleartextPermitted-flag.patch @@ -14,7 +14,7 @@ Subject: Add IsCleartextPermitted flag diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -7359,6 +7359,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -7358,6 +7358,11 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE( chrome::android::kBookmarksExportUseSaf)}, @@ -29,7 +29,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1386,6 +1386,10 @@ const char kHostedAppShimCreationName[] = +@@ -1384,6 +1384,10 @@ const char kHostedAppShimCreationName[] = const char kHostedAppShimCreationDescription[] = "Create app shims on Mac when creating a hosted app."; @@ -43,7 +43,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -817,6 +817,9 @@ extern const char kHostedAppQuitNotificationDescription[]; +@@ -814,6 +814,9 @@ extern const char kHostedAppQuitNotificationDescription[]; extern const char kHostedAppShimCreationName[]; extern const char kHostedAppShimCreationDescription[]; diff --git a/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch b/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch index 203dfd09..abb31ac8 100644 --- a/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch +++ b/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch @@ -17,7 +17,7 @@ See also: diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -3105,6 +3105,12 @@ const FeatureEntry kFeatureEntries[] = { +@@ -3099,6 +3099,12 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDeprecateLowUsageCodecsName, flag_descriptions::kDeprecateLowUsageCodecsDescription, kOsCrOS | kOsLinux, FEATURE_VALUE_TYPE(media::kDeprecateLowUsageCodecs)}, @@ -33,7 +33,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -605,6 +605,11 @@ const char kEnableAutofillCreditCardAuthenticationDescription[] = +@@ -611,6 +611,11 @@ const char kEnableAutofillCreditCardAuthenticationDescription[] = "authenticator (if available) to verify card ownership when retrieving " "credit cards from Google Payments."; @@ -48,7 +48,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -369,6 +369,9 @@ extern const char kEnableAutofillAddressSavePromptDescription[]; +@@ -372,6 +372,9 @@ extern const char kEnableAutofillAddressSavePromptDescription[]; extern const char kEnableAutofillCreditCardAblationExperimentDisplayName[]; extern const char kEnableAutofillCreditCardAblationExperimentDescription[]; @@ -62,7 +62,7 @@ diff --git a/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmp --- a/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl +++ b/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl @@ -147,10 +147,6 @@ public abstract class ChromeSwitches {{ - /** Switch for enabling the Chrome Survey. */ + /** Switch for enabling the Chrome Survey. Only works when UMA is accepted. */ public static final String CHROME_FORCE_ENABLE_SURVEY = "force-enable-chrome-survey"; - /** Switch to enable incognito tabs to be seen in Android Recents. */ diff --git a/build/patches/Add-a-proxy-configuration-page.patch b/build/patches/Add-a-proxy-configuration-page.patch index 333c56c6..04b01157 100644 --- a/build/patches/Add-a-proxy-configuration-page.patch +++ b/build/patches/Add-a-proxy-configuration-page.patch @@ -81,15 +81,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc -@@ -342,6 +342,8 @@ std::vector ChromeAutocompleteProviderClient::GetBuiltinURLs() { - std::vector - ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() { - std::vector builtins_to_provide; +@@ -350,6 +350,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() { + builtins_to_provide.push_back( + base::ASCIIToUTF16(chrome::kChromeUISettingsURL)); + #endif + builtins_to_provide.push_back( + base::ASCIIToUTF16(chrome::kChromeUIProxyConfigURL)); builtins_to_provide.push_back( - base::ASCIIToUTF16(chrome::kChromeUIChromeURLsURL)); - #if !defined(OS_ANDROID) + base::ASCIIToUTF16(chrome::kChromeUIVersionURL)); + return builtins_to_provide; diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd diff --git a/build/patches/Add-an-always-incognito-mode.patch b/build/patches/Add-an-always-incognito-mode.patch index 373745bc..ff22c963 100644 --- a/build/patches/Add-an-always-incognito-mode.patch +++ b/build/patches/Add-an-always-incognito-mode.patch @@ -140,15 +140,15 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -58,6 +58,7 @@ import org.chromium.base.task.PostTask; - import org.chromium.base.task.TaskTraits; +@@ -57,6 +57,7 @@ import org.chromium.base.supplier.UnownedUserDataSupplier; + import org.chromium.base.task.PostTask; import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate; import org.chromium.chrome.browser.IntentHandler.TabOpenType; import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout; -@@ -1696,8 +1697,9 @@ public class ChromeTabbedActivity extends ChromeActivity> groupedItems = new ArrayList<>(); if (mParams.isAnchor()) { -@@ -355,6 +361,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -354,6 +360,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP)); } } @@ -229,7 +229,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr if (!mItemDelegate.isIncognito() && mItemDelegate.isIncognitoSupported()) { linkGroup.add(createListItem(Item.OPEN_IN_INCOGNITO_TAB)); } -@@ -377,7 +384,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -376,7 +383,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { } } if (FirstRunStatus.getFirstRunFlowComplete()) { diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index 7e01eb7e..7e9006e2 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -738,7 +738,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -7309,6 +7309,12 @@ const FeatureEntry kFeatureEntries[] = { +@@ -7308,6 +7308,12 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kDesktopPWAsAppIconShortcutsMenuUI)}, #endif @@ -1257,7 +1257,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -5224,6 +5224,11 @@ const char kWebrtcPipeWireCapturerDescription[] = +@@ -5222,6 +5222,11 @@ const char kWebrtcPipeWireCapturerDescription[] = "capturing the desktop content on the Wayland display server."; #endif // #if defined(WEBRTC_USE_PIPEWIRE) @@ -1272,7 +1272,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -3066,6 +3066,9 @@ extern const char kWebrtcPipeWireCapturerName[]; +@@ -3063,6 +3063,9 @@ extern const char kWebrtcPipeWireCapturerName[]; extern const char kWebrtcPipeWireCapturerDescription[]; #endif // #if defined(WEBRTC_USE_PIPEWIRE) @@ -1396,14 +1396,14 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro /** * Whether Chrome is set as the default browser. -@@ -973,6 +975,7 @@ public final class ChromePreferenceKeys { +@@ -976,6 +978,7 @@ public final class ChromePreferenceKeys { AUTOFILL_ASSISTANT_PROACTIVE_HELP, APP_LAUNCH_LAST_KNOWN_ACTIVE_TAB_STATE, APP_LAUNCH_SEARCH_ENGINE_HAD_LOGO, + BOOKMARKS_LAST_EXPORT_URI, APPLICATION_OVERRIDE_LANGUAGE, + CHROME_SURVEY_DOWNLOAD_ATTEMPTS.pattern(), CHROME_SURVEY_PROMPT_DISPLAYED_TIMESTAMP.pattern(), - CLIPBOARD_SHARED_URI, 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 diff --git a/build/patches/Add-exit-menu-item.patch b/build/patches/Add-exit-menu-item.patch index f713ce1c..020ff2ba 100644 --- a/build/patches/Add-exit-menu-item.patch +++ b/build/patches/Add-exit-menu-item.patch @@ -37,7 +37,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -196,6 +196,8 @@ import java.lang.annotation.RetentionPolicy; +@@ -195,6 +195,8 @@ import java.lang.annotation.RetentionPolicy; import java.util.List; import java.util.Locale; @@ -46,7 +46,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct /** * This is the main activity for ChromeMobile when not running in document mode. All the tabs * are accessible via a chrome specific tab switching UI. -@@ -1901,6 +1903,8 @@ public class ChromeTabbedActivity extends ChromeActivity +Date: Sat, 22 Aug 2020 08:52:40 -0500 +Subject: Add flag for omnibox autocomplete filtering + +Adds a flag that restricts whether search history, clipboard, bookmarks +and internal chrome:// pages will be used for the autocomplete results. +--- + chrome/browser/about_flags.cc | 21 +++++++++++++++++++ + .../browser/autocomplete_controller.cc | 10 +++++++++ + .../omnibox/browser/history_url_provider.cc | 3 +++ + components/omnibox/browser/search_provider.cc | 4 ++++ + components/url_formatter/url_fixer.cc | 3 +++ + 5 files changed, 41 insertions(+) + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -503,6 +503,22 @@ const FeatureEntry::FeatureVariation kAdaptiveButtonInTopToolbarVariations[] = { + }; + #endif // OS_ANDROID + ++const FeatureEntry::Choice kOmniboxAutocompleteFiltering[] = { ++ {flags_ui::kGenericExperimentChoiceDefault, "", ""}, ++ {"Search suggestions only", ++ "omnibox-autocomplete-filtering", ++ "search"}, ++ {"Search suggestions and bookmarks", ++ "omnibox-autocomplete-filtering", ++ "search-bookmarks"}, ++ {"Search suggestions and internal chrome pages", ++ "omnibox-autocomplete-filtering", ++ "search-chrome"}, ++ {"Search suggestions, bookmarks, and internal chrome pages", ++ "omnibox-autocomplete-filtering", ++ "search-bookmarks-chrome"}, ++}; ++ + #if defined(OS_ANDROID) + const FeatureEntry::FeatureParam kHideDismissButton[] = { + {"dismiss_button", "hide"}}; +@@ -4769,6 +4785,11 @@ const FeatureEntry kFeatureEntries[] = { + FEATURE_VALUE_TYPE(chrome::android::kReaderModeInCCT)}, + #endif // !defined(OS_ANDROID) + ++ {"omnibox-autocomplete-filtering", ++ "Omnibox Autocomplete Filtering", ++ "Restrict omnibox autocomplete results to a combination of search suggestions (if enabled), bookmarks, and internal chrome pages. ungoogled-chromium flag.", ++ kOsAll, MULTI_VALUE_TYPE(kOmniboxAutocompleteFiltering)}, ++ + #if defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) || \ + defined(OS_CHROMEOS) + {"direct-manipulation-stylus", +diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc +--- a/components/omnibox/browser/autocomplete_controller.cc ++++ b/components/omnibox/browser/autocomplete_controller.cc +@@ -15,6 +15,7 @@ + + #include "base/bind.h" + #include "base/check_op.h" ++#include "base/command_line.h" + #include "base/feature_list.h" + #include "base/format_macros.h" + #include "base/metrics/histogram.h" +@@ -275,6 +276,15 @@ AutocompleteController::AutocompleteController( + search_service_worker_signal_sent_(false), + template_url_service_(provider_client_->GetTemplateURLService()) { + provider_types &= ~OmniboxFieldTrial::GetDisabledProviderTypes(); ++ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering")) { ++ const std::string flag_value = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("omnibox-autocomplete-filtering"); ++ provider_types &= AutocompleteProvider::TYPE_KEYWORD | AutocompleteProvider::TYPE_SEARCH | ++ AutocompleteProvider::TYPE_HISTORY_URL | AutocompleteProvider::TYPE_BOOKMARK | AutocompleteProvider::TYPE_BUILTIN; ++ if (!base::Contains(flag_value, "bookmarks")) ++ provider_types &= ~AutocompleteProvider::TYPE_BOOKMARK; ++ if (!base::Contains(flag_value, "chrome")) ++ provider_types &= ~AutocompleteProvider::TYPE_BUILTIN; ++ } + if (provider_types & AutocompleteProvider::TYPE_BOOKMARK) + providers_.push_back(new BookmarkProvider(provider_client_.get())); + if (provider_types & AutocompleteProvider::TYPE_BUILTIN) +diff --git a/components/omnibox/browser/history_url_provider.cc b/components/omnibox/browser/history_url_provider.cc +--- a/components/omnibox/browser/history_url_provider.cc ++++ b/components/omnibox/browser/history_url_provider.cc +@@ -553,6 +553,9 @@ void HistoryURLProvider::Start(const AutocompleteInput& input, + if (fixed_up_input.type() != metrics::OmniboxInputType::QUERY) + matches_.push_back(what_you_typed_match); + ++ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering")) ++ return; ++ + // We'll need the history service to run both passes, so try to obtain it. + history::HistoryService* const history_service = + client()->GetHistoryService(); +diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc +--- a/components/omnibox/browser/search_provider.cc ++++ b/components/omnibox/browser/search_provider.cc +@@ -12,6 +12,7 @@ + #include "base/base64.h" + #include "base/bind.h" + #include "base/callback.h" ++#include "base/command_line.h" + #include "base/feature_list.h" + #include "base/i18n/break_iterator.h" + #include "base/i18n/case_conversion.h" +@@ -643,6 +644,9 @@ void SearchProvider::Run(bool query_is_private) { + } + + void SearchProvider::DoHistoryQuery(bool minimal_changes) { ++ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering")) ++ return; ++ + // The history query results are synchronous, so if minimal_changes is true, + // we still have the last results and don't need to do anything. + if (minimal_changes) +diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/url_fixer.cc +--- a/components/url_formatter/url_fixer.cc ++++ b/components/url_formatter/url_fixer.cc +@@ -9,6 +9,7 @@ + #include + + #include "base/check_op.h" ++#include "base/command_line.h" + #include "base/files/file_path.h" + #include "base/files/file_util.h" + #include "base/ranges/algorithm.h" +@@ -607,6 +608,8 @@ GURL FixupURL(const std::string& text, const std::string& desired_tld) { + + FixupHost(trimmed, parts.host, parts.scheme.is_valid(), desired_tld, &url); + if (chrome_url && !parts.host.is_valid()) ++ if (!base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering") || ++ base::Contains(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("omnibox-autocomplete-filtering"), "chrome")) + url.append(kChromeUIDefaultHost); + FixupPort(trimmed, parts.port, &url); + FixupPath(trimmed, parts.path, &url); +-- +2.17.1 + diff --git a/build/patches/Add-flag-for-save-data-header.patch b/build/patches/Add-flag-for-save-data-header.patch index 129fa279..45d3f47b 100644 --- a/build/patches/Add-flag-for-save-data-header.patch +++ b/build/patches/Add-flag-for-save-data-header.patch @@ -14,7 +14,7 @@ Subject: Add flag for save-data-header diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -4488,6 +4488,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4482,6 +4482,9 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_CHROMEOS_ASH) #if defined(OS_ANDROID) @@ -27,7 +27,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1000,6 +1000,10 @@ const char kDisableKeepaliveFetchDescription[] = +@@ -998,6 +998,10 @@ const char kDisableKeepaliveFetchDescription[] = "Disable fetch with keepalive set " "(https://fetch.spec.whatwg.org/#request-keepalive-flag)."; @@ -41,7 +41,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -568,6 +568,9 @@ extern const char kDiagnosticsAppDescription[]; +@@ -565,6 +565,9 @@ extern const char kDiagnosticsAppDescription[]; extern const char kDisableKeepaliveFetchName[]; extern const char kDisableKeepaliveFetchDescription[]; diff --git a/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch b/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch index cca0908b..5966fe3d 100644 --- a/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch +++ b/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch @@ -31,7 +31,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc // Ensure that all effective connection types returned by Network Quality // Estimator (NQE) are also exposed via flags. static_assert(net::EFFECTIVE_CONNECTION_TYPE_LAST + 2 == -@@ -3742,6 +3747,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -3736,6 +3741,9 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAndroidPictureInPictureAPIName, flag_descriptions::kAndroidPictureInPictureAPIDescription, kOsAndroid, FEATURE_VALUE_TYPE(media::kPictureInPictureAPI)}, @@ -44,7 +44,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1484,6 +1484,10 @@ const char kMediaHistoryDescription[] = +@@ -1482,6 +1482,10 @@ const char kMediaHistoryDescription[] = "Enables Media History which records data around media playbacks on " "websites."; @@ -58,7 +58,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -872,6 +872,9 @@ extern const char kLogJsConsoleMessagesDescription[]; +@@ -869,6 +869,9 @@ extern const char kLogJsConsoleMessagesDescription[]; extern const char kMediaHistoryName[]; extern const char kMediaHistoryDescription[]; diff --git a/build/patches/Add-flag-to-control-video-playback-resume-feature.patch b/build/patches/Add-flag-to-control-video-playback-resume-feature.patch index 0bb97cec..5899efd8 100644 --- a/build/patches/Add-flag-to-control-video-playback-resume-feature.patch +++ b/build/patches/Add-flag-to-control-video-playback-resume-feature.patch @@ -27,7 +27,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1063,6 +1063,11 @@ const char kEnablePciguardUiDescription[] = +@@ -1069,6 +1069,11 @@ const char kEnablePciguardUiDescription[] = "Enable toggling Pciguard settings through the Settings App. By default, " "this flag is enabled."; @@ -42,7 +42,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -608,6 +608,9 @@ extern const char kEnablePortalsDescription[]; +@@ -611,6 +611,9 @@ extern const char kEnablePortalsDescription[]; extern const char kEnablePortalsCrossOriginName[]; extern const char kEnablePortalsCrossOriginDescription[]; diff --git a/build/patches/Add-flag-to-disable-IPv6-probes.patch b/build/patches/Add-flag-to-disable-IPv6-probes.patch index 24596947..23ec5428 100644 --- a/build/patches/Add-flag-to-disable-IPv6-probes.patch +++ b/build/patches/Add-flag-to-disable-IPv6-probes.patch @@ -16,7 +16,7 @@ Subject: Add flag to disable IPv6 probes diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -4747,6 +4747,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4741,6 +4741,11 @@ const FeatureEntry kFeatureEntries[] = { #endif // defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) || // defined(OS_CHROMEOS) @@ -31,7 +31,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -2979,6 +2979,10 @@ const char kContextualSearchRankerQueryDescription[] = +@@ -2977,6 +2977,10 @@ const char kContextualSearchRankerQueryDescription[] = const char kContextualSearchSecondTapName[] = "Contextual Search second tap triggering"; @@ -45,7 +45,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -677,6 +677,9 @@ extern const char kEnableWasmThreadsName[]; +@@ -674,6 +674,9 @@ extern const char kEnableWasmThreadsName[]; extern const char kEnableWasmThreadsDescription[]; extern const char kEnableWasmTieringName[]; diff --git a/build/patches/Add-flag-to-disable-WebGL.patch b/build/patches/Add-flag-to-disable-WebGL.patch index 654e9be1..fd9f40d5 100644 --- a/build/patches/Add-flag-to-disable-WebGL.patch +++ b/build/patches/Add-flag-to-disable-WebGL.patch @@ -24,7 +24,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -578,6 +578,10 @@ const char kEnableAudioFocusEnforcementName[] = "Audio Focus Enforcement"; +@@ -584,6 +584,10 @@ const char kEnableAudioFocusEnforcementName[] = "Audio Focus Enforcement"; const char kEnableAudioFocusEnforcementDescription[] = "Enables enforcement of a single media session having audio focus at " "any one time. Requires #enable-media-session-service to be enabled too."; @@ -38,7 +38,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -354,6 +354,9 @@ extern const char kDocumentTransitionDescription[]; +@@ -357,6 +357,9 @@ extern const char kDocumentTransitionDescription[]; extern const char kEnableAccessibilityObjectModelName[]; extern const char kEnableAccessibilityObjectModelDescription[]; diff --git a/build/patches/Add-flag-to-disable-external-intent-requests.patch b/build/patches/Add-flag-to-disable-external-intent-requests.patch new file mode 100644 index 00000000..b1d34cb3 --- /dev/null +++ b/build/patches/Add-flag-to-disable-external-intent-requests.patch @@ -0,0 +1,55 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Tue, 25 May 2021 19:46:14 +0200 +Subject: Add flag to disable external intent requests + +--- + chrome/browser/about_flags.cc | 3 +++ + chrome/browser/flag_descriptions.cc | 6 ++++++ + chrome/browser/flag_descriptions.h | 3 +++ + 3 files changed, 12 insertions(+) + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -2652,6 +2652,9 @@ const FeatureEntry kFeatureEntries[] = { + flag_descriptions::kWebrtcCaptureMultiChannelApmName, + flag_descriptions::kWebrtcCaptureMultiChannelApmDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kWebRtcEnableCaptureMultiChannelApm)}, ++ {"disable-external-intent-requests", flag_descriptions::kDisableExternalIntentRequestsName, ++ flag_descriptions::kDisableExternalIntentRequestsDescription, kOsAll, ++ SINGLE_DISABLE_VALUE_TYPE("disable-external-intent-requests")}, + {"disable-webrtc-hw-decoding", flag_descriptions::kWebrtcHwDecodingName, + flag_descriptions::kWebrtcHwDecodingDescription, kOsAndroid | kOsCrOS, + SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebRtcHWDecoding)}, +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -3099,6 +3099,12 @@ const char kIntentBlockExternalFormRedirectsNoGestureDescription[] = + "Require a user gesture that triggered a form submission in order to " + "allow for redirecting to an external intent."; + ++const char kDisableExternalIntentRequestsName[] = ++ "Never forward URL requests to external intents"; ++const char kDisableExternalIntentRequestsDescription[] = ++ "URL requests will never" ++ "allow for redirecting to an external intent."; ++ + const char kInterestFeedContentSuggestionsDescription[] = + "Use the interest feed to render content suggestions. Currently " + "content " +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -1804,6 +1804,9 @@ extern const char kInstantStartDescription[]; + extern const char kIntentBlockExternalFormRedirectsNoGestureName[]; + extern const char kIntentBlockExternalFormRedirectsNoGestureDescription[]; + ++extern const char kDisableExternalIntentRequestsName[]; ++extern const char kDisableExternalIntentRequestsDescription[]; ++ + extern const char kInterestFeedContentSuggestionsName[]; + extern const char kInterestFeedContentSuggestionsDescription[]; + +-- +2.17.1 + diff --git a/build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch b/build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch deleted file mode 100644 index ccb5678d..00000000 --- a/build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch +++ /dev/null @@ -1,185 +0,0 @@ -From: csagan5 <32685696+csagan5@users.noreply.github.com> -Date: Mon, 22 Oct 2018 21:29:53 +0200 -Subject: Add flags to disable device motion/orientation APIs - -Both flags will be disabled by default and prevent usage of gyroscope and -legacy acceleration events. ---- - chrome/browser/about_flags.cc | 6 ++++++ - chrome/browser/flag_descriptions.cc | 8 ++++++++ - chrome/browser/flag_descriptions.h | 6 ++++++ - content/child/runtime_features.cc | 3 +++ - content/public/common/content_features.cc | 10 ++++++++++ - content/public/common/content_features.h | 2 ++ - .../blink/public/platform/web_runtime_features.h | 2 ++ - .../blink/renderer/modules/modules_initializer.cc | 10 +++++++--- - .../renderer/platform/exported/web_runtime_features.cc | 8 ++++++++ - .../renderer/platform/runtime_enabled_features.json5 | 8 ++++++++ - 10 files changed, 60 insertions(+), 3 deletions(-) - -diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc ---- a/chrome/browser/about_flags.cc -+++ b/chrome/browser/about_flags.cc -@@ -2848,6 +2848,12 @@ const FeatureEntry kFeatureEntries[] = { - {"enable-gpu-rasterization", flag_descriptions::kGpuRasterizationName, - flag_descriptions::kGpuRasterizationDescription, kOsAll, - MULTI_VALUE_TYPE(kEnableGpuRasterizationChoices)}, -+ {"enable-device-motion", flag_descriptions::kEnableDeviceMotionName, -+ flag_descriptions::kEnableDeviceMotionDescription, kOsAll, -+ FEATURE_VALUE_TYPE(features::kDeviceMotion)}, -+ {"enable-device-orientation", flag_descriptions::kEnableDeviceOrientationName, -+ flag_descriptions::kEnableDeviceOrientationDescription, kOsAll, -+ FEATURE_VALUE_TYPE(features::kDeviceOrientation)}, - {"enable-oop-rasterization", flag_descriptions::kOopRasterizationName, - flag_descriptions::kOopRasterizationDescription, kOsAll, - MULTI_VALUE_TYPE(kEnableOopRasterizationChoices)}, -diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc ---- a/chrome/browser/flag_descriptions.cc -+++ b/chrome/browser/flag_descriptions.cc -@@ -838,6 +838,14 @@ const char kWinrtGeolocationImplementationDescription[] = - "Enables usage of the Windows.Devices.Geolocation WinRT APIs on Windows " - "for geolocation"; - -+const char kEnableDeviceMotionName[] = "Enable device motion"; -+const char kEnableDeviceMotionDescription[] = -+ "Enable device motion API which is used to detect changes in acceleration"; -+ -+const char kEnableDeviceOrientationName[] = "Enable device orientation"; -+const char kEnableDeviceOrientationDescription[] = -+ "Enable device orientation API which is used to detect changes in orientation"; -+ - const char kEnableGenericSensorExtraClassesName[] = - "Generic Sensor Extra Classes"; - const char kEnableGenericSensorExtraClassesDescription[] = -diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h ---- a/chrome/browser/flag_descriptions.h -+++ b/chrome/browser/flag_descriptions.h -@@ -502,6 +502,12 @@ extern const char kNotificationsViaHelperAppDescription[]; - extern const char kWinrtGeolocationImplementationName[]; - extern const char kWinrtGeolocationImplementationDescription[]; - -+extern const char kEnableDeviceMotionName[]; -+extern const char kEnableDeviceMotionDescription[]; -+ -+extern const char kEnableDeviceOrientationName[]; -+extern const char kEnableDeviceOrientationDescription[]; -+ - extern const char kEnableGenericSensorExtraClassesName[]; - extern const char kEnableGenericSensorExtraClassesDescription[]; - -diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc ---- a/content/child/runtime_features.cc -+++ b/content/child/runtime_features.cc -@@ -89,6 +89,9 @@ void SetRuntimeFeatureDefaultsForPlatform( - command_line.HasSwitch( - blink::switches::kEnableGpuMemoryBufferCompositorResources) && - !command_line.HasSwitch(switches::kDisableWebGLImageChromium) && -+ WebRuntimeFeatures::EnableDeviceMotion(base::FeatureList::IsEnabled(features::kDeviceMotion)); -+ WebRuntimeFeatures::EnableDeviceOrientation(base::FeatureList::IsEnabled(features::kDeviceOrientation)); -+ - !command_line.HasSwitch(switches::kDisableGpu) && - base::FeatureList::IsEnabled(features::kWebGLImageChromium); - #else -diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc ---- a/content/public/common/content_features.cc -+++ b/content/public/common/content_features.cc -@@ -890,6 +890,16 @@ const base::Feature kWebOtpBackendAuto{"WebOtpBackendAuto", - // The JavaScript API for payments on the web. - const base::Feature kWebPayments{"WebPayments", - base::FEATURE_ENABLED_BY_DEFAULT}; -+// Enables the device motion API used to track device acceleration; -+// no user authorization or notifications happens when in use. -+const base::Feature kDeviceMotion{"DeviceMotion", -+ base::FEATURE_DISABLED_BY_DEFAULT}; -+ -+// Enables the device orientation API used to track device orientation; -+// no user authorization or notifications happens when in use. -+const base::Feature kDeviceOrientation{"DeviceOrientation", -+ base::FEATURE_DISABLED_BY_DEFAULT}; -+ - - // Minimal user interface experience for payments on the web. - const base::Feature kWebPaymentsMinimalUI{"WebPaymentsMinimalUI", -diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h ---- a/content/public/common/content_features.h -+++ b/content/public/common/content_features.h -@@ -212,6 +212,8 @@ CONTENT_EXPORT extern const base::Feature kWebXrHandInput; - CONTENT_EXPORT extern const base::Feature kWebXrHitTest; - CONTENT_EXPORT extern const base::Feature kWebXrIncubations; - -+CONTENT_EXPORT extern const base::Feature kDeviceMotion, kDeviceOrientation; -+ - #if defined(OS_ANDROID) - CONTENT_EXPORT extern const base::Feature kAndroidAutofillAccessibility; - CONTENT_EXPORT extern const base::Feature -diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h ---- a/third_party/blink/public/platform/web_runtime_features.h -+++ b/third_party/blink/public/platform/web_runtime_features.h -@@ -97,6 +97,8 @@ class WebRuntimeFeatures { - BLINK_PLATFORM_EXPORT static void EnableCookiesWithoutSameSiteMustBeSecure( - bool); - BLINK_PLATFORM_EXPORT static void EnableCanvas2dImageChromium(bool); -+ BLINK_PLATFORM_EXPORT static void EnableDeviceMotion(bool); -+ BLINK_PLATFORM_EXPORT static void EnableDeviceOrientation(bool); - BLINK_PLATFORM_EXPORT static void EnableCooperativeScheduling(bool); - BLINK_PLATFORM_EXPORT static void EnableCSSHexAlphaColor(bool); - BLINK_PLATFORM_EXPORT static void EnableSameSiteByDefaultCookies(bool); -diff --git a/third_party/blink/renderer/modules/modules_initializer.cc b/third_party/blink/renderer/modules/modules_initializer.cc ---- a/third_party/blink/renderer/modules/modules_initializer.cc -+++ b/third_party/blink/renderer/modules/modules_initializer.cc -@@ -231,9 +231,13 @@ void ModulesInitializer::OnClearWindowObjectInMainWorld( - Document& document, - const Settings& settings) const { - LocalDOMWindow& window = *document.domWindow(); -- DeviceMotionController::From(window); -- DeviceOrientationController::From(window); -- DeviceOrientationAbsoluteController::From(window); -+ if (RuntimeEnabledFeatures::DeviceMotionEnabled()) -+ DeviceMotionController::From(window); -+ if (RuntimeEnabledFeatures::DeviceOrientationEnabled()) { -+ DeviceOrientationController::From(window); -+ DeviceOrientationAbsoluteController::From(window); -+ } -+ - NavigatorGamepad::From(*window.navigator()); - - // TODO(nhiroki): Figure out why ServiceWorkerContainer needs to be eagerly -diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc ---- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc -+++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc -@@ -187,6 +187,14 @@ void WebRuntimeFeatures::EnableKeyboardAccessibleTooltip(bool enable) { - RuntimeEnabledFeatures::SetKeyboardAccessibleTooltipEnabled(enable); - } - -+void WebRuntimeFeatures::EnableDeviceMotion(bool enable) { -+ RuntimeEnabledFeatures::SetDeviceMotionEnabled(enable); -+} -+ -+void WebRuntimeFeatures::EnableDeviceOrientation(bool enable) { -+ RuntimeEnabledFeatures::SetDeviceOrientationEnabled(enable); -+} -+ - void WebRuntimeFeatures::EnableKeyboardFocusableScrollers(bool enable) { - RuntimeEnabledFeatures::SetKeyboardFocusableScrollersEnabled(enable); - } -diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 ---- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 -+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -1420,6 +1420,14 @@ - name: "OffscreenCanvasCommit", - status: "experimental", - }, -+ { -+ name: "DeviceMotion", -+ status: "stable", -+ }, -+ { -+ name: "DeviceOrientation", -+ status: "stable", -+ }, - { - name: "OnDeviceChange", - // Android does not yet support SystemMonitor. --- -2.17.1 - diff --git a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch index 977c2010..88dae56b 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -9,6 +9,7 @@ Subject: Add menu item to bookmark all tabs .../browser/bookmarks/BookmarkUtils.java | 4 ++ .../android/bookmarks/bookmark_bridge.cc | 17 ++++++ .../android/bookmarks/bookmark_bridge.h | 4 ++ + .../browser/bookmarks/bookmark_html_writer.cc | 10 +++ .../bookmarks/chrome_bookmark_client.cc | 2 + .../strings/android_chrome_strings.grd | 3 + components/bookmark_bar_strings.grdp | 6 ++ @@ -21,7 +22,7 @@ Subject: Add menu item to bookmark all tabs components/bookmarks/browser/bookmark_node.cc | 13 ++++ components/bookmarks/browser/bookmark_node.h | 5 ++ components/bookmarks/browser/model_loader.cc | 3 +- - 18 files changed, 191 insertions(+), 7 deletions(-) + 19 files changed, 201 insertions(+), 7 deletions(-) diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml --- a/chrome/android/java/res/menu/main_menu.xml @@ -50,7 +51,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -70,6 +70,8 @@ import org.chromium.chrome.browser.app.tabmodel.ChromeNextTabPolicySupplier; +@@ -69,6 +69,8 @@ import org.chromium.chrome.browser.app.tabmodel.ChromeNextTabPolicySupplier; import org.chromium.chrome.browser.app.tabmodel.TabModelOrchestrator; import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton; import org.chromium.chrome.browser.app.tabmodel.TabbedModeTabModelOrchestrator; @@ -59,7 +60,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.compositor.CompositorViewHolder; import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator; -@@ -1913,6 +1915,8 @@ public class ChromeTabbedActivity extends ChromeActivity GetOtherFolderId( JNIEnv* env, const base::android::JavaParamRef& obj); +diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc +--- a/chrome/browser/bookmarks/bookmark_html_writer.cc ++++ b/chrome/browser/bookmarks/bookmark_html_writer.cc +@@ -212,6 +212,14 @@ class Writer : public base::RefCountedThreadSafe { + return; + } + ++ base::Value* tabs_collection_value = nullptr; ++ if (roots_d_value->Get(BookmarkCodec::kTabsBookmarkFolderNameKey, ++ &tabs_collection_value) && ++ tabs_collection_value->type() == base::Value::Type::DICTIONARY) { ++ WriteNode(*static_cast(tabs_collection_value), ++ BookmarkNode::TABS_COLLECTION); ++ } ++ + DecrementIndent(); + + Write(kFolderChildrenEnd); +@@ -484,6 +492,8 @@ void BookmarkFaviconFetcher::ExportBookmarks() { + BookmarkModelFactory::GetForBrowserContext(profile_)->other_node()); + ExtractUrls( + BookmarkModelFactory::GetForBrowserContext(profile_)->mobile_node()); ++ ExtractUrls( ++ BookmarkModelFactory::GetForBrowserContext(profile_)->tabs_collection_node()); + if (!bookmark_urls_.empty()) + FetchNextFavicon(); + else diff --git a/chrome/browser/bookmarks/chrome_bookmark_client.cc b/chrome/browser/bookmarks/chrome_bookmark_client.cc --- a/chrome/browser/bookmarks/chrome_bookmark_client.cc +++ b/chrome/browser/bookmarks/chrome_bookmark_client.cc diff --git a/build/patches/Add-menu-item-to-view-source.patch b/build/patches/Add-menu-item-to-view-source.patch index f559ddd7..74012b1d 100644 --- a/build/patches/Add-menu-item-to-view-source.patch +++ b/build/patches/Add-menu-item-to-view-source.patch @@ -41,7 +41,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -1936,6 +1936,8 @@ public class ChromeTabbedActivity extends ChromeActivity +Date: Mon, 17 May 2021 12:30:12 +0000 +Subject: Add support for ISupportHelpAndFeedback + +--- + .../chrome/browser/settings/SettingsActivity.java | 10 +++++++--- + .../components/browser_ui/settings/SettingsUtils.java | 4 ++++ + 2 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +@@ -281,9 +281,13 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity + finish(); + return true; + } else if (item.getItemId() == R.id.menu_id_general_help) { +- HelpAndFeedbackLauncherImpl.getInstance().show(this, +- getString(R.string.help_context_settings), Profile.getLastUsedRegularProfile(), +- null); ++ if (mainFragment instanceof SettingsUtils.ISupportHelpAndFeedback) { ++ ((SettingsUtils.ISupportHelpAndFeedback)mainFragment).onHelpAndFeebackPressed(); ++ } else { ++ HelpAndFeedbackLauncherImpl.getInstance().show(this, ++ getString(R.string.help_context_settings), Profile.getLastUsedRegularProfile(), ++ null); ++ } + return true; + } + return super.onOptionsItemSelected(item); +diff --git a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java +--- a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java ++++ b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java +@@ -126,4 +126,8 @@ public class SettingsUtils { + ImageView imageButton = (ImageView) button; + return imageButton.getDrawable() == parentMenu.getOverflowIcon(); + } ++ ++ public interface ISupportHelpAndFeedback { ++ void onHelpAndFeebackPressed(); ++ } + } +-- +2.17.1 + diff --git a/build/patches/Add-vibration-flag.patch b/build/patches/Add-vibration-flag.patch new file mode 100644 index 00000000..cdc1db88 --- /dev/null +++ b/build/patches/Add-vibration-flag.patch @@ -0,0 +1,155 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Sun, 27 Jun 2021 17:35:39 +0200 +Subject: Add vibration flag + +--- + chrome/browser/about_flags.cc | 4 ++++ + chrome/browser/flag_descriptions.cc | 3 +++ + chrome/browser/flag_descriptions.h | 3 +++ + content/child/runtime_features.cc | 1 + + content/public/common/content_features.cc | 3 +++ + content/public/common/content_features.h | 2 ++ + third_party/blink/public/platform/web_runtime_features.h | 1 + + .../blink/renderer/modules/vibration/vibration_controller.cc | 3 +++ + .../blink/renderer/platform/exported/web_runtime_features.cc | 4 ++++ + .../blink/renderer/platform/runtime_enabled_features.json5 | 4 ++++ + 10 files changed, 28 insertions(+) + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -6296,6 +6296,10 @@ const FeatureEntry kFeatureEntries[] = { + FEATURE_VALUE_TYPE(features::kNotificationsViaHelperApp)}, + #endif + ++ {"enable-vibration", flag_descriptions::kEnableVibrationName, ++ flag_descriptions::kEnableVibrationDescription, kOsAll, ++ FEATURE_VALUE_TYPE(features::kVibration)}, ++ + #if BUILDFLAG(IS_CHROMEOS_ASH) + {"exo-gamepad-vibration", flag_descriptions::kExoGamepadVibrationName, + flag_descriptions::kExoGamepadVibrationDescription, kOsCrOS, +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -5004,6 +5004,9 @@ const char kWifiSyncAndroidDescription[] = + + #endif // BUILDFLAG(IS_CHROMEOS_ASH) + ++const char kEnableVibrationName[] = "Vibration"; ++const char kEnableVibrationDescription[] = "Enable vibration API; an user gesture will still be needed."; ++ + #if defined(OS_CHROMEOS) + const char kDeprecateLowUsageCodecsName[] = "Deprecates low usage media codecs"; + const char kDeprecateLowUsageCodecsDescription[] = +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -2921,6 +2921,9 @@ extern const char kWifiSyncAndroidDescription[]; + + #endif // #if BUILDFLAG(IS_CHROMEOS_ASH) + ++extern const char kEnableVibrationName[]; ++extern const char kEnableVibrationDescription[]; ++ + #if defined(OS_CHROMEOS) + extern const char kDeprecateLowUsageCodecsName[]; + extern const char kDeprecateLowUsageCodecsDescription[]; +diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc +--- a/content/child/runtime_features.cc ++++ b/content/child/runtime_features.cc +@@ -100,6 +100,7 @@ void SetRuntimeFeatureDefaultsForPlatform( + #if defined(OS_ANDROID) + if (command_line.HasSwitch(switches::kDisableMediaSessionAPI)) + WebRuntimeFeatures::EnableMediaSession(false); ++ WebRuntimeFeatures::EnableVibration(base::FeatureList::IsEnabled(features::kVibration)); + #endif + + #if defined(OS_ANDROID) +diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc +--- a/content/public/common/content_features.cc ++++ b/content/public/common/content_features.cc +@@ -87,6 +87,9 @@ const base::Feature kBackForwardCache{"BackForwardCache", + // BackForwardCacheMemoryControls is enabled only on Android to disable + // BackForwardCache for lower memory devices due to memory limiations. + #if defined(OS_ANDROID) ++// Enables vibration; an user gesture will still be required if enabled. ++const base::Feature kVibration{"Vibration", ++ base::FEATURE_DISABLED_BY_DEFAULT}; + const base::Feature kBackForwardCacheMemoryControls{ + "BackForwardCacheMemoryControls", base::FEATURE_ENABLED_BY_DEFAULT}; + #else +diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h +--- a/content/public/common/content_features.h ++++ b/content/public/common/content_features.h +@@ -222,6 +222,8 @@ CONTENT_EXPORT extern const base::Feature kWarmUpNetworkProcess; + CONTENT_EXPORT extern const base::Feature kWebNfc; + #endif // defined(OS_ANDROID) + ++CONTENT_EXPORT extern const base::Feature kVibration; ++ + #if defined(OS_MAC) + CONTENT_EXPORT extern const base::Feature kDesktopCaptureMacV2; + CONTENT_EXPORT extern const base::Feature kWindowCaptureMacV2; +diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h +--- a/third_party/blink/public/platform/web_runtime_features.h ++++ b/third_party/blink/public/platform/web_runtime_features.h +@@ -89,6 +89,7 @@ class WebRuntimeFeatures { + BLINK_PLATFORM_EXPORT static void EnableBlockingFocusWithoutUserActivation( + bool); + BLINK_PLATFORM_EXPORT static void EnableCacheInlineScriptCode(bool); ++ BLINK_PLATFORM_EXPORT static void EnableVibration(bool); + BLINK_PLATFORM_EXPORT static void EnableCapabilityDelegationPaymentRequest( + bool enable); + BLINK_PLATFORM_EXPORT static void EnableClickPointerEvent(bool enable); +diff --git a/third_party/blink/renderer/modules/vibration/vibration_controller.cc b/third_party/blink/renderer/modules/vibration/vibration_controller.cc +--- a/third_party/blink/renderer/modules/vibration/vibration_controller.cc ++++ b/third_party/blink/renderer/modules/vibration/vibration_controller.cc +@@ -29,6 +29,7 @@ + #include "third_party/blink/renderer/core/frame/navigator.h" + #include "third_party/blink/renderer/core/page/page.h" + #include "third_party/blink/renderer/platform/mojo/mojo_helper.h" ++#include "third_party/blink/renderer/platform/runtime_enabled_features.h" + + // Maximum number of entries in a vibration pattern. + const unsigned kVibrationPatternLengthMax = 99; +@@ -142,6 +143,8 @@ bool VibrationController::vibrate(Navigator& navigator, + // reference to |window| or |navigator| was retained in another window. + if (!navigator.DomWindow()) + return false; ++ if (!RuntimeEnabledFeatures::VibrationEnabled()) ++ return false; + return From(navigator).Vibrate(pattern); + } + +diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc +--- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc ++++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc +@@ -183,6 +183,10 @@ void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) { + RuntimeEnabledFeatures::SetScrollTopLeftInteropEnabled(enable); + } + ++void WebRuntimeFeatures::EnableVibration(bool enable) { ++ RuntimeEnabledFeatures::SetVibrationEnabled(enable); ++} ++ + void WebRuntimeFeatures::EnableKeyboardAccessibleTooltip(bool enable) { + RuntimeEnabledFeatures::SetKeyboardAccessibleTooltipEnabled(enable); + } +diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 +--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 ++++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 +@@ -1432,6 +1432,10 @@ + name: "OrientationEvent", + status: {"Android": "stable"}, + }, ++ { ++ name: "Vibration", ++ status: "stable", ++ }, + { + name: "OriginIsolationHeader", + status: "stable", +-- +2.17.1 + diff --git a/build/patches/Automated-domain-substitution.patch b/build/patches/Automated-domain-substitution.patch index be3a2de4..541e90f3 100644 --- a/build/patches/Automated-domain-substitution.patch +++ b/build/patches/Automated-domain-substitution.patch @@ -4147,7 +4147,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc const FeatureEntry::Choice kPassiveListenersChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, -@@ -3601,7 +3601,7 @@ const FeatureEntry kFeatureEntries[] = { +@@ -3614,7 +3614,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSyncSandboxDescription, kOsAll, SINGLE_VALUE_TYPE_AND_VALUE( switches::kSyncServiceURL, @@ -4156,7 +4156,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc #if !defined(OS_ANDROID) {"load-media-router-component-extension", flag_descriptions::kLoadMediaRouterComponentExtensionName, -@@ -3857,7 +3857,7 @@ const FeatureEntry kFeatureEntries[] = { +@@ -3870,7 +3870,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSetMarketUrlForTestingName, flag_descriptions::kSetMarketUrlForTestingDescription, kOsAndroid, SINGLE_VALUE_TYPE_AND_VALUE(switches::kMarketUrlForTesting, @@ -5156,7 +5156,7 @@ diff --git a/chrome/browser/feedback/feedback_uploader_chrome.cc b/chrome/browse diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -556,7 +556,7 @@ const char kDetectTargetEmbeddingLookalikesName[] = +@@ -562,7 +562,7 @@ const char kDetectTargetEmbeddingLookalikesName[] = "Detect target embedding domains as lookalikes."; const char kDetectTargetEmbeddingLookalikesDescription[] = "Shows a lookalike interstitial when navigating to target embedding domains" @@ -5165,7 +5165,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti const char kDeviceDiscoveryNotificationsName[] = "Device Discovery Notifications"; -@@ -2157,7 +2157,7 @@ const char kIntensiveWakeUpThrottlingName[] = +@@ -2155,7 +2155,7 @@ const char kIntensiveWakeUpThrottlingName[] = const char kIntensiveWakeUpThrottlingDescription[] = "When enabled, wake ups from DOM Timers are limited to 1 per minute in a " "page that has been hidden for 5 minutes. For additional details, see " @@ -7714,7 +7714,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro This setting is disabled on managed browsers -@@ -922,7 +922,7 @@ Privacy Sandbox is still in active development and is available in selected regi +@@ -929,7 +929,7 @@ Privacy Sandbox is still in active development and is available in selected regi The selected data has been removed from Chrome and your synced devices. @@ -7723,7 +7723,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Cached images and files -@@ -959,10 +959,10 @@ Your Google account may have other forms of browsing history like searches and a +@@ -966,10 +966,10 @@ Your Google account may have other forms of browsing history like searches and a Record history even in incognito mode @@ -7736,7 +7736,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro To clear <link1>search</link1> or other forms of history, visit <link2>My Google Activity</link2> -@@ -1025,7 +1025,7 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1032,7 +1032,7 @@ Your Google account may have other forms of browsing history like searches and a Basic @@ -7745,7 +7745,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Blocked site -@@ -1435,7 +1435,7 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1442,7 +1442,7 @@ Your Google account may have other forms of browsing history like searches and a In Lite mode, Chrome loads pages faster and uses up to 60 percent less data. To optimize the pages that you visit, Chrome sends your web traffic to Google. <link>Learn more</link> @@ -7754,7 +7754,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Turn on Lite mode -@@ -1622,10 +1622,10 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1629,10 +1629,10 @@ Your Google account may have other forms of browsing history like searches and a Waiting for details of parents. @@ -7767,7 +7767,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Content -@@ -1684,22 +1684,22 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1691,22 +1691,22 @@ Your Google account may have other forms of browsing history like searches and a Google Terms of Service @@ -7794,7 +7794,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro -@@ -1716,7 +1716,7 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1723,7 +1723,7 @@ Your Google account may have other forms of browsing history like searches and a Also clear your Chrome data from this device @@ -7803,7 +7803,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Contacting Google. This may take a minute… -@@ -1861,7 +1861,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

@@ -7812,7 +7812,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro <link>Get help</link> while scanning for devices… -@@ -1906,7 +1906,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

@@ -7821,7 +7821,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Unknown or unsupported device (%1$sA1:B2:C3:D4:E5:F6) -@@ -3751,7 +3751,7 @@ Data from your Incognito session will only be cleared from Chrome when you @@ -7830,7 +7830,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro No compatible devices found -@@ -3790,7 +3790,7 @@ Data from your Incognito session will only be cleared from Chrome when you @@ -7839,7 +7839,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Got it -@@ -4054,7 +4054,7 @@ Data from your Incognito session will only be cleared from Chrome when you %1$sTanya's Pixel 2... @@ -8571,14 +8571,14 @@ diff --git a/chrome/browser/web_applications/preinstalled_web_apps/gmail.cc b/ch #if BUILDFLAG(IS_CHROMEOS_ASH) /*user_display_mode=*/DisplayMode::kStandalone, #else -@@ -33,8 +33,8 @@ ExternalInstallOptions GetConfigForGmail() { - options.app_info_factory = base::BindRepeating([]() { +@@ -34,8 +34,8 @@ ExternalInstallOptions GetConfigForGmail() { auto info = std::make_unique(); info->title = u"Gmail"; -- info->start_url = GURL("https://mail.google.com/?usp=installed_webapp"); -- info->scope = GURL("https://mail.google.com/"); -+ info->start_url = GURL("https://mail.9oo91e.qjz9zk/?usp=installed_webapp"); -+ info->scope = GURL("https://mail.9oo91e.qjz9zk/"); + info->start_url = +- GURL("https://mail.google.com/mail/?usp=installed_webapp"); +- info->scope = GURL("https://mail.google.com/mail/"); ++ GURL("https://mail.9oo91e.qjz9zk/mail/?usp=installed_webapp"); ++ info->scope = GURL("https://mail.9oo91e.qjz9zk/mail/"); info->display_mode = DisplayMode::kBrowser; info->icon_bitmaps.any = LoadBundledIcons({IDR_PREINSTALLED_WEB_APPS_GMAIL_ICON_192_PNG}); @@ -11708,7 +11708,7 @@ diff --git a/components/crash/core/app/crash_reporter_client.cc b/components/cra diff --git a/components/crash/core/browser/resources/crashes.js b/components/crash/core/browser/resources/crashes.js --- a/components/crash/core/browser/resources/crashes.js +++ b/components/crash/core/browser/resources/crashes.js -@@ -105,7 +105,7 @@ function updateCrashList({ +@@ -106,7 +106,7 @@ function updateCrashList({ const uploadIdValue = uploadId.querySelector('.value'); if (isGoogleAccount) { const crashLink = document.createElement('a'); @@ -11717,7 +11717,7 @@ diff --git a/components/crash/core/browser/resources/crashes.js b/components/cra crashLink.target = '_blank'; crashLink.textContent = crash.id; uploadIdValue.appendChild(crashLink); -@@ -180,7 +180,7 @@ function fileBug(crashId, os, version) { +@@ -175,7 +175,7 @@ function fileBug(crashId, os, version) { // https://bugs.chromium.org/p/monorail/issues/detail?id=1488 is done. labels: 'Restrict-View-EditIssue,Stability-Crash,User-Submitted', }; @@ -15697,7 +15697,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': [ 'yusuyoutube@9oo91e.qjz9zk', 'benwgold@9oo91e.qjz9zk', 'wylieb@ch40m1um.qjz9zk', 'fgorski@ch40m1um.qjz9zk', 'lens-chrome@9oo91e.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'future_on': ['android'], + 'supported_on': ['android:91-'], @@ -7162,9 +7162,9 @@ { 'name': 'InsecurePrivateNetworkRequestsAllowed', @@ -19425,7 +19425,7 @@ diff --git a/components/policy/resources/policy_templates.json b/components/poli + 'owners': ['vecore@9oo91e.qjz9zk', 'hansberry@ch40m1um.qjz9zk', 'better-together-dev@9oo91e.qjz9zk'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'future_on': ['chrome_os'], + 'supported_on': ['chrome_os:91-'], @@ -17289,7 +17289,7 @@ }, { @@ -27930,7 +27930,7 @@ diff --git a/testing/scripts/run_performance_tests.py b/testing/scripts/run_perf diff --git a/testing/test_env.py b/testing/test_env.py --- a/testing/test_env.py +++ b/testing/test_env.py -@@ -181,7 +181,7 @@ def run_command_with_output(argv, stdoutfile, env=None, cwd=None): +@@ -185,7 +185,7 @@ def run_command_with_output(argv, stdoutfile, env=None, cwd=None): """Run command and stream its stdout/stderr to the console & |stdoutfile|. Also forward_signals to obey @@ -27939,7 +27939,7 @@ diff --git a/testing/test_env.py b/testing/test_env.py Returns: integer returncode of the subprocess. -@@ -208,7 +208,7 @@ def run_command(argv, env=None, cwd=None, log=True): +@@ -212,7 +212,7 @@ def run_command(argv, env=None, cwd=None, log=True): """Run command and stream its stdout/stderr both to stdout. Also forward_signals to obey @@ -27948,7 +27948,7 @@ diff --git a/testing/test_env.py b/testing/test_env.py Returns: integer returncode of the subprocess. -@@ -224,7 +224,7 @@ def run_command_output_to_handle(argv, file_handle, env=None, cwd=None): +@@ -228,7 +228,7 @@ def run_command_output_to_handle(argv, file_handle, env=None, cwd=None): """Run command and stream its stdout/stderr both to |file_handle|. Also forward_signals to obey @@ -27957,7 +27957,7 @@ diff --git a/testing/test_env.py b/testing/test_env.py Returns: integer returncode of the subprocess. -@@ -264,7 +264,7 @@ def forward_signals(procs): +@@ -268,7 +268,7 @@ def forward_signals(procs): """Forwards unix's SIGTERM or win's CTRL_BREAK_EVENT to the given processes. This plays nicely with swarming's timeout handling. See also @@ -28014,7 +28014,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "AutofillServerCommunication", -@@ -2704,7 +2704,7 @@ +@@ -2719,7 +2719,7 @@ "params": { "DnsHttpssvcControlDomainWildcard": "true", "DnsHttpssvcEnableQueryOverInsecure": "true", @@ -28023,7 +28023,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati "DnsHttpssvcExtraTimeMs": "50", "DnsHttpssvcExtraTimePercent": "20", "DnsHttpssvcUseHttpssvc": "true", -@@ -3675,7 +3675,7 @@ +@@ -3690,7 +3690,7 @@ { "name": "Enabled", "params": { @@ -28032,7 +28032,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "IncompatibleApplicationsWarning" -@@ -5405,12 +5405,12 @@ +@@ -5420,12 +5420,12 @@ { "name": "Enabled_Prefetch_Prefetch1_NSP6_Small_20210301", "params": { @@ -28047,7 +28047,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "IsolatePrerenders", -@@ -5572,7 +5572,7 @@ +@@ -5587,7 +5587,7 @@ { "name": "EnabledNTPWithExploreAndTrending", "params": { @@ -28056,7 +28056,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati "experiment_tag": "{maxLevels : 1, enableTrending : true, maxTrendingQueries : 8}", "image_prefetch_mode": "top", "is_unmetered_network_required": "false", -@@ -5595,7 +5595,7 @@ +@@ -5610,7 +5610,7 @@ { "name": "EnabledStitchAndTrending", "params": { @@ -28065,7 +28065,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati "experiment_tag": "{enableTrending: true, maxTrendingQueries: 8}", "image_prefetch_mode": "top", "is_unmetered_network_required": "false", -@@ -6839,7 +6839,7 @@ +@@ -6854,7 +6854,7 @@ { "name": "launch_20180628_model_20170329_with_blacklist_override_default", "params": { @@ -28074,7 +28074,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "TranslateRankerAutoBlacklistOverride", -@@ -6858,7 +6858,7 @@ +@@ -6873,7 +6873,7 @@ { "name": "20180123_launch", "params": { @@ -28083,7 +28083,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "TranslateRankerAutoBlacklistOverride", -@@ -6879,7 +6879,7 @@ +@@ -6894,7 +6894,7 @@ { "name": "Enforcement20170918", "params": { @@ -28092,7 +28092,7 @@ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variati }, "enable_features": [ "TranslateRankerEnforcement", -@@ -7345,7 +7345,7 @@ +@@ -7360,7 +7360,7 @@ { "name": "Enabled", "params": { @@ -30381,7 +30381,7 @@ diff --git a/third_party/blink/renderer/modules/payments/skip_to_gpay_utils.cc b diff --git a/third_party/blink/renderer/modules/vibration/vibration_controller.cc b/third_party/blink/renderer/modules/vibration/vibration_controller.cc --- a/third_party/blink/renderer/modules/vibration/vibration_controller.cc +++ b/third_party/blink/renderer/modules/vibration/vibration_controller.cc -@@ -176,12 +176,12 @@ bool VibrationController::Vibrate(const VibrationPattern& pattern) { +@@ -179,12 +179,12 @@ bool VibrationController::Vibrate(const VibrationPattern& pattern) { message = "Blocked call to navigator.vibrate inside a cross-origin " "iframe because the frame has never been activated by the user: " diff --git a/build/patches/Bromite-AdBlockUpdaterService.patch b/build/patches/Bromite-AdBlockUpdaterService.patch index 48090019..dea677ba 100644 --- a/build/patches/Bromite-AdBlockUpdaterService.patch +++ b/build/patches/Bromite-AdBlockUpdaterService.patch @@ -68,7 +68,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja "java/res/layout/assistant_voice_search_consent_ui.xml", "java/res/layout/auto_sign_in_first_run_dialog.xml", "java/res/layout/autofill_billing_address_dropdown.xml", -@@ -896,6 +897,7 @@ chrome_java_resources = [ +@@ -897,6 +898,7 @@ chrome_java_resources = [ "java/res/xml/about_chrome_preferences.xml", "java/res/xml/accessibility_preferences.xml", "java/res/xml/account_management_preferences.xml", @@ -163,7 +163,7 @@ new file mode 100644 diff --git a/chrome/android/java/res/values/styles.xml b/chrome/android/java/res/values/styles.xml --- a/chrome/android/java/res/values/styles.xml +++ b/chrome/android/java/res/values/styles.xml -@@ -206,6 +206,23 @@ +@@ -208,6 +208,23 @@ 0dp 1 @@ -552,7 +552,7 @@ diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_proc diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc -@@ -1604,6 +1604,8 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { +@@ -1622,6 +1622,8 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { speech::SodaInstaller::GetInstance()->Init(profile_->GetPrefs(), browser_process_->local_state()); #endif // !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) diff --git a/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch b/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch index fdc762c7..15bacbd6 100644 --- a/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch +++ b/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch @@ -9,7 +9,7 @@ Subject: Disable DRM media origin IDs preprovisioning diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -610,7 +610,7 @@ const base::Feature kMediaDrmPersistentLicense{ +@@ -618,7 +618,7 @@ const base::Feature kMediaDrmPersistentLicense{ // MediaDrmBridge. If disabled, MediaDrmBridge will get unprovisioned origin IDs // which will trigger provisioning process after MediaDrmBridge is created. const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning", diff --git a/build/patches/Disable-RTCGetCurrentBrowsingContextMedia-by-default.patch b/build/patches/Disable-RTCGetCurrentBrowsingContextMedia-by-default.patch index 87406267..0e9cdac9 100644 --- a/build/patches/Disable-RTCGetCurrentBrowsingContextMedia-by-default.patch +++ b/build/patches/Disable-RTCGetCurrentBrowsingContextMedia-by-default.patch @@ -9,7 +9,7 @@ Subject: Disable RTCGetCurrentBrowsingContextMedia by default diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -215,7 +215,7 @@ const base::Feature kRawClipboard{"RawClipboard", +@@ -233,7 +233,7 @@ const base::Feature kRawClipboard{"RawClipboard", // Kill switch for getCurrentBrowsingContextMedia(), which allows capturing of // web content from the tab from which it is called. (crbug.com/1136940) const base::Feature kRTCGetCurrentBrowsingContextMedia{ diff --git a/build/patches/Disable-all-promo-dialogs.patch b/build/patches/Disable-all-promo-dialogs.patch index 48640a27..a3f62205 100644 --- a/build/patches/Disable-all-promo-dialogs.patch +++ b/build/patches/Disable-all-promo-dialogs.patch @@ -9,7 +9,7 @@ Subject: Disable all promo dialogs diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -@@ -611,7 +611,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -609,7 +609,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { * displayed. */ private boolean triggerPromo(boolean intentWithEffect) { @@ -18,7 +18,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab if (CommandLine.getInstance().hasSwitch(ChromeSwitches.DISABLE_STARTUP_PROMOS)) { return false; } -@@ -646,8 +646,8 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -644,8 +644,8 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { preferenceManager.writeBoolean( ChromePreferenceKeys.PROMOS_SKIPPED_ON_FIRST_START, true); } diff --git a/build/patches/Disable-smart-selection-by-default.patch b/build/patches/Disable-smart-selection-by-default.patch index 9fbe205c..e65d6ddc 100644 --- a/build/patches/Disable-smart-selection-by-default.patch +++ b/build/patches/Disable-smart-selection-by-default.patch @@ -5,25 +5,84 @@ Subject: Disable smart selection by default Allow web search in incognito mode (reverts commit 48d4ae54f7565c429bf29cd63806aee5d7e93e69) +Partial revert of da1d809c003749846cb4ade8c11b6d038e44416b to restore +the ChromeSmartSelection feature flag. + Notice that re-enabling smart selection would make incognito mode potentially leak information through the TextClassifier set by OEM, if any --- - chrome/browser/flags/android/chrome_feature_list.cc | 2 +- - .../content/browser/selection/SelectionPopupControllerImpl.java | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + .../contextualsearch/SelectionClientManager.java | 4 +++- + .../browser/flags/android/chrome_feature_list.cc | 4 ++++ + .../browser/flags/android/chrome_feature_list.h | 1 + + .../chrome/browser/flags/ChromeFeatureList.java | 1 + + .../selection/SelectionPopupControllerImpl.java | 2 +- + testing/variations/fieldtrial_testing_config.json | 15 +++++++++++++++ + 6 files changed, 25 insertions(+), 2 deletions(-) +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/SelectionClientManager.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/SelectionClientManager.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/SelectionClientManager.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/SelectionClientManager.java +@@ -10,6 +10,7 @@ import android.view.textclassifier.TextClassifier; + import androidx.annotation.Nullable; + import androidx.annotation.VisibleForTesting; + ++import org.chromium.chrome.browser.flags.ChromeFeatureList; + import org.chromium.content_public.browser.SelectionClient; + import org.chromium.content_public.browser.SelectionMetricsLogger; + import org.chromium.content_public.browser.SelectionPopupController; +@@ -44,7 +45,8 @@ public class SelectionClientManager { + * @param webContents The {@link WebContents} that will show popups for this client. + */ + SelectionClientManager(WebContents webContents) { +- if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) { ++ if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SMART_SELECTION) ++ && Build.VERSION.SDK_INT > Build.VERSION_CODES.O) { + assert webContents != null; + mOptionalSelectionClient = SelectionClient.createSmartSelectionClient(webContents); + SelectionPopupController controller = diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -532,7 +532,7 @@ const base::Feature kDownloadProgressInfoBar{"DownloadProgressInfoBar", - base::FEATURE_ENABLED_BY_DEFAULT}; +@@ -164,6 +164,7 @@ const base::Feature* kFeaturesExposedToJava[] = { + &kChromeShareScreenshot, + &kChromeSharingHub, + &kChromeSharingHubV15, ++ &kChromeSmartSelection, + &kChromeStartupDelegate, + &kChromeSurveyNextAndroid, + &kCommandLineOnNonRooted, +@@ -453,6 +454,9 @@ const base::Feature kChromeStartupDelegate{"ChromeStartupDelegate", + const base::Feature kChromeSurveyNextAndroid{"ChromeSurveyNextAndroid", + base::FEATURE_DISABLED_BY_DEFAULT}; - const base::Feature kDownloadFileProvider{"DownloadFileProvider", -- base::FEATURE_ENABLED_BY_DEFAULT}; ++const base::Feature kChromeSmartSelection{"ChromeSmartSelection", + base::FEATURE_DISABLED_BY_DEFAULT}; ++ + const base::Feature kCommandLineOnNonRooted{"CommandLineOnNonRooted", + base::FEATURE_DISABLED_BY_DEFAULT}; - const base::Feature kDownloadNotificationBadge{ - "DownloadNotificationBadge", base::FEATURE_ENABLED_BY_DEFAULT}; +diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h +--- a/chrome/browser/flags/android/chrome_feature_list.h ++++ b/chrome/browser/flags/android/chrome_feature_list.h +@@ -50,6 +50,7 @@ extern const base::Feature kChromeShareQRCode; + extern const base::Feature kChromeShareScreenshot; + extern const base::Feature kChromeSharingHub; + extern const base::Feature kChromeSharingHubV15; ++extern const base::Feature kChromeSmartSelection; + extern const base::Feature kChromeStartupDelegate; + extern const base::Feature kChromeSurveyNextAndroid; + extern const base::Feature kCommandLineOnNonRooted; +diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java ++++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +@@ -275,6 +275,7 @@ public abstract class ChromeFeatureList { + public static final String CHROME_SHARE_SCREENSHOT = "ChromeShareScreenshot"; + public static final String CHROME_SHARING_HUB = "ChromeSharingHub"; + public static final String CHROME_SHARING_HUB_V15 = "ChromeSharingHubV15"; ++ public static final String CHROME_SMART_SELECTION = "ChromeSmartSelection"; + public static final String CHROME_STARTUP_DELEGATE = "ChromeStartupDelegate"; + public static final String CLEAR_OLD_BROWSING_DATA = "ClearOldBrowsingData"; + public static final String COMMAND_LINE_ON_NON_ROOTED = "CommandLineOnNonRooted"; diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java --- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java @@ -36,6 +95,31 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/select || !isSelectActionModeAllowed(MENU_ITEM_WEB_SEARCH)) { menu.removeItem(R.id.select_action_menu_web_search); } +diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json +--- a/testing/variations/fieldtrial_testing_config.json ++++ b/testing/variations/fieldtrial_testing_config.json +@@ -1587,6 +1587,21 @@ + ] + } + ], ++ "ChromeSmartSelection": [ ++ { ++ "platforms": [ ++ "android" ++ ], ++ "experiments": [ ++ { ++ "name": "Enabled_Launch", ++ "enable_features": [ ++ "ChromeSmartSelection" ++ ] ++ } ++ ] ++ } ++ ], + "ChromeStart": [ + { + "platforms": [ -- 2.17.1 diff --git a/build/patches/Disable-text-fragments-by-default.patch b/build/patches/Disable-text-fragments-by-default.patch index e1cb98c3..4cf822bb 100644 --- a/build/patches/Disable-text-fragments-by-default.patch +++ b/build/patches/Disable-text-fragments-by-default.patch @@ -17,7 +17,7 @@ Revert "[Text Fragment] Unflag fragment directive removal." diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5296,6 +5296,7 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5295,6 +5295,7 @@ const FeatureEntry kFeatureEntries[] = { #if BUILDFLAG(ENABLE_DICE_SUPPORT) {"use-multilogin-endpoint", flag_descriptions::kUseMultiloginEndpointName, flag_descriptions::kUseMultiloginEndpointDescription, @@ -28,7 +28,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -2796,7 +2796,7 @@ +@@ -2801,7 +2801,7 @@ { "name": "ev-details-in-page-info", "owners": [ "cthomp" ], @@ -52,7 +52,7 @@ diff --git a/chrome/browser/ui/prefs/prefs_tab_helper.cc b/chrome/browser/ui/pre diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc -@@ -271,6 +271,7 @@ void SetRuntimeFeaturesFromChromiumFeatures() { +@@ -268,6 +268,7 @@ void SetRuntimeFeaturesFromChromiumFeatures() { {wf::EnableMouseSubframeNoImplicitCapture, features::kMouseSubframeNoImplicitCapture}, {wf::EnableNeverSlowMode, features::kNeverSlowMode}, @@ -63,7 +63,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -332,7 +332,7 @@ const base::Feature kStorageAccessAPI{"StorageAccessAPI", +@@ -350,7 +350,7 @@ const base::Feature kStorageAccessAPI{"StorageAccessAPI", // Enable text snippets in URL fragments. https://crbug.com/919204. const base::Feature kTextFragmentAnchor{"TextFragmentAnchor", @@ -75,7 +75,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc -@@ -4333,6 +4333,10 @@ void Document::SetURL(const KURL& url) { +@@ -4330,6 +4330,10 @@ void Document::SetURL(const KURL& url) { } } @@ -86,7 +86,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink // Strip the fragment directive from the URL fragment. E.g. "#id:~:text=a" // --> "#id". See https://github.com/WICG/scroll-to-text-fragment. String fragment = new_url.FragmentIdentifier(); -@@ -4346,6 +4350,7 @@ void Document::SetURL(const KURL& url) { +@@ -4343,6 +4347,7 @@ void Document::SetURL(const KURL& url) { else new_url.SetFragmentIdentifier(fragment.Substring(0, start_pos)); } @@ -145,7 +145,7 @@ diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -2010,8 +2010,7 @@ +@@ -2005,8 +2005,7 @@ }, { name: "TextFragmentIdentifiers", diff --git a/build/patches/Enable-IntentBlockExternalFormRedirectsNoGesture-by-default.patch b/build/patches/Enable-IntentBlockExternalFormRedirectsNoGesture-by-default.patch new file mode 100644 index 00000000..c0170129 --- /dev/null +++ b/build/patches/Enable-IntentBlockExternalFormRedirectsNoGesture-by-default.patch @@ -0,0 +1,23 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Tue, 25 May 2021 19:33:41 +0200 +Subject: Enable IntentBlockExternalFormRedirectsNoGesture by default + +--- + .../external_intents/android/external_intents_feature_list.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/components/external_intents/android/external_intents_feature_list.cc b/components/external_intents/android/external_intents_feature_list.cc +--- a/components/external_intents/android/external_intents_feature_list.cc ++++ b/components/external_intents/android/external_intents_feature_list.cc +@@ -37,7 +37,7 @@ const base::Feature* FindFeatureExposedToJava(const std::string& feature_name) { + // Alphabetical: + const base::Feature kIntentBlockExternalFormRedirectsNoGesture{ + "IntentBlockExternalFormRedirectsNoGesture", +- base::FEATURE_DISABLED_BY_DEFAULT}; ++ base::FEATURE_ENABLED_BY_DEFAULT}; + + static jboolean JNI_ExternalIntentsFeatureList_IsEnabled( + JNIEnv* env, +-- +2.17.1 + diff --git a/build/patches/Enable-darken-websites-checkbox-in-themes.patch b/build/patches/Enable-darken-websites-checkbox-in-themes.patch index 7e361773..5bcfcad1 100644 --- a/build/patches/Enable-darken-websites-checkbox-in-themes.patch +++ b/build/patches/Enable-darken-websites-checkbox-in-themes.patch @@ -11,7 +11,7 @@ Unexpire #darken-websites-checkbox-in-themes-setting diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -1110,7 +1110,7 @@ +@@ -1115,7 +1115,7 @@ { "name": "disable-keepalive-fetch", "owners": [ "yhirano" ], @@ -23,7 +23,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -520,7 +520,7 @@ const base::Feature kContextualSearchTranslations{ +@@ -524,7 +524,7 @@ const base::Feature kContextualSearchTranslations{ "ContextualSearchTranslations", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kDarkenWebsitesCheckboxInThemesSetting{ diff --git a/build/patches/Enable-prefetch-privacy-changes-by-default.patch b/build/patches/Enable-prefetch-privacy-changes-by-default.patch index ff8b1860..8bbacfae 100644 --- a/build/patches/Enable-prefetch-privacy-changes-by-default.patch +++ b/build/patches/Enable-prefetch-privacy-changes-by-default.patch @@ -9,7 +9,7 @@ Subject: Enable prefetch-privacy-changes by default diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -357,7 +357,7 @@ const base::Feature kComputePressure{"ComputePressure", +@@ -375,7 +375,7 @@ const base::Feature kComputePressure{"ComputePressure", // Prefetch request properties are updated to be privacy-preserving. See // crbug.com/988956. const base::Feature kPrefetchPrivacyChanges{"PrefetchPrivacyChanges", diff --git a/build/patches/Enable-user-agent-freeze-by-default.patch b/build/patches/Enable-user-agent-freeze-by-default.patch index ff0a87e7..104deae7 100644 --- a/build/patches/Enable-user-agent-freeze-by-default.patch +++ b/build/patches/Enable-user-agent-freeze-by-default.patch @@ -9,7 +9,7 @@ Subject: Enable user-agent freeze by default diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -63,7 +63,7 @@ const base::Feature kFreezePurgeMemoryAllPagesFrozen{ +@@ -81,7 +81,7 @@ const base::Feature kFreezePurgeMemoryAllPagesFrozen{ // Freezes the user-agent as part of https://github.com/WICG/ua-client-hints. const base::Feature kFreezeUserAgent{"FreezeUserAgent", diff --git a/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch b/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch index 07685bd6..80e802a4 100644 --- a/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch +++ b/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch @@ -50,7 +50,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink #ifndef NDEBUG using WeakDocumentSet = blink::HeapHashSet>; static WeakDocumentSet& liveDocumentSet(); -@@ -6864,6 +6867,61 @@ void Document::setAllowDeclarativeShadowRoots(bool val) { +@@ -6859,6 +6862,61 @@ void Document::setAllowDeclarativeShadowRoots(bool val) { val ? AllowState::kAllow : AllowState::kDeny; } @@ -112,7 +112,7 @@ diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink void Document::FinishedParsing() { DCHECK(!GetScriptableDocumentParser() || !parser_->IsParsing()); DCHECK(!GetScriptableDocumentParser() || ready_state_ != kLoading); -@@ -6916,6 +6974,10 @@ void Document::FinishedParsing() { +@@ -6911,6 +6969,10 @@ void Document::FinishedParsing() { frame->Loader().FinishedParsing(); diff --git a/build/patches/JIT-less-toggle.patch b/build/patches/JIT-less-toggle.patch new file mode 100644 index 00000000..edd41647 --- /dev/null +++ b/build/patches/JIT-less-toggle.patch @@ -0,0 +1,122 @@ +From: hardenedfuchsiaoswhen +Date: Fri, 18 Jun 2021 03:34:20 +0000 +Subject: JIT-less toggle + +--- + chrome/android/java/res/xml/privacy_preferences.xml | 5 +++++ + .../browser/privacy/settings/PrivacySettings.java | 12 ++++++++++++ + .../ui/android/strings/android_chrome_strings.grd | 7 +++++++ + .../browser/BrowserStartupControllerImpl.java | 1 + + .../chromium/content/browser/DeviceUtilsImpl.java | 6 ++++++ + 5 files changed, 31 insertions(+) + +diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml +--- a/chrome/android/java/res/xml/privacy_preferences.xml ++++ b/chrome/android/java/res/xml/privacy_preferences.xml +@@ -24,6 +24,11 @@ + android:title="@string/preload_pages_title" + android:summary="@string/preload_pages_summary" + android:persistent="false"/> ++ + + ++ ++ Disable JIT ++ ++ ++ Improve security at the expense of performance by not compiling JavaScript to native code (requires browser restart) ++ ++ + + Clear browsing data + +diff --git a/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java +--- a/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java ++++ b/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java +@@ -445,6 +445,7 @@ public class BrowserStartupControllerImpl implements BrowserStartupController { + } + + // TODO(yfriedman): Remove dependency on a command line flag for this. ++ DeviceUtilsImpl.addJitlessSwitch(); + DeviceUtilsImpl.addDeviceSpecificUserAgentSwitch(); + BrowserStartupControllerImplJni.get().setCommandLineFlags(singleProcess); + } +diff --git a/content/public/android/java/src/org/chromium/content/browser/DeviceUtilsImpl.java b/content/public/android/java/src/org/chromium/content/browser/DeviceUtilsImpl.java +--- a/content/public/android/java/src/org/chromium/content/browser/DeviceUtilsImpl.java ++++ b/content/public/android/java/src/org/chromium/content/browser/DeviceUtilsImpl.java +@@ -5,6 +5,7 @@ + package org.chromium.content.browser; + + import org.chromium.base.CommandLine; ++import org.chromium.base.ContextUtils; + import org.chromium.base.StrictModeContext; + import org.chromium.content_public.common.ContentSwitches; + import org.chromium.ui.base.DeviceFormFactor; +@@ -22,4 +23,9 @@ public class DeviceUtilsImpl { + } + } + } ++ public static void addJitlessSwitch() { ++ if (ContextUtils.getAppSharedPreferences().getBoolean("force_no_jit", false)) { ++ CommandLine.getInstance().appendSwitchWithValue("js-flags", "--jitless"); ++ } ++ } + } +-- +2.17.1 + diff --git a/build/patches/Logcat-crash-reports-UI.patch b/build/patches/Logcat-crash-reports-UI.patch new file mode 100644 index 00000000..38286dc5 --- /dev/null +++ b/build/patches/Logcat-crash-reports-UI.patch @@ -0,0 +1,867 @@ +From: uazo +Date: Tue, 15 Jun 2021 11:49:43 +0000 +Subject: Logcat crash reports UI + +--- + .../crash/MinidumpUploadServiceImpl.java | 22 +++ + .../crash_upload_list_android.cc | 22 ++- + .../crash_upload_list_android.h | 1 + + chrome/browser/net/chrome_network_delegate.cc | 7 + + chrome/browser/ui/BUILD.gn | 1 + + chrome/browser/ui/webui/crashes_ui.cc | 165 ++++++++++++++++-- + .../crash/core/browser/crashes_ui_util.cc | 4 + + .../crash/core/browser/crashes_ui_util.h | 2 + + .../crash/core/browser/resources/crashes.css | 67 ++++++- + .../crash/core/browser/resources/crashes.html | 17 ++ + .../crash/core/browser/resources/crashes.js | 40 +++-- + components/crash_strings.grdp | 22 ++- + .../minidump_uploader/CrashFileManager.java | 7 +- + .../MinidumpUploadCallable.java | 20 +-- + .../minidump_uploader/MinidumpUploader.java | 29 +-- + .../upload_list/text_log_upload_list.cc | 1 + + components/upload_list/upload_list.cc | 17 +- + components/upload_list/upload_list.h | 9 + + 18 files changed, 374 insertions(+), 79 deletions(-) + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadServiceImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadServiceImpl.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadServiceImpl.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadServiceImpl.java +@@ -42,6 +42,11 @@ import java.lang.annotation.Retention; + import java.lang.annotation.RetentionPolicy; + import java.util.concurrent.atomic.AtomicBoolean; + ++import org.chromium.base.task.AsyncTask; ++import org.chromium.base.task.PostTask; ++import org.chromium.base.task.TaskTraits; ++import org.chromium.chrome.browser.crash.LogcatExtractionRunnable; ++ + /** + * Service that is responsible for uploading crash minidumps to the Google crash server. + */ +@@ -445,4 +450,21 @@ public class MinidumpUploadServiceImpl extends MinidumpUploadService.Impl { + tryUploadCrashDump(renamedMinidumpFile); + } + } ++ ++ @CalledByNative ++ public static void requestNewExtraction() { ++ CrashFileManager crashFileManager = ++ new CrashFileManager(ContextUtils.getApplicationContext().getCacheDir()); ++ ++ // Append logcat output to minidumps where are missing ++ // getMinidumpsSansLogcat() also extract new files from crashpad ++ File[] minidumpsSansLogcat = crashFileManager.getMinidumpsSansLogcat(); ++ if (minidumpsSansLogcat.length >= 1) { ++ for (int i = 0; i < minidumpsSansLogcat.length; ++i) { ++ File minidump = minidumpsSansLogcat[i]; ++ AsyncTask.THREAD_POOL_EXECUTOR.execute( ++ new LogcatExtractionRunnable(minidump)); ++ } ++ } ++ } + } +diff --git a/chrome/browser/crash_upload_list/crash_upload_list_android.cc b/chrome/browser/crash_upload_list/crash_upload_list_android.cc +--- a/chrome/browser/crash_upload_list/crash_upload_list_android.cc ++++ b/chrome/browser/crash_upload_list/crash_upload_list_android.cc +@@ -14,6 +14,7 @@ + #include "base/metrics/histogram_macros_local.h" + #include "chrome/android/chrome_jni_headers/MinidumpUploadServiceImpl_jni.h" + #include "ui/base/text/bytes_formatting.h" ++#include "base/strings/string_util.h" + + namespace { + +@@ -76,16 +77,26 @@ void CrashUploadListAndroid::RequestSingleUpload(const std::string& local_id) { + Java_MinidumpUploadServiceImpl_tryUploadCrashDumpWithLocalId(env, j_local_id); + } + ++void CrashUploadListAndroid::RequestNewExtraction() { ++ JNIEnv* env = base::android::AttachCurrentThread(); ++ Java_MinidumpUploadServiceImpl_requestNewExtraction(env); ++} ++ + void CrashUploadListAndroid::LoadUnsuccessfulUploadList( + std::vector* uploads) { + const char pending_uploads[] = ".dmp"; + const char skipped_uploads[] = ".skipped"; + const char manually_forced_uploads[] = ".forced"; ++ const char zipped_uploads[] = ".zip"; + + base::FileEnumerator files(upload_log_path().DirName(), false, + base::FileEnumerator::FILES); + for (base::FilePath file = files.Next(); !file.empty(); file = files.Next()) { + UploadList::UploadInfo::State upload_state; ++ if (base::EndsWith(file.value(), zipped_uploads, base::CompareCase::INSENSITIVE_ASCII)) { ++ // skip zip files ++ continue; ++ } + if (file.value().find(manually_forced_uploads) != std::string::npos) { + RecordUnsuccessfulUploadListState(UnsuccessfulUploadListState::FORCED); + upload_state = UploadList::UploadInfo::State::Pending_UserRequested; +@@ -117,6 +128,8 @@ void CrashUploadListAndroid::LoadUnsuccessfulUploadList( + continue; + } + ++ std::string file_path = file.value(); ++ + // Crash reports can have multiple extensions (e.g. foo.dmp, foo.dmp.try1, + // foo.skipped.try0). + file = file.BaseName(); +@@ -136,8 +149,15 @@ void CrashUploadListAndroid::LoadUnsuccessfulUploadList( + RecordUnsuccessfulUploadListState( + UnsuccessfulUploadListState::ADDING_AN_UPLOAD_ENTRY); + id = id.substr(pos + 1); ++ // Since current thread is an IO thread ++ // to avoid failed DCHECK ThreadRestrictions::AssertSingletonAllowed() ++ // remove ui::FormatBytes(): dcheck fail because it use base::FormatDouble() ++ // and LazyInstance::DestructorAtExit(). ++ // also "upload.file_size" is unused. ++ std::u16string file_size_string; + UploadList::UploadInfo upload(id, info.creation_time, upload_state, +- ui::FormatBytes(file_size)); ++ file_size_string); ++ upload.file_path = file_path; + uploads->push_back(upload); + } + } +diff --git a/chrome/browser/crash_upload_list/crash_upload_list_android.h b/chrome/browser/crash_upload_list/crash_upload_list_android.h +--- a/chrome/browser/crash_upload_list/crash_upload_list_android.h ++++ b/chrome/browser/crash_upload_list/crash_upload_list_android.h +@@ -32,6 +32,7 @@ class CrashUploadListAndroid : public TextLogUploadList { + + std::vector LoadUploadList() override; + void RequestSingleUpload(const std::string& local_id) override; ++ void RequestNewExtraction() override; + + private: + void LoadUnsuccessfulUploadList(std::vector* uploads); +diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc +--- a/chrome/browser/net/chrome_network_delegate.cc ++++ b/chrome/browser/net/chrome_network_delegate.cc +@@ -129,6 +129,13 @@ bool IsAccessAllowedAndroid(const base::FilePath& path) { + if (external_storage_path.IsParent(path)) + return true; + ++ // access to the crash folder is allowed for the download by the user ++ base::FilePath cache_dir; ++ base::android::GetCacheDirectory(&cache_dir); ++ base::FilePath upload_log_path = cache_dir.Append("Crash Reports"); ++ if (upload_log_path.IsParent(path)) ++ return true; ++ + std::vector allowlist; + std::vector all_download_dirs = + base::android::GetAllPrivateDownloadsDirectories(); +diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn +--- a/chrome/browser/ui/BUILD.gn ++++ b/chrome/browser/ui/BUILD.gn +@@ -577,6 +577,7 @@ static_library("ui") { + "//third_party/re2", + "//third_party/webrtc_overrides:webrtc_component", + "//third_party/zlib", ++ "//third_party/zlib/google:zip", + "//ui/accessibility", + "//ui/base", + "//ui/base:data_exchange", +diff --git a/chrome/browser/ui/webui/crashes_ui.cc b/chrome/browser/ui/webui/crashes_ui.cc +--- a/chrome/browser/ui/webui/crashes_ui.cc ++++ b/chrome/browser/ui/webui/crashes_ui.cc +@@ -38,6 +38,17 @@ + #include "google_apis/gaia/gaia_auth_util.h" + #include "ui/base/resource/resource_bundle.h" + ++#include "base/logging.h" ++#include "base/debug/dump_without_crashing.h" ++#include "base/files/file_util.h" ++#include "base/files/file_enumerator.h" ++#include "base/files/scoped_temp_dir.h" ++#include "base/task/task_traits.h" ++#include "base/task/thread_pool.h" ++#include "base/android/path_utils.h" ++#include "net/base/filename_util.h" ++#include "third_party/zlib/google/zip.h" ++ + #if BUILDFLAG(IS_CHROMEOS_ASH) + #include "chromeos/dbus/dbus_thread_manager.h" + #include "chromeos/dbus/debug_daemon/debug_daemon_client.h" +@@ -75,6 +86,10 @@ content::WebUIDataSource* CreateCrashesUIHTMLSource() { + return source; + } + ++constexpr base::TaskTraits kLoadingTaskTraits = { ++ base::MayBlock(), base::TaskPriority::USER_BLOCKING, ++ base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}; ++ + //////////////////////////////////////////////////////////////////////////////// + // + // CrashesDOMHandler +@@ -84,7 +99,7 @@ content::WebUIDataSource* CreateCrashesUIHTMLSource() { + // The handler for Javascript messages for the chrome://crashes/ page. + class CrashesDOMHandler : public WebUIMessageHandler { + public: +- CrashesDOMHandler(); ++ CrashesDOMHandler(content::WebContents* web_contents); + ~CrashesDOMHandler() override; + + // WebUIMessageHandler implementation. +@@ -96,6 +111,8 @@ class CrashesDOMHandler : public WebUIMessageHandler { + // Asynchronously fetches the list of crashes. Called from JS. + void HandleRequestCrashes(const base::ListValue* args); + ++ void RequestCrashesList(); ++ + #if BUILDFLAG(IS_CHROMEOS_ASH) + // Asynchronously triggers crash uploading. Called from JS. + void HandleRequestUploads(const base::ListValue* args); +@@ -107,15 +124,28 @@ class CrashesDOMHandler : public WebUIMessageHandler { + // Asynchronously requests a user triggered upload. Called from JS. + void HandleRequestSingleCrashUpload(const base::ListValue* args); + ++ std::string RequestSingleUpload(const std::string& local_id) const; ++ void RequestSingleUploadCallback(const std::string& local_id, const std::string& filename); ++ ++ // Asynchronously requests a user log extraction. Called from JS. ++ void HandleRequestNewExtraction(const base::ListValue* args); ++ void RequestNewExtraction(); ++ ++ // Requests remove all crash files. Called from JS. ++ void HandleRequestClearAll(const base::ListValue* args); ++ void ClearAll(); ++ + scoped_refptr upload_list_; + bool list_available_; + bool first_load_; ++ content::WebContents* web_contents_; + + DISALLOW_COPY_AND_ASSIGN(CrashesDOMHandler); + }; + +-CrashesDOMHandler::CrashesDOMHandler() +- : list_available_(false), first_load_(true) { ++CrashesDOMHandler::CrashesDOMHandler(content::WebContents* web_contents) ++ : list_available_(false), first_load_(true), ++ web_contents_(web_contents) { + upload_list_ = CreateCrashUploadList(); + } + +@@ -142,10 +172,24 @@ void CrashesDOMHandler::RegisterMessages() { + crash_reporter::kCrashesUIRequestSingleCrashUpload, + base::BindRepeating(&CrashesDOMHandler::HandleRequestSingleCrashUpload, + base::Unretained(this))); ++ ++ web_ui()->RegisterMessageCallback( ++ crash_reporter::kCrashesUIHandleClearAll, ++ base::BindRepeating(&CrashesDOMHandler::HandleRequestClearAll, ++ base::Unretained(this))); ++ ++ web_ui()->RegisterMessageCallback( ++ crash_reporter::kCrashesUIHandleRequestNewExtraction, ++ base::BindRepeating(&CrashesDOMHandler::HandleRequestNewExtraction, ++ base::Unretained(this))); + } + + void CrashesDOMHandler::HandleRequestCrashes(const base::ListValue* args) { + AllowJavascript(); ++ RequestCrashesList(); ++} ++ ++void CrashesDOMHandler::RequestCrashesList() { + if (first_load_) { + first_load_ = false; + if (list_available_) +@@ -178,8 +222,7 @@ void CrashesDOMHandler::OnUploadListAvailable() { + } + + void CrashesDOMHandler::UpdateUI() { +- bool crash_reporting_enabled = +- ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled(); ++ bool crash_reporting_enabled = true; + + bool system_crash_reporter = false; + #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS) +@@ -241,12 +284,111 @@ void CrashesDOMHandler::HandleRequestSingleCrashUpload( + bool success = args->GetString(0, &local_id); + DCHECK(success); + +- // Only allow manual uploads if crash uploads aren’t disabled by policy. +- if (!ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled() && +- IsMetricsReportingPolicyManaged()) { +- return; ++ base::ThreadPool::PostTaskAndReplyWithResult( ++ FROM_HERE, kLoadingTaskTraits, ++ base::BindOnce(&CrashesDOMHandler::RequestSingleUpload, base::Unretained(this), local_id), ++ base::BindOnce(&CrashesDOMHandler::RequestSingleUploadCallback, base::Unretained(this), local_id)); ++} ++ ++std::string CrashesDOMHandler::RequestSingleUpload(const std::string& local_id) const { ++ // get crash file path ++ std::string info_file_path = upload_list_->GetFilePathByLocalId(local_id); ++ if (info_file_path.empty()) { ++ LOG(ERROR) << "Crash report: file path is not set for " << local_id; ++ return std::string(); ++ } ++ base::FilePath crash_file_path(info_file_path); ++ ++ // get android crash report dir ++ base::FilePath cache_dir; ++ base::android::GetCacheDirectory(&cache_dir); ++ base::FilePath upload_log_path = cache_dir.Append("Crash Reports"); ++ ++ // crash reports can have multiple extensions (e.g. foo.dmp, foo.dmp.try1, ++ // foo.skipped.try0), remove it ++ base::FilePath zip_file_name = crash_file_path; ++ while (zip_file_name != zip_file_name.RemoveExtension()) ++ zip_file_name = zip_file_name.RemoveExtension(); ++ ++ // make zip file name, like "ec708a7b-cb17-44e7-8dae-e32f6c45cb8c.zip" ++ zip_file_name = upload_log_path.Append(zip_file_name.BaseName()) ++ .AddExtensionASCII(".zip"); ++ // since the download is always allowed, the generation takes place only ++ // at the first request, so if exists return it ++ if (base::PathExists(zip_file_name)) ++ return zip_file_name.value(); ++ ++ // original code remove the file immediately after upload. ++ // we changed this behavior but it is still possible that the file no longer exists ++ // because in uploads.log it could be indicated but the file was deleted by self-cleaning ++ if (!base::PathExists(crash_file_path)) { ++ LOG(ERROR) << "Crash report: file " << crash_file_path ++ << " no more available"; ++ return std::string(); ++ } ++ ++ std::vector files_list; ++ files_list.push_back(crash_file_path.BaseName()); ++ ++ // open zip file ++ base::File zip_f(zip_file_name, ++ base::File::FLAG_CREATE | base::File::FLAG_WRITE); ++ auto result = zip::ZipFiles(crash_file_path.DirName(), files_list, zip_f.GetPlatformFile()); ++ zip_f.Close(); ++ if (result) { ++ return zip_file_name.value(); ++ } ++ ++ LOG(ERROR) << "Crash report: cannot create zip content"; ++ return std::string(); ++} ++ ++void CrashesDOMHandler::RequestSingleUploadCallback(const std::string& local_id, ++ const std::string& file_name) { ++ if (!file_name.empty()) { ++ upload_list_->RequestSingleUploadAsync(local_id); ++ ++ base::FilePath file_path(file_name); ++ web_contents_->GetController().LoadURL( ++ net::FilePathToFileURL(file_path), {}, {}, {}); ++ } ++} ++ ++void CrashesDOMHandler::HandleRequestNewExtraction( ++ const base::ListValue* args) { ++ base::ThreadPool::PostTask( ++ FROM_HERE, kLoadingTaskTraits, ++ base::BindOnce(&CrashesDOMHandler::RequestNewExtraction, base::Unretained(this))); ++} ++ ++void CrashesDOMHandler::RequestNewExtraction() { ++ base::debug::DumpWithoutCrashing(); ++ // ask java to get file from crashpad and to add logcat ++ upload_list_->RequestNewExtraction(); ++} ++ ++void CrashesDOMHandler::HandleRequestClearAll( ++ const base::ListValue* args) { ++ base::ThreadPool::PostTaskAndReply( ++ FROM_HERE, kLoadingTaskTraits, ++ base::BindOnce(&CrashesDOMHandler::ClearAll, base::Unretained(this)), ++ base::BindOnce(&CrashesDOMHandler::RequestCrashesList, base::Unretained(this))); ++} ++ ++void CrashesDOMHandler::ClearAll() { ++ // get android crash report dir ++ base::FilePath cache_dir; ++ base::android::GetCacheDirectory(&cache_dir); ++ base::FilePath upload_log_path = cache_dir.Append("Crash Reports"); ++ ++ base::FileEnumerator dir_enum( ++ upload_log_path, ++ /*recursive=*/false, base::FileEnumerator::FILES); ++ base::FilePath full_name; ++ while (full_name = dir_enum.Next(), !full_name.empty()) { ++ // remove all files, don't care for result ++ base::DeleteFile(full_name); + } +- upload_list_->RequestSingleUploadAsync(local_id); + } + + } // namespace +@@ -258,7 +400,8 @@ void CrashesDOMHandler::HandleRequestSingleCrashUpload( + /////////////////////////////////////////////////////////////////////////////// + + CrashesUI::CrashesUI(content::WebUI* web_ui) : WebUIController(web_ui) { +- web_ui->AddMessageHandler(std::make_unique()); ++ web_ui->AddMessageHandler(std::make_unique( ++ web_ui->GetWebContents())); + + // Set up the chrome://crashes/ source. + Profile* profile = Profile::FromWebUI(web_ui); +diff --git a/components/crash/core/browser/crashes_ui_util.cc b/components/crash/core/browser/crashes_ui_util.cc +--- a/components/crash/core/browser/crashes_ui_util.cc ++++ b/components/crash/core/browser/crashes_ui_util.cc +@@ -39,6 +39,8 @@ const CrashesUILocalizedString kCrashesUILocalizedStrings[] = { + {"uploadId", IDS_CRASH_REPORT_UPLOADED_ID}, + {"uploadNowLinkText", IDS_CRASH_UPLOAD_NOW_LINK_TEXT}, + {"uploadTime", IDS_CRASH_REPORT_UPLOADED_TIME}, ++ {"clearAll", IDS_CRASH_CLEAR_ALL_TEXT}, ++ {"extractNow", IDS_CRASH_EXTRACT_NOW_TEXT}, + }; + + const size_t kCrashesUILocalizedStringsCount = +@@ -52,6 +54,8 @@ const char kCrashesUIRequestCrashUpload[] = "requestCrashUpload"; + const char kCrashesUIShortProductName[] = "shortProductName"; + const char kCrashesUIUpdateCrashList[] = "update-crash-list"; + const char kCrashesUIRequestSingleCrashUpload[] = "requestSingleCrashUpload"; ++const char kCrashesUIHandleClearAll[] = "requestClearAll"; ++const char kCrashesUIHandleRequestNewExtraction[] = "requestNewExtraction"; + + std::string UploadInfoStateAsString(UploadList::UploadInfo::State state) { + switch (state) { +diff --git a/components/crash/core/browser/crashes_ui_util.h b/components/crash/core/browser/crashes_ui_util.h +--- a/components/crash/core/browser/crashes_ui_util.h ++++ b/components/crash/core/browser/crashes_ui_util.h +@@ -36,6 +36,8 @@ extern const char kCrashesUIRequestCrashUpload[]; + extern const char kCrashesUIShortProductName[]; + extern const char kCrashesUIUpdateCrashList[]; + extern const char kCrashesUIRequestSingleCrashUpload[]; ++extern const char kCrashesUIHandleClearAll[]; ++extern const char kCrashesUIHandleRequestNewExtraction[]; + + // Converts and appends the most recent uploads to |out_value|. + void UploadListToValue(UploadList* upload_list, base::ListValue* out_value); +diff --git a/components/crash/core/browser/resources/crashes.css b/components/crash/core/browser/resources/crashes.css +--- a/components/crash/core/browser/resources/crashes.css ++++ b/components/crash/core/browser/resources/crashes.css +@@ -3,7 +3,9 @@ + * found in the LICENSE file. */ + + body { +- margin: 20px; ++ margin: 0; ++ padding: 1em; ++ font-size: 100%; + } + + h1 { +@@ -27,7 +29,6 @@ html[dir=rtl] h1 { + background-color: rgb(235, 239, 250); + border: 1px solid #bbb; + border-radius: 2px; +- display: flex; + font-size: 100%; + padding: 4px; + } +@@ -80,3 +81,65 @@ html[dir=rtl] h1 { + .not-uploaded { + color: #a0a0a0; + } ++ ++label { ++ float: right; ++} ++ ++#countBanner > div { ++ display: flex; ++ justify-content: flex-end; ++ margin-top: 10px; ++} ++ ++.spinner { ++ width: 50px; ++ height: 40px; ++ text-align: center; ++ font-size: 10px; ++} ++ ++.spinner > div { ++ background-color: #333; ++ height: 100%; ++ width: 6px; ++ display: inline-block; ++ ++ -webkit-animation: sk-stretchdelay 1.2s infinite ease-in-out; ++ animation: sk-stretchdelay 1.2s infinite ease-in-out; ++} ++ ++.spinner .rect2 { ++ -webkit-animation-delay: -1.1s; ++ animation-delay: -1.1s; ++} ++ ++.spinner .rect3 { ++ -webkit-animation-delay: -1.0s; ++ animation-delay: -1.0s; ++} ++ ++.spinner .rect4 { ++ -webkit-animation-delay: -0.9s; ++ animation-delay: -0.9s; ++} ++ ++.spinner .rect5 { ++ -webkit-animation-delay: -0.8s; ++ animation-delay: -0.8s; ++} ++ ++@-webkit-keyframes sk-stretchdelay { ++ 0%, 40%, 100% { -webkit-transform: scaleY(0.4) } ++ 20% { -webkit-transform: scaleY(1.0) } ++} ++ ++@keyframes sk-stretchdelay { ++ 0%, 40%, 100% { ++ transform: scaleY(0.4); ++ -webkit-transform: scaleY(0.4); ++ } 20% { ++ transform: scaleY(1.0); ++ -webkit-transform: scaleY(1.0); ++ } ++} +diff --git a/components/crash/core/browser/resources/crashes.html b/components/crash/core/browser/resources/crashes.html +--- a/components/crash/core/browser/resources/crashes.html ++++ b/components/crash/core/browser/resources/crashes.html +@@ -1,6 +1,7 @@ + + + ++ + + + +@@ -39,6 +40,22 @@ + + $i18n{showDeveloperDetails} + ++

++
++ ++ ++ ++
+ + +
+diff --git a/components/crash/core/browser/resources/crashes.js b/components/crash/core/browser/resources/crashes.js +--- a/components/crash/core/browser/resources/crashes.js ++++ b/components/crash/core/browser/resources/crashes.js +@@ -49,6 +49,7 @@ function updateCrashList({ + + $('disabledMode').hidden = enabled; + $('crashUploadStatus').hidden = !enabled || !dynamicBackend; ++ $('spinner').hidden = true; + + const template = crashList.getElementsByTagName('template')[0]; + +@@ -115,22 +116,16 @@ function updateCrashList({ + + uploadTime.querySelector('.value').textContent = crash.upload_time; + +- sendNowButton.remove(); +- fileBugButton.onclick = () => fileBug(crash.id, os, version); ++ fileBugButton.remove(); + } else { + uploadId.remove(); + uploadTime.remove(); + fileBugButton.remove(); +- // Do not allow crash submission if the Chromium build does not support +- // it, or if the user already requested it. +- if (!manualUploads || crash.state === 'pending_user_requested') { +- sendNowButton.remove(); +- } +- sendNowButton.onclick = (e) => { +- e.target.disabled = true; +- chrome.send('requestSingleCrashUpload', [crash.local_id]); +- }; + } ++ sendNowButton.onclick = (e) => { ++ e.target.disabled = true; ++ chrome.send('requestSingleCrashUpload', [crash.local_id]); ++ }; + + const fileSize = crashRow.querySelector('.file-size'); + if (crash.file_size === '') { +@@ -201,6 +196,27 @@ function requestCrashUpload() { + refreshCrashListId = setTimeout(requestCrashes, 5000); + } + ++/** ++ * Request new log extraction. ++ */ ++ function requestNewExtraction() { ++ chrome.send('requestNewExtraction'); ++ ++ // show spinner ++ $('spinner').hidden = false; ++ ++ // Trigger a refresh in 3 seconds. Clear any previous requests. ++ clearTimeout(refreshCrashListId); ++ refreshCrashListId = setTimeout(requestCrashes, 3000); ++} ++ ++/** ++ * Request remove all crash files. ++ */ ++ function requestClearAll() { ++ chrome.send('requestClearAll'); ++} ++ + /** + * Toggles hiding/showing the developer details of a crash report, depending + * on the value of the check box. +@@ -214,5 +230,7 @@ document.addEventListener('DOMContentLoaded', function() { + addWebUIListener('update-crash-list', updateCrashList); + $('uploadCrashes').onclick = requestCrashUpload; + $('showDevDetails').onclick = toggleDevDetails; ++ $('clearAll').onclick = requestClearAll; ++ $('newExtraction').onclick = requestNewExtraction; + requestCrashes(); + }); +diff --git a/components/crash_strings.grdp b/components/crash_strings.grdp +--- a/components/crash_strings.grdp ++++ b/components/crash_strings.grdp +@@ -19,22 +19,22 @@ + Status: + + +- Not uploaded ++ Not saved + + +- Not yet uploaded, or ignored ++ Not yet saved, or ignored + + +- Upload requested by user ++ Save requested by user + + +- Uploaded ++ Saved + + +- Uploaded Crash Report ID: ++ Saved Crash Report File: + + +- Upload Time: ++ Saved Time: + + + Local Crash Context: +@@ -53,9 +53,15 @@ + Crash reporting is disabled. + + +- Start uploading crashes ++ Start saving crashes + + +- Send now ++ Save now ++ ++ ++ Clear all ++ ++ ++ Generate report + + +diff --git a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/CrashFileManager.java b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/CrashFileManager.java +--- a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/CrashFileManager.java ++++ b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/CrashFileManager.java +@@ -107,6 +107,8 @@ public class CrashFileManager { + + private static final Pattern TMP_PATTERN = Pattern.compile("\\.tmp\\z"); + ++ private static final String SAVED_MINIDUMP_ZIP_SUFFIX = ".zip"; ++ + // The maximum number of non-uploaded crashes that may be kept in the crash reports directory. + // Chosen to attempt to balance between keeping a generous number of crashes, and not using up + // too much filesystem storage space for obsolete crash reports. +@@ -116,7 +118,7 @@ public class CrashFileManager { + // The maximum age, in days, considered acceptable for a crash report. Reports older than this + // age will be removed. The constant is chosen to be quite conservative, while still allowing + // users to eventually reclaim filesystem storage space from obsolete crash reports. +- private static final int MAX_CRASH_REPORT_AGE_IN_DAYS = 30; ++ private static final int MAX_CRASH_REPORT_AGE_IN_DAYS = 5; + + // The maximum number of non-uploaded crashes to copy to the crash reports directory. The + // difference between this value and MAX_CRASH_REPORTS_TO_KEEP is that TO_KEEP is only checked +@@ -586,6 +588,9 @@ public class CrashFileManager { + && !f.getName().contains(UPLOAD_FORCED_MINIDUMP_SUFFIX)) { + continue; + } ++ // as above, zip files must also be excluded ++ if (f.getName().endsWith(SAVED_MINIDUMP_ZIP_SUFFIX)) ++ continue; + + String filenameSansExtension = f.getName().split("\\.")[0]; + if (filenameSansExtension.endsWith(localId)) { +diff --git a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploadCallable.java b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploadCallable.java +--- a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploadCallable.java ++++ b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploadCallable.java +@@ -63,26 +63,8 @@ public class MinidumpUploadCallable implements Callable { + if (mPermManager.isUploadEnabledForTests()) { + Log.i(TAG, "Minidump upload enabled for tests, skipping other checks."); + } else if (!CrashFileManager.isForcedUpload(mFileToUpload)) { +- if (!mPermManager.isUsageAndCrashReportingPermittedByUser()) { +- Log.i(TAG, "Minidump upload is not permitted by user. Marking file as skipped for " +- + "cleanup to prevent future uploads."); +- CrashFileManager.markUploadSkipped(mFileToUpload); +- return MinidumpUploadStatus.USER_DISABLED; +- } +- +- if (!mPermManager.isClientInMetricsSample()) { +- Log.i(TAG, "Minidump upload skipped due to sampling. Marking file as skipped for " +- + "cleanup to prevent future uploads."); +- CrashFileManager.markUploadSkipped(mFileToUpload); +- return MinidumpUploadStatus.DISABLED_BY_SAMPLING; +- } +- +- if (!mPermManager.isNetworkAvailableForCrashUploads()) { +- Log.i(TAG, "Minidump cannot currently be uploaded due to network constraints."); +- return MinidumpUploadStatus.FAILURE; +- } ++ return MinidumpUploadStatus.USER_DISABLED; + } +- + MinidumpUploader.Result result = mMinidumpUploader.upload(mFileToUpload); + if (result.isSuccess()) { + String uploadId = result.message(); +diff --git a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploader.java b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploader.java +--- a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploader.java ++++ b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/MinidumpUploader.java +@@ -120,31 +120,10 @@ public class MinidumpUploader { + if (fileToUpload == null || !fileToUpload.exists()) { + return Result.failure("Crash report does not exist"); + } +- HttpURLConnection connection = +- mHttpURLConnectionFactory.createHttpURLConnection(CRASH_URL_STRING); +- if (connection == null) { +- return Result.failure("Failed to create connection"); +- } +- configureConnectionForHttpPost(connection, readBoundary(fileToUpload)); +- +- try (InputStream minidumpInputStream = new FileInputStream(fileToUpload); +- OutputStream requestBodyStream = +- new GZIPOutputStream(connection.getOutputStream())) { +- streamCopy(minidumpInputStream, requestBodyStream); +- int responseCode = connection.getResponseCode(); +- if (isSuccessful(responseCode)) { +- // The crash server returns the crash ID in the response body. +- String responseContent = getResponseContentAsString(connection); +- String uploadId = responseContent != null ? responseContent : "unknown"; +- return Result.success(uploadId); +- } else { +- // Return the remote error code and message. +- return Result.uploadError(responseCode, connection.getResponseMessage()); +- } +- } finally { +- connection.disconnect(); +- } +- } catch (IOException | RuntimeException e) { ++ // for us, it's always good ++ // returns the file name without path, which will be registered as local_id ++ return Result.success(fileToUpload.getName()); ++ } catch (RuntimeException e) { + return Result.failure(e.toString()); + } + } +diff --git a/components/upload_list/text_log_upload_list.cc b/components/upload_list/text_log_upload_list.cc +--- a/components/upload_list/text_log_upload_list.cc ++++ b/components/upload_list/text_log_upload_list.cc +@@ -108,6 +108,7 @@ std::unique_ptr TryParseCsvLogEntry( + } + auto info = std::make_unique(components[1], + upload_time); ++ info->file_path = components[1]; + + // Add local ID if present. + if (components.size() > 2) +diff --git a/components/upload_list/upload_list.cc b/components/upload_list/upload_list.cc +--- a/components/upload_list/upload_list.cc ++++ b/components/upload_list/upload_list.cc +@@ -55,7 +55,8 @@ UploadList::UploadInfo::UploadInfo(const UploadInfo& upload_info) + capture_time(upload_info.capture_time), + state(upload_info.state), + source(upload_info.source), +- file_size(upload_info.file_size) {} ++ file_size(upload_info.file_size), ++ file_path(upload_info.file_path) {} + + UploadList::UploadInfo::~UploadInfo() = default; + +@@ -108,6 +109,11 @@ void UploadList::RequestSingleUpload(const std::string& local_id) { + NOTREACHED(); + } + ++void UploadList::RequestNewExtraction() { ++ // only available for Android. overrided in crash_upload_list_android.cc ++ NOTREACHED(); ++} ++ + void UploadList::OnLoadComplete(const std::vector& uploads) { + uploads_ = uploads; + if (!load_callback_.is_null()) +@@ -118,3 +124,12 @@ void UploadList::OnClearComplete() { + if (!clear_callback_.is_null()) + std::move(clear_callback_).Run(); + } ++ ++std::string UploadList::GetFilePathByLocalId(const std::string& local_id) { ++ for (auto info : uploads_) { ++ if (info.local_id == local_id) { ++ return info.file_path; ++ } ++ } ++ return std::string(); ++} +diff --git a/components/upload_list/upload_list.h b/components/upload_list/upload_list.h +--- a/components/upload_list/upload_list.h ++++ b/components/upload_list/upload_list.h +@@ -66,6 +66,9 @@ class UploadList : public base::RefCountedThreadSafe { + + // Formatted file size for locally stored data. + std::u16string file_size; ++ ++ // path of crash file ++ std::string file_path; + }; + + UploadList(); +@@ -92,6 +95,12 @@ class UploadList : public base::RefCountedThreadSafe { + // Must be called only after a Load() callback has been received. + void GetUploads(size_t max_count, std::vector* uploads); + ++ // Get full path of crash file for local_id ++ std::string GetFilePathByLocalId(const std::string& local_id); ++ ++ // Request new log extraction ++ virtual void RequestNewExtraction(); ++ + protected: + virtual ~UploadList(); + +-- +2.17.1 + diff --git a/build/patches/Modify-default-preferences.patch b/build/patches/Modify-default-preferences.patch index 97abcf48..05c26ab2 100644 --- a/build/patches/Modify-default-preferences.patch +++ b/build/patches/Modify-default-preferences.patch @@ -121,7 +121,7 @@ diff --git a/chrome/service/cloud_print/connector_settings.cc b/chrome/service/c diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc --- a/components/autofill/core/browser/autofill_manager.cc +++ b/components/autofill/core/browser/autofill_manager.cc -@@ -974,10 +974,7 @@ void AutofillManager::OnQueryFormFieldAutofillImpl( +@@ -973,10 +973,7 @@ void AutofillManager::OnQueryFormFieldAutofillImpl( // suggestions available. // TODO(mathp): Differentiate between number of suggestions available // (current metric) and number shown to the user. @@ -133,7 +133,7 @@ diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/a } } -@@ -1552,8 +1549,8 @@ void AutofillManager::Reset() { +@@ -1551,8 +1548,8 @@ void AutofillManager::Reset() { credit_card_access_manager_ = std::make_unique( driver(), client(), personal_data_, credit_card_form_event_logger_.get()); diff --git a/build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch b/build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch index 6c0898f4..a3fc4be5 100644 --- a/build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch +++ b/build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch @@ -9,15 +9,15 @@ Subject: Offer builtin autocomplete for chrome://flags diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc -@@ -350,6 +350,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() { - #endif - builtins_to_provide.push_back( - base::ASCIIToUTF16(chrome::kChromeUIVersionURL)); +@@ -342,6 +342,8 @@ std::vector ChromeAutocompleteProviderClient::GetBuiltinURLs() { + std::vector + ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() { + std::vector builtins_to_provide; + builtins_to_provide.push_back( + base::ASCIIToUTF16(chrome::kChromeUIFlagsURL)); - return builtins_to_provide; - } - + builtins_to_provide.push_back( + base::ASCIIToUTF16(chrome::kChromeUIChromeURLsURL)); + #if !defined(OS_ANDROID) -- 2.17.1 diff --git a/build/patches/Remove-signin-and-data-saver-integrations.patch b/build/patches/Remove-signin-and-data-saver-integrations.patch index 998d3931..68ed783e 100644 --- a/build/patches/Remove-signin-and-data-saver-integrations.patch +++ b/build/patches/Remove-signin-and-data-saver-integrations.patch @@ -532,7 +532,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java b diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -88,7 +88,6 @@ import org.chromium.chrome.browser.download.DownloadUtils; +@@ -87,7 +87,6 @@ import org.chromium.chrome.browser.download.DownloadUtils; import org.chromium.chrome.browser.feature_engagement.TrackerFactory; import org.chromium.chrome.browser.feed.v2.FeedStreamSurface; import org.chromium.chrome.browser.feed.webfeed.WebFeedBridge; @@ -540,7 +540,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.flags.ActivityType; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; -@@ -102,7 +101,6 @@ import org.chromium.chrome.browser.incognito.IncognitoTabLauncher; +@@ -101,7 +100,6 @@ import org.chromium.chrome.browser.incognito.IncognitoTabLauncher; import org.chromium.chrome.browser.incognito.IncognitoTabSnapshotController; import org.chromium.chrome.browser.incognito.IncognitoUtils; import org.chromium.chrome.browser.infobar.DataReductionPromoInfoBar; @@ -548,7 +548,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.layouts.LayoutStateProvider; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.locale.LocaleManager; -@@ -603,7 +601,6 @@ public class ChromeTabbedActivity extends ChromeActivity正在建立安全连接... 您需要开启 Chrome 同步才能使用 Wi-Fi 同步功能。了解详情 检查(&N) diff --git a/build/patches/User-agent-customization.patch b/build/patches/User-agent-customization.patch index 9d14579d..da3187fc 100644 --- a/build/patches/User-agent-customization.patch +++ b/build/patches/User-agent-customization.patch @@ -70,7 +70,7 @@ diff --git a/base/base_switches.h b/base/base_switches.h 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 -@@ -919,4 +919,6 @@ chrome_java_resources = [ +@@ -920,4 +920,6 @@ chrome_java_resources = [ "java/res/xml/search_widget_info.xml", "java/res/xml/sync_and_services_preferences.xml", "java/res/xml/tracing_preferences.xml", @@ -866,7 +866,7 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -957,6 +957,9 @@ public final class ChromePreferenceKeys { +@@ -960,6 +960,9 @@ public final class ChromePreferenceKeys { public static final KeyPrefix KEY_ZERO_SUGGEST_HEADER_GROUP_COLLAPSED_BY_DEFAULT_PREFIX = new KeyPrefix("zero_suggest_header_group_collapsed_by_default*"); @@ -876,7 +876,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro /** * These values are currently used as SharedPreferences keys, along with the keys in * {@link LegacyChromePreferenceKeys#getKeysInUse()}. Add new SharedPreferences keys -@@ -1045,7 +1048,9 @@ public final class ChromePreferenceKeys { +@@ -1049,7 +1052,9 @@ public final class ChromePreferenceKeys { SETTINGS_SAFETY_CHECK_RUN_COUNTER, SIGNIN_PROMO_IMPRESSIONS_COUNT_NTP, TWA_DISCLOSURE_SEEN_PACKAGES, diff --git a/build/patches/build-remove-calling-untrusted-hooks.patch b/build/patches/build-remove-calling-untrusted-hooks.patch index 4f9be88b..f28e9f21 100644 --- a/build/patches/build-remove-calling-untrusted-hooks.patch +++ b/build/patches/build-remove-calling-untrusted-hooks.patch @@ -11,7 +11,7 @@ sysroot. diff --git a/DEPS b/DEPS --- a/DEPS +++ b/DEPS -@@ -99,7 +99,7 @@ vars = { +@@ -100,7 +100,7 @@ vars = { # Check out and download nacl by default, unless on an arm mac. # This can be disabled e.g. with custom_vars. @@ -20,7 +20,7 @@ diff --git a/DEPS b/DEPS # By default, do not check out src-internal. This can be overridden e.g. with # custom_vars. -@@ -130,8 +130,8 @@ vars = { +@@ -131,8 +131,8 @@ vars = { # support for other platforms may be added in the future. 'checkout_openxr' : 'checkout_win', @@ -31,7 +31,7 @@ diff --git a/DEPS b/DEPS # By default bot checkouts the WPR archive files only when this # flag is set True. -@@ -3636,49 +3636,6 @@ hooks = [ +@@ -3644,49 +3644,6 @@ hooks = [ 'sync', '--extract', ], }, @@ -81,7 +81,7 @@ diff --git a/DEPS b/DEPS { # Case-insensitivity for the Win SDK. Must run before win_toolchain below. 'name': 'ciopfs_linux', -@@ -3821,18 +3778,6 @@ hooks = [ +@@ -3829,18 +3786,6 @@ hooks = [ '-s', 'src/buildtools/mac/clang-format.sha1', ], }, @@ -100,7 +100,7 @@ diff --git a/DEPS b/DEPS # Pull rc binaries using checked-in hashes. { 'name': 'rc_win', -@@ -3858,29 +3803,6 @@ hooks = [ +@@ -3866,29 +3811,6 @@ hooks = [ '-s', 'src/build/toolchain/win/rc/mac/rc.sha1', ], },