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

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: Remove WaitFor calls. 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
« no previous file with comments | « no previous file | chrome/browser/ui/tests/browser_uitest.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 (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
372 ui_test_utils::WindowedNotificationObserver popup_observer(
373 content::NOTIFICATION_TAB_ADDED,
374 NotificationService::AllSources());
375 ui_test_utils::WindowedNotificationObserver nav_observer(
376 content::NOTIFICATION_NAV_ENTRY_COMMITTED,
377 NotificationService::AllSources());
378 oldtab->render_view_host()->
379 ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(redirect_popup));
380
381 // Wait for popup window to appear and finish navigating.
382 popup_observer.Wait();
383 ASSERT_EQ(2, browser()->tab_count());
384 TabContents* newtab = browser()->GetSelectedTabContents();
385 EXPECT_TRUE(newtab);
386 EXPECT_NE(oldtab, newtab);
387 nav_observer.Wait();
388 EXPECT_EQ(https_url.spec(),
Paweł Hajdan Jr. 2011/08/25 23:36:30 Do you remember earlier crash you encountered here
389 newtab->controller().GetLastCommittedEntry()->url().spec());
390
391 // Popup window should not be in the opener's process.
392 RenderProcessHost* popup_process = newtab->render_view_host()->process();
393 EXPECT_NE(process, popup_process);
394
395 // Now open a tab to a blank page, set its opener to null, and use a
396 // meta-refresh to navigate it instead.
397 std::string refresh_popup = "w=window.open();";
398 refresh_popup += "w.opener=null;";
399 refresh_popup += "w.document.write(";
400 refresh_popup += "'<META HTTP-EQUIV=\"refresh\" content=\"0; url=";
401 refresh_popup += https_url.spec();
402 refresh_popup += "\">');w.document.close();";
403
404 ui_test_utils::WindowedNotificationObserver popup_observer2(
405 content::NOTIFICATION_TAB_ADDED,
406 NotificationService::AllSources());
407 ui_test_utils::WindowedNotificationObserver nav_observer2(
408 content::NOTIFICATION_LOAD_STOP,
409 NotificationService::AllSources());
410 oldtab->render_view_host()->
411 ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(refresh_popup));
412
413 // Wait for popup window to appear and finish navigating.
414 popup_observer2.Wait();
415 ASSERT_EQ(3, browser()->tab_count());
416 TabContents* newtab2 = browser()->GetSelectedTabContents();
417 EXPECT_TRUE(newtab2);
418 EXPECT_NE(oldtab, newtab2);
419 nav_observer2.Wait();
420 EXPECT_EQ(https_url.spec(),
421 newtab2->controller().GetLastCommittedEntry()->url().spec());
422
423 // This popup window should also not be in the opener's process.
424 RenderProcessHost* popup_process2 = newtab2->render_view_host()->process();
425 EXPECT_NE(process, popup_process2);
426 }
427
428 // Tests that other popup navigations that do not follow the steps at
429 // http://www.google.com/chrome/intl/en/webmasters-faq.html#newtab will not
430 // fork a new renderer process.
431 IN_PROC_BROWSER_TEST_F(BrowserTest, OtherRedirectsDontForkProcess) {
432 CommandLine::ForCurrentProcess()->AppendSwitch(
433 switches::kDisablePopupBlocking);
434
435 // Create http and https servers for a cross-site transition.
436 ASSERT_TRUE(test_server()->Start());
437 net::TestServer https_test_server(net::TestServer::TYPE_HTTPS,
438 FilePath(kDocRoot));
439 ASSERT_TRUE(https_test_server.Start());
440 GURL http_url(test_server()->GetURL("files/title1.html"));
441 GURL https_url(https_test_server.GetURL(""));
442
443 // Start with an http URL.
444 ui_test_utils::NavigateToURL(browser(), http_url);
445 TabContents* oldtab = browser()->GetSelectedTabContents();
446 RenderProcessHost* process = oldtab->render_view_host()->process();
447
448 // Now open a tab to a blank page, set its opener to null, and redirect it
449 // cross-site.
450 std::string dont_fork_popup = "w=window.open();";
451 dont_fork_popup += "w.document.location=\"";
452 dont_fork_popup += https_url.spec();
453 dont_fork_popup += "\";";
454
455 ui_test_utils::WindowedNotificationObserver popup_observer(
456 content::NOTIFICATION_TAB_ADDED,
457 NotificationService::AllSources());
458 ui_test_utils::WindowedNotificationObserver nav_observer(
459 content::NOTIFICATION_NAV_ENTRY_COMMITTED,
460 NotificationService::AllSources());
461 oldtab->render_view_host()->
462 ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(dont_fork_popup));
463
464 // Wait for popup window to appear and finish navigating.
465 popup_observer.Wait();
466 ASSERT_EQ(2, browser()->tab_count());
467 TabContents* newtab = browser()->GetSelectedTabContents();
468 EXPECT_TRUE(newtab);
469 EXPECT_NE(oldtab, newtab);
470 nav_observer.Wait();
471 EXPECT_EQ(https_url.spec(),
472 newtab->controller().GetLastCommittedEntry()->url().spec());
473
474 // Popup window should still be in the opener's process.
475 RenderProcessHost* popup_process = newtab->render_view_host()->process();
476 EXPECT_EQ(process, popup_process);
477
478 // Same thing if the current tab tries to navigate itself.
479 std::string navigate_str = "document.location=\"";
480 navigate_str += https_url.spec();
481 navigate_str += "\";";
482
483 ui_test_utils::WindowedNotificationObserver nav_observer2(
484 content::NOTIFICATION_NAV_ENTRY_COMMITTED,
485 NotificationService::AllSources());
486 oldtab->render_view_host()->
487 ExecuteJavascriptInWebFrame(string16(), ASCIIToUTF16(navigate_str));
488 nav_observer2.Wait();
489 EXPECT_EQ(https_url.spec(),
490 oldtab->controller().GetLastCommittedEntry()->url().spec());
491
492 // Original window should still be in the original process.
493 RenderProcessHost* new_process = newtab->render_view_host()->process();
494 EXPECT_EQ(process, new_process);
495 }
496
342 // Test that get_process_idle_time() returns reasonable values when compared 497 // Test that get_process_idle_time() returns reasonable values when compared
343 // with time deltas measured locally. 498 // with time deltas measured locally.
344 IN_PROC_BROWSER_TEST_F(BrowserTest, RenderIdleTime) { 499 IN_PROC_BROWSER_TEST_F(BrowserTest, RenderIdleTime) {
345 base::TimeTicks start = base::TimeTicks::Now(); 500 base::TimeTicks start = base::TimeTicks::Now();
346 ui_test_utils::NavigateToURL(browser(), 501 ui_test_utils::NavigateToURL(browser(),
347 ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory), 502 ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory),
348 FilePath(kTitle1File))); 503 FilePath(kTitle1File)));
349 RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); 504 RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator());
350 for (; !it.IsAtEnd(); it.Advance()) { 505 for (; !it.IsAtEnd(); it.Advance()) {
351 base::TimeDelta renderer_td = 506 base::TimeDelta renderer_td =
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 1047
893 // The normal browser should now have four. 1048 // The normal browser should now have four.
894 EXPECT_EQ(4, browser()->tab_count()); 1049 EXPECT_EQ(4, browser()->tab_count());
895 1050
896 // Close the additional browsers. 1051 // Close the additional browsers.
897 popup_browser->CloseAllTabs(); 1052 popup_browser->CloseAllTabs();
898 app_browser->CloseAllTabs(); 1053 app_browser->CloseAllTabs();
899 app_popup_browser->CloseAllTabs(); 1054 app_popup_browser->CloseAllTabs();
900 } 1055 }
901 #endif 1056 #endif
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/tests/browser_uitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698