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 | 67 ++++++++++++++ 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 | 11 +++ .../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, 316 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 @@ -826,6 +826,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", @@ -1106,6 +1107,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 @@ -1307,6 +1307,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,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ -41,6 +41,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 @@ -89,6 +89,11 @@ android:key="privacy" android:order="18" 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 @@ -10047,6 +10047,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 @@ -8,6 +8,9 @@ #include "base/android/jni_string.h" #include "base/feature_list.h" +#include "chrome/browser/browser_process.h" +#include "chrome/common/pref_names.h" +#include "components/prefs/pref_service.h" #include "content/public/common/content_features.h" #include "content/public/common/network_service_util.h" @@ -41,3 +44,11 @@ static jboolean JNI_CachedFeatureFlags_IsNetworkServiceWarmUpEnabled( return content::IsOutOfProcessNetworkService() && base::FeatureList::IsEnabled(features::kWarmUpNetworkProcess); } + +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)); +} 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 @@ -260,6 +260,14 @@ public class CachedFeatureFlags { ChromeFeatureList.REACHED_CODE_PROFILER, "sampling_interval_us", 0)); } + 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. */ @@ -412,5 +420,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 @@ -331,6 +331,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 = @@ -393,6 +395,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 @@ -214,6 +214,20 @@ CHAR-LIMIT guidelines: Enter VR + + + AdBlock settings + + + Edit filters URL + + + Filters URL + + + Visit help page + + 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 @@ -2103,6 +2103,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 @@ -30,6 +30,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