Merge pull request #800 from uazo/fix-780

Always desktop view mode: exclude internal schemes
This commit is contained in:
Carl
2020-11-07 20:37:20 +01:00
committed by GitHub
@@ -6,20 +6,20 @@ Subject: Add flag to always view the desktop site for all websites
chrome/android/chrome_java_resources.gni | 1 +
chrome/android/chrome_java_sources.gni | 1 +
.../android/java/res/xml/main_preferences.xml | 5 ++
.../java/res/xml/useragent_preferences.xml | 30 ++++++++++
.../chrome/browser/app/ChromeActivity.java | 17 +++++-
.../settings/UserAgentPreferences.java | 59 +++++++++++++++++++
.../chromium/chrome/browser/tab/TabImpl.java | 51 +++++++++++++++-
.../browser/tabmodel/TabWindowManager.java | 20 +++++++
.../java/res/xml/useragent_preferences.xml | 30 ++++++++
.../chrome/browser/app/ChromeActivity.java | 17 ++++-
.../settings/UserAgentPreferences.java | 60 +++++++++++++++
.../chromium/chrome/browser/tab/TabImpl.java | 75 ++++++++++++++++++-
.../browser/tabmodel/TabWindowManager.java | 20 +++++
chrome/browser/android/tab_android.cc | 5 +-
chrome/browser/android/tab_android.h | 3 +-
.../preferences/ChromePreferenceKeys.java | 7 ++-
.../preferences/ChromePreferenceKeys.java | 7 +-
.../org/chromium/chrome/browser/tab/Tab.java | 2 +
.../strings/android_chrome_strings.grd | 14 +++++
.../strings/android_chrome_strings.grd | 14 ++++
.../navigation_controller_android.cc | 6 +-
.../navigation_controller_android.h | 3 +-
.../framehost/NavigationControllerImpl.java | 6 +-
16 files changed, 218 insertions(+), 12 deletions(-)
16 files changed, 243 insertions(+), 12 deletions(-)
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
@@ -133,7 +133,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,59 @@
@@ -0,0 +1,60 @@
+/*
+ This file is part of Bromite.
+
@@ -177,26 +177,27 @@ new file mode 100644
+
+ ChromeSwitchPreference alwaysDesktopModeSwitch =
+ (ChromeSwitchPreference) findPreference(PREF_STICK_DESKTOP_MODE_SWITCH);
+ if (alwaysDesktopModeSwitch != null) {
+ boolean enabled = SharedPreferencesManager.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
+ alwaysDesktopModeSwitch.setChecked(enabled);
+ alwaysDesktopModeSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
+ SharedPreferencesManager.getInstance().writeBoolean(
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, (boolean) newValue);
+ boolean enabled = SharedPreferencesManager.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
+ alwaysDesktopModeSwitch.setChecked(enabled);
+ alwaysDesktopModeSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
+ SharedPreferencesManager.getInstance().writeBoolean(
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, (boolean) newValue);
+ UpdateAllTabs();
+ return true;
+ });
+ }
+
+ final boolean alwaysDesktopModeEnabled = SharedPreferencesManager.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, false);
+ TabWindowManager.getInstance().SetOverrideUserAgentForAllTabs(alwaysDesktopModeEnabled);
+ return true;
+ });
+ }
+ private void UpdateAllTabs() {
+ final boolean alwaysDesktopModeEnabled = SharedPreferencesManager.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_ALWAYS_DESKTOP_MODE, false);
+ TabWindowManager.getInstance().SetOverrideUserAgentForAllTabs(alwaysDesktopModeEnabled);
+ }
+}
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
@@ -57,6 +57,10 @@ import org.chromium.ui.base.WindowAndroid;
@@ -57,6 +57,12 @@ import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.util.ColorUtils;
import org.chromium.url.GURL;
import org.chromium.url.Origin;
@@ -204,18 +205,33 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
+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}.
@@ -446,6 +450,18 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
@@ -446,6 +452,31 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
throw new RuntimeException("Tab.loadUrl called when no native side exists");
}
+ final boolean stickyDesktopModeEnabled = SharedPreferencesManager.getInstance().readBoolean(
+ ChromePreferenceKeys.USERAGENT_STICKY_DESKTOP_MODE, false);
+ if (stickyDesktopModeEnabled) {
+ final boolean alwaysDesktopModeEnabled = SharedPreferencesManager.getInstance().readBoolean(
+ boolean alwaysDesktopModeEnabled = SharedPreferencesManager.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);
+ }
+
+ if (alwaysDesktopModeEnabled) {
+ params.setOverrideUserAgent((int)UserAgentOverrideOption.TRUE);
+ } else {
@@ -226,7 +242,7 @@ 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, TabImpl.this,
@@ -458,7 +474,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
@@ -458,7 +489,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
params.getReferrer() != null ? params.getReferrer().getPolicy() : 0,
params.getIsRendererInitiated(), params.getShouldReplaceCurrentEntry(),
params.getHasUserGesture(), params.getShouldClearHistoryList(),
@@ -236,7 +252,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
for (TabObserver observer : mObservers) {
observer.onLoadUrl(this, params, loadType);
@@ -1380,6 +1397,10 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
@@ -1380,6 +1412,10 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
if (mWebContents != null) mWebContents.getNavigationController().loadIfNecessary();
mIsBeingRestored = true;
for (TabObserver observer : mObservers) observer.onRestoreStarted(this);
@@ -247,16 +263,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
} finally {
TraceEvent.end("Tab.restoreIfNeeded");
}
@@ -1497,6 +1518,31 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
@@ -1497,6 +1533,40 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
}
}
+ int overrideUserAgentWhenUnFrozen = (int)UserAgentOverrideOption.INHERIT;
+
+ public void SetOverrideUserAgent(boolean usingDesktopUserAgent) {
+ WebContents webContents = this.getWebContents();
+ overrideUserAgentWhenUnFrozen = UserAgentOverrideOption.INHERIT;
+
+ WebContents webContents = this.getWebContents();
+ if (usingDesktopUserAgent) {
+ GURL url = this.getUrl();
+ if (webContents == null && this.getPendingLoadParams() != null) {
+ url = UrlFormatter.fixupUrl(this.getPendingLoadParams().getUrl());
+ }
+ if (UrlUtilities.isInternalScheme(url) == true)
+ usingDesktopUserAgent = false;
+ }
+
+ if (webContents != null) {
+ NavigationController navigationController = webContents.getNavigationController();
+ navigationController.setUseDesktopUserAgent(
@@ -279,7 +304,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav
@NativeMethods
interface Natives {
void init(TabImpl caller);
@@ -1517,7 +1563,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
@@ -1517,7 +1587,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
String referrerUrl, int referrerPolicy, boolean isRendererInitiated,
boolean shoulReplaceCurrentEntry, boolean hasUserGesture,
boolean shouldClearHistoryList, long inputStartTimestamp,
@@ -469,6 +494,3 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/frameh
void clearHistory(long nativeNavigationControllerAndroid, NavigationControllerImpl caller);
int getNavigationHistory(long nativeNavigationControllerAndroid,
NavigationControllerImpl caller, Object history);
--
2.17.1