Index: chrome/browser/ui/browser_browsertest.cc |
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc |
index 9cfbd3f7f6e160e38591ebc0569075272e78f50d..b03200cdfc2a4cfdb1963fca39d95395445bc7ba 100644 |
--- a/chrome/browser/ui/browser_browsertest.cc |
+++ b/chrome/browser/ui/browser_browsertest.cc |
@@ -56,6 +56,7 @@ |
#include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" |
#include "chrome/browser/ui/extensions/app_launch_params.h" |
#include "chrome/browser/ui/extensions/application_launch.h" |
+#include "chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h" |
#include "chrome/browser/ui/search/search_tab_helper.h" |
#include "chrome/browser/ui/startup/startup_browser_creator.h" |
#include "chrome/browser/ui/startup/startup_browser_creator_impl.h" |
@@ -487,10 +488,14 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, JavascriptAlertActivatesTab) { |
EXPECT_EQ(0, browser()->tab_strip_model()->active_index()); |
WebContents* second_tab = browser()->tab_strip_model()->GetWebContentsAt(1); |
ASSERT_TRUE(second_tab); |
+ JavaScriptDialogTabHelper* js_helper = |
+ JavaScriptDialogTabHelper::FromWebContents(second_tab); |
+ base::RunLoop dialog_wait; |
+ js_helper->SetDialogShownCallbackForTesting(dialog_wait.QuitClosure()); |
second_tab->GetMainFrame()->ExecuteJavaScriptForTests( |
ASCIIToUTF16("alert('Activate!');")); |
- AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); |
- alert->CloseModalDialog(); |
+ dialog_wait.Run(); |
+ js_helper->HandleJavaScriptDialog(second_tab, true, nullptr); |
EXPECT_EQ(2, browser()->tab_strip_model()->count()); |
EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); |
} |
@@ -596,17 +601,19 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, DISABLED_CrossProcessNavCancelsDialogs) { |
// even if the renderer tries to synchronously create more. |
// See http://crbug.com/312490. |
WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); |
+ JavaScriptDialogTabHelper* js_helper = |
+ JavaScriptDialogTabHelper::FromWebContents(contents); |
+ base::RunLoop dialog_wait; |
+ js_helper->SetDialogShownCallbackForTesting(dialog_wait.QuitClosure()); |
contents->GetMainFrame()->ExecuteJavaScriptForTests( |
ASCIIToUTF16("alert('one'); alert('two');")); |
- AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); |
- EXPECT_TRUE(alert->IsValid()); |
- AppModalDialogQueue* dialog_queue = AppModalDialogQueue::GetInstance(); |
- EXPECT_TRUE(dialog_queue->HasActiveDialog()); |
+ dialog_wait.Run(); |
+ EXPECT_TRUE(js_helper->IsShowingDialogForTesting()); |
// A cross-site navigation should force the dialog to close. |
GURL url2("http://www.example.com/empty.html"); |
ui_test_utils::NavigateToURL(browser(), url2); |
- EXPECT_FALSE(dialog_queue->HasActiveDialog()); |
+ EXPECT_FALSE(js_helper->IsShowingDialogForTesting()); |
// Make sure input events still work in the renderer process. |
EXPECT_FALSE(contents->GetRenderProcessHost()->IgnoreInputEvents()); |
@@ -654,14 +661,16 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, SadTabCancelsSubframeDialogs) { |
browser(), GURL("data:text/html, <html><body></body></html>")); |
// Create an iframe that opens an alert dialog. |
+ JavaScriptDialogTabHelper* js_helper = |
+ JavaScriptDialogTabHelper::FromWebContents(contents); |
+ base::RunLoop dialog_wait; |
+ js_helper->SetDialogShownCallbackForTesting(dialog_wait.QuitClosure()); |
contents->GetMainFrame()->ExecuteJavaScriptForTests( |
ASCIIToUTF16("f = document.createElement('iframe');" |
"f.srcdoc = '<script>alert(1)</script>';" |
"document.body.appendChild(f);")); |
- AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); |
- EXPECT_TRUE(alert->IsValid()); |
- AppModalDialogQueue* dialog_queue = AppModalDialogQueue::GetInstance(); |
- EXPECT_TRUE(dialog_queue->HasActiveDialog()); |
+ dialog_wait.Run(); |
+ EXPECT_TRUE(js_helper->IsShowingDialogForTesting()); |
// Crash the renderer process and ensure the dialog is gone. |
content::RenderProcessHost* child_process = contents->GetRenderProcessHost(); |
@@ -670,7 +679,7 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, SadTabCancelsSubframeDialogs) { |
content::RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); |
child_process->Shutdown(0, false); |
crash_observer.Wait(); |
- EXPECT_FALSE(dialog_queue->HasActiveDialog()); |
+ EXPECT_FALSE(js_helper->IsShowingDialogForTesting()); |
// Make sure subsequent navigations work. |
GURL url2("data:text/html,foo"); |
@@ -680,17 +689,19 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, SadTabCancelsSubframeDialogs) { |
// Make sure modal dialogs within a guestview are closed when an interstitial |
// page is showing. See crbug.com/482380. |
IN_PROC_BROWSER_TEST_F(BrowserTest, InterstitialCancelsGuestViewDialogs) { |
+ WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); |
+ JavaScriptDialogTabHelper* js_helper = |
+ JavaScriptDialogTabHelper::FromWebContents(contents); |
+ base::RunLoop dialog_wait; |
+ js_helper->SetDialogShownCallbackForTesting(dialog_wait.QuitClosure()); |
+ |
// Navigate to a PDF, which is loaded within a guestview. |
ASSERT_TRUE(embedded_test_server()->Start()); |
GURL pdf_with_dialog(embedded_test_server()->GetURL("/alert_dialog.pdf")); |
ui_test_utils::NavigateToURL(browser(), pdf_with_dialog); |
- AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); |
- EXPECT_TRUE(alert->IsValid()); |
- AppModalDialogQueue* dialog_queue = AppModalDialogQueue::GetInstance(); |
- EXPECT_TRUE(dialog_queue->HasActiveDialog()); |
- |
- WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); |
+ dialog_wait.Run(); |
+ EXPECT_TRUE(js_helper->IsShowingDialogForTesting()); |
TestInterstitialPage* interstitial = |
new TestInterstitialPage(contents, false, GURL()); |
@@ -698,7 +709,7 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, InterstitialCancelsGuestViewDialogs) { |
// The interstitial should have closed the dialog. |
EXPECT_TRUE(contents->ShowingInterstitialPage()); |
- EXPECT_FALSE(dialog_queue->HasActiveDialog()); |
+ EXPECT_FALSE(js_helper->IsShowingDialogForTesting()); |
interstitial->DontProceed(); |
} |
@@ -1890,12 +1901,14 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, InterstitialClosesDialogs) { |
ui_test_utils::NavigateToURL(browser(), url); |
WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents(); |
+ JavaScriptDialogTabHelper* js_helper = |
+ JavaScriptDialogTabHelper::FromWebContents(contents); |
+ base::RunLoop dialog_wait; |
+ js_helper->SetDialogShownCallbackForTesting(dialog_wait.QuitClosure()); |
contents->GetMainFrame()->ExecuteJavaScriptForTests( |
ASCIIToUTF16("alert('Dialog showing!');")); |
- AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); |
- EXPECT_TRUE(alert->IsValid()); |
- AppModalDialogQueue* dialog_queue = AppModalDialogQueue::GetInstance(); |
- EXPECT_TRUE(dialog_queue->HasActiveDialog()); |
+ dialog_wait.Run(); |
+ EXPECT_TRUE(js_helper->IsShowingDialogForTesting()); |
TestInterstitialPage* interstitial = |
new TestInterstitialPage(contents, false, GURL()); |
@@ -1903,7 +1916,7 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, InterstitialClosesDialogs) { |
// The interstitial should have closed the dialog. |
EXPECT_TRUE(contents->ShowingInterstitialPage()); |
- EXPECT_FALSE(dialog_queue->HasActiveDialog()); |
+ EXPECT_FALSE(js_helper->IsShowingDialogForTesting()); |
// Don't proceed and wait for interstitial to detach. This doesn't destroy |
// |contents|. |