Chromium Code Reviews| 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 "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "content/browser/frame_host/cross_process_frame_connector.h" | 10 #include "content/browser/frame_host/cross_process_frame_connector.h" |
| (...skipping 1167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1178 | 1178 |
| 1179 // Check that the window.name seen by the frame matches the name attribute | 1179 // Check that the window.name seen by the frame matches the name attribute |
| 1180 // specified by its parent in the iframe tag. | 1180 // specified by its parent in the iframe tag. |
| 1181 std::string result; | 1181 std::string result; |
| 1182 EXPECT_TRUE(ExecuteScriptAndExtractString( | 1182 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 1183 root->child_at(0)->current_frame_host(), | 1183 root->child_at(0)->current_frame_host(), |
| 1184 "window.domAutomationController.send(window.name);", &result)); | 1184 "window.domAutomationController.send(window.name);", &result)); |
| 1185 EXPECT_EQ(result, "3-1-name"); | 1185 EXPECT_EQ(result, "3-1-name"); |
| 1186 } | 1186 } |
| 1187 | 1187 |
| 1188 // Verify that dynamic updates to a frame's window.name propagate to the | |
| 1189 // frame's proxies, so that the latest frame names can be used in frame | |
|
nasko
2015/03/05 18:09:28
nit: s/used in frame navigations/used in navigatio
alexmos
2015/03/09 18:47:58
Done.
| |
| 1190 // navigations. | |
| 1191 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DynamicWindowName) { | |
| 1192 GURL main_url(embedded_test_server()->GetURL("/frame_tree/2-4.html")); | |
| 1193 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | |
| 1194 | |
| 1195 // It is safe to obtain the root frame tree node here, as it doesn't change. | |
| 1196 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | |
| 1197 ->GetFrameTree() | |
| 1198 ->root(); | |
| 1199 | |
|
nasko
2015/03/05 18:09:28
nit: no need for empty line
alexmos
2015/03/09 18:47:58
Done.
| |
| 1200 TestNavigationObserver observer(shell()->web_contents()); | |
| 1201 | |
| 1202 // Load cross-site page into iframe. | |
| 1203 GURL frame_url = | |
| 1204 embedded_test_server()->GetURL("foo.com", "/frame_tree/3-1.html"); | |
| 1205 NavigateFrameToURL(root->child_at(0), frame_url); | |
| 1206 EXPECT_TRUE(observer.last_navigation_succeeded()); | |
| 1207 EXPECT_EQ(frame_url, observer.last_navigation_url()); | |
| 1208 | |
| 1209 // Browser process should know the child frame's original window.name | |
| 1210 // specified in the iframe element. | |
| 1211 EXPECT_EQ(root->child_at(0)->frame_name(), "3-1-name"); | |
| 1212 | |
| 1213 // Update the child frame's window.name. | |
| 1214 EXPECT_TRUE(ExecuteScript(root->child_at(0)->current_frame_host(), | |
| 1215 "window.domAutomationController.send(" | |
| 1216 "window.name = 'updated-name');")); | |
| 1217 | |
| 1218 // The change should propagate to the browser process. | |
| 1219 EXPECT_EQ(root->child_at(0)->frame_name(), "updated-name"); | |
|
nasko
2015/03/05 18:09:27
What guarantees that the name has been propagated
alexmos
2015/03/09 18:47:58
If I understand correctly, the ExecuteScript in 12
nasko
2015/03/09 21:43:40
Acknowledged.
| |
| 1220 | |
| 1221 // The proxy in the parent process should also receive the updated name. | |
| 1222 // Check that it can reference the child frame by its new name. | |
| 1223 bool success = false; | |
| 1224 EXPECT_TRUE( | |
| 1225 ExecuteScriptAndExtractBool(shell()->web_contents(), | |
| 1226 "window.domAutomationController.send(" | |
| 1227 "frames['updated-name'] == frames[0]);", | |
| 1228 &success)); | |
| 1229 EXPECT_TRUE(success); | |
| 1230 | |
| 1231 // Issue a renderer-initiated navigation from the root frame to the child | |
| 1232 // frame using the frame's name. Make sure correct frame is navigated. | |
| 1233 // | |
| 1234 // TODO(alexmos): When blink::createWindow is refactored to handle | |
| 1235 // RemoteFrames, this should also be tested via window.open(url, frame_name) | |
| 1236 // and a more complicated frame hierarchy. | |
| 1237 TestFrameNavigationObserver frame_observer(root->child_at(0)); | |
| 1238 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), | |
| 1239 "window.domAutomationController.send(" | |
| 1240 "frames['updated-name'].location.href = " | |
| 1241 "'/cross-site/foo.com/title1.html');")); | |
|
nasko
2015/03/05 18:09:28
Why not use the result of embedded_test_server()->
alexmos
2015/03/09 18:47:58
Done.
| |
| 1242 frame_observer.Wait(); | |
| 1243 EXPECT_EQ(embedded_test_server()->GetURL("foo.com", "/title1.html"), | |
| 1244 root->child_at(0)->current_url()); | |
| 1245 } | |
| 1246 | |
| 1188 // TODO(lfg): Merge the test below with NavigateRemoteFrame test. | 1247 // TODO(lfg): Merge the test below with NavigateRemoteFrame test. |
| 1189 // TODO(lfg): Disabled because this triggers http://crbug.com/433012, and since | 1248 // TODO(lfg): Disabled because this triggers http://crbug.com/433012, and since |
| 1190 // the renderer process crashes, it causes the title watcher to never return. | 1249 // the renderer process crashes, it causes the title watcher to never return. |
| 1191 // Alternatively, this could also be fixed if we could use NavigateIframeToURL | 1250 // Alternatively, this could also be fixed if we could use NavigateIframeToURL |
| 1192 // and classified the navigation as MANUAL_SUBFRAME (http://crbug.com/441863) or | 1251 // and classified the navigation as MANUAL_SUBFRAME (http://crbug.com/441863) or |
| 1193 // if we waited for DidStopLoading (currently broken -- see comment in | 1252 // if we waited for DidStopLoading (currently broken -- see comment in |
| 1194 // NavigateIframeToURL). | 1253 // NavigateIframeToURL). |
| 1195 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 1254 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 1196 DISABLED_NavigateRemoteToDataURL) { | 1255 DISABLED_NavigateRemoteToDataURL) { |
| 1197 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); | 1256 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1381 TitleWatcher title_watcher(shell()->web_contents(), expected_title); | 1440 TitleWatcher title_watcher(shell()->web_contents(), expected_title); |
| 1382 TestNavigationObserver observer(shell()->web_contents()); | 1441 TestNavigationObserver observer(shell()->web_contents()); |
| 1383 NavigateFrameToURL(root->child_at(0), foo_url); | 1442 NavigateFrameToURL(root->child_at(0), foo_url); |
| 1384 EXPECT_TRUE(observer.last_navigation_succeeded()); | 1443 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 1385 EXPECT_EQ(foo_url, observer.last_navigation_url()); | 1444 EXPECT_EQ(foo_url, observer.last_navigation_url()); |
| 1386 EXPECT_EQ(title_watcher.WaitAndGetTitle(), expected_title); | 1445 EXPECT_EQ(title_watcher.WaitAndGetTitle(), expected_title); |
| 1387 } | 1446 } |
| 1388 } | 1447 } |
| 1389 | 1448 |
| 1390 } // namespace content | 1449 } // namespace content |
| OLD | NEW |