| Index: chrome/browser/supervised_user/supervised_user_browsertest.cc
|
| diff --git a/chrome/browser/supervised_user/supervised_user_browsertest.cc b/chrome/browser/supervised_user/supervised_user_browsertest.cc
|
| index 8166ea504d258b5834f436b6ed64fa7650672822..1c8f78745bf3b9a5bcc3e918bd51bd27972eb1e7 100644
|
| --- a/chrome/browser/supervised_user/supervised_user_browsertest.cc
|
| +++ b/chrome/browser/supervised_user/supervised_user_browsertest.cc
|
| @@ -233,6 +233,106 @@ IN_PROC_BROWSER_TEST_F(SupervisedUserBlockModeTest, OpenBlockedURLInNewTab) {
|
| EXPECT_EQ(prev_tab, tab_strip->GetActiveWebContents());
|
| }
|
|
|
| +// Navigates to a page in a new tab, then blocks it (which makes the
|
| +// interstitial page behave differently from the preceding test, where the
|
| +// navigation is blocked before it commits). The expected behavior is the same
|
| +// though: the tab should be closed when going back.
|
| +IN_PROC_BROWSER_TEST_F(SupervisedUserTest, BlockNewTabAfterLoading) {
|
| + TabStripModel* tab_strip = browser()->tab_strip_model();
|
| + WebContents* prev_tab = tab_strip->GetActiveWebContents();
|
| +
|
| + // Open URL in a new tab.
|
| + GURL test_url("http://www.example.com/simple.html");
|
| + ui_test_utils::NavigateToURLWithDisposition(
|
| + browser(), test_url, WindowOpenDisposition::NEW_FOREGROUND_TAB,
|
| + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
|
| +
|
| + // Check that there is no interstitial.
|
| + WebContents* tab = tab_strip->GetActiveWebContents();
|
| + ASSERT_FALSE(ShownPageIsInterstitial(tab));
|
| +
|
| + {
|
| + // Block the current URL.
|
| + base::RunLoop run_loop;
|
| + InterstitialPageObserver interstitial_observer(tab, run_loop.QuitClosure());
|
| +
|
| + SupervisedUserSettingsService* supervised_user_settings_service =
|
| + SupervisedUserSettingsServiceFactory::GetForProfile(
|
| + browser()->profile());
|
| + supervised_user_settings_service->SetLocalSetting(
|
| + supervised_users::kContentPackDefaultFilteringBehavior,
|
| + base::MakeUnique<base::Value>(SupervisedUserURLFilter::BLOCK));
|
| +
|
| + const SupervisedUserURLFilter* filter =
|
| + supervised_user_service_->GetURLFilter();
|
| + ASSERT_EQ(SupervisedUserURLFilter::BLOCK,
|
| + filter->GetFilteringBehaviorForURL(test_url));
|
| +
|
| + content::RunThisRunLoop(&run_loop);
|
| +
|
| + // Check that we got the interstitial.
|
| + ASSERT_TRUE(ShownPageIsInterstitial(tab));
|
| + }
|
| +
|
| + {
|
| + // On pressing the "back" button, the new tab should be closed, and we
|
| + // should get back to the previous active tab.
|
| + MockTabStripModelObserver observer(tab_strip);
|
| + base::RunLoop run_loop;
|
| + EXPECT_CALL(observer,
|
| + TabClosingAt(tab_strip, tab, tab_strip->active_index()))
|
| + .WillOnce(testing::InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
|
| + GoBack(tab);
|
| + run_loop.Run();
|
| + EXPECT_EQ(prev_tab, tab_strip->GetActiveWebContents());
|
| + }
|
| +}
|
| +
|
| +// Tests that we don't end up canceling an interstitial (thereby closing the
|
| +// whole tab) by attempting to show a second one above it.
|
| +IN_PROC_BROWSER_TEST_F(SupervisedUserTest, DontShowInterstitialTwice) {
|
| + TabStripModel* tab_strip = browser()->tab_strip_model();
|
| +
|
| + // Open URL in a new tab.
|
| + GURL test_url("http://www.example.com/simple.html");
|
| + ui_test_utils::NavigateToURLWithDisposition(
|
| + browser(), test_url, WindowOpenDisposition::NEW_FOREGROUND_TAB,
|
| + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
|
| +
|
| + // Check that there is no interstitial.
|
| + WebContents* tab = tab_strip->GetActiveWebContents();
|
| + ASSERT_FALSE(ShownPageIsInterstitial(tab));
|
| +
|
| + // Block the current URL.
|
| + SupervisedUserSettingsService* supervised_user_settings_service =
|
| + SupervisedUserSettingsServiceFactory::GetForProfile(browser()->profile());
|
| + base::RunLoop run_loop;
|
| + InterstitialPageObserver interstitial_observer(tab, run_loop.QuitClosure());
|
| + supervised_user_settings_service->SetLocalSetting(
|
| + supervised_users::kContentPackDefaultFilteringBehavior,
|
| + base::MakeUnique<base::Value>(SupervisedUserURLFilter::BLOCK));
|
| +
|
| + const SupervisedUserURLFilter* filter =
|
| + supervised_user_service_->GetURLFilter();
|
| + ASSERT_EQ(SupervisedUserURLFilter::BLOCK,
|
| + filter->GetFilteringBehaviorForURL(test_url));
|
| +
|
| + content::RunThisRunLoop(&run_loop);
|
| +
|
| + // Check that we got the interstitial.
|
| + ASSERT_TRUE(ShownPageIsInterstitial(tab));
|
| +
|
| + // Trigger a no-op change to the site lists, which will notify observers of
|
| + // the URL filter.
|
| + Profile* profile = browser()->profile();
|
| + SupervisedUserService* supervised_user_service =
|
| + SupervisedUserServiceFactory::GetForProfile(profile);
|
| + supervised_user_service->OnSiteListUpdated();
|
| +
|
| + content::RunAllPendingInMessageLoop();
|
| + EXPECT_EQ(tab, tab_strip->GetActiveWebContents());
|
| +}
|
| +
|
| // Tests whether a visit attempt adds a special history entry.
|
| IN_PROC_BROWSER_TEST_F(SupervisedUserBlockModeTest,
|
| HistoryVisitRecorded) {
|
| @@ -293,33 +393,6 @@ IN_PROC_BROWSER_TEST_F(SupervisedUserBlockModeTest,
|
| EXPECT_FALSE(results[1].blocked_visit());
|
| }
|
|
|
| -IN_PROC_BROWSER_TEST_F(SupervisedUserTest, ImmediatelyProceed) {
|
| - GURL test_url("http://www.example.com/simple.html");
|
| - ui_test_utils::NavigateToURL(browser(), test_url);
|
| -
|
| - WebContents* web_contents =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| - ASSERT_FALSE(ShownPageIsInterstitial(web_contents));
|
| -
|
| - // Manually show an interstitial page for a URL that is allowed. This
|
| - // simulates the case where a network request was blocked on the IO thread
|
| - // because a change to the URL filter hadn't been propagated yet.
|
| - bool proceed = false;
|
| - SupervisedUserInterstitial::Show(
|
| - web_contents, test_url, supervised_user_error_page::MANUAL,
|
| - /* initial_page_load = */ true,
|
| - base::Bind(
|
| - [](bool* result_holder, bool result) {
|
| - *result_holder = result;
|
| - },
|
| - &proceed));
|
| -
|
| - // The interstitial should not appear, and the callback should have been
|
| - // called immediately.
|
| - EXPECT_FALSE(ShownPageIsInterstitial(web_contents));
|
| - EXPECT_TRUE(proceed);
|
| -}
|
| -
|
| IN_PROC_BROWSER_TEST_F(SupervisedUserTest, GoBackOnDontProceed) {
|
| // We start out at the initial navigation.
|
| WebContents* web_contents =
|
| @@ -378,9 +451,8 @@ IN_PROC_BROWSER_TEST_F(SupervisedUserTest, BlockThenUnblock) {
|
| SupervisedUserSettingsService* supervised_user_settings_service =
|
| SupervisedUserSettingsServiceFactory::GetForProfile(
|
| browser()->profile());
|
| - auto message_loop_runner = make_scoped_refptr(new content::MessageLoopRunner);
|
| - InterstitialPageObserver observer(web_contents,
|
| - message_loop_runner->QuitClosure());
|
| + base::RunLoop run_loop;
|
| + InterstitialPageObserver observer(web_contents, run_loop.QuitClosure());
|
| supervised_user_settings_service->SetLocalSetting(
|
| supervised_users::kContentPackManualBehaviorHosts, std::move(dict));
|
|
|
| @@ -389,7 +461,7 @@ IN_PROC_BROWSER_TEST_F(SupervisedUserTest, BlockThenUnblock) {
|
| ASSERT_EQ(SupervisedUserURLFilter::BLOCK,
|
| filter->GetFilteringBehaviorForURL(test_url));
|
|
|
| - message_loop_runner->Run();
|
| + content::RunThisRunLoop(&run_loop);
|
| ASSERT_TRUE(ShownPageIsInterstitial(web_contents));
|
|
|
| dict = base::MakeUnique<base::DictionaryValue>();
|
|
|