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/location.h" | 9 #include "base/location.h" |
| 10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 291 static_cast<WebContentsImpl*>(new_shell->web_contents()); | 291 static_cast<WebContentsImpl*>(new_shell->web_contents()); |
| 292 EXPECT_FALSE( | 292 EXPECT_FALSE( |
| 293 web_contents->GetRenderManagerForTesting()->pending_render_view_host()); | 293 web_contents->GetRenderManagerForTesting()->pending_render_view_host()); |
| 294 | 294 |
| 295 // Should have a new SiteInstance. | 295 // Should have a new SiteInstance. |
| 296 scoped_refptr<SiteInstance> noopener_blank_site_instance( | 296 scoped_refptr<SiteInstance> noopener_blank_site_instance( |
| 297 new_shell->web_contents()->GetSiteInstance()); | 297 new_shell->web_contents()->GetSiteInstance()); |
| 298 EXPECT_NE(orig_site_instance, noopener_blank_site_instance); | 298 EXPECT_NE(orig_site_instance, noopener_blank_site_instance); |
| 299 } | 299 } |
| 300 | 300 |
| 301 // 'noopener' also works from 'window.open' | |
| 302 IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, | |
| 303 SwapProcessWithWindowOpenAndNoopener) { | |
| 304 StartEmbeddedServer(); | |
| 305 | |
| 306 NavigateToPageWithLinks(shell()); | |
| 307 | |
| 308 // Get the original SiteInstance for later comparison. | |
| 309 scoped_refptr<SiteInstance> orig_site_instance( | |
| 310 shell()->web_contents()->GetSiteInstance()); | |
| 311 EXPECT_TRUE(orig_site_instance.get() != NULL); | |
|
nasko
2015/11/19 15:06:16
nullptr
| |
| 312 | |
| 313 // Test opening a window with the 'noopener' feature. | |
| 314 ShellAddedObserver new_shell_observer; | |
| 315 bool hasWindowReference = true; | |
| 316 EXPECT_TRUE(ExecuteScriptAndExtractBool( | |
| 317 shell()->web_contents(), | |
| 318 "window.domAutomationController.send(" | |
| 319 " openWindowWithTargetAndFeatures('/title2.html', '', 'noopener')" | |
| 320 ");", | |
| 321 &hasWindowReference)); | |
| 322 // We should not get a reference to the opened window. | |
| 323 EXPECT_FALSE(hasWindowReference); | |
| 324 | |
| 325 // Wait for the window to open. | |
| 326 Shell* new_shell = new_shell_observer.GetShell(); | |
| 327 | |
| 328 EXPECT_EQ("/title2.html", new_shell->web_contents()->GetVisibleURL().path()); | |
|
nasko
2015/11/19 15:06:16
If you move the code around to wait for the naviga
| |
| 329 | |
| 330 // Check that `window.opener` is not set. | |
| 331 bool success = false; | |
| 332 EXPECT_TRUE(ExecuteScriptAndExtractBool( | |
| 333 new_shell->web_contents(), | |
| 334 "window.domAutomationController.send(window.opener == null);", &success)); | |
| 335 EXPECT_TRUE(success); | |
| 336 | |
| 337 // Wait for the cross-site transition in the new tab to finish. | |
|
nasko
2015/11/19 15:06:16
I'd suggest waiting for the navigation to complete
| |
| 338 WaitForLoadStop(new_shell->web_contents()); | |
| 339 WebContentsImpl* web_contents = | |
| 340 static_cast<WebContentsImpl*>(new_shell->web_contents()); | |
| 341 EXPECT_FALSE( | |
| 342 web_contents->GetRenderManagerForTesting()->pending_render_view_host()); | |
| 343 | |
| 344 // Should have a new SiteInstance. | |
| 345 scoped_refptr<SiteInstance> noopener_blank_site_instance( | |
| 346 new_shell->web_contents()->GetSiteInstance()); | |
| 347 EXPECT_NE(orig_site_instance, noopener_blank_site_instance); | |
| 348 } | |
| 349 | |
| 301 // As of crbug.com/69267, we create a new BrowsingInstance (and SiteInstance) | 350 // As of crbug.com/69267, we create a new BrowsingInstance (and SiteInstance) |
| 302 // for rel=noreferrer links in new windows, even to same site pages and named | 351 // for rel=noreferrer links in new windows, even to same site pages and named |
| 303 // targets. | 352 // targets. |
| 304 IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, | 353 IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, |
| 305 SwapProcessWithSameSiteRelNoreferrer) { | 354 SwapProcessWithSameSiteRelNoreferrer) { |
| 306 StartEmbeddedServer(); | 355 StartEmbeddedServer(); |
| 307 | 356 |
| 308 // Load a page with links that open in a new window. | 357 // Load a page with links that open in a new window. |
| 309 NavigateToPageWithLinks(shell()); | 358 NavigateToPageWithLinks(shell()); |
| 310 | 359 |
| (...skipping 2043 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2354 popup_root->current_frame_host()->render_view_host()->IsRenderViewLive()); | 2403 popup_root->current_frame_host()->render_view_host()->IsRenderViewLive()); |
| 2355 | 2404 |
| 2356 // Navigate the main tab to the site of the popup. This will cause the | 2405 // Navigate the main tab to the site of the popup. This will cause the |
| 2357 // RenderView for b.com in the main tab to be recreated. If the issue | 2406 // RenderView for b.com in the main tab to be recreated. If the issue |
| 2358 // is not fixed, this will result in process crash and failing test. | 2407 // is not fixed, this will result in process crash and failing test. |
| 2359 EXPECT_TRUE(NavigateToURL( | 2408 EXPECT_TRUE(NavigateToURL( |
| 2360 shell(), embedded_test_server()->GetURL("b.com", "/title3.html"))); | 2409 shell(), embedded_test_server()->GetURL("b.com", "/title3.html"))); |
| 2361 } | 2410 } |
| 2362 | 2411 |
| 2363 } // namespace content | 2412 } // namespace content |
| OLD | NEW |