OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/file_util.h" | 5 #include "base/file_util.h" |
6 #include "base/test/test_timeouts.h" | 6 #include "base/test/test_timeouts.h" |
7 #include "chrome/browser/net/url_request_mock_http_job.h" | 7 #include "chrome/browser/net/url_request_mock_http_job.h" |
8 #include "chrome/browser/ui/view_ids.h" | 8 #include "chrome/browser/ui/view_ids.h" |
9 #include "chrome/common/chrome_switches.h" | 9 #include "chrome/common/chrome_switches.h" |
10 #include "chrome/test/automation/browser_proxy.h" | 10 #include "chrome/test/automation/browser_proxy.h" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 const testing::TestInfo* const test_info = | 96 const testing::TestInfo* const test_info = |
97 testing::UnitTest::GetInstance()->current_test_info(); | 97 testing::UnitTest::GetInstance()->current_test_info(); |
98 if (strcmp(test_info->name(), | 98 if (strcmp(test_info->name(), |
99 "BrowserCloseTabWhenOtherTabHasListener") == 0) { | 99 "BrowserCloseTabWhenOtherTabHasListener") == 0) { |
100 launch_arguments_.AppendSwitch(switches::kDisablePopupBlocking); | 100 launch_arguments_.AppendSwitch(switches::kDisablePopupBlocking); |
101 } | 101 } |
102 | 102 |
103 UITest::SetUp(); | 103 UITest::SetUp(); |
104 } | 104 } |
105 | 105 |
106 void WaitForBrowserClosed() { | |
107 const int kCheckDelayMs = 100; | |
108 for (int max_wait_time = TestTimeouts::action_max_timeout_ms(); | |
109 max_wait_time > 0; max_wait_time -= kCheckDelayMs) { | |
110 CrashAwareSleep(kCheckDelayMs); | |
111 if (!IsBrowserRunning()) | |
112 break; | |
113 } | |
114 | |
115 EXPECT_FALSE(IsBrowserRunning()); | |
116 } | |
117 | |
118 void CheckTitle(const std::wstring& expected_title) { | 106 void CheckTitle(const std::wstring& expected_title) { |
119 const int kCheckDelayMs = 100; | 107 const int kCheckDelayMs = 100; |
120 for (int max_wait_time = TestTimeouts::action_max_timeout_ms(); | 108 for (int max_wait_time = TestTimeouts::action_max_timeout_ms(); |
121 max_wait_time > 0; max_wait_time -= kCheckDelayMs) { | 109 max_wait_time > 0; max_wait_time -= kCheckDelayMs) { |
122 CrashAwareSleep(kCheckDelayMs); | |
123 if (expected_title == GetActiveTabTitle()) | 110 if (expected_title == GetActiveTabTitle()) |
124 break; | 111 break; |
| 112 base::PlatformThread::Sleep(kCheckDelayMs); |
125 } | 113 } |
126 | 114 |
127 EXPECT_EQ(expected_title, GetActiveTabTitle()); | 115 EXPECT_EQ(expected_title, GetActiveTabTitle()); |
128 } | 116 } |
129 | 117 |
130 void NavigateToDataURL(const std::string& html_content, | 118 void NavigateToDataURL(const std::string& html_content, |
131 const std::wstring& expected_title) { | 119 const std::wstring& expected_title) { |
132 NavigateToURL(GURL("data:text/html," + html_content)); | 120 NavigateToURL(GURL("data:text/html," + html_content)); |
133 CheckTitle(expected_title); | 121 CheckTitle(expected_title); |
134 } | 122 } |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 | 282 |
295 // Tests closing the browser with a beforeunload handler and clicking | 283 // Tests closing the browser with a beforeunload handler and clicking |
296 // OK in the beforeunload confirm dialog. | 284 // OK in the beforeunload confirm dialog. |
297 TEST_F(UnloadTest, BrowserCloseBeforeUnloadOK) { | 285 TEST_F(UnloadTest, BrowserCloseBeforeUnloadOK) { |
298 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); | 286 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); |
299 ASSERT_TRUE(browser.get()); | 287 ASSERT_TRUE(browser.get()); |
300 NavigateToDataURL(BEFORE_UNLOAD_HTML, L"beforeunload"); | 288 NavigateToDataURL(BEFORE_UNLOAD_HTML, L"beforeunload"); |
301 | 289 |
302 CloseBrowserAsync(browser.get()); | 290 CloseBrowserAsync(browser.get()); |
303 ClickModalDialogButton(ui::MessageBoxFlags::DIALOGBUTTON_OK); | 291 ClickModalDialogButton(ui::MessageBoxFlags::DIALOGBUTTON_OK); |
304 WaitForBrowserClosed(); | 292 |
| 293 int exit_code = -1; |
| 294 ASSERT_TRUE(launcher_->WaitForBrowserProcessToQuit( |
| 295 TestTimeouts::action_max_timeout_ms(), &exit_code)); |
| 296 EXPECT_EQ(0, exit_code); // Expect a clean shutown. |
305 } | 297 } |
306 | 298 |
307 // Tests closing the browser with a beforeunload handler and clicking | 299 // Tests closing the browser with a beforeunload handler and clicking |
308 // CANCEL in the beforeunload confirm dialog. | 300 // CANCEL in the beforeunload confirm dialog. |
309 TEST_F(UnloadTest, BrowserCloseBeforeUnloadCancel) { | 301 TEST_F(UnloadTest, BrowserCloseBeforeUnloadCancel) { |
310 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); | 302 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); |
311 ASSERT_TRUE(browser.get()); | 303 ASSERT_TRUE(browser.get()); |
312 NavigateToDataURL(BEFORE_UNLOAD_HTML, L"beforeunload"); | 304 NavigateToDataURL(BEFORE_UNLOAD_HTML, L"beforeunload"); |
313 | 305 |
314 CloseBrowserAsync(browser.get()); | 306 CloseBrowserAsync(browser.get()); |
315 ClickModalDialogButton(ui::MessageBoxFlags::DIALOGBUTTON_CANCEL); | 307 ClickModalDialogButton(ui::MessageBoxFlags::DIALOGBUTTON_CANCEL); |
| 308 |
316 // There's no real graceful way to wait for something _not_ to happen, so | 309 // There's no real graceful way to wait for something _not_ to happen, so |
317 // we just wait a short period. | 310 // we just wait a short period. |
318 CrashAwareSleep(500); | 311 base::PlatformThread::Sleep(TestTimeouts::action_timeout_ms()); |
319 ASSERT_TRUE(IsBrowserRunning()); | 312 ASSERT_TRUE(IsBrowserRunning()); |
320 | 313 |
321 CloseBrowserAsync(browser.get()); | 314 CloseBrowserAsync(browser.get()); |
322 ClickModalDialogButton(ui::MessageBoxFlags::DIALOGBUTTON_OK); | 315 ClickModalDialogButton(ui::MessageBoxFlags::DIALOGBUTTON_OK); |
323 WaitForBrowserClosed(); | 316 |
| 317 int exit_code = -1; |
| 318 ASSERT_TRUE(launcher_->WaitForBrowserProcessToQuit( |
| 319 TestTimeouts::action_max_timeout_ms(), &exit_code)); |
| 320 EXPECT_EQ(0, exit_code); // Expect a clean shutdown. |
324 } | 321 } |
325 | 322 |
326 #if defined(OS_LINUX) | 323 #if defined(OS_LINUX) |
327 // Fails sometimes on Linux valgrind. http://crbug.com/45675 | 324 // Fails sometimes on Linux valgrind. http://crbug.com/45675 |
328 #define MAYBE_BrowserCloseWithInnerFocusedFrame \ | 325 #define MAYBE_BrowserCloseWithInnerFocusedFrame \ |
329 FLAKY_BrowserCloseWithInnerFocusedFrame | 326 FLAKY_BrowserCloseWithInnerFocusedFrame |
330 #else | 327 #else |
331 #define MAYBE_BrowserCloseWithInnerFocusedFrame \ | 328 #define MAYBE_BrowserCloseWithInnerFocusedFrame \ |
332 BrowserCloseWithInnerFocusedFrame | 329 BrowserCloseWithInnerFocusedFrame |
333 #endif | 330 #endif |
334 | 331 |
335 // Tests closing the browser and clicking OK in the beforeunload confirm dialog | 332 // Tests closing the browser and clicking OK in the beforeunload confirm dialog |
336 // if an inner frame has the focus. See crbug.com/32615. | 333 // if an inner frame has the focus. See crbug.com/32615. |
337 TEST_F(UnloadTest, MAYBE_BrowserCloseWithInnerFocusedFrame) { | 334 TEST_F(UnloadTest, MAYBE_BrowserCloseWithInnerFocusedFrame) { |
338 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); | 335 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); |
339 ASSERT_TRUE(browser.get()); | 336 ASSERT_TRUE(browser.get()); |
340 | 337 |
341 NavigateToDataURL(INNER_FRAME_WITH_FOCUS_HTML, L"innerframewithfocus"); | 338 NavigateToDataURL(INNER_FRAME_WITH_FOCUS_HTML, L"innerframewithfocus"); |
342 | 339 |
343 CloseBrowserAsync(browser.get()); | 340 CloseBrowserAsync(browser.get()); |
344 ClickModalDialogButton(ui::MessageBoxFlags::DIALOGBUTTON_OK); | 341 ClickModalDialogButton(ui::MessageBoxFlags::DIALOGBUTTON_OK); |
345 WaitForBrowserClosed(); | 342 |
| 343 int exit_code = -1; |
| 344 ASSERT_TRUE(launcher_->WaitForBrowserProcessToQuit( |
| 345 TestTimeouts::action_max_timeout_ms(), &exit_code)); |
| 346 EXPECT_EQ(0, exit_code); // Expect a clean shutdown. |
346 } | 347 } |
347 | 348 |
348 // Tests closing the browser with a beforeunload handler that takes | 349 // Tests closing the browser with a beforeunload handler that takes |
349 // two seconds to run. | 350 // two seconds to run. |
350 TEST_F(UnloadTest, BrowserCloseTwoSecondBeforeUnload) { | 351 TEST_F(UnloadTest, BrowserCloseTwoSecondBeforeUnload) { |
351 LoadUrlAndQuitBrowser(TWO_SECOND_BEFORE_UNLOAD_HTML, | 352 LoadUrlAndQuitBrowser(TWO_SECOND_BEFORE_UNLOAD_HTML, |
352 L"twosecondbeforeunload"); | 353 L"twosecondbeforeunload"); |
353 } | 354 } |
354 | 355 |
355 // Tests closing the browser on a page with an unload listener registered where | 356 // Tests closing the browser on a page with an unload listener registered where |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 ASSERT_TRUE(browser->WaitForTabCountToBecome(1)); | 447 ASSERT_TRUE(browser->WaitForTabCountToBecome(1)); |
447 scoped_refptr<TabProxy> main_tab(browser->GetActiveTab()); | 448 scoped_refptr<TabProxy> main_tab(browser->GetActiveTab()); |
448 ASSERT_TRUE(main_tab.get()); | 449 ASSERT_TRUE(main_tab.get()); |
449 std::wstring main_title; | 450 std::wstring main_title; |
450 EXPECT_TRUE(main_tab->GetTabTitle(&main_title)); | 451 EXPECT_TRUE(main_tab->GetTabTitle(&main_title)); |
451 EXPECT_EQ(std::wstring(L"only_one_unload"), main_title); | 452 EXPECT_EQ(std::wstring(L"only_one_unload"), main_title); |
452 } | 453 } |
453 | 454 |
454 // TODO(ojan): Add tests for unload/beforeunload that have multiple tabs | 455 // TODO(ojan): Add tests for unload/beforeunload that have multiple tabs |
455 // and multiple windows. | 456 // and multiple windows. |
OLD | NEW |