diff --git a/build/patches/Bromite-AdBlockUpdaterService.patch b/build/patches/Bromite-AdBlockUpdaterService.patch
index 278b77bc..50d2c030 100644
--- a/build/patches/Bromite-AdBlockUpdaterService.patch
+++ b/build/patches/Bromite-AdBlockUpdaterService.patch
@@ -36,8 +36,8 @@ Fix RestoreForeignSessionTab by recreating the tab (issue #681)
.../sessions/session_restore_android.cc | 4 +-
.../strings/android_chrome_strings.grd | 14 +
components/component_updater/BUILD.gn | 6 +
- .../adblock_updater_service.cc | 345 ++++++++++++++++++
- .../adblock_updater_service.h | 124 +++++++
+ .../adblock_updater_service.cc | 348 ++++++++++++++++++
+ .../adblock_updater_service.h | 125 +++++++
.../download_filters_task.cc | 237 ++++++++++++
.../component_updater/download_filters_task.h | 131 +++++++
...ent_subresource_filter_throttle_manager.cc | 11 +
@@ -48,7 +48,7 @@ Fix RestoreForeignSessionTab by recreating the tab (issue #681)
.../browser/subresource_filter_features.cc | 113 +-----
.../core/common/common_features.cc | 2 +-
.../navigation_throttle_runner.cc | 5 -
- 39 files changed, 1674 insertions(+), 141 deletions(-)
+ 39 files changed, 1678 insertions(+), 141 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
@@ -206,9 +206,9 @@ new file mode 100644
+ android:fragment="org.chromium.chrome.browser.settings.AdBlockEditor" />
+
+
+
+ {
-+ AdblockUpdaterBridge.setAdBlockUpdateTimePeriod(
-+ ((TimePeriodSpinnerOption) newValue).getDays());
++ AdblockUpdaterBridge.setAdBlockUpdateTimeFrequency(
++ ((TimeFrequencySpinnerOption) newValue).getDays());
+ return true;
+ });
+
@@ -540,26 +540,26 @@ new file mode 100644
+ updateCurrentAdBlockSettings();
+ }
+
-+ private TimePeriodSpinnerOption[] getTimePeriodSpinnerOptions() {
-+ List options = new ArrayList<>();
-+ options.add(new TimePeriodSpinnerOption(1,
-+ getString(R.string.options_adblock_period_day)));
-+ options.add(new TimePeriodSpinnerOption(4,
-+ getString(R.string.options_adblock_period_days)));
-+ options.add(new TimePeriodSpinnerOption(7,
-+ getString(R.string.options_adblock_period_days)));
-+ options.add(new TimePeriodSpinnerOption(10,
-+ getString(R.string.options_adblock_period_days)));
-+ options.add(new TimePeriodSpinnerOption(30,
-+ getString(R.string.options_adblock_period_days)));
-+ return options.toArray(new TimePeriodSpinnerOption[0]);
++ private TimeFrequencySpinnerOption[] getTimeFrequencySpinnerOptions() {
++ List options = new ArrayList<>();
++ options.add(new TimeFrequencySpinnerOption(1,
++ getString(R.string.options_adblock_frequency_day)));
++ options.add(new TimeFrequencySpinnerOption(4,
++ getString(R.string.options_adblock_frequency_days)));
++ options.add(new TimeFrequencySpinnerOption(7,
++ getString(R.string.options_adblock_frequency_days)));
++ options.add(new TimeFrequencySpinnerOption(10,
++ getString(R.string.options_adblock_frequency_days)));
++ options.add(new TimeFrequencySpinnerOption(30,
++ getString(R.string.options_adblock_frequency_days)));
++ return options.toArray(new TimeFrequencySpinnerOption[0]);
+ }
+
-+ static class TimePeriodSpinnerOption {
++ static class TimeFrequencySpinnerOption {
+ private int mDays;
+ private String mTitle;
+
-+ public TimePeriodSpinnerOption(int days, String title) {
++ public TimeFrequencySpinnerOption(int days, String title) {
+ mDays = days;
+ mTitle = Integer.toString(days) + " " + title;
+ }
@@ -607,13 +607,13 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources
+
+ Last Checked:
+
-+
++
+ Check every
+
-+
++
+ Day
+
-+
++
+ Days
+
+
@@ -932,13 +932,13 @@ new file mode 100644
+ return base::android::ConvertUTF8ToJavaString(env, url);
+}
+
-+static jint JNI_AdblockUpdaterBridge_GetAdBlockUpdateTimePeriod(JNIEnv* env) {
-+ int value = g_browser_process->adblock_updater()->GetAdBlockUpdateTimePeriod();
++static jint JNI_AdblockUpdaterBridge_GetAdBlockUpdateTimeFrequency(JNIEnv* env) {
++ int value = g_browser_process->adblock_updater()->GetAdBlockUpdateTimeFrequency();
+ return value;
+}
+
-+static void JNI_AdblockUpdaterBridge_SetAdBlockUpdateTimePeriod(JNIEnv* env, jint days) {
-+ g_browser_process->adblock_updater()->SetAdBlockUpdateTimePeriod(days);
++static void JNI_AdblockUpdaterBridge_SetAdBlockUpdateTimeFrequency(JNIEnv* env, jint days) {
++ g_browser_process->adblock_updater()->SetAdBlockUpdateTimeFrequency(days);
+}
+
+static jlong JNI_AdblockUpdaterBridge_GetAdBlockLastOkUpdate(JNIEnv* env) {
@@ -1081,12 +1081,12 @@ new file mode 100644
+ return AdblockUpdaterBridgeJni.get().getAdBlockFiltersURL();
+ }
+
-+ public static int getAdBlockUpdateTimePeriod() {
-+ return AdblockUpdaterBridgeJni.get().getAdBlockUpdateTimePeriod();
++ public static int getAdBlockUpdateTimeFrequency() {
++ return AdblockUpdaterBridgeJni.get().getAdBlockUpdateTimeFrequency();
+ }
+
-+ public static void setAdBlockUpdateTimePeriod(int number_of_days) {
-+ AdblockUpdaterBridgeJni.get().setAdBlockUpdateTimePeriod(number_of_days);
++ public static void setAdBlockUpdateTimeFrequency(int number_of_days) {
++ AdblockUpdaterBridgeJni.get().setAdBlockUpdateTimeFrequency(number_of_days);
+ }
+
+ public static String getAdBlockMostRecentIndexedVersion() {
@@ -1130,8 +1130,8 @@ new file mode 100644
+ String getAdBlockMostRecentIndexedVersion();
+ long getAdBlockLastUpdate();
+ long getAdBlockLastOkUpdate();
-+ int getAdBlockUpdateTimePeriod();
-+ void setAdBlockUpdateTimePeriod(int number_of_days);
++ int getAdBlockUpdateTimeFrequency();
++ void setAdBlockUpdateTimeFrequency(int number_of_days);
+ void adBlockStartCheckOnDemand();
+ void adBlockRegisterCallback();
+ }
@@ -1205,7 +1205,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,345 @@
+@@ -0,0 +1,348 @@
+/*
+ This file is part of Bromite.
+
@@ -1255,7 +1255,7 @@ new file mode 100644
+const char kAdBlockFiltersURL[] = "adblock.filters_url";
+
+// Holds the URL to an indexed subresource filters file.
-+const char kAdBlockFiltersCheckPeriod[] = "adblock.check_period";
++const char kAdBlockFiltersCheckFrequency[] = "adblock.check_frequency";
+
+// Last check time
+const char kAdBlockLastCheckTime[] = "adblock.last_check_time";
@@ -1267,7 +1267,6 @@ new file mode 100644
+// these could be made configurable
+const int initial_check_delay = 5,
+ on_demand_check_delay = 60; // minimum 1 minute between each on-demand check
-+int next_check_delay = 60*60*24*7; // 1 week
+
+AdBlockUpdaterService::AdBlockUpdaterService(
+ scoped_refptr shared_url_network_factory,
@@ -1320,30 +1319,34 @@ new file mode 100644
+}
+
+void AdBlockUpdaterService::ReStart(int delay) {
-+ int days = GetAdBlockUpdateTimePeriod();
++ int days = GetAdBlockUpdateTimeFrequency();
+ if (days <= 0) days = 7;
-+ next_check_delay = 60*60*24*days;
++ next_check_delay_ = 60*60*24*days;
+
-+ if (delay == 0) delay = next_check_delay;
++ if (delay == 0) delay = next_check_delay_;
+
+ LOG(INFO) << "AdBlockUpdaterService: starting up. "
+ << "First update attempt will take place in "
+ << delay << " seconds. "
+ << "Next update attempt will take place in "
-+ << next_check_delay << " seconds. ";
++ << next_check_delay_ << " seconds. ";
+
+ scheduler_->Stop();
+ scheduler_->Schedule(
+ base::TimeDelta::FromSeconds(delay),
-+ base::TimeDelta::FromSeconds(next_check_delay),
++ base::TimeDelta::FromSeconds(next_check_delay_),
+ base::Bind(&AdBlockUpdaterService::OnDemandScheduledUpdate,
+ base::Unretained(this)), base::DoNothing());
+}
+
+void AdBlockUpdaterService::OnDemandScheduledUpdate(
+ component_updater::UpdateScheduler::OnFinishedCallback on_finished) {
-+ //TODO: call on_finished
-+ OnDemandUpdateAsNeeded(false, Callback());
++ Callback on_finished_callback = base::BindOnce(
++ [](component_updater::UpdateScheduler::OnFinishedCallback on_finished,
++ AdblockError error) { std::move(on_finished).Run(); },
++ std::move(on_finished));
++
++ OnDemandUpdateAsNeeded(false, std::move(on_finished_callback));
+}
+
+bool AdBlockUpdaterService::OnDemandUpdate(Callback on_finished) {
@@ -1359,7 +1362,7 @@ new file mode 100644
+ if (!version.content_version.empty()) {
+ // Check if the request is too soon.
+ if (!last_update_.is_null()) {
-+ int deltaCheck = is_foreground == false ? next_check_delay : on_demand_check_delay;
++ int deltaCheck = is_foreground == false ? next_check_delay_ : on_demand_check_delay;
+ base::TimeDelta delta = base::Time::Now() - last_update_;
+ if (is_updating_ || (delta < base::TimeDelta::FromSeconds(deltaCheck))) {
+ LOG(INFO) << "AdBlockUpdaterService: update delayed. Wait for "
@@ -1530,19 +1533,19 @@ new file mode 100644
+ return lastOk.ToJavaTime();
+}
+
-+int AdBlockUpdaterService::GetAdBlockUpdateTimePeriod() {
-+ return pref_service_->GetInteger(kAdBlockFiltersCheckPeriod);
++int AdBlockUpdaterService::GetAdBlockUpdateTimeFrequency() {
++ return pref_service_->GetInteger(kAdBlockFiltersCheckFrequency);
+}
+
-+void AdBlockUpdaterService::SetAdBlockUpdateTimePeriod(int days) {
-+ pref_service_->SetInteger(kAdBlockFiltersCheckPeriod, days);
++void AdBlockUpdaterService::SetAdBlockUpdateTimeFrequency(int days) {
++ pref_service_->SetInteger(kAdBlockFiltersCheckFrequency, days);
+ ReStart(0);
+}
+
+// static
+void AdBlockUpdaterService::RegisterPrefs(PrefRegistrySimple* registry) {
+ registry->RegisterStringPref(kAdBlockFiltersURL, std::string());
-+ registry->RegisterIntegerPref(kAdBlockFiltersCheckPeriod, 7);
++ registry->RegisterIntegerPref(kAdBlockFiltersCheckFrequency, 7);
+ registry->RegisterTimePref(kAdBlockLastCheckTime, base::Time());
+ registry->RegisterTimePref(kAdBlockLastCheckTimeOk, base::Time());
+
@@ -1555,7 +1558,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,124 @@
+@@ -0,0 +1,125 @@
+/*
+ This file is part of Bromite.
+
@@ -1642,8 +1645,8 @@ new file mode 100644
+ long GetLastUpdate();
+
+ // Get/Set check interval (in days)
-+ int GetAdBlockUpdateTimePeriod();
-+ void SetAdBlockUpdateTimePeriod(int days);
++ int GetAdBlockUpdateTimeFrequency();
++ void SetAdBlockUpdateTimeFrequency(int days);
+
+ // To be called for an user-triggered update.
+ // Will not result in an actual update if the last update was too recently triggered.
@@ -1674,6 +1677,7 @@ new file mode 100644
+
+ bool is_updating_ = false;
+ bool scheduled_ = false;
++ int next_check_delay_;
+ std::set> tasks_;
+};
+