decoupled activation flag with adblock site setting
first step towards completely deactivating the functionality
This commit is contained in:
@@ -17,31 +17,31 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
|
||||
chrome/android/chrome_java_sources.gni | 2 +
|
||||
.../java/res/layout/adblock_editor.xml | 67 +++++
|
||||
chrome/android/java/res/values/styles.xml | 18 ++
|
||||
chrome/android/java/res/values/values.xml | 2 +
|
||||
chrome/android/java/res/values/values.xml | 4 +
|
||||
.../java/res/xml/adblock_preferences.xml | 25 ++
|
||||
.../android/java/res/xml/main_preferences.xml | 5 +
|
||||
.../browser/settings/AdBlockEditor.java | 91 ++++++
|
||||
.../browser/settings/AdBlockPreferences.java | 61 ++++
|
||||
.../browser/settings/AdBlockPreferences.java | 58 ++++
|
||||
.../chrome/browser/tabmodel/TabModelImpl.java | 2 +-
|
||||
chrome/app/generated_resources.grd | 10 +
|
||||
chrome/browser/after_startup_task_utils.cc | 4 +
|
||||
chrome/browser/browser_process.h | 6 +
|
||||
chrome/browser/browser_process_impl.cc | 20 ++
|
||||
chrome/browser/browser_process_impl.cc | 21 ++
|
||||
chrome/browser/browser_process_impl.h | 2 +
|
||||
chrome/browser/chrome_browser_main.cc | 3 +
|
||||
chrome/browser/flags/BUILD.gn | 3 +
|
||||
.../flags/android/adblock_native_gateway.cc | 21 ++
|
||||
.../browser/flags/AdBlockNativeGateway.java | 20 ++
|
||||
.../net/system_network_context_manager.cc | 3 +
|
||||
.../flags/android/adblock_native_gateway.cc | 31 ++
|
||||
.../browser/flags/AdBlockNativeGateway.java | 30 ++
|
||||
.../net/system_network_context_manager.cc | 8 +
|
||||
.../sessions/session_restore_android.cc | 6 +-
|
||||
.../strings/android_chrome_strings.grd | 14 +
|
||||
chrome/common/pref_names.h | 3 +
|
||||
chrome/common/pref_names.h | 5 +
|
||||
.../strings/android/site_settings.grdp | 3 +
|
||||
components/component_updater/BUILD.gn | 7 +
|
||||
.../adblock_updater_service.cc | 268 ++++++++++++++++++
|
||||
.../adblock_updater_service.h | 98 +++++++
|
||||
.../download_filters_task.cc | 239 ++++++++++++++++
|
||||
.../component_updater/download_filters_task.h | 129 +++++++++
|
||||
.../adblock_updater_service.cc | 281 ++++++++++++++++++
|
||||
.../adblock_updater_service.h | 103 +++++++
|
||||
.../download_filters_task.cc | 239 +++++++++++++++
|
||||
.../component_updater/download_filters_task.h | 129 ++++++++
|
||||
...ent_subresource_filter_throttle_manager.cc | 15 +
|
||||
...tent_subresource_filter_throttle_manager.h | 2 +
|
||||
.../content/browser/ruleset_service.cc | 42 ++-
|
||||
@@ -52,7 +52,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
|
||||
.../browser/subresource_filter_features.cc | 116 +-------
|
||||
.../core/common/indexed_ruleset.cc | 5 +-
|
||||
.../Bromite-subresource-adblocker.inc | 3 +
|
||||
40 files changed, 1209 insertions(+), 127 deletions(-)
|
||||
40 files changed, 1254 insertions(+), 127 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
|
||||
@@ -210,10 +210,12 @@ diff --git a/chrome/android/java/res/values/styles.xml b/chrome/android/java/res
|
||||
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
|
||||
@@ -27,6 +27,8 @@ found in the LICENSE file.
|
||||
@@ -27,6 +27,10 @@ found in the LICENSE file.
|
||||
<!-- Compositor Tab Title Text -->
|
||||
<bool name="compositor_tab_title_fake_bold_text">true</bool>
|
||||
|
||||
+ <string name="adblock_on">Autoupdate enabled</string>
|
||||
+ <string name="adblock_off">Autoupdate disabled</string>
|
||||
+ <string name="adblock_help_url">https://www.bromite.org/custom-filters</string>
|
||||
+
|
||||
<string name="proxy_title">Proxy configuration</string>
|
||||
@@ -235,19 +237,19 @@ new file mode 100644
|
||||
+
|
||||
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
|
||||
+ android:key="adblock_switch"
|
||||
+ android:summaryOn="@string/text_on"
|
||||
+ android:summaryOff="@string/text_off" />
|
||||
+
|
||||
+ <org.chromium.chrome.browser.about_settings.HyperlinkPreference
|
||||
+ android:key="adblock_help"
|
||||
+ android:title="@string/adblock_help"
|
||||
+ app:url="@string/adblock_help_url" />
|
||||
+ android:summaryOn="@string/adblock_on"
|
||||
+ android:summaryOff="@string/adblock_off" />
|
||||
+
|
||||
+ <Preference
|
||||
+ android:key="adblock_edit"
|
||||
+ android:title="@string/options_adblock_edit_label"
|
||||
+ android:fragment="org.chromium.chrome.browser.settings.AdBlockEditor" />
|
||||
+
|
||||
+ <org.chromium.chrome.browser.about_settings.HyperlinkPreference
|
||||
+ android:key="adblock_help"
|
||||
+ android:title="@string/adblock_help"
|
||||
+ app:url="@string/adblock_help_url" />
|
||||
+
|
||||
+</PreferenceScreen>
|
||||
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
|
||||
@@ -323,7 +325,7 @@ new file mode 100644
|
||||
+
|
||||
+ @Override
|
||||
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
+ mSaveButton.setEnabled(s.length() != 0);
|
||||
+ mSaveButton.setEnabled(true); // was (s.length() != 0);
|
||||
+ mResetButton.setEnabled(true);
|
||||
+ }
|
||||
+
|
||||
@@ -364,7 +366,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/AdBloc
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockPreferences.java
|
||||
@@ -0,0 +1,61 @@
|
||||
@@ -0,0 +1,58 @@
|
||||
+// Copyright 2015 The Chromium Authors. All rights reserved.
|
||||
+// Use of this source code is governed by a BSD-style license that can be
|
||||
+// found in the LICENSE file.
|
||||
@@ -400,15 +402,12 @@ new file mode 100644
|
||||
+ getActivity().setTitle(R.string.options_adblock_title);
|
||||
+ SettingsUtils.addPreferencesFromResource(this, R.xml.adblock_preferences);
|
||||
+
|
||||
+ BrowserContextHandle browserContextHandle =
|
||||
+ getSiteSettingsDelegate().getBrowserContextHandle();
|
||||
+
|
||||
+ ChromeSwitchPreference mAdBlockSwitch =
|
||||
+ (ChromeSwitchPreference) findPreference(PREF_ADBLOCK_SWITCH);
|
||||
+ boolean isAdBlockEnabled = !WebsitePreferenceBridge.isCategoryEnabled(browserContextHandle, ContentSettingsType.ADS);
|
||||
+ boolean isAdBlockEnabled = AdBlockNativeGateway.getAdBlockEnabled();
|
||||
+ mAdBlockSwitch.setChecked(isAdBlockEnabled);
|
||||
+ mAdBlockSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
+ WebsitePreferenceBridge.setCategoryEnabled(browserContextHandle, ContentSettingsType.ADS, !(boolean) newValue);
|
||||
+ AdBlockNativeGateway.setAdBlockEnabled((boolean) newValue);
|
||||
+ return true;
|
||||
+ });
|
||||
+
|
||||
@@ -512,7 +511,7 @@ diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h
|
||||
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
|
||||
@@ -1134,6 +1134,26 @@ BrowserProcessImpl::component_updater() {
|
||||
@@ -1134,6 +1134,27 @@ BrowserProcessImpl::component_updater() {
|
||||
return component_updater_.get();
|
||||
}
|
||||
|
||||
@@ -531,6 +530,7 @@ diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_pro
|
||||
+ g_browser_process->system_network_context_manager()->GetSharedURLLoaderFactory(),
|
||||
+ std::move(scheduler),
|
||||
+ g_browser_process->subresource_filter_ruleset_service(),
|
||||
+ local_state()->GetBoolean(prefs::kAdBlockEnabled),
|
||||
+ local_state()->GetString(prefs::kAdBlockFiltersURL));
|
||||
+
|
||||
+ return adblock_updater_.get();
|
||||
@@ -602,7 +602,7 @@ diff --git a/chrome/browser/flags/android/adblock_native_gateway.cc b/chrome/bro
|
||||
new file mode 100755
|
||||
--- /dev/null
|
||||
+++ b/chrome/browser/flags/android/adblock_native_gateway.cc
|
||||
@@ -0,0 +1,21 @@
|
||||
@@ -0,0 +1,31 @@
|
||||
+#include "chrome/browser/flags/jni_headers/AdBlockNativeGateway_jni.h"
|
||||
+
|
||||
+#include "base/android/jni_string.h"
|
||||
@@ -624,11 +624,21 @@ new file mode 100755
|
||||
+ g_browser_process->local_state()->SetString(prefs::kAdBlockFiltersURL,
|
||||
+ base::android::ConvertJavaStringToUTF8(env, url));
|
||||
+}
|
||||
+
|
||||
+static jboolean JNI_AdBlockNativeGateway_GetAdBlockEnabled(
|
||||
+ JNIEnv* env) {
|
||||
+ return g_browser_process->local_state()->GetBoolean(prefs::kAdBlockEnabled);
|
||||
+}
|
||||
+
|
||||
+static void JNI_AdBlockNativeGateway_SetAdBlockEnabled(
|
||||
+ JNIEnv* env, jboolean enabled) {
|
||||
+ g_browser_process->local_state()->SetBoolean(prefs::kAdBlockEnabled, enabled);
|
||||
+}
|
||||
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/AdBlockNativeGateway.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/AdBlockNativeGateway.java
|
||||
new file mode 100755
|
||||
--- /dev/null
|
||||
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/AdBlockNativeGateway.java
|
||||
@@ -0,0 +1,20 @@
|
||||
@@ -0,0 +1,30 @@
|
||||
+package org.chromium.chrome.browser.flags;
|
||||
+
|
||||
+import org.jni_zero.CalledByNative;
|
||||
@@ -643,19 +653,34 @@ new file mode 100755
|
||||
+ return AdBlockNativeGatewayJni.get().getAdBlockFiltersURL();
|
||||
+ }
|
||||
+
|
||||
+ public static void setAdBlockEnabled(boolean enabled) {
|
||||
+ AdBlockNativeGatewayJni.get().setAdBlockEnabled(enabled);
|
||||
+ }
|
||||
+
|
||||
+ public static boolean getAdBlockEnabled() {
|
||||
+ return AdBlockNativeGatewayJni.get().getAdBlockEnabled();
|
||||
+ }
|
||||
+
|
||||
+ @NativeMethods
|
||||
+ interface Natives {
|
||||
+ void setAdBlockFiltersURL(String url);
|
||||
+ String getAdBlockFiltersURL();
|
||||
+ void setAdBlockEnabled(boolean enabled);
|
||||
+ boolean getAdBlockEnabled();
|
||||
+ }
|
||||
+}
|
||||
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
|
||||
@@ -609,6 +609,9 @@ SystemNetworkContextManager::~SystemNetworkContextManager() {
|
||||
@@ -609,6 +609,14 @@ SystemNetworkContextManager::~SystemNetworkContextManager() {
|
||||
void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) {
|
||||
StubResolverConfigReader::RegisterPrefs(registry);
|
||||
|
||||
+#if BUILDFLAG(IS_ANDROID)
|
||||
+ registry->RegisterBooleanPref(prefs::kAdBlockEnabled, true);
|
||||
+#else
|
||||
+ registry->RegisterBooleanPref(prefs::kAdBlockEnabled, false);
|
||||
+#endif
|
||||
+ registry->RegisterStringPref(prefs::kAdBlockFiltersURL,
|
||||
+ "https://www.bromite.org/filters/filters.dat");
|
||||
+
|
||||
@@ -705,12 +730,14 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
|
||||
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
|
||||
@@ -2625,6 +2625,9 @@ inline constexpr char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled";
|
||||
@@ -2625,6 +2625,11 @@ inline constexpr char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled";
|
||||
inline constexpr char kAudioCaptureAllowedUrls[] =
|
||||
"hardware.audio_capture_allowed_urls";
|
||||
|
||||
+// Holds the URL to an indexed subresource filters file.
|
||||
+inline constexpr char kAdBlockFiltersURL[] = "adblock.filters_url";
|
||||
+
|
||||
+inline constexpr char kAdBlockEnabled[] = "adblock.enabled";
|
||||
+
|
||||
// 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
|
||||
@@ -756,7 +783,7 @@ diff --git a/components/component_updater/adblock_updater_service.cc b/component
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/components/component_updater/adblock_updater_service.cc
|
||||
@@ -0,0 +1,268 @@
|
||||
@@ -0,0 +1,281 @@
|
||||
+/*
|
||||
+ This file is part of Bromite.
|
||||
+
|
||||
@@ -800,9 +827,16 @@ new file mode 100644
|
||||
+ 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<network::SharedURLLoaderFactory> shared_url_network_factory, std::unique_ptr<component_updater::UpdateScheduler> 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)) {
|
||||
+AdBlockUpdaterService::AdBlockUpdaterService(
|
||||
+ scoped_refptr<network::SharedURLLoaderFactory> shared_url_network_factory,
|
||||
+ std::unique_ptr<component_updater::UpdateScheduler> scheduler,
|
||||
+ subresource_filter::RulesetService* ruleset_service,
|
||||
+ bool enabled,
|
||||
+ std::string filters_url)
|
||||
+ : ruleset_service_(ruleset_service),
|
||||
+ shared_url_network_factory_(shared_url_network_factory),
|
||||
+ scheduler_(std::move(scheduler)),
|
||||
+ enabled_(enabled) {
|
||||
+ DCHECK(ruleset_service);
|
||||
+
|
||||
+ filters_url_ = filters_url;
|
||||
@@ -861,6 +895,11 @@ new file mode 100644
|
||||
+bool AdBlockUpdaterService::OnDemandUpdateAsNeeded(bool is_foreground, Callback on_finished) {
|
||||
+ DCHECK(thread_checker_.CalledOnValidThread());
|
||||
+
|
||||
+ if (!enabled_) {
|
||||
+ LOG(INFO) << "AdBlockUpdaterService: update is disabled.";
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ // Check if the request is too early
|
||||
+ if (!last_update_.is_null()) {
|
||||
+ base::TimeDelta delta =
|
||||
@@ -940,22 +979,23 @@ new file mode 100644
|
||||
+ }
|
||||
+
|
||||
+ last_update_ = base::TimeTicks::Now();
|
||||
+ auto task = base::MakeRefCounted<DownloadFiltersTask>(
|
||||
+ shared_url_network_factory_,
|
||||
+ is_foreground, filters_url_,
|
||||
+ min_last_modified,
|
||||
+ base::BindOnce(&AdBlockUpdaterService::OnUpdateComplete, base::Unretained(this),
|
||||
+ std::move(on_finished)));
|
||||
+ if (!filters_url_.empty()) {
|
||||
+ auto task = base::MakeRefCounted<DownloadFiltersTask>(
|
||||
+ shared_url_network_factory_,
|
||||
+ is_foreground, filters_url_,
|
||||
+ min_last_modified,
|
||||
+ base::BindOnce(&AdBlockUpdaterService::OnUpdateComplete, base::Unretained(this),
|
||||
+ std::move(on_finished)));
|
||||
+
|
||||
+ // run task now; task is responsible for downloading the filters (if Last-Modified header is more recent)
|
||||
+ // and then clearing the 'is_updating' status
|
||||
+ base::SequencedTaskRunner::GetCurrentDefault()->PostTask(FROM_HERE,
|
||||
+ base::BindOnce(&DownloadFiltersTask::Run, base::Unretained(task.get())));
|
||||
+ tasks_.insert(task);
|
||||
+
|
||||
+ base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
|
||||
+ FROM_HERE, base::BindOnce(&AdBlockUpdaterService::NotifyObservers, base::Unretained(this), Event::ADBLOCK_UPDATE_DOWNLOADING));
|
||||
+ // run task now; task is responsible for downloading the filters (if Last-Modified header is more recent)
|
||||
+ // and then clearing the 'is_updating' status
|
||||
+ base::SequencedTaskRunner::GetCurrentDefault()->PostTask(FROM_HERE,
|
||||
+ base::BindOnce(&DownloadFiltersTask::Run, base::Unretained(task.get())));
|
||||
+ tasks_.insert(task);
|
||||
+
|
||||
+ base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
|
||||
+ FROM_HERE, base::BindOnce(&AdBlockUpdaterService::NotifyObservers, base::Unretained(this), Event::ADBLOCK_UPDATE_DOWNLOADING));
|
||||
+ }
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
@@ -1029,7 +1069,7 @@ diff --git a/components/component_updater/adblock_updater_service.h b/components
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/components/component_updater/adblock_updater_service.h
|
||||
@@ -0,0 +1,98 @@
|
||||
@@ -0,0 +1,103 @@
|
||||
+/*
|
||||
+ This file is part of Bromite.
|
||||
+
|
||||
@@ -1085,8 +1125,12 @@ new file mode 100644
|
||||
+// All methods are safe to call ONLY from the browser's main thread.
|
||||
+class AdBlockUpdaterService {
|
||||
+ public:
|
||||
+ AdBlockUpdaterService(scoped_refptr<network::SharedURLLoaderFactory> shared_url_network_factory, std::unique_ptr<component_updater::UpdateScheduler> scheduler,
|
||||
+ subresource_filter::RulesetService* ruleset_service, std::string filters_url);
|
||||
+ AdBlockUpdaterService(
|
||||
+ scoped_refptr<network::SharedURLLoaderFactory> shared_url_network_factory,
|
||||
+ std::unique_ptr<component_updater::UpdateScheduler> scheduler,
|
||||
+ subresource_filter::RulesetService* ruleset_service,
|
||||
+ bool enabled,
|
||||
+ std::string filters_url);
|
||||
+ ~AdBlockUpdaterService();
|
||||
+
|
||||
+ // Adds an observer for this class. An observer should not be added more
|
||||
@@ -1120,6 +1164,7 @@ new file mode 100644
|
||||
+ scoped_refptr<network::SharedURLLoaderFactory> shared_url_network_factory_;
|
||||
+ std::unique_ptr<component_updater::UpdateScheduler> scheduler_;
|
||||
+
|
||||
+ bool enabled_;
|
||||
+ bool is_updating_ = false;
|
||||
+ bool scheduled_ = false;
|
||||
+ std::set<scoped_refptr<DownloadFiltersTask>> tasks_;
|
||||
|
||||
Reference in New Issue
Block a user