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

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

Issue 912833002: PlzNavigate: update Navigator tests post-removal of the RequestNavigation IPC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Method renames and comment updates. Created 5 years, 10 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 | « no previous file | no next file » | 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 28 matching lines...) Expand all
39 void SetUp() override { 39 void SetUp() override {
40 EnableBrowserSideNavigation(); 40 EnableBrowserSideNavigation();
41 RenderViewHostImplTestHarness::SetUp(); 41 RenderViewHostImplTestHarness::SetUp();
42 } 42 }
43 43
44 TestNavigationURLLoader* GetLoaderForNavigationRequest( 44 TestNavigationURLLoader* GetLoaderForNavigationRequest(
45 NavigationRequest* request) const { 45 NavigationRequest* request) const {
46 return static_cast<TestNavigationURLLoader*>(request->loader_for_testing()); 46 return static_cast<TestNavigationURLLoader*>(request->loader_for_testing());
47 } 47 }
48 48
49 void SendRequestNavigation(FrameTreeNode* node, 49 void RequestNavigation(FrameTreeNode* node, const GURL& url) {
50 const GURL& url) { 50 RequestNavigationWithParameters(node, url, Referrer(),
51 SendRequestNavigationWithParameters( 51 ui::PAGE_TRANSITION_LINK,
52 node, url, Referrer(), ui::PAGE_TRANSITION_LINK, 52 NavigationController::NO_RELOAD);
53 NavigationController::NO_RELOAD);
54 } 53 }
55 54
56 void SendRequestNavigationWithParameters( 55 void RequestNavigationWithParameters(
57 FrameTreeNode* node, 56 FrameTreeNode* node,
58 const GURL& url, 57 const GURL& url,
59 const Referrer& referrer, 58 const Referrer& referrer,
60 ui::PageTransition transition_type, 59 ui::PageTransition transition_type,
61 NavigationController::ReloadType reload_type) { 60 NavigationController::ReloadType reload_type) {
62 scoped_ptr<NavigationEntryImpl> entry( 61 scoped_ptr<NavigationEntryImpl> entry(
63 NavigationEntryImpl::FromNavigationEntry( 62 NavigationEntryImpl::FromNavigationEntry(
64 NavigationController::CreateNavigationEntry( 63 NavigationController::CreateNavigationEntry(
65 url, 64 url,
66 referrer, 65 referrer,
(...skipping 26 matching lines...) Expand all
93 static_cast<MockRenderProcessHost*>(rfh->GetProcess()); 92 static_cast<MockRenderProcessHost*>(rfh->GetProcess());
94 const FrameMsg_CommitNavigation* commit_message = 93 const FrameMsg_CommitNavigation* commit_message =
95 static_cast<const FrameMsg_CommitNavigation*>( 94 static_cast<const FrameMsg_CommitNavigation*>(
96 rph->sink().GetUniqueMessageMatching( 95 rph->sink().GetUniqueMessageMatching(
97 FrameMsg_CommitNavigation::ID)); 96 FrameMsg_CommitNavigation::ID));
98 return commit_message && 97 return commit_message &&
99 rfh->GetRoutingID() == commit_message->routing_id(); 98 rfh->GetRoutingID() == commit_message->routing_id();
100 } 99 }
101 }; 100 };
102 101
103 // PlzNavigate: Test final state after a complete navigation (to avoid repeating 102 // PlzNavigate: Test a complete browser-initiated navigation starting with a
104 // these checks in other tests). 103 // non-live renderer.
105 TEST_F(NavigatorTestWithBrowserSideNavigation, NavigationFinishedState) { 104 TEST_F(NavigatorTestWithBrowserSideNavigation,
105 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) {
106 const GURL kUrl("http://chromium.org/"); 106 const GURL kUrl("http://chromium.org/");
107 contents()->NavigateAndCommit(kUrl); 107
108 ASSERT_TRUE(main_test_rfh()); 108 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive());
109
110 // Start a browser-initiated navigation.
111 int32 site_instance_id = main_test_rfh()->GetSiteInstance()->GetId();
112 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
113 RequestNavigation(node, kUrl);
114 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node);
115 ASSERT_TRUE(request);
116 EXPECT_EQ(kUrl, request->common_params().url);
117 EXPECT_TRUE(request->browser_initiated());
118
119 // As there's no live renderer the navigation should not wait for a
120 // beforeUnload ACK from the renderer and start right away.
121 EXPECT_EQ(NavigationRequest::STARTED, request->state());
122 ASSERT_TRUE(GetLoaderForNavigationRequest(request));
123 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
124 EXPECT_FALSE(node->render_manager()->pending_frame_host());
125
126 // Have the current RenderFrameHost commit the navigation.
127 scoped_refptr<ResourceResponse> response(new ResourceResponse);
128 GetLoaderForNavigationRequest(request)
129 ->CallOnResponseStarted(response, MakeEmptyStream());
130 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh()));
131 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state());
132
133 // Commit the navigation.
134 main_test_rfh()->SendNavigate(0, kUrl);
109 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); 135 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state());
110 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), 136 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl),
111 main_test_rfh()->GetSiteInstance()->GetSiteURL()); 137 main_test_rfh()->GetSiteInstance()->GetSiteURL());
112 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); 138 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL());
139 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node));
140 EXPECT_FALSE(node->render_manager()->pending_frame_host());
141
142 // The main RFH should not have been changed, and the renderer should have
143 // been initialized.
144 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId());
145 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive());
113 146
114 // After a navigation is finished no speculative RenderFrameHost should 147 // After a navigation is finished no speculative RenderFrameHost should
115 // exist. 148 // exist.
116 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
117 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 149 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
118 150
119 // With PlzNavigate enabled a pending RenderFrameHost should never exist. 151 // With PlzNavigate enabled a pending RenderFrameHost should never exist.
120 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 152 EXPECT_FALSE(node->render_manager()->pending_frame_host());
121 } 153 }
122 154
155 // PlzNavigate: Test a complete renderer-initiated same-site navigation.
156 TEST_F(NavigatorTestWithBrowserSideNavigation,
157 SimpleRendererInitiatedNavigation) {
158 const GURL kUrl1("http://www.chromium.org/");
159 const GURL kUrl2("http://www.chromium.org/Home");
160
161 contents()->NavigateAndCommit(kUrl1);
nasko 2015/02/12 22:44:09 FYI: this might not be needed after the changes in
carlosk 2015/02/13 09:46:46 I didn't understand what might not be needed here.
162 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive());
163
164 // Start a renderer-initiated navigation.
165 process()->sink().ClearMessages();
166 main_test_rfh()->SendBeginNavigationWithURL(kUrl2);
167 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
168 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node);
169 ASSERT_TRUE(request);
170
171 // The navigation is immediately started as there's no need to wait for
172 // beforeUnload to be executed.
173 EXPECT_EQ(NavigationRequest::STARTED, request->state());
174 EXPECT_EQ(kUrl2, request->common_params().url);
175 EXPECT_FALSE(request->browser_initiated());
176 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
177
178 // Have the current RenderFrameHost commit the navigation.
179 scoped_refptr<ResourceResponse> response(new ResourceResponse);
180 GetLoaderForNavigationRequest(request)
181 ->CallOnResponseStarted(response, MakeEmptyStream());
182 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh()));
183 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state());
184
185 // Commit the navigation.
186 main_test_rfh()->SendNavigate(0, kUrl2);
187 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state());
188 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2),
189 main_test_rfh()->GetSiteInstance()->GetSiteURL());
190 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL());
191 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node));
192 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
193 EXPECT_FALSE(node->render_manager()->pending_frame_host());
194 }
195
196 // PlzNavigate: Test that a beforeUnload denial cancels the navigation.
197 TEST_F(NavigatorTestWithBrowserSideNavigation,
198 BeforeUnloadDenialCancelNavigation) {
199 const GURL kUrl1("http://www.google.com/");
200 const GURL kUrl2("http://www.chromium.org/");
201
202 contents()->NavigateAndCommit(kUrl1);
203
204 // Start a new navigation.
205 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
206 RequestNavigation(node, kUrl2);
207 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node);
208 ASSERT_TRUE(request);
209 EXPECT_TRUE(request->browser_initiated());
210 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, request->state());
211 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
212
213 // Simulate a beforeUnload denial.
214 main_test_rfh()->SendBeforeUnloadACK(false);
215 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node));
216 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
217 }
218
123 // PlzNavigate: Test that a proper NavigationRequest is created by 219 // PlzNavigate: Test that a proper NavigationRequest is created by
124 // BeginNavigation. 220 // RequestNavigation.
125 // Note that all PlzNavigate methods on the browser side require the use of the
126 // flag kEnableBrowserSideNavigation.
127 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) { 221 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) {
128 const GURL kUrl1("http://www.google.com/"); 222 const GURL kUrl1("http://www.google.com/");
129 const GURL kUrl2("http://www.chromium.org/"); 223 const GURL kUrl2("http://www.chromium.org/");
130 const GURL kUrl3("http://www.gmail.com/"); 224 const GURL kUrl3("http://www.gmail.com/");
131 225
132 contents()->NavigateAndCommit(kUrl1); 226 contents()->NavigateAndCommit(kUrl1);
133 227
134 // Add a subframe. 228 // Add a subframe.
135 FrameTreeNode* root_node = contents()->GetFrameTree()->root(); 229 FrameTreeNode* root_node = contents()->GetFrameTree()->root();
136 TestRenderFrameHost* subframe_rfh = main_test_rfh()->AppendChild("Child"); 230 TestRenderFrameHost* subframe_rfh = main_test_rfh()->AppendChild("Child");
137 ASSERT_TRUE(subframe_rfh); 231 ASSERT_TRUE(subframe_rfh);
138 232
233 // Start a navigation at the subframe.
139 FrameTreeNode* subframe_node = subframe_rfh->frame_tree_node(); 234 FrameTreeNode* subframe_node = subframe_rfh->frame_tree_node();
140 SendRequestNavigation(subframe_node, kUrl2); 235 RequestNavigation(subframe_node, kUrl2);
141 // There is no previous renderer in the subframe, so BeginNavigation is
142 // handled already.
143 NavigationRequest* subframe_request = 236 NavigationRequest* subframe_request =
144 GetNavigationRequestForFrameTreeNode(subframe_node); 237 GetNavigationRequestForFrameTreeNode(subframe_node);
145 TestNavigationURLLoader* subframe_loader = 238 TestNavigationURLLoader* subframe_loader =
146 GetLoaderForNavigationRequest(subframe_request); 239 GetLoaderForNavigationRequest(subframe_request);
240
241 // Subframe navigations should start right away as they don't have to request
242 // beforeUnload to run at the renderer.
147 ASSERT_TRUE(subframe_request); 243 ASSERT_TRUE(subframe_request);
244 ASSERT_TRUE(subframe_loader);
245 EXPECT_EQ(NavigationRequest::STARTED, subframe_request->state());
148 EXPECT_EQ(kUrl2, subframe_request->common_params().url); 246 EXPECT_EQ(kUrl2, subframe_request->common_params().url);
149 EXPECT_EQ(kUrl2, subframe_loader->request_info()->common_params.url); 247 EXPECT_EQ(kUrl2, subframe_loader->request_info()->common_params.url);
150 // First party for cookies url should be that of the main frame. 248 // First party for cookies url should be that of the main frame.
151 EXPECT_EQ(kUrl1, subframe_loader->request_info()->first_party_for_cookies); 249 EXPECT_EQ(kUrl1, subframe_loader->request_info()->first_party_for_cookies);
152 EXPECT_FALSE(subframe_loader->request_info()->is_main_frame); 250 EXPECT_FALSE(subframe_loader->request_info()->is_main_frame);
153 EXPECT_TRUE(subframe_loader->request_info()->parent_is_main_frame); 251 EXPECT_TRUE(subframe_loader->request_info()->parent_is_main_frame);
252 EXPECT_TRUE(subframe_request->browser_initiated());
154 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node)); 253 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node));
155 254
156 // Subframe navigations should never create a speculative RenderFrameHost, 255 // Subframe navigations should never create a speculative RenderFrameHost,
157 // unless site-per-process is enabled. In that case, as the subframe 256 // unless site-per-process is enabled. In that case, as the subframe
158 // navigation is to a different site and is still ongoing, it should have one. 257 // navigation is to a different site and is still ongoing, it should have one.
159 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 258 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
160 switches::kSitePerProcess)) { 259 switches::kSitePerProcess)) {
161 EXPECT_TRUE(GetSpeculativeRenderFrameHost(subframe_node)); 260 EXPECT_TRUE(GetSpeculativeRenderFrameHost(subframe_node));
162 } else { 261 } else {
163 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node)); 262 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node));
164 } 263 }
165 264
166 SendRequestNavigation(root_node, kUrl3); 265 // Now start a navigation at the root node.
167 // Simulate a BeginNavigation IPC on the main frame. 266 RequestNavigation(root_node, kUrl3);
168 main_test_rfh()->SendBeginNavigationWithURL(kUrl3);
169 NavigationRequest* main_request = 267 NavigationRequest* main_request =
170 GetNavigationRequestForFrameTreeNode(root_node); 268 GetNavigationRequestForFrameTreeNode(root_node);
269 ASSERT_TRUE(main_request);
270 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE,
271 main_request->state());
272 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node));
273
274 // Simulate a BeforeUnloadACK IPC on the main frame.
275 main_test_rfh()->SendBeforeUnloadACK(true);
171 TestNavigationURLLoader* main_loader = 276 TestNavigationURLLoader* main_loader =
172 GetLoaderForNavigationRequest(main_request); 277 GetLoaderForNavigationRequest(main_request);
173 ASSERT_TRUE(main_request);
174 EXPECT_EQ(kUrl3, main_request->common_params().url); 278 EXPECT_EQ(kUrl3, main_request->common_params().url);
175 EXPECT_EQ(kUrl3, main_loader->request_info()->common_params.url); 279 EXPECT_EQ(kUrl3, main_loader->request_info()->common_params.url);
176 EXPECT_EQ(kUrl3, main_loader->request_info()->first_party_for_cookies); 280 EXPECT_EQ(kUrl3, main_loader->request_info()->first_party_for_cookies);
177 EXPECT_TRUE(main_loader->request_info()->is_main_frame); 281 EXPECT_TRUE(main_loader->request_info()->is_main_frame);
178 EXPECT_FALSE(main_loader->request_info()->parent_is_main_frame); 282 EXPECT_FALSE(main_loader->request_info()->parent_is_main_frame);
283 EXPECT_TRUE(main_request->browser_initiated());
284 // BeforeUnloadACK was received from the renderer so the navigation should
285 // have started.
286 EXPECT_EQ(NavigationRequest::STARTED, main_request->state());
179 287
180 // Main frame navigation to a different site should use a speculative 288 // Main frame navigation to a different site should use a speculative
181 // RenderFrameHost. 289 // RenderFrameHost.
182 EXPECT_TRUE(GetSpeculativeRenderFrameHost(root_node)); 290 EXPECT_TRUE(GetSpeculativeRenderFrameHost(root_node));
183 291
184 // As the main frame hasn't yet committed the subframe still exists. Thus, the 292 // As the main frame hasn't yet committed the subframe still exists. Thus, the
185 // above situation regarding subframe navigations is valid here. 293 // above situation regarding subframe navigations is valid here.
186 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 294 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
187 switches::kSitePerProcess)) { 295 switches::kSitePerProcess)) {
188 EXPECT_TRUE(GetSpeculativeRenderFrameHost(subframe_node)); 296 EXPECT_TRUE(GetSpeculativeRenderFrameHost(subframe_node));
189 } else { 297 } else {
190 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node)); 298 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node));
191 } 299 }
192 } 300 }
193 301
194 // PlzNavigate: Test that RequestNavigation creates a NavigationRequest and that
195 // RenderFrameHost is not modified when the navigation commits.
196 TEST_F(NavigatorTestWithBrowserSideNavigation, NoLiveRenderer) {
197 const GURL kUrl("http://www.google.com/");
198
199 EXPECT_FALSE(main_test_rfh()->render_view_host()->IsRenderViewLive());
200 RenderFrameHostImpl* rfh = main_test_rfh();
201 FrameTreeNode* node = rfh->frame_tree_node();
202 SendRequestNavigation(node, kUrl);
203
204 // A NavigationRequest should have been generated.
205 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node);
206 EXPECT_TRUE(main_request != NULL);
207
208 // Since we're re-using the current RenderFrameHost, no speculative one should
209 // be created.
210 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
211
212 // Now return the response without any redirects. This will cause the
213 // navigation to commit at the same URL.
214 scoped_refptr<ResourceResponse> response(new ResourceResponse);
215 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted(
216 response, MakeEmptyStream());
217 main_request = GetNavigationRequestForFrameTreeNode(node);
218
219 // The main RFH should not have been changed, and the renderer should have
220 // been initialized.
221 EXPECT_EQ(rfh, main_test_rfh());
222 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive());
223 EXPECT_TRUE(main_test_rfh()->render_view_host()->IsRenderViewLive());
224 }
225
226 // PlzNavigate: Test that committing an HTTP 204 or HTTP 205 response cancels 302 // PlzNavigate: Test that committing an HTTP 204 or HTTP 205 response cancels
227 // the navigation. 303 // the navigation.
228 TEST_F(NavigatorTestWithBrowserSideNavigation, NoContent) { 304 TEST_F(NavigatorTestWithBrowserSideNavigation, NoContent) {
229 const GURL kUrl1("http://www.chromium.org/"); 305 const GURL kUrl1("http://www.chromium.org/");
230 const GURL kUrl2("http://www.google.com/"); 306 const GURL kUrl2("http://www.google.com/");
231 307
232 // Load a URL. 308 // Load a URL.
233 contents()->NavigateAndCommit(kUrl1); 309 contents()->NavigateAndCommit(kUrl1);
234 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 310 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
235 311
236 // Navigate to a different site. 312 // Navigate to a different site.
237 process()->sink().ClearMessages(); 313 process()->sink().ClearMessages();
238 SendRequestNavigation(node, kUrl2); 314 RequestNavigation(node, kUrl2);
239 main_test_rfh()->SendBeginNavigationWithURL(kUrl2); 315 main_test_rfh()->SendBeforeUnloadACK(true);
240 316
241 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); 317 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node);
242 ASSERT_TRUE(main_request); 318 ASSERT_TRUE(main_request);
243 319
244 // Navigations to a different site do create a speculative RenderFrameHost. 320 // Navigations to a different site do create a speculative RenderFrameHost.
245 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); 321 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
246 322
247 // Commit an HTTP 204 response. 323 // Commit an HTTP 204 response.
248 scoped_refptr<ResourceResponse> response(new ResourceResponse); 324 scoped_refptr<ResourceResponse> response(new ResourceResponse);
249 const char kNoContentHeaders[] = "HTTP/1.1 204 No Content\0\0"; 325 const char kNoContentHeaders[] = "HTTP/1.1 204 No Content\0\0";
250 response->head.headers = new net::HttpResponseHeaders( 326 response->head.headers = new net::HttpResponseHeaders(
251 std::string(kNoContentHeaders, arraysize(kNoContentHeaders))); 327 std::string(kNoContentHeaders, arraysize(kNoContentHeaders)));
252 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( 328 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted(
253 response, MakeEmptyStream()); 329 response, MakeEmptyStream());
254 330
255 // There should be no pending nor speculative RenderFrameHost; the navigation 331 // There should be no pending nor speculative RenderFrameHost; the navigation
256 // was aborted. 332 // was aborted.
257 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); 333 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh()));
258 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); 334 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node));
259 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 335 EXPECT_FALSE(node->render_manager()->pending_frame_host());
260 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 336 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
261 337
262 // Now, repeat the test with 205 Reset Content. 338 // Now, repeat the test with 205 Reset Content.
263 339
264 // Navigate to a different site again. 340 // Navigate to a different site again.
265 process()->sink().ClearMessages(); 341 process()->sink().ClearMessages();
266 SendRequestNavigation(node, kUrl2); 342 RequestNavigation(node, kUrl2);
267 main_test_rfh()->SendBeginNavigationWithURL(kUrl2); 343 main_test_rfh()->SendBeforeUnloadACK(true);
268 344
269 main_request = GetNavigationRequestForFrameTreeNode(node); 345 main_request = GetNavigationRequestForFrameTreeNode(node);
270 ASSERT_TRUE(main_request); 346 ASSERT_TRUE(main_request);
271 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); 347 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
272 348
273 // Commit an HTTP 205 response. 349 // Commit an HTTP 205 response.
274 response = new ResourceResponse; 350 response = new ResourceResponse;
275 const char kResetContentHeaders[] = "HTTP/1.1 205 Reset Content\0\0"; 351 const char kResetContentHeaders[] = "HTTP/1.1 205 Reset Content\0\0";
276 response->head.headers = new net::HttpResponseHeaders( 352 response->head.headers = new net::HttpResponseHeaders(
277 std::string(kResetContentHeaders, arraysize(kResetContentHeaders))); 353 std::string(kResetContentHeaders, arraysize(kResetContentHeaders)));
(...skipping 13 matching lines...) Expand all
291 TEST_F(NavigatorTestWithBrowserSideNavigation, CrossSiteNavigation) { 367 TEST_F(NavigatorTestWithBrowserSideNavigation, CrossSiteNavigation) {
292 const GURL kUrl1("http://www.chromium.org/"); 368 const GURL kUrl1("http://www.chromium.org/");
293 const GURL kUrl2("http://www.google.com/"); 369 const GURL kUrl2("http://www.google.com/");
294 370
295 contents()->NavigateAndCommit(kUrl1); 371 contents()->NavigateAndCommit(kUrl1);
296 RenderFrameHostImpl* initial_rfh = main_test_rfh(); 372 RenderFrameHostImpl* initial_rfh = main_test_rfh();
297 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 373 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
298 374
299 // Navigate to a different site. 375 // Navigate to a different site.
300 process()->sink().ClearMessages(); 376 process()->sink().ClearMessages();
301 SendRequestNavigation(node, kUrl2); 377 RequestNavigation(node, kUrl2);
302 main_test_rfh()->SendBeginNavigationWithURL(kUrl2); 378 main_test_rfh()->SendBeforeUnloadACK(true);
303 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); 379 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node);
304 ASSERT_TRUE(main_request); 380 ASSERT_TRUE(main_request);
305 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); 381 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
306 382
307 scoped_refptr<ResourceResponse> response(new ResourceResponse); 383 scoped_refptr<ResourceResponse> response(new ResourceResponse);
308 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( 384 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted(
309 response, MakeEmptyStream()); 385 response, MakeEmptyStream());
310 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); 386 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node);
311 ASSERT_TRUE(speculative_rfh); 387 ASSERT_TRUE(speculative_rfh);
312 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); 388 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh));
(...skipping 14 matching lines...) Expand all
327 TEST_F(NavigatorTestWithBrowserSideNavigation, RedirectCrossSite) { 403 TEST_F(NavigatorTestWithBrowserSideNavigation, RedirectCrossSite) {
328 const GURL kUrl1("http://www.chromium.org/"); 404 const GURL kUrl1("http://www.chromium.org/");
329 const GURL kUrl2("http://www.google.com/"); 405 const GURL kUrl2("http://www.google.com/");
330 406
331 contents()->NavigateAndCommit(kUrl1); 407 contents()->NavigateAndCommit(kUrl1);
332 RenderFrameHostImpl* rfh = main_test_rfh(); 408 RenderFrameHostImpl* rfh = main_test_rfh();
333 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 409 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
334 410
335 // Navigate to a URL on the same site. 411 // Navigate to a URL on the same site.
336 process()->sink().ClearMessages(); 412 process()->sink().ClearMessages();
337 SendRequestNavigation(node, kUrl1); 413 RequestNavigation(node, kUrl1);
338 main_test_rfh()->SendBeginNavigationWithURL(kUrl1); 414 main_test_rfh()->SendBeforeUnloadACK(true);
339 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); 415 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node);
340 ASSERT_TRUE(main_request); 416 ASSERT_TRUE(main_request);
341 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 417 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
342 418
343 // It then redirects to another site. 419 // It then redirects to another site.
344 net::RedirectInfo redirect_info; 420 net::RedirectInfo redirect_info;
345 redirect_info.status_code = 302; 421 redirect_info.status_code = 302;
346 redirect_info.new_method = "GET"; 422 redirect_info.new_method = "GET";
347 redirect_info.new_url = kUrl2; 423 redirect_info.new_url = kUrl2;
348 redirect_info.new_first_party_for_cookies = kUrl2; 424 redirect_info.new_first_party_for_cookies = kUrl2;
349 scoped_refptr<ResourceResponse> response(new ResourceResponse); 425 scoped_refptr<ResourceResponse> response(new ResourceResponse);
350 GetLoaderForNavigationRequest(main_request)->CallOnRequestRedirected( 426 GetLoaderForNavigationRequest(main_request)->CallOnRequestRedirected(
351 redirect_info, response); 427 redirect_info, response);
352 428
353 // The redirect should have been followed. 429 // The redirect should have been followed.
354 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); 430 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count());
355 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 431 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
356 432
357 // Request the RenderFrameHost to commit. 433 // Request the RenderFrameHost to commit.
358 response = new ResourceResponse; 434 response = new ResourceResponse;
359 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( 435 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted(
360 response, MakeEmptyStream()); 436 response, MakeEmptyStream());
361 TestRenderFrameHost* final_speculative_rfh = 437 TestRenderFrameHost* final_speculative_rfh =
362 GetSpeculativeRenderFrameHost(node); 438 GetSpeculativeRenderFrameHost(node);
363 EXPECT_TRUE(final_speculative_rfh); 439 EXPECT_TRUE(final_speculative_rfh);
364 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); 440 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh));
365 441
366 // And commit provisional load. 442 // Commit the navigation.
367 final_speculative_rfh->SendNavigate(0, kUrl2); 443 final_speculative_rfh->SendNavigate(0, kUrl2);
368 RenderFrameHostImpl* final_rfh = main_test_rfh(); 444 RenderFrameHostImpl* final_rfh = main_test_rfh();
369 ASSERT_TRUE(final_rfh); 445 ASSERT_TRUE(final_rfh);
370 EXPECT_NE(rfh, final_rfh); 446 EXPECT_NE(rfh, final_rfh);
371 EXPECT_EQ(final_speculative_rfh, final_rfh); 447 EXPECT_EQ(final_speculative_rfh, final_rfh);
372 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); 448 EXPECT_TRUE(final_rfh->IsRenderFrameLive());
373 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); 449 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive());
374 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 450 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
375 } 451 }
376 452
377 // PlzNavigate: Test that a navigation is canceled if another request has been 453 // PlzNavigate: Test that a navigation is canceled if another browser-initiated
378 // issued in the meantime. Also confirms that the speculative RenderFrameHost is 454 // request has been issued in the meantime. Also confirms that the speculative
379 // correctly updated in the process. 455 // RenderFrameHost is correctly updated in the process.
380 TEST_F(NavigatorTestWithBrowserSideNavigation, ReplacePendingNavigation) { 456 TEST_F(NavigatorTestWithBrowserSideNavigation,
457 BrowserInitiatedNavigationCancel) {
381 const GURL kUrl0("http://www.wikipedia.org/"); 458 const GURL kUrl0("http://www.wikipedia.org/");
382 const GURL kUrl1("http://www.chromium.org/"); 459 const GURL kUrl1("http://www.chromium.org/");
383 const GURL kUrl1_site = SiteInstance::GetSiteForURL(browser_context(), kUrl1); 460 const GURL kUrl1_site = SiteInstance::GetSiteForURL(browser_context(), kUrl1);
384 const GURL kUrl2("http://www.google.com/"); 461 const GURL kUrl2("http://www.google.com/");
385 const GURL kUrl2_site = SiteInstance::GetSiteForURL(browser_context(), kUrl2); 462 const GURL kUrl2_site = SiteInstance::GetSiteForURL(browser_context(), kUrl2);
386 463
387 // Initialization. 464 // Initialization.
388 contents()->NavigateAndCommit(kUrl0); 465 contents()->NavigateAndCommit(kUrl0);
389 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 466 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
390 467
391 // Request navigation to the 1st URL. 468 // Request navigation to the 1st URL.
392 process()->sink().ClearMessages(); 469 process()->sink().ClearMessages();
393 SendRequestNavigation(node, kUrl1); 470 RequestNavigation(node, kUrl1);
394 main_test_rfh()->SendBeginNavigationWithURL(kUrl1); 471 main_test_rfh()->SendBeforeUnloadACK(true);
395 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); 472 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node);
396 ASSERT_TRUE(request1); 473 ASSERT_TRUE(request1);
397 EXPECT_EQ(kUrl1, request1->common_params().url); 474 EXPECT_EQ(kUrl1, request1->common_params().url);
475 EXPECT_TRUE(request1->browser_initiated());
398 base::WeakPtr<TestNavigationURLLoader> loader1 = 476 base::WeakPtr<TestNavigationURLLoader> loader1 =
399 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); 477 GetLoaderForNavigationRequest(request1)->AsWeakPtr();
400 478
401 // Confirm a speculative RFH was created. 479 // Confirm a speculative RFH was created.
402 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); 480 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node);
403 ASSERT_TRUE(speculative_rfh); 481 ASSERT_TRUE(speculative_rfh);
404 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId(); 482 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId();
405 EXPECT_EQ(kUrl1_site, speculative_rfh->GetSiteInstance()->GetSiteURL()); 483 EXPECT_EQ(kUrl1_site, speculative_rfh->GetSiteInstance()->GetSiteURL());
406 484
407 // Request navigation to the 2nd URL; the NavigationRequest must have been 485 // Request navigation to the 2nd URL; the NavigationRequest must have been
408 // replaced by a new one with a different URL. 486 // replaced by a new one with a different URL.
409 SendRequestNavigation(node, kUrl2); 487 RequestNavigation(node, kUrl2);
410 main_test_rfh()->SendBeginNavigationWithURL(kUrl2); 488 main_test_rfh()->SendBeforeUnloadACK(true);
411 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); 489 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node);
412 ASSERT_TRUE(request2); 490 ASSERT_TRUE(request2);
413 EXPECT_EQ(kUrl2, request2->common_params().url); 491 EXPECT_EQ(kUrl2, request2->common_params().url);
492 EXPECT_TRUE(request2->browser_initiated());
414 493
415 // Confirm that the first loader got destroyed. 494 // Confirm that the first loader got destroyed.
416 EXPECT_FALSE(loader1); 495 EXPECT_FALSE(loader1);
417 496
418 // Confirm that a new speculative RFH was created. 497 // Confirm that a new speculative RFH was created.
419 speculative_rfh = GetSpeculativeRenderFrameHost(node); 498 speculative_rfh = GetSpeculativeRenderFrameHost(node);
420 ASSERT_TRUE(speculative_rfh); 499 ASSERT_TRUE(speculative_rfh);
421 int32 site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId(); 500 int32 site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId();
422 EXPECT_NE(site_instance_id_1, site_instance_id_2); 501 EXPECT_NE(site_instance_id_1, site_instance_id_2);
423 502
424 // Request the RenderFrameHost to commit. 503 // Request the RenderFrameHost to commit.
425 scoped_refptr<ResourceResponse> response(new ResourceResponse); 504 scoped_refptr<ResourceResponse> response(new ResourceResponse);
426 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( 505 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted(
427 response, MakeEmptyStream()); 506 response, MakeEmptyStream());
428 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); 507 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh));
429 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); 508 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh()));
430 509
431 // And commit provisional load. 510 // Commit the navigation.
432 speculative_rfh->SendNavigate(0, kUrl2); 511 speculative_rfh->SendNavigate(0, kUrl2);
433 512
434 // Confirm that the commit corresponds to the new request. 513 // Confirm that the commit corresponds to the new request.
435 ASSERT_TRUE(main_test_rfh()); 514 ASSERT_TRUE(main_test_rfh());
436 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); 515 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL());
437 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); 516 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL());
438 517
439 // Confirm that the committed RFH is the latest speculative one. 518 // Confirm that the committed RFH is the latest speculative one.
440 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId()); 519 EXPECT_EQ(site_instance_id_2, main_test_rfh()->GetSiteInstance()->GetId());
441 } 520 }
442 521
443 // PlzNavigate: Test that a reload navigation is properly signaled to the 522 // PlzNavigate: Test that a reload navigation is properly signaled to the
444 // RenderFrame when the navigation can commit. A speculative RenderFrameHost 523 // RenderFrame when the navigation can commit. A speculative RenderFrameHost
445 // should not be created at any step. 524 // should not be created at any step.
446 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { 525 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) {
447 const GURL kUrl("http://www.google.com/"); 526 const GURL kUrl("http://www.google.com/");
448 contents()->NavigateAndCommit(kUrl); 527 contents()->NavigateAndCommit(kUrl);
449 528
450 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 529 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
451 SendRequestNavigationWithParameters( 530 RequestNavigationWithParameters(node, kUrl, Referrer(),
452 node, kUrl, Referrer(), ui::PAGE_TRANSITION_LINK, 531 ui::PAGE_TRANSITION_LINK,
453 NavigationController::RELOAD); 532 NavigationController::RELOAD);
454 // A NavigationRequest should have been generated. 533 // A NavigationRequest should have been generated.
455 NavigationRequest* main_request = 534 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node);
456 GetNavigationRequestForFrameTreeNode(node);
457 ASSERT_TRUE(main_request != NULL); 535 ASSERT_TRUE(main_request != NULL);
458 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, 536 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD,
459 main_request->common_params().navigation_type); 537 main_request->common_params().navigation_type);
460 main_test_rfh()->PrepareForCommit(kUrl); 538 main_test_rfh()->PrepareForCommit(kUrl);
461 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 539 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
462 540
463 main_test_rfh()->SendNavigate(0, kUrl); 541 main_test_rfh()->SendNavigate(0, kUrl);
464 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 542 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
465 543
466 // Now do a shift+reload. 544 // Now do a shift+reload.
467 SendRequestNavigationWithParameters( 545 RequestNavigationWithParameters(node, kUrl, Referrer(),
468 node, kUrl, Referrer(), ui::PAGE_TRANSITION_LINK, 546 ui::PAGE_TRANSITION_LINK,
469 NavigationController::RELOAD_IGNORING_CACHE); 547 NavigationController::RELOAD_IGNORING_CACHE);
470 // A NavigationRequest should have been generated. 548 // A NavigationRequest should have been generated.
471 main_request = GetNavigationRequestForFrameTreeNode(node); 549 main_request = GetNavigationRequestForFrameTreeNode(node);
472 ASSERT_TRUE(main_request != NULL); 550 ASSERT_TRUE(main_request != NULL);
473 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, 551 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE,
474 main_request->common_params().navigation_type); 552 main_request->common_params().navigation_type);
475 main_test_rfh()->PrepareForCommit(kUrl); 553 main_test_rfh()->PrepareForCommit(kUrl);
476 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); 554 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
477 } 555 }
478 556
479 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when 557 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when
480 // navigating from one site to another. 558 // navigating from one site to another.
481 TEST_F(NavigatorTestWithBrowserSideNavigation, 559 TEST_F(NavigatorTestWithBrowserSideNavigation,
482 SpeculativeRendererWorksBaseCase) { 560 SpeculativeRendererWorksBaseCase) {
483 // Navigate to an initial site. 561 // Navigate to an initial site.
484 const GURL kUrlInit("http://wikipedia.org/"); 562 const GURL kUrlInit("http://wikipedia.org/");
485 contents()->NavigateAndCommit(kUrlInit); 563 contents()->NavigateAndCommit(kUrlInit);
486 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 564 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
487 565
488 // Begin navigating to another site. 566 // Begin navigating to another site.
489 const GURL kUrl("http://google.com/"); 567 const GURL kUrl("http://google.com/");
490 process()->sink().ClearMessages(); 568 process()->sink().ClearMessages();
491 SendRequestNavigation(node, kUrl); 569 RequestNavigation(node, kUrl);
492 main_test_rfh()->SendBeginNavigationWithURL(kUrl); 570 main_test_rfh()->SendBeforeUnloadACK(true);
493 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); 571 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node);
494 ASSERT_TRUE(speculative_rfh); 572 ASSERT_TRUE(speculative_rfh);
495 EXPECT_NE(speculative_rfh, main_test_rfh()); 573 EXPECT_NE(speculative_rfh, main_test_rfh());
496 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), 574 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl),
497 speculative_rfh->GetSiteInstance()->GetSiteURL()); 575 speculative_rfh->GetSiteInstance()->GetSiteURL());
498 EXPECT_FALSE(node->render_manager()->pending_frame_host()); 576 EXPECT_FALSE(node->render_manager()->pending_frame_host());
499 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); 577 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId();
500 578
501 // Ask Navigator to commit the navigation by simulating a call to 579 // Ask Navigator to commit the navigation by simulating a call to
502 // OnResponseStarted. 580 // OnResponseStarted.
(...skipping 19 matching lines...) Expand all
522 SpeculativeRendererDiscardedAfterRedirectToAnotherSite) { 600 SpeculativeRendererDiscardedAfterRedirectToAnotherSite) {
523 // Navigate to an initial site. 601 // Navigate to an initial site.
524 const GURL kUrlInit("http://wikipedia.org/"); 602 const GURL kUrlInit("http://wikipedia.org/");
525 contents()->NavigateAndCommit(kUrlInit); 603 contents()->NavigateAndCommit(kUrlInit);
526 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); 604 FrameTreeNode* node = main_test_rfh()->frame_tree_node();
527 int32 init_site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); 605 int32 init_site_instance_id = main_test_rfh()->GetSiteInstance()->GetId();
528 606
529 // Begin navigating to another site. 607 // Begin navigating to another site.
530 const GURL kUrl("http://google.com/"); 608 const GURL kUrl("http://google.com/");
531 process()->sink().ClearMessages(); 609 process()->sink().ClearMessages();
532 SendRequestNavigation(node, kUrl); 610 RequestNavigation(node, kUrl);
533 main_test_rfh()->SendBeginNavigationWithURL(kUrl); 611 main_test_rfh()->SendBeforeUnloadACK(true);
534 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); 612 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node);
535 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); 613 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId();
536 EXPECT_NE(init_site_instance_id, site_instance_id); 614 EXPECT_NE(init_site_instance_id, site_instance_id);
537 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); 615 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId());
538 ASSERT_TRUE(speculative_rfh); 616 ASSERT_TRUE(speculative_rfh);
539 EXPECT_NE(speculative_rfh, main_test_rfh()); 617 EXPECT_NE(speculative_rfh, main_test_rfh());
540 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), 618 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl),
541 speculative_rfh->GetSiteInstance()->GetSiteURL()); 619 speculative_rfh->GetSiteInstance()->GetSiteURL());
542 620
543 // It then redirects to yet another site. 621 // It then redirects to yet another site.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); 690 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state());
613 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); 691 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state());
614 EXPECT_TRUE(rfhm->IsOnSwappedOutList(rfh1)); 692 EXPECT_TRUE(rfhm->IsOnSwappedOutList(rfh1));
615 693
616 // Now go back to the initial site so that the swapped out RenderFrameHost 694 // Now go back to the initial site so that the swapped out RenderFrameHost
617 // should be reused. 695 // should be reused.
618 process()->sink().ClearMessages(); 696 process()->sink().ClearMessages();
619 static_cast<MockRenderProcessHost*>(rfh1->GetProcess()) 697 static_cast<MockRenderProcessHost*>(rfh1->GetProcess())
620 ->sink() 698 ->sink()
621 .ClearMessages(); 699 .ClearMessages();
622 SendRequestNavigation(node, kUrl1); 700 RequestNavigation(node, kUrl1);
623 main_test_rfh()->SendBeginNavigationWithURL(kUrl1); 701 main_test_rfh()->SendBeforeUnloadACK(true);
624 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); 702 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node));
625 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, 703 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT,
626 GetSpeculativeRenderFrameHost(node)->rfh_state()); 704 GetSpeculativeRenderFrameHost(node)->rfh_state());
627 705
628 scoped_refptr<ResourceResponse> response(new ResourceResponse); 706 scoped_refptr<ResourceResponse> response(new ResourceResponse);
629 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) 707 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node))
630 ->CallOnResponseStarted(response, MakeEmptyStream()); 708 ->CallOnResponseStarted(response, MakeEmptyStream());
631 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); 709 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node));
632 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, 710 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT,
633 GetSpeculativeRenderFrameHost(node)->rfh_state()); 711 GetSpeculativeRenderFrameHost(node)->rfh_state());
634 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); 712 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1));
635 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); 713 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh()));
636 714
637 rfh1->SendNavigate(1, kUrl1); 715 rfh1->SendNavigate(1, kUrl1);
638 EXPECT_EQ(rfh1, main_test_rfh()); 716 EXPECT_EQ(rfh1, main_test_rfh());
639 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); 717 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state());
640 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); 718 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1));
641 } 719 }
642 720
643 } // namespace content 721 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698