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

Side by Side Diff: chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc

Issue 20924002: Try to restore window.opener when opening blocked popups (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/path_service.h" 8 #include "base/path_service.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/autocomplete/autocomplete_match.h" 10 #include "chrome/browser/autocomplete/autocomplete_match.h"
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 224
225 class BetterPopupBlockerBrowserTest : public PopupBlockerBrowserTest { 225 class BetterPopupBlockerBrowserTest : public PopupBlockerBrowserTest {
226 public: 226 public:
227 BetterPopupBlockerBrowserTest() {} 227 BetterPopupBlockerBrowserTest() {}
228 virtual ~BetterPopupBlockerBrowserTest() {} 228 virtual ~BetterPopupBlockerBrowserTest() {}
229 229
230 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 230 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
231 InProcessBrowserTest::SetUpCommandLine(command_line); 231 InProcessBrowserTest::SetUpCommandLine(command_line);
232 } 232 }
233 233
234 // Navigates to the test indicated by |test_name| which is expected to try to
235 // open a popup. Verifies that the popup was blocked and then opens the
236 // blocked popup. Once the popup stopped loading, verifies that the title of
237 // the page is "PASS".
238 //
239 // If |expect_new_browser| is true, the popup is expected to open a new
240 // window, or a background tab if it is false.
241 void RunCheckTest(const base::FilePath& test_name, bool expect_new_browser) {
242 GURL url(ui_test_utils::GetTestUrl(base::FilePath(kTestDir), test_name));
243
244 CountRenderViewHosts counter;
245
246 ui_test_utils::NavigateToURL(browser(), url);
247
248 // If the popup blocker blocked the window.open, there should be only one
249 // tab.
250 EXPECT_EQ(1u, chrome::GetBrowserCount(browser()->profile(),
251 browser()->host_desktop_type()));
252 EXPECT_EQ(1, browser()->tab_strip_model()->count());
253 WebContents* web_contents =
254 browser()->tab_strip_model()->GetActiveWebContents();
255 EXPECT_EQ(url, web_contents->GetURL());
256
257 // And no new RVH created.
258 EXPECT_EQ(0, counter.GetRenderViewHostCreatedCount());
259
260 content::WindowedNotificationObserver observer(
261 chrome::NOTIFICATION_TAB_ADDED,
262 content::NotificationService::AllSources());
263 ui_test_utils::BrowserAddedObserver browser_observer;
264
265 // Launch the blocked popup.
266 PopupBlockerTabHelper* popup_blocker_helper =
267 PopupBlockerTabHelper::FromWebContents(web_contents);
268 EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
269 std::map<int32, GURL> blocked_requests =
270 popup_blocker_helper->GetBlockedPopupRequests();
271 std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
272 popup_blocker_helper->ShowBlockedPopup(iter->first);
273
274 observer.Wait();
275 Browser* new_browser;
276 if (expect_new_browser) {
277 new_browser = browser_observer.WaitForSingleNewBrowser();
278 web_contents = new_browser->tab_strip_model()->GetActiveWebContents();
279 } else {
280 new_browser = browser();
281 EXPECT_EQ(2, browser()->tab_strip_model()->count());
282 web_contents = browser()->tab_strip_model()->GetWebContentsAt(1);
283 }
284
285 // Check that the check passed.
286 base::string16 expected_title(base::ASCIIToUTF16("PASS"));
287 content::TitleWatcher title_watcher(web_contents, expected_title);
288 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
289 }
290
234 private: 291 private:
235 DISALLOW_COPY_AND_ASSIGN(BetterPopupBlockerBrowserTest); 292 DISALLOW_COPY_AND_ASSIGN(BetterPopupBlockerBrowserTest);
236 }; 293 };
237 294
238 IN_PROC_BROWSER_TEST_F(BetterPopupBlockerBrowserTest, 295 IN_PROC_BROWSER_TEST_F(BetterPopupBlockerBrowserTest,
239 BlockWebContentsCreation) { 296 BlockWebContentsCreation) {
240 #if defined(OS_WIN) && defined(USE_ASH) 297 #if defined(OS_WIN) && defined(USE_ASH)
241 // Disable this test in Metro+Ash for now (http://crbug.com/262796). 298 // Disable this test in Metro+Ash for now (http://crbug.com/262796).
242 if (base::win::GetVersion() >= base::win::VERSION_WIN8) 299 if (base::win::GetVersion() >= base::win::VERSION_WIN8)
243 return; 300 return;
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 Browser* new_browser = browser_observer.WaitForSingleNewBrowser(); 422 Browser* new_browser = browser_observer.WaitForSingleNewBrowser();
366 423
367 // Check that the new popup has (roughly) the requested size. 424 // Check that the new popup has (roughly) the requested size.
368 web_contents = new_browser->tab_strip_model()->GetActiveWebContents(); 425 web_contents = new_browser->tab_strip_model()->GetActiveWebContents();
369 gfx::Size window_size = web_contents->GetView()->GetContainerSize(); 426 gfx::Size window_size = web_contents->GetView()->GetContainerSize();
370 EXPECT_TRUE(349 <= window_size.width() && window_size.width() <= 351); 427 EXPECT_TRUE(349 <= window_size.width() && window_size.width() <= 351);
371 EXPECT_TRUE(249 <= window_size.height() && window_size.height() <= 251); 428 EXPECT_TRUE(249 <= window_size.height() && window_size.height() <= 251);
372 } 429 }
373 430
374 IN_PROC_BROWSER_TEST_F(BetterPopupBlockerBrowserTest, CorrectReferrer) { 431 IN_PROC_BROWSER_TEST_F(BetterPopupBlockerBrowserTest, CorrectReferrer) {
375 GURL url(ui_test_utils::GetTestUrl( 432 RunCheckTest(base::FilePath(FILE_PATH_LITERAL("popup-referrer.html")), true);
376 base::FilePath(kTestDir),
377 base::FilePath(FILE_PATH_LITERAL("popup-referrer.html"))));
378
379 CountRenderViewHosts counter;
380
381 ui_test_utils::NavigateToURL(browser(), url);
382
383 // If the popup blocker blocked the blank post, there should be only one tab.
384 EXPECT_EQ(1u, chrome::GetBrowserCount(browser()->profile(),
385 browser()->host_desktop_type()));
386 EXPECT_EQ(1, browser()->tab_strip_model()->count());
387 WebContents* web_contents =
388 browser()->tab_strip_model()->GetActiveWebContents();
389 EXPECT_EQ(url, web_contents->GetURL());
390
391 // And no new RVH created.
392 EXPECT_EQ(0, counter.GetRenderViewHostCreatedCount());
393
394 content::WindowedNotificationObserver observer(
395 chrome::NOTIFICATION_TAB_ADDED,
396 content::NotificationService::AllSources());
397 ui_test_utils::BrowserAddedObserver browser_observer;
398
399 // Launch the blocked popup.
400 PopupBlockerTabHelper* popup_blocker_helper =
401 PopupBlockerTabHelper::FromWebContents(web_contents);
402 EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
403 std::map<int32, GURL> blocked_requests =
404 popup_blocker_helper->GetBlockedPopupRequests();
405 std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
406 popup_blocker_helper->ShowBlockedPopup(iter->first);
407
408 observer.Wait();
409 Browser* new_browser = browser_observer.WaitForSingleNewBrowser();
410
411 // Check that the referrer was correctly set.
412 web_contents = new_browser->tab_strip_model()->GetActiveWebContents();
413 base::string16 expected_title(base::ASCIIToUTF16("PASS"));
414 content::TitleWatcher title_watcher(web_contents, expected_title);
415 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
416 } 433 }
417 434
418 IN_PROC_BROWSER_TEST_F(BetterPopupBlockerBrowserTest, WindowFeaturesBarProps) { 435 IN_PROC_BROWSER_TEST_F(BetterPopupBlockerBrowserTest, WindowFeaturesBarProps) {
419 GURL url(ui_test_utils::GetTestUrl( 436 RunCheckTest(base::FilePath(FILE_PATH_LITERAL("popup-windowfeatures.html")),
420 base::FilePath(kTestDir), 437 true);
421 base::FilePath(FILE_PATH_LITERAL("popup-windowfeatures.html")))); 438 }
422 439
423 CountRenderViewHosts counter; 440 IN_PROC_BROWSER_TEST_F(BetterPopupBlockerBrowserTest, SessionStorage) {
441 RunCheckTest(base::FilePath(FILE_PATH_LITERAL("popup-sessionstorage.html")),
442 true);
443 }
424 444
425 ui_test_utils::NavigateToURL(browser(), url); 445 IN_PROC_BROWSER_TEST_F(BetterPopupBlockerBrowserTest, Opener) {
446 RunCheckTest(base::FilePath(FILE_PATH_LITERAL("popup-opener.html")), true);
447 }
426 448
427 // If the popup blocker blocked the blank post, there should be only one tab. 449 IN_PROC_BROWSER_TEST_F(BetterPopupBlockerBrowserTest, OpenerSuppressed) {
428 EXPECT_EQ(1u, chrome::GetBrowserCount(browser()->profile(), 450 RunCheckTest(
429 browser()->host_desktop_type())); 451 base::FilePath(FILE_PATH_LITERAL("popup-openersuppressed.html")), false);
430 EXPECT_EQ(1, browser()->tab_strip_model()->count());
431 WebContents* web_contents =
432 browser()->tab_strip_model()->GetActiveWebContents();
433 EXPECT_EQ(url, web_contents->GetURL());
434
435 // And no new RVH created.
436 EXPECT_EQ(0, counter.GetRenderViewHostCreatedCount());
437
438 content::WindowedNotificationObserver observer(
439 chrome::NOTIFICATION_TAB_ADDED,
440 content::NotificationService::AllSources());
441 ui_test_utils::BrowserAddedObserver browser_observer;
442
443 // Launch the blocked popup.
444 PopupBlockerTabHelper* popup_blocker_helper =
445 PopupBlockerTabHelper::FromWebContents(web_contents);
446 EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
447 std::map<int32, GURL> blocked_requests =
448 popup_blocker_helper->GetBlockedPopupRequests();
449 std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
450 popup_blocker_helper->ShowBlockedPopup(iter->first);
451
452 observer.Wait();
453 Browser* new_browser = browser_observer.WaitForSingleNewBrowser();
454
455 // Check that the referrer was correctly set.
456 web_contents = new_browser->tab_strip_model()->GetActiveWebContents();
457 base::string16 expected_title(base::ASCIIToUTF16("PASS"));
458 content::TitleWatcher title_watcher(web_contents, expected_title);
459 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
460 } 452 }
461 453
462 } // namespace 454 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698