@ -3,28 +3,47 @@ Date: Sat, 23 Nov 2019 10:55:16 +0100 | |||
Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
--- | |||
chrome/android/chrome_java_sources.gni | 2 | |||
chrome/android/java/res/layout/doh_editor.xml | 65 +++++++ | |||
chrome/android/java/res/values/values.xml | 2 | |||
chrome/android/java/res/xml/doh_preferences.xml | 25 ++ | |||
chrome/android/java/res/xml/privacy_preferences.xml | 5 | |||
chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java | 24 ++ | |||
chrome/android/java/src/org/chromium/chrome/browser/settings/DoHEditor.java | 92 ++++++++++ | |||
chrome/android/java/src/org/chromium/chrome/browser/settings/DoHPreferences.java | 54 +++++ | |||
chrome/app/generated_resources.grd | 6 | |||
chrome/browser/android/feature_utilities.cc | 23 ++ | |||
chrome/browser/net/system_network_context_manager.cc | 41 ---- | |||
chrome/browser/ui/android/strings/android_chrome_strings.grd | 11 + | |||
chrome/common/chrome_features.cc | 4 | |||
13 files changed, 320 insertions(+), 34 deletions(-) | |||
chrome/android/chrome_java_resources.gni | 2 | |||
chrome/android/chrome_java_sources.gni | 2 | |||
chrome/android/java/res/layout/doh_editor.xml | 65 +++++++ | |||
chrome/android/java/res/values/values.xml | 2 | |||
chrome/android/java/res/xml/doh_preferences.xml | 25 ++ | |||
chrome/android/java/res/xml/privacy_preferences.xml | 5 | |||
chrome/android/java/src/org/chromium/chrome/browser/settings/DoHEditor.java | 92 ++++++++++ | |||
chrome/android/java/src/org/chromium/chrome/browser/settings/DoHPreferences.java | 54 +++++ | |||
chrome/app/generated_resources.grd | 6 | |||
chrome/browser/flags/android/cached_feature_flags.cc | 24 ++ | |||
chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java | 24 ++ | |||
chrome/browser/net/stub_resolver_config_reader.cc | 40 ---- | |||
chrome/browser/ui/android/strings/android_chrome_strings.grd | 11 + | |||
chrome/common/chrome_features.cc | 4 | |||
14 files changed, 322 insertions(+), 34 deletions(-) | |||
create mode 100644 chrome/android/java/res/layout/doh_editor.xml | |||
create mode 100644 chrome/android/java/res/xml/doh_preferences.xml | |||
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/DoHEditor.java | |||
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/DoHPreferences.java | |||
--- a/chrome/android/chrome_java_resources.gni | |||
+++ b/chrome/android/chrome_java_resources.gni | |||
@@ -1107,6 +1107,7 @@ chrome_java_resources = [ | |||
"java/res/layout/device_item_list.xml", | |||
"java/res/layout/distilled_page_font_family_spinner.xml", | |||
"java/res/layout/distilled_page_prefs_view.xml", | |||
+ "java/res/layout/doh_editor.xml", | |||
"java/res/layout/edit_url_suggestion_layout.xml", | |||
"java/res/layout/editable_option_editor_footer.xml", | |||
"java/res/layout/editable_option_editor_icons.xml", | |||
@@ -1346,6 +1347,7 @@ chrome_java_resources = [ | |||
"java/res/xml/data_reduction_preferences.xml", | |||
"java/res/xml/data_reduction_preferences_off_lite_mode.xml", | |||
"java/res/xml/developer_preferences.xml", | |||
+ "java/res/xml/doh_preferences.xml", | |||
"java/res/xml/do_not_track_preferences.xml", | |||
"java/res/xml/download_preferences.xml", | |||
"java/res/xml/homepage_preferences.xml", | |||
--- a/chrome/android/chrome_java_sources.gni | |||
+++ b/chrome/android/chrome_java_sources.gni | |||
@@ -1345,6 +1345,8 @@ chrome_java_sources = [ | |||
@@ -1399,6 +1399,8 @@ chrome_java_sources = [ | |||
"java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java", | |||
"java/src/org/chromium/chrome/browser/send_tab_to_self/DevicePickerBottomSheetAdapter.java", | |||
"java/src/org/chromium/chrome/browser/send_tab_to_self/DevicePickerBottomSheetContent.java", | |||
@ -124,7 +143,7 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
+ xmlns:android="http://schemas.android.com/apk/res/android" | |||
+ xmlns:app="http://schemas.android.com/apk/res-auto"> | |||
+ | |||
+ <org.chromium.chrome.browser.settings.ChromeSwitchPreference | |||
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference | |||
+ android:key="doh_switch" | |||
+ android:summaryOn="@string/text_on" | |||
+ android:summaryOff="@string/text_off" /> | |||
@ -151,49 +170,9 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
+ android:key="doh" | |||
+ android:title="@string/options_doh_title" | |||
+ android:summary="@string/options_doh_summary" /> | |||
<org.chromium.chrome.browser.settings.ChromeBaseCheckBoxPreference | |||
<org.chromium.components.browser_ui.settings.ChromeBaseCheckBoxPreference | |||
android:key="preload_pages" | |||
android:title="@string/preload_pages_title" | |||
--- a/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java | |||
+++ b/chrome/android/java/src/org/chromium/chrome/browser/flags/FeatureUtilities.java | |||
@@ -120,6 +120,26 @@ public class FeatureUtilities { | |||
private static Boolean sEnabledTabThumbnailApsectRatioForTesting; | |||
private static final String ALLOW_TO_REFETCH = "allow_to_refetch"; | |||
+ /** | |||
+ * Records whether custom URL for DoH is enabled with native-side feature utilities. | |||
+ * @param url Whether custom URL is enabled or not. | |||
+ */ | |||
+ public static void setDoHEnabled(boolean enabled) { | |||
+ FeatureUtilitiesJni.get().setDoHEnabled(enabled); | |||
+ } | |||
+ | |||
+ public static boolean getDoHEnabled() { | |||
+ return FeatureUtilitiesJni.get().getDoHEnabled(); | |||
+ } | |||
+ | |||
+ public static void setDoHTemplates(String t) { | |||
+ FeatureUtilitiesJni.get().setDoHTemplates(t); | |||
+ } | |||
+ | |||
+ public static String getDoHTemplates() { | |||
+ return FeatureUtilitiesJni.get().getDoHTemplates(); | |||
+ } | |||
+ | |||
/** | |||
* Checks if a cached feature flag is enabled. | |||
* | |||
@@ -784,6 +804,10 @@ public class FeatureUtilities { | |||
@NativeMethods | |||
interface Natives { | |||
+ void setDoHEnabled(boolean enabled); | |||
+ boolean getDoHEnabled(); | |||
+ void setDoHTemplates(String templates); | |||
+ String getDoHTemplates(); | |||
boolean isNetworkServiceWarmUpEnabled(); | |||
} | |||
} | |||
--- /dev/null | |||
+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/DoHEditor.java | |||
@@ -0,0 +1,92 @@ | |||
@ -213,8 +192,8 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
+import android.widget.Button; | |||
+import android.widget.EditText; | |||
+ | |||
+import org.chromium.chrome.browser.settings.SettingsUtils; | |||
+import org.chromium.chrome.browser.flags.FeatureUtilities; | |||
+import org.chromium.components.browser_ui.settings.SettingsUtils; | |||
+import org.chromium.chrome.browser.flags.CachedFeatureFlags; | |||
+import org.chromium.chrome.R; | |||
+import org.chromium.components.url_formatter.UrlFormatter; | |||
+ | |||
@ -237,7 +216,7 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
+ scrollView.getViewTreeObserver().addOnScrollChangedListener( | |||
+ SettingsUtils.getShowShadowOnScrollListener(v, v.findViewById(R.id.shadow))); | |||
+ mDoHUrlEdit = (EditText) v.findViewById(R.id.doh_url_edit); | |||
+ mDoHUrlEdit.setText(FeatureUtilities.getDoHTemplates()); | |||
+ mDoHUrlEdit.setText(CachedFeatureFlags.getDoHTemplates()); | |||
+ mDoHUrlEdit.addTextChangedListener(this); | |||
+ mDoHUrlEdit.requestFocus(); | |||
+ | |||
@ -264,7 +243,7 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
+ mResetButton.setOnClickListener(new View.OnClickListener() { | |||
+ @Override | |||
+ public void onClick(View v) { | |||
+ mDoHUrlEdit.setText(FeatureUtilities.getDoHTemplates()); | |||
+ mDoHUrlEdit.setText(CachedFeatureFlags.getDoHTemplates()); | |||
+ getActivity().finish(); | |||
+ } | |||
+ }); | |||
@ -274,7 +253,7 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
+ mSaveButton.setOnClickListener(new View.OnClickListener() { | |||
+ @Override | |||
+ public void onClick(View v) { | |||
+ FeatureUtilities.setDoHTemplates( | |||
+ CachedFeatureFlags.setDoHTemplates( | |||
+ mDoHUrlEdit.getText().toString()); | |||
+ getActivity().finish(); | |||
+ } | |||
@ -299,12 +278,12 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
+package org.chromium.chrome.browser.settings; | |||
+ | |||
+import android.os.Bundle; | |||
+import android.support.v7.preference.Preference; | |||
+import android.support.v7.preference.PreferenceFragmentCompat; | |||
+import org.chromium.chrome.browser.settings.ChromeSwitchPreference; | |||
+import androidx.preference.Preference; | |||
+import androidx.preference.PreferenceFragmentCompat; | |||
+import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; | |||
+ | |||
+import org.chromium.chrome.browser.settings.SettingsUtils; | |||
+import org.chromium.chrome.browser.flags.FeatureUtilities; | |||
+import org.chromium.components.browser_ui.settings.SettingsUtils; | |||
+import org.chromium.chrome.browser.flags.CachedFeatureFlags; | |||
+import androidx.annotation.VisibleForTesting; | |||
+import org.chromium.chrome.R; | |||
+ | |||
@ -325,10 +304,10 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
+ | |||
+ ChromeSwitchPreference mDoHSwitch = | |||
+ (ChromeSwitchPreference) findPreference(PREF_DOH_SWITCH); | |||
+ boolean isDoHEnabled = FeatureUtilities.getDoHEnabled(); | |||
+ boolean isDoHEnabled = CachedFeatureFlags.getDoHEnabled(); | |||
+ mDoHSwitch.setChecked(isDoHEnabled); | |||
+ mDoHSwitch.setOnPreferenceChangeListener((preference, newValue) -> { | |||
+ FeatureUtilities.setDoHEnabled((boolean) newValue); | |||
+ CachedFeatureFlags.setDoHEnabled((boolean) newValue); | |||
+ return true; | |||
+ }); | |||
+ | |||
@ -337,7 +316,7 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
+ } | |||
+ | |||
+ private void updateCurrentDoHUrl() { | |||
+ mDoHEdit.setSummary(FeatureUtilities.getDoHTemplates()); | |||
+ mDoHEdit.setSummary(CachedFeatureFlags.getDoHTemplates()); | |||
+ } | |||
+ | |||
+ @Override | |||
@ -348,120 +327,160 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
+} | |||
--- a/chrome/app/generated_resources.grd | |||
+++ b/chrome/app/generated_resources.grd | |||
@@ -6848,6 +6848,12 @@ the Bookmarks menu."> | |||
<message name="IDS_OPTIONS_HOMEPAGE_TITLE" desc="The title of the home page overlay on Android" formatter_data="android_java"> | |||
Home page | |||
</message> | |||
@@ -6864,6 +6864,12 @@ the Bookmarks menu."> | |||
</if> | |||
<if expr="is_android"> | |||
+ <message name="IDS_OPTIONS_DOH_TITLE" desc="The title of the DNS-over-HTTPS option on Android" formatter_data="android_java"> | |||
+ Secure DNS | |||
+ </message> | |||
+ <message name="IDS_OPTIONS_DOH_SUMMARY" desc="The title of the DNS-over-HTTPS summary on Android" formatter_data="android_java"> | |||
+ Configure DNS-over-HTTPS (DoH) secure DNS | |||
+ </message> | |||
</if> | |||
<!-- Autofill dialog: field labels. --> | |||
--- a/chrome/browser/android/feature_utilities.cc | |||
+++ b/chrome/browser/android/feature_utilities.cc | |||
@@ -7,6 +7,9 @@ | |||
#include "chrome/android/chrome_jni_headers/FeatureUtilities_jni.h" | |||
<message name="IDS_OPTIONS_HOMEPAGE_TITLE" desc="The title of Chrome's homepage setting screen on Android. " formatter_data="android_java"> | |||
Homepage | |||
</message> | |||
--- a/chrome/browser/flags/android/cached_feature_flags.cc | |||
+++ b/chrome/browser/flags/android/cached_feature_flags.cc | |||
@@ -11,6 +11,10 @@ | |||
#include "content/public/common/content_features.h" | |||
#include "content/public/common/network_service_util.h" | |||
#include "base/android/jni_string.h" | |||
+#include "chrome/browser/browser_process.h" | |||
+#include "components/prefs/pref_service.h" | |||
+#include "chrome/common/pref_names.h" | |||
#include "content/public/common/content_features.h" | |||
#include "content/public/common/network_service_util.h" | |||
@@ -37,3 +40,23 @@ static jboolean JNI_FeatureUtilities_IsN | |||
+ | |||
using base::android::ConvertJavaStringToUTF8; | |||
using base::android::ConvertUTF8ToJavaString; | |||
using base::android::JavaParamRef; | |||
@@ -41,3 +45,23 @@ static jboolean JNI_CachedFeatureFlags_I | |||
return content::IsOutOfProcessNetworkService() && | |||
base::FeatureList::IsEnabled(features::kWarmUpNetworkProcess); | |||
} | |||
+ | |||
+static jboolean JNI_FeatureUtilities_GetDoHEnabled(JNIEnv* env) { | |||
+static jboolean JNI_CachedFeatureFlags_GetDoHEnabled(JNIEnv* env) { | |||
+ std::string doh_mode = g_browser_process->local_state()->GetString(prefs::kDnsOverHttpsMode); | |||
+ return ((doh_mode == "secure") || (doh_mode == "auto")); | |||
+} | |||
+ | |||
+static void JNI_FeatureUtilities_SetDoHEnabled(JNIEnv* env, jboolean enabled) { | |||
+static void JNI_CachedFeatureFlags_SetDoHEnabled(JNIEnv* env, jboolean enabled) { | |||
+ if (enabled) | |||
+ g_browser_process->local_state()->SetString(prefs::kDnsOverHttpsMode, "secure"); | |||
+ else | |||
+ g_browser_process->local_state()->SetString(prefs::kDnsOverHttpsMode, "off"); | |||
+} | |||
+ | |||
+static ScopedJavaLocalRef<jstring> JNI_FeatureUtilities_GetDoHTemplates(JNIEnv* env) { | |||
+static ScopedJavaLocalRef<jstring> JNI_CachedFeatureFlags_GetDoHTemplates(JNIEnv* env) { | |||
+ return base::android::ConvertUTF8ToJavaString(env, g_browser_process->local_state()->GetString(prefs::kDnsOverHttpsTemplates)); | |||
+} | |||
+ | |||
+static void JNI_FeatureUtilities_SetDoHTemplates(JNIEnv* env, const JavaParamRef<jstring>& templates) { | |||
+static void JNI_CachedFeatureFlags_SetDoHTemplates(JNIEnv* env, const JavaParamRef<jstring>& templates) { | |||
+ g_browser_process->local_state()->SetString(prefs::kDnsOverHttpsTemplates, base::android::ConvertJavaStringToUTF8(env, templates)); | |||
+} | |||
--- a/chrome/browser/net/system_network_context_manager.cc | |||
+++ b/chrome/browser/net/system_network_context_manager.cc | |||
@@ -377,40 +377,12 @@ SystemNetworkContextManager::SystemNetwo | |||
local_state_->SetDefaultPrefValue(prefs::kBuiltInDnsClientEnabled, | |||
base::Value(ShouldEnableAsyncDns())); | |||
std::string default_doh_mode = chrome_browser_net::kDnsOverHttpsModeOff; | |||
- std::string default_doh_templates = ""; | |||
- if (base::FeatureList::IsEnabled(features::kDnsOverHttps)) { | |||
- if (features::kDnsOverHttpsFallbackParam.Get()) { | |||
- default_doh_mode = chrome_browser_net::kDnsOverHttpsModeAutomatic; | |||
- } else { | |||
- default_doh_mode = chrome_browser_net::kDnsOverHttpsModeSecure; | |||
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java | |||
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java | |||
@@ -124,6 +124,26 @@ public class CachedFeatureFlags { | |||
private static Map<String, String> sOverridesTestFeatures; | |||
private static String sReachedCodeProfilerTrialGroup; | |||
+ /** | |||
+ * Records whether custom URL for DoH is enabled with native-side feature utilities. | |||
+ * @param url Whether custom URL is enabled or not. | |||
+ */ | |||
+ public static void setDoHEnabled(boolean enabled) { | |||
+ CachedFeatureFlagsJni.get().setDoHEnabled(enabled); | |||
+ } | |||
+ | |||
+ public static boolean getDoHEnabled() { | |||
+ return CachedFeatureFlagsJni.get().getDoHEnabled(); | |||
+ } | |||
+ | |||
+ public static void setDoHTemplates(String t) { | |||
+ CachedFeatureFlagsJni.get().setDoHTemplates(t); | |||
+ } | |||
+ | |||
+ public static String getDoHTemplates() { | |||
+ return CachedFeatureFlagsJni.get().getDoHTemplates(); | |||
+ } | |||
+ | |||
/** | |||
* Checks if a cached feature flag is enabled. | |||
* | |||
@@ -393,6 +413,10 @@ public class CachedFeatureFlags { | |||
@NativeMethods | |||
interface Natives { | |||
+ void setDoHEnabled(boolean enabled); | |||
+ boolean getDoHEnabled(); | |||
+ void setDoHTemplates(String templates); | |||
+ String getDoHTemplates(); | |||
boolean isNetworkServiceWarmUpEnabled(); | |||
} | |||
} | |||
--- a/chrome/browser/net/stub_resolver_config_reader.cc | |||
+++ b/chrome/browser/net/stub_resolver_config_reader.cc | |||
@@ -122,41 +122,12 @@ StubResolverConfigReader::StubResolverCo | |||
local_state_->SetDefaultPrefValue(prefs::kBuiltInDnsClientEnabled, | |||
base::Value(ShouldEnableAsyncDns())); | |||
std::string default_doh_mode = chrome_browser_net::kDnsOverHttpsModeOff; | |||
- std::string default_doh_templates; | |||
- if (base::FeatureList::IsEnabled(features::kDnsOverHttps)) { | |||
- if (features::kDnsOverHttpsFallbackParam.Get()) { | |||
- default_doh_mode = chrome_browser_net::kDnsOverHttpsModeAutomatic; | |||
- } else { | |||
- default_doh_mode = chrome_browser_net::kDnsOverHttpsModeSecure; | |||
- } | |||
- default_doh_templates = features::kDnsOverHttpsTemplatesParam.Get(); | |||
- } | |||
- default_doh_templates = features::kDnsOverHttpsTemplatesParam.Get(); | |||
- } | |||
+ std::string default_doh_templates = features::kDnsOverHttpsTemplatesParam.Get(); | |||
local_state_->SetDefaultPrefValue(prefs::kDnsOverHttpsMode, | |||
base::Value(default_doh_mode)); | |||
local_state_->SetDefaultPrefValue(prefs::kDnsOverHttpsTemplates, | |||
base::Value(default_doh_templates)); | |||
+ std::string default_doh_templates = features::kDnsOverHttpsTemplatesParam.Get(); | |||
local_state_->SetDefaultPrefValue(prefs::kDnsOverHttpsMode, | |||
base::Value(default_doh_mode)); | |||
local_state_->SetDefaultPrefValue(prefs::kDnsOverHttpsTemplates, | |||
base::Value(default_doh_templates)); | |||
- // If the user has explicitly enabled or disabled the DoH experiment in | |||
- // chrome://flags, store that choice in the user prefs so that it can be | |||
- // persisted after the experiment ends. Also make sure to remove the stored | |||
- // prefs value if the user has changed their chrome://flags selection to the | |||
- // default. | |||
- flags_ui::PrefServiceFlagsStorage flags_storage(local_state_); | |||
- std::set<std::string> entries = flags_storage.GetFlags(); | |||
- if (entries.count("[email protected]")) { | |||
- // The user has "Enabled" selected. | |||
- local_state_->SetString(prefs::kDnsOverHttpsMode, | |||
- chrome_browser_net::kDnsOverHttpsModeAutomatic); | |||
- } else if (entries.count("[email protected]")) { | |||
- // The user has "Disabled" selected. | |||
- local_state_->SetString(prefs::kDnsOverHttpsMode, | |||
- chrome_browser_net::kDnsOverHttpsModeOff); | |||
- } else { | |||
- // The user has "Default" selected. | |||
- local_state_->ClearPref(prefs::kDnsOverHttpsMode); | |||
- } | |||
- | |||
PrefChangeRegistrar::NamedChangeCallback dns_pref_callback = | |||
base::BindRepeating(&OnStubResolverConfigChanged, | |||
base::Unretained(local_state_)); | |||
@@ -545,9 +517,14 @@ void SystemNetworkContextManager::GetStu | |||
- // If the user has explicitly enabled or disabled the DoH experiment in | |||
- // chrome://flags and the DoH UI setting is not visible, store that choice | |||
- // in the user prefs so that it can be persisted after the experiment ends. | |||
- // Also make sure to remove the stored prefs value if the user has changed | |||
- // their chrome://flags selection to the default. | |||
- if (!features::kDnsOverHttpsShowUiParam.Get()) { | |||
- flags_ui::PrefServiceFlagsStorage flags_storage(local_state_); | |||
- std::set<std::string> entries = flags_storage.GetFlags(); | |||
- if (entries.count("[email protected]")) { | |||
- // The user has "Enabled" selected. | |||
- local_state_->SetString(prefs::kDnsOverHttpsMode, | |||
- chrome_browser_net::kDnsOverHttpsModeAutomatic); | |||
- } else if (entries.count("[email protected]")) { | |||
- // The user has "Disabled" selected. | |||
- local_state_->SetString(prefs::kDnsOverHttpsMode, | |||
- chrome_browser_net::kDnsOverHttpsModeOff); | |||
- } else { | |||
- // The user has "Default" selected. | |||
- local_state_->ClearPref(prefs::kDnsOverHttpsMode); | |||
- } | |||
- } | |||
} | |||
std::string doh_templates = | |||
local_state->GetString(prefs::kDnsOverHttpsTemplates); | |||
- std::string server_method; | |||
pref_change_registrar_.Add(prefs::kBuiltInDnsClientEnabled, pref_callback); | |||
@@ -346,8 +317,13 @@ void StubResolverConfigReader::GetAndUpd | |||
std::vector<net::DnsOverHttpsServerConfig> dns_over_https_servers; | |||
base::Optional<std::vector<network::mojom::DnsOverHttpsServerPtr>> | |||
servers_mojo; | |||
- if (!doh_templates.empty() && | |||
- *secure_dns_mode != net::DnsConfig::SecureDnsMode::OFF) { | |||
- secure_dns_mode != net::DnsConfig::SecureDnsMode::OFF) { | |||
+ if (doh_templates.empty()) { | |||
+ *secure_dns_mode = net::DnsConfig::SecureDnsMode::OFF; | |||
+ secure_dns_mode = net::DnsConfig::SecureDnsMode::OFF; | |||
+ doh_mode = chrome_browser_net::kDnsOverHttpsModeOff; | |||
+ } | |||
+ | |||
+ LOG(INFO) << "DoH templates: '" << doh_templates << "' with mode " << doh_mode; | |||
+ if (*secure_dns_mode != net::DnsConfig::SecureDnsMode::OFF) { | |||
+ if (secure_dns_mode != net::DnsConfig::SecureDnsMode::OFF) { | |||
+ std::string server_method; | |||
for (const std::string& server_template : | |||
SplitString(doh_templates, " ", base::TRIM_WHITESPACE, | |||
base::SPLIT_WANT_NONEMPTY)) { | |||
for (base::StringPiece server_template : | |||
chrome_browser_net::SplitDohTemplateGroup(doh_templates)) { | |||
if (!net::dns_util::IsValidDohTemplate(server_template, &server_method)) { | |||
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd | |||
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd | |||
@@ -599,6 +599,17 @@ CHAR-LIMIT guidelines: | |||
@@ -594,6 +594,17 @@ CHAR-LIMIT guidelines: | |||
Chrome Passwords | |||
</message> | |||
@ -477,11 +496,11 @@ Subject: Add user setting for DNS-over-HTTPS (DoH) custom URL | |||
+ </message> | |||
+ | |||
<!-- Homepage preferences --> | |||
<message name="IDS_OPTIONS_HOMEPAGE_EDIT_TITLE" desc="The title of the screen that allows users to change the URL that opens when they tap on the home page button in the omnibox."> | |||
Edit home page | |||
<message name="IDS_OPTIONS_HOMEPAGE_EDIT_HINT" desc="Hint for the text edit on Homepage Preference setting, guiding user to enter their customized homepage setting"> | |||
Enter custom web address | |||
--- a/chrome/common/chrome_features.cc | |||
+++ b/chrome/common/chrome_features.cc | |||
@@ -293,12 +293,12 @@ const char kDisallowUnsafeHttpDownloadsP | |||
@@ -265,12 +265,12 @@ const base::Feature kDnsHttpssvc{"DnsHtt | |||
// Enable DNS over HTTPS (DoH). | |||
const base::Feature kDnsOverHttps{"DnsOverHttps", | |||
@ -0,0 +1,49 @@ | |||
From: csagan5 <[email protected]> | |||
Date: Sat, 9 May 2020 14:42:37 +0200 | |||
Subject: Change default webRTC policy to not use any address | |||
This prevents leakage of the local IP address. | |||
See also: https://github.com/bromite/bromite/issues/553 | |||
--- | |||
chrome/browser/ui/browser_ui_prefs.cc | 4 ++-- | |||
.../peerconnection/peer_connection_dependency_factory.cc | 7 ++++--- | |||
2 files changed, 6 insertions(+), 5 deletions(-) | |||
diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc | |||
--- a/chrome/browser/ui/browser_ui_prefs.cc | |||
+++ b/chrome/browser/ui/browser_ui_prefs.cc | |||
@@ -83,8 +83,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { | |||
false); | |||
#endif | |||
// TODO(guoweis): Remove next 2 options at M50. | |||
- registry->RegisterBooleanPref(prefs::kWebRTCMultipleRoutesEnabled, true); | |||
- registry->RegisterBooleanPref(prefs::kWebRTCNonProxiedUdpEnabled, true); | |||
+ registry->RegisterBooleanPref(prefs::kWebRTCMultipleRoutesEnabled, false); | |||
+ registry->RegisterBooleanPref(prefs::kWebRTCNonProxiedUdpEnabled, false); | |||
registry->RegisterStringPref(prefs::kWebRTCIPHandlingPolicy, | |||
blink::kWebRTCIPHandlingDefault); | |||
registry->RegisterStringPref(prefs::kWebRTCUDPPortRange, std::string()); | |||
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc | |||
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc | |||
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc | |||
@@ -435,12 +435,13 @@ PeerConnectionDependencyFactory::CreatePortAllocator( | |||
port_config.enable_nonproxied_udp = false; | |||
break; | |||
case DEFAULT: | |||
- port_config.enable_multiple_routes = true; | |||
- port_config.enable_nonproxied_udp = true; | |||
+ port_config.enable_multiple_routes = false; | |||
+ port_config.enable_nonproxied_udp = false; | |||
+ port_config.enable_default_local_candidate = false; | |||
break; | |||
} | |||
- VLOG(3) << "WebRTC routing preferences: " | |||
+ LOG(INFO) << "WebRTC routing preferences: " | |||
<< "policy: " << policy | |||
<< ", multiple_routes: " << port_config.enable_multiple_routes | |||
<< ", nonproxied_udp: " << port_config.enable_nonproxied_udp | |||
-- | |||
2.17.1 | |||
@ -1,95 +0,0 @@ | |||
From: csagan5 <[email protected]> | |||
Date: Thu, 20 Feb 2020 22:44:06 +0100 | |||
Subject: Disable AImageReader for ARM64/P and ARM64/Q | |||
--- | |||
chrome/browser/android/chrome_startup_flags.cc | 9 +++++++++ | |||
gpu/config/gpu_finch_features.cc | 4 ++++ | |||
gpu/config/gpu_util.cc | 8 ++++++++ | |||
media/base/media_switches.cc | 4 ++++ | |||
4 files changed, 25 insertions(+) | |||
--- a/chrome/browser/android/chrome_startup_flags.cc | |||
+++ b/chrome/browser/android/chrome_startup_flags.cc | |||
@@ -6,6 +6,7 @@ | |||
#include "chrome/browser/android/chrome_startup_flags.h" | |||
+#include "base/android/build_info.h" | |||
#include "base/android/jni_android.h" | |||
#include "base/android/jni_string.h" | |||
#include "base/android/scoped_java_ref.h" | |||
@@ -16,6 +17,7 @@ | |||
#include "chrome/common/chrome_switches.h" | |||
#include "components/browser_sync/browser_sync_switches.h" | |||
#include "components/dom_distiller/core/dom_distiller_switches.h" | |||
+#include "content/public/common/content_switches.h" | |||
#include "media/base/media_switches.h" | |||
namespace { | |||
@@ -40,6 +42,13 @@ void SetChromeSpecificCommandLineFlags() | |||
if (base::SysInfo::IsLowEndDevice()) | |||
SetCommandLineSwitchASCII(switches::kDisableSyncTypes, "Favicon Images"); | |||
+#ifdef ARCH_CPU_ARM64 | |||
+ // workaround for Android 9/10 crashes on ARM64 CPUs | |||
+ if (base::android::BuildInfo::GetInstance()->sdk_int() >= base::android::SDK_VERSION_P) { | |||
+ SetCommandLineSwitchASCII("disable_aimagereader", "1"); | |||
+ } | |||
+#endif | |||
+ | |||
// Enable DOM Distiller backend. | |||
SetCommandLineSwitch(switches::kEnableDomDistiller); | |||
} | |||
--- a/gpu/config/gpu_finch_features.cc | |||
+++ b/gpu/config/gpu_finch_features.cc | |||
@@ -15,7 +15,11 @@ namespace features { | |||
#if defined(OS_ANDROID) | |||
// Use android AImageReader when playing videos with MediaPlayer. | |||
const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer", | |||
+#ifdef ARCH_CPU_ARM64 | |||
+ base::FEATURE_DISABLED_BY_DEFAULT}; | |||
+#else | |||
base::FEATURE_ENABLED_BY_DEFAULT}; | |||
+#endif | |||
// Used only by webview to disable SurfaceControl. | |||
const base::Feature kDisableSurfaceControlForWebview{ | |||
--- a/gpu/config/gpu_util.cc | |||
+++ b/gpu/config/gpu_util.cc | |||
@@ -47,6 +47,9 @@ GpuFeatureStatus GetAndroidSurfaceContro | |||
#if !defined(OS_ANDROID) | |||
return kGpuFeatureStatusDisabled; | |||
#else | |||
+ if (blacklisted_features.count(GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL)) | |||
+ return kGpuFeatureStatusBlacklisted; | |||
+ | |||
if (!gpu_preferences.enable_android_surface_control) | |||
return kGpuFeatureStatusDisabled; | |||
@@ -288,6 +291,11 @@ void AdjustGpuFeatureStatusToWorkarounds | |||
gpu_feature_info->status_values[GPU_FEATURE_TYPE_ACCELERATED_WEBGL2] = | |||
kGpuFeatureStatusBlacklisted; | |||
} | |||
+ | |||
+ if (gpu_feature_info->IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) { | |||
+ gpu_feature_info->status_values[GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL] = | |||
+ kGpuFeatureStatusBlacklisted; | |||
+ } | |||
} | |||
GPUInfo* g_gpu_info_cache = nullptr; | |||
--- a/media/base/media_switches.cc | |||
+++ b/media/base/media_switches.cc | |||
@@ -504,7 +504,11 @@ const base::Feature kMediaDrmPreprovisio | |||
// Enables the Android Image Reader path for Video decoding(for AVDA and MCVD) | |||
const base::Feature kAImageReaderVideoOutput{"AImageReaderVideoOutput", | |||
+#ifdef ARCH_CPU_ARM64 | |||
+ base::FEATURE_DISABLED_BY_DEFAULT}; | |||
+#else | |||
base::FEATURE_ENABLED_BY_DEFAULT}; | |||
+#endif | |||
// Prevents using SurfaceLayer for videos. This is meant to be used by embedders | |||
// that cannot support SurfaceLayer at the moment. |
@ -1,28 +0,0 @@ | |||
From: Xing Liu <[email protected]> | |||
Date: Tue, 18 Feb 2020 21:10:54 +0000 | |||
Subject: Download on Android Q: Remove a DCHECK in CreateReservation. | |||
When resuming a download, the suggested path can be content URI. This | |||
will hit a DCHECK in CreateReservation. | |||
Bug: 1045642 | |||
Change-Id: I61c452afafbbc9606f747c84ff18e6b9dc9a0fb6 | |||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2062759 | |||
Reviewed-by: Min Qin <[email protected]> | |||
Commit-Queue: Xing Liu <[email protected]> | |||
Cr-Commit-Position: refs/heads/[email protected]{#742270} | |||
--- | |||
components/download/internal/common/download_path_reservation_tracker.cc | 2 -- | |||
1 file changed, 2 deletions(-) | |||
--- a/components/download/internal/common/download_path_reservation_tracker.cc | |||
+++ b/components/download/internal/common/download_path_reservation_tracker.cc | |||
@@ -325,8 +325,6 @@ PathValidationResult ValidatePathAndReso | |||
// - Returns the result of creating the path reservation. | |||
PathValidationResult CreateReservation(const CreateReservationInfo& info, | |||
base::FilePath* reserved_path) { | |||
- DCHECK(info.suggested_path.IsAbsolute()); | |||
- | |||
// Create a reservation map if one doesn't exist. It will be automatically | |||
// deleted when all the reservations are revoked. | |||
if (g_reservation_map == NULL) |
@ -0,0 +1,87 @@ | |||
From: csagan5 <[email protected]> | |||
Date: Sun, 14 Apr 2019 12:08:27 +0200 | |||
Subject: Remove all sync and account permissions/features from manifest | |||
--- | |||
chrome/android/java/AndroidManifest.xml | 26 ---------- | |||
components/sync/android/java/src/org/chromium/components/sync/AndroidSyncSettings.java | 2 | |||
2 files changed, 1 insertion(+), 27 deletions(-) | |||
--- a/chrome/android/java/AndroidManifest.xml | |||
+++ b/chrome/android/java/AndroidManifest.xml | |||
@@ -43,23 +43,17 @@ by a child template that "extends" this | |||
{% if target_sdk_version|int > 27 or target_sdk_version == "Q" %} | |||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> | |||
{% endif %} | |||
- <uses-permission android:name="android.permission.GET_ACCOUNTS"/> | |||
<uses-permission android:name="android.permission.INTERNET"/> | |||
- <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> | |||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> | |||
<uses-permission android:name="android.permission.NFC"/> | |||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> | |||
- <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/> | |||
- <uses-permission android:name="android.permission.READ_SYNC_STATS"/> | |||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> | |||
<uses-permission android:name="android.permission.RECORD_AUDIO"/> | |||
- <uses-permission android:name="android.permission.USE_CREDENTIALS"/> | |||
<uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/> | |||
<uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/> | |||
<uses-permission android:name="android.permission.VIBRATE"/> | |||
<uses-permission android:name="android.permission.WAKE_LOCK"/> | |||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> | |||
- <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/> | |||
{% set enable_vr = enable_vr|default(0) %} | |||
{% if enable_vr == "true" %} | |||
<!-- Indicates use of Android's VR-mode, available only on Android N+. --> | |||
@@ -95,8 +89,6 @@ by a child template that "extends" this | |||
<uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/> | |||
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/> | |||
- <uses-permission android:name="com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS" /> | |||
- | |||
{% block extra_uses_permissions %} | |||
{% endblock %} | |||
@@ -932,16 +924,6 @@ by a child template that "extends" this | |||
android:resource="@xml/file_paths" /> | |||
</provider> | |||
- <!-- Sync adapter for browser invalidation. --> | |||
- <service android:name="org.chromium.chrome.browser.invalidation.ChromeBrowserSyncAdapterService" | |||
- android:exported="false"> | |||
- <intent-filter> | |||
- <action android:name="android.content.SyncAdapter" /> | |||
- </intent-filter> | |||
- <meta-data android:name="android.content.SyncAdapter" | |||
- android:resource="@xml/syncadapter" /> | |||
- </service> | |||
- | |||
<!-- Broadcast receiver that will be notified of account changes --> | |||
<receiver android:name="org.chromium.chrome.browser.services.AccountsChangedReceiver"> | |||
<intent-filter> | |||
@@ -1010,14 +992,6 @@ by a child template that "extends" this | |||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" | |||
android:hardwareAccelerated="false" /> | |||
- <!-- Notification service for sync. --> | |||
- <service android:name="com.google.ipc.invalidation.ticl.android2.TiclService" | |||
- android:exported="false"/> | |||
- <receiver android:name="com.google.ipc.invalidation.ticl.android2.AndroidInternalScheduler$AlarmReceiver" | |||
- android:exported="false"/> | |||
- <receiver android:name="com.google.ipc.invalidation.external.client.contrib.AndroidListener$AlarmReceiver" | |||
- android:exported="false"/> | |||
- | |||
<!-- Android Notification service listener --> | |||
<service android:name="org.chromium.chrome.browser.notifications.NotificationService" | |||
android:exported="false"/> | |||
--- a/components/sync/android/java/src/org/chromium/components/sync/AndroidSyncSettings.java | |||
+++ b/components/sync/android/java/src/org/chromium/components/sync/AndroidSyncSettings.java | |||
@@ -311,7 +311,7 @@ public class AndroidSyncSettings { | |||
mIsSyncable = false; | |||
mChromeSyncEnabled = false; | |||
} | |||
- mMasterSyncEnabled = mSyncContentResolverDelegate.getMasterSyncAutomatically(); | |||
+ mMasterSyncEnabled = false; | |||
StrictMode.setThreadPolicy(oldPolicy); | |||
return oldChromeSyncEnabled != mChromeSyncEnabled |
@ -1,44 +0,0 @@ | |||
From: csagan5 <[email protected]> | |||
Date: Thu, 9 Jan 2020 19:59:08 +0100 | |||
Subject: Use a minimum DoH timeout of 400ms | |||
--- | |||
net/dns/dns_session.cc | 7 ++++++- | |||
net/dns/dns_session.h | 1 + | |||
2 files changed, 7 insertions(+), 1 deletion(-) | |||
--- a/net/dns/dns_session.cc | |||
+++ b/net/dns/dns_session.cc | |||
@@ -118,6 +118,8 @@ DnsSession::DnsSession(const DnsConfig& | |||
socket_pool_->Initialize(&config_.nameservers, net_log); | |||
UMA_HISTOGRAM_CUSTOM_COUNTS("AsyncDNS.ServerCount", | |||
config_.nameservers.size(), 1, 10, 11); | |||
+ // minimum timeout for all DoH requests | |||
+ min_doh_timeout_ = base::TimeDelta::FromMilliseconds(400); | |||
UpdateTimeouts(NetworkChangeNotifier::GetConnectionType()); | |||
InitializeServerStats(); | |||
} | |||
@@ -334,9 +336,12 @@ base::TimeDelta DnsSession::NextTimeout( | |||
} | |||
base::TimeDelta DnsSession::NextDohTimeout(unsigned doh_server_index) { | |||
- return NextTimeoutHelper( | |||
+ base::TimeDelta timeout = NextTimeoutHelper( | |||
GetServerStats(doh_server_index, true /* is _doh_server */), | |||
0 /* num_backoffs */); | |||
+ if (timeout < min_doh_timeout_) | |||
+ return min_doh_timeout_; | |||
+ return timeout; | |||
} | |||
base::TimeDelta DnsSession::NextTimeoutHelper(ServerStats* server_stats, | |||
--- a/net/dns/dns_session.h | |||
+++ b/net/dns/dns_session.h | |||
@@ -176,6 +176,7 @@ class NET_EXPORT_PRIVATE DnsSession : pu | |||
base::TimeDelta initial_timeout_; | |||
base::TimeDelta max_timeout_; | |||
+ base::TimeDelta min_doh_timeout_; | |||
// TODO(crbug.com/1022059): Move all handling of ServerStats (both for DoH and | |||
// non-DoH) to ResolveContext. |