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 "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
9 #include "content/browser/frame_host/frame_navigation_entry.h" | 8 #include "content/browser/frame_host/frame_navigation_entry.h" |
10 #include "content/browser/frame_host/frame_tree.h" | 9 #include "content/browser/frame_host/frame_tree.h" |
11 #include "content/browser/frame_host/navigation_controller_impl.h" | 10 #include "content/browser/frame_host/navigation_controller_impl.h" |
12 #include "content/browser/frame_host/navigation_entry_impl.h" | 11 #include "content/browser/frame_host/navigation_entry_impl.h" |
13 #include "content/browser/web_contents/web_contents_impl.h" | 12 #include "content/browser/web_contents/web_contents_impl.h" |
| 13 #include "content/common/site_isolation_policy.h" |
14 #include "content/public/browser/render_view_host.h" | 14 #include "content/public/browser/render_view_host.h" |
15 #include "content/public/browser/resource_controller.h" | 15 #include "content/public/browser/resource_controller.h" |
16 #include "content/public/browser/resource_dispatcher_host.h" | 16 #include "content/public/browser/resource_dispatcher_host.h" |
17 #include "content/public/browser/resource_dispatcher_host_delegate.h" | 17 #include "content/public/browser/resource_dispatcher_host_delegate.h" |
18 #include "content/public/browser/resource_throttle.h" | 18 #include "content/public/browser/resource_throttle.h" |
19 #include "content/public/browser/web_contents.h" | 19 #include "content/public/browser/web_contents.h" |
20 #include "content/public/browser/web_contents_observer.h" | 20 #include "content/public/browser/web_contents_observer.h" |
21 #include "content/public/common/bindings_policy.h" | 21 #include "content/public/common/bindings_policy.h" |
22 #include "content/public/common/content_switches.h" | |
23 #include "content/public/common/url_constants.h" | 22 #include "content/public/common/url_constants.h" |
24 #include "content/public/test/browser_test_utils.h" | 23 #include "content/public/test/browser_test_utils.h" |
25 #include "content/public/test/content_browser_test.h" | 24 #include "content/public/test/content_browser_test.h" |
26 #include "content/public/test/content_browser_test_utils.h" | 25 #include "content/public/test/content_browser_test_utils.h" |
27 #include "content/public/test/test_navigation_observer.h" | 26 #include "content/public/test/test_navigation_observer.h" |
28 #include "content/public/test/test_utils.h" | 27 #include "content/public/test/test_utils.h" |
29 #include "content/shell/browser/shell.h" | 28 #include "content/shell/browser/shell.h" |
30 #include "content/test/content_browser_test_utils_internal.h" | 29 #include "content/test/content_browser_test_utils_internal.h" |
31 #include "net/dns/mock_host_resolver.h" | 30 #include "net/dns/mock_host_resolver.h" |
32 #include "net/test/embedded_test_server/embedded_test_server.h" | 31 #include "net/test/embedded_test_server/embedded_test_server.h" |
(...skipping 24 matching lines...) Expand all Loading... |
57 | 56 |
58 // Use NavigateFrameToURL to go cross-site in the subframe. | 57 // Use NavigateFrameToURL to go cross-site in the subframe. |
59 GURL foo_url(embedded_test_server()->GetURL( | 58 GURL foo_url(embedded_test_server()->GetURL( |
60 "foo.com", "/navigation_controller/simple_page_1.html")); | 59 "foo.com", "/navigation_controller/simple_page_1.html")); |
61 NavigateFrameToURL(root->child_at(0), foo_url); | 60 NavigateFrameToURL(root->child_at(0), foo_url); |
62 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); | 61 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
63 | 62 |
64 // We should only have swapped processes in --site-per-process. | 63 // We should only have swapped processes in --site-per-process. |
65 bool cross_process = root->current_frame_host()->GetProcess() != | 64 bool cross_process = root->current_frame_host()->GetProcess() != |
66 root->child_at(0)->current_frame_host()->GetProcess(); | 65 root->child_at(0)->current_frame_host()->GetProcess(); |
67 EXPECT_EQ(base::CommandLine::ForCurrentProcess()->HasSwitch( | 66 EXPECT_EQ(AreAllSitesIsolatedForTesting(), cross_process); |
68 switches::kSitePerProcess), | |
69 cross_process); | |
70 } | 67 } |
71 | 68 |
72 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, LoadDataWithBaseURL) { | 69 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, LoadDataWithBaseURL) { |
73 const GURL base_url("http://baseurl"); | 70 const GURL base_url("http://baseurl"); |
74 const GURL history_url("http://historyurl"); | 71 const GURL history_url("http://historyurl"); |
75 const std::string data = "<html><body>foo</body></html>"; | 72 const std::string data = "<html><body>foo</body></html>"; |
76 | 73 |
77 const NavigationController& controller = | 74 const NavigationController& controller = |
78 shell()->web_contents()->GetController(); | 75 shell()->web_contents()->GetController(); |
79 // Load data. Blocks until it is done. | 76 // Load data. Blocks until it is done. |
(...skipping 1072 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1152 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); | 1149 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); |
1153 } | 1150 } |
1154 | 1151 |
1155 // Check last committed NavigationEntry. | 1152 // Check last committed NavigationEntry. |
1156 EXPECT_EQ(1, controller.GetEntryCount()); | 1153 EXPECT_EQ(1, controller.GetEntryCount()); |
1157 NavigationEntryImpl* entry = controller.GetLastCommittedEntry(); | 1154 NavigationEntryImpl* entry = controller.GetLastCommittedEntry(); |
1158 EXPECT_EQ(main_url, entry->GetURL()); | 1155 EXPECT_EQ(main_url, entry->GetURL()); |
1159 FrameNavigationEntry* root_entry = entry->root_node()->frame_entry.get(); | 1156 FrameNavigationEntry* root_entry = entry->root_node()->frame_entry.get(); |
1160 EXPECT_EQ(main_url, root_entry->url()); | 1157 EXPECT_EQ(main_url, root_entry->url()); |
1161 | 1158 |
1162 // Verify subframe entries if we're in --site-per-process mode. | 1159 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1163 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1160 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1164 switches::kSitePerProcess)) { | |
1165 // The entry should now have one blank subframe FrameNavigationEntry, but | 1161 // The entry should now have one blank subframe FrameNavigationEntry, but |
1166 // this does not count as committing a real load. | 1162 // this does not count as committing a real load. |
1167 ASSERT_EQ(1U, entry->root_node()->children.size()); | 1163 ASSERT_EQ(1U, entry->root_node()->children.size()); |
1168 FrameNavigationEntry* frame_entry = | 1164 FrameNavigationEntry* frame_entry = |
1169 entry->root_node()->children[0]->frame_entry.get(); | 1165 entry->root_node()->children[0]->frame_entry.get(); |
1170 EXPECT_EQ(about_blank_url, frame_entry->url()); | 1166 EXPECT_EQ(about_blank_url, frame_entry->url()); |
1171 } else { | 1167 } else { |
1172 // There are no subframe FrameNavigationEntries by default. | 1168 // There are no subframe FrameNavigationEntries by default. |
1173 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1169 EXPECT_EQ(0U, entry->root_node()->children.size()); |
1174 } | 1170 } |
1175 EXPECT_FALSE(root->child_at(0)->has_committed_real_load()); | 1171 EXPECT_FALSE(root->child_at(0)->has_committed_real_load()); |
1176 | 1172 |
1177 // 1a. A nested iframe with no URL should also create a subframe entry but not | 1173 // 1a. A nested iframe with no URL should also create a subframe entry but not |
1178 // count as a real load. | 1174 // count as a real load. |
1179 { | 1175 { |
1180 LoadCommittedCapturer capturer(shell()->web_contents()); | 1176 LoadCommittedCapturer capturer(shell()->web_contents()); |
1181 std::string script = "var iframe = document.createElement('iframe');" | 1177 std::string script = "var iframe = document.createElement('iframe');" |
1182 "document.body.appendChild(iframe);"; | 1178 "document.body.appendChild(iframe);"; |
1183 EXPECT_TRUE(content::ExecuteScript(root->child_at(0)->current_frame_host(), | 1179 EXPECT_TRUE(content::ExecuteScript(root->child_at(0)->current_frame_host(), |
1184 script)); | 1180 script)); |
1185 capturer.Wait(); | 1181 capturer.Wait(); |
1186 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); | 1182 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); |
1187 } | 1183 } |
1188 | 1184 |
1189 // Verify subframe entries if we're in --site-per-process mode. | 1185 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1190 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1186 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1191 switches::kSitePerProcess)) { | |
1192 // The nested entry should have one blank subframe FrameNavigationEntry, but | 1187 // The nested entry should have one blank subframe FrameNavigationEntry, but |
1193 // this does not count as committing a real load. | 1188 // this does not count as committing a real load. |
1194 ASSERT_EQ(1U, entry->root_node()->children[0]->children.size()); | 1189 ASSERT_EQ(1U, entry->root_node()->children[0]->children.size()); |
1195 FrameNavigationEntry* frame_entry = | 1190 FrameNavigationEntry* frame_entry = |
1196 entry->root_node()->children[0]->children[0]->frame_entry.get(); | 1191 entry->root_node()->children[0]->children[0]->frame_entry.get(); |
1197 EXPECT_EQ(about_blank_url, frame_entry->url()); | 1192 EXPECT_EQ(about_blank_url, frame_entry->url()); |
1198 } else { | 1193 } else { |
1199 // There are no subframe FrameNavigationEntries by default. | 1194 // There are no subframe FrameNavigationEntries by default. |
1200 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1195 EXPECT_EQ(0U, entry->root_node()->children.size()); |
1201 } | 1196 } |
1202 EXPECT_FALSE(root->child_at(0)->child_at(0)->has_committed_real_load()); | 1197 EXPECT_FALSE(root->child_at(0)->child_at(0)->has_committed_real_load()); |
1203 | 1198 |
1204 // 2. Create another iframe with an explicit about:blank URL. | 1199 // 2. Create another iframe with an explicit about:blank URL. |
1205 { | 1200 { |
1206 LoadCommittedCapturer capturer(shell()->web_contents()); | 1201 LoadCommittedCapturer capturer(shell()->web_contents()); |
1207 std::string script = "var iframe = document.createElement('iframe');" | 1202 std::string script = "var iframe = document.createElement('iframe');" |
1208 "iframe.src = 'about:blank';" | 1203 "iframe.src = 'about:blank';" |
1209 "document.body.appendChild(iframe);"; | 1204 "document.body.appendChild(iframe);"; |
1210 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 1205 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
1211 capturer.Wait(); | 1206 capturer.Wait(); |
1212 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); | 1207 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); |
1213 } | 1208 } |
1214 | 1209 |
1215 // Check last committed NavigationEntry. | 1210 // Check last committed NavigationEntry. |
1216 EXPECT_EQ(1, controller.GetEntryCount()); | 1211 EXPECT_EQ(1, controller.GetEntryCount()); |
1217 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); | 1212 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); |
1218 | 1213 |
1219 // Verify subframe entries if we're in --site-per-process mode. | 1214 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1220 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1215 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1221 switches::kSitePerProcess)) { | |
1222 // The new entry should have one blank subframe FrameNavigationEntry, but | 1216 // The new entry should have one blank subframe FrameNavigationEntry, but |
1223 // this does not count as committing a real load. | 1217 // this does not count as committing a real load. |
1224 ASSERT_EQ(2U, entry->root_node()->children.size()); | 1218 ASSERT_EQ(2U, entry->root_node()->children.size()); |
1225 FrameNavigationEntry* frame_entry = | 1219 FrameNavigationEntry* frame_entry = |
1226 entry->root_node()->children[1]->frame_entry.get(); | 1220 entry->root_node()->children[1]->frame_entry.get(); |
1227 EXPECT_EQ(about_blank_url, frame_entry->url()); | 1221 EXPECT_EQ(about_blank_url, frame_entry->url()); |
1228 } else { | 1222 } else { |
1229 // There are no subframe FrameNavigationEntries by default. | 1223 // There are no subframe FrameNavigationEntries by default. |
1230 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1224 EXPECT_EQ(0U, entry->root_node()->children.size()); |
1231 } | 1225 } |
(...skipping 10 matching lines...) Expand all Loading... |
1242 script)); | 1236 script)); |
1243 capturer.Wait(); | 1237 capturer.Wait(); |
1244 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); | 1238 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); |
1245 } | 1239 } |
1246 | 1240 |
1247 // Check last committed NavigationEntry. It should have replaced the previous | 1241 // Check last committed NavigationEntry. It should have replaced the previous |
1248 // frame entry in the original NavigationEntry. | 1242 // frame entry in the original NavigationEntry. |
1249 EXPECT_EQ(1, controller.GetEntryCount()); | 1243 EXPECT_EQ(1, controller.GetEntryCount()); |
1250 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); | 1244 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); |
1251 | 1245 |
1252 // Verify subframe entries if we're in --site-per-process mode. | 1246 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1253 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1247 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1254 switches::kSitePerProcess)) { | |
1255 // The entry should still have one nested subframe FrameNavigationEntry. | 1248 // The entry should still have one nested subframe FrameNavigationEntry. |
1256 ASSERT_EQ(1U, entry->root_node()->children[0]->children.size()); | 1249 ASSERT_EQ(1U, entry->root_node()->children[0]->children.size()); |
1257 FrameNavigationEntry* frame_entry = | 1250 FrameNavigationEntry* frame_entry = |
1258 entry->root_node()->children[0]->children[0]->frame_entry.get(); | 1251 entry->root_node()->children[0]->children[0]->frame_entry.get(); |
1259 EXPECT_EQ(frame_url, frame_entry->url()); | 1252 EXPECT_EQ(frame_url, frame_entry->url()); |
1260 } else { | 1253 } else { |
1261 // There are no subframe FrameNavigationEntries by default. | 1254 // There are no subframe FrameNavigationEntries by default. |
1262 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1255 EXPECT_EQ(0U, entry->root_node()->children.size()); |
1263 } | 1256 } |
1264 EXPECT_FALSE(root->child_at(0)->has_committed_real_load()); | 1257 EXPECT_FALSE(root->child_at(0)->has_committed_real_load()); |
1265 EXPECT_TRUE(root->child_at(0)->child_at(0)->has_committed_real_load()); | 1258 EXPECT_TRUE(root->child_at(0)->child_at(0)->has_committed_real_load()); |
1266 EXPECT_FALSE(root->child_at(1)->has_committed_real_load()); | 1259 EXPECT_FALSE(root->child_at(1)->has_committed_real_load()); |
1267 | 1260 |
1268 // 4. A real cross-site navigation in the second iframe should be AUTO. | 1261 // 4. A real cross-site navigation in the second iframe should be AUTO. |
1269 GURL foo_url(embedded_test_server()->GetURL( | 1262 GURL foo_url(embedded_test_server()->GetURL( |
1270 "foo.com", "/navigation_controller/simple_page_2.html")); | 1263 "foo.com", "/navigation_controller/simple_page_2.html")); |
1271 { | 1264 { |
1272 LoadCommittedCapturer capturer(root->child_at(1)); | 1265 LoadCommittedCapturer capturer(root->child_at(1)); |
1273 std::string script = "var frames = document.getElementsByTagName('iframe');" | 1266 std::string script = "var frames = document.getElementsByTagName('iframe');" |
1274 "frames[1].src = '" + foo_url.spec() + "';"; | 1267 "frames[1].src = '" + foo_url.spec() + "';"; |
1275 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 1268 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
1276 capturer.Wait(); | 1269 capturer.Wait(); |
1277 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); | 1270 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); |
1278 } | 1271 } |
1279 | 1272 |
1280 // Check last committed NavigationEntry. | 1273 // Check last committed NavigationEntry. |
1281 EXPECT_EQ(1, controller.GetEntryCount()); | 1274 EXPECT_EQ(1, controller.GetEntryCount()); |
1282 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); | 1275 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); |
1283 | 1276 |
1284 // Verify subframe entries if we're in --site-per-process mode. | 1277 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1285 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1278 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1286 switches::kSitePerProcess)) { | |
1287 // The entry should still have two subframe FrameNavigationEntries. | 1279 // The entry should still have two subframe FrameNavigationEntries. |
1288 ASSERT_EQ(2U, entry->root_node()->children.size()); | 1280 ASSERT_EQ(2U, entry->root_node()->children.size()); |
1289 FrameNavigationEntry* frame_entry = | 1281 FrameNavigationEntry* frame_entry = |
1290 entry->root_node()->children[1]->frame_entry.get(); | 1282 entry->root_node()->children[1]->frame_entry.get(); |
1291 EXPECT_EQ(foo_url, frame_entry->url()); | 1283 EXPECT_EQ(foo_url, frame_entry->url()); |
1292 } else { | 1284 } else { |
1293 // There are no subframe FrameNavigationEntries by default. | 1285 // There are no subframe FrameNavigationEntries by default. |
1294 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1286 EXPECT_EQ(0U, entry->root_node()->children.size()); |
1295 } | 1287 } |
1296 EXPECT_FALSE(root->child_at(0)->has_committed_real_load()); | 1288 EXPECT_FALSE(root->child_at(0)->has_committed_real_load()); |
(...skipping 11 matching lines...) Expand all Loading... |
1308 script)); | 1300 script)); |
1309 capturer.Wait(); | 1301 capturer.Wait(); |
1310 EXPECT_EQ(ui::PAGE_TRANSITION_MANUAL_SUBFRAME, capturer.transition_type()); | 1302 EXPECT_EQ(ui::PAGE_TRANSITION_MANUAL_SUBFRAME, capturer.transition_type()); |
1311 } | 1303 } |
1312 | 1304 |
1313 // This should have created a new NavigationEntry. | 1305 // This should have created a new NavigationEntry. |
1314 EXPECT_EQ(2, controller.GetEntryCount()); | 1306 EXPECT_EQ(2, controller.GetEntryCount()); |
1315 EXPECT_NE(entry, controller.GetLastCommittedEntry()); | 1307 EXPECT_NE(entry, controller.GetLastCommittedEntry()); |
1316 NavigationEntryImpl* entry2 = controller.GetLastCommittedEntry(); | 1308 NavigationEntryImpl* entry2 = controller.GetLastCommittedEntry(); |
1317 | 1309 |
1318 // Verify subframe entries if we're in --site-per-process mode. | 1310 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1319 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1311 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1320 switches::kSitePerProcess)) { | |
1321 ASSERT_EQ(2U, entry->root_node()->children.size()); | 1312 ASSERT_EQ(2U, entry->root_node()->children.size()); |
1322 FrameNavigationEntry* frame_entry = | 1313 FrameNavigationEntry* frame_entry = |
1323 entry2->root_node()->children[0]->children[0]->frame_entry.get(); | 1314 entry2->root_node()->children[0]->children[0]->frame_entry.get(); |
1324 EXPECT_EQ(about_blank_url, frame_entry->url()); | 1315 EXPECT_EQ(about_blank_url, frame_entry->url()); |
1325 } else { | 1316 } else { |
1326 // There are no subframe FrameNavigationEntries by default. | 1317 // There are no subframe FrameNavigationEntries by default. |
1327 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1318 EXPECT_EQ(0U, entry->root_node()->children.size()); |
1328 } | 1319 } |
1329 EXPECT_FALSE(root->child_at(0)->has_committed_real_load()); | 1320 EXPECT_FALSE(root->child_at(0)->has_committed_real_load()); |
1330 EXPECT_TRUE(root->child_at(0)->child_at(0)->has_committed_real_load()); | 1321 EXPECT_TRUE(root->child_at(0)->child_at(0)->has_committed_real_load()); |
1331 EXPECT_TRUE(root->child_at(1)->has_committed_real_load()); | 1322 EXPECT_TRUE(root->child_at(1)->has_committed_real_load()); |
1332 | 1323 |
1333 // Check the end result of the frame tree. | 1324 // Check the end result of the frame tree. |
1334 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1325 if (AreAllSitesIsolatedForTesting()) { |
1335 switches::kSitePerProcess)) { | |
1336 FrameTreeVisualizer visualizer; | 1326 FrameTreeVisualizer visualizer; |
1337 EXPECT_EQ( | 1327 EXPECT_EQ( |
1338 " Site A ------------ proxies for B\n" | 1328 " Site A ------------ proxies for B\n" |
1339 " |--Site A ------- proxies for B\n" | 1329 " |--Site A ------- proxies for B\n" |
1340 " | +--Site A -- proxies for B\n" | 1330 " | +--Site A -- proxies for B\n" |
1341 " +--Site B ------- proxies for A\n" | 1331 " +--Site B ------- proxies for A\n" |
1342 "Where A = http://127.0.0.1/\n" | 1332 "Where A = http://127.0.0.1/\n" |
1343 " B = http://foo.com/", | 1333 " B = http://foo.com/", |
1344 visualizer.DepictFrameTree(root)); | 1334 visualizer.DepictFrameTree(root)); |
1345 } | 1335 } |
(...skipping 28 matching lines...) Expand all Loading... |
1374 } | 1364 } |
1375 | 1365 |
1376 // Check last committed NavigationEntry. | 1366 // Check last committed NavigationEntry. |
1377 EXPECT_EQ(1, controller.GetEntryCount()); | 1367 EXPECT_EQ(1, controller.GetEntryCount()); |
1378 NavigationEntryImpl* entry = controller.GetLastCommittedEntry(); | 1368 NavigationEntryImpl* entry = controller.GetLastCommittedEntry(); |
1379 EXPECT_EQ(main_url, entry->GetURL()); | 1369 EXPECT_EQ(main_url, entry->GetURL()); |
1380 FrameNavigationEntry* root_entry = entry->root_node()->frame_entry.get(); | 1370 FrameNavigationEntry* root_entry = entry->root_node()->frame_entry.get(); |
1381 EXPECT_EQ(main_url, root_entry->url()); | 1371 EXPECT_EQ(main_url, root_entry->url()); |
1382 EXPECT_FALSE(controller.GetPendingEntry()); | 1372 EXPECT_FALSE(controller.GetPendingEntry()); |
1383 | 1373 |
1384 // Verify subframe entries if we're in --site-per-process mode. | 1374 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1385 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1375 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1386 switches::kSitePerProcess)) { | |
1387 // The entry should now have a subframe FrameNavigationEntry. | 1376 // The entry should now have a subframe FrameNavigationEntry. |
1388 ASSERT_EQ(1U, entry->root_node()->children.size()); | 1377 ASSERT_EQ(1U, entry->root_node()->children.size()); |
1389 FrameNavigationEntry* frame_entry = | 1378 FrameNavigationEntry* frame_entry = |
1390 entry->root_node()->children[0]->frame_entry.get(); | 1379 entry->root_node()->children[0]->frame_entry.get(); |
1391 EXPECT_EQ(frame_url, frame_entry->url()); | 1380 EXPECT_EQ(frame_url, frame_entry->url()); |
1392 EXPECT_TRUE(root->child_at(0)->has_committed_real_load()); | 1381 EXPECT_TRUE(root->child_at(0)->has_committed_real_load()); |
1393 } else { | 1382 } else { |
1394 // There are no subframe FrameNavigationEntries by default. | 1383 // There are no subframe FrameNavigationEntries by default. |
1395 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1384 EXPECT_EQ(0U, entry->root_node()->children.size()); |
1396 } | 1385 } |
(...skipping 12 matching lines...) Expand all Loading... |
1409 } | 1398 } |
1410 | 1399 |
1411 // The last committed NavigationEntry shouldn't have changed. | 1400 // The last committed NavigationEntry shouldn't have changed. |
1412 EXPECT_EQ(1, controller.GetEntryCount()); | 1401 EXPECT_EQ(1, controller.GetEntryCount()); |
1413 entry = controller.GetLastCommittedEntry(); | 1402 entry = controller.GetLastCommittedEntry(); |
1414 EXPECT_EQ(main_url, entry->GetURL()); | 1403 EXPECT_EQ(main_url, entry->GetURL()); |
1415 root_entry = entry->root_node()->frame_entry.get(); | 1404 root_entry = entry->root_node()->frame_entry.get(); |
1416 EXPECT_EQ(main_url, root_entry->url()); | 1405 EXPECT_EQ(main_url, root_entry->url()); |
1417 EXPECT_FALSE(controller.GetPendingEntry()); | 1406 EXPECT_FALSE(controller.GetPendingEntry()); |
1418 | 1407 |
1419 // Verify subframe entries if we're in --site-per-process mode. | 1408 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1420 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1409 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1421 switches::kSitePerProcess)) { | |
1422 // The entry should now have 2 subframe FrameNavigationEntries. | 1410 // The entry should now have 2 subframe FrameNavigationEntries. |
1423 ASSERT_EQ(2U, entry->root_node()->children.size()); | 1411 ASSERT_EQ(2U, entry->root_node()->children.size()); |
1424 FrameNavigationEntry* frame_entry = | 1412 FrameNavigationEntry* frame_entry = |
1425 entry->root_node()->children[1]->frame_entry.get(); | 1413 entry->root_node()->children[1]->frame_entry.get(); |
1426 EXPECT_EQ(foo_url, frame_entry->url()); | 1414 EXPECT_EQ(foo_url, frame_entry->url()); |
1427 EXPECT_TRUE(root->child_at(1)->has_committed_real_load()); | 1415 EXPECT_TRUE(root->child_at(1)->has_committed_real_load()); |
1428 } else { | 1416 } else { |
1429 // There are no subframe FrameNavigationEntries by default. | 1417 // There are no subframe FrameNavigationEntries by default. |
1430 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1418 EXPECT_EQ(0U, entry->root_node()->children.size()); |
1431 } | 1419 } |
(...skipping 10 matching lines...) Expand all Loading... |
1442 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); | 1430 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); |
1443 } | 1431 } |
1444 | 1432 |
1445 // The last committed NavigationEntry shouldn't have changed. | 1433 // The last committed NavigationEntry shouldn't have changed. |
1446 EXPECT_EQ(1, controller.GetEntryCount()); | 1434 EXPECT_EQ(1, controller.GetEntryCount()); |
1447 entry = controller.GetLastCommittedEntry(); | 1435 entry = controller.GetLastCommittedEntry(); |
1448 EXPECT_EQ(main_url, entry->GetURL()); | 1436 EXPECT_EQ(main_url, entry->GetURL()); |
1449 root_entry = entry->root_node()->frame_entry.get(); | 1437 root_entry = entry->root_node()->frame_entry.get(); |
1450 EXPECT_EQ(main_url, root_entry->url()); | 1438 EXPECT_EQ(main_url, root_entry->url()); |
1451 | 1439 |
1452 // Verify subframe entries if we're in --site-per-process mode. | 1440 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1453 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1441 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1454 switches::kSitePerProcess)) { | |
1455 // The entry should now have 2 subframe FrameNavigationEntries. | 1442 // The entry should now have 2 subframe FrameNavigationEntries. |
1456 ASSERT_EQ(2U, entry->root_node()->children.size()); | 1443 ASSERT_EQ(2U, entry->root_node()->children.size()); |
1457 ASSERT_EQ(1U, entry->root_node()->children[1]->children.size()); | 1444 ASSERT_EQ(1U, entry->root_node()->children[1]->children.size()); |
1458 FrameNavigationEntry* frame_entry = | 1445 FrameNavigationEntry* frame_entry = |
1459 entry->root_node()->children[1]->children[0]->frame_entry.get(); | 1446 entry->root_node()->children[1]->children[0]->frame_entry.get(); |
1460 EXPECT_EQ(foo_url, frame_entry->url()); | 1447 EXPECT_EQ(foo_url, frame_entry->url()); |
1461 } else { | 1448 } else { |
1462 // There are no subframe FrameNavigationEntries by default. | 1449 // There are no subframe FrameNavigationEntries by default. |
1463 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1450 EXPECT_EQ(0U, entry->root_node()->children.size()); |
1464 } | 1451 } |
(...skipping 10 matching lines...) Expand all Loading... |
1475 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); | 1462 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); |
1476 } | 1463 } |
1477 | 1464 |
1478 // The last committed NavigationEntry shouldn't have changed. | 1465 // The last committed NavigationEntry shouldn't have changed. |
1479 EXPECT_EQ(1, controller.GetEntryCount()); | 1466 EXPECT_EQ(1, controller.GetEntryCount()); |
1480 entry = controller.GetLastCommittedEntry(); | 1467 entry = controller.GetLastCommittedEntry(); |
1481 EXPECT_EQ(main_url, entry->GetURL()); | 1468 EXPECT_EQ(main_url, entry->GetURL()); |
1482 root_entry = entry->root_node()->frame_entry.get(); | 1469 root_entry = entry->root_node()->frame_entry.get(); |
1483 EXPECT_EQ(main_url, root_entry->url()); | 1470 EXPECT_EQ(main_url, root_entry->url()); |
1484 | 1471 |
1485 // Verify subframe entries if we're in --site-per-process mode. | 1472 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1486 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1473 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1487 switches::kSitePerProcess)) { | |
1488 // The entry should now have 3 subframe FrameNavigationEntries. | 1474 // The entry should now have 3 subframe FrameNavigationEntries. |
1489 ASSERT_EQ(3U, entry->root_node()->children.size()); | 1475 ASSERT_EQ(3U, entry->root_node()->children.size()); |
1490 FrameNavigationEntry* frame_entry = | 1476 FrameNavigationEntry* frame_entry = |
1491 entry->root_node()->children[2]->frame_entry.get(); | 1477 entry->root_node()->children[2]->frame_entry.get(); |
1492 EXPECT_EQ(foo_url, frame_entry->url()); | 1478 EXPECT_EQ(foo_url, frame_entry->url()); |
1493 } else { | 1479 } else { |
1494 // There are no subframe FrameNavigationEntries by default. | 1480 // There are no subframe FrameNavigationEntries by default. |
1495 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1481 EXPECT_EQ(0U, entry->root_node()->children.size()); |
1496 } | 1482 } |
1497 | 1483 |
1498 // 5. Create a nested iframe on the original site (A-B-A). | 1484 // 5. Create a nested iframe on the original site (A-B-A). |
1499 { | 1485 { |
1500 LoadCommittedCapturer capturer(shell()->web_contents()); | 1486 LoadCommittedCapturer capturer(shell()->web_contents()); |
1501 std::string script = "var iframe = document.createElement('iframe');" | 1487 std::string script = "var iframe = document.createElement('iframe');" |
1502 "iframe.src = '" + frame_url.spec() + "';" | 1488 "iframe.src = '" + frame_url.spec() + "';" |
1503 "document.body.appendChild(iframe);"; | 1489 "document.body.appendChild(iframe);"; |
1504 FrameTreeNode* child = root->child_at(2); | 1490 FrameTreeNode* child = root->child_at(2); |
1505 EXPECT_TRUE(content::ExecuteScript(child->current_frame_host(), script)); | 1491 EXPECT_TRUE(content::ExecuteScript(child->current_frame_host(), script)); |
1506 capturer.Wait(); | 1492 capturer.Wait(); |
1507 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); | 1493 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); |
1508 } | 1494 } |
1509 | 1495 |
1510 // The last committed NavigationEntry shouldn't have changed. | 1496 // The last committed NavigationEntry shouldn't have changed. |
1511 EXPECT_EQ(1, controller.GetEntryCount()); | 1497 EXPECT_EQ(1, controller.GetEntryCount()); |
1512 entry = controller.GetLastCommittedEntry(); | 1498 entry = controller.GetLastCommittedEntry(); |
1513 EXPECT_EQ(main_url, entry->GetURL()); | 1499 EXPECT_EQ(main_url, entry->GetURL()); |
1514 root_entry = entry->root_node()->frame_entry.get(); | 1500 root_entry = entry->root_node()->frame_entry.get(); |
1515 EXPECT_EQ(main_url, root_entry->url()); | 1501 EXPECT_EQ(main_url, root_entry->url()); |
1516 | 1502 |
1517 // Verify subframe entries if we're in --site-per-process mode. | 1503 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1518 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1504 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1519 switches::kSitePerProcess)) { | |
1520 // There should be a corresponding FrameNavigationEntry. | 1505 // There should be a corresponding FrameNavigationEntry. |
1521 ASSERT_EQ(1U, entry->root_node()->children[2]->children.size()); | 1506 ASSERT_EQ(1U, entry->root_node()->children[2]->children.size()); |
1522 FrameNavigationEntry* frame_entry = | 1507 FrameNavigationEntry* frame_entry = |
1523 entry->root_node()->children[2]->children[0]->frame_entry.get(); | 1508 entry->root_node()->children[2]->children[0]->frame_entry.get(); |
1524 EXPECT_EQ(frame_url, frame_entry->url()); | 1509 EXPECT_EQ(frame_url, frame_entry->url()); |
1525 } else { | 1510 } else { |
1526 // There are no subframe FrameNavigationEntries by default. | 1511 // There are no subframe FrameNavigationEntries by default. |
1527 EXPECT_EQ(0U, entry->root_node()->children.size()); | 1512 EXPECT_EQ(0U, entry->root_node()->children.size()); |
1528 } | 1513 } |
1529 | 1514 |
1530 // Check the end result of the frame tree. | 1515 // Check the end result of the frame tree. |
1531 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1516 if (AreAllSitesIsolatedForTesting()) { |
1532 switches::kSitePerProcess)) { | |
1533 FrameTreeVisualizer visualizer; | 1517 FrameTreeVisualizer visualizer; |
1534 EXPECT_EQ( | 1518 EXPECT_EQ( |
1535 " Site A ------------ proxies for B\n" | 1519 " Site A ------------ proxies for B\n" |
1536 " |--Site A ------- proxies for B\n" | 1520 " |--Site A ------- proxies for B\n" |
1537 " |--Site B ------- proxies for A\n" | 1521 " |--Site B ------- proxies for A\n" |
1538 " | +--Site B -- proxies for A\n" | 1522 " | +--Site B -- proxies for A\n" |
1539 " +--Site B ------- proxies for A\n" | 1523 " +--Site B ------- proxies for A\n" |
1540 " +--Site A -- proxies for B\n" | 1524 " +--Site A -- proxies for B\n" |
1541 "Where A = http://127.0.0.1/\n" | 1525 "Where A = http://127.0.0.1/\n" |
1542 " B = http://foo.com/", | 1526 " B = http://foo.com/", |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1585 | 1569 |
1586 // We should have created a new NavigationEntry with the same main frame URL. | 1570 // We should have created a new NavigationEntry with the same main frame URL. |
1587 EXPECT_EQ(2, controller.GetEntryCount()); | 1571 EXPECT_EQ(2, controller.GetEntryCount()); |
1588 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); | 1572 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); |
1589 NavigationEntryImpl* entry2 = controller.GetLastCommittedEntry(); | 1573 NavigationEntryImpl* entry2 = controller.GetLastCommittedEntry(); |
1590 EXPECT_NE(entry, entry2); | 1574 EXPECT_NE(entry, entry2); |
1591 EXPECT_EQ(main_url, entry2->GetURL()); | 1575 EXPECT_EQ(main_url, entry2->GetURL()); |
1592 FrameNavigationEntry* root_entry2 = entry2->root_node()->frame_entry.get(); | 1576 FrameNavigationEntry* root_entry2 = entry2->root_node()->frame_entry.get(); |
1593 EXPECT_EQ(main_url, root_entry2->url()); | 1577 EXPECT_EQ(main_url, root_entry2->url()); |
1594 | 1578 |
1595 // Verify subframe entries if we're in --site-per-process mode. | 1579 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1596 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1580 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1597 switches::kSitePerProcess)) { | |
1598 // The entry should have a new FrameNavigationEntries for the subframe. | 1581 // The entry should have a new FrameNavigationEntries for the subframe. |
1599 ASSERT_EQ(1U, entry2->root_node()->children.size()); | 1582 ASSERT_EQ(1U, entry2->root_node()->children.size()); |
1600 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); | 1583 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); |
1601 } else { | 1584 } else { |
1602 // There are no subframe FrameNavigationEntries by default. | 1585 // There are no subframe FrameNavigationEntries by default. |
1603 EXPECT_EQ(0U, entry2->root_node()->children.size()); | 1586 EXPECT_EQ(0U, entry2->root_node()->children.size()); |
1604 } | 1587 } |
1605 | 1588 |
1606 // 3. Create a second, initially cross-site iframe. | 1589 // 3. Create a second, initially cross-site iframe. |
1607 GURL foo_url(embedded_test_server()->GetURL( | 1590 GURL foo_url(embedded_test_server()->GetURL( |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1639 | 1622 |
1640 // We should have created a new NavigationEntry with the same main frame URL. | 1623 // We should have created a new NavigationEntry with the same main frame URL. |
1641 EXPECT_EQ(3, controller.GetEntryCount()); | 1624 EXPECT_EQ(3, controller.GetEntryCount()); |
1642 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); | 1625 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); |
1643 NavigationEntryImpl* entry3 = controller.GetLastCommittedEntry(); | 1626 NavigationEntryImpl* entry3 = controller.GetLastCommittedEntry(); |
1644 EXPECT_NE(entry, entry3); | 1627 EXPECT_NE(entry, entry3); |
1645 EXPECT_EQ(main_url, entry3->GetURL()); | 1628 EXPECT_EQ(main_url, entry3->GetURL()); |
1646 FrameNavigationEntry* root_entry3 = entry3->root_node()->frame_entry.get(); | 1629 FrameNavigationEntry* root_entry3 = entry3->root_node()->frame_entry.get(); |
1647 EXPECT_EQ(main_url, root_entry3->url()); | 1630 EXPECT_EQ(main_url, root_entry3->url()); |
1648 | 1631 |
1649 // Verify subframe entries if we're in --site-per-process mode. | 1632 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1650 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1633 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1651 switches::kSitePerProcess)) { | |
1652 // The entry should still have FrameNavigationEntries for all 3 subframes. | 1634 // The entry should still have FrameNavigationEntries for all 3 subframes. |
1653 ASSERT_EQ(2U, entry3->root_node()->children.size()); | 1635 ASSERT_EQ(2U, entry3->root_node()->children.size()); |
1654 EXPECT_EQ(frame_url2, entry3->root_node()->children[0]->frame_entry->url()); | 1636 EXPECT_EQ(frame_url2, entry3->root_node()->children[0]->frame_entry->url()); |
1655 EXPECT_EQ(foo_url, entry3->root_node()->children[1]->frame_entry->url()); | 1637 EXPECT_EQ(foo_url, entry3->root_node()->children[1]->frame_entry->url()); |
1656 ASSERT_EQ(1U, entry3->root_node()->children[1]->children.size()); | 1638 ASSERT_EQ(1U, entry3->root_node()->children[1]->children.size()); |
1657 EXPECT_EQ( | 1639 EXPECT_EQ( |
1658 bar_url, | 1640 bar_url, |
1659 entry3->root_node()->children[1]->children[0]->frame_entry->url()); | 1641 entry3->root_node()->children[1]->children[0]->frame_entry->url()); |
1660 } else { | 1642 } else { |
1661 // There are no subframe FrameNavigationEntries by default. | 1643 // There are no subframe FrameNavigationEntries by default. |
(...skipping 16 matching lines...) Expand all Loading... |
1678 | 1660 |
1679 // We should have created a new NavigationEntry with the same main frame URL. | 1661 // We should have created a new NavigationEntry with the same main frame URL. |
1680 EXPECT_EQ(4, controller.GetEntryCount()); | 1662 EXPECT_EQ(4, controller.GetEntryCount()); |
1681 EXPECT_EQ(3, controller.GetLastCommittedEntryIndex()); | 1663 EXPECT_EQ(3, controller.GetLastCommittedEntryIndex()); |
1682 NavigationEntryImpl* entry4 = controller.GetLastCommittedEntry(); | 1664 NavigationEntryImpl* entry4 = controller.GetLastCommittedEntry(); |
1683 EXPECT_NE(entry, entry4); | 1665 EXPECT_NE(entry, entry4); |
1684 EXPECT_EQ(main_url, entry4->GetURL()); | 1666 EXPECT_EQ(main_url, entry4->GetURL()); |
1685 FrameNavigationEntry* root_entry4 = entry4->root_node()->frame_entry.get(); | 1667 FrameNavigationEntry* root_entry4 = entry4->root_node()->frame_entry.get(); |
1686 EXPECT_EQ(main_url, root_entry4->url()); | 1668 EXPECT_EQ(main_url, root_entry4->url()); |
1687 | 1669 |
1688 // Verify subframe entries if we're in --site-per-process mode. | 1670 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1689 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1671 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1690 switches::kSitePerProcess)) { | |
1691 // The entry should still have FrameNavigationEntries for all 3 subframes. | 1672 // The entry should still have FrameNavigationEntries for all 3 subframes. |
1692 ASSERT_EQ(2U, entry4->root_node()->children.size()); | 1673 ASSERT_EQ(2U, entry4->root_node()->children.size()); |
1693 EXPECT_EQ(frame_url2, entry4->root_node()->children[0]->frame_entry->url()); | 1674 EXPECT_EQ(frame_url2, entry4->root_node()->children[0]->frame_entry->url()); |
1694 EXPECT_EQ(baz_url, entry4->root_node()->children[1]->frame_entry->url()); | 1675 EXPECT_EQ(baz_url, entry4->root_node()->children[1]->frame_entry->url()); |
1695 ASSERT_EQ(0U, entry4->root_node()->children[1]->children.size()); | 1676 ASSERT_EQ(0U, entry4->root_node()->children[1]->children.size()); |
1696 } else { | 1677 } else { |
1697 // There are no subframe FrameNavigationEntries by default. | 1678 // There are no subframe FrameNavigationEntries by default. |
1698 EXPECT_EQ(0U, entry4->root_node()->children.size()); | 1679 EXPECT_EQ(0U, entry4->root_node()->children.size()); |
1699 } | 1680 } |
1700 | 1681 |
1701 // Check the end result of the frame tree. | 1682 // Check the end result of the frame tree. |
1702 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1683 if (AreAllSitesIsolatedForTesting()) { |
1703 switches::kSitePerProcess)) { | |
1704 FrameTreeVisualizer visualizer; | 1684 FrameTreeVisualizer visualizer; |
1705 EXPECT_EQ( | 1685 EXPECT_EQ( |
1706 " Site A ------------ proxies for B\n" | 1686 " Site A ------------ proxies for B\n" |
1707 " |--Site A ------- proxies for B\n" | 1687 " |--Site A ------- proxies for B\n" |
1708 " +--Site B ------- proxies for A\n" | 1688 " +--Site B ------- proxies for A\n" |
1709 "Where A = http://127.0.0.1/\n" | 1689 "Where A = http://127.0.0.1/\n" |
1710 " B = http://baz.com/", | 1690 " B = http://baz.com/", |
1711 visualizer.DepictFrameTree(root)); | 1691 visualizer.DepictFrameTree(root)); |
1712 } | 1692 } |
1713 } | 1693 } |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1768 FrameNavigateParamsCapturer capturer(root->child_at(0)); | 1748 FrameNavigateParamsCapturer capturer(root->child_at(0)); |
1769 shell()->web_contents()->GetController().GoBack(); | 1749 shell()->web_contents()->GetController().GoBack(); |
1770 capturer.Wait(); | 1750 capturer.Wait(); |
1771 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); | 1751 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); |
1772 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); | 1752 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); |
1773 } | 1753 } |
1774 EXPECT_EQ(3, controller.GetEntryCount()); | 1754 EXPECT_EQ(3, controller.GetEntryCount()); |
1775 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); | 1755 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); |
1776 EXPECT_EQ(entry2, controller.GetLastCommittedEntry()); | 1756 EXPECT_EQ(entry2, controller.GetLastCommittedEntry()); |
1777 | 1757 |
1778 // Verify subframe entries if we're in --site-per-process mode. | 1758 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1779 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1759 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1780 switches::kSitePerProcess)) { | |
1781 // The entry should have a new FrameNavigationEntries for the subframe. | 1760 // The entry should have a new FrameNavigationEntries for the subframe. |
1782 ASSERT_EQ(1U, entry2->root_node()->children.size()); | 1761 ASSERT_EQ(1U, entry2->root_node()->children.size()); |
1783 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); | 1762 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); |
1784 } else { | 1763 } else { |
1785 // There are no subframe FrameNavigationEntries by default. | 1764 // There are no subframe FrameNavigationEntries by default. |
1786 EXPECT_EQ(0U, entry2->root_node()->children.size()); | 1765 EXPECT_EQ(0U, entry2->root_node()->children.size()); |
1787 } | 1766 } |
1788 | 1767 |
1789 // 5. Go back in the subframe again to the parent page's site. | 1768 // 5. Go back in the subframe again to the parent page's site. |
1790 { | 1769 { |
1791 FrameNavigateParamsCapturer capturer(root->child_at(0)); | 1770 FrameNavigateParamsCapturer capturer(root->child_at(0)); |
1792 shell()->web_contents()->GetController().GoBack(); | 1771 shell()->web_contents()->GetController().GoBack(); |
1793 capturer.Wait(); | 1772 capturer.Wait(); |
1794 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); | 1773 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); |
1795 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); | 1774 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); |
1796 } | 1775 } |
1797 EXPECT_EQ(3, controller.GetEntryCount()); | 1776 EXPECT_EQ(3, controller.GetEntryCount()); |
1798 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); | 1777 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); |
1799 EXPECT_EQ(entry1, controller.GetLastCommittedEntry()); | 1778 EXPECT_EQ(entry1, controller.GetLastCommittedEntry()); |
1800 | 1779 |
1801 // Verify subframe entries if we're in --site-per-process mode. | 1780 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1802 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1781 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1803 switches::kSitePerProcess)) { | |
1804 // The entry should have a new FrameNavigationEntries for the subframe. | 1782 // The entry should have a new FrameNavigationEntries for the subframe. |
1805 ASSERT_EQ(1U, entry1->root_node()->children.size()); | 1783 ASSERT_EQ(1U, entry1->root_node()->children.size()); |
1806 EXPECT_EQ(frame_url, entry1->root_node()->children[0]->frame_entry->url()); | 1784 EXPECT_EQ(frame_url, entry1->root_node()->children[0]->frame_entry->url()); |
1807 } else { | 1785 } else { |
1808 // There are no subframe FrameNavigationEntries by default. | 1786 // There are no subframe FrameNavigationEntries by default. |
1809 EXPECT_EQ(0U, entry1->root_node()->children.size()); | 1787 EXPECT_EQ(0U, entry1->root_node()->children.size()); |
1810 } | 1788 } |
1811 | 1789 |
1812 // 6. Go forward in the subframe cross-site. | 1790 // 6. Go forward in the subframe cross-site. |
1813 { | 1791 { |
1814 FrameNavigateParamsCapturer capturer(root->child_at(0)); | 1792 FrameNavigateParamsCapturer capturer(root->child_at(0)); |
1815 shell()->web_contents()->GetController().GoForward(); | 1793 shell()->web_contents()->GetController().GoForward(); |
1816 capturer.Wait(); | 1794 capturer.Wait(); |
1817 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); | 1795 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); |
1818 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); | 1796 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); |
1819 } | 1797 } |
1820 EXPECT_EQ(3, controller.GetEntryCount()); | 1798 EXPECT_EQ(3, controller.GetEntryCount()); |
1821 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); | 1799 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); |
1822 EXPECT_EQ(entry2, controller.GetLastCommittedEntry()); | 1800 EXPECT_EQ(entry2, controller.GetLastCommittedEntry()); |
1823 | 1801 |
1824 // Verify subframe entries if we're in --site-per-process mode. | 1802 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1825 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1803 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1826 switches::kSitePerProcess)) { | |
1827 // The entry should have a new FrameNavigationEntries for the subframe. | 1804 // The entry should have a new FrameNavigationEntries for the subframe. |
1828 ASSERT_EQ(1U, entry2->root_node()->children.size()); | 1805 ASSERT_EQ(1U, entry2->root_node()->children.size()); |
1829 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); | 1806 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); |
1830 } else { | 1807 } else { |
1831 // There are no subframe FrameNavigationEntries by default. | 1808 // There are no subframe FrameNavigationEntries by default. |
1832 EXPECT_EQ(0U, entry2->root_node()->children.size()); | 1809 EXPECT_EQ(0U, entry2->root_node()->children.size()); |
1833 } | 1810 } |
1834 | 1811 |
1835 // 7. Go forward in the subframe again, cross-site. | 1812 // 7. Go forward in the subframe again, cross-site. |
1836 { | 1813 { |
1837 FrameNavigateParamsCapturer capturer(root->child_at(0)); | 1814 FrameNavigateParamsCapturer capturer(root->child_at(0)); |
1838 shell()->web_contents()->GetController().GoForward(); | 1815 shell()->web_contents()->GetController().GoForward(); |
1839 capturer.Wait(); | 1816 capturer.Wait(); |
1840 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); | 1817 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.params().transition); |
1841 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); | 1818 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); |
1842 } | 1819 } |
1843 EXPECT_EQ(3, controller.GetEntryCount()); | 1820 EXPECT_EQ(3, controller.GetEntryCount()); |
1844 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); | 1821 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); |
1845 EXPECT_EQ(entry3, controller.GetLastCommittedEntry()); | 1822 EXPECT_EQ(entry3, controller.GetLastCommittedEntry()); |
1846 | 1823 |
1847 // Verify subframe entries if we're in --site-per-process mode. | 1824 // Verify subframe entries if they're enabled (e.g. in --site-per-process). |
1848 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1825 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
1849 switches::kSitePerProcess)) { | |
1850 // The entry should have a new FrameNavigationEntries for the subframe. | 1826 // The entry should have a new FrameNavigationEntries for the subframe. |
1851 ASSERT_EQ(1U, entry3->root_node()->children.size()); | 1827 ASSERT_EQ(1U, entry3->root_node()->children.size()); |
1852 EXPECT_EQ(frame_url3, entry3->root_node()->children[0]->frame_entry->url()); | 1828 EXPECT_EQ(frame_url3, entry3->root_node()->children[0]->frame_entry->url()); |
1853 } else { | 1829 } else { |
1854 // There are no subframe FrameNavigationEntries by default. | 1830 // There are no subframe FrameNavigationEntries by default. |
1855 EXPECT_EQ(0U, entry3->root_node()->children.size()); | 1831 EXPECT_EQ(0U, entry3->root_node()->children.size()); |
1856 } | 1832 } |
1857 } | 1833 } |
1858 | 1834 |
1859 // Verifies that item sequence numbers and document sequence numbers update | 1835 // Verifies that item sequence numbers and document sequence numbers update |
(...skipping 24 matching lines...) Expand all Loading... |
1884 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 1860 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
1885 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); | 1861 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
1886 | 1862 |
1887 frame_entry = controller.GetLastCommittedEntry()->GetFrameEntry(root); | 1863 frame_entry = controller.GetLastCommittedEntry()->GetFrameEntry(root); |
1888 int64 isn_2 = frame_entry->item_sequence_number(); | 1864 int64 isn_2 = frame_entry->item_sequence_number(); |
1889 int64 dsn_2 = frame_entry->document_sequence_number(); | 1865 int64 dsn_2 = frame_entry->document_sequence_number(); |
1890 EXPECT_NE(-1, isn_2); | 1866 EXPECT_NE(-1, isn_2); |
1891 EXPECT_NE(isn_1, isn_2); | 1867 EXPECT_NE(isn_1, isn_2); |
1892 EXPECT_EQ(dsn_1, dsn_2); | 1868 EXPECT_EQ(dsn_1, dsn_2); |
1893 | 1869 |
1894 // Also test subframe sequence numbers, but only in --site-per-proces mode. | 1870 // Test subframe sequence numbers only if enabled, e.g. in --site-per-process. |
1895 // (We do not create subframe FrameNavigationEntries in default mode yet.) | 1871 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) |
1896 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | |
1897 switches::kSitePerProcess)) | |
1898 return; | 1872 return; |
1899 | 1873 |
1900 // 3. Add a subframe, which does an AUTO_SUBFRAME navigation. | 1874 // 3. Add a subframe, which does an AUTO_SUBFRAME navigation. |
1901 { | 1875 { |
1902 LoadCommittedCapturer capturer(shell()->web_contents()); | 1876 LoadCommittedCapturer capturer(shell()->web_contents()); |
1903 std::string script = "var iframe = document.createElement('iframe');" | 1877 std::string script = "var iframe = document.createElement('iframe');" |
1904 "iframe.src = '" + url.spec() + "';" | 1878 "iframe.src = '" + url.spec() + "';" |
1905 "document.body.appendChild(iframe);"; | 1879 "document.body.appendChild(iframe);"; |
1906 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 1880 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
1907 capturer.Wait(); | 1881 capturer.Wait(); |
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2360 EXPECT_EQ(original_url, capturer.all_params()[1].url); | 2334 EXPECT_EQ(original_url, capturer.all_params()[1].url); |
2361 EXPECT_EQ(original_url, shell()->web_contents()->GetLastCommittedURL()); | 2335 EXPECT_EQ(original_url, shell()->web_contents()->GetLastCommittedURL()); |
2362 } | 2336 } |
2363 | 2337 |
2364 // Make sure the renderer is still alive. | 2338 // Make sure the renderer is still alive. |
2365 EXPECT_TRUE( | 2339 EXPECT_TRUE( |
2366 ExecuteScript(shell()->web_contents(), "console.log('Success');")); | 2340 ExecuteScript(shell()->web_contents(), "console.log('Success');")); |
2367 } | 2341 } |
2368 | 2342 |
2369 } // namespace content | 2343 } // namespace content |
OLD | NEW |