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

Side by Side Diff: chrome/browser/ui/browser_browsertest.cc

Issue 7740028: Use the request's URL rather than the document's when deciding to swap. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 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 (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 <string> 5 #include <string>
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/file_path.h" 8 #include "base/file_path.h"
9 #include "base/sys_info.h" 9 #include "base/sys_info.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 ASCIIToUTF16("w.close(); alert('bar');")); 332 ASCIIToUTF16("w.close(); alert('bar');"));
333 AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); 333 AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog();
334 alert->native_dialog()->AcceptAppModalDialog(); 334 alert->native_dialog()->AcceptAppModalDialog();
335 335
336 alert = ui_test_utils::WaitForAppModalDialog(); 336 alert = ui_test_utils::WaitForAppModalDialog();
337 EXPECT_FALSE(static_cast<JavaScriptAppModalDialog*>(alert)-> 337 EXPECT_FALSE(static_cast<JavaScriptAppModalDialog*>(alert)->
338 is_before_unload_dialog()); 338 is_before_unload_dialog());
339 alert->native_dialog()->AcceptAppModalDialog(); 339 alert->native_dialog()->AcceptAppModalDialog();
340 } 340 }
341 341
342 // Test that scripts can fork a new renderer process for a cross-site popup,
343 // based on http://www.google.com/chrome/intl/en/webmasters-faq.html#newtab.
344 // The script must open a new tab, set its window.opener to null, and navigate
345 // it to a cross-site URL. It should also work for meta-refreshes.
346 // See http://crbug.com/93517.
347 IN_PROC_BROWSER_TEST_F(BrowserTest, NullOpenerRedirectForksProcess) {
348 CommandLine::ForCurrentProcess()->AppendSwitch(
349 switches::kDisablePopupBlocking);
350
351 // Create http and https servers for a cross-site transition.
352 ASSERT_TRUE(test_server()->Start());
353 net::TestServer https_test_server(net::TestServer::TYPE_HTTPS,
354 FilePath(kDocRoot));
355 ASSERT_TRUE(https_test_server.Start());
356 GURL http_url(test_server()->GetURL("files/title1.html"));
357 GURL https_url(https_test_server.GetURL(""));
358
359 // Start with an http URL.
360 ui_test_utils::NavigateToURL(browser(), http_url);
361 TabContents* oldtab = browser()->GetSelectedTabContents();
362 RenderProcessHost* process = oldtab->render_view_host()->process();
363
364 // Now open a tab to a blank page, set its opener to null, and redirect it
365 // cross-site.
366 std::string redirect_popup = "w=window.open();";
367 redirect_popup += "w.opener=null;";
368 redirect_popup += "w.document.location=\"";
369 redirect_popup += https_url.spec();
370 redirect_popup += "\";";
371 oldtab->render_view_host()->
372 ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(redirect_popup));
373
374 // Wait for popup window to appear and finish navigating.
375 if (browser()->tab_count() < 2)
376 ui_test_utils::WaitForNewTab(browser());
Paweł Hajdan Jr. 2011/08/25 18:34:56 This is suspicious. Could you use a windowed obser
Charlie Reis 2011/08/25 18:44:45 Sure. I haven't seen windowed observers before--
Charlie Reis 2011/08/25 22:07:31 Done.
Charlie Reis 2011/08/25 22:18:48 Got a merge conflict in ui_test_utils.h. Looks li
377 ASSERT_EQ(2, browser()->tab_count());
378 TabContents* newtab = browser()->GetSelectedTabContents();
379 EXPECT_TRUE(newtab);
380 EXPECT_NE(oldtab, newtab);
381 if (!newtab->controller().GetLastCommittedEntry() ||
382 newtab->controller().GetLastCommittedEntry()->url() != https_url)
383 ui_test_utils::WaitForNavigation(&newtab->controller());
Paweł Hajdan Jr. 2011/08/25 18:34:56 Don't use it. It's inherently flaky. Windowed obse
Charlie Reis 2011/08/25 22:07:31 Done.
384
385 // Popup window should not be in the opener's process.
386 RenderProcessHost* popup_process = newtab->render_view_host()->process();
387 EXPECT_NE(process, popup_process);
388
389 // Now open a tab to a blank page, set its opener to null, and use a
390 // meta-refresh to navigate it instead.
391 std::string refresh_popup = "w=window.open();";
392 refresh_popup += "w.opener=null;";
393 refresh_popup += "w.document.write(";
394 refresh_popup += "'<META HTTP-EQUIV=\"refresh\" content=\"0; url=";
395 refresh_popup += https_url.spec();
396 refresh_popup += "\">');w.document.close();";
397 oldtab->render_view_host()->
398 ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(refresh_popup));
399
400 // Wait for popup window to appear and finish navigating.
401 if (browser()->tab_count() < 3)
402 ui_test_utils::WaitForNewTab(browser());
403 ASSERT_EQ(3, browser()->tab_count());
404 TabContents* newtab2 = browser()->GetSelectedTabContents();
405 EXPECT_TRUE(newtab2);
406 EXPECT_NE(oldtab, newtab2);
407 if (!newtab2->controller().GetLastCommittedEntry() ||
408 newtab2->controller().GetLastCommittedEntry()->url() != https_url)
409 ui_test_utils::WaitForNavigation(&newtab2->controller());
410
411 // This popup window should also not be in the opener's process.
412 RenderProcessHost* popup_process2 = newtab2->render_view_host()->process();
413 EXPECT_NE(process, popup_process2);
414 }
415
416 // Tests that other popup navigations that do not follow the steps at
417 // http://www.google.com/chrome/intl/en/webmasters-faq.html#newtab will not
418 // fork a new renderer process.
419 IN_PROC_BROWSER_TEST_F(BrowserTest, OtherRedirectsDontForkProcess) {
420 CommandLine::ForCurrentProcess()->AppendSwitch(
421 switches::kDisablePopupBlocking);
422
423 // Create http and https servers for a cross-site transition.
424 ASSERT_TRUE(test_server()->Start());
425 net::TestServer https_test_server(net::TestServer::TYPE_HTTPS,
426 FilePath(kDocRoot));
427 ASSERT_TRUE(https_test_server.Start());
428 GURL http_url(test_server()->GetURL("files/title1.html"));
429 GURL https_url(https_test_server.GetURL(""));
430
431 // Start with an http URL.
432 ui_test_utils::NavigateToURL(browser(), http_url);
433 TabContents* oldtab = browser()->GetSelectedTabContents();
434 RenderProcessHost* process = oldtab->render_view_host()->process();
435
436 // Now open a tab to a blank page, set its opener to null, and redirect it
437 // cross-site.
438 std::string dont_fork_popup = "w=window.open();";
439 dont_fork_popup += "w.document.location=\"";
440 dont_fork_popup += https_url.spec();
441 dont_fork_popup += "\";";
442 oldtab->render_view_host()->
443 ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(dont_fork_popup));
444
445 // Wait for popup window to appear and finish navigating.
446 if (browser()->tab_count() < 2)
447 ui_test_utils::WaitForNewTab(browser());
448 ASSERT_EQ(2, browser()->tab_count());
449 TabContents* newtab = browser()->GetSelectedTabContents();
450 EXPECT_TRUE(newtab);
451 EXPECT_NE(oldtab, newtab);
452 if (!newtab->controller().GetLastCommittedEntry() ||
453 newtab->controller().GetLastCommittedEntry()->url() != https_url)
454 ui_test_utils::WaitForNavigation(&newtab->controller());
455
456 // Popup window should still be in the opener's process.
457 RenderProcessHost* popup_process = newtab->render_view_host()->process();
458 EXPECT_EQ(process, popup_process);
459
460 // Same thing if the current tab tries to navigate itself.
461 std::string navigate_str = "document.location=\"";
462 navigate_str += https_url.spec();
463 navigate_str += "\";";
464 oldtab->render_view_host()->
465 ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(navigate_str));
466 if (!oldtab->controller().GetLastCommittedEntry() ||
467 oldtab->controller().GetLastCommittedEntry()->url() != https_url)
468 ui_test_utils::WaitForNavigation(&oldtab->controller());
469
470 // Original window should still be in the original process.
471 RenderProcessHost* new_process = newtab->render_view_host()->process();
472 EXPECT_EQ(process, new_process);
473 }
474
342 // Test that get_process_idle_time() returns reasonable values when compared 475 // Test that get_process_idle_time() returns reasonable values when compared
343 // with time deltas measured locally. 476 // with time deltas measured locally.
344 IN_PROC_BROWSER_TEST_F(BrowserTest, RenderIdleTime) { 477 IN_PROC_BROWSER_TEST_F(BrowserTest, RenderIdleTime) {
345 base::TimeTicks start = base::TimeTicks::Now(); 478 base::TimeTicks start = base::TimeTicks::Now();
346 ui_test_utils::NavigateToURL(browser(), 479 ui_test_utils::NavigateToURL(browser(),
347 ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory), 480 ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory),
348 FilePath(kTitle1File))); 481 FilePath(kTitle1File)));
349 RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); 482 RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator());
350 for (; !it.IsAtEnd(); it.Advance()) { 483 for (; !it.IsAtEnd(); it.Advance()) {
351 base::TimeDelta renderer_td = 484 base::TimeDelta renderer_td =
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 995
863 // The normal browser should now have four. 996 // The normal browser should now have four.
864 EXPECT_EQ(4, browser()->tab_count()); 997 EXPECT_EQ(4, browser()->tab_count());
865 998
866 // Close the additional browsers. 999 // Close the additional browsers.
867 popup_browser->CloseAllTabs(); 1000 popup_browser->CloseAllTabs();
868 app_browser->CloseAllTabs(); 1001 app_browser->CloseAllTabs();
869 app_popup_browser->CloseAllTabs(); 1002 app_popup_browser->CloseAllTabs();
870 } 1003 }
871 #endif 1004 #endif
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/tests/browser_uitest.cc » ('j') | chrome/browser/ui/tests/browser_uitest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698