supervised_user_browsertest.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/pref_service.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_constants.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_interstitial.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_navigation_observer.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_service.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_service_factory.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_settings_service.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_settings_service_factory.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_navigator.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model_observer.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "components/infobars/core/confirm_infobar_delegate.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "components/infobars/core/infobar.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/interstitial_page.h" 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/navigation_controller.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::InterstitialPage; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationController; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationEntry; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Tests the filter mode in which all sites are blocked by default. 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SupervisedUserBlockModeTest : public InProcessBrowserTest { 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Indicates whether the interstitial should proceed or not. 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) enum InterstitialAction { 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) INTERSTITIAL_PROCEED, 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) INTERSTITIAL_DONTPROCEED, 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SupervisedUserBlockModeTest() : supervised_user_service_(NULL) {} 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~SupervisedUserBlockModeTest() {} 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void CheckShownPageIsInterstitial(WebContents* tab) { 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckShownPage(tab, content::PAGE_TYPE_INTERSTITIAL); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void CheckShownPageIsNotInterstitial(WebContents* tab) { 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckShownPage(tab, content::PAGE_TYPE_NORMAL); 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Checks to see if the type of the current page is |page_type|. 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void CheckShownPage(WebContents* tab, content::PageType page_type) { 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_FALSE(tab->IsCrashed()); 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NavigationEntry* entry = tab->GetController().GetActiveEntry(); 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(entry); 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(page_type, entry->GetPageType()); 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SendAccessRequest(WebContents* tab) { 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InterstitialPage* interstitial_page = tab->GetInterstitialPage(); 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(interstitial_page); 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Get the SupervisedUserInterstitial delegate. 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::InterstitialPageDelegate* delegate = 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) interstitial_page->GetDelegateForTesting(); 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Simulate the click on the "request" button. 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate->CommandReceived("\"request\""); 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void GoBack(WebContents* tab) { 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InterstitialPage* interstitial_page = tab->GetInterstitialPage(); 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(interstitial_page); 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Get the SupervisedUserInterstitial delegate. 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::InterstitialPageDelegate* delegate = 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) interstitial_page->GetDelegateForTesting(); 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the click on the "back" button. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate->CommandReceived("\"back\""); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected: 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Set up the SupervisedUserNavigationObserver manually since the profile 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // was not supervised when the browser was created. 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::WebContents* web_contents = 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SupervisedUserNavigationObserver::CreateForWebContents(web_contents); 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* profile = browser()->profile(); 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) supervised_user_service_ = 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SupervisedUserServiceFactory::GetForProfile(profile); 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SupervisedUserSettingsService* supervised_user_settings_service = 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SupervisedUserSettingsServiceFactory::GetForProfile(profile); 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) supervised_user_settings_service->SetLocalSettingForTesting( 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) supervised_users::kContentPackDefaultFilteringBehavior, 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<base::Value>( 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new base::FundamentalValue(SupervisedUserURLFilter::BLOCK))); 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Enable the test server and remap all URLs to it. 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string host_port = test_server()->host_port_pair().ToString(); 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) command_line->AppendSwitchASCII(switches::kHostResolverRules, 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "MAP *.example.com " + host_port + "," + 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "MAP *.new-example.com " + host_port + "," + 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "MAP *.a.com " + host_port); 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) command_line->AppendSwitchASCII(switches::kSupervisedUserId, "asdf"); 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Acts like a synchronous call to history's QueryHistory. Modified from 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // history_querying_unittest.cc. 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void QueryHistory(HistoryService* history_service, 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& text_query, 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const history::QueryOptions& options, 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) history::QueryResults* results) { 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::RunLoop run_loop; 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::CancelableTaskTracker history_task_tracker; 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) history_service->QueryHistory( 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::UTF8ToUTF16(text_query), 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) options, 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&SupervisedUserBlockModeTest::QueryHistoryComplete, 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(this), 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) results, 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &run_loop), 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &history_task_tracker); 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) run_loop.Run(); // Will go until ...Complete calls Quit. 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void QueryHistoryComplete(history::QueryResults* new_results, 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::RunLoop* run_loop, 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) history::QueryResults* results) { 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) results->Swap(new_results); 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) run_loop->Quit(); // Will return out to QueryHistory. 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SupervisedUserService* supervised_user_service_; 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MockTabStripModelObserver : public TabStripModelObserver { 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) explicit MockTabStripModelObserver(TabStripModel* tab_strip) 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : tab_strip_(tab_strip) { 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tab_strip_->AddObserver(this); 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ~MockTabStripModelObserver() { 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tab_strip_->RemoveObserver(this); 168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MOCK_METHOD3(TabClosingAt, void(TabStripModel*, content::WebContents*, int)); 171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TabStripModel* tab_strip_; 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Navigates to a blocked URL. 177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SupervisedUserBlockModeTest, 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendAccessRequestOnBlockedURL) { 179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL test_url("http://www.example.com/files/simple.html"); 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), test_url); 181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckShownPageIsInterstitial(tab); 185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SendAccessRequest(tab); 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // TODO(sergiu): Properly check that the access request was sent here. 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GoBack(tab); 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Make sure that the tab is still there. 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(tab, browser()->tab_strip_model()->GetActiveWebContents()); 194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckShownPageIsNotInterstitial(tab); 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Navigates to a blocked URL in a new tab. We expect the tab to be closed 199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// automatically on pressing the "back" button on the interstitial. 200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SupervisedUserBlockModeTest, OpenBlockedURLInNewTab) { 201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TabStripModel* tab_strip = browser()->tab_strip_model(); 202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebContents* prev_tab = tab_strip->GetActiveWebContents(); 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Open blocked URL in a new tab. 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL test_url("http://www.example.com/files/simple.html"); 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser(), test_url, NEW_FOREGROUND_TAB, 208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check that we got the interstitial. 211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebContents* tab = tab_strip->GetActiveWebContents(); 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckShownPageIsInterstitial(tab); 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // On pressing the "back" button, the new tab should be closed, and we should 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // get back to the previous active tab. 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MockTabStripModelObserver observer(tab_strip); 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(observer, 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TabClosingAt(tab_strip, tab, tab_strip->active_index())); 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GoBack(tab); 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(prev_tab, tab_strip->GetActiveWebContents()); 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Tests whether a visit attempt adds a special history entry. 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SupervisedUserBlockModeTest, 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HistoryVisitRecorded) { 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL allowed_url("http://www.example.com/files/simple.html"); 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Set the host as allowed. 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); 230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dict->SetBooleanWithoutPathExpansion(allowed_url.host(), true); 231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SupervisedUserSettingsService* supervised_user_settings_service = 232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SupervisedUserSettingsServiceFactory::GetForProfile( 233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->profile()); 234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) supervised_user_settings_service->SetLocalSettingForTesting( 235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) supervised_users::kContentPackManualBehaviorHosts, 236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dict.PassAs<base::Value>()); 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ( 238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SupervisedUserService::MANUAL_ALLOW, 239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) supervised_user_service_->GetManualBehaviorForHost(allowed_url.host())); 240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), allowed_url); 242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Navigate to it and check that we don't get an interstitial. 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckShownPageIsNotInterstitial(tab); 246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Navigate to a blocked page and go back on the interstitial. 24803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) GURL blocked_url("http://www.new-example.com/files/simple.html"); 249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), blocked_url); 250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tab = browser()->tab_strip_model()->GetActiveWebContents(); 252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckShownPageIsInterstitial(tab); 254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GoBack(tab); 255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check that we went back to the first URL and that the manual behaviors 257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // have not changed. 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(allowed_url.spec(), tab->GetURL().spec()); 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(SupervisedUserService::MANUAL_ALLOW, 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) supervised_user_service_->GetManualBehaviorForHost( 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "www.example.com")); 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ( 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SupervisedUserService::MANUAL_NONE, 264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) supervised_user_service_->GetManualBehaviorForHost( 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "www.new-example.com")); 266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Query the history entry. 268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) HistoryService* history_service = HistoryServiceFactory::GetForProfile( 269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->profile(), Profile::EXPLICIT_ACCESS); 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) history::QueryOptions options; 271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) history::QueryResults results; 272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) QueryHistory(history_service, "", options, &results); 273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check that the entries have the correct blocked_visit value. 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(2u, results.size()); 276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(blocked_url.spec(), results[0].url().spec()); 277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(results[0].blocked_visit()); 278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(allowed_url.spec(), results[1].url().spec()); 279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(results[1].blocked_visit()); 280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SupervisedUserBlockModeTest, Unblock) { 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL test_url("http://www.example.com/files/simple.html"); 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), test_url); 285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebContents* web_contents = 287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckShownPageIsInterstitial(web_contents); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the host as allowed. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetBooleanWithoutPathExpansion(test_url.host(), true); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SupervisedUserSettingsService* supervised_user_settings_service = 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SupervisedUserSettingsServiceFactory::GetForProfile( 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->profile()); 301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) supervised_user_settings_service->SetLocalSettingForTesting( 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) supervised_users::kContentPackManualBehaviorHosts, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict.PassAs<base::Value>()); 304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ( 305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SupervisedUserService::MANUAL_ALLOW, 306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) supervised_user_service_->GetManualBehaviorForHost(test_url.host())); 307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) observer.Wait(); 309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(test_url, web_contents->GetURL()); 310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 31303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)