OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/frame_host/frame_tree.h" | 5 #include "content/browser/frame_host/frame_tree.h" |
6 | 6 |
7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "content/browser/frame_host/navigator_impl.h" | 9 #include "content/browser/frame_host/navigator_impl.h" |
10 #include "content/browser/frame_host/render_frame_host_factory.h" | 10 #include "content/browser/frame_host/render_frame_host_factory.h" |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 int process_id = root->current_frame_host()->GetProcess()->GetID(); | 133 int process_id = root->current_frame_host()->GetProcess()->GetID(); |
134 | 134 |
135 // Do not navigate each frame separately, since that will clutter the test | 135 // Do not navigate each frame separately, since that will clutter the test |
136 // itself. Instead, leave them in "not live" state, which is indicated by the | 136 // itself. Instead, leave them in "not live" state, which is indicated by the |
137 // * after the frame id, since this test cares about the shape, not the | 137 // * after the frame id, since this test cares about the shape, not the |
138 // frame liveliness. | 138 // frame liveliness. |
139 EXPECT_EQ("1*: []", GetTreeState(frame_tree)); | 139 EXPECT_EQ("1*: []", GetTreeState(frame_tree)); |
140 | 140 |
141 // Simulate attaching a series of frames to build the frame tree. | 141 // Simulate attaching a series of frames to build the frame tree. |
142 frame_tree->AddFrame(root, process_id, 14, blink::WebTreeScopeType::Document, | 142 frame_tree->AddFrame(root, process_id, 14, blink::WebTreeScopeType::Document, |
143 std::string(), blink::WebSandboxFlags::None); | 143 std::string(), blink::WebSandboxFlags::None, |
| 144 blink::WebFrameOwnerProperties()); |
144 frame_tree->AddFrame(root, process_id, 15, blink::WebTreeScopeType::Document, | 145 frame_tree->AddFrame(root, process_id, 15, blink::WebTreeScopeType::Document, |
145 std::string(), blink::WebSandboxFlags::None); | 146 std::string(), blink::WebSandboxFlags::None, |
| 147 blink::WebFrameOwnerProperties()); |
146 frame_tree->AddFrame(root, process_id, 16, blink::WebTreeScopeType::Document, | 148 frame_tree->AddFrame(root, process_id, 16, blink::WebTreeScopeType::Document, |
147 std::string(), blink::WebSandboxFlags::None); | 149 std::string(), blink::WebSandboxFlags::None, |
| 150 blink::WebFrameOwnerProperties()); |
148 | 151 |
149 frame_tree->AddFrame(root->child_at(0), process_id, 244, | 152 frame_tree->AddFrame(root->child_at(0), process_id, 244, |
150 blink::WebTreeScopeType::Document, std::string(), | 153 blink::WebTreeScopeType::Document, std::string(), |
151 blink::WebSandboxFlags::None); | 154 blink::WebSandboxFlags::None, |
| 155 blink::WebFrameOwnerProperties()); |
152 frame_tree->AddFrame(root->child_at(1), process_id, 255, | 156 frame_tree->AddFrame(root->child_at(1), process_id, 255, |
153 blink::WebTreeScopeType::Document, no_children_node, | 157 blink::WebTreeScopeType::Document, no_children_node, |
154 blink::WebSandboxFlags::None); | 158 blink::WebSandboxFlags::None, |
| 159 blink::WebFrameOwnerProperties()); |
155 frame_tree->AddFrame(root->child_at(0), process_id, 245, | 160 frame_tree->AddFrame(root->child_at(0), process_id, 245, |
156 blink::WebTreeScopeType::Document, std::string(), | 161 blink::WebTreeScopeType::Document, std::string(), |
157 blink::WebSandboxFlags::None); | 162 blink::WebSandboxFlags::None, |
| 163 blink::WebFrameOwnerProperties()); |
158 | 164 |
159 EXPECT_EQ("1*: [14*: [244*: [], 245*: []], " | 165 EXPECT_EQ("1*: [14*: [244*: [], 245*: []], " |
160 "15*: [255* 'no children node': []], " | 166 "15*: [255* 'no children node': []], " |
161 "16*: []]", | 167 "16*: []]", |
162 GetTreeState(frame_tree)); | 168 GetTreeState(frame_tree)); |
163 | 169 |
164 FrameTreeNode* child_16 = root->child_at(2); | 170 FrameTreeNode* child_16 = root->child_at(2); |
165 frame_tree->AddFrame(child_16, process_id, 264, | 171 frame_tree->AddFrame(child_16, process_id, 264, |
166 blink::WebTreeScopeType::Document, std::string(), | 172 blink::WebTreeScopeType::Document, std::string(), |
167 blink::WebSandboxFlags::None); | 173 blink::WebSandboxFlags::None, |
| 174 blink::WebFrameOwnerProperties()); |
168 frame_tree->AddFrame(child_16, process_id, 265, | 175 frame_tree->AddFrame(child_16, process_id, 265, |
169 blink::WebTreeScopeType::Document, std::string(), | 176 blink::WebTreeScopeType::Document, std::string(), |
170 blink::WebSandboxFlags::None); | 177 blink::WebSandboxFlags::None, |
| 178 blink::WebFrameOwnerProperties()); |
171 frame_tree->AddFrame(child_16, process_id, 266, | 179 frame_tree->AddFrame(child_16, process_id, 266, |
172 blink::WebTreeScopeType::Document, std::string(), | 180 blink::WebTreeScopeType::Document, std::string(), |
173 blink::WebSandboxFlags::None); | 181 blink::WebSandboxFlags::None, |
| 182 blink::WebFrameOwnerProperties()); |
174 frame_tree->AddFrame(child_16, process_id, 267, | 183 frame_tree->AddFrame(child_16, process_id, 267, |
175 blink::WebTreeScopeType::Document, deep_subtree, | 184 blink::WebTreeScopeType::Document, deep_subtree, |
176 blink::WebSandboxFlags::None); | 185 blink::WebSandboxFlags::None, |
| 186 blink::WebFrameOwnerProperties()); |
177 frame_tree->AddFrame(child_16, process_id, 268, | 187 frame_tree->AddFrame(child_16, process_id, 268, |
178 blink::WebTreeScopeType::Document, std::string(), | 188 blink::WebTreeScopeType::Document, std::string(), |
179 blink::WebSandboxFlags::None); | 189 blink::WebSandboxFlags::None, |
| 190 blink::WebFrameOwnerProperties()); |
180 | 191 |
181 FrameTreeNode* child_267 = child_16->child_at(3); | 192 FrameTreeNode* child_267 = child_16->child_at(3); |
182 frame_tree->AddFrame(child_267, process_id, 365, | 193 frame_tree->AddFrame(child_267, process_id, 365, |
183 blink::WebTreeScopeType::Document, std::string(), | 194 blink::WebTreeScopeType::Document, std::string(), |
184 blink::WebSandboxFlags::None); | 195 blink::WebSandboxFlags::None, |
| 196 blink::WebFrameOwnerProperties()); |
185 frame_tree->AddFrame(child_267->child_at(0), process_id, 455, | 197 frame_tree->AddFrame(child_267->child_at(0), process_id, 455, |
186 blink::WebTreeScopeType::Document, std::string(), | 198 blink::WebTreeScopeType::Document, std::string(), |
187 blink::WebSandboxFlags::None); | 199 blink::WebSandboxFlags::None, |
| 200 blink::WebFrameOwnerProperties()); |
188 frame_tree->AddFrame(child_267->child_at(0)->child_at(0), process_id, 555, | 201 frame_tree->AddFrame(child_267->child_at(0)->child_at(0), process_id, 555, |
189 blink::WebTreeScopeType::Document, std::string(), | 202 blink::WebTreeScopeType::Document, std::string(), |
190 blink::WebSandboxFlags::None); | 203 blink::WebSandboxFlags::None, |
| 204 blink::WebFrameOwnerProperties()); |
191 frame_tree->AddFrame(child_267->child_at(0)->child_at(0)->child_at(0), | 205 frame_tree->AddFrame(child_267->child_at(0)->child_at(0)->child_at(0), |
192 process_id, 655, blink::WebTreeScopeType::Document, | 206 process_id, 655, blink::WebTreeScopeType::Document, |
193 std::string(), blink::WebSandboxFlags::None); | 207 std::string(), blink::WebSandboxFlags::None, |
| 208 blink::WebFrameOwnerProperties()); |
194 | 209 |
195 // Now that's it's fully built, verify the tree structure is as expected. | 210 // Now that's it's fully built, verify the tree structure is as expected. |
196 EXPECT_EQ("1*: [14*: [244*: [], 245*: []], " | 211 EXPECT_EQ("1*: [14*: [244*: [], 245*: []], " |
197 "15*: [255* 'no children node': []], " | 212 "15*: [255* 'no children node': []], " |
198 "16*: [264*: [], 265*: [], 266*: [], " | 213 "16*: [264*: [], 265*: [], 266*: [], " |
199 "267* 'node with deep subtree': " | 214 "267* 'node with deep subtree': " |
200 "[365*: [455*: [555*: [655*: []]]]], 268*: []]]", | 215 "[365*: [455*: [555*: [655*: []]]]], 268*: []]]", |
201 GetTreeState(frame_tree)); | 216 GetTreeState(frame_tree)); |
202 | 217 |
203 FrameTreeNode* child_555 = child_267->child_at(0)->child_at(0)->child_at(0); | 218 FrameTreeNode* child_555 = child_267->child_at(0)->child_at(0)->child_at(0); |
(...skipping 23 matching lines...) Expand all Loading... |
227 | 242 |
228 // Ensure frames can be found by frame_tree_node_id, routing ID, or name. | 243 // Ensure frames can be found by frame_tree_node_id, routing ID, or name. |
229 TEST_F(FrameTreeTest, FindFrames) { | 244 TEST_F(FrameTreeTest, FindFrames) { |
230 main_test_rfh()->InitializeRenderFrameIfNeeded(); | 245 main_test_rfh()->InitializeRenderFrameIfNeeded(); |
231 | 246 |
232 // Add a few child frames to the main frame. | 247 // Add a few child frames to the main frame. |
233 FrameTree* frame_tree = contents()->GetFrameTree(); | 248 FrameTree* frame_tree = contents()->GetFrameTree(); |
234 FrameTreeNode* root = frame_tree->root(); | 249 FrameTreeNode* root = frame_tree->root(); |
235 | 250 |
236 main_test_rfh()->OnCreateChildFrame(22, blink::WebTreeScopeType::Document, | 251 main_test_rfh()->OnCreateChildFrame(22, blink::WebTreeScopeType::Document, |
237 "child0", blink::WebSandboxFlags::None); | 252 "child0", blink::WebSandboxFlags::None, |
| 253 blink::WebFrameOwnerProperties()); |
238 main_test_rfh()->OnCreateChildFrame(23, blink::WebTreeScopeType::Document, | 254 main_test_rfh()->OnCreateChildFrame(23, blink::WebTreeScopeType::Document, |
239 "child1", blink::WebSandboxFlags::None); | 255 "child1", blink::WebSandboxFlags::None, |
| 256 blink::WebFrameOwnerProperties()); |
240 main_test_rfh()->OnCreateChildFrame(24, blink::WebTreeScopeType::Document, | 257 main_test_rfh()->OnCreateChildFrame(24, blink::WebTreeScopeType::Document, |
241 std::string(), | 258 std::string(), |
242 blink::WebSandboxFlags::None); | 259 blink::WebSandboxFlags::None, |
| 260 blink::WebFrameOwnerProperties()); |
243 FrameTreeNode* child0 = root->child_at(0); | 261 FrameTreeNode* child0 = root->child_at(0); |
244 FrameTreeNode* child1 = root->child_at(1); | 262 FrameTreeNode* child1 = root->child_at(1); |
245 | 263 |
246 FrameTreeNode* child2 = root->child_at(2); | 264 FrameTreeNode* child2 = root->child_at(2); |
247 | 265 |
248 // Add one grandchild frame. | 266 // Add one grandchild frame. |
249 child1->current_frame_host()->OnCreateChildFrame( | 267 child1->current_frame_host()->OnCreateChildFrame( |
250 33, blink::WebTreeScopeType::Document, "grandchild", | 268 33, blink::WebTreeScopeType::Document, "grandchild", |
251 blink::WebSandboxFlags::None); | 269 blink::WebSandboxFlags::None, blink::WebFrameOwnerProperties()); |
252 FrameTreeNode* grandchild = child1->child_at(0); | 270 FrameTreeNode* grandchild = child1->child_at(0); |
253 | 271 |
254 // Ensure they can be found by FTN id. | 272 // Ensure they can be found by FTN id. |
255 EXPECT_EQ(root, frame_tree->FindByID(root->frame_tree_node_id())); | 273 EXPECT_EQ(root, frame_tree->FindByID(root->frame_tree_node_id())); |
256 EXPECT_EQ(child0, frame_tree->FindByID(child0->frame_tree_node_id())); | 274 EXPECT_EQ(child0, frame_tree->FindByID(child0->frame_tree_node_id())); |
257 EXPECT_EQ(child1, frame_tree->FindByID(child1->frame_tree_node_id())); | 275 EXPECT_EQ(child1, frame_tree->FindByID(child1->frame_tree_node_id())); |
258 EXPECT_EQ(child2, frame_tree->FindByID(child2->frame_tree_node_id())); | 276 EXPECT_EQ(child2, frame_tree->FindByID(child2->frame_tree_node_id())); |
259 EXPECT_EQ(grandchild, frame_tree->FindByID(grandchild->frame_tree_node_id())); | 277 EXPECT_EQ(grandchild, frame_tree->FindByID(grandchild->frame_tree_node_id())); |
260 EXPECT_EQ(nullptr, frame_tree->FindByID(-1)); | 278 EXPECT_EQ(nullptr, frame_tree->FindByID(-1)); |
261 | 279 |
(...skipping 16 matching lines...) Expand all Loading... |
278 } | 296 } |
279 | 297 |
280 // Check that PreviousSibling() is retrieved correctly. | 298 // Check that PreviousSibling() is retrieved correctly. |
281 TEST_F(FrameTreeTest, PreviousSibling) { | 299 TEST_F(FrameTreeTest, PreviousSibling) { |
282 main_test_rfh()->InitializeRenderFrameIfNeeded(); | 300 main_test_rfh()->InitializeRenderFrameIfNeeded(); |
283 | 301 |
284 // Add a few child frames to the main frame. | 302 // Add a few child frames to the main frame. |
285 FrameTree* frame_tree = contents()->GetFrameTree(); | 303 FrameTree* frame_tree = contents()->GetFrameTree(); |
286 FrameTreeNode* root = frame_tree->root(); | 304 FrameTreeNode* root = frame_tree->root(); |
287 main_test_rfh()->OnCreateChildFrame(22, blink::WebTreeScopeType::Document, | 305 main_test_rfh()->OnCreateChildFrame(22, blink::WebTreeScopeType::Document, |
288 "child0", blink::WebSandboxFlags::None); | 306 "child0", blink::WebSandboxFlags::None, |
| 307 blink::WebFrameOwnerProperties()); |
289 main_test_rfh()->OnCreateChildFrame(23, blink::WebTreeScopeType::Document, | 308 main_test_rfh()->OnCreateChildFrame(23, blink::WebTreeScopeType::Document, |
290 "child1", blink::WebSandboxFlags::None); | 309 "child1", blink::WebSandboxFlags::None, |
| 310 blink::WebFrameOwnerProperties()); |
291 main_test_rfh()->OnCreateChildFrame(24, blink::WebTreeScopeType::Document, | 311 main_test_rfh()->OnCreateChildFrame(24, blink::WebTreeScopeType::Document, |
292 "child2", blink::WebSandboxFlags::None); | 312 "child2", blink::WebSandboxFlags::None, |
| 313 blink::WebFrameOwnerProperties()); |
293 FrameTreeNode* child0 = root->child_at(0); | 314 FrameTreeNode* child0 = root->child_at(0); |
294 FrameTreeNode* child1 = root->child_at(1); | 315 FrameTreeNode* child1 = root->child_at(1); |
295 FrameTreeNode* child2 = root->child_at(2); | 316 FrameTreeNode* child2 = root->child_at(2); |
296 | 317 |
297 // Add one grandchild frame. | 318 // Add one grandchild frame. |
298 child1->current_frame_host()->OnCreateChildFrame( | 319 child1->current_frame_host()->OnCreateChildFrame( |
299 33, blink::WebTreeScopeType::Document, "grandchild", | 320 33, blink::WebTreeScopeType::Document, "grandchild", |
300 blink::WebSandboxFlags::None); | 321 blink::WebSandboxFlags::None, blink::WebFrameOwnerProperties()); |
301 FrameTreeNode* grandchild = child1->child_at(0); | 322 FrameTreeNode* grandchild = child1->child_at(0); |
302 | 323 |
303 EXPECT_EQ(nullptr, root->PreviousSibling()); | 324 EXPECT_EQ(nullptr, root->PreviousSibling()); |
304 EXPECT_EQ(nullptr, child0->PreviousSibling()); | 325 EXPECT_EQ(nullptr, child0->PreviousSibling()); |
305 EXPECT_EQ(child0, child1->PreviousSibling()); | 326 EXPECT_EQ(child0, child1->PreviousSibling()); |
306 EXPECT_EQ(child1, child2->PreviousSibling()); | 327 EXPECT_EQ(child1, child2->PreviousSibling()); |
307 EXPECT_EQ(nullptr, grandchild->PreviousSibling()); | 328 EXPECT_EQ(nullptr, grandchild->PreviousSibling()); |
308 } | 329 } |
309 | 330 |
310 // Do some simple manipulations of the frame tree, making sure that | 331 // Do some simple manipulations of the frame tree, making sure that |
311 // WebContentsObservers see a consistent view of the tree as we go. | 332 // WebContentsObservers see a consistent view of the tree as we go. |
312 TEST_F(FrameTreeTest, ObserverWalksTreeDuringFrameCreation) { | 333 TEST_F(FrameTreeTest, ObserverWalksTreeDuringFrameCreation) { |
313 TreeWalkingWebContentsLogger activity(contents()); | 334 TreeWalkingWebContentsLogger activity(contents()); |
314 contents()->NavigateAndCommit(GURL("http://www.google.com")); | 335 contents()->NavigateAndCommit(GURL("http://www.google.com")); |
315 EXPECT_EQ("RenderFrameCreated(1) -> 1: []", activity.GetLog()); | 336 EXPECT_EQ("RenderFrameCreated(1) -> 1: []", activity.GetLog()); |
316 | 337 |
317 FrameTree* frame_tree = contents()->GetFrameTree(); | 338 FrameTree* frame_tree = contents()->GetFrameTree(); |
318 FrameTreeNode* root = frame_tree->root(); | 339 FrameTreeNode* root = frame_tree->root(); |
319 | 340 |
320 // Simulate attaching a series of frames to build the frame tree. | 341 // Simulate attaching a series of frames to build the frame tree. |
321 main_test_rfh()->OnCreateChildFrame(14, blink::WebTreeScopeType::Document, | 342 main_test_rfh()->OnCreateChildFrame(14, blink::WebTreeScopeType::Document, |
322 std::string(), | 343 std::string(), |
323 blink::WebSandboxFlags::None); | 344 blink::WebSandboxFlags::None, |
| 345 blink::WebFrameOwnerProperties()); |
324 EXPECT_EQ( | 346 EXPECT_EQ( |
325 "RenderFrameHostChanged(new)(14) -> 1: []\n" | 347 "RenderFrameHostChanged(new)(14) -> 1: []\n" |
326 "RenderFrameCreated(14) -> 1: [14: []]", | 348 "RenderFrameCreated(14) -> 1: [14: []]", |
327 activity.GetLog()); | 349 activity.GetLog()); |
328 main_test_rfh()->OnCreateChildFrame(18, blink::WebTreeScopeType::Document, | 350 main_test_rfh()->OnCreateChildFrame(18, blink::WebTreeScopeType::Document, |
329 std::string(), | 351 std::string(), |
330 blink::WebSandboxFlags::None); | 352 blink::WebSandboxFlags::None, |
| 353 blink::WebFrameOwnerProperties()); |
331 EXPECT_EQ( | 354 EXPECT_EQ( |
332 "RenderFrameHostChanged(new)(18) -> 1: [14: []]\n" | 355 "RenderFrameHostChanged(new)(18) -> 1: [14: []]\n" |
333 "RenderFrameCreated(18) -> 1: [14: [], 18: []]", | 356 "RenderFrameCreated(18) -> 1: [14: [], 18: []]", |
334 activity.GetLog()); | 357 activity.GetLog()); |
335 frame_tree->RemoveFrame(root->child_at(0)); | 358 frame_tree->RemoveFrame(root->child_at(0)); |
336 EXPECT_EQ("RenderFrameDeleted(14) -> 1: [18: []]", activity.GetLog()); | 359 EXPECT_EQ("RenderFrameDeleted(14) -> 1: [18: []]", activity.GetLog()); |
337 frame_tree->RemoveFrame(root->child_at(0)); | 360 frame_tree->RemoveFrame(root->child_at(0)); |
338 EXPECT_EQ("RenderFrameDeleted(18) -> 1: []", activity.GetLog()); | 361 EXPECT_EQ("RenderFrameDeleted(18) -> 1: []", activity.GetLog()); |
339 } | 362 } |
340 | 363 |
341 // Make sure that WebContentsObservers see a consistent view of the tree after | 364 // Make sure that WebContentsObservers see a consistent view of the tree after |
342 // recovery from a render process crash. | 365 // recovery from a render process crash. |
343 TEST_F(FrameTreeTest, ObserverWalksTreeAfterCrash) { | 366 TEST_F(FrameTreeTest, ObserverWalksTreeAfterCrash) { |
344 TreeWalkingWebContentsLogger activity(contents()); | 367 TreeWalkingWebContentsLogger activity(contents()); |
345 contents()->NavigateAndCommit(GURL("http://www.google.com")); | 368 contents()->NavigateAndCommit(GURL("http://www.google.com")); |
346 EXPECT_EQ("RenderFrameCreated(1) -> 1: []", activity.GetLog()); | 369 EXPECT_EQ("RenderFrameCreated(1) -> 1: []", activity.GetLog()); |
347 | 370 |
348 main_test_rfh()->OnCreateChildFrame(22, blink::WebTreeScopeType::Document, | 371 main_test_rfh()->OnCreateChildFrame(22, blink::WebTreeScopeType::Document, |
349 std::string(), | 372 std::string(), |
350 blink::WebSandboxFlags::None); | 373 blink::WebSandboxFlags::None, |
| 374 blink::WebFrameOwnerProperties()); |
351 EXPECT_EQ( | 375 EXPECT_EQ( |
352 "RenderFrameHostChanged(new)(22) -> 1: []\n" | 376 "RenderFrameHostChanged(new)(22) -> 1: []\n" |
353 "RenderFrameCreated(22) -> 1: [22: []]", | 377 "RenderFrameCreated(22) -> 1: [22: []]", |
354 activity.GetLog()); | 378 activity.GetLog()); |
355 main_test_rfh()->OnCreateChildFrame(23, blink::WebTreeScopeType::Document, | 379 main_test_rfh()->OnCreateChildFrame(23, blink::WebTreeScopeType::Document, |
356 std::string(), | 380 std::string(), |
357 blink::WebSandboxFlags::None); | 381 blink::WebSandboxFlags::None, |
| 382 blink::WebFrameOwnerProperties()); |
358 EXPECT_EQ( | 383 EXPECT_EQ( |
359 "RenderFrameHostChanged(new)(23) -> 1: [22: []]\n" | 384 "RenderFrameHostChanged(new)(23) -> 1: [22: []]\n" |
360 "RenderFrameCreated(23) -> 1: [22: [], 23: []]", | 385 "RenderFrameCreated(23) -> 1: [22: [], 23: []]", |
361 activity.GetLog()); | 386 activity.GetLog()); |
362 | 387 |
363 // Crash the renderer | 388 // Crash the renderer |
364 main_test_rfh()->GetProcess()->SimulateCrash(); | 389 main_test_rfh()->GetProcess()->SimulateCrash(); |
365 EXPECT_EQ( | 390 EXPECT_EQ( |
366 "RenderProcessGone -> 1*: [22*: [], 23*: []]\n" | 391 "RenderProcessGone -> 1*: [22*: [], 23*: []]\n" |
367 "RenderFrameDeleted(23) -> 1*: [22*: [], 23*: []]\n" | 392 "RenderFrameDeleted(23) -> 1*: [22*: [], 23*: []]\n" |
368 "RenderFrameDeleted(22) -> 1*: [22*: [], 23*: []]\n" | 393 "RenderFrameDeleted(22) -> 1*: [22*: [], 23*: []]\n" |
369 "RenderFrameDeleted(1) -> 1*: []", | 394 "RenderFrameDeleted(1) -> 1*: []", |
370 activity.GetLog()); | 395 activity.GetLog()); |
371 } | 396 } |
372 | 397 |
373 // Ensure that frames are not added to the tree, if the process passed in | 398 // Ensure that frames are not added to the tree, if the process passed in |
374 // is different than the process of the parent node. | 399 // is different than the process of the parent node. |
375 TEST_F(FrameTreeTest, FailAddFrameWithWrongProcessId) { | 400 TEST_F(FrameTreeTest, FailAddFrameWithWrongProcessId) { |
376 contents()->NavigateAndCommit(GURL("http://www.google.com")); | 401 contents()->NavigateAndCommit(GURL("http://www.google.com")); |
377 FrameTree* frame_tree = contents()->GetFrameTree(); | 402 FrameTree* frame_tree = contents()->GetFrameTree(); |
378 FrameTreeNode* root = frame_tree->root(); | 403 FrameTreeNode* root = frame_tree->root(); |
379 int process_id = root->current_frame_host()->GetProcess()->GetID(); | 404 int process_id = root->current_frame_host()->GetProcess()->GetID(); |
380 | 405 |
381 ASSERT_EQ("1: []", GetTreeState(frame_tree)); | 406 ASSERT_EQ("1: []", GetTreeState(frame_tree)); |
382 | 407 |
383 // Simulate attaching a frame from mismatched process id. | 408 // Simulate attaching a frame from mismatched process id. |
384 ASSERT_FALSE(frame_tree->AddFrame( | 409 ASSERT_FALSE(frame_tree->AddFrame( |
385 root, process_id + 1, 1, blink::WebTreeScopeType::Document, std::string(), | 410 root, process_id + 1, 1, blink::WebTreeScopeType::Document, std::string(), |
386 blink::WebSandboxFlags::None)); | 411 blink::WebSandboxFlags::None, blink::WebFrameOwnerProperties())); |
387 ASSERT_EQ("1: []", GetTreeState(frame_tree)); | 412 ASSERT_EQ("1: []", GetTreeState(frame_tree)); |
388 } | 413 } |
389 | 414 |
390 // Ensure that frames removed while a process has crashed are not preserved in | 415 // Ensure that frames removed while a process has crashed are not preserved in |
391 // the global map of id->frame. | 416 // the global map of id->frame. |
392 TEST_F(FrameTreeTest, ProcessCrashClearsGlobalMap) { | 417 TEST_F(FrameTreeTest, ProcessCrashClearsGlobalMap) { |
393 main_test_rfh()->InitializeRenderFrameIfNeeded(); | 418 main_test_rfh()->InitializeRenderFrameIfNeeded(); |
394 | 419 |
395 // Add a couple child frames to the main frame. | 420 // Add a couple child frames to the main frame. |
396 FrameTreeNode* root = contents()->GetFrameTree()->root(); | 421 FrameTreeNode* root = contents()->GetFrameTree()->root(); |
397 | 422 |
398 main_test_rfh()->OnCreateChildFrame(22, blink::WebTreeScopeType::Document, | 423 main_test_rfh()->OnCreateChildFrame(22, blink::WebTreeScopeType::Document, |
399 std::string(), | 424 std::string(), |
400 blink::WebSandboxFlags::None); | 425 blink::WebSandboxFlags::None, |
| 426 blink::WebFrameOwnerProperties()); |
401 main_test_rfh()->OnCreateChildFrame(23, blink::WebTreeScopeType::Document, | 427 main_test_rfh()->OnCreateChildFrame(23, blink::WebTreeScopeType::Document, |
402 std::string(), | 428 std::string(), |
403 blink::WebSandboxFlags::None); | 429 blink::WebSandboxFlags::None, |
| 430 blink::WebFrameOwnerProperties()); |
404 | 431 |
405 // Add one grandchild frame. | 432 // Add one grandchild frame. |
406 RenderFrameHostImpl* child1_rfh = root->child_at(0)->current_frame_host(); | 433 RenderFrameHostImpl* child1_rfh = root->child_at(0)->current_frame_host(); |
407 child1_rfh->OnCreateChildFrame(33, blink::WebTreeScopeType::Document, | 434 child1_rfh->OnCreateChildFrame(33, blink::WebTreeScopeType::Document, |
408 std::string(), blink::WebSandboxFlags::None); | 435 std::string(), blink::WebSandboxFlags::None, |
| 436 blink::WebFrameOwnerProperties()); |
409 | 437 |
410 // Ensure they can be found by id. | 438 // Ensure they can be found by id. |
411 int id1 = root->child_at(0)->frame_tree_node_id(); | 439 int id1 = root->child_at(0)->frame_tree_node_id(); |
412 int id2 = root->child_at(1)->frame_tree_node_id(); | 440 int id2 = root->child_at(1)->frame_tree_node_id(); |
413 int id3 = root->child_at(0)->child_at(0)->frame_tree_node_id(); | 441 int id3 = root->child_at(0)->child_at(0)->frame_tree_node_id(); |
414 EXPECT_TRUE(FrameTreeNode::GloballyFindByID(id1)); | 442 EXPECT_TRUE(FrameTreeNode::GloballyFindByID(id1)); |
415 EXPECT_TRUE(FrameTreeNode::GloballyFindByID(id2)); | 443 EXPECT_TRUE(FrameTreeNode::GloballyFindByID(id2)); |
416 EXPECT_TRUE(FrameTreeNode::GloballyFindByID(id3)); | 444 EXPECT_TRUE(FrameTreeNode::GloballyFindByID(id3)); |
417 | 445 |
418 // Crash the renderer. | 446 // Crash the renderer. |
419 main_test_rfh()->GetProcess()->SimulateCrash(); | 447 main_test_rfh()->GetProcess()->SimulateCrash(); |
420 | 448 |
421 // Ensure they cannot be found by id after the process has crashed. | 449 // Ensure they cannot be found by id after the process has crashed. |
422 EXPECT_FALSE(FrameTreeNode::GloballyFindByID(id1)); | 450 EXPECT_FALSE(FrameTreeNode::GloballyFindByID(id1)); |
423 EXPECT_FALSE(FrameTreeNode::GloballyFindByID(id2)); | 451 EXPECT_FALSE(FrameTreeNode::GloballyFindByID(id2)); |
424 EXPECT_FALSE(FrameTreeNode::GloballyFindByID(id3)); | 452 EXPECT_FALSE(FrameTreeNode::GloballyFindByID(id3)); |
425 } | 453 } |
426 | 454 |
427 } // namespace content | 455 } // namespace content |
OLD | NEW |