1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_INTERSTITIAL_H_ 6 #define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_INTERSTITIAL_H_ 7 8 #include <string> 9 10 #include "base/callback.h" 11 #include "chrome/browser/supervised_user/supervised_user_service_observer.h" 12 #include "content/public/browser/interstitial_page_delegate.h" 13 #include "url/gurl.h" 14 15 namespace content { 16 class InterstitialPage; 17 class WebContents; 18 } 19 20 class Profile; 21 22 // Delegate for an interstitial page when a page is blocked for a supervised 23 // user because it is on a blacklist (in "allow everything" mode) or not on any 24 // whitelist (in "allow only specified sites" mode). 25 class SupervisedUserInterstitial : public content::InterstitialPageDelegate, 26 public SupervisedUserServiceObserver { 27 public: 28 static void Show(content::WebContents* web_contents, 29 const GURL& url, 30 const base::Callback<void(bool)>& callback); 31 32 private: 33 SupervisedUserInterstitial(content::WebContents* web_contents, 34 const GURL& url, 35 const base::Callback<void(bool)>& callback); 36 virtual ~SupervisedUserInterstitial(); 37 38 bool Init(); 39 40 // InterstitialPageDelegate implementation. 41 virtual std::string GetHTMLContents() OVERRIDE; 42 virtual void CommandReceived(const std::string& command) OVERRIDE; 43 virtual void OnProceed() OVERRIDE; 44 virtual void OnDontProceed() OVERRIDE; 45 46 // SupervisedUserServiceObserver implementation. 47 virtual void OnURLFilterChanged() OVERRIDE; 48 49 // Returns whether the blocked URL is now allowed. Called initially before the 50 // interstitial is shown (to catch race conditions), or when the URL filtering 51 // prefs change. 52 bool ShouldProceed(); 53 54 void DispatchContinueRequest(bool continue_request); 55 56 // Owns the interstitial, which owns us. 57 content::WebContents* web_contents_; 58 59 Profile* profile_; 60 61 content::InterstitialPage* interstitial_page_; // Owns us. 62 63 GURL url_; 64 65 base::Callback<void(bool)> callback_; 66 67 DISALLOW_COPY_AND_ASSIGN(SupervisedUserInterstitial); 68 }; 69 70 #endif // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_INTERSTITIAL_H_ 71