| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/command_line.h" | |
| 7 #include "base/strings/stringprintf.h" | 6 #include "base/strings/stringprintf.h" |
| 8 #include "content/browser/frame_host/frame_navigation_entry.h" | 7 #include "content/browser/frame_host/frame_navigation_entry.h" |
| 9 #include "content/browser/frame_host/frame_tree.h" | 8 #include "content/browser/frame_host/frame_tree.h" |
| 10 #include "content/browser/frame_host/navigation_controller_impl.h" | 9 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 11 #include "content/browser/frame_host/navigation_entry_impl.h" | 10 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 12 #include "content/browser/web_contents/web_contents_impl.h" | 11 #include "content/browser/web_contents/web_contents_impl.h" |
| 13 #include "content/public/browser/render_view_host.h" | 12 #include "content/public/browser/render_view_host.h" |
| 14 #include "content/public/browser/resource_controller.h" | 13 #include "content/public/browser/resource_controller.h" |
| 15 #include "content/public/browser/resource_dispatcher_host.h" | 14 #include "content/public/browser/resource_dispatcher_host.h" |
| 16 #include "content/public/browser/resource_dispatcher_host_delegate.h" | 15 #include "content/public/browser/resource_dispatcher_host_delegate.h" |
| 17 #include "content/public/browser/resource_throttle.h" | 16 #include "content/public/browser/resource_throttle.h" |
| 18 #include "content/public/browser/web_contents.h" | 17 #include "content/public/browser/web_contents.h" |
| 19 #include "content/public/browser/web_contents_observer.h" | 18 #include "content/public/browser/web_contents_observer.h" |
| 20 #include "content/public/common/bindings_policy.h" | 19 #include "content/public/common/bindings_policy.h" |
| 21 #include "content/public/common/content_switches.h" | 20 #include "content/public/common/site_isolation_policy.h" |
| 22 #include "content/public/common/url_constants.h" | 21 #include "content/public/common/url_constants.h" |
| 23 #include "content/public/test/browser_test_utils.h" | 22 #include "content/public/test/browser_test_utils.h" |
| 24 #include "content/public/test/content_browser_test.h" | 23 #include "content/public/test/content_browser_test.h" |
| 25 #include "content/public/test/content_browser_test_utils.h" | 24 #include "content/public/test/content_browser_test_utils.h" |
| 26 #include "content/public/test/test_navigation_observer.h" | 25 #include "content/public/test/test_navigation_observer.h" |
| 27 #include "content/public/test/test_utils.h" | 26 #include "content/public/test/test_utils.h" |
| 28 #include "content/shell/browser/shell.h" | 27 #include "content/shell/browser/shell.h" |
| 29 #include "content/test/content_browser_test_utils_internal.h" | 28 #include "content/test/content_browser_test_utils_internal.h" |
| 30 #include "net/dns/mock_host_resolver.h" | 29 #include "net/dns/mock_host_resolver.h" |
| 31 #include "net/test/embedded_test_server/embedded_test_server.h" | 30 #include "net/test/embedded_test_server/embedded_test_server.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 56 | 55 |
| 57 // Use NavigateFrameToURL to go cross-site in the subframe. | 56 // Use NavigateFrameToURL to go cross-site in the subframe. |
| 58 GURL foo_url(embedded_test_server()->GetURL( | 57 GURL foo_url(embedded_test_server()->GetURL( |
| 59 "foo.com", "/navigation_controller/simple_page_1.html")); | 58 "foo.com", "/navigation_controller/simple_page_1.html")); |
| 60 NavigateFrameToURL(root->child_at(0), foo_url); | 59 NavigateFrameToURL(root->child_at(0), foo_url); |
| 61 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); | 60 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
| 62 | 61 |
| 63 // We should only have swapped processes in --site-per-process. | 62 // We should only have swapped processes in --site-per-process. |
| 64 bool cross_process = root->current_frame_host()->GetProcess() != | 63 bool cross_process = root->current_frame_host()->GetProcess() != |
| 65 root->child_at(0)->current_frame_host()->GetProcess(); | 64 root->child_at(0)->current_frame_host()->GetProcess(); |
| 66 EXPECT_EQ(base::CommandLine::ForCurrentProcess()->HasSwitch( | 65 EXPECT_EQ(SiteIsolationPolicy::AreAllSitesIsolatedForTesting(), |
| 67 switches::kSitePerProcess), | |
| 68 cross_process); | 66 cross_process); |
| 69 } | 67 } |
| 70 | 68 |
| 71 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, LoadDataWithBaseURL) { | 69 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, LoadDataWithBaseURL) { |
| 72 const GURL base_url("http://baseurl"); | 70 const GURL base_url("http://baseurl"); |
| 73 const GURL history_url("http://historyurl"); | 71 const GURL history_url("http://historyurl"); |
| 74 const std::string data = "<html><body>foo</body></html>"; | 72 const std::string data = "<html><body>foo</body></html>"; |
| 75 | 73 |
| 76 const NavigationController& controller = | 74 const NavigationController& controller = |
| 77 shell()->web_contents()->GetController(); | 75 shell()->web_contents()->GetController(); |
| (...skipping 1100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1178 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 1176 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 1179 capturer.Wait(); | 1177 capturer.Wait(); |
| 1180 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); | 1178 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); |
| 1181 } | 1179 } |
| 1182 | 1180 |
| 1183 // Check last committed NavigationEntry. | 1181 // Check last committed NavigationEntry. |
| 1184 EXPECT_EQ(1, controller.GetEntryCount()); | 1182 EXPECT_EQ(1, controller.GetEntryCount()); |
| 1185 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); | 1183 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); |
| 1186 | 1184 |
| 1187 // Verify subframe entries if we're in --site-per-process mode. | 1185 // Verify subframe entries if we're in --site-per-process mode. |
| 1188 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1186 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1189 switches::kSitePerProcess)) { | |
| 1190 // The entry should now have one subframe FrameNavigationEntry. | 1187 // The entry should now have one subframe FrameNavigationEntry. |
| 1191 ASSERT_EQ(1U, entry->root_node()->children.size()); | 1188 ASSERT_EQ(1U, entry->root_node()->children.size()); |
| 1192 FrameNavigationEntry* frame_entry = | 1189 FrameNavigationEntry* frame_entry = |
| 1193 entry->root_node()->children[0]->frame_entry.get(); | 1190 entry->root_node()->children[0]->frame_entry.get(); |
| 1194 EXPECT_EQ(frame_url, frame_entry->url()); | 1191 EXPECT_EQ(frame_url, frame_entry->url()); |
| 1195 EXPECT_TRUE(controller.HasCommittedRealLoad(root->child_at(0))); | 1192 EXPECT_TRUE(controller.HasCommittedRealLoad(root->child_at(0))); |
| 1196 EXPECT_FALSE(controller.HasCommittedRealLoad(root->child_at(1))); | 1193 EXPECT_FALSE(controller.HasCommittedRealLoad(root->child_at(1))); |
| 1197 } else { | 1194 } else { |
| 1198 // There are no subframe FrameNavigationEntries by default. | 1195 // There are no subframe FrameNavigationEntries by default. |
| 1199 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1196 EXPECT_EQ(0U, entry->root_node()->children.size()); |
| 1200 } | 1197 } |
| 1201 | 1198 |
| 1202 // 4. A real cross-site navigation in the second iframe should be AUTO. | 1199 // 4. A real cross-site navigation in the second iframe should be AUTO. |
| 1203 GURL foo_url(embedded_test_server()->GetURL( | 1200 GURL foo_url(embedded_test_server()->GetURL( |
| 1204 "foo.com", "/navigation_controller/simple_page_2.html")); | 1201 "foo.com", "/navigation_controller/simple_page_2.html")); |
| 1205 { | 1202 { |
| 1206 LoadCommittedCapturer capturer(root->child_at(1)); | 1203 LoadCommittedCapturer capturer(root->child_at(1)); |
| 1207 std::string script = "var frames = document.getElementsByTagName('iframe');" | 1204 std::string script = "var frames = document.getElementsByTagName('iframe');" |
| 1208 "frames[1].src = '" + foo_url.spec() + "';"; | 1205 "frames[1].src = '" + foo_url.spec() + "';"; |
| 1209 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 1206 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 1210 capturer.Wait(); | 1207 capturer.Wait(); |
| 1211 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); | 1208 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); |
| 1212 } | 1209 } |
| 1213 | 1210 |
| 1214 // Check last committed NavigationEntry. | 1211 // Check last committed NavigationEntry. |
| 1215 EXPECT_EQ(1, controller.GetEntryCount()); | 1212 EXPECT_EQ(1, controller.GetEntryCount()); |
| 1216 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); | 1213 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); |
| 1217 | 1214 |
| 1218 // Verify subframe entries if we're in --site-per-process mode. | 1215 // Verify subframe entries if we're in --site-per-process mode. |
| 1219 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1216 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1220 switches::kSitePerProcess)) { | |
| 1221 // The entry should now have two subframe FrameNavigationEntries. | 1217 // The entry should now have two subframe FrameNavigationEntries. |
| 1222 ASSERT_EQ(2U, entry->root_node()->children.size()); | 1218 ASSERT_EQ(2U, entry->root_node()->children.size()); |
| 1223 FrameNavigationEntry* frame_entry = | 1219 FrameNavigationEntry* frame_entry = |
| 1224 entry->root_node()->children[1]->frame_entry.get(); | 1220 entry->root_node()->children[1]->frame_entry.get(); |
| 1225 EXPECT_EQ(foo_url, frame_entry->url()); | 1221 EXPECT_EQ(foo_url, frame_entry->url()); |
| 1226 EXPECT_TRUE(controller.HasCommittedRealLoad(root->child_at(1))); | 1222 EXPECT_TRUE(controller.HasCommittedRealLoad(root->child_at(1))); |
| 1227 } else { | 1223 } else { |
| 1228 // There are no subframe FrameNavigationEntries by default. | 1224 // There are no subframe FrameNavigationEntries by default. |
| 1229 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1225 EXPECT_EQ(0U, entry->root_node()->children.size()); |
| 1230 } | 1226 } |
| 1231 | 1227 |
| 1232 // Check the end result of the frame tree. | 1228 // Check the end result of the frame tree. |
| 1233 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1229 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1234 switches::kSitePerProcess)) { | |
| 1235 FrameTreeVisualizer visualizer; | 1230 FrameTreeVisualizer visualizer; |
| 1236 EXPECT_EQ( | 1231 EXPECT_EQ( |
| 1237 " Site A ------------ proxies for B\n" | 1232 " Site A ------------ proxies for B\n" |
| 1238 " |--Site A ------- proxies for B\n" | 1233 " |--Site A ------- proxies for B\n" |
| 1239 " +--Site B ------- proxies for A\n" | 1234 " +--Site B ------- proxies for A\n" |
| 1240 "Where A = http://127.0.0.1/\n" | 1235 "Where A = http://127.0.0.1/\n" |
| 1241 " B = http://foo.com/", | 1236 " B = http://foo.com/", |
| 1242 visualizer.DepictFrameTree(root)); | 1237 visualizer.DepictFrameTree(root)); |
| 1243 } | 1238 } |
| 1244 } | 1239 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1273 | 1268 |
| 1274 // Check last committed NavigationEntry. | 1269 // Check last committed NavigationEntry. |
| 1275 EXPECT_EQ(1, controller.GetEntryCount()); | 1270 EXPECT_EQ(1, controller.GetEntryCount()); |
| 1276 NavigationEntryImpl* entry = controller.GetLastCommittedEntry(); | 1271 NavigationEntryImpl* entry = controller.GetLastCommittedEntry(); |
| 1277 EXPECT_EQ(main_url, entry->GetURL()); | 1272 EXPECT_EQ(main_url, entry->GetURL()); |
| 1278 FrameNavigationEntry* root_entry = entry->root_node()->frame_entry.get(); | 1273 FrameNavigationEntry* root_entry = entry->root_node()->frame_entry.get(); |
| 1279 EXPECT_EQ(main_url, root_entry->url()); | 1274 EXPECT_EQ(main_url, root_entry->url()); |
| 1280 EXPECT_FALSE(controller.GetPendingEntry()); | 1275 EXPECT_FALSE(controller.GetPendingEntry()); |
| 1281 | 1276 |
| 1282 // Verify subframe entries if we're in --site-per-process mode. | 1277 // Verify subframe entries if we're in --site-per-process mode. |
| 1283 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1278 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1284 switches::kSitePerProcess)) { | |
| 1285 // The entry should now have a subframe FrameNavigationEntry. | 1279 // The entry should now have a subframe FrameNavigationEntry. |
| 1286 ASSERT_EQ(1U, entry->root_node()->children.size()); | 1280 ASSERT_EQ(1U, entry->root_node()->children.size()); |
| 1287 FrameNavigationEntry* frame_entry = | 1281 FrameNavigationEntry* frame_entry = |
| 1288 entry->root_node()->children[0]->frame_entry.get(); | 1282 entry->root_node()->children[0]->frame_entry.get(); |
| 1289 EXPECT_EQ(frame_url, frame_entry->url()); | 1283 EXPECT_EQ(frame_url, frame_entry->url()); |
| 1290 EXPECT_TRUE(controller.HasCommittedRealLoad(root->child_at(0))); | 1284 EXPECT_TRUE(controller.HasCommittedRealLoad(root->child_at(0))); |
| 1291 } else { | 1285 } else { |
| 1292 // There are no subframe FrameNavigationEntries by default. | 1286 // There are no subframe FrameNavigationEntries by default. |
| 1293 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1287 EXPECT_EQ(0U, entry->root_node()->children.size()); |
| 1294 } | 1288 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1308 | 1302 |
| 1309 // The last committed NavigationEntry shouldn't have changed. | 1303 // The last committed NavigationEntry shouldn't have changed. |
| 1310 EXPECT_EQ(1, controller.GetEntryCount()); | 1304 EXPECT_EQ(1, controller.GetEntryCount()); |
| 1311 entry = controller.GetLastCommittedEntry(); | 1305 entry = controller.GetLastCommittedEntry(); |
| 1312 EXPECT_EQ(main_url, entry->GetURL()); | 1306 EXPECT_EQ(main_url, entry->GetURL()); |
| 1313 root_entry = entry->root_node()->frame_entry.get(); | 1307 root_entry = entry->root_node()->frame_entry.get(); |
| 1314 EXPECT_EQ(main_url, root_entry->url()); | 1308 EXPECT_EQ(main_url, root_entry->url()); |
| 1315 EXPECT_FALSE(controller.GetPendingEntry()); | 1309 EXPECT_FALSE(controller.GetPendingEntry()); |
| 1316 | 1310 |
| 1317 // Verify subframe entries if we're in --site-per-process mode. | 1311 // Verify subframe entries if we're in --site-per-process mode. |
| 1318 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1312 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1319 switches::kSitePerProcess)) { | |
| 1320 // The entry should now have 2 subframe FrameNavigationEntries. | 1313 // The entry should now have 2 subframe FrameNavigationEntries. |
| 1321 ASSERT_EQ(2U, entry->root_node()->children.size()); | 1314 ASSERT_EQ(2U, entry->root_node()->children.size()); |
| 1322 FrameNavigationEntry* frame_entry = | 1315 FrameNavigationEntry* frame_entry = |
| 1323 entry->root_node()->children[1]->frame_entry.get(); | 1316 entry->root_node()->children[1]->frame_entry.get(); |
| 1324 EXPECT_EQ(foo_url, frame_entry->url()); | 1317 EXPECT_EQ(foo_url, frame_entry->url()); |
| 1325 EXPECT_TRUE(controller.HasCommittedRealLoad(root->child_at(1))); | 1318 EXPECT_TRUE(controller.HasCommittedRealLoad(root->child_at(1))); |
| 1326 } else { | 1319 } else { |
| 1327 // There are no subframe FrameNavigationEntries by default. | 1320 // There are no subframe FrameNavigationEntries by default. |
| 1328 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1321 EXPECT_EQ(0U, entry->root_node()->children.size()); |
| 1329 } | 1322 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1341 } | 1334 } |
| 1342 | 1335 |
| 1343 // The last committed NavigationEntry shouldn't have changed. | 1336 // The last committed NavigationEntry shouldn't have changed. |
| 1344 EXPECT_EQ(1, controller.GetEntryCount()); | 1337 EXPECT_EQ(1, controller.GetEntryCount()); |
| 1345 entry = controller.GetLastCommittedEntry(); | 1338 entry = controller.GetLastCommittedEntry(); |
| 1346 EXPECT_EQ(main_url, entry->GetURL()); | 1339 EXPECT_EQ(main_url, entry->GetURL()); |
| 1347 root_entry = entry->root_node()->frame_entry.get(); | 1340 root_entry = entry->root_node()->frame_entry.get(); |
| 1348 EXPECT_EQ(main_url, root_entry->url()); | 1341 EXPECT_EQ(main_url, root_entry->url()); |
| 1349 | 1342 |
| 1350 // Verify subframe entries if we're in --site-per-process mode. | 1343 // Verify subframe entries if we're in --site-per-process mode. |
| 1351 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1344 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1352 switches::kSitePerProcess)) { | |
| 1353 // The entry should now have 2 subframe FrameNavigationEntries. | 1345 // The entry should now have 2 subframe FrameNavigationEntries. |
| 1354 ASSERT_EQ(2U, entry->root_node()->children.size()); | 1346 ASSERT_EQ(2U, entry->root_node()->children.size()); |
| 1355 ASSERT_EQ(1U, entry->root_node()->children[1]->children.size()); | 1347 ASSERT_EQ(1U, entry->root_node()->children[1]->children.size()); |
| 1356 FrameNavigationEntry* frame_entry = | 1348 FrameNavigationEntry* frame_entry = |
| 1357 entry->root_node()->children[1]->children[0]->frame_entry.get(); | 1349 entry->root_node()->children[1]->children[0]->frame_entry.get(); |
| 1358 EXPECT_EQ(foo_url, frame_entry->url()); | 1350 EXPECT_EQ(foo_url, frame_entry->url()); |
| 1359 } else { | 1351 } else { |
| 1360 // There are no subframe FrameNavigationEntries by default. | 1352 // There are no subframe FrameNavigationEntries by default. |
| 1361 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1353 EXPECT_EQ(0U, entry->root_node()->children.size()); |
| 1362 } | 1354 } |
| 1363 | 1355 |
| 1364 // TODO(creis): Add tests for another subframe on B, and for a subframe on A | 1356 // TODO(creis): Add tests for another subframe on B, and for a subframe on A |
| 1365 // within it. Both are currently broken. | 1357 // within it. Both are currently broken. |
| 1366 | 1358 |
| 1367 // Check the end result of the frame tree. | 1359 // Check the end result of the frame tree. |
| 1368 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1360 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1369 switches::kSitePerProcess)) { | |
| 1370 FrameTreeVisualizer visualizer; | 1361 FrameTreeVisualizer visualizer; |
| 1371 EXPECT_EQ( | 1362 EXPECT_EQ( |
| 1372 " Site A ------------ proxies for B\n" | 1363 " Site A ------------ proxies for B\n" |
| 1373 " |--Site A ------- proxies for B\n" | 1364 " |--Site A ------- proxies for B\n" |
| 1374 " +--Site B ------- proxies for A\n" | 1365 " +--Site B ------- proxies for A\n" |
| 1375 " +--Site B -- proxies for A\n" | 1366 " +--Site B -- proxies for A\n" |
| 1376 "Where A = http://127.0.0.1/\n" | 1367 "Where A = http://127.0.0.1/\n" |
| 1377 " B = http://foo.com/", | 1368 " B = http://foo.com/", |
| 1378 visualizer.DepictFrameTree(root)); | 1369 visualizer.DepictFrameTree(root)); |
| 1379 } | 1370 } |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1421 // We should have created a new NavigationEntry with the same main frame URL. | 1412 // We should have created a new NavigationEntry with the same main frame URL. |
| 1422 EXPECT_EQ(2, controller.GetEntryCount()); | 1413 EXPECT_EQ(2, controller.GetEntryCount()); |
| 1423 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); | 1414 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); |
| 1424 NavigationEntryImpl* entry2 = controller.GetLastCommittedEntry(); | 1415 NavigationEntryImpl* entry2 = controller.GetLastCommittedEntry(); |
| 1425 EXPECT_NE(entry, entry2); | 1416 EXPECT_NE(entry, entry2); |
| 1426 EXPECT_EQ(main_url, entry2->GetURL()); | 1417 EXPECT_EQ(main_url, entry2->GetURL()); |
| 1427 FrameNavigationEntry* root_entry2 = entry2->root_node()->frame_entry.get(); | 1418 FrameNavigationEntry* root_entry2 = entry2->root_node()->frame_entry.get(); |
| 1428 EXPECT_EQ(main_url, root_entry2->url()); | 1419 EXPECT_EQ(main_url, root_entry2->url()); |
| 1429 | 1420 |
| 1430 // Verify subframe entries if we're in --site-per-process mode. | 1421 // Verify subframe entries if we're in --site-per-process mode. |
| 1431 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1422 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1432 switches::kSitePerProcess)) { | |
| 1433 // The entry should have a new FrameNavigationEntries for the subframe. | 1423 // The entry should have a new FrameNavigationEntries for the subframe. |
| 1434 ASSERT_EQ(1U, entry2->root_node()->children.size()); | 1424 ASSERT_EQ(1U, entry2->root_node()->children.size()); |
| 1435 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); | 1425 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); |
| 1436 } else { | 1426 } else { |
| 1437 // There are no subframe FrameNavigationEntries by default. | 1427 // There are no subframe FrameNavigationEntries by default. |
| 1438 EXPECT_EQ(0U, entry2->root_node()->children.size()); | 1428 EXPECT_EQ(0U, entry2->root_node()->children.size()); |
| 1439 } | 1429 } |
| 1440 | 1430 |
| 1441 // 3. Create a second, initially cross-site iframe. | 1431 // 3. Create a second, initially cross-site iframe. |
| 1442 GURL foo_url(embedded_test_server()->GetURL( | 1432 GURL foo_url(embedded_test_server()->GetURL( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1475 // We should have created a new NavigationEntry with the same main frame URL. | 1465 // We should have created a new NavigationEntry with the same main frame URL. |
| 1476 EXPECT_EQ(3, controller.GetEntryCount()); | 1466 EXPECT_EQ(3, controller.GetEntryCount()); |
| 1477 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); | 1467 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); |
| 1478 NavigationEntryImpl* entry3 = controller.GetLastCommittedEntry(); | 1468 NavigationEntryImpl* entry3 = controller.GetLastCommittedEntry(); |
| 1479 EXPECT_NE(entry, entry3); | 1469 EXPECT_NE(entry, entry3); |
| 1480 EXPECT_EQ(main_url, entry3->GetURL()); | 1470 EXPECT_EQ(main_url, entry3->GetURL()); |
| 1481 FrameNavigationEntry* root_entry3 = entry3->root_node()->frame_entry.get(); | 1471 FrameNavigationEntry* root_entry3 = entry3->root_node()->frame_entry.get(); |
| 1482 EXPECT_EQ(main_url, root_entry3->url()); | 1472 EXPECT_EQ(main_url, root_entry3->url()); |
| 1483 | 1473 |
| 1484 // Verify subframe entries if we're in --site-per-process mode. | 1474 // Verify subframe entries if we're in --site-per-process mode. |
| 1485 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1475 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1486 switches::kSitePerProcess)) { | |
| 1487 // The entry should still have FrameNavigationEntries for all 3 subframes. | 1476 // The entry should still have FrameNavigationEntries for all 3 subframes. |
| 1488 ASSERT_EQ(2U, entry3->root_node()->children.size()); | 1477 ASSERT_EQ(2U, entry3->root_node()->children.size()); |
| 1489 EXPECT_EQ(frame_url2, entry3->root_node()->children[0]->frame_entry->url()); | 1478 EXPECT_EQ(frame_url2, entry3->root_node()->children[0]->frame_entry->url()); |
| 1490 EXPECT_EQ(foo_url, entry3->root_node()->children[1]->frame_entry->url()); | 1479 EXPECT_EQ(foo_url, entry3->root_node()->children[1]->frame_entry->url()); |
| 1491 ASSERT_EQ(1U, entry3->root_node()->children[1]->children.size()); | 1480 ASSERT_EQ(1U, entry3->root_node()->children[1]->children.size()); |
| 1492 EXPECT_EQ( | 1481 EXPECT_EQ( |
| 1493 bar_url, | 1482 bar_url, |
| 1494 entry3->root_node()->children[1]->children[0]->frame_entry->url()); | 1483 entry3->root_node()->children[1]->children[0]->frame_entry->url()); |
| 1495 } else { | 1484 } else { |
| 1496 // There are no subframe FrameNavigationEntries by default. | 1485 // There are no subframe FrameNavigationEntries by default. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1514 // We should have created a new NavigationEntry with the same main frame URL. | 1503 // We should have created a new NavigationEntry with the same main frame URL. |
| 1515 EXPECT_EQ(4, controller.GetEntryCount()); | 1504 EXPECT_EQ(4, controller.GetEntryCount()); |
| 1516 EXPECT_EQ(3, controller.GetLastCommittedEntryIndex()); | 1505 EXPECT_EQ(3, controller.GetLastCommittedEntryIndex()); |
| 1517 NavigationEntryImpl* entry4 = controller.GetLastCommittedEntry(); | 1506 NavigationEntryImpl* entry4 = controller.GetLastCommittedEntry(); |
| 1518 EXPECT_NE(entry, entry4); | 1507 EXPECT_NE(entry, entry4); |
| 1519 EXPECT_EQ(main_url, entry4->GetURL()); | 1508 EXPECT_EQ(main_url, entry4->GetURL()); |
| 1520 FrameNavigationEntry* root_entry4 = entry4->root_node()->frame_entry.get(); | 1509 FrameNavigationEntry* root_entry4 = entry4->root_node()->frame_entry.get(); |
| 1521 EXPECT_EQ(main_url, root_entry4->url()); | 1510 EXPECT_EQ(main_url, root_entry4->url()); |
| 1522 | 1511 |
| 1523 // Verify subframe entries if we're in --site-per-process mode. | 1512 // Verify subframe entries if we're in --site-per-process mode. |
| 1524 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1513 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1525 switches::kSitePerProcess)) { | |
| 1526 // The entry should still have FrameNavigationEntries for all 3 subframes. | 1514 // The entry should still have FrameNavigationEntries for all 3 subframes. |
| 1527 ASSERT_EQ(2U, entry4->root_node()->children.size()); | 1515 ASSERT_EQ(2U, entry4->root_node()->children.size()); |
| 1528 EXPECT_EQ(frame_url2, entry4->root_node()->children[0]->frame_entry->url()); | 1516 EXPECT_EQ(frame_url2, entry4->root_node()->children[0]->frame_entry->url()); |
| 1529 EXPECT_EQ(baz_url, entry4->root_node()->children[1]->frame_entry->url()); | 1517 EXPECT_EQ(baz_url, entry4->root_node()->children[1]->frame_entry->url()); |
| 1530 ASSERT_EQ(0U, entry4->root_node()->children[1]->children.size()); | 1518 ASSERT_EQ(0U, entry4->root_node()->children[1]->children.size()); |
| 1531 } else { | 1519 } else { |
| 1532 // There are no subframe FrameNavigationEntries by default. | 1520 // There are no subframe FrameNavigationEntries by default. |
| 1533 EXPECT_EQ(0U, entry4->root_node()->children.size()); | 1521 EXPECT_EQ(0U, entry4->root_node()->children.size()); |
| 1534 } | 1522 } |
| 1535 | 1523 |
| 1536 // Check the end result of the frame tree. | 1524 // Check the end result of the frame tree. |
| 1537 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1525 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1538 switches::kSitePerProcess)) { | |
| 1539 FrameTreeVisualizer visualizer; | 1526 FrameTreeVisualizer visualizer; |
| 1540 EXPECT_EQ( | 1527 EXPECT_EQ( |
| 1541 " Site A ------------ proxies for B\n" | 1528 " Site A ------------ proxies for B\n" |
| 1542 " |--Site A ------- proxies for B\n" | 1529 " |--Site A ------- proxies for B\n" |
| 1543 " +--Site B ------- proxies for A\n" | 1530 " +--Site B ------- proxies for A\n" |
| 1544 "Where A = http://127.0.0.1/\n" | 1531 "Where A = http://127.0.0.1/\n" |
| 1545 " B = http://baz.com/", | 1532 " B = http://baz.com/", |
| 1546 visualizer.DepictFrameTree(root)); | 1533 visualizer.DepictFrameTree(root)); |
| 1547 } | 1534 } |
| 1548 } | 1535 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1604 shell()->web_contents()->GetController().GoBack(); | 1591 shell()->web_contents()->GetController().GoBack(); |
| 1605 capturer.Wait(); | 1592 capturer.Wait(); |
| 1606 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); | 1593 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); |
| 1607 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); | 1594 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); |
| 1608 } | 1595 } |
| 1609 EXPECT_EQ(3, controller.GetEntryCount()); | 1596 EXPECT_EQ(3, controller.GetEntryCount()); |
| 1610 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); | 1597 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); |
| 1611 EXPECT_EQ(entry2, controller.GetLastCommittedEntry()); | 1598 EXPECT_EQ(entry2, controller.GetLastCommittedEntry()); |
| 1612 | 1599 |
| 1613 // Verify subframe entries if we're in --site-per-process mode. | 1600 // Verify subframe entries if we're in --site-per-process mode. |
| 1614 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1601 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1615 switches::kSitePerProcess)) { | |
| 1616 // The entry should have a new FrameNavigationEntries for the subframe. | 1602 // The entry should have a new FrameNavigationEntries for the subframe. |
| 1617 ASSERT_EQ(1U, entry2->root_node()->children.size()); | 1603 ASSERT_EQ(1U, entry2->root_node()->children.size()); |
| 1618 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); | 1604 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); |
| 1619 } else { | 1605 } else { |
| 1620 // There are no subframe FrameNavigationEntries by default. | 1606 // There are no subframe FrameNavigationEntries by default. |
| 1621 EXPECT_EQ(0U, entry2->root_node()->children.size()); | 1607 EXPECT_EQ(0U, entry2->root_node()->children.size()); |
| 1622 } | 1608 } |
| 1623 | 1609 |
| 1624 // 5. Go back in the subframe again to the parent page's site. | 1610 // 5. Go back in the subframe again to the parent page's site. |
| 1625 { | 1611 { |
| 1626 FrameNavigateParamsCapturer capturer(root->child_at(0)); | 1612 FrameNavigateParamsCapturer capturer(root->child_at(0)); |
| 1627 shell()->web_contents()->GetController().GoBack(); | 1613 shell()->web_contents()->GetController().GoBack(); |
| 1628 capturer.Wait(); | 1614 capturer.Wait(); |
| 1629 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); | 1615 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); |
| 1630 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); | 1616 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); |
| 1631 } | 1617 } |
| 1632 EXPECT_EQ(3, controller.GetEntryCount()); | 1618 EXPECT_EQ(3, controller.GetEntryCount()); |
| 1633 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); | 1619 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); |
| 1634 EXPECT_EQ(entry1, controller.GetLastCommittedEntry()); | 1620 EXPECT_EQ(entry1, controller.GetLastCommittedEntry()); |
| 1635 | 1621 |
| 1636 // Verify subframe entries if we're in --site-per-process mode. | 1622 // Verify subframe entries if we're in --site-per-process mode. |
| 1637 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1623 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1638 switches::kSitePerProcess)) { | |
| 1639 // The entry should have a new FrameNavigationEntries for the subframe. | 1624 // The entry should have a new FrameNavigationEntries for the subframe. |
| 1640 ASSERT_EQ(1U, entry1->root_node()->children.size()); | 1625 ASSERT_EQ(1U, entry1->root_node()->children.size()); |
| 1641 EXPECT_EQ(frame_url, entry1->root_node()->children[0]->frame_entry->url()); | 1626 EXPECT_EQ(frame_url, entry1->root_node()->children[0]->frame_entry->url()); |
| 1642 } else { | 1627 } else { |
| 1643 // There are no subframe FrameNavigationEntries by default. | 1628 // There are no subframe FrameNavigationEntries by default. |
| 1644 EXPECT_EQ(0U, entry1->root_node()->children.size()); | 1629 EXPECT_EQ(0U, entry1->root_node()->children.size()); |
| 1645 } | 1630 } |
| 1646 | 1631 |
| 1647 // 6. Go forward in the subframe cross-site. | 1632 // 6. Go forward in the subframe cross-site. |
| 1648 { | 1633 { |
| 1649 FrameNavigateParamsCapturer capturer(root->child_at(0)); | 1634 FrameNavigateParamsCapturer capturer(root->child_at(0)); |
| 1650 shell()->web_contents()->GetController().GoForward(); | 1635 shell()->web_contents()->GetController().GoForward(); |
| 1651 capturer.Wait(); | 1636 capturer.Wait(); |
| 1652 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); | 1637 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); |
| 1653 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); | 1638 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); |
| 1654 } | 1639 } |
| 1655 EXPECT_EQ(3, controller.GetEntryCount()); | 1640 EXPECT_EQ(3, controller.GetEntryCount()); |
| 1656 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); | 1641 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); |
| 1657 EXPECT_EQ(entry2, controller.GetLastCommittedEntry()); | 1642 EXPECT_EQ(entry2, controller.GetLastCommittedEntry()); |
| 1658 | 1643 |
| 1659 // Verify subframe entries if we're in --site-per-process mode. | 1644 // Verify subframe entries if we're in --site-per-process mode. |
| 1660 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1645 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1661 switches::kSitePerProcess)) { | |
| 1662 // The entry should have a new FrameNavigationEntries for the subframe. | 1646 // The entry should have a new FrameNavigationEntries for the subframe. |
| 1663 ASSERT_EQ(1U, entry2->root_node()->children.size()); | 1647 ASSERT_EQ(1U, entry2->root_node()->children.size()); |
| 1664 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); | 1648 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); |
| 1665 } else { | 1649 } else { |
| 1666 // There are no subframe FrameNavigationEntries by default. | 1650 // There are no subframe FrameNavigationEntries by default. |
| 1667 EXPECT_EQ(0U, entry2->root_node()->children.size()); | 1651 EXPECT_EQ(0U, entry2->root_node()->children.size()); |
| 1668 } | 1652 } |
| 1669 | 1653 |
| 1670 // 7. Go forward in the subframe again, cross-site. | 1654 // 7. Go forward in the subframe again, cross-site. |
| 1671 { | 1655 { |
| 1672 FrameNavigateParamsCapturer capturer(root->child_at(0)); | 1656 FrameNavigateParamsCapturer capturer(root->child_at(0)); |
| 1673 shell()->web_contents()->GetController().GoForward(); | 1657 shell()->web_contents()->GetController().GoForward(); |
| 1674 capturer.Wait(); | 1658 capturer.Wait(); |
| 1675 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); | 1659 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); |
| 1676 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); | 1660 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); |
| 1677 } | 1661 } |
| 1678 EXPECT_EQ(3, controller.GetEntryCount()); | 1662 EXPECT_EQ(3, controller.GetEntryCount()); |
| 1679 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); | 1663 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); |
| 1680 EXPECT_EQ(entry3, controller.GetLastCommittedEntry()); | 1664 EXPECT_EQ(entry3, controller.GetLastCommittedEntry()); |
| 1681 | 1665 |
| 1682 // Verify subframe entries if we're in --site-per-process mode. | 1666 // Verify subframe entries if we're in --site-per-process mode. |
| 1683 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1667 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 1684 switches::kSitePerProcess)) { | |
| 1685 // The entry should have a new FrameNavigationEntries for the subframe. | 1668 // The entry should have a new FrameNavigationEntries for the subframe. |
| 1686 ASSERT_EQ(1U, entry3->root_node()->children.size()); | 1669 ASSERT_EQ(1U, entry3->root_node()->children.size()); |
| 1687 EXPECT_EQ(frame_url3, entry3->root_node()->children[0]->frame_entry->url()); | 1670 EXPECT_EQ(frame_url3, entry3->root_node()->children[0]->frame_entry->url()); |
| 1688 } else { | 1671 } else { |
| 1689 // There are no subframe FrameNavigationEntries by default. | 1672 // There are no subframe FrameNavigationEntries by default. |
| 1690 EXPECT_EQ(0U, entry3->root_node()->children.size()); | 1673 EXPECT_EQ(0U, entry3->root_node()->children.size()); |
| 1691 } | 1674 } |
| 1692 } | 1675 } |
| 1693 | 1676 |
| 1694 // Verifies that item sequence numbers and document sequence numbers update | 1677 // Verifies that item sequence numbers and document sequence numbers update |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1721 | 1704 |
| 1722 frame_entry = controller.GetLastCommittedEntry()->GetFrameEntry(root); | 1705 frame_entry = controller.GetLastCommittedEntry()->GetFrameEntry(root); |
| 1723 int64 isn_2 = frame_entry->item_sequence_number(); | 1706 int64 isn_2 = frame_entry->item_sequence_number(); |
| 1724 int64 dsn_2 = frame_entry->document_sequence_number(); | 1707 int64 dsn_2 = frame_entry->document_sequence_number(); |
| 1725 EXPECT_NE(-1, isn_2); | 1708 EXPECT_NE(-1, isn_2); |
| 1726 EXPECT_NE(isn_1, isn_2); | 1709 EXPECT_NE(isn_1, isn_2); |
| 1727 EXPECT_EQ(dsn_1, dsn_2); | 1710 EXPECT_EQ(dsn_1, dsn_2); |
| 1728 | 1711 |
| 1729 // Also test subframe sequence numbers, but only in --site-per-proces mode. | 1712 // Also test subframe sequence numbers, but only in --site-per-proces mode. |
| 1730 // (We do not create subframe FrameNavigationEntries in default mode yet.) | 1713 // (We do not create subframe FrameNavigationEntries in default mode yet.) |
| 1731 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 1714 if (!SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) |
| 1732 switches::kSitePerProcess)) | |
| 1733 return; | 1715 return; |
| 1734 | 1716 |
| 1735 // 3. Add a subframe, which does an AUTO_SUBFRAME navigation. | 1717 // 3. Add a subframe, which does an AUTO_SUBFRAME navigation. |
| 1736 { | 1718 { |
| 1737 LoadCommittedCapturer capturer(shell()->web_contents()); | 1719 LoadCommittedCapturer capturer(shell()->web_contents()); |
| 1738 std::string script = "var iframe = document.createElement('iframe');" | 1720 std::string script = "var iframe = document.createElement('iframe');" |
| 1739 "iframe.src = '" + url.spec() + "';" | 1721 "iframe.src = '" + url.spec() + "';" |
| 1740 "document.body.appendChild(iframe);"; | 1722 "document.body.appendChild(iframe);"; |
| 1741 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 1723 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 1742 capturer.Wait(); | 1724 capturer.Wait(); |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2119 // tricky. | 2101 // tricky. |
| 2120 EXPECT_EQ(nullptr, controller.GetPendingEntry()); | 2102 EXPECT_EQ(nullptr, controller.GetPendingEntry()); |
| 2121 shell()->web_contents()->Stop(); | 2103 shell()->web_contents()->Stop(); |
| 2122 watcher.Wait(); | 2104 watcher.Wait(); |
| 2123 } | 2105 } |
| 2124 | 2106 |
| 2125 ResourceDispatcherHost::Get()->SetDelegate(nullptr); | 2107 ResourceDispatcherHost::Get()->SetDelegate(nullptr); |
| 2126 } | 2108 } |
| 2127 | 2109 |
| 2128 } // namespace content | 2110 } // namespace content |
| OLD | NEW |