12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/common/cancelable_request.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/confirm_infobar_delegate.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_mode_interstitial.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_mode_navigation_observer.h" 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_user_constants.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_user_service.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_user_service_factory.h" 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_user_settings_service.h" 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_user_settings_service_factory.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_navigator.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/interstitial_page.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/navigation_controller.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/navigation_entry.h" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_service.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/generated_resources.h" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::InterstitialPage; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::NavigationController; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::NavigationEntry; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::WebContents; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests the filter mode in which all sites are blocked by default. 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagedModeBlockModeTest : public InProcessBrowserTest { 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Indicates whether the interstitial should proceed or not. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum InterstitialAction { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INTERSTITIAL_PROCEED, 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INTERSTITIAL_DONTPROCEED, 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ManagedModeBlockModeTest() : managed_user_service_(NULL) {} 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagedModeBlockModeTest() {} 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CheckShownPageIsInterstitial(WebContents* tab) { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckShownPage(tab, content::PAGE_TYPE_INTERSTITIAL); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CheckShownPageIsNotInterstitial(WebContents* tab) { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckShownPage(tab, content::PAGE_TYPE_NORMAL); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Checks to see if the type of the current page is |page_type|. 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CheckShownPage(WebContents* tab, content::PageType page_type) { 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(tab->IsCrashed()); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigationEntry* entry = tab->GetController().GetActiveEntry(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(entry); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(page_type, entry->GetPageType()); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void SendAccessRequest(WebContents* tab) { 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) InterstitialPage* interstitial_page = tab->GetInterstitialPage(); 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(interstitial_page); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Get the ManagedModeInterstitial delegate. 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::InterstitialPageDelegate* delegate = 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) interstitial_page->GetDelegateForTesting(); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Simulate the click on the "request" button. 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) delegate->CommandReceived("\"request\""); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void GoBack(WebContents* tab) { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InterstitialPage* interstitial_page = tab->GetInterstitialPage(); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(interstitial_page); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Get the ManagedModeInterstitial delegate. 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::InterstitialPageDelegate* delegate = 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) interstitial_page->GetDelegateForTesting(); 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Simulate the click on the "back" button. 9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) delegate->CommandReceived("\"back\""); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set up the ManagedModeNavigationObserver manually since the profile was 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // not managed when the browser was created. 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WebContents* web_contents = 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ManagedModeNavigationObserver::CreateForWebContents(web_contents); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = browser()->profile(); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) managed_user_service_ = ManagedUserServiceFactory::GetForProfile(profile); 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ManagedUserSettingsService* managed_user_settings_service = 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ManagedUserSettingsServiceFactory::GetForProfile(profile); 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) managed_user_settings_service->SetLocalSettingForTesting( 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) managed_users::kContentPackDefaultFilteringBehavior, 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::Value>( 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new base::FundamentalValue(ManagedModeURLFilter::BLOCK))); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Enable the test server and remap all URLs to it. 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string host_port = test_server()->host_port_pair().ToString(); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendSwitchASCII(switches::kHostResolverRules, 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "MAP *.example.com " + host_port + "," + 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "MAP *.new-example.com " + host_port + "," + 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "MAP *.a.com " + host_port); 1268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) command_line->AppendSwitchASCII(switches::kManagedUserId, "asdf"); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Acts like a synchronous call to history's QueryHistory. Modified from 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // history_querying_unittest.cc. 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void QueryHistory(HistoryService* history_service, 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& text_query, 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const history::QueryOptions& options, 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) history::QueryResults* results) { 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CancelableRequestConsumer history_request_consumer; 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::RunLoop run_loop; 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) history_service->QueryHistory( 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UTF8ToUTF16(text_query), 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) options, 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &history_request_consumer, 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&ManagedModeBlockModeTest::QueryHistoryComplete, 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Unretained(this), 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) results, 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &run_loop)); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) run_loop.Run(); // Will go until ...Complete calls Quit. 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void QueryHistoryComplete(history::QueryResults* new_results, 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::RunLoop* run_loop, 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HistoryService::Handle /* handle */, 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) history::QueryResults* results) { 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) results->Swap(new_results); 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) run_loop->Quit(); // Will return out to QueryHistory. 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ManagedUserService* managed_user_service_; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Navigates to a blocked URL. 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ManagedModeBlockModeTest, 16290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SendAccessRequestOnBlockedURL) { 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL test_url("http://www.example.com/files/simple.html"); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), test_url); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckShownPageIsInterstitial(tab); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SendAccessRequest(tab); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // TODO(sergiu): Properly check that the access request was sent here. 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GoBack(tab); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CheckShownPageIsNotInterstitial(tab); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Tests whether a visit attempt adds a special history entry. 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ManagedModeBlockModeTest, 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HistoryVisitRecorded) { 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL allowed_url("http://www.example.com/files/simple.html"); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set the host as allowed. 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<DictionaryValue> dict(new DictionaryValue); 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) dict->SetBooleanWithoutPathExpansion(allowed_url.host(), true); 18758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ManagedUserSettingsService* managed_user_settings_service = 18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ManagedUserSettingsServiceFactory::GetForProfile( 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) browser()->profile()); 19058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) managed_user_settings_service->SetLocalSettingForTesting( 19158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) managed_users::kContentPackManualBehaviorHosts, dict.PassAs<Value>()); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ( 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ManagedUserService::MANUAL_ALLOW, 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) managed_user_service_->GetManualBehaviorForHost(allowed_url.host())); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), allowed_url); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Navigate to it and check that we don't get an interstitial. 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckShownPageIsNotInterstitial(tab); 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Navigate to a blocked page and go back on the interstitial. 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL blocked_url("http://www.new-example.com/files/simple.html"); 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), blocked_url); 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tab = browser()->tab_strip_model()->GetActiveWebContents(); 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckShownPageIsInterstitial(tab); 20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GoBack(tab); 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check that we went back to the first URL and that the manual behaviors 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // have not changed. 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(allowed_url.spec(), tab->GetURL().spec()); 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(ManagedUserService::MANUAL_ALLOW, 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) managed_user_service_->GetManualBehaviorForHost("www.example.com")); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ( 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ManagedUserService::MANUAL_NONE, 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) managed_user_service_->GetManualBehaviorForHost("www.new-example.com")); 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Query the history entry. 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HistoryService* history_service = HistoryServiceFactory::GetForProfile( 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->profile(), Profile::EXPLICIT_ACCESS); 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) history::QueryOptions options; 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) history::QueryResults results; 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QueryHistory(history_service, "", options, &results); 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check that the entries have the correct blocked_visit value. 228d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_EQ(2u, results.size()); 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(blocked_url.spec(), results[0].url().spec()); 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(results[0].blocked_visit()); 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(allowed_url.spec(), results[1].url().spec()); 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(results[1].blocked_visit()); 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ManagedModeBlockModeTest, Unblock) { 23658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL test_url("http://www.example.com/files/simple.html"); 23758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), test_url); 23858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 23958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebContents* web_contents = 24058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 24158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 24258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CheckShownPageIsInterstitial(web_contents); 24358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 24458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::WindowedNotificationObserver observer( 24558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 24658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::NotificationService::AllSources()); 24758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 24858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Set the host as allowed. 24958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<DictionaryValue> dict(new DictionaryValue); 25058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) dict->SetBooleanWithoutPathExpansion(test_url.host(), true); 25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ManagedUserSettingsService* managed_user_settings_service = 25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ManagedUserSettingsServiceFactory::GetForProfile( 25358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) browser()->profile()); 25458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) managed_user_settings_service->SetLocalSettingForTesting( 25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) managed_users::kContentPackManualBehaviorHosts, dict.PassAs<Value>()); 25658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ( 25758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ManagedUserService::MANUAL_ALLOW, 25858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) managed_user_service_->GetManualBehaviorForHost(test_url.host())); 25958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 26058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) observer.Wait(); 26158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(test_url, web_contents->GetURL()); 26258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 26358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 265