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

Unified Diff: chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc

Issue 2455973006: Prevent popunders with the new auto-dismissing dialogs. (Closed)
Patch Set: with test Created 4 years, 1 month 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/ui/javascript_dialogs/javascript_dialog.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
diff --git a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
index 7ee3deb06ba56fe312215fb8be9956ca944168b8..59173fe484c5def657adb695fb072b3c59605ec6 100644
--- a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
+++ b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
@@ -10,6 +10,7 @@
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/test/scoped_feature_list.h"
#include "build/build_config.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
@@ -21,10 +22,12 @@
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h"
#include "chrome/browser/ui/location_bar/location_bar.h"
#include "chrome/browser/ui/login/login_handler.h"
#include "chrome/browser/ui/login/login_handler_test_utils.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/chrome_features.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/url_constants.h"
@@ -50,6 +53,7 @@
#include "content/public/common/url_constants.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/test_navigation_observer.h"
+#include "content/public/test/test_utils.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -514,7 +518,7 @@ IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, ModalPopUnder) {
tab->GetMainFrame()->ExecuteJavaScriptForTests(base::UTF8ToUTF16("alert()"));
app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog();
- // Verify that after the dialog was closed, the popup is in front again.
+ // Verify that after the dialog is closed, the popup is in front again.
ASSERT_TRUE(dialog->IsJavaScriptModalDialog());
app_modal::JavaScriptAppModalDialog* js_dialog =
static_cast<app_modal::JavaScriptAppModalDialog*>(dialog);
@@ -525,6 +529,54 @@ IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, ModalPopUnder) {
ASSERT_EQ(popup_browser, chrome::FindLastActive());
}
+// Verify that app modal prompts can't be used to create pop unders, while the
+// new auto-dismissing JavaScript dialogs are enabled.
+IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest,
+ ModalPopUnderAutoDismissingDialogs) {
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitAndEnableFeature(features::kAutoDismissingDialogs);
+
+ // One tab to test in.
+ TabStripModel* tab_strip = browser()->tab_strip_model();
+ WebContents* tab = tab_strip->GetActiveWebContents();
+ EXPECT_EQ(1, tab_strip->count());
+
+ // One blank tab for later.
+ ui_test_utils::NavigateToURLWithDisposition(
+ browser(), GURL(url::kAboutBlankURL),
+ WindowOpenDisposition::NEW_BACKGROUND_TAB,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
+ EXPECT_EQ(2, tab_strip->count());
+ ASSERT_EQ(0, tab_strip->GetIndexOfWebContents(tab));
+
+ // Show a popup.
+ JavaScriptDialogTabHelper* js_helper =
+ JavaScriptDialogTabHelper::FromWebContents(tab);
+ GURL url(
+ embedded_test_server()->GetURL("/popup_blocker/popup-window-open.html"));
+ HostContentSettingsMapFactory::GetForProfile(browser()->profile())
+ ->SetContentSettingDefaultScope(url, GURL(), CONTENT_SETTINGS_TYPE_POPUPS,
+ std::string(), CONTENT_SETTING_ALLOW);
+
+ NavigateAndCheckPopupShown(url, ExpectPopup);
+
+ Browser* popup_browser = chrome::FindLastActive();
+ ASSERT_NE(popup_browser, browser());
+
+ // Showing an alert will raise the tab over the popup.
+ scoped_refptr<content::MessageLoopRunner> runner =
+ new content::MessageLoopRunner;
+ js_helper->SetDialogShownCallbackForTesting(runner->QuitClosure());
+ tab->GetMainFrame()->ExecuteJavaScriptForTests(base::UTF8ToUTF16("alert()"));
+ runner->Run();
+
+ // Verify that after the dialog is closed, the popup is in front again.
+ ui_test_utils::BrowserActivationWaiter waiter(popup_browser);
+ tab_strip->ActivateTabAt(1, true);
+ waiter.WaitForActivation();
+ ASSERT_EQ(popup_browser, chrome::FindLastActive());
+}
+
#if defined(ENABLE_EXTENSIONS)
#define MAYBE_ModalPopUnderViaGuestView DISABLED_ModalPopUnderViaGuestView
#else
« no previous file with comments | « no previous file | chrome/browser/ui/javascript_dialogs/javascript_dialog.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698