Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(119)

Side by Side Diff: content/browser/frame_host/frame_tree_unittest.cc

Issue 103633002: Add RenderFrameHostDelegate and plumb it through all the necessary classes. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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.h" 9 #include "content/browser/frame_host/navigator.h"
10 #include "content/browser/frame_host/render_frame_host_factory.h" 10 #include "content/browser/frame_host/render_frame_host_factory.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 result->append("]"); 46 result->append("]");
47 } 47 }
48 }; 48 };
49 49
50 // The root node never changes during navigation even though its 50 // The root node never changes during navigation even though its
51 // RenderFrameHost does. 51 // RenderFrameHost does.
52 // - Swapping main frame doesn't change root node. 52 // - Swapping main frame doesn't change root node.
53 // - Swapping back to NULL doesn't crash (easier tear-down for interstitials). 53 // - Swapping back to NULL doesn't crash (easier tear-down for interstitials).
54 // - Main frame does not own RenderFrameHost. 54 // - Main frame does not own RenderFrameHost.
55 TEST_F(FrameTreeTest, RootNode) { 55 TEST_F(FrameTreeTest, RootNode) {
56 FrameTree frame_tree(new Navigator(NULL, NULL), NULL, NULL, NULL); 56 FrameTree frame_tree(new Navigator(NULL, NULL), NULL, NULL, NULL, NULL);
57 57
58 // Initial state has empty node. 58 // Initial state has empty node.
59 FrameTreeNode* root = frame_tree.root(); 59 FrameTreeNode* root = frame_tree.root();
60 ASSERT_TRUE(root); 60 ASSERT_TRUE(root);
61 EXPECT_FALSE(frame_tree.GetMainFrame()); 61 EXPECT_FALSE(frame_tree.GetMainFrame());
62 62
63 // Swap in main frame. 63 // Swap in main frame.
64 RenderFrameHostImpl* dummy = reinterpret_cast<RenderFrameHostImpl*>(0x1); 64 RenderFrameHostImpl* dummy = reinterpret_cast<RenderFrameHostImpl*>(0x1);
65 frame_tree.SwapMainFrame(dummy); 65 frame_tree.SwapMainFrame(dummy);
66 EXPECT_EQ(root, frame_tree.root()); 66 EXPECT_EQ(root, frame_tree.root());
67 EXPECT_EQ(dummy, frame_tree.GetMainFrame()); 67 EXPECT_EQ(dummy, frame_tree.GetMainFrame());
68 68
69 // Move back to NULL. 69 // Move back to NULL.
70 frame_tree.SwapMainFrame(NULL); 70 frame_tree.SwapMainFrame(NULL);
71 EXPECT_EQ(root, frame_tree.root()); 71 EXPECT_EQ(root, frame_tree.root());
72 EXPECT_FALSE(frame_tree.GetMainFrame()); 72 EXPECT_FALSE(frame_tree.GetMainFrame());
73 73
74 // Move back to an invalid pointer, let the FrameTree go out of scope. Test 74 // Move back to an invalid pointer, let the FrameTree go out of scope. Test
75 // should not crash because the main frame isn't owned. 75 // should not crash because the main frame isn't owned.
76 frame_tree.SwapMainFrame(dummy); 76 frame_tree.SwapMainFrame(dummy);
77 } 77 }
78 78
79 // Test that swapping the main frame resets the renderer-assigned frame id. 79 // Test that swapping the main frame resets the renderer-assigned frame id.
80 // - On creation, frame id is unassigned. 80 // - On creation, frame id is unassigned.
81 // - After a swap, frame id is unassigned. 81 // - After a swap, frame id is unassigned.
82 TEST_F(FrameTreeTest, FirstNavigationAfterSwap) { 82 TEST_F(FrameTreeTest, FirstNavigationAfterSwap) {
83 FrameTree frame_tree(new Navigator(NULL, NULL), NULL, NULL, NULL); 83 FrameTree frame_tree(new Navigator(NULL, NULL), NULL, NULL, NULL, NULL);
84 84
85 EXPECT_TRUE(frame_tree.IsFirstNavigationAfterSwap()); 85 EXPECT_TRUE(frame_tree.IsFirstNavigationAfterSwap());
86 EXPECT_EQ(FrameTreeNode::kInvalidFrameId, 86 EXPECT_EQ(FrameTreeNode::kInvalidFrameId,
87 frame_tree.root()->frame_id()); 87 frame_tree.root()->frame_id());
88 frame_tree.OnFirstNavigationAfterSwap(1); 88 frame_tree.OnFirstNavigationAfterSwap(1);
89 EXPECT_FALSE(frame_tree.IsFirstNavigationAfterSwap()); 89 EXPECT_FALSE(frame_tree.IsFirstNavigationAfterSwap());
90 EXPECT_EQ(1, frame_tree.root()->frame_id()); 90 EXPECT_EQ(1, frame_tree.root()->frame_id());
91 91
92 frame_tree.SwapMainFrame(NULL); 92 frame_tree.SwapMainFrame(NULL);
93 EXPECT_TRUE(frame_tree.IsFirstNavigationAfterSwap()); 93 EXPECT_TRUE(frame_tree.IsFirstNavigationAfterSwap());
94 EXPECT_EQ(FrameTreeNode::kInvalidFrameId, 94 EXPECT_EQ(FrameTreeNode::kInvalidFrameId,
95 frame_tree.root()->frame_id()); 95 frame_tree.root()->frame_id());
96 } 96 }
97 97
98 // Exercise tree manipulation routines. 98 // Exercise tree manipulation routines.
99 // - Add a series of nodes and verify tree structure. 99 // - Add a series of nodes and verify tree structure.
100 // - Remove a series of nodes and verify tree structure. 100 // - Remove a series of nodes and verify tree structure.
101 TEST_F(FrameTreeTest, Shape) { 101 TEST_F(FrameTreeTest, Shape) {
102 FrameTree frame_tree(new Navigator(NULL, NULL), NULL, NULL, NULL); 102 FrameTree frame_tree(new Navigator(NULL, NULL), NULL, NULL, NULL, NULL);
103 103
104 std::string no_children_node("no children node"); 104 std::string no_children_node("no children node");
105 std::string deep_subtree("node with deep subtree"); 105 std::string deep_subtree("node with deep subtree");
106 106
107 // Ensure the top-level node of the FrameTree is initialized by simulating a 107 // Ensure the top-level node of the FrameTree is initialized by simulating a
108 // main frame swap here. 108 // main frame swap here.
109 scoped_ptr<RenderFrameHostImpl> render_frame_host = 109 scoped_ptr<RenderFrameHostImpl> render_frame_host =
110 RenderFrameHostFactory::Create(static_cast<RenderViewHostImpl*>(rvh()), 110 RenderFrameHostFactory::Create(static_cast<RenderViewHostImpl*>(rvh()),
111 NULL,
111 &frame_tree, 112 &frame_tree,
112 process()->GetNextRoutingID(), 113 process()->GetNextRoutingID(),
113 false); 114 false);
114 frame_tree.SwapMainFrame(render_frame_host.get()); 115 frame_tree.SwapMainFrame(render_frame_host.get());
115 frame_tree.OnFirstNavigationAfterSwap(5); 116 frame_tree.OnFirstNavigationAfterSwap(5);
116 117
117 ASSERT_EQ("5: []", GetTreeState(&frame_tree)); 118 ASSERT_EQ("5: []", GetTreeState(&frame_tree));
118 119
119 // Simulate attaching a series of frames to build the frame tree. 120 // Simulate attaching a series of frames to build the frame tree.
120 frame_tree.AddFrame(process()->GetNextRoutingID(), 5, 14, std::string()); 121 frame_tree.AddFrame(process()->GetNextRoutingID(), 5, 14, std::string());
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 frame_tree.RemoveFrame(5, 15); 170 frame_tree.RemoveFrame(5, 15);
170 ASSERT_EQ("5: [14: [244: [], 245: []], " 171 ASSERT_EQ("5: [14: [244: [], 245: []], "
171 "16: [264: [], 266: [], " 172 "16: [264: [], 266: [], "
172 "267 'node with deep subtree': " 173 "267 'node with deep subtree': "
173 "[365: [455: [555: []]]], 268: []]]", 174 "[365: [455: [555: []]]], 268: []]]",
174 GetTreeState(&frame_tree)); 175 GetTreeState(&frame_tree));
175 } 176 }
176 177
177 } // namespace 178 } // namespace
178 } // namespace content 179 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/frame_tree_node.cc ('k') | content/browser/frame_host/interstitial_page_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698