Loading build/patches/Bromite-AdBlockUpdaterService.patch +77 −61 Original line number Diff line number Diff line Loading @@ -13,11 +13,11 @@ Fix RestoreForeignSessionTab by recreating the tab (issue #681) 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 | 43 +++ .../java/res/xml/adblock_preferences.xml | 43 ++ .../android/java/res/xml/main_preferences.xml | 5 + .../chrome/browser/app/ChromeActivity.java | 21 + .../browser/settings/AdBlockEditor.java | 93 +++++ .../browser/settings/AdBlockPreferences.java | 173 +++++++++ .../browser/settings/AdBlockPreferences.java | 173 ++++++++ .../chrome/browser/tabmodel/TabModelImpl.java | 2 +- chrome/app/generated_resources.grd | 46 +++ chrome/browser/after_startup_task_utils.cc | 5 + Loading @@ -36,10 +36,10 @@ 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 | 364 ++++++++++++++++++ .../adblock_updater_service.h | 125 ++++++ .../download_filters_task.cc | 237 ++++++++++++ .../component_updater/download_filters_task.h | 131 +++++++ .../adblock_updater_service.cc | 378 ++++++++++++++++++ .../adblock_updater_service.h | 127 ++++++ .../download_filters_task.cc | 237 +++++++++++ .../component_updater/download_filters_task.h | 131 ++++++ ...ent_subresource_filter_throttle_manager.cc | 11 + .../content/browser/ruleset_publisher.h | 2 + .../content/browser/ruleset_publisher_impl.cc | 5 + Loading @@ -51,7 +51,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 - 42 files changed, 1706 insertions(+), 141 deletions(-) 42 files changed, 1722 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 Loading Loading @@ -1211,7 +1211,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,364 @@ @@ -0,0 +1,378 @@ +/* + This file is part of Bromite. + Loading Loading @@ -1375,7 +1375,8 @@ new file mode 100644 + last_update_ = pref_service_->GetTime(kAdBlockLastCheckTime); + + auto version = ruleset_service_->GetMostRecentlyIndexedVersion(); + if (!version.content_version.empty()) { + base::Time t = base::Time(); + if (ConvertVersionToTime(version.content_version, &t)==true) { + // Check if the request is too soon. + if (!last_update_.is_null()) { + int deltaCheck = is_foreground == false ? next_check_delay_ : on_demand_check_delay; Loading Loading @@ -1405,15 +1406,38 @@ new file mode 100644 + last_update_ = base::Time::Now(); + pref_service_->SetTime(kAdBlockLastCheckTime, last_update_); + + base::Time::Exploded e = {0}; + base::Time t = base::Time(); + auto version = ruleset_service_->GetMostRecentlyIndexedVersion(); + if (version.content_version.empty()) { + LOG(INFO) << "AdBlockUpdaterService: MostRecentIndexedVersion is empty"; + } else { + base::Time t = base::Time(); + LOG(INFO) << "AdBlockUpdaterService: MostRecentIndexedVersion = " << version.content_version; + ConvertVersionToTime(version.content_version, &t); + + NotifyObservers(AdblockEvent::ADBLOCK_CHECKING_FOR_UPDATES, AdblockError::NONE); + + std::string filters_url_ = pref_service_->GetString(kAdBlockFiltersURL); + auto task = base::MakeRefCounted<DownloadFiltersTask>( + shared_url_network_factory_, + is_foreground, filters_url_, + t, + base::BindOnce(&AdBlockUpdaterService::OnUpdateComplete, base::Unretained(this), + std::move(on_finished))); + + // run task now; task is responsible for clearing the is_updating status + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, + base::BindOnce(&DownloadFiltersTask::Run, base::Unretained(task.get()))); + tasks_.insert(task); +} + +bool AdBlockUpdaterService::ConvertVersionToTime(const std::string& version, base::Time* t) +{ + *t = base::Time(); + if (version.empty()) { + LOG(INFO) << "AdBlockUpdaterService: version is empty"; + return false; + } + + base::Time::Exploded e = {0}; + std::vector<std::string> tokens = + base::SplitString(version.content_version, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); + base::SplitString(version, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); + int i = 0; + bool failed = false; + for (const std::string& token : tokens) { Loading Loading @@ -1450,25 +1474,13 @@ new file mode 100644 + if (failed) { + LOG(WARNING) << "AdBlockUpdaterService: failed to parse most recent version as x.y.z.w dot-separated integers"; + } else { + if (!base::Time::FromUTCExploded(e, &t)) + if (!base::Time::FromUTCExploded(e, t)) { + failed = true; + LOG(WARNING) << "AdBlockUpdaterService: failed to convert version to time."; + } + } + + NotifyObservers(AdblockEvent::ADBLOCK_CHECKING_FOR_UPDATES, AdblockError::NONE); + + std::string filters_url_ = pref_service_->GetString(kAdBlockFiltersURL); + auto task = base::MakeRefCounted<DownloadFiltersTask>( + shared_url_network_factory_, + is_foreground, filters_url_, + t, + base::BindOnce(&AdBlockUpdaterService::OnUpdateComplete, base::Unretained(this), + std::move(on_finished))); + + // run task now; task is responsible for clearing the is_updating status + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, + base::BindOnce(&DownloadFiltersTask::Run, base::Unretained(task.get()))); + tasks_.insert(task); + return failed; +} + +void AdBlockUpdaterService::OnUpdateComplete(Callback on_finished, Loading Loading @@ -1559,10 +1571,12 @@ new file mode 100644 +} + +void AdBlockUpdaterService::SetAdBlockUpdateTimeFrequency(int days) { + if (pref_service_->GetInteger(kAdBlockFiltersCheckFrequency) != days) { + pref_service_->SetInteger(kAdBlockFiltersCheckFrequency, days); + pref_service_->SetTime(kAdBlockLastCheckTime, base::Time()); + StartWithDelay(0); + } +} + +// static +void AdBlockUpdaterService::RegisterPrefs(PrefRegistrySimple* registry) { Loading @@ -1580,7 +1594,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,125 @@ @@ -0,0 +1,127 @@ +/* + This file is part of Bromite. + Loading Loading @@ -1686,6 +1700,8 @@ new file mode 100644 + void OnUpdateComplete(Callback callback, scoped_refptr<DownloadFiltersTask> task, AdblockError error); + void RulesetPublishedCallback(); + + bool ConvertVersionToTime(const std::string& version, base::Time* t); + + base::ObserverList<Observer>::Unchecked observer_list_; + base::ThreadChecker thread_checker_; + base::Time last_update_; Loading Loading
build/patches/Bromite-AdBlockUpdaterService.patch +77 −61 Original line number Diff line number Diff line Loading @@ -13,11 +13,11 @@ Fix RestoreForeignSessionTab by recreating the tab (issue #681) 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 | 43 +++ .../java/res/xml/adblock_preferences.xml | 43 ++ .../android/java/res/xml/main_preferences.xml | 5 + .../chrome/browser/app/ChromeActivity.java | 21 + .../browser/settings/AdBlockEditor.java | 93 +++++ .../browser/settings/AdBlockPreferences.java | 173 +++++++++ .../browser/settings/AdBlockPreferences.java | 173 ++++++++ .../chrome/browser/tabmodel/TabModelImpl.java | 2 +- chrome/app/generated_resources.grd | 46 +++ chrome/browser/after_startup_task_utils.cc | 5 + Loading @@ -36,10 +36,10 @@ 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 | 364 ++++++++++++++++++ .../adblock_updater_service.h | 125 ++++++ .../download_filters_task.cc | 237 ++++++++++++ .../component_updater/download_filters_task.h | 131 +++++++ .../adblock_updater_service.cc | 378 ++++++++++++++++++ .../adblock_updater_service.h | 127 ++++++ .../download_filters_task.cc | 237 +++++++++++ .../component_updater/download_filters_task.h | 131 ++++++ ...ent_subresource_filter_throttle_manager.cc | 11 + .../content/browser/ruleset_publisher.h | 2 + .../content/browser/ruleset_publisher_impl.cc | 5 + Loading @@ -51,7 +51,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 - 42 files changed, 1706 insertions(+), 141 deletions(-) 42 files changed, 1722 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 Loading Loading @@ -1211,7 +1211,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,364 @@ @@ -0,0 +1,378 @@ +/* + This file is part of Bromite. + Loading Loading @@ -1375,7 +1375,8 @@ new file mode 100644 + last_update_ = pref_service_->GetTime(kAdBlockLastCheckTime); + + auto version = ruleset_service_->GetMostRecentlyIndexedVersion(); + if (!version.content_version.empty()) { + base::Time t = base::Time(); + if (ConvertVersionToTime(version.content_version, &t)==true) { + // Check if the request is too soon. + if (!last_update_.is_null()) { + int deltaCheck = is_foreground == false ? next_check_delay_ : on_demand_check_delay; Loading Loading @@ -1405,15 +1406,38 @@ new file mode 100644 + last_update_ = base::Time::Now(); + pref_service_->SetTime(kAdBlockLastCheckTime, last_update_); + + base::Time::Exploded e = {0}; + base::Time t = base::Time(); + auto version = ruleset_service_->GetMostRecentlyIndexedVersion(); + if (version.content_version.empty()) { + LOG(INFO) << "AdBlockUpdaterService: MostRecentIndexedVersion is empty"; + } else { + base::Time t = base::Time(); + LOG(INFO) << "AdBlockUpdaterService: MostRecentIndexedVersion = " << version.content_version; + ConvertVersionToTime(version.content_version, &t); + + NotifyObservers(AdblockEvent::ADBLOCK_CHECKING_FOR_UPDATES, AdblockError::NONE); + + std::string filters_url_ = pref_service_->GetString(kAdBlockFiltersURL); + auto task = base::MakeRefCounted<DownloadFiltersTask>( + shared_url_network_factory_, + is_foreground, filters_url_, + t, + base::BindOnce(&AdBlockUpdaterService::OnUpdateComplete, base::Unretained(this), + std::move(on_finished))); + + // run task now; task is responsible for clearing the is_updating status + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, + base::BindOnce(&DownloadFiltersTask::Run, base::Unretained(task.get()))); + tasks_.insert(task); +} + +bool AdBlockUpdaterService::ConvertVersionToTime(const std::string& version, base::Time* t) +{ + *t = base::Time(); + if (version.empty()) { + LOG(INFO) << "AdBlockUpdaterService: version is empty"; + return false; + } + + base::Time::Exploded e = {0}; + std::vector<std::string> tokens = + base::SplitString(version.content_version, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); + base::SplitString(version, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); + int i = 0; + bool failed = false; + for (const std::string& token : tokens) { Loading Loading @@ -1450,25 +1474,13 @@ new file mode 100644 + if (failed) { + LOG(WARNING) << "AdBlockUpdaterService: failed to parse most recent version as x.y.z.w dot-separated integers"; + } else { + if (!base::Time::FromUTCExploded(e, &t)) + if (!base::Time::FromUTCExploded(e, t)) { + failed = true; + LOG(WARNING) << "AdBlockUpdaterService: failed to convert version to time."; + } + } + + NotifyObservers(AdblockEvent::ADBLOCK_CHECKING_FOR_UPDATES, AdblockError::NONE); + + std::string filters_url_ = pref_service_->GetString(kAdBlockFiltersURL); + auto task = base::MakeRefCounted<DownloadFiltersTask>( + shared_url_network_factory_, + is_foreground, filters_url_, + t, + base::BindOnce(&AdBlockUpdaterService::OnUpdateComplete, base::Unretained(this), + std::move(on_finished))); + + // run task now; task is responsible for clearing the is_updating status + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, + base::BindOnce(&DownloadFiltersTask::Run, base::Unretained(task.get()))); + tasks_.insert(task); + return failed; +} + +void AdBlockUpdaterService::OnUpdateComplete(Callback on_finished, Loading Loading @@ -1559,10 +1571,12 @@ new file mode 100644 +} + +void AdBlockUpdaterService::SetAdBlockUpdateTimeFrequency(int days) { + if (pref_service_->GetInteger(kAdBlockFiltersCheckFrequency) != days) { + pref_service_->SetInteger(kAdBlockFiltersCheckFrequency, days); + pref_service_->SetTime(kAdBlockLastCheckTime, base::Time()); + StartWithDelay(0); + } +} + +// static +void AdBlockUpdaterService::RegisterPrefs(PrefRegistrySimple* registry) { Loading @@ -1580,7 +1594,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,125 @@ @@ -0,0 +1,127 @@ +/* + This file is part of Bromite. + Loading Loading @@ -1686,6 +1700,8 @@ new file mode 100644 + void OnUpdateComplete(Callback callback, scoped_refptr<DownloadFiltersTask> task, AdblockError error); + void RulesetPublishedCallback(); + + bool ConvertVersionToTime(const std::string& version, base::Time* t); + + base::ObserverList<Observer>::Unchecked observer_list_; + base::ThreadChecker thread_checker_; + base::Time last_update_; Loading