diff options
Diffstat (limited to 'chrome/browser/managed_mode')
3 files changed, 54 insertions, 1 deletions
diff --git a/chrome/browser/managed_mode/managed_mode_browsertest.cc b/chrome/browser/managed_mode/managed_mode_browsertest.cc index d26dafa..2f29c92 100644 --- a/chrome/browser/managed_mode/managed_mode_browsertest.cc +++ b/chrome/browser/managed_mode/managed_mode_browsertest.cc @@ -10,6 +10,7 @@ #include "chrome/browser/infobars/infobar.h" #include "chrome/browser/infobars/infobar_tab_helper.h" #include "chrome/browser/managed_mode/managed_mode.h" +#include "chrome/browser/managed_mode/managed_mode_interstitial.h" #include "chrome/browser/managed_mode/managed_user_service.h" #include "chrome/browser/managed_mode/managed_user_service_factory.h" #include "chrome/browser/prefs/pref_registry_syncable.h" @@ -17,6 +18,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/web_contents_modal_dialog_manager.h" #include "chrome/common/chrome_notification_types.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" @@ -524,3 +526,28 @@ IN_PROC_BROWSER_TEST_F(ManagedModeBlockModeTest, managed_user_service_->GetManualBehaviorForHost( "www.new-example.com")); } + +// Now check that the passphrase dialog is shown when a passphrase is specified +// and the user clicks on the preview button. +IN_PROC_BROWSER_TEST_F(ManagedModeBlockModeTest, + PreviewAuthenticationRequired) { + // Set a passphrase. + PrefService* pref_service = browser()->profile()->GetPrefs(); + pref_service->SetString(prefs::kManagedModeLocalPassphrase, "test"); + + // Navigate to an URL which should be blocked. + GURL test_url("http://www.example.com/files/simple.html"); + ui_test_utils::NavigateToURL(browser(), test_url); + WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); + InterstitialPage* interstitial_page = tab->GetInterstitialPage(); + + // Get the ManagedModeInterstitial delegate. + content::InterstitialPageDelegate* delegate = + interstitial_page->GetDelegateForTesting(); + + // Simulate the click on the "preview" button. + delegate->CommandReceived("\"preview\""); + WebContentsModalDialogManager* web_contents_modal_dialog_manager = + WebContentsModalDialogManager::FromWebContents(tab); + EXPECT_TRUE(web_contents_modal_dialog_manager->IsShowingDialog()); +} diff --git a/chrome/browser/managed_mode/managed_mode_interstitial.cc b/chrome/browser/managed_mode/managed_mode_interstitial.cc index e585274..322e67f 100644 --- a/chrome/browser/managed_mode/managed_mode_interstitial.cc +++ b/chrome/browser/managed_mode/managed_mode_interstitial.cc @@ -8,8 +8,11 @@ #include "base/metrics/histogram.h" #include "base/prefs/pref_service.h" #include "chrome/browser/managed_mode/managed_mode_navigation_observer.h" +#include "chrome/browser/managed_mode/managed_user_service.h" +#include "chrome/browser/managed_mode/managed_user_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/tab_contents/tab_util.h" +#include "chrome/browser/ui/webui/managed_user_passphrase_dialog.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "content/public/browser/browser_thread.h" @@ -69,6 +72,7 @@ ManagedModeInterstitial::ManagedModeInterstitial( const base::Callback<void(bool)>& callback) : web_contents_(web_contents), url_(url), + ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)), callback_(callback) { Profile* profile = Profile::FromBrowserContext(web_contents->GetBrowserContext()); @@ -129,7 +133,19 @@ void ManagedModeInterstitial::CommandReceived(const std::string& command) { UMA_HISTOGRAM_ENUMERATION("ManagedMode.BlockingInterstitialCommand", PREVIEW, HISTOGRAM_BOUNDING_VALUE); - interstitial_page_->Proceed(); + Profile* profile = + Profile::FromBrowserContext(web_contents_->GetBrowserContext()); + ManagedUserService* service = + ManagedUserServiceFactory::GetForProfile(profile); + if (service->IsElevated()) { + OnAuthorizationResult(true); + return; + } + // Will be deleted automatically when the dialog is closed. + new ManagedUserPassphraseDialog( + web_contents_, + base::Bind(&ManagedModeInterstitial::OnAuthorizationResult, + weak_ptr_factory_.GetWeakPtr())); return; } @@ -160,6 +176,11 @@ void ManagedModeInterstitial::OnDontProceed() { DispatchContinueRequest(false); } +void ManagedModeInterstitial::OnAuthorizationResult(bool success) { + if (success) + interstitial_page_->Proceed(); +} + void ManagedModeInterstitial::DispatchContinueRequest(bool continue_request) { BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(callback_, continue_request)); diff --git a/chrome/browser/managed_mode/managed_mode_interstitial.h b/chrome/browser/managed_mode/managed_mode_interstitial.h index 887f1f7..98aeaef 100644 --- a/chrome/browser/managed_mode/managed_mode_interstitial.h +++ b/chrome/browser/managed_mode/managed_mode_interstitial.h @@ -9,6 +9,7 @@ #include "base/callback.h" #include "base/compiler_specific.h" +#include "base/memory/weak_ptr.h" #include "content/public/browser/interstitial_page_delegate.h" #include "googleurl/src/gurl.h" @@ -46,6 +47,9 @@ class ManagedModeInterstitial : public content::InterstitialPageDelegate { virtual void OnProceed() OVERRIDE; virtual void OnDontProceed() OVERRIDE; + // Will be called when the passphrase dialog is closed, which is shown after + // clicking the preview button. + void OnAuthorizationResult(bool success); void DispatchContinueRequest(bool continue_request); // Owns the interstitial, which owns us. @@ -57,6 +61,7 @@ class ManagedModeInterstitial : public content::InterstitialPageDelegate { std::string languages_; GURL url_; + base::WeakPtrFactory<ManagedModeInterstitial> weak_ptr_factory_; base::Callback<void(bool)> callback_; DISALLOW_COPY_AND_ASSIGN(ManagedModeInterstitial); |