|
@@ -1,5 +1,5 @@
|
|
|
From: uazo <uazo@users.noreply.github.com>
|
|
|
-Date: Mon, 26 Oct 2020 16:50:15 +0000
|
|
|
+Date: Fri, 9 Apr 2021 20:09:08 +0000
|
|
|
Subject: User agent customization
|
|
|
|
|
|
Add flag to always view the desktop site for all websites
|
|
@@ -11,36 +11,34 @@ to use the flag in the hamburger menu to navigate with a custom useragent leavin
|
|
|
base/base_switches.h | 2 +
|
|
|
chrome/android/chrome_java_resources.gni | 2 +
|
|
|
chrome/android/chrome_java_sources.gni | 1 +
|
|
|
- .../layout/custom_useragent_preferences.xml | 108 ++++++++++
|
|
|
+ .../layout/custom_useragent_preferences.xml | 106 ++++++++++
|
|
|
.../android/java/res/xml/main_preferences.xml | 5 +
|
|
|
.../java/res/xml/useragent_preferences.xml | 31 +++
|
|
|
- .../chrome/browser/app/ChromeActivity.java | 21 +-
|
|
|
.../init/ChromeBrowserInitializer.java | 3 +
|
|
|
.../PrivacyPreferencesManagerImpl.java | 42 ++++
|
|
|
- .../settings/UserAgentPreferences.java | 185 ++++++++++++++++++
|
|
|
- .../chromium/chrome/browser/tab/TabImpl.java | 83 +++++++-
|
|
|
+ .../settings/UserAgentPreferences.java | 188 ++++++++++++++++++
|
|
|
+ .../chromium/chrome/browser/tab/TabImpl.java | 71 +++++++
|
|
|
+ .../chromium/chrome/browser/tab/TabUtils.java | 18 +-
|
|
|
.../browser/android/content/content_utils.cc | 28 +++
|
|
|
.../preferences/browser_prefs_android.cc | 7 +
|
|
|
- .../privacy_preferences_manager_impl.cc | 114 +++++++++++
|
|
|
- chrome/browser/android/tab_android.cc | 5 +-
|
|
|
- chrome/browser/android/tab_android.h | 3 +-
|
|
|
- .../browser/chrome_content_browser_client.cc | 8 +
|
|
|
+ .../privacy_preferences_manager_impl.cc | 118 +++++++++++
|
|
|
.../preferences/ChromePreferenceKeys.java | 7 +-
|
|
|
.../settings/PrivacyPreferencesManager.java | 8 +
|
|
|
.../org/chromium/chrome/browser/tab/Tab.java | 2 +
|
|
|
- .../browser/tabmodel/TabWindowManager.java | 8 +
|
|
|
+ .../browser/tabmodel/TabWindowManager.java | 3 +
|
|
|
.../tabmodel/TabWindowManagerImpl.java | 18 ++
|
|
|
.../strings/android_chrome_strings.grd | 35 ++++
|
|
|
chrome/common/pref_names.cc | 13 ++
|
|
|
chrome/common/pref_names.h | 8 +
|
|
|
- .../widget/RadioButtonWithEditText.java | 11 ++
|
|
|
+ .../widget/RadioButtonWithEditText.java | 11 +
|
|
|
+ .../embedder_support/user_agent_utils.cc | 7 +
|
|
|
.../navigation_controller_android.cc | 6 +-
|
|
|
.../navigation_controller_android.h | 3 +-
|
|
|
.../renderer_host/render_process_host_impl.cc | 1 +
|
|
|
- .../browser/web_contents/web_contents_impl.cc | 4 +-
|
|
|
+ .../browser/web_contents/web_contents_impl.cc | 6 +
|
|
|
.../framehost/NavigationControllerImpl.java | 6 +-
|
|
|
content/renderer/render_thread_impl.cc | 1 -
|
|
|
- 33 files changed, 767 insertions(+), 14 deletions(-)
|
|
|
+ 31 files changed, 749 insertions(+), 10 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
|
|
@@ -48,8 +46,8 @@ to use the flag in the hamburger menu to navigate with a custom useragent leavin
|
|
|
diff --git a/base/base_switches.cc b/base/base_switches.cc
|
|
|
--- a/base/base_switches.cc
|
|
|
+++ b/base/base_switches.cc
|
|
|
-@@ -164,6 +164,8 @@ const char kForceFieldTrialParams[] = "force-fieldtrial-params";
|
|
|
- const char kEnableThreadInstructionCount[] = "enable-thread-instruction-count";
|
|
|
+@@ -169,6 +169,8 @@ const char kEnableThreadInstructionCount[] = "enable-thread-instruction-count";
|
|
|
+ extern const char kEnableCrashpad[] = "enable-crashpad";
|
|
|
#endif
|
|
|
|
|
|
+const char kDesktopModeViewportMetaEnabled[] = "dm-viewport-meta-enabled";
|
|
@@ -60,7 +58,7 @@ diff --git a/base/base_switches.cc b/base/base_switches.cc
|
|
|
diff --git a/base/base_switches.h b/base/base_switches.h
|
|
|
--- a/base/base_switches.h
|
|
|
+++ b/base/base_switches.h
|
|
|
-@@ -66,6 +66,8 @@ extern const char kEnableThreadInstructionCount[];
|
|
|
+@@ -70,6 +70,8 @@ extern const char kEnableCrashpad[];
|
|
|
extern const char kSchedulerBoostUrgent[];
|
|
|
#endif
|
|
|
|
|
@@ -72,7 +70,7 @@ diff --git a/base/base_switches.h b/base/base_switches.h
|
|
|
diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni
|
|
|
--- a/chrome/android/chrome_java_resources.gni
|
|
|
+++ b/chrome/android/chrome_java_resources.gni
|
|
|
-@@ -998,4 +998,6 @@ chrome_java_resources = [
|
|
|
+@@ -946,4 +946,6 @@ chrome_java_resources = [
|
|
|
"java/res/xml/sync_and_services_preferences.xml",
|
|
|
"java/res/xml/theme_preferences.xml",
|
|
|
"java/res/xml/tracing_preferences.xml",
|
|
@@ -82,7 +80,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja
|
|
|
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
|
|
|
--- a/chrome/android/chrome_java_sources.gni
|
|
|
+++ b/chrome/android/chrome_java_sources.gni
|
|
|
-@@ -1155,6 +1155,7 @@ chrome_java_sources = [
|
|
|
+@@ -1145,6 +1145,7 @@ chrome_java_sources = [
|
|
|
"java/src/org/chromium/chrome/browser/payments/ui/DimmingDialog.java",
|
|
|
"java/src/org/chromium/chrome/browser/payments/ui/LineItem.java",
|
|
|
"java/src/org/chromium/chrome/browser/payments/ui/PaymentAppComparator.java",
|
|
@@ -94,7 +92,7 @@ diff --git a/chrome/android/java/res/layout/custom_useragent_preferences.xml b/c
|
|
|
new file mode 100644
|
|
|
--- /dev/null
|
|
|
+++ b/chrome/android/java/res/layout/custom_useragent_preferences.xml
|
|
|
-@@ -0,0 +1,108 @@
|
|
|
+@@ -0,0 +1,106 @@
|
|
|
+<?xml version="1.0" encoding="utf-8"?>
|
|
|
+<!--
|
|
|
+ This file is part of Bromite.
|
|
@@ -118,8 +116,6 @@ new file mode 100644
|
|
|
+<ScrollView
|
|
|
+ xmlns:android="http://schemas.android.com/apk/res/android"
|
|
|
+ xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
|
-+ android:layout_weight="0"
|
|
|
-+ android:gravity="top"
|
|
|
+ android:layout_width="match_parent"
|
|
|
+ android:layout_height="wrap_content">
|
|
|
+
|
|
@@ -254,65 +250,18 @@ new file mode 100644
|
|
|
+ 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
|
|
|
-@@ -72,6 +72,7 @@ import org.chromium.chrome.browser.app.flags.ChromeCachedFlags;
|
|
|
- import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingDelegateFactory;
|
|
|
- import org.chromium.chrome.browser.app.tab_activity_glue.TabReparentingController;
|
|
|
- import org.chromium.chrome.browser.app.tabmodel.AsyncTabParamsManagerSingleton;
|
|
|
-+import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton;
|
|
|
- import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
|
|
|
- import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
|
|
|
- import org.chromium.chrome.browser.bookmarks.BookmarkModel;
|
|
|
-@@ -209,6 +210,13 @@ import org.chromium.ui.widget.Toast;
|
|
|
- import org.chromium.url.GURL;
|
|
|
- import org.chromium.url.Origin;
|
|
|
- import org.chromium.webapk.lib.client.WebApkNavigationClient;
|
|
|
-+import org.chromium.chrome.browser.tabmodel.TabWindowManager;
|
|
|
-+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
|
|
|
-+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
|
|
-+
|
|
|
-+import org.chromium.chrome.browser.tabmodel.TabWindowManager;
|
|
|
-+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
|
|
|
-+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
|
|
-
|
|
|
- import org.chromium.url.GURL;
|
|
|
-
|
|
|
-@@ -2102,11 +2110,18 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
|
|
|
- } else if (id == R.id.view_source_id) {
|
|
|
- currentTab.getWebContents().getNavigationController().loadUrl(new LoadUrlParams("view-source:"+currentTab.getUrlString()));
|
|
|
- } else if (id == R.id.request_desktop_site_id || id == R.id.request_desktop_site_check_id) {
|
|
|
-- final boolean reloadOnChange = !currentTab.isNativePage();
|
|
|
- final boolean usingDesktopUserAgent =
|
|
|
- currentTab.getWebContents().getNavigationController().getUseDesktopUserAgent();
|
|
|
-- currentTab.getWebContents().getNavigationController().setUseDesktopUserAgent(
|
|
|
-- !usingDesktopUserAgent, reloadOnChange);
|
|
|
-+ SharedPreferencesManager.getInstance().writeBoolean(
|
|
|
-+ ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, !usingDesktopUserAgent);
|
|
|
-+
|
|
|
-+ final boolean stickyDesktopModeEnabled = SharedPreferencesManager.getInstance().readBoolean(
|
|
|
-+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
|
|
|
-+ if (stickyDesktopModeEnabled) {
|
|
|
-+ TabWindowManagerSingleton.getInstance().SetOverrideUserAgentForAllTabs(!usingDesktopUserAgent);
|
|
|
-+ } else {
|
|
|
-+ currentTab.SetOverrideUserAgent(!usingDesktopUserAgent);
|
|
|
-+ }
|
|
|
- RecordUserAction.record("MobileMenuRequestDesktopSite");
|
|
|
- } else if (id == R.id.reader_mode_prefs_id) {
|
|
|
- DomDistillerUIUtils.openSettings(currentTab.getWebContents());
|
|
|
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
|
|
|
-@@ -47,6 +47,7 @@ import org.chromium.content_public.browser.SpeechRecognition;
|
|
|
+@@ -44,6 +44,7 @@ import org.chromium.content_public.browser.DeviceUtils;
|
|
|
+ import org.chromium.content_public.browser.SpeechRecognition;
|
|
|
import org.chromium.content_public.browser.UiThreadTaskTraits;
|
|
|
import org.chromium.net.NetworkChangeNotifier;
|
|
|
- import org.chromium.ui.resources.ResourceExtractor;
|
|
|
+import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl;
|
|
|
|
|
|
import java.io.File;
|
|
|
import java.util.ArrayList;
|
|
|
-@@ -322,11 +323,13 @@ public class ChromeBrowserInitializer {
|
|
|
+@@ -305,11 +306,13 @@ public class ChromeBrowserInitializer {
|
|
|
|
|
|
@Override
|
|
|
public void onSuccess() {
|
|
@@ -388,7 +337,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,185 @@
|
|
|
+@@ -0,0 +1,188 @@
|
|
|
+/*
|
|
|
+ This file is part of Bromite.
|
|
|
+
|
|
@@ -476,6 +425,9 @@ new file mode 100644
|
|
|
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
|
|
|
+ @Nullable Bundle savedInstanceState) {
|
|
|
+ LinearLayout viewGroup = (LinearLayout) super.onCreateView(inflater, container, savedInstanceState);
|
|
|
++ LinearLayout.LayoutParams params =
|
|
|
++ new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
|
++ viewGroup.setLayoutParams(params);
|
|
|
+ ScrollView view = (ScrollView) inflater.inflate(R.layout.custom_useragent_preferences, viewGroup, false);
|
|
|
+ viewGroup.addView(view);
|
|
|
+
|
|
@@ -577,28 +529,21 @@ new file mode 100644
|
|
|
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
|
|
|
-@@ -61,6 +61,18 @@ import org.chromium.ui.base.WindowAndroid;
|
|
|
+@@ -64,6 +64,11 @@ import org.chromium.ui.base.WindowAndroid;
|
|
|
import org.chromium.ui.util.ColorUtils;
|
|
|
import org.chromium.url.GURL;
|
|
|
import org.chromium.url.Origin;
|
|
|
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
|
|
|
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
|
|
-+import org.chromium.content_public.browser.navigation_controller.UserAgentOverrideOption;
|
|
|
-+import org.chromium.content_public.browser.NavigationController;
|
|
|
-+import org.chromium.components.embedder_support.util.UrlUtilities;
|
|
|
-+import org.chromium.components.url_formatter.UrlFormatter;
|
|
|
-+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
|
|
|
-+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
|
|
-+import org.chromium.content_public.browser.navigation_controller.UserAgentOverrideOption;
|
|
|
+import org.chromium.content_public.browser.NavigationController;
|
|
|
+import org.chromium.components.embedder_support.util.UrlUtilities;
|
|
|
+import org.chromium.components.url_formatter.UrlFormatter;
|
|
|
|
|
|
/**
|
|
|
* Implementation of the interface {@link Tab}. Contains and manages a {@link ContentView}.
|
|
|
-@@ -481,6 +493,31 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
|
|
|
- throw new RuntimeException("Tab.loadUrl called when no native side exists");
|
|
|
- }
|
|
|
+@@ -492,6 +497,31 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
|
|
|
+ // Request desktop sites for large screen tablets.
|
|
|
+ params.setOverrideUserAgent(calculateUserAgentOverrideOption());
|
|
|
|
|
|
+ final boolean stickyDesktopModeEnabled = SharedPreferencesManager.getInstance().readBoolean(
|
|
|
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
|
|
@@ -628,34 +573,24 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
|
|
|
// We load the URL from the tab rather than directly from the ContentView so the tab has
|
|
|
// a chance of using a prerenderer page is any.
|
|
|
int loadType = TabImplJni.get().loadUrl(mNativeTabAndroid, params.getUrl(),
|
|
|
-@@ -493,7 +530,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
|
|
|
- params.getReferrer() != null ? params.getReferrer().getPolicy() : 0,
|
|
|
- params.getIsRendererInitiated(), params.getShouldReplaceCurrentEntry(),
|
|
|
- params.getHasUserGesture(), params.getShouldClearHistoryList(),
|
|
|
-- params.getInputStartTimestamp(), params.getIntentReceivedTimestamp());
|
|
|
-+ params.getInputStartTimestamp(), params.getIntentReceivedTimestamp(),
|
|
|
-+ params.getUserAgentOverrideOption());
|
|
|
-
|
|
|
- for (TabObserver observer : mObservers) {
|
|
|
- observer.onLoadUrl(this, params, loadType);
|
|
|
-@@ -1477,6 +1515,10 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
|
|
|
+@@ -1507,6 +1537,10 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
|
|
|
if (mWebContents != null) mWebContents.getNavigationController().loadIfNecessary();
|
|
|
mIsBeingRestored = true;
|
|
|
for (TabObserver observer : mObservers) observer.onRestoreStarted(this);
|
|
|
-+
|
|
|
+ if(overrideUserAgentWhenUnFrozen != UserAgentOverrideOption.INHERIT) {
|
|
|
-+ SetOverrideUserAgent(overrideUserAgentWhenUnFrozen == (int)UserAgentOverrideOption.TRUE ? true : false);
|
|
|
++ SetOverrideUserAgent(overrideUserAgentWhenUnFrozen == (int)UserAgentOverrideOption.TRUE ? true : false,
|
|
|
++ /*forcedByUser*/ true);
|
|
|
+ }
|
|
|
} finally {
|
|
|
TraceEvent.end("Tab.restoreIfNeeded");
|
|
|
}
|
|
|
-@@ -1596,6 +1638,42 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
|
|
|
- }
|
|
|
+@@ -1674,6 +1708,43 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
|
|
|
+ /* forcedByUser */ false);
|
|
|
}
|
|
|
|
|
|
+ int overrideUserAgentWhenUnFrozen = (int)UserAgentOverrideOption.INHERIT;
|
|
|
+
|
|
|
-+ public void SetOverrideUserAgent(boolean usingDesktopUserAgent) {
|
|
|
++ public void SetOverrideUserAgent(boolean usingDesktopUserAgent, boolean forcedByUser) {
|
|
|
+ WebContents webContents = this.getWebContents();
|
|
|
+ overrideUserAgentWhenUnFrozen = UserAgentOverrideOption.INHERIT;
|
|
|
+
|
|
@@ -669,11 +604,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
|
|
|
+ }
|
|
|
+
|
|
|
+ if (webContents != null) {
|
|
|
-+ ContentUtils.setUserAgentOverride(webContents);
|
|
|
++ ContentUtils.setUserAgentOverride(webContents, /*forcedByUser*/ true);
|
|
|
+
|
|
|
+ NavigationController navigationController = webContents.getNavigationController();
|
|
|
+ navigationController.setUseDesktopUserAgent(
|
|
|
+ usingDesktopUserAgent, !this.isNativePage());
|
|
|
++ if (forcedByUser) this.setUserForcedUserAgent();
|
|
|
+ }
|
|
|
+ else if (this.getPendingLoadParams() != null) {
|
|
|
+ if (usingDesktopUserAgent) {
|
|
@@ -692,22 +628,47 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
|
|
|
@NativeMethods
|
|
|
interface Natives {
|
|
|
TabImpl fromWebContents(WebContents webContents);
|
|
|
-@@ -1615,7 +1693,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
|
|
|
- ResourceRequestBody postData, int transition, String referrerUrl,
|
|
|
- int referrerPolicy, boolean isRendererInitiated, boolean shoulReplaceCurrentEntry,
|
|
|
- boolean hasUserGesture, boolean shouldClearHistoryList, long inputStartTimestamp,
|
|
|
-- long intentReceivedTimestamp);
|
|
|
-+ long intentReceivedTimestamp,
|
|
|
-+ int userAgentOverrideOption);
|
|
|
- void setActiveNavigationEntryTitleForUrl(long nativeTabAndroid, String url, String title);
|
|
|
- void loadOriginalImage(long nativeTabAndroid);
|
|
|
- void setAddApi2TransitionToFutureNavigations(long nativeTabAndroid, boolean shouldAdd);
|
|
|
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
|
|
|
+--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
|
|
|
++++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java
|
|
|
+@@ -20,6 +20,10 @@ import org.chromium.content_public.browser.WebContents;
|
|
|
+ import org.chromium.ui.base.WindowAndroid;
|
|
|
+ import org.chromium.ui.display.DisplayAndroidManager;
|
|
|
+
|
|
|
++import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton;
|
|
|
++import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
|
|
|
++import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
|
|
++
|
|
|
+ /**
|
|
|
+ * Collection of utility methods that operates on Tab.
|
|
|
+ */
|
|
|
+@@ -82,10 +86,16 @@ public class TabUtils {
|
|
|
+ * @param forcedByUser Whether this was triggered by users action.
|
|
|
+ */
|
|
|
+ public static void switchUserAgent(Tab tab, boolean switchToDesktop, boolean forcedByUser) {
|
|
|
+- final boolean reloadOnChange = !tab.isNativePage();
|
|
|
+- tab.getWebContents().getNavigationController().setUseDesktopUserAgent(
|
|
|
+- switchToDesktop, reloadOnChange);
|
|
|
+- if (forcedByUser) ((TabImpl) tab).setUserForcedUserAgent();
|
|
|
++ SharedPreferencesManager.getInstance().writeBoolean(
|
|
|
++ ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, switchToDesktop);
|
|
|
++
|
|
|
++ final boolean stickyDesktopModeEnabled = SharedPreferencesManager.getInstance().readBoolean(
|
|
|
++ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
|
|
|
++ if (stickyDesktopModeEnabled) {
|
|
|
++ TabWindowManagerSingleton.getInstance().SetOverrideUserAgentForAllTabs(switchToDesktop);
|
|
|
++ } else {
|
|
|
++ 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
|
|
|
@@ -8,6 +8,20 @@
|
|
|
- #include "components/embedder_support/android/util/user_agent_utils.h"
|
|
|
#include "components/version_info/version_info.h"
|
|
|
+ #include "content/public/browser/web_contents.h"
|
|
|
|
|
|
+#include "base/android/jni_android.h"
|
|
|
+#include "base/android/scoped_java_ref.h"
|
|
@@ -725,11 +686,11 @@ diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/an
|
|
|
+
|
|
|
static base::android::ScopedJavaLocalRef<jstring>
|
|
|
JNI_ContentUtils_GetBrowserUserAgent(JNIEnv* env) {
|
|
|
- return base::android::ConvertUTF8ToJavaString(env, GetUserAgent());
|
|
|
-@@ -16,6 +30,20 @@ JNI_ContentUtils_GetBrowserUserAgent(JNIEnv* env) {
|
|
|
- static void JNI_ContentUtils_SetUserAgentOverride(
|
|
|
+ return base::android::ConvertUTF8ToJavaString(
|
|
|
+@@ -18,6 +32,20 @@ static void JNI_ContentUtils_SetUserAgentOverride(
|
|
|
JNIEnv* env,
|
|
|
- const base::android::JavaParamRef<jobject>& jweb_contents) {
|
|
|
+ const base::android::JavaParamRef<jobject>& jweb_contents,
|
|
|
+ jboolean j_override_in_new_tabs) {
|
|
|
+ bool enabled =
|
|
|
+ g_browser_process->local_state()->GetBoolean(prefs::kOverrideUserAgentDesktopModeEnabled);
|
|
|
+
|
|
@@ -746,7 +707,7 @@ diff --git a/chrome/browser/android/content/content_utils.cc b/chrome/browser/an
|
|
|
+
|
|
|
content::WebContents* web_contents =
|
|
|
content::WebContents::FromJavaWebContents(jweb_contents);
|
|
|
- embedder_support::SetDesktopUserAgentOverride(web_contents,
|
|
|
+ embedder_support::SetDesktopUserAgentOverride(
|
|
|
diff --git a/chrome/browser/android/preferences/browser_prefs_android.cc b/chrome/browser/android/preferences/browser_prefs_android.cc
|
|
|
--- a/chrome/browser/android/preferences/browser_prefs_android.cc
|
|
|
+++ b/chrome/browser/android/preferences/browser_prefs_android.cc
|
|
@@ -772,7 +733,7 @@ diff --git a/chrome/browser/android/preferences/browser_prefs_android.cc b/chrom
|
|
|
diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc b/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc
|
|
|
--- a/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc
|
|
|
+++ b/chrome/browser/android/preferences/privacy_preferences_manager_impl.cc
|
|
|
-@@ -12,6 +12,26 @@
|
|
|
+@@ -12,6 +12,30 @@
|
|
|
#include "components/metrics/metrics_pref_names.h"
|
|
|
#include "components/prefs/pref_service.h"
|
|
|
|
|
@@ -783,6 +744,10 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl
|
|
|
+#include "content/common/renderer.mojom.h"
|
|
|
+#include "chrome/browser/chrome_content_browser_client.h"
|
|
|
+
|
|
|
++#include "components/embedder_support/content_settings_utils.h"
|
|
|
++#include "components/embedder_support/switches.h"
|
|
|
++#include "components/embedder_support/user_agent_utils.h"
|
|
|
++
|
|
|
+#include "base/android/jni_android.h"
|
|
|
+#include "base/android/jni_array.h"
|
|
|
+#include "base/android/jni_string.h"
|
|
@@ -799,7 +764,7 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl
|
|
|
namespace {
|
|
|
|
|
|
PrefService* GetPrefService() {
|
|
|
-@@ -67,3 +87,97 @@ static void JNI_PrivacyPreferencesManagerImpl_SetNetworkPredictionEnabled(
|
|
|
+@@ -67,3 +91,97 @@ static void JNI_PrivacyPreferencesManagerImpl_SetNetworkPredictionEnabled(
|
|
|
enabled ? chrome_browser_net::NETWORK_PREDICTION_WIFI_ONLY
|
|
|
: chrome_browser_net::NETWORK_PREDICTION_NEVER);
|
|
|
}
|
|
@@ -814,10 +779,10 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl
|
|
|
+
|
|
|
+ base::CommandLine* parsed_command_line =
|
|
|
+ base::CommandLine::ForCurrentProcess();
|
|
|
-+ parsed_command_line->RemoveSwitch(switches::kUserAgent);
|
|
|
++ parsed_command_line->RemoveSwitch(embedder_support::kUserAgent);
|
|
|
+ if (!ua.empty()) {
|
|
|
+ if (overrideUserAgentEnabled) {
|
|
|
-+ parsed_command_line->AppendSwitchASCII(switches::kUserAgent, ua);
|
|
|
++ parsed_command_line->AppendSwitchASCII(embedder_support::kUserAgent, ua);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (auto iter = content::RenderProcessHost::AllHostsIterator(); !iter.IsAtEnd();
|
|
@@ -897,71 +862,10 @@ diff --git a/chrome/browser/android/preferences/privacy_preferences_manager_impl
|
|
|
+ enabled);
|
|
|
+ UpdateOverrideUserAgent();
|
|
|
+}
|
|
|
-\ No newline at end of file
|
|
|
-diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_android.cc
|
|
|
---- a/chrome/browser/android/tab_android.cc
|
|
|
-+++ b/chrome/browser/android/tab_android.cc
|
|
|
-@@ -373,7 +373,8 @@ TabAndroid::TabLoadStatus TabAndroid::LoadUrl(
|
|
|
- jboolean has_user_gesture,
|
|
|
- jboolean should_clear_history_list,
|
|
|
- jlong input_start_timestamp,
|
|
|
-- jlong intent_received_timestamp) {
|
|
|
-+ jlong intent_received_timestamp,
|
|
|
-+ jint user_agent_override_option) {
|
|
|
- if (!web_contents())
|
|
|
- return PAGE_LOAD_FAILED;
|
|
|
-
|
|
|
-@@ -430,6 +431,8 @@ TabAndroid::TabLoadStatus TabAndroid::LoadUrl(
|
|
|
- load_params.input_start =
|
|
|
- base::TimeTicks::FromUptimeMillis(intent_received_timestamp);
|
|
|
- }
|
|
|
-+ load_params.override_user_agent = static_cast<NavigationController::UserAgentOverrideOption>(
|
|
|
-+ user_agent_override_option);
|
|
|
- web_contents()->GetController().LoadURLWithParams(load_params);
|
|
|
- }
|
|
|
- return DEFAULT_PAGE_LOAD;
|
|
|
-diff --git a/chrome/browser/android/tab_android.h b/chrome/browser/android/tab_android.h
|
|
|
---- a/chrome/browser/android/tab_android.h
|
|
|
-+++ b/chrome/browser/android/tab_android.h
|
|
|
-@@ -167,7 +167,8 @@ class TabAndroid : public base::SupportsUserData {
|
|
|
- jboolean has_user_gesture,
|
|
|
- jboolean should_clear_history_list,
|
|
|
- jlong omnibox_input_received_timestamp,
|
|
|
-- jlong intent_received_timestamp);
|
|
|
-+ jlong intent_received_timestamp,
|
|
|
-+ jint user_agent_override_option);
|
|
|
- void SetActiveNavigationEntryTitleForUrl(
|
|
|
- JNIEnv* env,
|
|
|
- const base::android::JavaParamRef<jstring>& jurl,
|
|
|
-diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
|
|
|
---- a/chrome/browser/chrome_content_browser_client.cc
|
|
|
-+++ b/chrome/browser/chrome_content_browser_client.cc
|
|
|
-@@ -1286,6 +1286,13 @@ std::string GetPlatformForUAMetadata() {
|
|
|
- blink::UserAgentMetadata GetUserAgentMetadata() {
|
|
|
- blink::UserAgentMetadata metadata;
|
|
|
-
|
|
|
-+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
|
|
-+ if (command_line->HasSwitch(switches::kUserAgent)) {
|
|
|
-+ std::string ua = command_line->GetSwitchValueASCII(switches::kUserAgent);
|
|
|
-+
|
|
|
-+ return metadata;
|
|
|
-+ }
|
|
|
-+
|
|
|
- metadata.brand_version_list = GetBrandVersionList();
|
|
|
- metadata.full_version = version_info::GetVersionNumber();
|
|
|
- metadata.platform = GetPlatformForUAMetadata();
|
|
|
-@@ -2379,6 +2386,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
|
|
|
- switches::kDisableTargetBlankImpliesNoOpener);
|
|
|
- }
|
|
|
-
|
|
|
-+
|
|
|
- #if defined(OS_ANDROID)
|
|
|
- // Communicating to content/ for BackForwardCache.
|
|
|
- if (prefs->HasPrefPath(policy::policy_prefs::kBackForwardCacheEnabled) &&
|
|
|
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
|
|
|
-@@ -828,6 +828,9 @@ public final class ChromePreferenceKeys {
|
|
|
+@@ -881,6 +881,9 @@ public final class ChromePreferenceKeys {
|
|
|
public static final KeyPrefix KEY_ZERO_SUGGEST_HEADER_GROUP_COLLAPSED_BY_DEFAULT_PREFIX =
|
|
|
new KeyPrefix("zero_suggest_header_group_collapsed_by_default*");
|
|
|
|
|
@@ -971,7 +875,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro
|
|
|
/**
|
|
|
* These values are currently used as SharedPreferences keys, along with the keys in
|
|
|
* {@link GrandfatheredChromePreferenceKeys#getKeysInUse()}. Add new SharedPreferences keys
|
|
|
-@@ -890,7 +893,9 @@ public final class ChromePreferenceKeys {
|
|
|
+@@ -954,7 +957,9 @@ public final class ChromePreferenceKeys {
|
|
|
SETTINGS_SAFETY_CHECK_RUN_COUNTER,
|
|
|
SIGNIN_PROMO_IMPRESSIONS_COUNT_NTP,
|
|
|
TWA_DISCLOSURE_SEEN_PACKAGES,
|
|
@@ -1005,7 +909,7 @@ diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.jav
|
|
|
*/
|
|
|
void setIsTabStateDirty(boolean isTabStateDirty);
|
|
|
|
|
|
-+ void SetOverrideUserAgent(boolean usingDesktopUserAgent);
|
|
|
++ void SetOverrideUserAgent(boolean usingDesktopUserAgent, boolean forcedByUser);
|
|
|
+
|
|
|
/**
|
|
|
* If set to true, any future navigations in the tab automatically get
|
|
@@ -1013,19 +917,7 @@ diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/Tab.jav
|
|
|
diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManager.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManager.java
|
|
|
--- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManager.java
|
|
|
+++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManager.java
|
|
|
-@@ -10,6 +10,11 @@ import org.chromium.chrome.browser.tab.Tab;
|
|
|
- import org.chromium.chrome.browser.tabmodel.NextTabPolicy.NextTabPolicySupplier;
|
|
|
- import org.chromium.ui.base.WindowAndroid;
|
|
|
-
|
|
|
-+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
|
|
|
-+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
|
|
-+
|
|
|
-+import java.util.List;
|
|
|
-+
|
|
|
- /**
|
|
|
- * Manages multiple {@link TabModelSelector} instances, each owned by different {@link Activity}s.
|
|
|
- *
|
|
|
-@@ -76,4 +81,7 @@ public interface TabWindowManager {
|
|
|
+@@ -79,4 +79,7 @@ public interface TabWindowManager {
|
|
|
* @return Specified {@link Tab} or {@code null} if the {@link Tab} is not found.
|
|
|
*/
|
|
|
Tab getTabById(int tabId);
|
|
@@ -1036,7 +928,7 @@ diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browse
|
|
|
diff --git a/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java b/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java
|
|
|
--- a/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java
|
|
|
+++ b/chrome/browser/tabmodel/internal/android/java/src/org/chromium/chrome/browser/tabmodel/TabWindowManagerImpl.java
|
|
|
-@@ -119,6 +119,24 @@ public class TabWindowManagerImpl implements ActivityStateListener, TabWindowMan
|
|
|
+@@ -128,6 +128,24 @@ public class TabWindowManagerImpl implements ActivityStateListener, TabWindowMan
|
|
|
return null;
|
|
|
}
|
|
|
|
|
@@ -1051,7 +943,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);
|
|
|
++ theTab.SetOverrideUserAgent(usingDesktopUserAgent, /*forcedByUser*/ true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
@@ -1109,7 +1001,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
|
|
|
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
|
|
|
--- a/chrome/common/pref_names.cc
|
|
|
+++ b/chrome/common/pref_names.cc
|
|
|
-@@ -418,6 +418,19 @@ const char kAllowJavascriptAppleEvents[] =
|
|
|
+@@ -417,6 +417,19 @@ const char kAllowJavascriptAppleEvents[] =
|
|
|
|
|
|
#endif
|
|
|
|
|
@@ -1132,7 +1024,7 @@ diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
|
|
|
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
|
|
|
--- a/chrome/common/pref_names.h
|
|
|
+++ b/chrome/common/pref_names.h
|
|
|
-@@ -1120,6 +1120,14 @@ extern const char kCartModuleWelcomeSurfaceShownTimes[];
|
|
|
+@@ -1135,6 +1135,14 @@ extern const char kSuppressDifferentOriginSubframeJSDialogs[];
|
|
|
extern const char kIncognitoTabHistoryEnabled[];
|
|
|
#endif
|
|
|
|
|
@@ -1168,6 +1060,23 @@ diff --git a/components/browser_ui/widget/android/java/src/org/chromium/componen
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+diff --git a/components/embedder_support/user_agent_utils.cc b/components/embedder_support/user_agent_utils.cc
|
|
|
+--- a/components/embedder_support/user_agent_utils.cc
|
|
|
++++ b/components/embedder_support/user_agent_utils.cc
|
|
|
+@@ -134,6 +134,13 @@ std::string GetPlatformForUAMetadata() {
|
|
|
+ blink::UserAgentMetadata GetUserAgentMetadata() {
|
|
|
+ blink::UserAgentMetadata metadata;
|
|
|
+
|
|
|
++ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
|
|
++ if (command_line->HasSwitch(kUserAgent)) {
|
|
|
++ std::string ua = command_line->GetSwitchValueASCII(kUserAgent);
|
|
|
++
|
|
|
++ return metadata;
|
|
|
++ }
|
|
|
++
|
|
|
+ metadata.brand_version_list = GetBrandVersionList();
|
|
|
+ metadata.full_version = version_info::GetVersionNumber();
|
|
|
+ metadata.platform = GetPlatformForUAMetadata();
|
|
|
diff --git a/content/browser/renderer_host/navigation_controller_android.cc b/content/browser/renderer_host/navigation_controller_android.cc
|
|
|
--- a/content/browser/renderer_host/navigation_controller_android.cc
|
|
|
+++ b/content/browser/renderer_host/navigation_controller_android.cc
|
|
@@ -1207,7 +1116,7 @@ diff --git a/content/browser/renderer_host/navigation_controller_android.h b/con
|
|
|
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
|
|
|
-@@ -3366,6 +3366,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
|
|
|
+@@ -3430,6 +3430,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
|
|
|
#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
|
|
|
switches::kSchedulerBoostUrgent,
|
|
|
#endif
|
|
@@ -1226,16 +1135,18 @@ diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser
|
|
|
#include "base/threading/thread_task_runner_handle.h"
|
|
|
#include "base/time/time.h"
|
|
|
#include "base/trace_event/optional_trace_event.h"
|
|
|
-@@ -2447,7 +2448,8 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences() {
|
|
|
- prefs.threaded_scrolling_enabled =
|
|
|
- !command_line.HasSwitch(blink::switches::kDisableThreadedScrolling);
|
|
|
+@@ -2510,6 +2511,11 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences() {
|
|
|
+ prefs.viewport_meta_enabled = false;
|
|
|
+ }
|
|
|
|
|
|
-- if (IsOverridingUserAgent())
|
|
|
+ if (IsOverridingUserAgent() &&
|
|
|
-+ !command_line.HasSwitch(switches::kDesktopModeViewportMetaEnabled))
|
|
|
- prefs.viewport_meta_enabled = false;
|
|
|
-
|
|
|
++ !command_line.HasSwitch(switches::kDesktopModeViewportMetaEnabled)) {
|
|
|
++ prefs.viewport_meta_enabled = false;
|
|
|
++ }
|
|
|
++
|
|
|
prefs.main_frame_resizes_are_orientation_changes =
|
|
|
+ command_line.HasSwitch(switches::kMainFrameResizesAreOrientationChanges);
|
|
|
+
|
|
|
diff --git a/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java
|
|
|
--- a/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java
|
|
|
+++ b/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java
|
|
@@ -1262,7 +1173,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/frameh
|
|
|
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
|
|
|
--- a/content/renderer/render_thread_impl.cc
|
|
|
+++ b/content/renderer/render_thread_impl.cc
|
|
|
-@@ -1673,7 +1673,6 @@ void RenderThreadImpl::SetWebKitSharedTimersSuspended(bool suspend) {
|
|
|
+@@ -1636,7 +1636,6 @@ void RenderThreadImpl::SetWebKitSharedTimersSuspended(bool suspend) {
|
|
|
}
|
|
|
|
|
|
void RenderThreadImpl::SetUserAgent(const std::string& user_agent) {
|