| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/files/file_path.h" | 6 #include "base/files/file_path.h" |
| 7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
| 8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "chrome/browser/chrome_notification_types.h" | 10 #include "chrome/browser/chrome_notification_types.h" |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 | 131 |
| 132 if (what_to_expect == ExpectPopup) { | 132 if (what_to_expect == ExpectPopup) { |
| 133 ASSERT_EQ(2u, | 133 ASSERT_EQ(2u, |
| 134 chrome::GetBrowserCount(browser()->profile(), | 134 chrome::GetBrowserCount(browser()->profile(), |
| 135 browser()->host_desktop_type())); | 135 browser()->host_desktop_type())); |
| 136 } else { | 136 } else { |
| 137 ASSERT_EQ(1u, | 137 ASSERT_EQ(1u, |
| 138 chrome::GetBrowserCount(browser()->profile(), | 138 chrome::GetBrowserCount(browser()->profile(), |
| 139 browser()->host_desktop_type())); | 139 browser()->host_desktop_type())); |
| 140 ASSERT_EQ(2, browser()->tab_strip_model()->count()); | 140 ASSERT_EQ(2, browser()->tab_strip_model()->count()); |
| 141 |
| 142 // Check that we always create foreground tabs. |
| 143 ASSERT_EQ(1, browser()->tab_strip_model()->active_index()); |
| 141 } | 144 } |
| 142 | 145 |
| 143 ASSERT_EQ(0, GetBlockedContentsCount()); | 146 ASSERT_EQ(0, GetBlockedContentsCount()); |
| 144 } | 147 } |
| 145 | 148 |
| 146 // Navigates to the test indicated by |test_name| using |browser| which is | 149 // Navigates to the test indicated by |test_name| using |browser| which is |
| 147 // expected to try to open a popup. Verifies that the popup was blocked and | 150 // expected to try to open a popup. Verifies that the popup was blocked and |
| 148 // then opens the blocked popup. Once the popup stopped loading, verifies | 151 // then opens the blocked popup. Once the popup stopped loading, verifies |
| 149 // that the title of the page is "PASS" if |check_title| is set. | 152 // that the title of the page is "PASS" if |check_title| is set. |
| 150 // | 153 // |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 popup_blocker_helper->ShowBlockedPopup(iter->first); | 198 popup_blocker_helper->ShowBlockedPopup(iter->first); |
| 196 | 199 |
| 197 observer.Wait(); | 200 observer.Wait(); |
| 198 Browser* new_browser; | 201 Browser* new_browser; |
| 199 if (what_to_expect == ExpectPopup) { | 202 if (what_to_expect == ExpectPopup) { |
| 200 new_browser = browser_observer.WaitForSingleNewBrowser(); | 203 new_browser = browser_observer.WaitForSingleNewBrowser(); |
| 201 web_contents = new_browser->tab_strip_model()->GetActiveWebContents(); | 204 web_contents = new_browser->tab_strip_model()->GetActiveWebContents(); |
| 202 } else { | 205 } else { |
| 203 new_browser = browser; | 206 new_browser = browser; |
| 204 EXPECT_EQ(2, browser->tab_strip_model()->count()); | 207 EXPECT_EQ(2, browser->tab_strip_model()->count()); |
| 208 // Check that we always create foreground tabs. |
| 209 EXPECT_EQ(1, browser->tab_strip_model()->active_index()); |
| 205 web_contents = browser->tab_strip_model()->GetWebContentsAt(1); | 210 web_contents = browser->tab_strip_model()->GetWebContentsAt(1); |
| 206 } | 211 } |
| 207 | 212 |
| 208 if (check_title == CheckTitle) { | 213 if (check_title == CheckTitle) { |
| 209 // Check that the check passed. | 214 // Check that the check passed. |
| 210 base::string16 expected_title(base::ASCIIToUTF16("PASS")); | 215 base::string16 expected_title(base::ASCIIToUTF16("PASS")); |
| 211 content::TitleWatcher title_watcher(web_contents, expected_title); | 216 content::TitleWatcher title_watcher(web_contents, expected_title); |
| 212 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 217 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 213 } | 218 } |
| 214 | 219 |
| 215 return web_contents; | 220 return web_contents; |
| 216 } | 221 } |
| 217 | 222 |
| 218 private: | 223 private: |
| 219 DISALLOW_COPY_AND_ASSIGN(PopupBlockerBrowserTest); | 224 DISALLOW_COPY_AND_ASSIGN(PopupBlockerBrowserTest); |
| 220 }; | 225 }; |
| 221 | 226 |
| 222 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, | 227 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, |
| 223 BlockWebContentsCreation) { | 228 BlockWebContentsCreation) { |
| 224 #if defined(OS_WIN) && defined(USE_ASH) | 229 #if defined(OS_WIN) && defined(USE_ASH) |
| 225 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | 230 // Disable this test in Metro+Ash for now (http://crbug.com/262796). |
| 226 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) | 231 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) |
| 227 return; | 232 return; |
| 228 #endif | 233 #endif |
| 229 | 234 |
| 230 RunCheckTest( | 235 RunCheckTest( |
| 231 browser(), | 236 browser(), |
| 232 "/popup_blocker/popup-blocked-to-post-blank.html", | 237 "/popup_blocker/popup-blocked-to-post-blank.html", |
| 233 ExpectPopup, | 238 ExpectTab, |
| 234 DontCheckTitle); | 239 DontCheckTitle); |
| 235 } | 240 } |
| 236 | 241 |
| 237 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, | 242 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, |
| 238 BlockWebContentsCreationIncognito) { | 243 BlockWebContentsCreationIncognito) { |
| 239 #if defined(OS_WIN) && defined(USE_ASH) | 244 #if defined(OS_WIN) && defined(USE_ASH) |
| 240 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | 245 // Disable this test in Metro+Ash for now (http://crbug.com/262796). |
| 241 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) | 246 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) |
| 242 return; | 247 return; |
| 243 #endif | 248 #endif |
| 244 | 249 |
| 245 RunCheckTest( | 250 RunCheckTest( |
| 246 CreateIncognitoBrowser(), | 251 CreateIncognitoBrowser(), |
| 247 "/popup_blocker/popup-blocked-to-post-blank.html", | 252 "/popup_blocker/popup-blocked-to-post-blank.html", |
| 248 ExpectPopup, | 253 ExpectTab, |
| 249 DontCheckTitle); | 254 DontCheckTitle); |
| 250 } | 255 } |
| 251 | 256 |
| 252 // Temporary. http://crbug.com/431335 | |
| 253 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, | 257 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, |
| 254 DISABLED_PopupBlockedFakeClickOnAnchor) { | 258 PopupBlockedFakeClickOnAnchor) { |
| 255 #if defined(OS_WIN) && defined(USE_ASH) | 259 #if defined(OS_WIN) && defined(USE_ASH) |
| 256 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | 260 // Disable this test in Metro+Ash for now (http://crbug.com/262796). |
| 257 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) | 261 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) |
| 258 return; | 262 return; |
| 259 #endif | 263 #endif |
| 260 | 264 |
| 261 RunCheckTest( | 265 RunCheckTest( |
| 262 browser(), | 266 browser(), |
| 263 "/popup_blocker/popup-fake-click-on-anchor.html", | 267 "/popup_blocker/popup-fake-click-on-anchor.html", |
| 264 ExpectTab, | 268 ExpectTab, |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 model->CurrentMatch(NULL).contents); | 383 model->CurrentMatch(NULL).contents); |
| 380 } | 384 } |
| 381 | 385 |
| 382 // This test fails on linux AURA with this change | 386 // This test fails on linux AURA with this change |
| 383 // https://codereview.chromium.org/23903056 | 387 // https://codereview.chromium.org/23903056 |
| 384 // BUG=https://code.google.com/p/chromium/issues/detail?id=295299 | 388 // BUG=https://code.google.com/p/chromium/issues/detail?id=295299 |
| 385 // TODO(ananta). Debug and fix this test. | 389 // TODO(ananta). Debug and fix this test. |
| 386 #if defined(USE_AURA) && defined(OS_LINUX) | 390 #if defined(USE_AURA) && defined(OS_LINUX) |
| 387 #define MAYBE_WindowFeatures DISABLED_WindowFeatures | 391 #define MAYBE_WindowFeatures DISABLED_WindowFeatures |
| 388 #else | 392 #else |
| 389 #define MAYBE_WindowFeatures WindowFeatures | 393 // TODO(jochen): Temporarily disabled, renable again after next blink roll. |
| 394 #define MAYBE_WindowFeatures DISABLED_WindowFeatures |
| 390 #endif | 395 #endif |
| 391 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, MAYBE_WindowFeatures) { | 396 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, MAYBE_WindowFeatures) { |
| 392 WebContents* popup = | 397 WebContents* popup = |
| 393 RunCheckTest(browser(), | 398 RunCheckTest(browser(), |
| 394 "/popup_blocker/popup-window-open.html", | 399 "/popup_blocker/popup-window-open.html", |
| 395 ExpectPopup, | 400 ExpectPopup, |
| 396 DontCheckTitle); | 401 DontCheckTitle); |
| 397 | 402 |
| 398 // Check that the new popup has (roughly) the requested size. | 403 // Check that the new popup has (roughly) the requested size. |
| 399 gfx::Size window_size = popup->GetContainerBounds().size(); | 404 gfx::Size window_size = popup->GetContainerBounds().size(); |
| 400 EXPECT_TRUE(349 <= window_size.width() && window_size.width() <= 351); | 405 EXPECT_TRUE(349 <= window_size.width() && window_size.width() <= 351); |
| 401 EXPECT_TRUE(249 <= window_size.height() && window_size.height() <= 251); | 406 EXPECT_TRUE(249 <= window_size.height() && window_size.height() <= 251); |
| 402 } | 407 } |
| 403 | 408 |
| 404 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, CorrectReferrer) { | 409 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, CorrectReferrer) { |
| 405 RunCheckTest(browser(), | 410 RunCheckTest(browser(), |
| 406 "/popup_blocker/popup-referrer.html", | 411 "/popup_blocker/popup-referrer.html", |
| 407 ExpectPopup, | 412 ExpectTab, |
| 408 CheckTitle); | 413 CheckTitle); |
| 409 } | 414 } |
| 410 | 415 |
| 411 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, WindowFeaturesBarProps) { | 416 // TODO(jochen): Temporarily disabled, renable again after next blink roll. |
| 417 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, |
| 418 DISABLED_WindowFeaturesBarProps) { |
| 412 RunCheckTest(browser(), | 419 RunCheckTest(browser(), |
| 413 "/popup_blocker/popup-windowfeatures.html", | 420 "/popup_blocker/popup-windowfeatures.html", |
| 414 ExpectPopup, | 421 ExpectTab, |
| 415 CheckTitle); | 422 CheckTitle); |
| 416 } | 423 } |
| 417 | 424 |
| 418 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, SessionStorage) { | 425 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, SessionStorage) { |
| 419 RunCheckTest(browser(), | 426 RunCheckTest(browser(), |
| 420 "/popup_blocker/popup-sessionstorage.html", | 427 "/popup_blocker/popup-sessionstorage.html", |
| 421 ExpectPopup, | 428 ExpectTab, |
| 422 CheckTitle); | 429 CheckTitle); |
| 423 } | 430 } |
| 424 | 431 |
| 425 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, Opener) { | 432 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, Opener) { |
| 426 RunCheckTest(browser(), | 433 RunCheckTest(browser(), |
| 427 "/popup_blocker/popup-opener.html", | 434 "/popup_blocker/popup-opener.html", |
| 428 ExpectPopup, | 435 ExpectTab, |
| 429 CheckTitle); | 436 CheckTitle); |
| 430 } | 437 } |
| 431 | 438 |
| 432 // Tests that the popup can still close itself after navigating. This tests that | 439 // Tests that the popup can still close itself after navigating. This tests that |
| 433 // the openedByDOM bit is preserved across blocked popups. | 440 // the openedByDOM bit is preserved across blocked popups. |
| 434 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, ClosableAfterNavigation) { | 441 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, ClosableAfterNavigation) { |
| 435 // Open a popup. | 442 // Open a popup. |
| 436 WebContents* popup = | 443 WebContents* popup = |
| 437 RunCheckTest(browser(), | 444 RunCheckTest(browser(), |
| 438 "/popup_blocker/popup-opener.html", | 445 "/popup_blocker/popup-opener.html", |
| 439 ExpectPopup, | 446 ExpectTab, |
| 440 CheckTitle); | 447 CheckTitle); |
| 441 | 448 |
| 442 // Navigate it elsewhere. | 449 // Navigate it elsewhere. |
| 443 content::TestNavigationObserver nav_observer(popup); | 450 content::TestNavigationObserver nav_observer(popup); |
| 444 popup->GetMainFrame()->ExecuteJavaScript( | 451 popup->GetMainFrame()->ExecuteJavaScript( |
| 445 base::UTF8ToUTF16("location.href = '/empty.html'")); | 452 base::UTF8ToUTF16("location.href = '/empty.html'")); |
| 446 nav_observer.Wait(); | 453 nav_observer.Wait(); |
| 447 | 454 |
| 448 // Have it close itself. | 455 // Have it close itself. |
| 449 CloseObserver close_observer(popup); | 456 CloseObserver close_observer(popup); |
| 450 popup->GetMainFrame()->ExecuteJavaScript( | 457 popup->GetMainFrame()->ExecuteJavaScript( |
| 451 base::UTF8ToUTF16("window.close()")); | 458 base::UTF8ToUTF16("window.close()")); |
| 452 close_observer.Wait(); | 459 close_observer.Wait(); |
| 453 } | 460 } |
| 454 | 461 |
| 455 // Temporary. http://crbug.com/431335 | 462 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, OpenerSuppressed) { |
| 456 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, DISABLED_OpenerSuppressed) { | |
| 457 RunCheckTest(browser(), | 463 RunCheckTest(browser(), |
| 458 "/popup_blocker/popup-openersuppressed.html", | 464 "/popup_blocker/popup-openersuppressed.html", |
| 459 ExpectTab, | 465 ExpectTab, |
| 460 CheckTitle); | 466 CheckTitle); |
| 461 } | 467 } |
| 462 | 468 |
| 463 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, ShiftClick) { | 469 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, ShiftClick) { |
| 464 RunCheckTest( | 470 RunCheckTest( |
| 465 browser(), | 471 browser(), |
| 466 "/popup_blocker/popup-fake-click-on-anchor3.html", | 472 "/popup_blocker/popup-fake-click-on-anchor3.html", |
| 467 ExpectPopup, | 473 ExpectPopup, |
| 468 CheckTitle); | 474 CheckTitle); |
| 469 } | 475 } |
| 470 | 476 |
| 471 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, WebUI) { | 477 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, WebUI) { |
| 472 WebContents* popup = | 478 WebContents* popup = |
| 473 RunCheckTest(browser(), | 479 RunCheckTest(browser(), |
| 474 "/popup_blocker/popup-webui.html", | 480 "/popup_blocker/popup-webui.html", |
| 475 ExpectPopup, | 481 ExpectTab, |
| 476 DontCheckTitle); | 482 DontCheckTitle); |
| 477 | 483 |
| 478 // Check that the new popup displays about:blank. | 484 // Check that the new popup displays about:blank. |
| 479 EXPECT_EQ(GURL(url::kAboutBlankURL), popup->GetURL()); | 485 EXPECT_EQ(GURL(url::kAboutBlankURL), popup->GetURL()); |
| 480 } | 486 } |
| 481 | 487 |
| 482 // Verify that the renderer can't DOS the browser by creating arbitrarily many | 488 // Verify that the renderer can't DOS the browser by creating arbitrarily many |
| 483 // popups. | 489 // popups. |
| 484 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, DenialOfService) { | 490 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, DenialOfService) { |
| 485 GURL url(embedded_test_server()->GetURL("/popup_blocker/popup-dos.html")); | 491 GURL url(embedded_test_server()->GetURL("/popup_blocker/popup-dos.html")); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 503 | 509 |
| 504 ASSERT_EQ(1u, chrome::GetBrowserCount(browser()->profile(), | 510 ASSERT_EQ(1u, chrome::GetBrowserCount(browser()->profile(), |
| 505 browser()->host_desktop_type())); | 511 browser()->host_desktop_type())); |
| 506 ASSERT_EQ(1, browser()->tab_strip_model()->count()); | 512 ASSERT_EQ(1, browser()->tab_strip_model()->count()); |
| 507 | 513 |
| 508 // The popup from the unload event handler should not show up for about:blank. | 514 // The popup from the unload event handler should not show up for about:blank. |
| 509 ASSERT_EQ(0, GetBlockedContentsCount()); | 515 ASSERT_EQ(0, GetBlockedContentsCount()); |
| 510 } | 516 } |
| 511 | 517 |
| 512 } // namespace | 518 } // namespace |
| OLD | NEW |