Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Unified Diff: chrome/browser/supervised_user/supervised_user_browsertest.cc

Issue 2845053002: Avoid showing the supervised user block interstitial more than once (Closed)
Patch Set: comment Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/supervised_user/supervised_user_interstitial.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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>();
« no previous file with comments | « no previous file | chrome/browser/supervised_user/supervised_user_interstitial.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698