diff --git a/build/patches/Add-flag-to-always-view-the-desktop-site-for-all-websites.patch b/build/patches/Add-flag-to-always-view-the-desktop-site-for-all-websites.patch
index e1ab203b..2a1a9282 100644
--- a/build/patches/Add-flag-to-always-view-the-desktop-site-for-all-websites.patch
+++ b/build/patches/Add-flag-to-always-view-the-desktop-site-for-all-websites.patch
@@ -3,34 +3,70 @@ Date: Mon, 26 Oct 2020 16:50:15 +0000
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 | 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 +-
- .../org/chromium/chrome/browser/tab/Tab.java | 2 +
- .../strings/android_chrome_strings.grd | 14 ++++
- .../navigation_controller_android.cc | 6 +-
- .../navigation_controller_android.h | 3 +-
- .../framehost/NavigationControllerImpl.java | 6 +-
- 16 files changed, 243 insertions(+), 12 deletions(-)
+ base/base_switches.cc | 2 +
+ 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 ++++++++++
+ .../android/java/res/xml/main_preferences.xml | 5 +
+ .../java/res/xml/useragent_preferences.xml | 31 +++
+ .../chrome/browser/app/ChromeActivity.java | 17 +-
+ .../settings/PrivacyPreferencesManager.java | 30 +++
+ .../settings/UserAgentPreferences.java | 186 ++++++++++++++++++
+ .../chromium/chrome/browser/tab/TabImpl.java | 77 +++++++-
+ .../browser/tabmodel/TabWindowManager.java | 23 +++
+ .../browser/android/content/content_utils.cc | 64 ++++--
+ .../preferences/browser_prefs_android.cc | 7 +
+ .../privacy_preferences_manager.cc | 93 +++++++++
+ chrome/browser/android/tab_android.cc | 5 +-
+ chrome/browser/android/tab_android.h | 3 +-
+ .../preferences/ChromePreferenceKeys.java | 7 +-
+ .../org/chromium/chrome/browser/tab/Tab.java | 2 +
+ .../strings/android_chrome_strings.grd | 35 ++++
+ chrome/common/pref_names.cc | 13 ++
+ chrome/common/pref_names.h | 8 +
+ .../android/browser_startup_controller.cc | 35 ++++
+ .../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 +-
+ .../framehost/NavigationControllerImpl.java | 6 +-
+ 28 files changed, 746 insertions(+), 30 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
+diff --git a/base/base_switches.cc b/base/base_switches.cc
+--- a/base/base_switches.cc
++++ b/base/base_switches.cc
+@@ -160,4 +160,6 @@ const char kForceFieldTrialParams[] = "force-fieldtrial-params";
+ const char kEnableThreadInstructionCount[] = "enable-thread-instruction-count";
+ #endif
+
++const char kDesktopModeViewportMetaEnabled[] = "dm-viewport-meta-enabled";
++
+ } // namespace switches
+diff --git a/base/base_switches.h b/base/base_switches.h
+--- a/base/base_switches.h
++++ b/base/base_switches.h
+@@ -59,6 +59,8 @@ extern const char kForceFieldTrialParams[];
+ extern const char kEnableThreadInstructionCount[];
+ #endif
+
++extern const char kDesktopModeViewportMetaEnabled[];
++
+ } // namespace switches
+
+ #endif // 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
-@@ -1130,4 +1130,5 @@ chrome_java_resources = [
+@@ -1130,4 +1130,6 @@ chrome_java_resources = [
"java/res/xml/sync_and_services_preferences.xml",
"java/res/xml/theme_preferences.xml",
"java/res/xml/tracing_preferences.xml",
+ "java/res/xml/useragent_preferences.xml",
++ "java/res/layout/custom_useragent_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
@@ -43,6 +79,119 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
"java/src/org/chromium/chrome/browser/photo_picker/FileEnumWorkerTask.java",
"java/src/org/chromium/chrome/browser/photo_picker/PhotoPickerDialog.java",
"java/src/org/chromium/chrome/browser/photo_picker/PhotoPickerToolbar.java",
+diff --git a/chrome/android/java/res/layout/custom_useragent_preferences.xml b/chrome/android/java/res/layout/custom_useragent_preferences.xml
+new file mode 100644
+--- /dev/null
++++ b/chrome/android/java/res/layout/custom_useragent_preferences.xml
+@@ -0,0 +1,108 @@
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml
--- a/chrome/android/java/res/xml/main_preferences.xml
+++ b/chrome/android/java/res/xml/main_preferences.xml
@@ -62,7 +211,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,30 @@
+@@ -0,0 +1,31 @@
+
+
General
+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
+@@ -3105,4 +3105,17 @@ const char kIncognitoTabHistoryEnabled[] =
+ "incognito_tab_history_enabled";
+ #endif
+
++#if defined(OS_ANDROID)
++const char kOverrideUserAgentEnabled[] =
++ "override_user_agent_enabled";
++const char kOverrideUserAgent[] =
++ "override_user_agent";
++const char kOverrideUserAgentDesktopModeEnabled[] =
++ "override_user_agent_dm_enabled";
++const char kOverrideUserAgentDesktopMode[] =
++ "override_user_agent_dm";
++const char kDesktopModeViewportMetaEnabled[] =
++ "dm-viewport-meta-enabled";
++#endif
++
+ } // namespace prefs
+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
+@@ -1091,6 +1091,14 @@ extern const char kShowCaretBrowsingDialog[];
+ extern const char kIncognitoTabHistoryEnabled[];
+ #endif
+
++#if defined(OS_ANDROID)
++extern const char kOverrideUserAgentEnabled[];
++extern const char kOverrideUserAgent[];
++extern const char kOverrideUserAgentDesktopModeEnabled[];
++extern const char kOverrideUserAgentDesktopMode[];
++extern const char kDesktopModeViewportMetaEnabled[];
++#endif
++
+ } // namespace prefs
+
+ #endif // CHROME_COMMON_PREF_NAMES_H_
+diff --git a/content/browser/android/browser_startup_controller.cc b/content/browser/android/browser_startup_controller.cc
+--- a/content/browser/android/browser_startup_controller.cc
++++ b/content/browser/android/browser_startup_controller.cc
+@@ -10,11 +10,46 @@
+ #include "content/browser/browser_main_loop.h"
+ #include "content/public/android/content_jni_headers/BrowserStartupControllerImpl_jni.h"
+
++#include "base/logging.h"
++#include "base/command_line.h"
++#include "base/base_switches.h"
++#include "components/prefs/pref_service.h"
++#include "chrome/browser/browser_process.h"
++#include "chrome/common/pref_names.h"
++#include "chrome/common/chrome_switches.h"
++#include "net/http/http_util.h"
++
+ using base::android::JavaParamRef;
+
+ namespace content {
+
+ void BrowserStartupComplete(int result) {
++
++ LOG(INFO) << "---Checking user agent override status";
++
++ base::CommandLine* parsed_command_line =
++ base::CommandLine::ForCurrentProcess();
++
++ parsed_command_line->RemoveSwitch(switches::kUserAgent);
++
++ PrefService* local_state = g_browser_process->local_state();
++ bool overrideUserAgentEnabled =
++ local_state->GetBoolean(prefs::kOverrideUserAgentEnabled);
++ if (overrideUserAgentEnabled) {
++ std::string ua = local_state->GetString(prefs::kOverrideUserAgent);
++ if (net::HttpUtil::IsValidHeaderValue(ua)) {
++ parsed_command_line->AppendSwitchASCII(switches::kUserAgent,
++ ua);
++ }
++ else {
++ LOG(INFO) << "Ignored invalid value for ua --" << ua;
++ }
++
++ parsed_command_line->RemoveSwitch(switches::kDesktopModeViewportMetaEnabled);
++ if (local_state->GetBoolean(prefs::kDesktopModeViewportMetaEnabled))
++ parsed_command_line->AppendSwitch(switches::kDesktopModeViewportMetaEnabled);
++ }
++
+ JNIEnv* env = base::android::AttachCurrentThread();
+ Java_BrowserStartupControllerImpl_browserStartupComplete(env, result);
+ }
diff --git a/content/browser/frame_host/navigation_controller_android.cc b/content/browser/frame_host/navigation_controller_android.cc
--- a/content/browser/frame_host/navigation_controller_android.cc
+++ b/content/browser/frame_host/navigation_controller_android.cc
@@ -471,6 +1123,38 @@ diff --git a/content/browser/frame_host/navigation_controller_android.h b/conten
void ClearSslPreferences(
JNIEnv* env,
const base::android::JavaParamRef& /* obj */);
+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
+@@ -3503,6 +3503,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
+ switches::kIpcDumpDirectory,
+ switches::kIpcFuzzerTestcase,
+ #endif
++ switches::kDesktopModeViewportMetaEnabled,
+ };
+ renderer_cmd->CopySwitchesFrom(browser_cmd, kSwitchNames,
+ base::size(kSwitchNames));
+diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
+--- a/content/browser/web_contents/web_contents_impl.cc
++++ b/content/browser/web_contents/web_contents_impl.cc
+@@ -37,6 +37,7 @@
+ #include "base/strings/string_util.h"
+ #include "base/strings/utf_string_conversions.h"
+ #include "base/system/sys_info.h"
++#include "base/base_switches.h"
+ #include "base/threading/thread_task_runner_handle.h"
+ #include "base/time/time.h"
+ #include "base/trace_event/trace_event.h"
+@@ -2319,7 +2320,8 @@ const WebPreferences WebContentsImpl::ComputeWebPreferences() {
+
+ prefs.viewport_enabled = command_line.HasSwitch(switches::kEnableViewport);
+
+- if (IsOverridingUserAgent())
++ if (IsOverridingUserAgent() &&
++ !command_line.HasSwitch(switches::kDesktopModeViewportMetaEnabled))
+ prefs.viewport_meta_enabled = false;
+
+ prefs.main_frame_resizes_are_orientation_changes =
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