Chromium Code Reviews| Index: chrome/browser/managed_mode/managed_mode_interstitial.cc |
| diff --git a/chrome/browser/managed_mode/managed_mode_interstitial.cc b/chrome/browser/managed_mode/managed_mode_interstitial.cc |
| index b3daecc6e2eefdb11b5fffdc6082455324af2fb2..cc858c308e9644831d7d672a2eee53f2275477e0 100644 |
| --- a/chrome/browser/managed_mode/managed_mode_interstitial.cc |
| +++ b/chrome/browser/managed_mode/managed_mode_interstitial.cc |
| @@ -17,7 +17,6 @@ |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/interstitial_page.h" |
| #include "content/public/browser/web_contents.h" |
| -#include "content/public/browser/web_contents_delegate.h" |
| #include "content/public/browser/web_ui.h" |
| #include "grit/browser_resources.h" |
| #include "grit/generated_resources.h" |
| @@ -34,13 +33,37 @@ ManagedModeInterstitial::ManagedModeInterstitial( |
| const GURL& url, |
| const base::Callback<void(bool)>& callback) |
| : web_contents_(web_contents), |
| + interstitial_page_(NULL), |
| url_(url), |
| - weak_ptr_factory_(this), |
| callback_(callback) { |
| + if (ShouldProceed()) { |
| + // It can happen that the site was only allowed very recently and the URL |
| + // filter on the IO thread had not been updated yet. Proceed with the |
| + // request without showing the interstitial |
|
Pam (message me for reviews)
2013/09/04 09:56:59
missing .
Bernhard Bauer
2013/09/04 11:48:35
Done.
|
| + DispatchContinueRequest(true); |
| + delete this; |
| + return; |
| + } |
| + |
| + // TODO(bauerb): Extract an observer callback on ManagedUserService for this. |
| Profile* profile = |
| Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
| - languages_ = profile->GetPrefs()->GetString(prefs::kAcceptLanguages); |
| - |
| + PrefService* prefs = profile->GetPrefs(); |
| + pref_change_registrar_.Init(prefs); |
| + pref_change_registrar_.Add( |
| + prefs::kDefaultManagedModeFilteringBehavior, |
| + base::Bind(&ManagedModeInterstitial::OnFilteringPrefsChanged, |
| + base::Unretained(this))); |
| + pref_change_registrar_.Add( |
| + prefs::kManagedModeManualHosts, |
| + base::Bind(&ManagedModeInterstitial::OnFilteringPrefsChanged, |
| + base::Unretained(this))); |
| + pref_change_registrar_.Add( |
| + prefs::kManagedModeManualURLs, |
| + base::Bind(&ManagedModeInterstitial::OnFilteringPrefsChanged, |
| + base::Unretained(this))); |
| + |
| + languages_ = prefs->GetString(prefs::kAcceptLanguages); |
| interstitial_page_ = |
| content::InterstitialPage::Create(web_contents, true, url_, this); |
| interstitial_page_->Show(); |
| @@ -125,12 +148,31 @@ void ManagedModeInterstitial::CommandReceived(const std::string& command) { |
| NOTREACHED(); |
| } |
| -void ManagedModeInterstitial::OnProceed() { NOTREACHED(); } |
| +void ManagedModeInterstitial::OnProceed() { |
| + DCHECK(ShouldProceed()); |
|
Pam (message me for reviews)
2013/09/04 09:56:59
Should we just crash? I could imagine some situati
Bernhard Bauer
2013/09/04 11:48:35
Well, this is really one of these "this cannot hap
Pam (message me for reviews)
2013/09/05 10:13:52
Keeping going somehow even though something unexpe
Bernhard Bauer
2013/09/05 12:49:10
What I meant by handling was that a CHECK results
|
| + DispatchContinueRequest(true); |
| +} |
| void ManagedModeInterstitial::OnDontProceed() { |
| DispatchContinueRequest(false); |
| } |
| +bool ManagedModeInterstitial::ShouldProceed() { |
| + Profile* profile = |
| + Profile::FromBrowserContext(web_contents_->GetBrowserContext()); |
| + ManagedUserService* managed_user_service = |
| + ManagedUserServiceFactory::GetForProfile(profile); |
| + ManagedModeURLFilter* url_filter = |
| + managed_user_service->GetURLFilterForUIThread(); |
| + return url_filter->GetFilteringBehaviorForURL(url_) != |
| + ManagedModeURLFilter::BLOCK; |
| +} |
| + |
| +void ManagedModeInterstitial::OnFilteringPrefsChanged() { |
| + if (ShouldProceed()) |
| + interstitial_page_->Proceed(); |
| +} |
| + |
| void ManagedModeInterstitial::DispatchContinueRequest(bool continue_request) { |
| BrowserThread::PostTask( |
| BrowserThread::IO, FROM_HERE, base::Bind(callback_, continue_request)); |