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

Side by Side Diff: content/browser/web_contents/web_contents_impl_unittest.cc

Issue 23841002: Create a new RenderFrameHost per child frame when --site-per-process is enabled. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: notify observers regardless of flag Created 7 years, 2 months 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/logging.h" 5 #include "base/logging.h"
6 #include "base/strings/utf_string_conversions.h" 6 #include "base/strings/utf_string_conversions.h"
7 #include "content/browser/renderer_host/render_view_host_impl.h" 7 #include "content/browser/renderer_host/render_view_host_impl.h"
8 #include "content/browser/renderer_host/test_render_view_host.h" 8 #include "content/browser/renderer_host/test_render_view_host.h"
9 #include "content/browser/site_instance_impl.h" 9 #include "content/browser/site_instance_impl.h"
10 #include "content/browser/web_contents/frame_tree_node.h"
11 #include "content/browser/web_contents/interstitial_page_impl.h" 10 #include "content/browser/web_contents/interstitial_page_impl.h"
12 #include "content/browser/web_contents/navigation_entry_impl.h" 11 #include "content/browser/web_contents/navigation_entry_impl.h"
13 #include "content/browser/webui/web_ui_controller_factory_registry.h" 12 #include "content/browser/webui/web_ui_controller_factory_registry.h"
14 #include "content/common/view_messages.h" 13 #include "content/common/view_messages.h"
15 #include "content/public/browser/global_request_id.h" 14 #include "content/public/browser/global_request_id.h"
16 #include "content/public/browser/interstitial_page_delegate.h" 15 #include "content/public/browser/interstitial_page_delegate.h"
17 #include "content/public/browser/navigation_details.h" 16 #include "content/public/browser/navigation_details.h"
18 #include "content/public/browser/notification_details.h" 17 #include "content/public/browser/notification_details.h"
19 #include "content/public/browser/notification_source.h" 18 #include "content/public/browser/notification_source.h"
20 #include "content/public/browser/render_widget_host_view.h" 19 #include "content/public/browser/render_widget_host_view.h"
(...skipping 2116 matching lines...) Expand 10 before | Expand all | Expand 10 after
2137 // crash. 2136 // crash.
2138 TEST_F(WebContentsImplTest, PendingContents) { 2137 TEST_F(WebContentsImplTest, PendingContents) {
2139 scoped_ptr<TestWebContents> other_contents( 2138 scoped_ptr<TestWebContents> other_contents(
2140 static_cast<TestWebContents*>(CreateTestWebContents())); 2139 static_cast<TestWebContents*>(CreateTestWebContents()));
2141 contents()->AddPendingContents(other_contents.get()); 2140 contents()->AddPendingContents(other_contents.get());
2142 int route_id = other_contents->GetRenderViewHost()->GetRoutingID(); 2141 int route_id = other_contents->GetRenderViewHost()->GetRoutingID();
2143 other_contents.reset(); 2142 other_contents.reset();
2144 EXPECT_EQ(NULL, contents()->GetCreatedWindow(route_id)); 2143 EXPECT_EQ(NULL, contents()->GetCreatedWindow(route_id));
2145 } 2144 }
2146 2145
2147 // This test asserts the shape of the frame tree is correct, based on incoming
2148 // frame attached/detached messages.
2149 TEST_F(WebContentsImplTest, FrameTreeShape) {
2150 std::string no_children_node("no children node");
2151 std::string deep_subtree("node with deep subtree");
2152
2153 // The initial navigation will create a frame_tree_root_ node with the top
2154 // level frame id. Simulate that by just creating it here.
2155 contents()->frame_tree_root_.reset(
2156 new FrameTreeNode(5, std::string("top-level")));
2157
2158 // Let's send a series of messages for frame attached and build the
2159 // frame tree.
2160 contents()->OnFrameAttached(5, 14, std::string());
2161 contents()->OnFrameAttached(5, 15, std::string());
2162 contents()->OnFrameAttached(5, 16, std::string());
2163
2164 contents()->OnFrameAttached(14, 244, std::string());
2165 contents()->OnFrameAttached(14, 245, std::string());
2166
2167 contents()->OnFrameAttached(15, 255, no_children_node);
2168
2169 contents()->OnFrameAttached(16, 264, std::string());
2170 contents()->OnFrameAttached(16, 265, std::string());
2171 contents()->OnFrameAttached(16, 266, std::string());
2172 contents()->OnFrameAttached(16, 267, deep_subtree);
2173 contents()->OnFrameAttached(16, 268, std::string());
2174
2175 contents()->OnFrameAttached(267, 365, std::string());
2176 contents()->OnFrameAttached(365, 455, std::string());
2177 contents()->OnFrameAttached(455, 555, std::string());
2178 contents()->OnFrameAttached(555, 655, std::string());
2179
2180 // Now, verify the tree structure is as expected.
2181 FrameTreeNode* root = contents()->frame_tree_root_.get();
2182 EXPECT_EQ(5, root->frame_id());
2183 EXPECT_EQ(3UL, root->child_count());
2184
2185 EXPECT_EQ(2UL, root->child_at(0)->child_count());
2186 EXPECT_EQ(0UL, root->child_at(0)->child_at(0)->child_count());
2187 EXPECT_EQ(0UL, root->child_at(0)->child_at(1)->child_count());
2188
2189 EXPECT_EQ(1UL, root->child_at(1)->child_count());
2190 EXPECT_EQ(0UL, root->child_at(1)->child_at(0)->child_count());
2191 EXPECT_STREQ(no_children_node.c_str(),
2192 root->child_at(1)->child_at(0)->frame_name().c_str());
2193
2194 EXPECT_EQ(5UL, root->child_at(2)->child_count());
2195 EXPECT_EQ(0UL, root->child_at(2)->child_at(0)->child_count());
2196 EXPECT_EQ(0UL, root->child_at(2)->child_at(1)->child_count());
2197 EXPECT_EQ(0UL, root->child_at(2)->child_at(2)->child_count());
2198 EXPECT_EQ(1UL, root->child_at(2)->child_at(3)->child_count());
2199 EXPECT_STREQ(deep_subtree.c_str(),
2200 root->child_at(2)->child_at(3)->frame_name().c_str());
2201 EXPECT_EQ(0UL, root->child_at(2)->child_at(4)->child_count());
2202
2203 FrameTreeNode* deep_tree = root->child_at(2)->child_at(3)->child_at(0);
2204 EXPECT_EQ(365, deep_tree->frame_id());
2205 EXPECT_EQ(1UL, deep_tree->child_count());
2206 EXPECT_EQ(455, deep_tree->child_at(0)->frame_id());
2207 EXPECT_EQ(1UL, deep_tree->child_at(0)->child_count());
2208 EXPECT_EQ(555, deep_tree->child_at(0)->child_at(0)->frame_id());
2209 EXPECT_EQ(1UL, deep_tree->child_at(0)->child_at(0)->child_count());
2210 EXPECT_EQ(655, deep_tree->child_at(0)->child_at(0)->child_at(0)->frame_id());
2211 EXPECT_EQ(0UL,
2212 deep_tree->child_at(0)->child_at(0)->child_at(0)->child_count());
2213
2214 // Test removing of nodes.
2215 contents()->OnFrameDetached(555, 655);
2216 EXPECT_EQ(0UL, deep_tree->child_at(0)->child_at(0)->child_count());
2217
2218 contents()->OnFrameDetached(16, 265);
2219 EXPECT_EQ(4UL, root->child_at(2)->child_count());
2220
2221 contents()->OnFrameDetached(5, 15);
2222 EXPECT_EQ(2UL, root->child_count());
2223 }
2224
2225 } // namespace content 2146 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/web_contents/web_contents_impl_browsertest.cc ('k') | content/common/content_message_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698