Index: chrome/browser/ui/webui/supervised_user_internals_message_handler.cc |
diff --git a/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc b/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc |
index 6018d646028377c5c21829b4bac8400bdd1df039..ea4566a62fe239dd304c620de7f5ebd29bd6ea5a 100644 |
--- a/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc |
+++ b/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc |
@@ -20,6 +20,7 @@ |
#include "chrome/browser/supervised_user/supervised_user_service_factory.h" |
#include "chrome/browser/supervised_user/supervised_user_settings_service.h" |
#include "chrome/browser/supervised_user/supervised_user_settings_service_factory.h" |
+#include "chrome/browser/supervised_user/supervised_user_url_filter.h" |
#include "chrome/common/channel_info.h" |
#include "components/signin/core/browser/account_tracker_service.h" |
#include "components/supervised_user_error_page/supervised_user_error_page.h" |
@@ -114,64 +115,13 @@ std::string FilteringBehaviorReasonToString( |
} // namespace |
-// Helper class that lives on the IO thread, listens to the |
-// SupervisedUserURLFilter there, and posts results back to the UI thread. |
-class SupervisedUserInternalsMessageHandler::IOThreadHelper |
- : public base::RefCountedThreadSafe<IOThreadHelper, |
- BrowserThread::DeleteOnIOThread>, |
- public SupervisedUserURLFilter::Observer { |
- public: |
- using OnURLCheckedCallback = |
- base::Callback<void(const GURL&, |
- SupervisedUserURLFilter::FilteringBehavior, |
- supervised_user_error_page::FilteringBehaviorReason, |
- bool uncertain)>; |
- |
- IOThreadHelper(scoped_refptr<const SupervisedUserURLFilter> filter, |
- const OnURLCheckedCallback& callback) |
- : filter_(filter), callback_(callback) { |
- BrowserThread::PostTask(BrowserThread::IO, |
- FROM_HERE, |
- base::Bind(&IOThreadHelper::InitOnIOThread, this)); |
- } |
- |
- private: |
- friend class base::DeleteHelper<IOThreadHelper>; |
- friend struct BrowserThread::DeleteOnThread<BrowserThread::IO>; |
- virtual ~IOThreadHelper() { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- filter_->RemoveObserver(this); |
- } |
- |
- // SupervisedUserURLFilter::Observer: |
- void OnSiteListUpdated() override {} |
- void OnURLChecked(const GURL& url, |
- SupervisedUserURLFilter::FilteringBehavior behavior, |
- supervised_user_error_page::FilteringBehaviorReason reason, |
- bool uncertain) override { |
- BrowserThread::PostTask(BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(callback_, |
- url, behavior, reason, uncertain)); |
- } |
- |
- void InitOnIOThread() { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- filter_->AddObserver(this); |
- } |
- |
- scoped_refptr<const SupervisedUserURLFilter> filter_; |
- OnURLCheckedCallback callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(IOThreadHelper); |
-}; |
- |
SupervisedUserInternalsMessageHandler::SupervisedUserInternalsMessageHandler() |
- : weak_factory_(this) { |
-} |
+ : is_watching_filter_(false), weak_factory_(this) {} |
SupervisedUserInternalsMessageHandler:: |
~SupervisedUserInternalsMessageHandler() { |
+ if (is_watching_filter_) |
+ GetSupervisedUserService()->GetURLFilter()->RemoveObserver(this); |
} |
void SupervisedUserInternalsMessageHandler::RegisterMessages() { |
@@ -205,13 +155,11 @@ SupervisedUserInternalsMessageHandler::GetSupervisedUserService() { |
void SupervisedUserInternalsMessageHandler::HandleRegisterForEvents( |
const base::ListValue* args) { |
DCHECK(args->empty()); |
+ if (is_watching_filter_) |
+ return; |
- if (!io_thread_helper_.get()) { |
- io_thread_helper_ = new IOThreadHelper( |
- GetSupervisedUserService()->GetURLFilterForIOThread(), |
- base::Bind(&SupervisedUserInternalsMessageHandler::OnURLChecked, |
- weak_factory_.GetWeakPtr())); |
- } |
+ is_watching_filter_ = true; |
+ GetSupervisedUserService()->GetURLFilter()->AddObserver(this); |
} |
void SupervisedUserInternalsMessageHandler::HandleGetBasicInfo( |
@@ -230,8 +178,7 @@ void SupervisedUserInternalsMessageHandler::HandleTryURL( |
if (!url.is_valid()) |
return; |
- SupervisedUserURLFilter* filter = |
- GetSupervisedUserService()->GetURLFilterForUIThread(); |
+ SupervisedUserURLFilter* filter = GetSupervisedUserService()->GetURLFilter(); |
std::map<std::string, base::string16> whitelists = |
filter->GetMatchingWhitelistTitles(url); |
filter->GetFilteringBehaviorForURLWithAsyncChecks( |
@@ -256,8 +203,7 @@ void SupervisedUserInternalsMessageHandler::SendBasicInfo() { |
profile->IsLegacySupervised()); |
AddSectionEntry(section_profile, "Child", profile->IsChild()); |
- SupervisedUserURLFilter* filter = |
- GetSupervisedUserService()->GetURLFilterForUIThread(); |
+ SupervisedUserURLFilter* filter = GetSupervisedUserService()->GetURLFilter(); |
base::ListValue* section_filter = AddSection(section_list.get(), "Filter"); |
AddSectionEntry(section_filter, "Blacklist active", filter->HasBlacklist()); |
@@ -327,6 +273,8 @@ void SupervisedUserInternalsMessageHandler::OnTryURLResult( |
"chrome.supervised_user_internals.receiveTryURLResult", result); |
} |
+void SupervisedUserInternalsMessageHandler::OnSiteListUpdated() {} |
+ |
void SupervisedUserInternalsMessageHandler::OnURLChecked( |
const GURL& url, |
SupervisedUserURLFilter::FilteringBehavior behavior, |