OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/site_per_process_browsertest.h" | 5 #include "content/browser/site_per_process_browsertest.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 2294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2305 " Site A\n" | 2305 " Site A\n" |
2306 " |--Site A\n" | 2306 " |--Site A\n" |
2307 " +--Site A\n" | 2307 " +--Site A\n" |
2308 " |--Site A\n" | 2308 " |--Site A\n" |
2309 " +--Site A\n" | 2309 " +--Site A\n" |
2310 " +--Site A\n" | 2310 " +--Site A\n" |
2311 "Where A = http://127.0.0.1/", | 2311 "Where A = http://127.0.0.1/", |
2312 DepictFrameTree(root)); | 2312 DepictFrameTree(root)); |
2313 } | 2313 } |
2314 | 2314 |
2315 // Test that opening a cross-site window with child frames doesn't crash either | |
2316 // renderer in --site-per-process. This was previously broken because frame | |
2317 // swaps weren't being performed on main frames, so it would crash when trying | |
2318 // to mirror the child frames. https://crbug.com/475003 | |
2319 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | |
2320 OpenCrossSiteWindowWithFrames) { | |
2321 ASSERT_EQ(1u, Shell::windows().size()); | |
2322 Shell* main_window = Shell::windows()[0]; | |
2323 | |
2324 // Navigate the main window. | |
2325 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); | |
2326 NavigateToURL(main_window, main_url); | |
2327 EXPECT_EQ(main_window->web_contents()->GetLastCommittedURL(), main_url); | |
2328 | |
2329 // Load a cross-site page into a new window. | |
2330 GURL cross_url = | |
2331 embedded_test_server()->GetURL("foo.com", "/site_per_process_main.html"); | |
2332 std::string script = "window.open('" + cross_url.spec() + "')"; | |
2333 EXPECT_TRUE(ExecuteScript(main_window->web_contents(), script)); | |
2334 ASSERT_EQ(2u, Shell::windows().size()); | |
2335 Shell* cross_window = Shell::windows()[1]; | |
2336 WaitForLoadStop(cross_window->web_contents()); | |
2337 EXPECT_EQ(cross_window->web_contents()->GetLastCommittedURL(), cross_url); | |
2338 | |
2339 // Make sure the main window is still live. To create a synchronization point | |
2340 // and ensure that the renderer has processed all the messages for updating | |
2341 // the frame tree, execute a simple bit of JS first. | |
2342 EXPECT_TRUE(ExecuteScript(main_window->web_contents(), "true")); | |
2343 EXPECT_TRUE(static_cast<WebContentsImpl*>(main_window->web_contents()) | |
2344 ->GetMainFrame() | |
2345 ->IsRenderFrameLive()); | |
2346 // And check the cross-site window too. | |
2347 EXPECT_TRUE(ExecuteScript(cross_window->web_contents(), "true")); | |
2348 EXPECT_TRUE(static_cast<WebContentsImpl*>(cross_window->web_contents()) | |
2349 ->GetMainFrame() | |
2350 ->IsRenderFrameLive()); | |
2351 } | |
2352 | |
2353 } // namespace content | 2315 } // namespace content |
OLD | NEW |