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

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

Issue 1080073004: PlzNavigate: move ownership of the NavigationRequest to the FrameTreeNode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed compilation error Created 5 years, 8 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
« no previous file with comments | « content/browser/frame_host/navigator_impl.cc ('k') | content/test/test_render_frame_host.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/command_line.h" 5 #include "base/command_line.h"
6 #include "base/macros.h" 6 #include "base/macros.h"
7 #include "base/time/time.h" 7 #include "base/time/time.h"
8 #include "content/browser/frame_host/navigation_controller_impl.h" 8 #include "content/browser/frame_host/navigation_controller_impl.h"
9 #include "content/browser/frame_host/navigation_entry_impl.h" 9 #include "content/browser/frame_host/navigation_entry_impl.h"
10 #include "content/browser/frame_host/navigation_request.h" 10 #include "content/browser/frame_host/navigation_request.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 const Referrer& referrer, 61 const Referrer& referrer,
62 ui::PageTransition transition_type) { 62 ui::PageTransition transition_type) {
63 NavigationController::LoadURLParams load_params(url); 63 NavigationController::LoadURLParams load_params(url);
64 load_params.frame_tree_node_id = node->frame_tree_node_id(); 64 load_params.frame_tree_node_id = node->frame_tree_node_id();
65 load_params.referrer = referrer; 65 load_params.referrer = referrer;
66 load_params.transition_type = transition_type; 66 load_params.transition_type = transition_type;
67 67
68 controller().LoadURLWithParams(load_params); 68 controller().LoadURLWithParams(load_params);
69 } 69 }
70 70
71 NavigationRequest* GetNavigationRequestForFrameTreeNode(
72 FrameTreeNode* frame_tree_node) {
73 return static_cast<NavigatorImpl*>(frame_tree_node->navigator())
74 ->GetNavigationRequestForNodeForTesting(frame_tree_node);
75 }
76
77 TestRenderFrameHost* GetSpeculativeRenderFrameHost(FrameTreeNode* node) { 71 TestRenderFrameHost* GetSpeculativeRenderFrameHost(FrameTreeNode* node) {
78 return static_cast<TestRenderFrameHost*>( 72 return static_cast<TestRenderFrameHost*>(
79 node->render_manager()->speculative_render_frame_host_.get()); 73 node->render_manager()->speculative_render_frame_host_.get());
80 } 74 }
81 75
82 // Checks if this RenderFrameHost sent a single FrameMsg_CommitNavigation 76 // Checks if this RenderFrameHost sent a single FrameMsg_CommitNavigation
83 // since the last clearing of the sink. 77 // since the last clearing of the sink.
84 // Note: caller must invoke ClearMessages on the sink at some point before 78 // Note: caller must invoke ClearMessages on the sink at some point before
85 // the tracked commit happens to clear up commit messages from previous 79 // the tracked commit happens to clear up commit messages from previous
86 // navigations. 80 // navigations.
(...skipping 20 matching lines...) Expand all
107 TEST_F(NavigatorTestWithBrowserSideNavigation, 101 TEST_F(NavigatorTestWithBrowserSideNavigation,
108 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) { 102 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) {
109 const GURL kUrl("http://chromium.org/"); 103 const GURL kUrl("http://chromium.org/");
110 104
111 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); 105 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive());
112 106
113 // Start a browser-initiated navigation. 107 // Start a browser-initiated navigation.
114 int32 site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); 108 int32 site_instance_id = main_test_rfh()->GetSiteInstance()->GetId();
115 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 109 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
116 RequestNavigation(node, kUrl); 110 RequestNavigation(node, kUrl);
117 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); 111 NavigationRequest* request = node->navigation_request();
118 ASSERT_TRUE(request); 112 ASSERT_TRUE(request);
119 EXPECT_EQ(kUrl, request->common_params().url); 113 EXPECT_EQ(kUrl, request->common_params().url);
120 EXPECT_TRUE(request->browser_initiated()); 114 EXPECT_TRUE(request->browser_initiated());
121 115
122 // As there's no live renderer the navigation should not wait for a 116 // As there's no live renderer the navigation should not wait for a
123 // beforeUnload ACK from the renderer and start right away. 117 // beforeUnload ACK from the renderer and start right away.
124 EXPECT_EQ(NavigationRequest::STARTED, request->state()); 118 EXPECT_EQ(NavigationRequest::STARTED, request->state());
125 ASSERT_TRUE(GetLoaderForNavigationRequest(request)); 119 ASSERT_TRUE(GetLoaderForNavigationRequest(request));
126 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 120 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
127 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 121 EXPECT_FALSE(node->render_manager()->pending_frame_host());
128 122
129 // Have the current RenderFrameHost commit the navigation. 123 // Have the current RenderFrameHost commit the navigation.
130 scoped_refptr<ResourceResponse> response(new ResourceResponse); 124 scoped_refptr<ResourceResponse> response(new ResourceResponse);
131 GetLoaderForNavigationRequest(request) 125 GetLoaderForNavigationRequest(request)
132 ->CallOnResponseStarted(response, MakeEmptyStream()); 126 ->CallOnResponseStarted(response, MakeEmptyStream());
133 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); 127 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh()));
134 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); 128 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state());
135 129
136 // Commit the navigation. 130 // Commit the navigation.
137 main_test_rfh()->SendNavigate(0, kUrl); 131 main_test_rfh()->SendNavigate(0, kUrl);
138 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); 132 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state());
139 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), 133 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl),
140 main_test_rfh()->GetSiteInstance()->GetSiteURL()); 134 main_test_rfh()->GetSiteInstance()->GetSiteURL());
141 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); 135 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL());
142 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); 136 EXPECT_FALSE(node->navigation_request());
143 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 137 EXPECT_FALSE(node->render_manager()->pending_frame_host());
144 138
145 // The main RenderFrameHost should not have been changed, and the renderer 139 // The main RenderFrameHost should not have been changed, and the renderer
146 // should have been initialized. 140 // should have been initialized.
147 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); 141 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId());
148 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive()); 142 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive());
149 143
150 // After a navigation is finished no speculative RenderFrameHost should 144 // After a navigation is finished no speculative RenderFrameHost should
151 // exist. 145 // exist.
152 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 146 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
153 147
154 // With PlzNavigate enabled a pending RenderFrameHost should never exist. 148 // With PlzNavigate enabled a pending RenderFrameHost should never exist.
155 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 149 EXPECT_FALSE(node->render_manager()->pending_frame_host());
156 } 150 }
157 151
158 // PlzNavigate: Test a complete renderer-initiated same-site navigation. 152 // PlzNavigate: Test a complete renderer-initiated same-site navigation.
159 TEST_F(NavigatorTestWithBrowserSideNavigation, 153 TEST_F(NavigatorTestWithBrowserSideNavigation,
160 SimpleRendererInitiatedSameSiteNavigation) { 154 SimpleRendererInitiatedSameSiteNavigation) {
161 const GURL kUrl1("http://www.chromium.org/"); 155 const GURL kUrl1("http://www.chromium.org/");
162 const GURL kUrl2("http://www.chromium.org/Home"); 156 const GURL kUrl2("http://www.chromium.org/Home");
163 157
164 contents()->NavigateAndCommit(kUrl1); 158 contents()->NavigateAndCommit(kUrl1);
165 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive()); 159 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive());
166 160
167 // Start a renderer-initiated non-user-initiated navigation. 161 // Start a renderer-initiated non-user-initiated navigation.
168 process()->sink().ClearMessages(); 162 process()->sink().ClearMessages();
169 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); 163 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false);
170 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 164 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
171 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); 165 NavigationRequest* request = node->navigation_request();
172 ASSERT_TRUE(request); 166 ASSERT_TRUE(request);
173 167
174 // The navigation is immediately started as there's no need to wait for 168 // The navigation is immediately started as there's no need to wait for
175 // beforeUnload to be executed. 169 // beforeUnload to be executed.
176 EXPECT_EQ(NavigationRequest::STARTED, request->state()); 170 EXPECT_EQ(NavigationRequest::STARTED, request->state());
177 EXPECT_FALSE(request->begin_params().has_user_gesture); 171 EXPECT_FALSE(request->begin_params().has_user_gesture);
178 EXPECT_EQ(kUrl2, request->common_params().url); 172 EXPECT_EQ(kUrl2, request->common_params().url);
179 EXPECT_FALSE(request->browser_initiated()); 173 EXPECT_FALSE(request->browser_initiated());
180 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 174 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
181 175
182 // Have the current RenderFrameHost commit the navigation. 176 // Have the current RenderFrameHost commit the navigation.
183 scoped_refptr<ResourceResponse> response(new ResourceResponse); 177 scoped_refptr<ResourceResponse> response(new ResourceResponse);
184 GetLoaderForNavigationRequest(request) 178 GetLoaderForNavigationRequest(request)
185 ->CallOnResponseStarted(response, MakeEmptyStream()); 179 ->CallOnResponseStarted(response, MakeEmptyStream());
186 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); 180 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh()));
187 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); 181 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state());
188 182
189 // Commit the navigation. 183 // Commit the navigation.
190 main_test_rfh()->SendNavigate(0, kUrl2); 184 main_test_rfh()->SendNavigate(0, kUrl2);
191 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); 185 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state());
192 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), 186 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2),
193 main_test_rfh()->GetSiteInstance()->GetSiteURL()); 187 main_test_rfh()->GetSiteInstance()->GetSiteURL());
194 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); 188 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL());
195 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); 189 EXPECT_FALSE(node->navigation_request());
196 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 190 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
197 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 191 EXPECT_FALSE(node->render_manager()->pending_frame_host());
198 } 192 }
199 193
200 // PlzNavigate: Test a complete renderer-initiated navigation that should be 194 // PlzNavigate: Test a complete renderer-initiated navigation that should be
201 // cross-site but does not result in a SiteInstance swap because its 195 // cross-site but does not result in a SiteInstance swap because its
202 // renderer-initiated. 196 // renderer-initiated.
203 TEST_F(NavigatorTestWithBrowserSideNavigation, 197 TEST_F(NavigatorTestWithBrowserSideNavigation,
204 SimpleRendererInitiatedCrossSiteNavigation) { 198 SimpleRendererInitiatedCrossSiteNavigation) {
205 const GURL kUrl1("http://www.chromium.org/"); 199 const GURL kUrl1("http://www.chromium.org/");
206 const GURL kUrl2("http://www.google.com"); 200 const GURL kUrl2("http://www.google.com");
207 201
208 contents()->NavigateAndCommit(kUrl1); 202 contents()->NavigateAndCommit(kUrl1);
209 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive()); 203 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive());
210 int32 site_instance_id_1 = main_test_rfh()->GetSiteInstance()->GetId(); 204 int32 site_instance_id_1 = main_test_rfh()->GetSiteInstance()->GetId();
211 205
212 // Start a renderer-initiated non-user-initiated navigation. 206 // Start a renderer-initiated non-user-initiated navigation.
213 process()->sink().ClearMessages(); 207 process()->sink().ClearMessages();
214 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); 208 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false);
215 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 209 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
216 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); 210 NavigationRequest* request = node->navigation_request();
217 ASSERT_TRUE(request); 211 ASSERT_TRUE(request);
218 212
219 // The navigation is immediately started as there's no need to wait for 213 // The navigation is immediately started as there's no need to wait for
220 // beforeUnload to be executed. 214 // beforeUnload to be executed.
221 EXPECT_EQ(NavigationRequest::STARTED, request->state()); 215 EXPECT_EQ(NavigationRequest::STARTED, request->state());
222 EXPECT_FALSE(request->begin_params().has_user_gesture); 216 EXPECT_FALSE(request->begin_params().has_user_gesture);
223 EXPECT_EQ(kUrl2, request->common_params().url); 217 EXPECT_EQ(kUrl2, request->common_params().url);
224 EXPECT_FALSE(request->browser_initiated()); 218 EXPECT_FALSE(request->browser_initiated());
225 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 219 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
226 220
227 // Have the current RenderFrameHost commit the navigation. 221 // Have the current RenderFrameHost commit the navigation.
228 scoped_refptr<ResourceResponse> response(new ResourceResponse); 222 scoped_refptr<ResourceResponse> response(new ResourceResponse);
229 GetLoaderForNavigationRequest(request) 223 GetLoaderForNavigationRequest(request)
230 ->CallOnResponseStarted(response, MakeEmptyStream()); 224 ->CallOnResponseStarted(response, MakeEmptyStream());
231 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); 225 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh()));
232 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); 226 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state());
233 227
234 // Commit the navigation. 228 // Commit the navigation.
235 main_test_rfh()->SendNavigate(0, kUrl2); 229 main_test_rfh()->SendNavigate(0, kUrl2);
236 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); 230 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state());
237 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); 231 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL());
238 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); 232 EXPECT_FALSE(node->navigation_request());
239 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 233 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
240 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 234 EXPECT_FALSE(node->render_manager()->pending_frame_host());
241 235
242 // The SiteInstance did not change. 236 // The SiteInstance did not change.
243 EXPECT_EQ(site_instance_id_1, main_test_rfh()->GetSiteInstance()->GetId()); 237 EXPECT_EQ(site_instance_id_1, main_test_rfh()->GetSiteInstance()->GetId());
244 } 238 }
245 239
246 // PlzNavigate: Test that a beforeUnload denial cancels the navigation. 240 // PlzNavigate: Test that a beforeUnload denial cancels the navigation.
247 TEST_F(NavigatorTestWithBrowserSideNavigation, 241 TEST_F(NavigatorTestWithBrowserSideNavigation,
248 BeforeUnloadDenialCancelNavigation) { 242 BeforeUnloadDenialCancelNavigation) {
249 const GURL kUrl1("http://www.google.com/"); 243 const GURL kUrl1("http://www.google.com/");
250 const GURL kUrl2("http://www.chromium.org/"); 244 const GURL kUrl2("http://www.chromium.org/");
251 245
252 contents()->NavigateAndCommit(kUrl1); 246 contents()->NavigateAndCommit(kUrl1);
253 247
254 // Start a new navigation. 248 // Start a new navigation.
255 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 249 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
256 RequestNavigation(node, kUrl2); 250 RequestNavigation(node, kUrl2);
257 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); 251 NavigationRequest* request = node->navigation_request();
258 ASSERT_TRUE(request); 252 ASSERT_TRUE(request);
259 EXPECT_TRUE(request->browser_initiated()); 253 EXPECT_TRUE(request->browser_initiated());
260 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, request->state()); 254 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, request->state());
261 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 255 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
262 256
263 // Simulate a beforeUnload denial. 257 // Simulate a beforeUnload denial.
264 main_test_rfh()->SendBeforeUnloadACK(false); 258 main_test_rfh()->SendBeforeUnloadACK(false);
265 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); 259 EXPECT_FALSE(node->navigation_request());
266 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 260 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
267 } 261 }
268 262
269 // PlzNavigate: Test that a proper NavigationRequest is created by 263 // PlzNavigate: Test that a proper NavigationRequest is created by
270 // RequestNavigation. 264 // RequestNavigation.
271 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) { 265 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) {
272 const GURL kUrl1("http://www.google.com/"); 266 const GURL kUrl1("http://www.google.com/");
273 const GURL kUrl2("http://www.chromium.org/"); 267 const GURL kUrl2("http://www.chromium.org/");
274 const GURL kUrl3("http://www.gmail.com/"); 268 const GURL kUrl3("http://www.gmail.com/");
275 269
276 contents()->NavigateAndCommit(kUrl1); 270 contents()->NavigateAndCommit(kUrl1);
277 271
278 // Add a subframe. 272 // Add a subframe.
279 FrameTreeNode* root_node = contents()->GetFrameTree()->root(); 273 FrameTreeNode* root_node = contents()->GetFrameTree()->root();
280 TestRenderFrameHost* subframe_rfh = main_test_rfh()->AppendChild("Child"); 274 TestRenderFrameHost* subframe_rfh = main_test_rfh()->AppendChild("Child");
281 ASSERT_TRUE(subframe_rfh); 275 ASSERT_TRUE(subframe_rfh);
282 276
283 // Start a navigation at the subframe. 277 // Start a navigation at the subframe.
284 FrameTreeNode* subframe_node = subframe_rfh->frame_tree_node(); 278 FrameTreeNode* subframe_node = subframe_rfh->frame_tree_node();
285 RequestNavigation(subframe_node, kUrl2); 279 RequestNavigation(subframe_node, kUrl2);
286 NavigationRequest* subframe_request = 280 NavigationRequest* subframe_request = subframe_node->navigation_request();
287 GetNavigationRequestForFrameTreeNode(subframe_node);
288 TestNavigationURLLoader* subframe_loader = 281 TestNavigationURLLoader* subframe_loader =
289 GetLoaderForNavigationRequest(subframe_request); 282 GetLoaderForNavigationRequest(subframe_request);
290 283
291 // Subframe navigations should start right away as they don't have to request 284 // Subframe navigations should start right away as they don't have to request
292 // beforeUnload to run at the renderer. 285 // beforeUnload to run at the renderer.
293 ASSERT_TRUE(subframe_request); 286 ASSERT_TRUE(subframe_request);
294 ASSERT_TRUE(subframe_loader); 287 ASSERT_TRUE(subframe_loader);
295 EXPECT_EQ(NavigationRequest::STARTED, subframe_request->state()); 288 EXPECT_EQ(NavigationRequest::STARTED, subframe_request->state());
296 EXPECT_EQ(kUrl2, subframe_request->common_params().url); 289 EXPECT_EQ(kUrl2, subframe_request->common_params().url);
297 EXPECT_EQ(kUrl2, subframe_loader->request_info()->common_params.url); 290 EXPECT_EQ(kUrl2, subframe_loader->request_info()->common_params.url);
298 // First party for cookies url should be that of the main frame. 291 // First party for cookies url should be that of the main frame.
299 EXPECT_EQ(kUrl1, subframe_loader->request_info()->first_party_for_cookies); 292 EXPECT_EQ(kUrl1, subframe_loader->request_info()->first_party_for_cookies);
300 EXPECT_FALSE(subframe_loader->request_info()->is_main_frame); 293 EXPECT_FALSE(subframe_loader->request_info()->is_main_frame);
301 EXPECT_TRUE(subframe_loader->request_info()->parent_is_main_frame); 294 EXPECT_TRUE(subframe_loader->request_info()->parent_is_main_frame);
302 EXPECT_TRUE(subframe_request->browser_initiated()); 295 EXPECT_TRUE(subframe_request->browser_initiated());
303 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node)); 296 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node));
304 297
305 // Subframe navigations should never create a speculative RenderFrameHost, 298 // Subframe navigations should never create a speculative RenderFrameHost,
306 // unless site-per-process is enabled. In that case, as the subframe 299 // unless site-per-process is enabled. In that case, as the subframe
307 // navigation is to a different site and is still ongoing, it should have one. 300 // navigation is to a different site and is still ongoing, it should have one.
308 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 301 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
309 switches::kSitePerProcess)) { 302 switches::kSitePerProcess)) {
310 EXPECT_TRUE(GetSpeculativeRenderFrameHost(subframe_node)); 303 EXPECT_TRUE(GetSpeculativeRenderFrameHost(subframe_node));
311 } else { 304 } else {
312 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node)); 305 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node));
313 } 306 }
314 307
315 // Now start a navigation at the root node. 308 // Now start a navigation at the root node.
316 RequestNavigation(root_node, kUrl3); 309 RequestNavigation(root_node, kUrl3);
317 NavigationRequest* main_request = 310 NavigationRequest* main_request = root_node->navigation_request();
318 GetNavigationRequestForFrameTreeNode(root_node);
319 ASSERT_TRUE(main_request); 311 ASSERT_TRUE(main_request);
320 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, 312 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE,
321 main_request->state()); 313 main_request->state());
322 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node)); 314 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node));
323 315
324 // Simulate a BeforeUnloadACK IPC on the main frame. 316 // Simulate a BeforeUnloadACK IPC on the main frame.
325 main_test_rfh()->SendBeforeUnloadACK(true); 317 main_test_rfh()->SendBeforeUnloadACK(true);
326 TestNavigationURLLoader* main_loader = 318 TestNavigationURLLoader* main_loader =
327 GetLoaderForNavigationRequest(main_request); 319 GetLoaderForNavigationRequest(main_request);
328 EXPECT_EQ(kUrl3, main_request->common_params().url); 320 EXPECT_EQ(kUrl3, main_request->common_params().url);
(...skipping 28 matching lines...) Expand all
357 349
358 // Load a URL. 350 // Load a URL.
359 contents()->NavigateAndCommit(kUrl1); 351 contents()->NavigateAndCommit(kUrl1);
360 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 352 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
361 353
362 // Navigate to a different site. 354 // Navigate to a different site.
363 process()->sink().ClearMessages(); 355 process()->sink().ClearMessages();
364 RequestNavigation(node, kUrl2); 356 RequestNavigation(node, kUrl2);
365 main_test_rfh()->SendBeforeUnloadACK(true); 357 main_test_rfh()->SendBeforeUnloadACK(true);
366 358
367 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); 359 NavigationRequest* main_request = node->navigation_request();
368 ASSERT_TRUE(main_request); 360 ASSERT_TRUE(main_request);
369 361
370 // Navigations to a different site do create a speculative RenderFrameHost. 362 // Navigations to a different site do create a speculative RenderFrameHost.
371 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); 363 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
372 364
373 // Commit an HTTP 204 response. 365 // Commit an HTTP 204 response.
374 scoped_refptr<ResourceResponse> response(new ResourceResponse); 366 scoped_refptr<ResourceResponse> response(new ResourceResponse);
375 const char kNoContentHeaders[] = "HTTP/1.1 204 No Content\0\0"; 367 const char kNoContentHeaders[] = "HTTP/1.1 204 No Content\0\0";
376 response->head.headers = new net::HttpResponseHeaders( 368 response->head.headers = new net::HttpResponseHeaders(
377 std::string(kNoContentHeaders, arraysize(kNoContentHeaders))); 369 std::string(kNoContentHeaders, arraysize(kNoContentHeaders)));
378 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( 370 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted(
379 response, MakeEmptyStream()); 371 response, MakeEmptyStream());
380 372
381 // There should be no pending nor speculative RenderFrameHost; the navigation 373 // There should be no pending nor speculative RenderFrameHost; the navigation
382 // was aborted. 374 // was aborted.
383 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); 375 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh()));
384 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); 376 EXPECT_FALSE(node->navigation_request());
385 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 377 EXPECT_FALSE(node->render_manager()->pending_frame_host());
386 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 378 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
387 379
388 // Now, repeat the test with 205 Reset Content. 380 // Now, repeat the test with 205 Reset Content.
389 381
390 // Navigate to a different site again. 382 // Navigate to a different site again.
391 process()->sink().ClearMessages(); 383 process()->sink().ClearMessages();
392 RequestNavigation(node, kUrl2); 384 RequestNavigation(node, kUrl2);
393 main_test_rfh()->SendBeforeUnloadACK(true); 385 main_test_rfh()->SendBeforeUnloadACK(true);
394 386
395 main_request = GetNavigationRequestForFrameTreeNode(node); 387 main_request = node->navigation_request();
396 ASSERT_TRUE(main_request); 388 ASSERT_TRUE(main_request);
397 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); 389 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
398 390
399 // Commit an HTTP 205 response. 391 // Commit an HTTP 205 response.
400 response = new ResourceResponse; 392 response = new ResourceResponse;
401 const char kResetContentHeaders[] = "HTTP/1.1 205 Reset Content\0\0"; 393 const char kResetContentHeaders[] = "HTTP/1.1 205 Reset Content\0\0";
402 response->head.headers = new net::HttpResponseHeaders( 394 response->head.headers = new net::HttpResponseHeaders(
403 std::string(kResetContentHeaders, arraysize(kResetContentHeaders))); 395 std::string(kResetContentHeaders, arraysize(kResetContentHeaders)));
404 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( 396 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted(
405 response, MakeEmptyStream()); 397 response, MakeEmptyStream());
406 398
407 // There should be no pending nor speculative RenderFrameHost; the navigation 399 // There should be no pending nor speculative RenderFrameHost; the navigation
408 // was aborted. 400 // was aborted.
409 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); 401 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh()));
410 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); 402 EXPECT_FALSE(node->navigation_request());
411 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 403 EXPECT_FALSE(node->render_manager()->pending_frame_host());
412 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 404 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
413 } 405 }
414 406
415 // PlzNavigate: Test that a new RenderFrameHost is created when doing a cross 407 // PlzNavigate: Test that a new RenderFrameHost is created when doing a cross
416 // site navigation. 408 // site navigation.
417 TEST_F(NavigatorTestWithBrowserSideNavigation, CrossSiteNavigation) { 409 TEST_F(NavigatorTestWithBrowserSideNavigation, CrossSiteNavigation) {
418 const GURL kUrl1("http://www.chromium.org/"); 410 const GURL kUrl1("http://www.chromium.org/");
419 const GURL kUrl2("http://www.google.com/"); 411 const GURL kUrl2("http://www.google.com/");
420 412
421 contents()->NavigateAndCommit(kUrl1); 413 contents()->NavigateAndCommit(kUrl1);
422 RenderFrameHostImpl* initial_rfh = main_test_rfh(); 414 RenderFrameHostImpl* initial_rfh = main_test_rfh();
423 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 415 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
424 416
425 // Navigate to a different site. 417 // Navigate to a different site.
426 process()->sink().ClearMessages(); 418 process()->sink().ClearMessages();
427 RequestNavigation(node, kUrl2); 419 RequestNavigation(node, kUrl2);
428 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); 420 NavigationRequest* main_request = node->navigation_request();
429 ASSERT_TRUE(main_request); 421 ASSERT_TRUE(main_request);
430 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 422 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
431 423
432 // Receive the beforeUnload ACK. 424 // Receive the beforeUnload ACK.
433 main_test_rfh()->SendBeforeUnloadACK(true); 425 main_test_rfh()->SendBeforeUnloadACK(true);
434 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); 426 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
435 427
436 scoped_refptr<ResourceResponse> response(new ResourceResponse); 428 scoped_refptr<ResourceResponse> response(new ResourceResponse);
437 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( 429 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted(
438 response, MakeEmptyStream()); 430 response, MakeEmptyStream());
(...skipping 19 matching lines...) Expand all
458 const GURL kUrl2("http://www.google.com/"); 450 const GURL kUrl2("http://www.google.com/");
459 451
460 contents()->NavigateAndCommit(kUrl1); 452 contents()->NavigateAndCommit(kUrl1);
461 RenderFrameHostImpl* rfh = main_test_rfh(); 453 RenderFrameHostImpl* rfh = main_test_rfh();
462 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 454 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
463 455
464 // Navigate to a URL on the same site. 456 // Navigate to a URL on the same site.
465 process()->sink().ClearMessages(); 457 process()->sink().ClearMessages();
466 RequestNavigation(node, kUrl1); 458 RequestNavigation(node, kUrl1);
467 main_test_rfh()->SendBeforeUnloadACK(true); 459 main_test_rfh()->SendBeforeUnloadACK(true);
468 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); 460 NavigationRequest* main_request = node->navigation_request();
469 ASSERT_TRUE(main_request); 461 ASSERT_TRUE(main_request);
470 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 462 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
471 463
472 // It then redirects to another site. 464 // It then redirects to another site.
473 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); 465 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2);
474 466
475 // The redirect should have been followed. 467 // The redirect should have been followed.
476 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); 468 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count());
477 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 469 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
478 470
(...skipping 29 matching lines...) Expand all
508 const GURL kUrl2_site = SiteInstance::GetSiteForURL(browser_context(), kUrl2); 500 const GURL kUrl2_site = SiteInstance::GetSiteForURL(browser_context(), kUrl2);
509 501
510 // Initialization. 502 // Initialization.
511 contents()->NavigateAndCommit(kUrl0); 503 contents()->NavigateAndCommit(kUrl0);
512 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 504 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
513 505
514 // Request navigation to the 1st URL. 506 // Request navigation to the 1st URL.
515 process()->sink().ClearMessages(); 507 process()->sink().ClearMessages();
516 RequestNavigation(node, kUrl1); 508 RequestNavigation(node, kUrl1);
517 main_test_rfh()->SendBeforeUnloadACK(true); 509 main_test_rfh()->SendBeforeUnloadACK(true);
518 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); 510 NavigationRequest* request1 = node->navigation_request();
519 ASSERT_TRUE(request1); 511 ASSERT_TRUE(request1);
520 EXPECT_EQ(kUrl1, request1->common_params().url); 512 EXPECT_EQ(kUrl1, request1->common_params().url);
521 EXPECT_TRUE(request1->browser_initiated()); 513 EXPECT_TRUE(request1->browser_initiated());
522 base::WeakPtr<TestNavigationURLLoader> loader1 = 514 base::WeakPtr<TestNavigationURLLoader> loader1 =
523 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); 515 GetLoaderForNavigationRequest(request1)->AsWeakPtr();
524 EXPECT_TRUE(loader1); 516 EXPECT_TRUE(loader1);
525 517
526 // Confirm a speculative RenderFrameHost was created. 518 // Confirm a speculative RenderFrameHost was created.
527 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); 519 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node);
528 ASSERT_TRUE(speculative_rfh); 520 ASSERT_TRUE(speculative_rfh);
529 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId(); 521 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId();
530 EXPECT_EQ(kUrl1_site, speculative_rfh->GetSiteInstance()->GetSiteURL()); 522 EXPECT_EQ(kUrl1_site, speculative_rfh->GetSiteInstance()->GetSiteURL());
531 523
532 // Request navigation to the 2nd URL; the NavigationRequest must have been 524 // Request navigation to the 2nd URL; the NavigationRequest must have been
533 // replaced by a new one with a different URL. 525 // replaced by a new one with a different URL.
534 RequestNavigation(node, kUrl2); 526 RequestNavigation(node, kUrl2);
535 main_test_rfh()->SendBeforeUnloadACK(true); 527 main_test_rfh()->SendBeforeUnloadACK(true);
536 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); 528 NavigationRequest* request2 = node->navigation_request();
537 ASSERT_TRUE(request2); 529 ASSERT_TRUE(request2);
538 EXPECT_EQ(kUrl2, request2->common_params().url); 530 EXPECT_EQ(kUrl2, request2->common_params().url);
539 EXPECT_TRUE(request2->browser_initiated()); 531 EXPECT_TRUE(request2->browser_initiated());
540 532
541 // Confirm that the first loader got destroyed. 533 // Confirm that the first loader got destroyed.
542 EXPECT_FALSE(loader1); 534 EXPECT_FALSE(loader1);
543 535
544 // Confirm that a new speculative RenderFrameHost was created. 536 // Confirm that a new speculative RenderFrameHost was created.
545 speculative_rfh = GetSpeculativeRenderFrameHost(node); 537 speculative_rfh = GetSpeculativeRenderFrameHost(node);
546 ASSERT_TRUE(speculative_rfh); 538 ASSERT_TRUE(speculative_rfh);
(...skipping 29 matching lines...) Expand all
576 568
577 // Initialization. 569 // Initialization.
578 contents()->NavigateAndCommit(kUrl0); 570 contents()->NavigateAndCommit(kUrl0);
579 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 571 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
580 572
581 // Start a browser-initiated navigation to the 1st URL and receive its 573 // Start a browser-initiated navigation to the 1st URL and receive its
582 // beforeUnload ACK. 574 // beforeUnload ACK.
583 process()->sink().ClearMessages(); 575 process()->sink().ClearMessages();
584 RequestNavigation(node, kUrl1); 576 RequestNavigation(node, kUrl1);
585 main_test_rfh()->SendBeforeUnloadACK(true); 577 main_test_rfh()->SendBeforeUnloadACK(true);
586 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); 578 NavigationRequest* request1 = node->navigation_request();
587 ASSERT_TRUE(request1); 579 ASSERT_TRUE(request1);
588 EXPECT_EQ(kUrl1, request1->common_params().url); 580 EXPECT_EQ(kUrl1, request1->common_params().url);
589 EXPECT_TRUE(request1->browser_initiated()); 581 EXPECT_TRUE(request1->browser_initiated());
590 base::WeakPtr<TestNavigationURLLoader> loader1 = 582 base::WeakPtr<TestNavigationURLLoader> loader1 =
591 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); 583 GetLoaderForNavigationRequest(request1)->AsWeakPtr();
592 EXPECT_TRUE(loader1); 584 EXPECT_TRUE(loader1);
593 585
594 // Confirm that a speculative RenderFrameHost was created. 586 // Confirm that a speculative RenderFrameHost was created.
595 ASSERT_TRUE(GetSpeculativeRenderFrameHost(node)); 587 ASSERT_TRUE(GetSpeculativeRenderFrameHost(node));
596 588
597 // Now receive a renderer-initiated user-initiated request. It should replace 589 // Now receive a renderer-initiated user-initiated request. It should replace
598 // the current NavigationRequest. 590 // the current NavigationRequest.
599 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, true); 591 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, true);
600 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); 592 NavigationRequest* request2 = node->navigation_request();
601 ASSERT_TRUE(request2); 593 ASSERT_TRUE(request2);
602 EXPECT_EQ(kUrl2, request2->common_params().url); 594 EXPECT_EQ(kUrl2, request2->common_params().url);
603 EXPECT_FALSE(request2->browser_initiated()); 595 EXPECT_FALSE(request2->browser_initiated());
604 EXPECT_TRUE(request2->begin_params().has_user_gesture); 596 EXPECT_TRUE(request2->begin_params().has_user_gesture);
605 597
606 // Confirm that the first loader got destroyed. 598 // Confirm that the first loader got destroyed.
607 EXPECT_FALSE(loader1); 599 EXPECT_FALSE(loader1);
608 600
609 // Confirm that the speculative RenderFrameHost was destroyed. 601 // Confirm that the speculative RenderFrameHost was destroyed.
610 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 602 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
(...skipping 21 matching lines...) Expand all
632 const GURL kUrl1("http://www.chromium.org/"); 624 const GURL kUrl1("http://www.chromium.org/");
633 const GURL kUrl2("http://www.google.com/"); 625 const GURL kUrl2("http://www.google.com/");
634 626
635 // Initialization. 627 // Initialization.
636 contents()->NavigateAndCommit(kUrl0); 628 contents()->NavigateAndCommit(kUrl0);
637 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 629 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
638 630
639 // Start a renderer-initiated user-initiated navigation to the 1st URL. 631 // Start a renderer-initiated user-initiated navigation to the 1st URL.
640 process()->sink().ClearMessages(); 632 process()->sink().ClearMessages();
641 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, true); 633 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, true);
642 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); 634 NavigationRequest* request1 = node->navigation_request();
643 ASSERT_TRUE(request1); 635 ASSERT_TRUE(request1);
644 EXPECT_EQ(kUrl1, request1->common_params().url); 636 EXPECT_EQ(kUrl1, request1->common_params().url);
645 EXPECT_FALSE(request1->browser_initiated()); 637 EXPECT_FALSE(request1->browser_initiated());
646 EXPECT_TRUE(request1->begin_params().has_user_gesture); 638 EXPECT_TRUE(request1->begin_params().has_user_gesture);
647 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 639 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
648 640
649 // Now receive a renderer-initiated non-user-initiated request. Nothing should 641 // Now receive a renderer-initiated non-user-initiated request. Nothing should
650 // change. 642 // change.
651 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); 643 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false);
652 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); 644 NavigationRequest* request2 = node->navigation_request();
653 ASSERT_TRUE(request2); 645 ASSERT_TRUE(request2);
654 EXPECT_EQ(request1, request2); 646 EXPECT_EQ(request1, request2);
655 EXPECT_EQ(kUrl1, request2->common_params().url); 647 EXPECT_EQ(kUrl1, request2->common_params().url);
656 EXPECT_FALSE(request2->browser_initiated()); 648 EXPECT_FALSE(request2->browser_initiated());
657 EXPECT_TRUE(request2->begin_params().has_user_gesture); 649 EXPECT_TRUE(request2->begin_params().has_user_gesture);
658 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 650 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
659 651
660 // Have the RenderFrameHost commit the navigation. 652 // Have the RenderFrameHost commit the navigation.
661 scoped_refptr<ResourceResponse> response(new ResourceResponse); 653 scoped_refptr<ResourceResponse> response(new ResourceResponse);
662 GetLoaderForNavigationRequest(request2) 654 GetLoaderForNavigationRequest(request2)
(...skipping 13 matching lines...) Expand all
676 const GURL kUrl1("http://www.chromium.org/"); 668 const GURL kUrl1("http://www.chromium.org/");
677 const GURL kUrl2("http://www.google.com/"); 669 const GURL kUrl2("http://www.google.com/");
678 670
679 // Initialization. 671 // Initialization.
680 contents()->NavigateAndCommit(kUrl0); 672 contents()->NavigateAndCommit(kUrl0);
681 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 673 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
682 674
683 // Start a browser-initiated navigation to the 1st URL. 675 // Start a browser-initiated navigation to the 1st URL.
684 process()->sink().ClearMessages(); 676 process()->sink().ClearMessages();
685 RequestNavigation(node, kUrl1); 677 RequestNavigation(node, kUrl1);
686 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); 678 NavigationRequest* request1 = node->navigation_request();
687 ASSERT_TRUE(request1); 679 ASSERT_TRUE(request1);
688 EXPECT_EQ(kUrl1, request1->common_params().url); 680 EXPECT_EQ(kUrl1, request1->common_params().url);
689 EXPECT_TRUE(request1->browser_initiated()); 681 EXPECT_TRUE(request1->browser_initiated());
690 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 682 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
691 683
692 // Now receive a renderer-initiated non-user-initiated request. Nothing should 684 // Now receive a renderer-initiated non-user-initiated request. Nothing should
693 // change. 685 // change.
694 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); 686 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false);
695 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); 687 NavigationRequest* request2 = node->navigation_request();
696 ASSERT_TRUE(request2); 688 ASSERT_TRUE(request2);
697 EXPECT_EQ(request1, request2); 689 EXPECT_EQ(request1, request2);
698 EXPECT_EQ(kUrl1, request2->common_params().url); 690 EXPECT_EQ(kUrl1, request2->common_params().url);
699 EXPECT_TRUE(request2->browser_initiated()); 691 EXPECT_TRUE(request2->browser_initiated());
700 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 692 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
701 693
702 // Now receive the beforeUnload ACK from the still ongoing navigation. 694 // Now receive the beforeUnload ACK from the still ongoing navigation.
703 main_test_rfh()->SendBeforeUnloadACK(true); 695 main_test_rfh()->SendBeforeUnloadACK(true);
704 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); 696 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node);
705 ASSERT_TRUE(speculative_rfh); 697 ASSERT_TRUE(speculative_rfh);
(...skipping 19 matching lines...) Expand all
725 const GURL kUrl2("http://www.google.com/"); 717 const GURL kUrl2("http://www.google.com/");
726 718
727 // Initialization. 719 // Initialization.
728 contents()->NavigateAndCommit(kUrl0); 720 contents()->NavigateAndCommit(kUrl0);
729 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 721 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
730 int32 site_instance_id_0 = main_test_rfh()->GetSiteInstance()->GetId(); 722 int32 site_instance_id_0 = main_test_rfh()->GetSiteInstance()->GetId();
731 723
732 // Start a renderer-initiated non-user-initiated navigation to the 1st URL. 724 // Start a renderer-initiated non-user-initiated navigation to the 1st URL.
733 process()->sink().ClearMessages(); 725 process()->sink().ClearMessages();
734 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, false); 726 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, false);
735 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); 727 NavigationRequest* request1 = node->navigation_request();
736 ASSERT_TRUE(request1); 728 ASSERT_TRUE(request1);
737 EXPECT_EQ(kUrl1, request1->common_params().url); 729 EXPECT_EQ(kUrl1, request1->common_params().url);
738 EXPECT_FALSE(request1->browser_initiated()); 730 EXPECT_FALSE(request1->browser_initiated());
739 EXPECT_FALSE(request1->begin_params().has_user_gesture); 731 EXPECT_FALSE(request1->begin_params().has_user_gesture);
740 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 732 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
741 base::WeakPtr<TestNavigationURLLoader> loader1 = 733 base::WeakPtr<TestNavigationURLLoader> loader1 =
742 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); 734 GetLoaderForNavigationRequest(request1)->AsWeakPtr();
743 EXPECT_TRUE(loader1); 735 EXPECT_TRUE(loader1);
744 736
745 // Now receive a 2nd similar request that should replace the current one. 737 // Now receive a 2nd similar request that should replace the current one.
746 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); 738 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false);
747 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); 739 NavigationRequest* request2 = node->navigation_request();
748 EXPECT_EQ(kUrl2, request2->common_params().url); 740 EXPECT_EQ(kUrl2, request2->common_params().url);
749 EXPECT_FALSE(request2->browser_initiated()); 741 EXPECT_FALSE(request2->browser_initiated());
750 EXPECT_FALSE(request2->begin_params().has_user_gesture); 742 EXPECT_FALSE(request2->begin_params().has_user_gesture);
751 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 743 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
752 744
753 // Confirm that the first loader got destroyed. 745 // Confirm that the first loader got destroyed.
754 EXPECT_FALSE(loader1); 746 EXPECT_FALSE(loader1);
755 747
756 // Have the RenderFrameHost commit the navigation. 748 // Have the RenderFrameHost commit the navigation.
757 scoped_refptr<ResourceResponse> response(new ResourceResponse); 749 scoped_refptr<ResourceResponse> response(new ResourceResponse);
(...skipping 12 matching lines...) Expand all
770 // PlzNavigate: Test that a reload navigation is properly signaled to the 762 // PlzNavigate: Test that a reload navigation is properly signaled to the
771 // RenderFrame when the navigation can commit. A speculative RenderFrameHost 763 // RenderFrame when the navigation can commit. A speculative RenderFrameHost
772 // should not be created at any step. 764 // should not be created at any step.
773 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { 765 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) {
774 const GURL kUrl("http://www.google.com/"); 766 const GURL kUrl("http://www.google.com/");
775 contents()->NavigateAndCommit(kUrl); 767 contents()->NavigateAndCommit(kUrl);
776 768
777 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 769 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
778 controller().Reload(false); 770 controller().Reload(false);
779 // A NavigationRequest should have been generated. 771 // A NavigationRequest should have been generated.
780 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); 772 NavigationRequest* main_request = node->navigation_request();
781 ASSERT_TRUE(main_request != NULL); 773 ASSERT_TRUE(main_request != NULL);
782 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, 774 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD,
783 main_request->common_params().navigation_type); 775 main_request->common_params().navigation_type);
784 main_test_rfh()->PrepareForCommit(); 776 main_test_rfh()->PrepareForCommit();
785 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 777 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
786 778
787 main_test_rfh()->SendNavigate(0, kUrl); 779 main_test_rfh()->SendNavigate(0, kUrl);
788 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 780 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
789 781
790 // Now do a shift+reload. 782 // Now do a shift+reload.
791 controller().ReloadIgnoringCache(false); 783 controller().ReloadIgnoringCache(false);
792 // A NavigationRequest should have been generated. 784 // A NavigationRequest should have been generated.
793 main_request = GetNavigationRequestForFrameTreeNode(node); 785 main_request = node->navigation_request();
794 ASSERT_TRUE(main_request != NULL); 786 ASSERT_TRUE(main_request != NULL);
795 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, 787 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE,
796 main_request->common_params().navigation_type); 788 main_request->common_params().navigation_type);
797 main_test_rfh()->PrepareForCommit(); 789 main_test_rfh()->PrepareForCommit();
798 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 790 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
799 } 791 }
800 792
801 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when 793 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when
802 // navigating from one site to another. 794 // navigating from one site to another.
803 TEST_F(NavigatorTestWithBrowserSideNavigation, 795 TEST_F(NavigatorTestWithBrowserSideNavigation,
(...skipping 15 matching lines...) Expand all
819 ASSERT_TRUE(speculative_rfh); 811 ASSERT_TRUE(speculative_rfh);
820 EXPECT_NE(speculative_rfh, main_test_rfh()); 812 EXPECT_NE(speculative_rfh, main_test_rfh());
821 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), 813 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl),
822 speculative_rfh->GetSiteInstance()->GetSiteURL()); 814 speculative_rfh->GetSiteInstance()->GetSiteURL());
823 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 815 EXPECT_FALSE(node->render_manager()->pending_frame_host());
824 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); 816 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId();
825 817
826 // Ask Navigator to commit the navigation by simulating a call to 818 // Ask Navigator to commit the navigation by simulating a call to
827 // OnResponseStarted. 819 // OnResponseStarted.
828 scoped_refptr<ResourceResponse> response(new ResourceResponse); 820 scoped_refptr<ResourceResponse> response(new ResourceResponse);
829 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) 821 GetLoaderForNavigationRequest(node->navigation_request())
830 ->CallOnResponseStarted(response, MakeEmptyStream()); 822 ->CallOnResponseStarted(response, MakeEmptyStream());
831 speculative_rfh = GetSpeculativeRenderFrameHost(node); 823 speculative_rfh = GetSpeculativeRenderFrameHost(node);
832 ASSERT_TRUE(speculative_rfh); 824 ASSERT_TRUE(speculative_rfh);
833 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); 825 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh));
834 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); 826 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId());
835 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 827 EXPECT_FALSE(node->render_manager()->pending_frame_host());
836 828
837 // Invoke OnDidCommitProvisionalLoad. 829 // Invoke OnDidCommitProvisionalLoad.
838 speculative_rfh->SendNavigate(0, kUrl); 830 speculative_rfh->SendNavigate(0, kUrl);
839 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); 831 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId());
(...skipping 22 matching lines...) Expand all
862 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); 854 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node);
863 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); 855 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId();
864 EXPECT_NE(init_site_instance_id, site_instance_id); 856 EXPECT_NE(init_site_instance_id, site_instance_id);
865 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); 857 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId());
866 ASSERT_TRUE(speculative_rfh); 858 ASSERT_TRUE(speculative_rfh);
867 EXPECT_NE(speculative_rfh, main_test_rfh()); 859 EXPECT_NE(speculative_rfh, main_test_rfh());
868 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), 860 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl),
869 speculative_rfh->GetSiteInstance()->GetSiteURL()); 861 speculative_rfh->GetSiteInstance()->GetSiteURL());
870 862
871 // It then redirects to yet another site. 863 // It then redirects to yet another site.
872 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); 864 NavigationRequest* main_request = node->navigation_request();
873 ASSERT_TRUE(main_request); 865 ASSERT_TRUE(main_request);
874 const GURL kUrlRedirect("https://www.google.com/"); 866 const GURL kUrlRedirect("https://www.google.com/");
875 GetLoaderForNavigationRequest(main_request) 867 GetLoaderForNavigationRequest(main_request)
876 ->SimulateServerRedirect(kUrlRedirect); 868 ->SimulateServerRedirect(kUrlRedirect);
877 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); 869 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId());
878 speculative_rfh = GetSpeculativeRenderFrameHost(node); 870 speculative_rfh = GetSpeculativeRenderFrameHost(node);
879 ASSERT_TRUE(speculative_rfh); 871 ASSERT_TRUE(speculative_rfh);
880 872
881 // For now, ensure that the speculative RenderFrameHost does not change after 873 // For now, ensure that the speculative RenderFrameHost does not change after
882 // the redirect. 874 // the redirect.
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 .ClearMessages(); 935 .ClearMessages();
944 RequestNavigation(node, kUrl1); 936 RequestNavigation(node, kUrl1);
945 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 937 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
946 938
947 main_test_rfh()->SendBeforeUnloadACK(true); 939 main_test_rfh()->SendBeforeUnloadACK(true);
948 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); 940 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node));
949 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, 941 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT,
950 GetSpeculativeRenderFrameHost(node)->rfh_state()); 942 GetSpeculativeRenderFrameHost(node)->rfh_state());
951 943
952 scoped_refptr<ResourceResponse> response(new ResourceResponse); 944 scoped_refptr<ResourceResponse> response(new ResourceResponse);
953 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) 945 GetLoaderForNavigationRequest(node->navigation_request())
954 ->CallOnResponseStarted(response, MakeEmptyStream()); 946 ->CallOnResponseStarted(response, MakeEmptyStream());
955 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); 947 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node));
956 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, 948 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT,
957 GetSpeculativeRenderFrameHost(node)->rfh_state()); 949 GetSpeculativeRenderFrameHost(node)->rfh_state());
958 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); 950 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1));
959 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); 951 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh()));
960 952
961 rfh1->SendNavigate(1, kUrl1); 953 rfh1->SendNavigate(1, kUrl1);
962 EXPECT_EQ(rfh1, main_test_rfh()); 954 EXPECT_EQ(rfh1, main_test_rfh());
963 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); 955 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state());
964 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); 956 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1));
965 } 957 }
966 958
967 // PlzNavigate: Verify that data urls are properly handled. 959 // PlzNavigate: Verify that data urls are properly handled.
968 TEST_F(NavigatorTestWithBrowserSideNavigation, DataUrls) { 960 TEST_F(NavigatorTestWithBrowserSideNavigation, DataUrls) {
969 const GURL kUrl1("http://wikipedia.org/"); 961 const GURL kUrl1("http://wikipedia.org/");
970 const GURL kUrl2("data:text/html,test"); 962 const GURL kUrl2("data:text/html,test");
971 963
972 // Navigate to an initial site. 964 // Navigate to an initial site.
973 contents()->NavigateAndCommit(kUrl1); 965 contents()->NavigateAndCommit(kUrl1);
974 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 966 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
975 967
976 // Navigate to a data url. 968 // Navigate to a data url.
977 RequestNavigation(node, kUrl2); 969 RequestNavigation(node, kUrl2);
978 NavigationRequest* navigation_request = 970 NavigationRequest* navigation_request = node->navigation_request();
979 GetNavigationRequestForFrameTreeNode(node);
980 ASSERT_TRUE(navigation_request); 971 ASSERT_TRUE(navigation_request);
981 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, 972 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE,
982 navigation_request->state()); 973 navigation_request->state());
983 main_test_rfh()->SendBeforeUnloadACK(true); 974 main_test_rfh()->SendBeforeUnloadACK(true);
984 975
985 // The request should not have been sent to the IO thread but committed 976 // The request should not have been sent to the IO thread but committed
986 // immediately. 977 // immediately.
987 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, 978 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED,
988 navigation_request->state()); 979 navigation_request->state());
989 EXPECT_FALSE(navigation_request->loader_for_testing()); 980 EXPECT_FALSE(navigation_request->loader_for_testing());
990 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); 981 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node);
991 ASSERT_TRUE(speculative_rfh); 982 ASSERT_TRUE(speculative_rfh);
992 speculative_rfh->SendNavigate(0, kUrl2); 983 speculative_rfh->SendNavigate(0, kUrl2);
993 EXPECT_EQ(main_test_rfh(), speculative_rfh); 984 EXPECT_EQ(main_test_rfh(), speculative_rfh);
994 985
995 // Go back to the initial site. 986 // Go back to the initial site.
996 contents()->NavigateAndCommit(kUrl1); 987 contents()->NavigateAndCommit(kUrl1);
997 988
998 // Do a renderer-initiated navigation to a data url. The request should not be 989 // Do a renderer-initiated navigation to a data url. The request should not be
999 // sent to the IO thread, nor committed. 990 // sent to the IO thread, nor committed.
1000 TestRenderFrameHost* main_rfh = main_test_rfh(); 991 TestRenderFrameHost* main_rfh = main_test_rfh();
1001 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); 992 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true);
1002 navigation_request = GetNavigationRequestForFrameTreeNode(node); 993 navigation_request = node->navigation_request();
1003 ASSERT_TRUE(navigation_request); 994 ASSERT_TRUE(navigation_request);
1004 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, 995 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED,
1005 navigation_request->state()); 996 navigation_request->state());
1006 EXPECT_FALSE(navigation_request->loader_for_testing()); 997 EXPECT_FALSE(navigation_request->loader_for_testing());
1007 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 998 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
1008 } 999 }
1009 1000
1010 // Tests several cases for converting SiteInstanceDescriptors into 1001 // Tests several cases for converting SiteInstanceDescriptors into
1011 // SiteInstances: 1002 // SiteInstances:
1012 // 1) Pointer to the current SiteInstance. 1003 // 1) Pointer to the current SiteInstance.
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 1121
1131 SiteInstance* converted_instance_2 = 1122 SiteInstance* converted_instance_2 =
1132 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); 1123 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get());
1133 // Should return |unrelated_instance| because its site matches and it is 1124 // Should return |unrelated_instance| because its site matches and it is
1134 // unrelated to the current SiteInstance. 1125 // unrelated to the current SiteInstance.
1135 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); 1126 EXPECT_EQ(unrelated_instance.get(), converted_instance_2);
1136 } 1127 }
1137 } 1128 }
1138 1129
1139 } // namespace content 1130 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/navigator_impl.cc ('k') | content/test/test_render_frame_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698