Compare commits

...
Author SHA1 Message Date
Carmelo Messina 09fd705651 Bump to 125.0.6422.150 2024-05-30 16:22:30 +02:00
uazoandGitHub eae1582b1c [AUTO][DOC] Generate patches doc for master branch (#1170)
[AUTO][DOC] Generate patches doc for master branch
2024-05-30 08:47:00 -04:00
uazoandGitHub 9aed12ac5a [AUTO][DOC] Generate patches doc for master branch 2024-05-30 12:41:47 +00:00
Carmelo Messina e46f4a3ce3 Media fingerprinting mitigations: #862 removes the ability to understand the capabilities of the video card in windows. 2024-05-30 14:41:17 +02:00
Carmelo Messina 494445558a Content settings infrastructure: #1119 Fix radio group display value 2024-05-30 14:37:20 +02:00
uazoandGitHub 160843fd10 [AUTO] Patches auto-rebase for master branch (#1167)
[AUTO] Patches auto-rebase for master branch
2024-05-29 08:03:00 -08:00
uazoandGitHub 7eaed0f05d [AUTO] Patches auto-rebase 2024-05-29 15:58:51 +00:00
uazoandGitHub 378a847e3c [AUTO][DOC] Generate patches doc for master branch (#1166)
[AUTO][DOC] Generate patches doc for master branch
2024-05-29 07:58:10 -08:00
uazoandGitHub fb6642d4ec [AUTO][DOC] Generate patches doc for master branch 2024-05-29 15:56:52 +00:00
Carmelo Messina 054b9d28c0 Update patches list
Added:
Enable-Global-Privacy-Control.patch
Enable-Do-Not-Track-by-default.patch
2024-05-29 17:56:25 +02:00
Carmelo Messina 547f3a53db Enable Do-Not-Track by default 2024-05-29 17:55:31 +02:00
Carmelo Messina 6434bfaeae Enable Global Privacy Control: #219 Enable GPC by default 2024-05-29 17:55:00 +02:00
Carmelo Messina 4c39a5117e Change popup site setting: #1158 enable BlockTabUnders flag 2024-05-29 17:53:05 +02:00
Carmelo Messina f128cf407a Use list mode for tab switcher: #707 Can't open a new tab or open hamburger menu 2024-05-29 17:51:54 +02:00
Carmelo Messina 58c965d169 Customize selection popup: #439 open image in new tab in Group 2024-05-29 17:50:11 +02:00
Carmelo Messina 9e6ed37ef4 Move navigation bar to bottom: #761 #678 attempt to solve ui issues 2024-05-29 17:49:02 +02:00
Carmelo Messina d53bfc2598 JIT site settings: #1160 Disable webassembly when jit is not enabled 2024-05-29 17:48:11 +02:00
uazoandGitHub b965da1724 [AUTO][DOC] Generate patches doc (#1151)
[AUTO][DOC] Generate patches doc
2024-05-25 14:27:03 +03:00
uazoandGitHub b83689ef2e [AUTO][FILECONTROL] - version 125.0.6422.113 (#1141)
[AUTO][FILECONTROL] - version 125.0.6422.113
2024-05-25 14:26:35 +03:00
uazoandGitHub e07575f25c [AUTO][DOC] Generate patches doc for master branch 2024-05-25 11:25:52 +00:00
uazoandGitHub 5405cf4770 [AUTO] Patches auto-rebase
[AUTO] Patches auto-rebase for bd850c862f
2024-05-25 14:25:33 +03:00
uazoandGitHub 85b34148a4 [AUTO] Patches auto-rebase 2024-05-25 11:23:48 +00:00
Carmelo Messina bd850c862f Bump to 125.0.6422.113 2024-05-25 13:17:22 +02:00
Carmelo Messina 7809a7f31c Enable menu on reload button: #1147 Add reload options on right clicking refresh button 2024-05-25 13:17:01 +02:00
Carmelo Messina 2811f2279f JIT site settings: modified for uniformity the active and inactive descriptions 2024-05-25 13:12:27 +02:00
Carmelo Messina e08c144f4e Content settings infrastructure: fix the value used as a summary of the category 2024-05-25 13:11:02 +02:00
Carmelo Messina b28092bf50 Cromite build utils: useless log removed 2024-05-25 13:09:32 +02:00
Carmelo Messina 19976aa998 Customize selection popup: #794 Open Links In Current Tab Group
If the option ‘Opens tabs in foreground’ is activated, it opens pop-ups in a new tab in the same group
2024-05-25 13:08:52 +02:00
Carmelo Messina 82789a4bd0 User agent customization: #222 separate the flag from the site setting
the menu item in the hamburger menu applies to the tab only, whereas the content setting is intended for use in a specific site.
2024-05-25 13:06:29 +02:00
uazoandGitHub 3e47fcf446 [AUTO][FILECONTROL] - version 125.0.6422.113 2024-05-24 02:38:42 +00:00
24 changed files with 1460 additions and 290 deletions
+1 -1
View File
@@ -1 +1 @@
125.0.6422.76
125.0.6422.150
+4
View File
@@ -289,6 +289,10 @@ Allow-building-without-supervised-users.patch
Keep-ComputePressure-disabled.patch
Android-Toolbar-Scroll-Ablation-setting.patch
Keep-disabled-WebViewMediaIntegrityApi.patch
Enable-menu-on-reload-button.patch
Enable-Global-Privacy-Control.patch
Enable-Do-Not-Track-by-default.patch
Media-fingerprinting-mitigations.patch
Temp-PerformanceNavigationTiming-privacy-fix.patch
Temp-disable-predictive-back-gesture.patch
@@ -208,7 +208,7 @@ diff --git a/chrome/browser/tab_ui/android/java/src/org/chromium/chrome/browser/
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
@@ -5436,6 +5436,14 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
@@ -5427,6 +5427,14 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
Your <ph name="FQDN">%1$s<ex>www.amazon.com</ex></ph> timer ran out. It'll start again tomorrow.
</message>
@@ -513,7 +513,7 @@ diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_
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
@@ -1481,6 +1481,9 @@ Your Google account may have other forms of browsing history like searches and a
@@ -1472,6 +1472,9 @@ Your Google account may have other forms of browsing history like searches and a
<message name="IDS_ANDROID_APP_HISTORY_OPEN_FULL_OTHER_FORMS" desc="The informational message at the top of the history page letting users know that app-specific history may be missing some entries, followed by the info on the other forms of browing history.">
Some of your web history might not show up here. If needed, tap Open full Chrome history. Also, Your Google Account may have other forms of browsing history at <ph name="BEGIN_LINK">&lt;link&gt;</ph>myactivity.google.com<ph name="END_LINK">&lt;/link&gt;</ph>.
</message>
@@ -234,7 +234,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
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
@@ -1692,6 +1692,12 @@ Your Google account may have other forms of browsing history like searches and a
@@ -1683,6 +1683,12 @@ Your Google account may have other forms of browsing history like searches and a
<message name="IDS_DISABLE_TOOLBAR_SWIPE_UP" desc="Summary of the preference that allows the user to disable toolbar swipeup.">
Disable toolbar swipe up
</message>
@@ -247,7 +247,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
<!-- Safety check -->
<message name="IDS_PREFS_SAFETY_CHECK" desc="Title of the Safety check element in settings, allowing the user to check multiple areas of browser safety. [CHAR_LIMIT=32]">
@@ -2871,6 +2877,9 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
@@ -2862,6 +2868,9 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
<message name="IDS_CONTEXTMENU_OPEN_IN_NEW_CHROME_TAB" desc="Context sensitive menu item to open the selected link in a new Chrome tab from Chrome Custom Tab. [CHAR_LIMIT=30]">
Open in new Chrome tab
</message>
+13 -1
View File
@@ -6,6 +6,7 @@ In site settings added ability to block all popups per site
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../tab_under_navigation_throttle.cc | 1 +
.../android/popup_blocked_message_delegate.cc | 20 +++-
.../android/popup_blocked_message_delegate.h | 1 +
components/blocked_content/popup_blocker.cc | 3 +
@@ -14,11 +15,22 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../bromite_content_settings/popups.grdp | 12 ++
.../bromite_content_settings/popups.inc | 8 ++
.../core/browser/content_settings_registry.cc | 2 +-
8 files changed, 152 insertions(+), 3 deletions(-)
9 files changed, 153 insertions(+), 3 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromitePopupContentSetting.java
create mode 100644 components/browser_ui/strings/bromite_content_settings/popups.grdp
create mode 100644 components/content_settings/core/browser/bromite_content_settings/popups.inc
diff --git a/chrome/browser/ui/blocked_content/tab_under_navigation_throttle.cc b/chrome/browser/ui/blocked_content/tab_under_navigation_throttle.cc
--- a/chrome/browser/ui/blocked_content/tab_under_navigation_throttle.cc
+++ b/chrome/browser/ui/blocked_content/tab_under_navigation_throttle.cc
@@ -72,6 +72,7 @@ void LogTabUnderAttempt(content::NavigationHandle* handle) {
BASE_FEATURE(kBlockTabUnders,
"BlockTabUnders",
base::FEATURE_DISABLED_BY_DEFAULT);
+SET_CROMITE_FEATURE_ENABLED(kBlockTabUnders);
// static
std::unique_ptr<content::NavigationThrottle>
diff --git a/components/blocked_content/android/popup_blocked_message_delegate.cc b/components/blocked_content/android/popup_blocked_message_delegate.cc
--- a/components/blocked_content/android/popup_blocked_message_delegate.cc
+++ b/components/blocked_content/android/popup_blocked_message_delegate.cc
@@ -17,7 +17,7 @@ Require: bromite-build-utils.patch
.../settings/privacy_page/privacy_page.ts | 77 +++-
chrome/browser/resources/settings/route.ts | 2 +
...settings_category_default_radio_group.html | 12 +
.../settings_category_default_radio_group.ts | 22 +-
.../settings_category_default_radio_group.ts | 23 +-
.../settings/site_settings/site_details.html | 1 +
.../settings/site_settings/site_details.ts | 33 +-
.../site_details_permission.html | 8 +-
@@ -83,7 +83,7 @@ Require: bromite-build-utils.patch
.../platform/web_content_settings_client.h | 9 +
.../execution_context/execution_context.cc | 16 +
.../execution_context/execution_context.h | 5 +
72 files changed, 1865 insertions(+), 95 deletions(-)
72 files changed, 1866 insertions(+), 95 deletions(-)
create mode 100644 components/browser_ui/settings/android/java/res/layout/preference_spinner_single_widget.xml
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
@@ -354,12 +354,13 @@ diff --git a/chrome/browser/resources/settings/site_settings/settings_category_d
this.categoryEnabled_ ? allowOption : ContentSetting.BLOCK);
}
@@ -224,7 +242,9 @@ export class SettingsCategoryDefaultRadioGroupElement extends
@@ -224,7 +242,10 @@ export class SettingsCategoryDefaultRadioGroupElement extends
}
const enabled = this.computeIsSettingEnabled(update.setting);
- const prefValue = enabled ? SiteContentRadioSetting.ENABLED :
+ const ask = this.computeIsSettingAsk(update.setting);
+ const ask = this.computeIsSettingAsk(update.setting)
+ && this.showAskSetting_(this.category);
+ const prefValue = ask ? SiteContentRadioSetting.ASK :
+ enabled ? SiteContentRadioSetting.ENABLED :
SiteContentRadioSetting.DISABLED;
@@ -2491,9 +2492,9 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
+ checked
+ ? ContentSettingsResources.getDefaultEnabledValue(contentType)
+ : ContentSettingsResources.getDefaultDisabledValue(contentType);
+ p.setSummary(
+ ContentSettingsResources.getCategorySummary(
+ defaultForToggle, /* isOneTime= */ false));
+ summary = ContentSettingsResources.getCategorySummary(
+ contentType, defaultForToggle, /* isOneTime= */ false);
+ p.setSummary(summary);
+ }
}
+1 -1
View File
@@ -13214,7 +13214,7 @@ diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.html
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
@@ -2178,7 +2178,7 @@ Your Google account may have other forms of browsing history like searches and a
@@ -2169,7 +2169,7 @@ Your Google account may have other forms of browsing history like searches and a
About Chrome
</message>
<message name="IDS_LEGAL_INFORMATION_SUMMARY" desc="Summary for legal information" meaning="Android">
+46 -1
View File
@@ -9,13 +9,15 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../browser/ChromeActionModeHandler.java | 4 +-
.../chrome/browser/ChromeTabbedActivity.java | 15 +-
...ActivityTabWebContentsDelegateAndroid.java | 10 +-
.../compositor/layouts/LayoutManagerImpl.java | 8 ++
.../tab/TabContextMenuItemDelegate.java | 7 +-
.../chrome/browser/ui/RootUiCoordinator.java | 8 +-
.../Customize-selection-popup.grdp | 34 +++++
.../res/xml/accessibility_preferences.xml | 24 ++++
.../selection/SelectActionMenuHelper.java | 131 ++++++++++++------
.../selection/SmartSelectionClient.java | 4 +
8 files changed, 178 insertions(+), 50 deletions(-)
10 files changed, 193 insertions(+), 52 deletions(-)
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Customize-selection-popup.grdp
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java
@@ -57,6 +59,31 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
Toast.makeText(
ChromeTabbedActivity.this,
R.string.open_in_new_tab_toast,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java b/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java
@@ -191,12 +191,20 @@ public class ActivityTabWebContentsDelegateAndroid extends TabWebContentsDelegat
// Skip opening a new Tab if it doesn't make sense.
if (mTab.isClosing()) return false;
+ int tabLaunchType = TabLaunchType.FROM_LONGPRESS_FOREGROUND;
+ boolean selectionPopupTabsForeground =
+ ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_tabs_foreground", false);
+ if (selectionPopupTabsForeground) {
+ tabLaunchType = TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP;
+ }
+
// Creating new Tabs asynchronously requires starting a new Activity to create the Tab,
// so the Tab returned will always be null. There's no way to know synchronously
// whether the Tab is created, so assume it's always successful.
boolean success =
tabCreator.createTabWithWebContents(
- mTab, webContents, TabLaunchType.FROM_LONGPRESS_FOREGROUND, url);
+ mTab, webContents, tabLaunchType, url);
if (success) {
if (disposition == WindowOpenDisposition.NEW_FOREGROUND_TAB) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
@@ -82,6 +109,24 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo
float lastTapX = LocalizationUtils.isLayoutRtl() ? mHost.getWidth() * mPxToDp : 0.f;
float lastTapY = 0.f;
if (launchType != TabLaunchType.FROM_CHROME_UI) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
@@ -285,8 +285,13 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate {
public void onOpenImageInNewTab(GURL url, Referrer referrer) {
LoadUrlParams loadUrlParams = new LoadUrlParams(url.getSpec());
loadUrlParams.setReferrer(referrer);
+ @TabLaunchType int type = TabLaunchType.FROM_LONGPRESS_BACKGROUND;
+ if (ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_tabs_foreground", false)) {
+ type = TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP;
+ }
mTabModelSelector.openNewTab(
- loadUrlParams, TabLaunchType.FROM_LONGPRESS_BACKGROUND, mTab, isIncognito());
+ loadUrlParams, type, mTab, isIncognito());
}
@Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -0,0 +1,22 @@
From: uazo <uazo@users.noreply.github.com>
Date: Wed, 29 May 2024 13:49:01 +0000
Subject: Enable Do-Not-Track by default
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
components/privacy_sandbox/tracking_protection_prefs.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/privacy_sandbox/tracking_protection_prefs.cc b/components/privacy_sandbox/tracking_protection_prefs.cc
--- a/components/privacy_sandbox/tracking_protection_prefs.cc
+++ b/components/privacy_sandbox/tracking_protection_prefs.cc
@@ -79,7 +79,7 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) {
prefs::kFingerprintingProtectionEnabled, false,
user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
registry->RegisterBooleanPref(
- prefs::kEnableDoNotTrack, false,
+ prefs::kEnableDoNotTrack, true,
user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
registry->RegisterBooleanPref(prefs::kEnableGPC, true);
}
--
@@ -0,0 +1,826 @@
From: uazo <uazo@users.noreply.github.com>
Date: Wed, 29 May 2024 13:43:50 +0000
Subject: Enable Global Privacy Control
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
chrome/android/chrome_java_resources.gni | 1 +
chrome/android/chrome_java_sources.gni | 1 +
.../android/java/res/xml/gpc_preferences.xml | 15 +++
.../java/res/xml/privacy_preferences.xml | 4 +
.../browser/privacy/settings/GpcSettings.java | 34 ++++++
.../privacy/settings/PrivacySettings.java | 9 ++
chrome/app/settings_strings.grdp | 15 +++
.../api/settings_private/prefs_util.cc | 1 +
chrome/browser/renderer_preferences_util.cc | 3 +
chrome/browser/resources/settings/BUILD.gn | 1 +
.../settings/privacy_page/cookies_page.html | 2 +
.../settings/privacy_page/cookies_page.ts | 1 +
.../settings/privacy_page/gpc_toggle.html | 32 +++++
.../settings/privacy_page/gpc_toggle.ts | 112 ++++++++++++++++++
.../Enable-Global-Privacy-Control.grdp | 15 +++
chrome/browser/ui/prefs/pref_watcher.cc | 4 +
chrome/browser/ui/prefs/pref_watcher.h | 1 +
.../settings_localized_strings_provider.cc | 3 +
.../tracking_protection_prefs.cc | 1 +
.../tracking_protection_prefs.h | 2 +
.../tracking_protection_settings.cc | 15 +++
.../tracking_protection_settings.h | 3 +
.../tracking_protection_settings_observer.h | 2 +
.../browser_initiated_resource_request.cc | 6 +
content/renderer/render_frame_impl.cc | 4 +
.../blink/common/loader/loader_constants.cc | 1 +
.../renderer_preferences_mojom_traits.cc | 1 +
.../public/common/loader/loader_constants.h | 1 +
.../renderer_preferences.h | 1 +
.../renderer_preferences_mojom_traits.h | 5 +
.../public/mojom/renderer_preferences.mojom | 2 +
.../renderer/bindings/idl_in_modules.gni | 5 +
.../renderer/core/exported/web_view_impl.cc | 3 +
third_party/blink/renderer/modules/BUILD.gn | 4 +
.../modules/global_privacy_control/BUILD.gn | 8 ++
.../global_privacy_control.cc | 12 ++
.../global_privacy_control.h | 15 +++
.../navigator_global_privacy_control.idl | 6 +
...orker_navigator_global_privacy_control.idl | 6 +
.../web_service_worker_fetch_context_impl.cc | 3 +
...ted_or_shared_worker_fetch_context_impl.cc | 3 +
.../platform/runtime_enabled_features.json5 | 5 +
42 files changed, 368 insertions(+)
create mode 100644 chrome/android/java/res/xml/gpc_preferences.xml
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/GpcSettings.java
create mode 100644 chrome/browser/resources/settings/privacy_page/gpc_toggle.html
create mode 100644 chrome/browser/resources/settings/privacy_page/gpc_toggle.ts
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Enable-Global-Privacy-Control.grdp
create mode 100644 third_party/blink/renderer/modules/global_privacy_control/BUILD.gn
create mode 100644 third_party/blink/renderer/modules/global_privacy_control/global_privacy_control.cc
create mode 100644 third_party/blink/renderer/modules/global_privacy_control/global_privacy_control.h
create mode 100644 third_party/blink/renderer/modules/global_privacy_control/navigator_global_privacy_control.idl
create mode 100644 third_party/blink/renderer/modules/global_privacy_control/worker_navigator_global_privacy_control.idl
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
@@ -640,6 +640,7 @@ chrome_java_resources = [
"java/res/xml/contextual_search_preferences.xml",
"java/res/xml/developer_preferences.xml",
"java/res/xml/do_not_track_preferences.xml",
+ "java/res/xml/gpc_preferences.xml",
"java/res/xml/google_services_preferences.xml",
"java/res/xml/homepage_preferences.xml",
"java/res/xml/legal_information_preferences.xml",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -985,6 +985,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java",
"java/src/org/chromium/chrome/browser/policy/PolicyAuditor.java",
"java/src/org/chromium/chrome/browser/policy/PolicyAuditorBridge.java",
+ "java/src/org/chromium/chrome/browser/privacy/settings/GpcSettings.java",
"java/src/org/chromium/chrome/browser/privacy/settings/DoNotTrackSettings.java",
"java/src/org/chromium/chrome/browser/privacy/settings/IncognitoLockSettings.java",
"java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java",
diff --git a/chrome/android/java/res/xml/gpc_preferences.xml b/chrome/android/java/res/xml/gpc_preferences.xml
new file mode 100644
--- /dev/null
+++ b/chrome/android/java/res/xml/gpc_preferences.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="gpc_switch"
+ android:summaryOn="@string/text_on"
+ android:summaryOff="@string/text_off" />
+
+ <org.chromium.components.browser_ui.settings.TextMessagePreference
+ android:title="@string/gpc_description"
+ app:allowDividerBelow="false" />
+
+</PreferenceScreen>
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
@@ -55,6 +55,10 @@ found in the LICENSE file.
android:key="do_not_track"
android:title="@string/do_not_track_title"
android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings" />
+ <Preference
+ android:key="gpc"
+ android:title="@string/gpc_title"
+ android:fragment="org.chromium.chrome.browser.privacy.settings.GpcSettings" />
<org.chromium.components.browser_ui.settings.ChromeSwitchPreference
android:key="allow_custom_tab_intents"
android:title="@string/allow_custom_tab_intents_title"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/GpcSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/GpcSettings.java
new file mode 100644
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/GpcSettings.java
@@ -0,0 +1,34 @@
+package org.chromium.chrome.browser.privacy.settings;
+
+import android.os.Bundle;
+
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.preferences.Pref;
+import org.chromium.chrome.browser.settings.ChromeBaseSettingsFragment;
+import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
+import org.chromium.components.browser_ui.settings.SettingsUtils;
+import org.chromium.components.prefs.PrefService;
+import org.chromium.components.user_prefs.UserPrefs;
+
+public class GpcSettings extends ChromeBaseSettingsFragment {
+ private static final String PREF_SWITCH = "gpc_switch";
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ SettingsUtils.addPreferencesFromResource(this, R.xml.gpc_preferences);
+ getActivity().setTitle(R.string.gpc_title);
+
+ ChromeSwitchPreference switchPreference =
+ (ChromeSwitchPreference) findPreference(PREF_SWITCH);
+
+ PrefService prefService = UserPrefs.get(getProfile());
+ boolean isEnabled = prefService.getBoolean(Pref.ENABLE_GPC);
+ switchPreference.setChecked(isEnabled);
+
+ switchPreference.setOnPreferenceChangeListener(
+ (preference, newValue) -> {
+ prefService.setBoolean(Pref.ENABLE_GPC, (boolean) newValue);
+ return true;
+ });
+ }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
@@ -93,6 +93,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
private static final String PREF_SECURE_DNS = "secure_dns";
private static final String PREF_USAGE_STATS = "usage_stats_reporting";
private static final String PREF_DO_NOT_TRACK = "do_not_track";
+ private static final String PREF_GPC = "gpc";
private static final String PREF_SAFE_BROWSING = "safe_browsing";
private static final String PREF_SYNC_AND_SERVICES_LINK = "sync_and_services_link";
private static final String PREF_REFERER_POLICY = "referers_policy";
@@ -446,6 +447,14 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
: R.string.text_off);
}
+ Preference gpcPref = findPreference(PREF_GPC);
+ if (gpcPref != null) {
+ gpcPref.setSummary(
+ UserPrefs.get(getProfile()).getBoolean(Pref.ENABLE_GPC)
+ ? R.string.text_on
+ : R.string.text_off);
+ }
+
Preference ipProtectionPref = findPreference(PREF_IP_PROTECTION);
if (ipProtectionPref != null) {
ipProtectionPref.setSummary(
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -2172,6 +2172,21 @@
<message name="IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_LEARN_MORE_ACCESSIBILITY_LABEL" desc="The accessibility label for a link to learn more about Do Not Track">
Learn more about Do Not Track
</message>
+ <message name="IDS_SETTINGS_ENABLE_GPC" desc="">
+ Global Privacy Control "Sec-GPC"
+ </message>
+ <message name="IDS_SETTINGS_ENABLE_GPC_DIALOG_TITLE" desc="">
+ Global Privacy Control "Sec-GPC"
+ </message>
+ <message name="IDS_SETTINGS_ENABLE_GPC_DIALOG_TEXT" desc="">
+ Enables support for Global Privacy Control signals.
+
+Right to opt-out of sale or sharing: You may request that businesses stop selling or sharing your personal information (“opt-out”).
+
+Businesses cannot sell or share your personal information after they receive your opt-out request unless you later authorize them to do so again.
+
+Please note that it only applies to the states of California (under CCPA and CPRA) and Colorado (under CoPA).
+ </message>
<message name="IDS_SETTINGS_PERMISSIONS" desc="Name of the settings page which allows users to manage permissions and site content settings">
Permissions and content settings
</message>
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc
--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc
+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -373,6 +373,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() {
(*s_allowlist)[::prefs::kTrackingProtectionLevel] =
settings_api::PrefType::kNumber;
(*s_allowlist)[::prefs::kEnableDoNotTrack] = settings_api::PrefType::kBoolean;
+ (*s_allowlist)[::prefs::kEnableGPC] = settings_api::PrefType::kBoolean;
(*s_allowlist)[::prefs::kIpProtectionEnabled] =
settings_api::PrefType::kBoolean;
(*s_allowlist)[::prefs::kFingerprintingProtectionEnabled] =
diff --git a/chrome/browser/renderer_preferences_util.cc b/chrome/browser/renderer_preferences_util.cc
--- a/chrome/browser/renderer_preferences_util.cc
+++ b/chrome/browser/renderer_preferences_util.cc
@@ -118,6 +118,9 @@ void UpdateFromSystemSettings(blink::RendererPreferences* prefs,
prefs->enable_do_not_track =
TrackingProtectionSettingsFactory::GetForProfile(profile)
->IsDoNotTrackEnabled();
+ prefs->enable_gpc =
+ TrackingProtectionSettingsFactory::GetForProfile(profile)
+ ->IsGPCEnabled();
prefs->enable_encrypted_media =
pref_service->GetBoolean(prefs::kEnableEncryptedMedia);
prefs->webrtc_ip_handling_policy = std::string();
diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resources/settings/BUILD.gn
--- a/chrome/browser/resources/settings/BUILD.gn
+++ b/chrome/browser/resources/settings/BUILD.gn
@@ -123,6 +123,7 @@ build_webui("build") {
"privacy_page/cookies_page.ts",
"privacy_page/fingerprint_progress_arc.ts",
"privacy_page/do_not_track_toggle.ts",
+ "privacy_page/gpc_toggle.ts",
"privacy_page/personalization_options.ts",
"privacy_page/privacy_guide/privacy_guide_completion_fragment.ts",
"privacy_page/privacy_guide/privacy_guide_completion_link_row.ts",
diff --git a/chrome/browser/resources/settings/privacy_page/cookies_page.html b/chrome/browser/resources/settings/privacy_page/cookies_page.html
--- a/chrome/browser/resources/settings/privacy_page/cookies_page.html
+++ b/chrome/browser/resources/settings/privacy_page/cookies_page.html
@@ -261,6 +261,8 @@
</settings-toggle-button>
<settings-do-not-track-toggle id="doNotTrack" prefs="{{prefs}}">
</settings-do-not-track-toggle>
+ <settings-gpc-toggle id="gpc" prefs="{{prefs}}">
+ </settings-gpc-toggle>
<cr-link-row id="site-data-trigger" class="hr"
on-click="onSiteDataClick_" label="$i18n{cookiePageAllSitesLink}"
role-description="$i18n{subpageArrowRoleDescription}">
diff --git a/chrome/browser/resources/settings/privacy_page/cookies_page.ts b/chrome/browser/resources/settings/privacy_page/cookies_page.ts
--- a/chrome/browser/resources/settings/privacy_page/cookies_page.ts
+++ b/chrome/browser/resources/settings/privacy_page/cookies_page.ts
@@ -18,6 +18,7 @@ import '../settings_shared.css.js';
import '../site_settings/site_list.js';
import './collapse_radio_button.js';
import './do_not_track_toggle.js';
+import './gpc_toggle.js';
import '../controls/settings_radio_group.js';
import {PrefsMixin} from '/shared/settings/prefs/prefs_mixin.js';
diff --git a/chrome/browser/resources/settings/privacy_page/gpc_toggle.html b/chrome/browser/resources/settings/privacy_page/gpc_toggle.html
new file mode 100644
--- /dev/null
+++ b/chrome/browser/resources/settings/privacy_page/gpc_toggle.html
@@ -0,0 +1,32 @@
+ <style include="settings-shared">
+ .toggle {
+ padding: 0 var(--cr-section-padding);
+ margin-bottom: var(--cr-section-vertical-padding);
+ }
+ </style>
+ <settings-toggle-button id="toggle" class="toggle"
+ label="$i18n{gpc}"
+ pref="{{prefs.enable_gpc}}"
+ on-settings-boolean-control-change="onToggleChange_"
+ icon="settings:forward"
+ no-set-pref>
+ </settings-toggle-button>
+ <template is="dom-if" if="[[showDialog_]]"
+ on-dom-change="onDomChange_" restamp>
+ <cr-dialog id="confirmDialog"
+ close-text="$i18n{close}" on-cancel="onDialogCancel_"
+ on-close="onDialogClosed_">
+ <div slot="title">$i18n{gpcDialogTitle}</div>
+ <div slot="body">$i18n{gpcDialogMessage}</div>
+ <div slot="button-container">
+ <cr-button class="cancel-button"
+ on-click="onDialogCancel_">
+ $i18n{cancel}
+ </cr-button>
+ <cr-button class="action-button"
+ on-click="onDialogConfirm_">
+ $i18n{confirm}
+ </cr-button>
+ </div>
+ </cr-dialog>
+ </template>
diff --git a/chrome/browser/resources/settings/privacy_page/gpc_toggle.ts b/chrome/browser/resources/settings/privacy_page/gpc_toggle.ts
new file mode 100644
--- /dev/null
+++ b/chrome/browser/resources/settings/privacy_page/gpc_toggle.ts
@@ -0,0 +1,112 @@
+// Copyright 2020 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
+import '../settings_shared.css.js';
+import '../controls/settings_toggle_button.js';
+
+import {focusWithoutInk} from 'chrome://resources/js/focus_without_ink.js';
+import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import type {SettingsToggleButtonElement} from '../controls/settings_toggle_button.js';
+
+import {getTemplate} from './gpc_toggle.html.js';
+
+export interface SettingsGpcToggleElement {
+ $: {
+ toggle: SettingsToggleButtonElement,
+ };
+}
+
+export class SettingsGpcToggleElement extends PolymerElement {
+ static get is() {
+ return 'settings-gpc-toggle';
+ }
+
+ static get template() {
+ return getTemplate();
+ }
+
+ static get properties() {
+ return {
+ /**
+ * Preferences state.
+ */
+ prefs: {
+ type: Object,
+ notify: true,
+ },
+
+ showDialog_: {
+ type: Boolean,
+ value: false,
+ },
+ };
+ }
+
+ prefs: {enable_gpc: chrome.settingsPrivate.PrefObject};
+ private showDialog_: boolean;
+
+ private onDomChange_() {
+ if (this.showDialog_) {
+ this.shadowRoot!.querySelector('cr-dialog')!.showModal();
+ }
+ }
+
+ /**
+ * Handles the change event for the do-not-track toggle. Shows a
+ * confirmation dialog when enabling the setting.
+ */
+ private onToggleChange_(event: Event) {
+ const target = event.target as SettingsToggleButtonElement;
+ if (!target.checked) {
+ // Always allow disabling the pref.
+ target.sendPrefChange();
+ return;
+ }
+
+ this.showDialog_ = true;
+ }
+
+ private closeDialog_() {
+ this.shadowRoot!.querySelector('cr-dialog')!.close();
+ this.showDialog_ = false;
+ }
+
+ private onDialogClosed_() {
+ focusWithoutInk(this.toggle_);
+ }
+
+ /**
+ * Handles the shared proxy confirmation dialog 'Confirm' button.
+ */
+ private onDialogConfirm_() {
+ this.toggle_.sendPrefChange();
+ this.closeDialog_();
+ }
+
+ /**
+ * Handles the shared proxy confirmation dialog 'Cancel' button or a cancel
+ * event.
+ */
+ private onDialogCancel_() {
+ this.toggle_.resetToPrefValue();
+ this.closeDialog_();
+ }
+
+ private get toggle_(): SettingsToggleButtonElement {
+ return this.shadowRoot!.querySelector<SettingsToggleButtonElement>(
+ '#toggle')!;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ 'settings-gpc-toggle': SettingsGpcToggleElement;
+ }
+}
+
+customElements.define(
+ SettingsGpcToggleElement.is, SettingsGpcToggleElement);
diff --git a/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Enable-Global-Privacy-Control.grdp b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Enable-Global-Privacy-Control.grdp
new file mode 100644
--- /dev/null
+++ b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Enable-Global-Privacy-Control.grdp
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_GPC_TITLE" desc="">
+ Global Privacy Control "Sec-GPC"
+ </message>
+ <message name="IDS_GPC_DESCRIPTION" desc="">
+ Enables support for Global Privacy Control signals.
+
+Right to opt-out of sale or sharing: You may request that businesses stop selling or sharing your personal information (“opt-out”).
+
+Businesses cannot sell or share your personal information after they receive your opt-out request unless you later authorize them to do so again.
+
+Please note that it only applies to the states of California (under CCPA and CPRA) and Colorado (under CoPA).
+ </message>
+</grit-part>
diff --git a/chrome/browser/ui/prefs/pref_watcher.cc b/chrome/browser/ui/prefs/pref_watcher.cc
--- a/chrome/browser/ui/prefs/pref_watcher.cc
+++ b/chrome/browser/ui/prefs/pref_watcher.cc
@@ -155,6 +155,10 @@ void PrefWatcher::OnDoNotTrackEnabledChanged() {
UpdateRendererPreferences();
}
+void PrefWatcher::OnGPCEnabledChanged() {
+ UpdateRendererPreferences();
+}
+
void PrefWatcher::UpdateRendererPreferences() {
for (PrefsTabHelper* helper : tab_helpers_) {
helper->UpdateRendererPreferences();
diff --git a/chrome/browser/ui/prefs/pref_watcher.h b/chrome/browser/ui/prefs/pref_watcher.h
--- a/chrome/browser/ui/prefs/pref_watcher.h
+++ b/chrome/browser/ui/prefs/pref_watcher.h
@@ -38,6 +38,7 @@ class PrefWatcher : public KeyedService,
void Shutdown() override;
void OnDoNotTrackEnabledChanged() override;
+ void OnGPCEnabledChanged() override;
void UpdateRendererPreferences();
void OnWebPrefChanged(const std::string& pref_name);
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1655,6 +1655,9 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source,
{"doNotTrackDialogMessage", IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TEXT},
{"doNotTrackDialogLearnMoreA11yLabel",
IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_LEARN_MORE_ACCESSIBILITY_LABEL},
+ {"gpc", IDS_SETTINGS_ENABLE_GPC},
+ {"gpcDialogTitle", IDS_SETTINGS_ENABLE_GPC_DIALOG_TITLE},
+ {"gpcDialogMessage", IDS_SETTINGS_ENABLE_GPC_DIALOG_TEXT},
// TODO(crbug.com/40122957): This string is no longer used. Remove.
{"permissionsPageTitle", IDS_SETTINGS_PERMISSIONS},
{"permissionsPageDescription", IDS_SETTINGS_PERMISSIONS_DESCRIPTION},
diff --git a/components/privacy_sandbox/tracking_protection_prefs.cc b/components/privacy_sandbox/tracking_protection_prefs.cc
--- a/components/privacy_sandbox/tracking_protection_prefs.cc
+++ b/components/privacy_sandbox/tracking_protection_prefs.cc
@@ -81,6 +81,7 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) {
registry->RegisterBooleanPref(
prefs::kEnableDoNotTrack, false,
user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+ registry->RegisterBooleanPref(prefs::kEnableGPC, true);
}
} // namespace privacy_sandbox::tracking_protection
diff --git a/components/privacy_sandbox/tracking_protection_prefs.h b/components/privacy_sandbox/tracking_protection_prefs.h
--- a/components/privacy_sandbox/tracking_protection_prefs.h
+++ b/components/privacy_sandbox/tracking_protection_prefs.h
@@ -124,6 +124,8 @@ inline constexpr char kFingerprintingProtectionEnabled[] =
// Whether to send the DNT header.
inline constexpr char kEnableDoNotTrack[] = "enable_do_not_track";
+inline constexpr char kEnableGPC[] = "enable_gpc";
+
} // namespace prefs
namespace privacy_sandbox::tracking_protection {
diff --git a/components/privacy_sandbox/tracking_protection_settings.cc b/components/privacy_sandbox/tracking_protection_settings.cc
--- a/components/privacy_sandbox/tracking_protection_settings.cc
+++ b/components/privacy_sandbox/tracking_protection_settings.cc
@@ -32,6 +32,11 @@ TrackingProtectionSettings::TrackingProtectionSettings(
base::BindRepeating(
&TrackingProtectionSettings::OnDoNotTrackEnabledPrefChanged,
base::Unretained(this)));
+ pref_change_registrar_.Add(
+ prefs::kEnableGPC,
+ base::BindRepeating(
+ &TrackingProtectionSettings::OnGPCEnabledPrefChanged,
+ base::Unretained(this)));
pref_change_registrar_.Add(
prefs::kFingerprintingProtectionEnabled,
base::BindRepeating(
@@ -114,6 +119,10 @@ bool TrackingProtectionSettings::IsDoNotTrackEnabled() const {
return pref_service_->GetBoolean(prefs::kEnableDoNotTrack);
}
+bool TrackingProtectionSettings::IsGPCEnabled() const {
+ return pref_service_->GetBoolean(prefs::kEnableGPC);
+}
+
void TrackingProtectionSettings::OnEnterpriseControlForPrefsChanged() {
if (!IsTrackingProtection3pcdEnabled()) {
return;
@@ -153,6 +162,12 @@ void TrackingProtectionSettings::OnDoNotTrackEnabledPrefChanged() {
}
}
+void TrackingProtectionSettings::OnGPCEnabledPrefChanged() {
+ for (auto& observer : observers_) {
+ observer.OnGPCEnabledChanged();
+ }
+}
+
void TrackingProtectionSettings::OnIpProtectionPrefChanged() {
for (auto& observer : observers_) {
observer.OnIpProtectionEnabledChanged();
diff --git a/components/privacy_sandbox/tracking_protection_settings.h b/components/privacy_sandbox/tracking_protection_settings.h
--- a/components/privacy_sandbox/tracking_protection_settings.h
+++ b/components/privacy_sandbox/tracking_protection_settings.h
@@ -38,6 +38,8 @@ class TrackingProtectionSettings
// Returns whether "do not track" is enabled.
bool IsDoNotTrackEnabled() const;
+ bool IsGPCEnabled() const;
+
// Returns whether tracking protection for 3PCD (prefs + UX) is enabled.
bool IsTrackingProtection3pcdEnabled() const;
@@ -61,6 +63,7 @@ class TrackingProtectionSettings
// Callbacks for pref observation.
void OnDoNotTrackEnabledPrefChanged();
+ void OnGPCEnabledPrefChanged();
void OnBlockAllThirdPartyCookiesPrefChanged();
void OnTrackingProtection3pcdPrefChanged();
void OnIpProtectionPrefChanged();
diff --git a/components/privacy_sandbox/tracking_protection_settings_observer.h b/components/privacy_sandbox/tracking_protection_settings_observer.h
--- a/components/privacy_sandbox/tracking_protection_settings_observer.h
+++ b/components/privacy_sandbox/tracking_protection_settings_observer.h
@@ -22,6 +22,8 @@ class TrackingProtectionSettingsObserver {
// For observation of DNT.
virtual void OnDoNotTrackEnabledChanged() {}
+ virtual void OnGPCEnabledChanged() {}
+
// For observation of anti-fingerprinting.
virtual void OnFingerprintingProtectionEnabledChanged() {}
diff --git a/content/browser/loader/browser_initiated_resource_request.cc b/content/browser/loader/browser_initiated_resource_request.cc
--- a/content/browser/loader/browser_initiated_resource_request.cc
+++ b/content/browser/loader/browser_initiated_resource_request.cc
@@ -33,6 +33,12 @@ void UpdateAdditionalHeadersForBrowserInitiatedRequest(
}
headers->SetHeaderIfMissing(blink::kDoNotTrackHeader, "1");
}
+ if (renderer_preferences.enable_gpc) {
+ if (should_update_existing_headers) {
+ headers->RemoveHeader(blink::kSecGPCHeader);
+ }
+ headers->SetHeaderIfMissing(blink::kSecGPCHeader, "1");
+ }
// TODO(crbug.com/1315612): WARNING: This bypasses the permissions policy.
// Unfortunately, workers lack a permissions policy and to derive proper hints
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -4470,6 +4470,10 @@ void RenderFrameImpl::WillSendRequestInternal(
request.SetHttpHeaderField(
blink::WebString::FromUTF8(blink::kDoNotTrackHeader), "1");
}
+ if (GetWebView()->GetRendererPreferences().enable_gpc) {
+ request.SetHttpHeaderField(
+ blink::WebString::FromUTF8(blink::kSecGPCHeader), "1");
+ }
ApplyFilePathAlias(&request);
GURL new_url;
diff --git a/third_party/blink/common/loader/loader_constants.cc b/third_party/blink/common/loader/loader_constants.cc
--- a/third_party/blink/common/loader/loader_constants.cc
+++ b/third_party/blink/common/loader/loader_constants.cc
@@ -7,5 +7,6 @@
namespace blink {
const char kDoNotTrackHeader[] = "DNT";
+const char kSecGPCHeader[] = "Sec-GPC";
} // namespace blink
diff --git a/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc b/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc
--- a/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc
+++ b/third_party/blink/common/renderer_preferences/renderer_preferences_mojom_traits.cc
@@ -49,6 +49,7 @@ bool StructTraits<blink::mojom::RendererPreferencesDataView,
out->enable_referrers = data.enable_referrers();
out->allow_cross_origin_auth_prompt = data.allow_cross_origin_auth_prompt();
out->enable_do_not_track = data.enable_do_not_track();
+ out->enable_gpc = data.enable_gpc();
out->enable_encrypted_media = data.enable_encrypted_media();
if (!data.ReadWebrtcIpHandlingPolicy(&out->webrtc_ip_handling_policy))
diff --git a/third_party/blink/public/common/loader/loader_constants.h b/third_party/blink/public/common/loader/loader_constants.h
--- a/third_party/blink/public/common/loader/loader_constants.h
+++ b/third_party/blink/public/common/loader/loader_constants.h
@@ -11,6 +11,7 @@ namespace blink {
// HTTP header set in requests to indicate they should be marked DoNotTrack.
BLINK_COMMON_EXPORT extern const char kDoNotTrackHeader[];
+BLINK_COMMON_EXPORT extern const char kSecGPCHeader[];
// These values indicate the load progress constants shared between both
// //content and //blink.
diff --git a/third_party/blink/public/common/renderer_preferences/renderer_preferences.h b/third_party/blink/public/common/renderer_preferences/renderer_preferences.h
--- a/third_party/blink/public/common/renderer_preferences/renderer_preferences.h
+++ b/third_party/blink/public/common/renderer_preferences/renderer_preferences.h
@@ -58,6 +58,7 @@ struct BLINK_COMMON_EXPORT RendererPreferences {
uint32_t referrers_policy{2};
bool allow_cross_origin_auth_prompt{false};
bool enable_do_not_track{false};
+ bool enable_gpc{false};
bool enable_encrypted_media{true};
std::string webrtc_ip_handling_policy;
uint16_t webrtc_udp_min_port{0};
diff --git a/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h b/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h
--- a/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h
+++ b/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h
@@ -126,6 +126,11 @@ struct BLINK_COMMON_EXPORT
return data.enable_do_not_track;
}
+ static const bool& enable_gpc(
+ const ::blink::RendererPreferences& data) {
+ return data.enable_gpc;
+ }
+
static const bool& enable_encrypted_media(
const ::blink::RendererPreferences& data) {
return data.enable_encrypted_media;
diff --git a/third_party/blink/public/mojom/renderer_preferences.mojom b/third_party/blink/public/mojom/renderer_preferences.mojom
--- a/third_party/blink/public/mojom/renderer_preferences.mojom
+++ b/third_party/blink/public/mojom/renderer_preferences.mojom
@@ -84,6 +84,8 @@ struct RendererPreferences {
// Set to true to indicate that the preference to set DNT to 1 is enabled.
bool enable_do_not_track = false;
+ bool enable_gpc = false;
+
// Whether to allow the use of Encrypted Media Extensions (EME), except for
// the use of Clear Key key system which is always allowed as required by the
// spec.
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni
--- a/third_party/blink/renderer/bindings/idl_in_modules.gni
+++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -1257,6 +1257,11 @@ static_idl_files_in_modules = [
"//third_party/blink/renderer/modules/xr/xr_webgl_sub_image.idl",
]
+static_idl_files_in_modules += [
+ "//third_party/blink/renderer/modules/global_privacy_control/navigator_global_privacy_control.idl",
+ "//third_party/blink/renderer/modules/global_privacy_control/worker_navigator_global_privacy_control.idl",
+]
+
# Direct Sockets
# This uses target_os rather than current_os (which is what is_android is set
# from) for the case of generating the v8 context snapshot for android. When
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc
--- a/third_party/blink/renderer/core/exported/web_view_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -3509,6 +3509,9 @@ void WebViewImpl::UpdateRendererPreferences(
GetSettings()->SetCaretBrowsingEnabled(
renderer_preferences_.caret_browsing_enabled);
+ WebRuntimeFeatures::EnableGlobalPrivacyControl(
+ renderer_preferences_.enable_gpc);
+
#if BUILDFLAG(IS_OZONE)
GetSettings()->SetSelectionClipboardBufferAvailable(
renderer_preferences_.selection_clipboard_buffer_available);
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn
--- a/third_party/blink/renderer/modules/BUILD.gn
+++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -173,6 +173,10 @@ component("modules") {
"//third_party/blink/renderer/modules/xr",
]
+ sub_modules += [
+ "//third_party/blink/renderer/modules/global_privacy_control",
+ ]
+
# This uses target_os rather than current_os (which is what is_android is set
# from) for the case of generating the v8 context snapshot for android. When
# generating the snapshot for android, blink is compiled with
diff --git a/third_party/blink/renderer/modules/global_privacy_control/BUILD.gn b/third_party/blink/renderer/modules/global_privacy_control/BUILD.gn
new file mode 100644
--- /dev/null
+++ b/third_party/blink/renderer/modules/global_privacy_control/BUILD.gn
@@ -0,0 +1,8 @@
+import("//third_party/blink/renderer/modules/modules.gni")
+
+blink_modules_sources("global_privacy_control") {
+ sources = [
+ "global_privacy_control.cc",
+ "global_privacy_control.h",
+ ]
+}
diff --git a/third_party/blink/renderer/modules/global_privacy_control/global_privacy_control.cc b/third_party/blink/renderer/modules/global_privacy_control/global_privacy_control.cc
new file mode 100644
--- /dev/null
+++ b/third_party/blink/renderer/modules/global_privacy_control/global_privacy_control.cc
@@ -0,0 +1,12 @@
+#include "third_party/blink/renderer/modules/global_privacy_control/global_privacy_control.h"
+
+#include "base/feature_list.h"
+#include "third_party/blink/public/common/features.h"
+
+namespace blink {
+
+bool GlobalPrivacyControl::globalPrivacyControl(NavigatorBase& navigator) {
+ return true;
+}
+
+} // namespace blink
diff --git a/third_party/blink/renderer/modules/global_privacy_control/global_privacy_control.h b/third_party/blink/renderer/modules/global_privacy_control/global_privacy_control.h
new file mode 100644
--- /dev/null
+++ b/third_party/blink/renderer/modules/global_privacy_control/global_privacy_control.h
@@ -0,0 +1,15 @@
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_GLOBAL_PRIVACY_CONTROL_GLOBAL_PRIVACY_CONTROL_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_GLOBAL_PRIVACY_CONTROL_GLOBAL_PRIVACY_CONTROL_H_
+
+#include "third_party/blink/renderer/core/execution_context/navigator_base.h"
+
+namespace blink {
+
+class GlobalPrivacyControl final {
+ public:
+ static bool globalPrivacyControl(NavigatorBase&);
+};
+
+} // namespace blink
+
+#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_GLOBAL_PRIVACY_CONTROL_GLOBAL_PRIVACY_CONTROL_H_
diff --git a/third_party/blink/renderer/modules/global_privacy_control/navigator_global_privacy_control.idl b/third_party/blink/renderer/modules/global_privacy_control/navigator_global_privacy_control.idl
new file mode 100644
--- /dev/null
+++ b/third_party/blink/renderer/modules/global_privacy_control/navigator_global_privacy_control.idl
@@ -0,0 +1,6 @@
+[
+ RuntimeEnabled=GlobalPrivacyControl,
+ ImplementedAs=GlobalPrivacyControl
+] partial interface Navigator {
+ readonly attribute boolean globalPrivacyControl;
+};
diff --git a/third_party/blink/renderer/modules/global_privacy_control/worker_navigator_global_privacy_control.idl b/third_party/blink/renderer/modules/global_privacy_control/worker_navigator_global_privacy_control.idl
new file mode 100644
--- /dev/null
+++ b/third_party/blink/renderer/modules/global_privacy_control/worker_navigator_global_privacy_control.idl
@@ -0,0 +1,6 @@
+[
+ RuntimeEnabled=GlobalPrivacyControl,
+ ImplementedAs=GlobalPrivacyControl
+] partial interface WorkerNavigator {
+ readonly attribute boolean globalPrivacyControl;
+};
diff --git a/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.cc b/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.cc
--- a/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.cc
+++ b/third_party/blink/renderer/modules/service_worker/web_service_worker_fetch_context_impl.cc
@@ -148,6 +148,9 @@ void WebServiceWorkerFetchContextImpl::WillSendRequest(WebURLRequest& request) {
if (renderer_preferences_.enable_do_not_track) {
request.SetHttpHeaderField(WebString::FromUTF8(kDoNotTrackHeader), "1");
}
+ if (renderer_preferences_.enable_gpc) {
+ request.SetHttpHeaderField(WebString::FromUTF8(kSecGPCHeader), "1");
+ }
auto url_request_extra_data = base::MakeRefCounted<WebURLRequestExtraData>();
url_request_extra_data->set_originated_from_service_worker(true);
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.cc
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.cc
@@ -376,6 +376,9 @@ void DedicatedOrSharedWorkerFetchContextImpl::WillSendRequest(
if (renderer_preferences_.enable_do_not_track) {
request.SetHttpHeaderField(WebString::FromUTF8(kDoNotTrackHeader), "1");
}
+ if (renderer_preferences_.enable_gpc) {
+ request.SetHttpHeaderField(WebString::FromUTF8(kSecGPCHeader), "1");
+ }
auto url_request_extra_data = base::MakeRefCounted<WebURLRequestExtraData>();
request.SetURLRequestExtraData(std::move(url_request_extra_data));
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
@@ -3732,6 +3732,11 @@
status: "stable",
origin_trial_feature_name: "StorageAccessAPIBeyondCookies",
},
+ {
+ name: "GlobalPrivacyControl",
+ base_feature_status: "disabled",
+ public: true,
+ },
{
name: "StorageBuckets",
status: "stable",
--
@@ -0,0 +1,42 @@
From: uazo <uazo@users.noreply.github.com>
Date: Sat, 25 May 2024 10:34:38 +0000
Subject: Enable menu on reload button
Activate right-button submenu in reload (desktop platforms).
Patch derived from the ungoogled-chromium patch of the same name.
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
chrome/app/generated_resources.grd | 4 ++--
chrome/browser/ui/views/toolbar/toolbar_view.cc | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -4682,10 +4682,10 @@ are declared in tools/grit/grit_rule.gni.
Normal Reload
</message>
<message name="IDS_RELOAD_MENU_HARD_RELOAD_ITEM" desc="Menu item displayed in the Reload dropdown menu when in dev mode">
- Hard Reload
+ Reload bypassing cache
</message>
<message name="IDS_RELOAD_MENU_EMPTY_AND_HARD_RELOAD_ITEM" desc="Menu item displayed in the Reload dropdown menu when in dev mode">
- Empty Cache and Hard Reload
+ Empty Cache and Reload
</message>
<!-- Tab sharing infobar -->
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc
--- a/chrome/browser/ui/views/toolbar/toolbar_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -571,7 +571,7 @@ void ToolbarView::Update(WebContents* tab) {
}
if (reload_)
- reload_->SetMenuEnabled(chrome::IsDebuggerAttachedToCurrentTab(browser_));
+ reload_->SetMenuEnabled(true);
}
void ToolbarView::SetToolbarVisibility(bool visible) {
--
+1 -1
View File
@@ -491,7 +491,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
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
@@ -5291,6 +5291,19 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
@@ -5282,6 +5282,19 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
Make sure a phone app is enabled on this device
</message>
@@ -1055,7 +1055,7 @@ diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resourc
"appearance_page/appearance_fonts_page.ts",
"appearance_page/appearance_page.ts",
"appearance_page/home_url_input.ts",
@@ -398,6 +399,7 @@ build_webui("build") {
@@ -399,6 +400,7 @@ build_webui("build") {
ts_definitions = [
"//tools/typescript/definitions/autofill_private.d.ts",
"//tools/typescript/definitions/chrome_event.d.ts",
+23 -3
View File
@@ -22,7 +22,8 @@ Require: Content-settings-infrastructure.patch
.../javascript_jit.grdp | 21 ++++
.../javascript_jit.inc | 12 +++
.../core/browser/content_settings_registry.cc | 2 +-
9 files changed, 127 insertions(+), 1 deletion(-)
.../renderer_host/render_process_host_impl.cc | 9 +-
10 files changed, 129 insertions(+), 8 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-hdpi/permission_javascript_jit.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-mdpi/permission_javascript_jit.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xhdpi/permission_javascript_jit.png
@@ -242,10 +243,10 @@ new file mode 100644
+ Enable the JIT compiler and WebAssembly support in V8
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_JAVASCRIPT_JIT_ENABLED" desc="Summary text explaining that sites are allowed to compile JavaScript in JIT mode." formatter_data="android_java">
+ Allow JIT and WebAssembly on a specific site.
+ Allow JIT and WebAssembly
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_JAVASCRIPT_JIT_DISABLED" desc="Summary text explaining that sites are running JavaScript in JITless mode." formatter_data="android_java">
+ Block JIT and WebAssembly on a specific site.
+ Block JIT and WebAssembly
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_JAVASCRIPT_JIT_ALLOW" desc="The description for the allow Javascript JIT for website dialog." formatter_data="android_java">
+ Allow sites to use just-in-time compilation; more performant but a constant source of security vulnerabilities.
@@ -283,4 +284,23 @@ diff --git a/components/content_settings/core/browser/content_settings_registry.
/*allowlisted_primary_schemes=*/{},
/*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK},
WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -3333,13 +3333,8 @@ void RenderProcessHostImpl::AppendRendererCommandLine(
}
if (IsJitDisabled()) {
- if (IsPdf()) {
- command_line->AppendSwitchASCII(blink::switches::kJavaScriptFlags,
- "--jitless");
- } else {
- command_line->AppendSwitchASCII(blink::switches::kJavaScriptFlags,
- "--no-maglev,--no-turbofan");
- }
+ command_line->AppendSwitchASCII(blink::switches::kJavaScriptFlags,
+ "--jitless");
}
if (features::IsTouchTextEditingRedesignEnabled()) {
--
@@ -0,0 +1,25 @@
From: uazo <uazo@users.noreply.github.com>
Date: Thu, 30 May 2024 11:42:21 +0000
Subject: Media fingerprinting mitigations
Removes the ability to understand the capabilities of the video card in windows.
See https://github.com/uazo/cromite/issues/862
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
third_party/blink/renderer/modules/webcodecs/video_decoder.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/third_party/blink/renderer/modules/webcodecs/video_decoder.cc b/third_party/blink/renderer/modules/webcodecs/video_decoder.cc
--- a/third_party/blink/renderer/modules/webcodecs/video_decoder.cc
+++ b/third_party/blink/renderer/modules/webcodecs/video_decoder.cc
@@ -299,7 +299,7 @@ ScriptPromise<VideoDecoderSupport> VideoDecoder::isConfigSupported(
auto* config_copy = CopyConfig(*config);
// Run the "Check Configuration Support" algorithm.
- HardwarePreference hw_pref = GetHardwareAccelerationPreference(*config_copy);
+ HardwarePreference hw_pref = HardwarePreference::kPreferSoftware;
VideoDecoderSupport* support = VideoDecoderSupport::Create();
support->setConfig(config_copy);
--
+141 -83
View File
@@ -13,81 +13,81 @@ Need: bromite-build-utils.patch
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
cc/base/features.cc | 8 ++
cc/base/features.h | 2 +
cc/input/browser_controls_offset_manager.cc | 6 ++
cc/trees/layer_tree_host_impl.cc | 3 +
.../start_surface/StartSurfaceMediator.java | 4 +
.../tab_management/TabGroupUiCoordinator.java | 7 +-
.../tab_management/TabGroupUiMediator.java | 50 +++++++++-
.../tab_management/TabGroupUiProperties.java | 7 +-
.../tab_management/TabGroupUiToolbarView.java | 17 ++++
.../tab_management/TabGroupUiViewBinder.java | 3 +
.../TabListContainerViewBinder.java | 15 ++-
.../tab_management/TabListCoordinator.java | 95 ++++++++++++++++++-
.../tab_management/TabListRecyclerView.java | 19 +++-
.../tab_management/TabSwitcherMediator.java | 27 +++++-
.../settings/AccessibilitySettings.java | 26 +++++
.../ChromeAccessibilitySettingsDelegate.java | 69 ++++++++++++++
.../chrome/browser/app/ChromeActivity.java | 13 +++
.../compositor/CompositorViewHolder.java | 8 ++
.../layouts/LayoutManagerChrome.java | 18 +++-
.../layouts/LayoutManagerChromeTablet.java | 4 +-
.../layouts/ToolbarSwipeLayout.java | 14 ++-
.../overlays/strip/StripLayoutHelper.java | 2 +-
.../strip/StripLayoutHelperManager.java | 38 +++++++-
.../scene_layer/StaticTabSceneLayer.java | 7 +-
.../scene_layer/TabListSceneLayer.java | 8 ++
.../scene_layer/TabStripSceneLayer.java | 19 +++-
.../browser/findinpage/FindToolbarTablet.java | 10 +-
.../fullscreen/BrowserControlsManager.java | 12 +++
.../messages/MessageContainerCoordinator.java | 16 +++-
.../modaldialog/ChromeTabModalPresenter.java | 2 +-
.../chrome/browser/ntp/NewTabPage.java | 14 ++-
.../chrome/browser/ntp/NewTabPageLayout.java | 8 ++
.../chrome/browser/ntp/RecentTabsPage.java | 26 ++++-
.../browser/searchwidget/SearchActivity.java | 12 ++-
.../browser/settings/SettingsActivity.java | 5 +
.../StatusIndicatorCoordinator.java | 9 ++
.../StatusIndicatorSceneLayer.java | 6 +-
.../browser/toolbar/ToolbarManager.java | 46 ++++++++-
.../chrome/browser/ui/BottomContainer.java | 18 ++++
.../ui/system/StatusBarColorController.java | 9 ++
.../android/compositor/layer/toolbar_layer.cc | 10 +-
.../scene_layer/tab_strip_scene_layer.cc | 16 +++-
.../BrowserControlsMarginSupplier.java | 5 +
.../BrowserControlsStateProvider.java | 6 ++
.../browser/feed/FeedListContentManager.java | 6 +-
.../flags/android/chrome_feature_list.cc | 3 +
.../browser/flags/ChromeFeatureList.java | 10 ++
chrome/browser/prefs/browser_prefs.cc | 2 +-
.../chrome/browser/ui/appmenu/AppMenu.java | 40 +++++++-
.../ui/appmenu/AppMenuHandlerImpl.java | 10 ++
.../omnibox/LocationBarCoordinator.java | 7 +-
...mniboxSuggestionsDropdownEmbedderImpl.java | 24 ++++-
.../suggestions/AutocompleteCoordinator.java | 16 +++-
.../suggestions/AutocompleteMediator.java | 6 +-
.../DropdownItemViewInfoListManager.java | 7 +-
.../OmniboxSuggestionsDropdown.java | 39 +++++++-
.../OmniboxSuggestionsDropdownEmbedder.java | 8 ++
.../strings/android_chrome_strings.grd | 6 ++
chrome/browser/ui/android/toolbar/BUILD.gn | 1 +
.../toolbar/LocationBarFocusScrimHandler.java | 5 +
.../bottom/BottomControlsContentDelegate.java | 9 +-
.../bottom/BottomControlsCoordinator.java | 11 ++-
.../bottom/BottomControlsMediator.java | 18 +++-
.../bottom/BottomControlsProperties.java | 6 +-
.../bottom/BottomControlsViewBinder.java | 2 +
.../bottom/ScrollingBottomViewSceneLayer.java | 19 +++-
.../toolbar/top/ToolbarControlContainer.java | 9 ++
.../top/TopToolbarOverlayCoordinator.java | 6 ++
.../top/TopToolbarOverlayProperties.java | 8 +-
.../toolbar/top/TopToolbarSceneLayer.java | 10 +-
.../res/xml/accessibility_preferences.xml | 8 ++
.../AccessibilitySettingsDelegate.java | 7 ++
.../render_widget_host_view_android.cc | 3 +
.../Move-navigation-bar-to-bottom.inc | 17 ++++
74 files changed, 955 insertions(+), 87 deletions(-)
cc/base/features.cc | 8 +
cc/base/features.h | 2 +
cc/input/browser_controls_offset_manager.cc | 6 +
cc/trees/layer_tree_host_impl.cc | 3 +
.../start_surface/StartSurfaceMediator.java | 4 +
.../tab_management/TabGroupUiCoordinator.java | 7 +-
.../tab_management/TabGroupUiMediator.java | 50 +++++-
.../tab_management/TabGroupUiProperties.java | 7 +-
.../tab_management/TabGroupUiToolbarView.java | 17 ++
.../tab_management/TabGroupUiViewBinder.java | 3 +
.../TabListContainerViewBinder.java | 15 +-
.../tab_management/TabListCoordinator.java | 151 +++++++++++++++++-
.../tab_management/TabListRecyclerView.java | 19 ++-
.../tab_management/TabSwitcherMediator.java | 27 +++-
.../settings/AccessibilitySettings.java | 26 +++
.../ChromeAccessibilitySettingsDelegate.java | 69 ++++++++
.../chrome/browser/app/ChromeActivity.java | 13 ++
.../compositor/CompositorViewHolder.java | 8 +
.../layouts/LayoutManagerChrome.java | 18 ++-
.../layouts/LayoutManagerChromeTablet.java | 4 +-
.../layouts/ToolbarSwipeLayout.java | 14 +-
.../overlays/strip/StripLayoutHelper.java | 2 +-
.../strip/StripLayoutHelperManager.java | 38 ++++-
.../scene_layer/StaticTabSceneLayer.java | 7 +-
.../scene_layer/TabListSceneLayer.java | 8 +
.../scene_layer/TabStripSceneLayer.java | 19 ++-
.../browser/findinpage/FindToolbarTablet.java | 10 +-
.../fullscreen/BrowserControlsManager.java | 12 ++
.../messages/MessageContainerCoordinator.java | 16 +-
.../modaldialog/ChromeTabModalPresenter.java | 2 +-
.../chrome/browser/ntp/NewTabPage.java | 14 +-
.../chrome/browser/ntp/NewTabPageLayout.java | 8 +
.../chrome/browser/ntp/RecentTabsPage.java | 26 ++-
.../browser/searchwidget/SearchActivity.java | 12 +-
.../browser/settings/SettingsActivity.java | 5 +
.../StatusIndicatorCoordinator.java | 9 ++
.../StatusIndicatorSceneLayer.java | 6 +-
.../browser/toolbar/ToolbarManager.java | 46 +++++-
.../chrome/browser/ui/BottomContainer.java | 18 +++
.../ui/system/StatusBarColorController.java | 9 ++
.../android/compositor/layer/toolbar_layer.cc | 10 +-
.../scene_layer/tab_strip_scene_layer.cc | 16 +-
.../BrowserControlsMarginSupplier.java | 5 +
.../BrowserControlsStateProvider.java | 6 +
.../browser/feed/FeedListContentManager.java | 6 +-
.../flags/android/chrome_feature_list.cc | 3 +
.../browser/flags/ChromeFeatureList.java | 10 ++
chrome/browser/prefs/browser_prefs.cc | 2 +-
.../chrome/browser/ui/appmenu/AppMenu.java | 40 ++++-
.../ui/appmenu/AppMenuHandlerImpl.java | 10 ++
.../omnibox/LocationBarCoordinator.java | 7 +-
...mniboxSuggestionsDropdownEmbedderImpl.java | 24 ++-
.../suggestions/AutocompleteCoordinator.java | 16 +-
.../suggestions/AutocompleteMediator.java | 6 +-
.../DropdownItemViewInfoListManager.java | 7 +-
.../OmniboxSuggestionsDropdown.java | 39 ++++-
.../OmniboxSuggestionsDropdownEmbedder.java | 8 +
.../strings/android_chrome_strings.grd | 6 +
chrome/browser/ui/android/toolbar/BUILD.gn | 1 +
.../toolbar/LocationBarFocusScrimHandler.java | 5 +
.../bottom/BottomControlsContentDelegate.java | 9 +-
.../bottom/BottomControlsCoordinator.java | 11 +-
.../bottom/BottomControlsMediator.java | 18 ++-
.../bottom/BottomControlsProperties.java | 6 +-
.../bottom/BottomControlsViewBinder.java | 2 +
.../bottom/ScrollingBottomViewSceneLayer.java | 19 ++-
.../toolbar/top/ToolbarControlContainer.java | 9 ++
.../top/TopToolbarOverlayCoordinator.java | 6 +
.../top/TopToolbarOverlayProperties.java | 8 +-
.../toolbar/top/TopToolbarSceneLayer.java | 10 +-
.../res/xml/accessibility_preferences.xml | 8 +
.../AccessibilitySettingsDelegate.java | 7 +
.../render_widget_host_view_android.cc | 3 +
.../Move-navigation-bar-to-bottom.inc | 17 ++
74 files changed, 1011 insertions(+), 87 deletions(-)
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Move-navigation-bar-to-bottom.inc
diff --git a/cc/base/features.cc b/cc/base/features.cc
@@ -445,15 +445,20 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java
@@ -8,6 +8,7 @@ import static org.chromium.chrome.browser.tasks.tab_management.TabListModel.Card
@@ -6,8 +6,12 @@ package org.chromium.chrome.browser.tasks.tab_management;
import static org.chromium.chrome.browser.tasks.tab_management.TabListModel.CardProperties.CARD_TYPE;
+import android.os.Parcel;
+import android.os.Parcelable;
+
import android.app.Activity;
import android.content.Context;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -59,6 +60,8 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter;
@@ -59,6 +63,8 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter;
import org.chromium.ui.resources.dynamics.DynamicResourceLoader;
import org.chromium.ui.widget.ViewLookupCachingFrameLayout;
@@ -462,11 +467,46 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
@@ -116,6 +119,75 @@ public class TabListCoordinator
@@ -116,6 +122,128 @@ public class TabListCoordinator
private @Nullable Runnable mAwaitingLayoutRunnable;
private int mAwaitingTabId = Tab.INVALID_TAB_ID;
+ public class GridLayoutManagerDockBottom extends GridLayoutManager {
+ public static class SavedState implements Parcelable {
+ private Parcelable superState;
+ private int mTopPadding;
+
+ public SavedState() {}
+
+ public SavedState(Parcel in) {
+ superState = in.readParcelable(GridLayoutManager.class.getClassLoader());
+ mTopPadding = in.readInt();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ dest.writeParcelable(superState, flags);
+ dest.writeInt(mTopPadding);
+ }
+
+ public static final Creator<SavedState> CREATOR = new Creator<SavedState>() {
+ @Override
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+
+ @Override
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+ }
+
+ Context mContext;
+
+ TabListRecyclerView mRecyclerView;
@@ -533,12 +573,30 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
+ getPaddingTop() + getPaddingBottom());
+ }
+ }
+
+ @Override
+ public Parcelable onSaveInstanceState() {
+ SavedState ss = new SavedState();
+ ss.superState = super.onSaveInstanceState();
+ ss.mTopPadding = mTopPadding;
+ return ss;
+ }
+
+ @Override
+ public void onRestoreInstanceState(Parcelable state) {
+ if (state instanceof SavedState) {
+ SavedState ss = (SavedState) state;
+ mTopPadding = ss.mTopPadding;
+ state = ss.superState;
+ }
+ super.onRestoreInstanceState(state);
+ }
+ }
+
/**
* Construct a coordinator for UI that shows a list of tabs.
*
@@ -397,6 +469,12 @@ public class TabListCoordinator
@@ -397,6 +525,12 @@ public class TabListCoordinator
checkAwaitingLayout();
}
};
@@ -551,7 +609,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
mRecyclerView.setLayoutManager(gridLayoutManager);
mMediator.registerOrientationListener(gridLayoutManager);
mMediator.updateSpanCount(
@@ -408,8 +486,7 @@ public class TabListCoordinator
@@ -408,8 +542,7 @@ public class TabListCoordinator
.getDecorView()
.getWindowVisibleDisplayFrame(frame);
updateGridCardLayout(frame.width());
@@ -561,7 +619,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
LinearLayoutManager layoutManager =
new LinearLayoutManager(
context,
@@ -424,6 +501,17 @@ public class TabListCoordinator
@@ -424,6 +557,17 @@ public class TabListCoordinator
}
};
mRecyclerView.setLayoutManager(layoutManager);
@@ -579,7 +637,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
}
mMediator.setRecyclerViewItemAnimationToggle(mRecyclerView::setDisableItemAnimations);
}
@@ -730,6 +818,9 @@ public class TabListCoordinator
@@ -730,6 +874,9 @@ public class TabListCoordinator
void prepareTabSwitcherView() {
registerLayoutChangeListener();
mRecyclerView.prepareTabSwitcherView();
@@ -2486,7 +2544,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow
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
@@ -1659,6 +1659,12 @@ Your Google account may have other forms of browsing history like searches and a
@@ -1650,6 +1650,12 @@ Your Google account may have other forms of browsing history like searches and a
<message name="IDS_FORCE_TABLET_UI_TITLE" desc="Title of the preference that allows the user to update force tablet UI settings.">
Force Tablet Mode
</message>
@@ -480,7 +480,7 @@ diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/ch
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
@@ -1054,6 +1054,30 @@ CHAR_LIMIT guidelines:
@@ -1045,6 +1045,30 @@ CHAR_LIMIT guidelines:
For example, some websites may respond to this request by showing you ads that arent based on other websites youve visited. Many websites will still collect and use your browsing data — for example to improve security, to provide content, ads and recommendations, and to generate reporting statistics.
</message>
@@ -11,9 +11,9 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../java/res/xml/privacy_preferences.xml | 7 ++++
.../flags/cromite/sTabSwitcherListMode.java | 33 +++++++++++++++++++
.../Use-list-mode-for-tab-switcher.grdp | 9 +++++
.../browser/toolbar/top/ToolbarPhone.java | 15 ++++++---
.../browser/toolbar/top/ToolbarPhone.java | 9 +++--
.../tab-switcher-list-mode.inc | 3 ++
6 files changed, 64 insertions(+), 7 deletions(-)
6 files changed, 58 insertions(+), 7 deletions(-)
create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sTabSwitcherListMode.java
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Use-list-mode-for-tab-switcher.grdp
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/tab-switcher-list-mode.inc
@@ -111,30 +111,20 @@ new file mode 100644
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
@@ -53,6 +53,7 @@ import org.chromium.base.TraceEvent;
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.flags.cromite.sTabSwitcherListMode;
import org.chromium.chrome.browser.omnibox.LocationBar;
import org.chromium.chrome.browser.omnibox.LocationBarCoordinator;
import org.chromium.chrome.browser.omnibox.NewTabPageDelegate;
@@ -505,7 +506,8 @@ public class ToolbarPhone extends ToolbarLayout
@@ -505,7 +505,6 @@ public class ToolbarPhone extends ToolbarLayout
private void inflateTabSwitchingResources() {
mToggleTabStackButton = findViewById(R.id.tab_switcher_button);
- mToggleTabStackButton.setClickable(false);
+ if (!sTabSwitcherListMode.getInstance().isEnabled())
+ mToggleTabStackButton.setClickable(false);
}
private void enableTabSwitchingResources() {
@@ -1998,14 +2000,15 @@ public class ToolbarPhone extends ToolbarLayout
@@ -1998,14 +1997,14 @@ public class ToolbarPhone extends ToolbarLayout
// On entering the tab switcher, set the focusability of the url bar to be false. This will
// occur at the start of the enter event, and will later be reset to true upon finishing the
// exit event only in #onStartSurfaceStateChanged.
- if (inTabSwitcherMode) {
+ if (inTabSwitcherMode && !sTabSwitcherListMode.getInstance().isEnabled()) {
+ if (inTabSwitcherMode && ((false))) {
mLocationBar.setUrlBarFocusable(false);
}
@@ -142,28 +132,25 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
// start surface is enabled, omnibox state is updated in onStartSurfaceStateChanged(), which
// is always called before setTabSwitcherMode(), so skip here.
- if (getToolbarDataProvider().shouldShowLocationBarInOverviewMode()) {
+ if (getToolbarDataProvider().shouldShowLocationBarInOverviewMode()
+ && !sTabSwitcherListMode.getInstance().isEnabled()) {
+ if (getToolbarDataProvider().shouldShowLocationBarInOverviewMode() && ((false))) {
// Prevent pressing the tab switcher button until after transition finishes.
mToggleTabStackButton.setClickable(false);
return;
@@ -2025,7 +2028,8 @@ public class ToolbarPhone extends ToolbarLayout
@@ -2025,7 +2024,7 @@ public class ToolbarPhone extends ToolbarLayout
return;
}
// Prevent pressing the tab switcher button until after transition finishes.
- mToggleTabStackButton.setClickable(false);
+ if (!sTabSwitcherListMode.getInstance().isEnabled())
+ mToggleTabStackButton.setClickable(false);
+ // mToggleTabStackButton.setClickable(false);
mTabSwitcherState = inTabSwitcherMode ? ENTERING_TAB_SWITCHER : EXITING_TAB_SWITCHER;
@@ -2119,7 +2123,8 @@ public class ToolbarPhone extends ToolbarLayout
@@ -2119,7 +2118,7 @@ public class ToolbarPhone extends ToolbarLayout
}
if (mTabSwitcherState == ENTERING_TAB_SWITCHER) {
mTabSwitcherState = TAB_SWITCHER;
- mToggleTabStackButton.setClickable(false);
+ if (!sTabSwitcherListMode.getInstance().isEnabled())
+ mToggleTabStackButton.setClickable(false);
+ // mToggleTabStackButton.setClickable(false);
}
// Ensure clickable if in STATIC_TAB mode. This handles both when the state transitions
// are ignored in favor of onStartSurfaceStateChanged() and when normal transitions occur.
+280 -155
View File
@@ -2,10 +2,10 @@ From: uazo <uazo@users.noreply.github.com>
Date: Fri, 9 Apr 2021 20:09:08 +0000
Subject: User agent customization
Add flag to always view the desktop site for all websites
Add possibility to define a custom User agent for mobile and desktop mode.
Add possibility to reactivate the metatag view for desktop mode, allowing users to choose
to use the flag in the hamburger menu to navigate with a custom useragent leaving the standard navigation unchanged.
Add possibility to reactivate the metatag view for desktop mode.
The menu item in the hamburger menu applies to the tab only,
whereas the content setting is intended for use in a specific site.
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
@@ -16,23 +16,29 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
chrome/android/chrome_java_sources.gni | 1 +
.../layout/custom_useragent_preferences.xml | 106 ++++++++++
.../android/java/res/xml/main_preferences.xml | 5 +
.../java/res/xml/useragent_preferences.xml | 31 +++
.../java/res/xml/useragent_preferences.xml | 25 +++
.../chrome/browser/app/ChromeActivity.java | 2 +-
.../init/ChromeBrowserInitializer.java | 3 +
.../PrivacyPreferencesManagerImpl.java | 42 ++++
.../settings/UserAgentPreferences.java | 188 ++++++++++++++++++
.../chromium/chrome/browser/tab/TabImpl.java | 94 ++++++++-
.../chromium/chrome/browser/tab/TabUtils.java | 24 ++-
.../settings/UserAgentPreferences.java | 183 ++++++++++++++++++
.../browser/tab/RequestDesktopUtils.java | 1 +
.../chromium/chrome/browser/tab/TabImpl.java | 71 +++++--
.../chromium/chrome/browser/tab/TabUtils.java | 17 +-
.../browser/android/content/content_utils.cc | 30 +++
.../preferences/browser_prefs_android.cc | 7 +
.../privacy_preferences_manager_impl.cc | 124 ++++++++++++
.../preferences/ChromePreferenceKeys.java | 7 +-
...ktop_site_web_contents_observer_android.cc | 11 ++
...sktop_site_web_contents_observer_android.h | 2 +
.../preferences/ChromePreferenceKeys.java | 2 -
.../settings/PrivacyPreferencesManager.java | 8 +
.../org/chromium/chrome/browser/tab/Tab.java | 2 +
.../browser/tabmodel/TabWindowManager.java | 2 +
.../tabmodel/TabWindowManagerImpl.java | 18 ++
.../strings/android_chrome_strings.grd | 35 ++++
.../strings/android_chrome_strings.grd | 26 +++
chrome/common/pref_names.h | 8 +
.../widget/RadioButtonWithEditText.java | 11 +
...omiteRequestDesktopSiteContentSetting.java | 76 ++++++++
.../request_desktop_site.grdp | 18 ++
.../widget/RadioButtonWithEditText.java | 11 ++
.../embedder_support/user_agent_utils.cc | 3 +-
.../navigation_controller_android.cc | 4 +
.../navigation_controller_android.h | 1 +
@@ -40,10 +46,12 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../browser/web_contents/web_contents_impl.cc | 6 +-
.../framehost/NavigationControllerImpl.java | 3 +-
content/renderer/render_thread_impl.cc | 1 -
30 files changed, 752 insertions(+), 19 deletions(-)
36 files changed, 794 insertions(+), 32 deletions(-)
create mode 100644 chrome/android/java/res/layout/custom_useragent_preferences.xml
create mode 100644 chrome/android/java/res/xml/useragent_preferences.xml
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteRequestDesktopSiteContentSetting.java
create mode 100644 components/browser_ui/strings/bromite_content_settings/request_desktop_site.grdp
diff --git a/base/base_switches.cc b/base/base_switches.cc
--- a/base/base_switches.cc
@@ -220,7 +228,7 @@ diff --git a/chrome/android/java/res/xml/useragent_preferences.xml b/chrome/andr
new file mode 100644
--- /dev/null
+++ b/chrome/android/java/res/xml/useragent_preferences.xml
@@ -0,0 +1,31 @@
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of Bromite.
@@ -245,13 +253,19 @@ new file mode 100644
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="desktop_mode_switch"
+ android:title="@string/option_desktop_flag"
+ android:summaryOn="@string/option_desktop_flag_on"
+ android:summaryOff="@string/option_desktop_flag_off" />
+
+</PreferenceScreen>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -2741,7 +2741,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
TabUtils.switchUserAgent(
currentTab,
usingDesktopUserAgent,
- /* forcedByUser= */ false,
+ /* forcedByUser= */ true,
UseDesktopUserAgentCaller.ON_MENU_OR_KEYBOARD_ACTION);
// TODO(crbug.com/1456560): Remove this IPH when the usage is low.
RequestDesktopUtils.maybeShowUserEducationPromptForAppMenuSelection(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
@@ -339,7 +353,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/UserAg
new file mode 100644
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java
@@ -0,0 +1,188 @@
@@ -0,0 +1,183 @@
+/*
+ This file is part of Bromite.
+
@@ -381,22 +395,23 @@ new file mode 100644
+import org.chromium.components.browser_ui.widget.RadioButtonWithDescription;
+import org.chromium.components.browser_ui.widget.RadioButtonWithEditText;
+import org.chromium.components.browser_ui.settings.SettingsUtils;
+
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
+
+import org.chromium.components.content_settings.ContentSettingsType;
+import org.chromium.components.browser_ui.site_settings.WebsitePreferenceBridge;
+import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton;
+import org.chromium.chrome.browser.tabmodel.TabWindowManager;
+import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl;
+import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.settings.ProfileDependentSetting;
+import org.chromium.chrome.R;
+
+/**
+ * Fragment that allows the user to configure User Agent related preferences.
+ */
+public class UserAgentPreferences
+ extends PreferenceFragmentCompat implements RadioGroup.OnCheckedChangeListener {
+ extends PreferenceFragmentCompat
+ implements RadioGroup.OnCheckedChangeListener,
+ ProfileDependentSetting {
+
+ private static final String PREF_STICK_DESKTOP_MODE_SWITCH = "desktop_mode_switch";
+ private RadioButtonWithDescription useDefaultAgentSwitch;
+ private RadioButtonWithEditText useCustomAgentSwitch;
+ private RadioButtonWithDescription useDefaultAgentSwitchDesktopMode;
@@ -404,23 +419,17 @@ new file mode 100644
+ private RadioGroup mRadioGroup;
+ private RadioGroup mRadioGroupDesktopMode;
+ private CheckBox mDesktopModeViewportmeta;
+ private Profile mProfile;
+
+ @Override
+ public void setProfile(Profile profile) {
+ mProfile = profile;
+ }
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ getActivity().setTitle(R.string.useragent_settings_title);
+ SettingsUtils.addPreferencesFromResource(this, R.xml.useragent_preferences);
+
+ ChromeSwitchPreference alwaysDesktopModeSwitch =
+ (ChromeSwitchPreference) findPreference(PREF_STICK_DESKTOP_MODE_SWITCH);
+ boolean enabled = ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
+ alwaysDesktopModeSwitch.setChecked(enabled);
+ alwaysDesktopModeSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
+ ChromeSharedPreferences.getInstance().writeBoolean(
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, (boolean) newValue);
+ UpdateAllTabs();
+ return true;
+ });
+ }
+
+ @Override
@@ -500,8 +509,8 @@ new file mode 100644
+ }
+
+ private void UpdateAllTabs() {
+ final boolean alwaysDesktopModeEnabled = ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, false);
+ final boolean alwaysDesktopModeEnabled = WebsitePreferenceBridge.isCategoryEnabled(
+ mProfile, ContentSettingsType.REQUEST_DESKTOP_SITE);
+ TabWindowManagerSingleton.getInstance().SetOverrideUserAgentForAllTabs(alwaysDesktopModeEnabled);
+ }
+
@@ -528,99 +537,79 @@ new file mode 100644
+ UpdateAllTabs();
+ }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/RequestDesktopUtils.java
@@ -139,6 +139,7 @@ public class RequestDesktopUtils {
*/
public static void setRequestDesktopSiteContentSettingsForUrl(
Profile profile, GURL url, boolean useDesktopUserAgent) {
+ if ((true)) return;
boolean isIncognito =
Profile.getBrowserProfileTypeFromProfile(profile) == BrowserProfileType.INCOGNITO;
String domainWildcardPattern =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java
@@ -93,6 +93,11 @@ import org.chromium.chrome.browser.preferences.Pref;
@@ -63,6 +63,9 @@ import org.chromium.components.autofill.AutofillFeatures;
import org.chromium.components.autofill.AutofillProvider;
import org.chromium.components.autofill.AutofillSelectionActionMenuDelegate;
import org.chromium.components.autofill.AutofillSelectionMenuItemHelper;
+import org.chromium.components.content_settings.ContentSettingValues;
+import org.chromium.components.content_settings.ContentSettingsType;
+import org.chromium.components.browser_ui.site_settings.WebsitePreferenceBridge;
import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.components.embedder_support.view.ContentView;
@@ -93,6 +96,9 @@ import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.profiles.ProfileManager;
import org.chromium.components.user_prefs.UserPrefs;
+import org.chromium.content_public.browser.NavigationController;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
+import org.chromium.components.embedder_support.util.UrlUtilities;
+
/**
* Implementation of the interface {@link Tab}. Contains and manages a {@link ContentView}. This
* class is not intended to be extended.
@@ -627,6 +632,32 @@ class TabImpl implements Tab {
params.setOverrideUserAgent(calculateUserAgentOverrideOption(null));
@@ -678,11 +684,6 @@ class TabImpl implements Tab {
return true;
}
- // If desktop mode window setting is enabled, move switchUserAgentIfNeeded() from
- // loadIfNeeded() to restoreIfNeeded(); to avoid reload without explicit user intent.
- if (!ContentFeatureMap.isEnabled(ContentFeatureList.REQUEST_DESKTOP_SITE_WINDOW_SETTING)) {
- switchUserAgentIfNeeded(UseDesktopUserAgentCaller.LOAD_IF_NEEDED + caller);
- }
restoreIfNeeded(caller);
return true;
}
@@ -1745,13 +1746,6 @@ class TabImpl implements Tab {
}
+ final boolean stickyDesktopModeEnabled = ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
+ if (stickyDesktopModeEnabled) {
+ boolean alwaysDesktopModeEnabled = ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, false);
+
+ if (UrlUtilities.isInternalScheme(UrlFormatter.fixupUrl(params.getUrl()))) {
+ alwaysDesktopModeEnabled = false;
+ }
+
+ WebContents webContents = this.getWebContents();
+ if (webContents != null) {
+ NavigationController navigationController = webContents.getNavigationController();
+ boolean currentUseDesktopUserAgent = navigationController.getUseDesktopUserAgent();
+ if (currentUseDesktopUserAgent != alwaysDesktopModeEnabled)
+ navigationController.setUseDesktopUserAgent(alwaysDesktopModeEnabled, false,
+ UseDesktopUserAgentCaller.OTHER);
+ }
+
+ if (alwaysDesktopModeEnabled) {
+ params.setOverrideUserAgent((int)UserAgentOverrideOption.TRUE);
+ } else {
+ params.setOverrideUserAgent((int)UserAgentOverrideOption.FALSE);
+ }
+ }
+
LoadUrlResult result = loadUrlInternal(params, fixedUrl);
for (TabObserver observer : mObservers) {
@@ -1581,9 +1612,17 @@ class TabImpl implements Tab {
mWebContents.setImportance(mImportance);
- ContentUtils.setUserAgentOverride(
+ if (ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false) &&
+ ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, false)) {
+ ContentUtils.setUserAgentOverride(
+ mWebContents, true);
+ } else {
+ ContentUtils.setUserAgentOverride(
mWebContents,
calculateUserAgentOverrideOption(null) == UserAgentOverrideOption.TRUE);
+ }
mContentView.addOnAttachStateChangeListener(mAttachStateChangeListener);
updateInteractableState();
@@ -1756,6 +1795,10 @@ class TabImpl implements Tab {
if (mWebContents != null) {
- // If desktop mode window setting is enabled, move switchUserAgentIfNeeded() from
- // loadIfNeeded() to restoreIfNeeded(); to avoid reload without explicit user
- // intent.
- if (ContentFeatureMap.isEnabled(
- ContentFeatureList.REQUEST_DESKTOP_SITE_WINDOW_SETTING)) {
- switchUserAgentIfNeeded(UseDesktopUserAgentCaller.LOAD_IF_NEEDED + caller);
- }
mWebContents.getNavigationController().loadIfNecessary();
}
mIsBeingRestored = true;
for (TabObserver observer : mObservers) observer.onRestoreStarted(this);
+ if(overrideUserAgentWhenUnFrozen != UserAgentOverrideOption.INHERIT) {
+ SetOverrideUserAgent(overrideUserAgentWhenUnFrozen == (int)UserAgentOverrideOption.TRUE ? true : false,
+ /*forcedByUser*/ true);
+ }
} finally {
TraceEvent.end("Tab.restoreIfNeeded");
@@ -2061,6 +2055,11 @@ class TabImpl implements Tab {
url = webContents.getVisibleUrl();
}
@@ -2051,6 +2094,13 @@ class TabImpl implements Tab {
}
private @UserAgentOverrideOption int calculateUserAgentOverrideOption(@Nullable GURL url) {
+ if (ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false) &&
+ ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, false)) {
+ return UserAgentOverrideOption.INHERIT;
+ }
+ if (tabUserAgent == TabUserAgent.MOBILE)
+ return UserAgentOverrideOption.FALSE;
+ else if (tabUserAgent == TabUserAgent.DESKTOP)
+ return UserAgentOverrideOption.TRUE;
+
WebContents webContents = getWebContents();
boolean currentRequestDesktopSite = TabUtils.isUsingDesktopUserAgent(webContents);
@TabUserAgent int tabUserAgent = TabUtils.getTabUserAgent(this);
@@ -2132,6 +2182,48 @@ class TabImpl implements Tab {
// Do not override UA if there is a tab level setting.
if (tabUserAgent != TabUserAgent.DEFAULT) {
recordHistogramUseDesktopUserAgent(currentRequestDesktopSite);
@@ -2132,6 +2131,54 @@ class TabImpl implements Tab {
}
}
@@ -628,10 +617,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
+
+ public void SetOverrideUserAgent(boolean usingDesktopUserAgent, boolean forcedByUser) {
+ WebContents webContents = this.getWebContents();
+ overrideUserAgentWhenUnFrozen = UserAgentOverrideOption.INHERIT;
+
+ GURL url = this.getUrl();
+ if (usingDesktopUserAgent) {
+ GURL url = this.getUrl();
+ if (webContents == null && this.getPendingLoadParams() != null) {
+ url = UrlFormatter.fixupUrl(this.getPendingLoadParams().getUrl());
+ }
@@ -641,7 +629,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
+
+ if (forcedByUser) {
+ @TabUserAgent
+ int tabUserAgent = usingDesktopUserAgent ? TabUserAgent.DESKTOP : TabUserAgent.MOBILE;
+ int tabUserAgent = TabUserAgent.DEFAULT;
+ @ContentSettingValues
+ int contentSetting = WebsitePreferenceBridge.getContentSetting(
+ mProfile, ContentSettingsType.REQUEST_DESKTOP_SITE, url, url);
+ if (!usingDesktopUserAgent
+ && contentSetting != ContentSettingValues.BLOCK) {
+ tabUserAgent = TabUserAgent.MOBILE;
+ } else if (usingDesktopUserAgent
+ && contentSetting != ContentSettingValues.ALLOW) {
+ tabUserAgent = TabUserAgent.DESKTOP;
+ }
+
+ setUserAgent(tabUserAgent);
+ }
+
@@ -660,10 +659,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
+ this.getPendingLoadParams().setOverrideUserAgent((int)UserAgentOverrideOption.FALSE);
+ }
+ }
+ else {
+ overrideUserAgentWhenUnFrozen = usingDesktopUserAgent ? UserAgentOverrideOption.TRUE :
+ UserAgentOverrideOption.FALSE;
+ }
+ }
+
@NativeMethods
@@ -683,7 +678,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.ja
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -124,17 +128,15 @@ public class TabUtils {
@@ -124,18 +128,7 @@ public class TabUtils {
// TODO(crbug.com/1413060): Remove param forcedByUser from TabUtils#switchUserAgent.
public static void switchUserAgent(
Tab tab, boolean switchToDesktop, boolean forcedByUser, int caller) {
@@ -698,18 +693,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.ja
- tabUserAgent = TabUserAgent.DEFAULT;
- }
- tab.setUserAgent(tabUserAgent);
+ ChromeSharedPreferences.getInstance().writeBoolean(
+ ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, switchToDesktop);
+
+ final boolean stickyDesktopModeEnabled = ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
+ if (stickyDesktopModeEnabled) {
+ TabWindowManagerSingleton.getInstance().SetOverrideUserAgentForAllTabs(switchToDesktop);
+ } else {
+ tab.SetOverrideUserAgent(switchToDesktop, forcedByUser);
}
- }
+ tab.SetOverrideUserAgent(switchToDesktop, forcedByUser);
}
/**
diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/android/content/content_utils.cc
--- a/chrome/browser/android/content/content_utils.cc
+++ b/chrome/browser/android/content/content_utils.cc
@@ -919,27 +907,69 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl
+ enabled);
+ UpdateOverrideUserAgent();
+}
diff --git a/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc b/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc
--- a/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc
+++ b/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc
@@ -8,6 +8,7 @@
#include "base/command_line.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/android/tab_model/tab_model.h"
#include "chrome/common/chrome_switches.h"
#include "components/content_settings/core/common/content_settings_utils.h"
#include "components/content_settings/core/common/pref_names.h"
@@ -36,6 +37,7 @@ RequestDesktopSiteWebContentsObserverAndroid::
if (base::FeatureList::IsEnabled(
features::kRequestDesktopSiteWindowSetting)) {
pref_service_ = profile->GetPrefs();
+ tab_android_ = TabAndroid::FromWebContents(contents);
}
}
@@ -51,6 +53,15 @@ void RequestDesktopSiteWebContentsObserverAndroid::DidStartNavigation(
return;
}
+ // Stop UA override if there is a tab level setting.
+ TabModel::TabUserAgent tabSetting =
+ tab_android_
+ ? static_cast<TabModel::TabUserAgent>(tab_android_->GetUserAgent())
+ : TabModel::TabUserAgent::DEFAULT;
+ if (tabSetting != TabModel::TabUserAgent::DEFAULT) {
+ return;
+ }
+
const GURL& url = navigation_handle->GetParentFrameOrOuterDocument()
? navigation_handle->GetParentFrameOrOuterDocument()
->GetOutermostMainFrame()
diff --git a/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.h b/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.h
--- a/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.h
+++ b/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.h
@@ -5,6 +5,7 @@
#ifndef CHROME_BROWSER_CONTENT_SETTINGS_REQUEST_DESKTOP_SITE_WEB_CONTENTS_OBSERVER_ANDROID_H_
#define CHROME_BROWSER_CONTENT_SETTINGS_REQUEST_DESKTOP_SITE_WEB_CONTENTS_OBSERVER_ANDROID_H_
+#include "chrome/browser/android/tab_android.h"
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
@@ -37,6 +38,7 @@ class RequestDesktopSiteWebContentsObserverAndroid
scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
raw_ptr<PrefService> pref_service_ = nullptr;
+ raw_ptr<TabAndroid> tab_android_ = nullptr;
WEB_CONTENTS_USER_DATA_KEY_DECL();
};
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
@@ -888,6 +888,9 @@ public final class ChromePreferenceKeys {
public static final String BLUETOOTH_NOTIFICATION_IDS = "Chrome.Bluetooth.NotificationIds";
public static final String USB_NOTIFICATION_IDS = "Chrome.USB.NotificationIds";
+ public static final String USERAGENT_STICKY_DESKTOP_MODE = "Chrome.UserAgent.StickyDesktopMode";
+ public static final String USERAGENT_ALWAYS_DESKTOP_MODE = "Chrome.UserAgent.AlwaysDesktopMode";
+
/**
* These values are currently used as SharedPreferences keys, along with the keys in
* {@link LegacyChromePreferenceKeys#getKeysInUse()}. Add new SharedPreferences keys
@@ -1019,8 +1022,8 @@ public final class ChromePreferenceKeys {
@@ -1019,8 +1019,6 @@ public final class ChromePreferenceKeys {
SIGNIN_PROMO_NTP_LAST_SHOWN_TIME,
SYNC_PROMO_TOTAL_SHOW_COUNT,
SEARCH_RESUMPTION_MODULE_COLLAPSE_ON_NTP,
- SWAA_TIMESTAMP,
- SWAA_STATUS,
+ USERAGENT_STICKY_DESKTOP_MODE,
+ USERAGENT_ALWAYS_DESKTOP_MODE,
TABBED_ACTIVITY_LAST_VISIBLE_TIME_MS,
TAB_DECLUTTER_ARCHIVE_ENABLED,
TAB_DECLUTTER_ARCHIVE_TIME_DELTA_HOURS,
@@ -1003,7 +1033,7 @@ diff --git a/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chro
+
+ for (int tabIdex = 0; tabIdex < model.getCount(); tabIdex++) {
+ Tab theTab = model.getTabAt(tabIdex);
+ theTab.SetOverrideUserAgent(usingDesktopUserAgent, /*forcedByUser*/ true);
+ theTab.SetOverrideUserAgent(usingDesktopUserAgent, /*forcedByUser*/ false);
+ }
+ }
+ }
@@ -1016,7 +1046,7 @@ diff --git a/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chro
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
@@ -239,6 +239,41 @@ CHAR_LIMIT guidelines:
@@ -239,6 +239,32 @@ CHAR_LIMIT guidelines:
Visit help page
</message>
@@ -1027,15 +1057,6 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
+ <message name="IDS_USERAGENT_SETTINGS_TITLE" desc="Title of the User Agent screen. [CHAR-LIMIT=32]">
+ Customize User Agent
+ </message>
+ <message name="IDS_OPTION_DESKTOP_FLAG" desc="The label of the option that allows users to sticky desktop mode view flag under hambuger menu.">
+ Current behaviour for desktop mode toggle in hamburger menu
+ </message>
+ <message name="IDS_OPTION_DESKTOP_FLAG_ON" desc="The label of the option that allows users to sticky desktop mode view flag under hambuger menu. [CHAR-LIMIT=32]">
+ Applies to all tabs (sticky mode)
+ </message>
+ <message name="IDS_OPTION_DESKTOP_FLAG_OFF" desc="The label of the option that revert the hambuger menu flag to actual behaviour. [CHAR-LIMIT=32]">
+ Applies to website
+ </message>
+ <message name="IDS_CUSTOM_UA_FLAG_ON" desc="The label of the option that allows users to define custom user agent.">
+ Use custom user agent
+ </message>
@@ -1076,6 +1097,110 @@ diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
// Boolean indicating whether to show a promo for the quiet notification
// permission UI.
inline constexpr char kQuietNotificationPermissionShouldShowPromo[] =
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteRequestDesktopSiteContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteRequestDesktopSiteContentSetting.java
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteRequestDesktopSiteContentSetting.java
@@ -0,0 +1,76 @@
+/*
+ This file is part of Bromite.
+
+ Bromite is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Bromite is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.components.browser_ui.site_settings.impl;
+
+import org.chromium.components.browser_ui.site_settings.R;
+
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
+import org.chromium.components.content_settings.ContentSettingValues;
+import org.chromium.components.content_settings.ContentSettingsType;
+import org.chromium.content_public.browser.BrowserContextHandle;
+
+import androidx.annotation.Nullable;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import java.util.ArrayList;
+
+public class BromiteRequestDesktopSiteContentSetting extends BromiteCustomContentSetting {
+ public BromiteRequestDesktopSiteContentSetting() {
+ super(/*contentSettingsType*/ ContentSettingsType.REQUEST_DESKTOP_SITE,
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
+ /*allowException*/ true,
+ /*preferenceKey*/ "request_desktop_site",
+ /*profilePrefKey*/ "request_desktop_site_permission_list");
+ }
+
+ @Override
+ public ContentSettingsResources.ResourceItem getResourceItem() {
+ return null;
+ }
+
+ @Override
+ public int getCategorySummary(@Nullable @ContentSettingValues int value) {
+ switch (value) {
+ case ContentSettingValues.ALLOW:
+ return R.string.website_settings_category_request_desktop_site_enabled;
+ case ContentSettingValues.BLOCK:
+ return R.string.website_settings_category_request_desktop_site_disabled;
+ default:
+ return 0;
+ }
+ }
+
+ @Override
+ public int getCategoryDescription() {
+ return R.string.settings_site_settings_request_desktop_site_description;
+ }
+
+ @Override
+ public int getAddExceptionDialogMessage() {
+ return R.string.website_settings_category_request_desktop_site_enabled;
+ }
+
+ @Override
+ public @Nullable Boolean considerException(SiteSettingsCategory category, @ContentSettingValues int value) {
+ return value != ContentSettingValues.ALLOW;
+ }
+}
diff --git a/components/browser_ui/strings/bromite_content_settings/request_desktop_site.grdp b/components/browser_ui/strings/bromite_content_settings/request_desktop_site.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/bromite_content_settings/request_desktop_site.grdp
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_SITE_SETTINGS_TYPE_REQUEST_DESKTOP_SITE" desc="The label used for request desktop site site settings controls." formatter_data="android_java">
+ Request desktop site
+ </message>
+
+ <message name="IDS_SETTINGS_SITE_SETTINGS_REQUEST_DESKTOP_SITE_DESCRIPTION" desc="" formatter_data="android_java">
+ Request desktop site
+ </message>
+
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_REQUEST_DESKTOP_SITE_ENABLED" desc="" formatter_data="android_java">
+ Request desktop site
+ </message>
+
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_REQUEST_DESKTOP_SITE_DISABLED" desc="" formatter_data="android_java">
+ Request mobile site
+ </message>
+</grit-part>
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java
--- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java
+++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java
+1 -1
View File
@@ -1252,7 +1252,7 @@ diff --git a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/L
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
@@ -3290,7 +3290,29 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
@@ -3281,7 +3281,29 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>clear the Chrome da
<ph name="APP_NAME">%1$s<ex>Google Maps</ex></ph> will open in Chrome. By continuing, you agree to the <ph name="BEGIN_LINK1">&lt;LINK1&gt;</ph>Google Terms of Service<ph name="END_LINK1">&lt;/LINK1&gt;</ph>, and the <ph name="BEGIN_LINK2">&lt;LINK2&gt;</ph>Google Chrome and ChromeOS Additional Terms of Service<ph name="END_LINK2">&lt;/LINK2&gt;</ph>. The <ph name="BEGIN_LINK3">&lt;LINK3&gt;</ph>Privacy Policy<ph name="END_LINK3">&lt;/LINK3&gt;</ph> also applies.
</message>
<message name="IDS_FRE_ACCEPT_CONTINUE" desc="Text for first page accept and continue button [CHAR_LIMIT=20]">
+4 -5
View File
@@ -8,7 +8,7 @@ Subject: bromite build utils
build/bromite/bromite_utils.gni | 79 +++++++++++++
build/bromite/gyp/cpp_bromite_include.py | 35 ++++++
build/bromite/gyp/cpp_bromite_include.pydeps | 9 ++
build/bromite/gyp/java_bromite_impl.py | 108 ++++++++++++++++++
build/bromite/gyp/java_bromite_impl.py | 107 ++++++++++++++++++
build/bromite/gyp/java_bromite_impl.pydeps | 9 ++
build/config/BUILDCONFIG.gn | 1 +
build/config/android/rules.gni | 6 +-
@@ -20,7 +20,7 @@ Subject: bromite build utils
mojo/public/tools/mojom/mojom_parser.py | 22 +++-
tools/grit/grit/grd_reader.py | 27 ++++-
tools/grit/preprocess_if_expr.py | 32 +++++-
17 files changed, 488 insertions(+), 19 deletions(-)
17 files changed, 487 insertions(+), 19 deletions(-)
create mode 100644 build/bromite/bromite_utils.gni
create mode 100644 build/bromite/gyp/cpp_bromite_include.py
create mode 100644 build/bromite/gyp/cpp_bromite_include.pydeps
@@ -301,7 +301,7 @@ diff --git a/build/bromite/gyp/java_bromite_impl.py b/build/bromite/gyp/java_bro
new file mode 100644
--- /dev/null
+++ b/build/bromite/gyp/java_bromite_impl.py
@@ -0,0 +1,108 @@
@@ -0,0 +1,107 @@
+#!/usr/bin/env python3
+
+import argparse
@@ -338,8 +338,7 @@ new file mode 100644
+
+ import_clause = '\n'.join(
+ ['import ' + namespace + '.' + f + ';' for f in strings])
+ print(namespace)
+ print(static_classes)
+
+ if static_classes:
+ add_clause = '\n\t'.join(['\tadd(' + f + '.getInstance());' for f in strings])
+ else:
+5 -1
View File
@@ -137,13 +137,16 @@
|**Enable -fwrapv in Clang for non-UBSan builds** <br><sub><nobr> Thu, 22 Dec 2016 07:15:34 -0500</nobr> <br>File: [Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch](/build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch) <br><nobr>Author: Daniel</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |Using -fwrapv (notably only when not using signed integer overflow checking -<br>since it will override it and result in not performing checks) is just common<br>sense since it eliminates the chance of security vulnerabilities being<br>introduced by optimizations based on signed overflow being undefined.<br>That has happened before, and those optimizations don't even add up to a 0.1%<br>performance increase for this kind of software. It's not worth having.<br>The Linux kernel passes -fwrapv and also -fno-strict-aliasing to disable those<br>dangerous optimizations (since there is so much incorrect code they can break).<br>In fact, it is easy to point to dozens of known examples of invalid code that<br>could potentially be broken by those optimizations.<br>It is not acceptable for projects to be using optimizations that are known to<br>be broken with a bunch of code in their tree.<br>They put barely any effort into even fixing the known cases.<br>Chromium has blacklists for UBSan for 'false positives' (none of which are<br>actually false positives, but rather "undefined, but not a bug beyond<br>potentially being broken by optimizations or even code generation without<br>them") and also for components too full of these bugs for them to currently<br>want to bother with it. That includes a bunch of signed overflow issues<br>(there is sadly no detection for aliasing violations, which are fairly common,<br>but not that common).<br>Ideally, -fwrapv could be always passed, but unfortunately the way it is<br>implemented has silly interactions with other switches.<br>The reason it would still make sense to pass it is because due to their UBSan<br>blacklists, they get far from full coverage with it, so -fwrapv would still<br>be better than nothing where it's not being used.<br>Since -fwrapv makes signed integer overflow well-defined, Clang will disable<br>the UBSan checks for signed integer overflow, including in the<br>production-oriented trapping mode used for hardening.<br>Excerpt from https://github.com/bromite/bromite/issues/226|
|**Enable Android Dynamic Performance Framework** <br><sub><nobr> Wed, 23 Aug 2023 13:49:19 +0000</nobr> <br>File: [Enable-Android-Dynamic-Performance-Framework.patch](/build/patches/Enable-Android-Dynamic-Performance-Framework.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> ||
|**Enable Certificate Transparency** <br><sub><nobr> Fri, 10 Jun 2022 14:20:02 +0200</nobr> <br>File: [Enable-Certificate-Transparency.patch](/build/patches/Enable-Certificate-Transparency.patch) <br><nobr>Author: csagan5</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |Reporting/auditing functionalities are disabled; a flag is exposed.<br>Add guard to make sure that certificate transparency stays enabled<br>by default.|
|**Enable Do-Not-Track by default** <br><sub><nobr> Wed, 29 May 2024 13:49:01 +0000</nobr> <br>File: [Enable-Do-Not-Track-by-default.patch](/build/patches/Enable-Do-Not-Track-by-default.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> ||
|**Enable Document Open Inheritance Removal** <br><sub><nobr> Tue, 28 Mar 2023 15:43:18 +0000</nobr> <br>File: [Enable-Document-Open-Inheritance-Removal.patch](/build/patches/Enable-Document-Open-Inheritance-Removal.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> ||
|**Enable Global Privacy Control** <br><sub><nobr> Wed, 29 May 2024 13:43:50 +0000</nobr> <br>File: [Enable-Global-Privacy-Control.patch](/build/patches/Enable-Global-Privacy-Control.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> ||
|**Enable HEVC by default** <br><sub><nobr> Tue, 27 Sep 2022 23:39:54 +0200</nobr> <br>File: [Enable-HEVC-by-default.patch](/build/patches/Enable-HEVC-by-default.patch) <br><nobr>Author: csagan5</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |Add a guard to avoid setting to be disabled upstream.|
|**Enable ImprovedBookmarks by default** <br><sub><nobr> Tue, 12 Sep 2023 12:39:23 +0000</nobr> <br>File: [Enable-ImprovedBookmarks-by-default.patch](/build/patches/Enable-ImprovedBookmarks-by-default.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> ||
|**Enable PermuteTLSExtensions by default** <br><sub><nobr> Fri, 2 Dec 2022 01:18:14 +0100</nobr> <br>File: [Enable-PermuteTLSExtensions-by-default.patch](/build/patches/Enable-PermuteTLSExtensions-by-default.patch) <br><nobr>Author: csagan5</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> ||
|**Enable StrictOriginIsolation and SitePerProcess** <br><sub><nobr> Sat, 29 Jan 2022 15:25:19 +0000</nobr> <br>File: [Enable-StrictOriginIsolation-and-SitePerProcess.patch](/build/patches/Enable-StrictOriginIsolation-and-SitePerProcess.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |Enable the StrictOriginIsolation feature and the SitePerProcess preference.<br>SitePerProcess: bypass any device memory size check.<br>SitePerProcess: always consider enterprise policies applicable.|
|**Enable darken websites checkbox in themes** <br><sub><nobr> Thu, 20 Aug 2020 20:15:34 +0200</nobr> <br>File: [Enable-darken-websites-checkbox-in-themes.patch](/build/patches/Enable-darken-websites-checkbox-in-themes.patch) <br><nobr>Author: csagan5</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |Unexpire #darken-websites-checkbox-in-themes-setting|
|**Enable gwp asan on Android** <br><sub><nobr> Fri, 12 Jan 2024 15:04:40 +0000</nobr> <br>File: [Enable-gwp-asan-on-Android.patch](/build/patches/Enable-gwp-asan-on-Android.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: </nobr> |the patch enables gwp asan in android and changes the activation<br>conditions to 50% for all build configs.<br>in android there is a test function accessible in the developer settings.|
|**Enable menu on reload button** <br><sub><nobr> Sat, 25 May 2024 10:34:38 +0000</nobr> <br>File: [Enable-menu-on-reload-button.patch](/build/patches/Enable-menu-on-reload-button.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> |Activate right-button submenu in reload (desktop platforms).<br>Patch derived from the ungoogled-chromium patch of the same name.|
|**Enable native Android autofill** <br><sub><nobr> Sun, 24 Oct 2021 16:54:04 +0000</nobr> <br>File: [Enable-native-Android-autofill.patch](/build/patches/Enable-native-Android-autofill.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |There are 2 different types of autofill: one managed via GCM and the<br>native Android one that uses the provider assigned by the user<br>(which can be any user installed app like Bitwarden for example).<br>In chromium GCM is active while in the WebView the latter.<br>This patch uses WebView code to enable native Android autofill<br>along with browser-managed autofill.<br>A separate toggle is introduced to enable autofill in incognito mode.<br>See also: https://github.com/bromite/bromite/issues/547|
|**Enable network isolation features** <br><sub><nobr> Thu, 10 Dec 2020 21:52:35 +0100</nobr> <br>File: [Enable-network-isolation-features.patch](/build/patches/Enable-network-isolation-features.patch) <br><nobr>Author: csagan5</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |Enable SplitCacheByNetworkIsolationKey, kSplitHostCacheByNetworkIsolationKey,<br>kPartitionConnectionsByNetworkIsolationKey, kPartitionHttpServerPropertiesByNetworkIsolationKey,<br>kPartitionSSLSessionsByNetworkIsolationKey, PartitionExpectCTStateByNetworkIsolationKey,<br>PartitionNelAndReportingByNetworkIsolationKey|
|**Enable percent based scrolling on Windows** <br><sub><nobr> Tue, 27 Feb 2024 08:53:37 +0000</nobr> <br>File: [Enable-percent-based-scrolling-on-Windows.patch](/build/patches/Enable-percent-based-scrolling-on-Windows.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> |mousewheel and keyboard scrolls will scroll by a<br>percentage of the scroller size and the default scroll<br>animation is replaced with Impulse-style scroll animations|
@@ -182,6 +185,7 @@
|**Lock Profile Cookie Database** <br><sub><nobr> Mon, 17 Jul 2023 15:24:54 +0000</nobr> <br>File: [Lock-Profile-Cookie-Database.patch](/build/patches/Lock-Profile-Cookie-Database.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> ||
|**Log dangling attributes in some html elements** <br><sub><nobr> Mon, 5 Jun 2023 17:06:03 +0000</nobr> <br>File: [Log-dangling-attributes-in-some-html-elements.patch](/build/patches/Log-dangling-attributes-in-some-html-elements.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> |Log for iframes and the base tag all attributes<br>containing newlines or the less-then sign that can be exploited<br>to extract or send otherwise inaccessible information.<br>under enable-log-dangling-attributes about flag|
|**Logcat crash reports UI** <br><sub><nobr> Tue, 15 Jun 2021 11:49:43 +0000</nobr> <br>File: [Logcat-crash-reports-UI.patch](/build/patches/Logcat-crash-reports-UI.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> ||
|**Media fingerprinting mitigations** <br><sub><nobr> Thu, 30 May 2024 11:42:21 +0000</nobr> <br>File: [Media-fingerprinting-mitigations.patch](/build/patches/Media-fingerprinting-mitigations.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> |Removes the ability to understand the capabilities of the video card in windows.<br>See https://github.com/uazo/cromite/issues/862|
|**Modify default preferences** <br><sub><nobr> Sat, 2 May 2020 00:25:25 +0200</nobr> <br>File: [Modify-default-preferences.patch](/build/patches/Modify-default-preferences.patch) <br><nobr>Author: csagan5</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> ||
|**Move navigation bar to bottom** <br><sub><nobr> Tue, 18 Jan 2022 07:43:32 +0000</nobr> <br>File: [Move-navigation-bar-to-bottom.patch](/build/patches/Move-navigation-bar-to-bottom.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |Adds an accessibility flag that allows navigation bar to be moved to the bottom.<br>Unlike what is present in other browsers, this actually moves the bar below,<br>without creating other elements.<br>The bottom bar will also be colored as the navigation bar to make the interface<br>more pleasant and fixes upstream bug 1285311.<br>Support for tablet mode is also included.<br>Need: bromite-build-utils.patch|
|**Move some account settings back to privacy settings** <br><sub><nobr> Sun, 4 Oct 2020 12:58:17 +0200</nobr> <br>File: [Move-some-account-settings-back-to-privacy-settings.patch](/build/patches/Move-some-account-settings-back-to-privacy-settings.patch) <br><nobr>Author: csagan5</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |Search suggestions, autofill assistant and contextual search|
@@ -246,7 +250,7 @@
|**Use 64-bit WebView processes** <br><sub><nobr> Thu, 26 Jan 2017 01:30:12 -0500</nobr> <br>File: [Use-64-bit-WebView-processes.patch](/build/patches/Use-64-bit-WebView-processes.patch) <br><nobr>Author: Daniel</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |64-bit processes introduce 10% or so higher memory consumption.<br>The reason for preferring 64-bit processes is providing substantially better<br>exploit mitigations at the expense of slightly more memory usage.<br>In addition to the standard mitigations, it also enables usage of<br>https://github.com/AndroidHardening/hardened_malloc (where available).<br>It will provide high entropy ASLR (24-bit to 32-bit depending on whether the<br>kernel uses 3 or 4 level page tables rather than 16-bit for 32-bit processes),<br>high entropy stack canaries (56/64-bit instead of 24/32-bit depending on<br>whether a zero byte is used) and also features like pointer authentication and<br>memory tagging when those are made available in the future.<br>The reason why upstream started preferring 32-bit processes is to save memory,<br>particularly since saving memory makes it feasible to use finer-grained<br>sandboxing.|
|**Use dummy DFM installer** <br><sub><nobr> Sun, 15 Dec 2019 19:40:37 +0100</nobr> <br>File: [Use-dummy-DFM-installer.patch](/build/patches/Use-dummy-DFM-installer.patch) <br><nobr>Author: csagan5</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> ||
|**Use list mode for tab switcher** <br><sub><nobr> Tue, 12 Dec 2023 16:38:10 +0000</nobr> <br>File: [Use-list-mode-for-tab-switcher.patch](/build/patches/Use-list-mode-for-tab-switcher.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> |Added a setting for the option<br>need: Add-cromite-flags-support.patch|
|**User agent customization** <br><sub><nobr> Fri, 9 Apr 2021 20:09:08 +0000</nobr> <br>File: [User-agent-customization.patch](/build/patches/User-agent-customization.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |Add flag to always view the desktop site for all websites<br>Add possibility to define a custom User agent for mobile and desktop mode.<br>Add possibility to reactivate the metatag view for desktop mode, allowing users to choose<br>to use the flag in the hamburger menu to navigate with a custom useragent leaving the standard navigation unchanged.|
|**User agent customization** <br><sub><nobr> Fri, 9 Apr 2021 20:09:08 +0000</nobr> <br>File: [User-agent-customization.patch](/build/patches/User-agent-customization.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-3.0-only</nobr> |Add possibility to define a custom User agent for mobile and desktop mode.<br>Add possibility to reactivate the metatag view for desktop mode.<br>The menu item in the hamburger menu applies to the tab only,<br>whereas the content setting is intended for use in a specific site.|
|**Viewport Protection flag** <br><sub><nobr> Tue, 20 Dec 2022 11:06:42 +0000</nobr> <br>File: [Viewport-Protection-flag.patch](/build/patches/Viewport-Protection-flag.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: </nobr> |Scale the viewport and the screen by a random factor to<br>prevent coordinate-based fingerprinting scripts.<br>The factor is changed at each change of origin.<br>The feature is controlled by a feature flag (default enabled)<br>Require: Content-settings-infrastructure.patch|
|**WIN Add some prefs to secure preferences** <br><sub><nobr> Mon, 15 May 2023 13:35:24 +0000</nobr> <br>File: [WIN-Add-some-prefs-to-secure-preferences.patch](/build/patches/WIN-Add-some-prefs-to-secure-preferences.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: </nobr> ||
|**WIN Disable TabHoverCard images** <br><sub><nobr> Tue, 14 Mar 2023 15:58:00 +0000</nobr> <br>File: [WIN-Disable-TabHoverCard-images.patch](/build/patches/WIN-Disable-TabHoverCard-images.patch) <br><nobr>Author: uazo</nobr> <br><nobr>Context: </nobr> <br><nobr>License: GPL-2.0-or-later</nobr> ||
+1 -1
View File
@@ -1 +1 @@
125.0.6422.76
125.0.6422.113