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

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

Powered by Google App Engine
This is Rietveld 408576698