Chromium Code Reviews| 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 <set> | 5 #include <set> |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| (...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 404 EXPECT_TRUE(ExecuteScriptAndExtractBool( | 404 EXPECT_TRUE(ExecuteScriptAndExtractBool( |
| 405 shell()->web_contents(), | 405 shell()->web_contents(), |
| 406 "window.domAutomationController.send(testCloseWindow());", | 406 "window.domAutomationController.send(testCloseWindow());", |
| 407 &success)); | 407 &success)); |
| 408 EXPECT_TRUE(success); | 408 EXPECT_TRUE(success); |
| 409 close_watcher.Wait(); | 409 close_watcher.Wait(); |
| 410 } | 410 } |
| 411 | 411 |
| 412 // Test that setting the opener to null in a window affects cross-process | 412 // Test that setting the opener to null in a window affects cross-process |
| 413 // navigations, including those to existing entries. http://crbug.com/156669. | 413 // navigations, including those to existing entries. http://crbug.com/156669. |
| 414 // Flaky on android: http://crbug.com/397185 | 414 // This test crashes under ThreadSanitizer, http://crbug.com/356758. |
| 415 // Flaky on windows and mac: http://crbug.com/291249 | 415 #if defined(THREAD_SANITIZER) |
|
Charlie Reis
2014/08/22 19:41:23
I don't think I've fixed the ThreadSanitizer issue
| |
| 416 // This test also crashes under ThreadSanitizer, http://crbug.com/356758. | |
| 417 #if defined(OS_ANDROID) || defined(OS_WIN) || defined(THREAD_SANITIZER) || defin ed(OS_MACOSX) | |
| 418 #define MAYBE_DisownOpener DISABLED_DisownOpener | 416 #define MAYBE_DisownOpener DISABLED_DisownOpener |
| 419 #else | 417 #else |
| 420 #define MAYBE_DisownOpener DisownOpener | 418 #define MAYBE_DisownOpener DisownOpener |
| 421 #endif | 419 #endif |
| 422 IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, MAYBE_DisownOpener) { | 420 IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, MAYBE_DisownOpener) { |
| 423 StartServer(); | 421 StartServer(); |
| 424 | 422 |
| 425 // Load a page with links that open in a new window. | 423 // Load a page with links that open in a new window. |
| 426 std::string replacement_path; | 424 std::string replacement_path; |
| 427 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement( | 425 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement( |
| 428 "files/click-noreferrer-links.html", | 426 "files/click-noreferrer-links.html", |
| 429 foo_host_port_, | 427 foo_host_port_, |
| 430 &replacement_path)); | 428 &replacement_path)); |
| 431 NavigateToURL(shell(), test_server()->GetURL(replacement_path)); | 429 NavigateToURL(shell(), test_server()->GetURL(replacement_path)); |
| 432 | 430 |
| 433 // Get the original SiteInstance for later comparison. | 431 // Get the original SiteInstance for later comparison. |
| 434 scoped_refptr<SiteInstance> orig_site_instance( | 432 scoped_refptr<SiteInstance> orig_site_instance( |
| 435 shell()->web_contents()->GetSiteInstance()); | 433 shell()->web_contents()->GetSiteInstance()); |
| 436 EXPECT_TRUE(orig_site_instance.get() != NULL); | 434 EXPECT_TRUE(orig_site_instance.get() != NULL); |
| 437 | 435 |
| 438 // Test clicking a target=_blank link. | 436 // Test clicking a target=_blank link. |
| 439 ShellAddedObserver new_shell_observer; | 437 ShellAddedObserver new_shell_observer; |
| 440 bool success = false; | 438 bool success = false; |
| 441 EXPECT_TRUE(ExecuteScriptAndExtractBool( | 439 EXPECT_TRUE(ExecuteScriptAndExtractBool( |
| 442 shell()->web_contents(), | 440 shell()->web_contents(), |
| 443 "window.domAutomationController.send(clickSameSiteTargetBlankLink());", | 441 "window.domAutomationController.send(clickSameSiteTargetBlankLink());", |
| 444 &success)); | 442 &success)); |
| 445 EXPECT_TRUE(success); | 443 EXPECT_TRUE(success); |
| 446 Shell* new_shell = new_shell_observer.GetShell(); | 444 Shell* new_shell = new_shell_observer.GetShell(); |
| 445 EXPECT_TRUE(new_shell->web_contents()->HasOpener()); | |
| 447 | 446 |
| 448 // Wait for the navigation in the new tab to finish, if it hasn't. | 447 // Wait for the navigation in the new tab to finish, if it hasn't. |
| 449 WaitForLoadStop(new_shell->web_contents()); | 448 WaitForLoadStop(new_shell->web_contents()); |
| 450 EXPECT_EQ("/files/title2.html", | 449 EXPECT_EQ("/files/title2.html", |
| 451 new_shell->web_contents()->GetLastCommittedURL().path()); | 450 new_shell->web_contents()->GetLastCommittedURL().path()); |
| 452 | 451 |
| 453 // Should have the same SiteInstance. | 452 // Should have the same SiteInstance. |
| 454 scoped_refptr<SiteInstance> blank_site_instance( | 453 scoped_refptr<SiteInstance> blank_site_instance( |
| 455 new_shell->web_contents()->GetSiteInstance()); | 454 new_shell->web_contents()->GetSiteInstance()); |
| 456 EXPECT_EQ(orig_site_instance, blank_site_instance); | 455 EXPECT_EQ(orig_site_instance, blank_site_instance); |
| 457 | 456 |
| 458 // Now navigate the new tab to a different site. | 457 // Now navigate the new tab to a different site. |
| 459 NavigateToURL(new_shell, GetCrossSiteURL("files/title1.html")); | 458 NavigateToURL(new_shell, GetCrossSiteURL("files/title1.html")); |
| 460 scoped_refptr<SiteInstance> new_site_instance( | 459 scoped_refptr<SiteInstance> new_site_instance( |
| 461 new_shell->web_contents()->GetSiteInstance()); | 460 new_shell->web_contents()->GetSiteInstance()); |
| 462 EXPECT_NE(orig_site_instance, new_site_instance); | 461 EXPECT_NE(orig_site_instance, new_site_instance); |
| 462 EXPECT_TRUE(new_shell->web_contents()->HasOpener()); | |
| 463 | 463 |
| 464 // Now disown the opener. | 464 // Now disown the opener. |
| 465 EXPECT_TRUE(ExecuteScript(new_shell->web_contents(), | 465 EXPECT_TRUE(ExecuteScript(new_shell->web_contents(), |
| 466 "window.opener = null;")); | 466 "window.opener = null;")); |
| 467 EXPECT_FALSE(new_shell->web_contents()->HasOpener()); | |
|
Charlie Reis
2014/08/22 19:41:23
I'm still not sure why the original test was faili
nasko
2014/08/22 20:24:34
ExecuteScript waits until the script is executed b
| |
| 467 | 468 |
| 468 // Go back and ensure the opener is still null. | 469 // Go back and ensure the opener is still null. |
| 469 { | 470 { |
| 470 TestNavigationObserver back_nav_load_observer(new_shell->web_contents()); | 471 TestNavigationObserver back_nav_load_observer(new_shell->web_contents()); |
| 471 new_shell->web_contents()->GetController().GoBack(); | 472 new_shell->web_contents()->GetController().GoBack(); |
| 472 back_nav_load_observer.Wait(); | 473 back_nav_load_observer.Wait(); |
| 473 } | 474 } |
| 474 success = false; | 475 success = false; |
| 475 EXPECT_TRUE(ExecuteScriptAndExtractBool( | 476 EXPECT_TRUE(ExecuteScriptAndExtractBool( |
| 476 new_shell->web_contents(), | 477 new_shell->web_contents(), |
| 477 "window.domAutomationController.send(window.opener == null);", | 478 "window.domAutomationController.send(window.opener == null);", |
| 478 &success)); | 479 &success)); |
| 479 EXPECT_TRUE(success); | 480 EXPECT_TRUE(success); |
| 481 EXPECT_FALSE(new_shell->web_contents()->HasOpener()); | |
| 480 | 482 |
| 481 // Now navigate forward again (creating a new process) and check opener. | 483 // Now navigate forward again (creating a new process) and check opener. |
| 482 NavigateToURL(new_shell, GetCrossSiteURL("files/title1.html")); | 484 NavigateToURL(new_shell, GetCrossSiteURL("files/title1.html")); |
| 483 success = false; | 485 success = false; |
| 484 EXPECT_TRUE(ExecuteScriptAndExtractBool( | 486 EXPECT_TRUE(ExecuteScriptAndExtractBool( |
| 485 new_shell->web_contents(), | 487 new_shell->web_contents(), |
| 486 "window.domAutomationController.send(window.opener == null);", | 488 "window.domAutomationController.send(window.opener == null);", |
| 487 &success)); | 489 &success)); |
| 488 EXPECT_TRUE(success); | 490 EXPECT_TRUE(success); |
| 491 EXPECT_FALSE(new_shell->web_contents()->HasOpener()); | |
| 489 } | 492 } |
| 490 | 493 |
| 491 // Test that subframes can disown their openers. http://crbug.com/225528. | 494 // Test that subframes can disown their openers. http://crbug.com/225528. |
| 492 IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, DisownSubframeOpener) { | 495 IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, DisownSubframeOpener) { |
| 493 const GURL frame_url("data:text/html,<iframe name=\"foo\"></iframe>"); | 496 const GURL frame_url("data:text/html,<iframe name=\"foo\"></iframe>"); |
| 494 NavigateToURL(shell(), frame_url); | 497 NavigateToURL(shell(), frame_url); |
| 495 | 498 |
| 496 // Give the frame an opener using window.open. | 499 // Give the frame an opener using window.open. |
| 497 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), | 500 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), |
| 498 "window.open('about:blank','foo');")); | 501 "window.open('about:blank','foo');")); |
| (...skipping 958 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1457 // Navigate to url1 and check bindings. | 1460 // Navigate to url1 and check bindings. |
| 1458 NavigateToURL(new_shell, url1); | 1461 NavigateToURL(new_shell, url1); |
| 1459 // The navigation should have used the first SiteInstance, otherwise | 1462 // The navigation should have used the first SiteInstance, otherwise |
| 1460 // |initial_rvh| did not have a chance to be used. | 1463 // |initial_rvh| did not have a chance to be used. |
| 1461 EXPECT_EQ(new_web_contents->GetSiteInstance(), site_instance1); | 1464 EXPECT_EQ(new_web_contents->GetSiteInstance(), site_instance1); |
| 1462 EXPECT_EQ(BINDINGS_POLICY_WEB_UI, | 1465 EXPECT_EQ(BINDINGS_POLICY_WEB_UI, |
| 1463 new_web_contents->GetRenderViewHost()->GetEnabledBindings()); | 1466 new_web_contents->GetRenderViewHost()->GetEnabledBindings()); |
| 1464 } | 1467 } |
| 1465 | 1468 |
| 1466 } // namespace content | 1469 } // namespace content |
| OLD | NEW |