From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 5 Dec 2019 22:41:25 +0100 Subject: Add option to configure the ad blocker filters URL --- chrome/android/chrome_java_resources.gni | 2 + chrome/android/chrome_java_sources.gni | 2 + .../java/res/layout/adblock_editor.xml | 65 +++++++++++++ chrome/android/java/res/values/values.xml | 2 + .../java/res/xml/adblock_preferences.xml | 25 +++++ .../android/java/res/xml/main_preferences.xml | 5 + .../browser/settings/AdBlockEditor.java | 92 +++++++++++++++++++ .../browser/settings/AdBlockPreferences.java | 61 ++++++++++++ chrome/app/generated_resources.grd | 10 ++ chrome/browser/browser_process_impl.cc | 3 +- .../flags/android/cached_feature_flags.cc | 8 ++ .../browser/flags/CachedFeatureFlags.java | 10 ++ .../net/system_network_context_manager.cc | 4 + .../strings/android_chrome_strings.grd | 14 +++ chrome/common/pref_names.cc | 3 + chrome/common/pref_names.h | 1 + .../adblock_updater_service.cc | 6 +- .../adblock_updater_service.h | 3 +- 18 files changed, 311 insertions(+), 5 deletions(-) create mode 100644 chrome/android/java/res/layout/adblock_editor.xml create mode 100644 chrome/android/java/res/xml/adblock_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java 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 @@ -885,6 +885,7 @@ chrome_java_resources = [ "java/res/layout/account_picker_new_account_row_legacy.xml", "java/res/layout/account_picker_row.xml", "java/res/layout/account_picker_row_legacy.xml", + "java/res/layout/adblock_editor.xml", "java/res/layout/add_languages_main.xml", "java/res/layout/add_to_homescreen_dialog.xml", "java/res/layout/auto_sign_in_first_run_dialog.xml", @@ -1175,6 +1176,7 @@ chrome_java_resources = [ "java/res/xml/about_chrome_preferences.xml", "java/res/xml/accessibility_preferences.xml", "java/res/xml/account_management_preferences.xml", + "java/res/xml/adblock_preferences.xml", "java/res/xml/autofill_server_profile_preferences.xml", "java/res/xml/bookmark_widget_info.xml", "java/res/xml/clear_browsing_data_preferences_tab.xml", diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni @@ -1321,6 +1321,8 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/photo_picker/DecodeVideoTask.java", "java/src/org/chromium/chrome/browser/photo_picker/DecoderService.java", "java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceHost.java", + "java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java", + "java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.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/adblock_editor.xml b/chrome/android/java/res/layout/adblock_editor.xml new file mode 100644 --- /dev/null +++ b/chrome/android/java/res/layout/adblock_editor.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml --- a/chrome/android/java/res/values/values.xml +++ b/chrome/android/java/res/values/values.xml @@ -66,6 +66,8 @@ + https://www.bromite.org/custom-filters + Proxy configuration chrome://proxy diff --git a/chrome/android/java/res/xml/adblock_preferences.xml b/chrome/android/java/res/xml/adblock_preferences.xml new file mode 100644 --- /dev/null +++ b/chrome/android/java/res/xml/adblock_preferences.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + 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 @@ -55,6 +55,11 @@ android:key="privacy" android:order="12" android:title="@string/prefs_privacy"/> + { + WebsitePreferenceBridge.setCategoryEnabled(browserContextHandle, ContentSettingsType.ADS, !(boolean) newValue); + return true; + }); + + mAdBlockEdit = findPreference(PREF_ADBLOCK_EDIT); + updateCurrentAdBlockUrl(); + } + + private void updateCurrentAdBlockUrl() { + mAdBlockEdit.setSummary(CachedFeatureFlags.getAdBlockFiltersURL()); + } + + @Override + public void onResume() { + super.onResume(); + updateCurrentAdBlockUrl(); + } +} diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -9806,6 +9806,16 @@ Please help our engineers fix this problem. Tell us what happened right before y Never show this again. + + + + Ad Blocking + + + Configure Ad Blocking and filters URL + + + Always allow ads on this site diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc @@ -1066,7 +1066,8 @@ BrowserProcessImpl::adblock_updater() { adblock_updater_ = std::make_unique( g_browser_process->system_network_context_manager()->GetSharedURLLoaderFactory(), std::move(scheduler), - g_browser_process->subresource_filter_ruleset_service()); + g_browser_process->subresource_filter_ruleset_service(), + local_state()->GetString(prefs::kAdBlockFiltersURL)); return adblock_updater_.get(); } diff --git a/chrome/browser/flags/android/cached_feature_flags.cc b/chrome/browser/flags/android/cached_feature_flags.cc --- a/chrome/browser/flags/android/cached_feature_flags.cc +++ b/chrome/browser/flags/android/cached_feature_flags.cc @@ -36,6 +36,14 @@ std::string GetReachedCodeProfilerTrialGroup() { } // namespace android } // namespace chrome +static ScopedJavaLocalRef JNI_CachedFeatureFlags_GetAdBlockFiltersURL(JNIEnv* env) { + return base::android::ConvertUTF8ToJavaString(env, g_browser_process->local_state()->GetString(prefs::kAdBlockFiltersURL)); +} + +static void JNI_CachedFeatureFlags_SetAdBlockFiltersURL(JNIEnv* env, const JavaParamRef& url) { + g_browser_process->local_state()->SetString(prefs::kAdBlockFiltersURL, base::android::ConvertJavaStringToUTF8(env, url)); +} + static jboolean JNI_CachedFeatureFlags_IsNetworkServiceWarmUpEnabled( JNIEnv* env) { return content::IsOutOfProcessNetworkService() && diff --git 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 --- 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 @@ -250,6 +250,14 @@ public class CachedFeatureFlags { ChromeFeatureList.isEnabled(ChromeFeatureList.REACHED_CODE_PROFILER)); } + public static void setAdBlockFiltersURL(String url) { + CachedFeatureFlagsJni.get().setAdBlockFiltersURL(url); + } + + public static String getAdBlockFiltersURL() { + return CachedFeatureFlagsJni.get().getAdBlockFiltersURL(); + } + /** * Caches flags that must take effect on startup but are set via native code. */ @@ -402,5 +410,7 @@ public class CachedFeatureFlags { @NativeMethods interface Natives { boolean isNetworkServiceWarmUpEnabled(); + void setAdBlockFiltersURL(String url); + String getAdBlockFiltersURL(); } } diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc @@ -328,6 +328,8 @@ SystemNetworkContextManager::SystemNetworkContextManager( SSLConfigServiceManager::CreateDefaultManager(local_state_)), proxy_config_monitor_(local_state_), stub_resolver_config_reader_(local_state_) { + local_state_->SetDefaultPrefValue(prefs::kAdBlockFiltersURL, + base::Value("https://www.bromite.org/filters/filters.dat")); #if !defined(OS_ANDROID) // QuicAllowed was not part of Android policy. const base::Value* value = @@ -389,6 +391,8 @@ SystemNetworkContextManager::~SystemNetworkContextManager() { void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) { StubResolverConfigReader::RegisterPrefs(registry); + registry->RegisterStringPref(prefs::kAdBlockFiltersURL, std::string()); + // Static auth params registry->RegisterStringPref(prefs::kAuthSchemes, "basic,digest,ntlm,negotiate"); diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd @@ -1825,6 +1825,20 @@ To change this setting, <resetlink>reset sync

+ + + AdBlock settings + + + Edit filters URL + + + Filters URL + + + Visit help page + + Drag from top and touch the back button to exit full screen. 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 @@ -2043,6 +2043,9 @@ const char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled"; // capture devices without prompt. const char kAudioCaptureAllowedUrls[] = "hardware.audio_capture_allowed_urls"; +// Holds the URL to an indexed subresource filters file. +const char kAdBlockFiltersURL[] = "adblock.filters_url"; + // A pref holding the value of the policy used to explicitly allow or deny // access to video capture devices. When enabled or not set, the user is // prompted for device access. When disabled, access to video capture devices 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 @@ -31,6 +31,7 @@ extern const char kDownloadRestrictions[]; extern const char kForceEphemeralProfiles[]; extern const char kHomePageIsNewTabPage[]; extern const char kHomePage[]; +extern const char kAdBlockFiltersURL[]; extern const char kImportantSitesDialogHistory[]; extern const char kProfileCreationTime[]; #if defined(OS_WIN) diff --git a/components/component_updater/adblock_updater_service.cc b/components/component_updater/adblock_updater_service.cc --- a/components/component_updater/adblock_updater_service.cc +++ b/components/component_updater/adblock_updater_service.cc @@ -46,12 +46,12 @@ const int initial_check_delay = 5, next_check_delay = 60*60*24*7, // 1 week on_demand_check_delay = 60; // minimum 1 minute between each on-demand check -AdBlockUpdaterService::AdBlockUpdaterService(scoped_refptr shared_url_network_factory, std::unique_ptr scheduler, subresource_filter::RulesetService* ruleset_service) +AdBlockUpdaterService::AdBlockUpdaterService(scoped_refptr shared_url_network_factory, std::unique_ptr scheduler, + subresource_filter::RulesetService* ruleset_service, std::string filters_url) : ruleset_service_(ruleset_service), shared_url_network_factory_(shared_url_network_factory), scheduler_(std::move(scheduler)) { DCHECK(ruleset_service); - //TODO: retrieve filters URL from config/prefs - filters_url_ = "https://www.bromite.org/filters/filters.dat"; + filters_url_ = filters_url; } AdBlockUpdaterService::~AdBlockUpdaterService() { diff --git a/components/component_updater/adblock_updater_service.h b/components/component_updater/adblock_updater_service.h --- a/components/component_updater/adblock_updater_service.h +++ b/components/component_updater/adblock_updater_service.h @@ -54,7 +54,8 @@ class Observer { // All methods are safe to call ONLY from the browser's main thread. class AdBlockUpdaterService { public: - AdBlockUpdaterService(scoped_refptr shared_url_network_factory, std::unique_ptr scheduler, subresource_filter::RulesetService* ruleset_service); + AdBlockUpdaterService(scoped_refptr shared_url_network_factory, std::unique_ptr scheduler, + subresource_filter::RulesetService* ruleset_service, std::string filters_url); ~AdBlockUpdaterService(); // Adds an observer for this class. An observer should not be added more -- 2.17.1