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

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

Issue 1616943003: Teach navigation throttles how to cancel requests in WillProcessResponse. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fiddling. Created 4 years, 11 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
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 "content/browser/frame_host/navigation_request.h" 5 #include "content/browser/frame_host/navigation_request.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "content/browser/frame_host/frame_tree.h" 9 #include "content/browser/frame_host/frame_tree.h"
10 #include "content/browser/frame_host/frame_tree_node.h" 10 #include "content/browser/frame_host/frame_tree_node.h"
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 navigation_handle_->WillRedirectRequest( 252 navigation_handle_->WillRedirectRequest(
253 common_params_.url, begin_params_.method == "POST", 253 common_params_.url, begin_params_.method == "POST",
254 common_params_.referrer.url, false, response->head.headers, 254 common_params_.referrer.url, false, response->head.headers,
255 base::Bind(&NavigationRequest::OnRedirectChecksComplete, 255 base::Bind(&NavigationRequest::OnRedirectChecksComplete,
256 base::Unretained(this))); 256 base::Unretained(this)));
257 } 257 }
258 258
259 void NavigationRequest::OnResponseStarted( 259 void NavigationRequest::OnResponseStarted(
260 const scoped_refptr<ResourceResponse>& response, 260 const scoped_refptr<ResourceResponse>& response,
261 scoped_ptr<StreamHandle> body) { 261 scoped_ptr<StreamHandle> body) {
262 DCHECK(state_ == STARTED); 262 DCHECK(state_ == STARTED && !response_ && !body_);
263 state_ = RESPONSE_STARTED; 263 state_ = RESPONSE_STARTED;
264 response_ = response.get();
265 body_ = std::move(body);
264 266
265 // Update the service worker params of the request params. 267 // Update the service worker params of the request params.
266 request_params_.should_create_service_worker = 268 request_params_.should_create_service_worker =
267 (frame_tree_node_->pending_sandbox_flags() & 269 (frame_tree_node_->pending_sandbox_flags() &
268 blink::WebSandboxFlags::Origin) != blink::WebSandboxFlags::Origin; 270 blink::WebSandboxFlags::Origin) != blink::WebSandboxFlags::Origin;
269 if (navigation_handle_->service_worker_handle()) { 271 if (navigation_handle_->service_worker_handle()) {
270 request_params_.service_worker_provider_id = 272 request_params_.service_worker_provider_id =
271 navigation_handle_->service_worker_handle() 273 navigation_handle_->service_worker_handle()
272 ->service_worker_provider_host_id(); 274 ->service_worker_provider_host_id();
273 } 275 }
274 276
275 frame_tree_node_->navigator()->CommitNavigation( 277 navigation_handle_->WillProcessResponse(
276 frame_tree_node_, response.get(), std::move(body)); 278 response->head.headers,
279 base::Bind(&NavigationRequest::OnResponseChecksComplete,
280 base::Unretained(this)));
277 } 281 }
278 282
279 void NavigationRequest::OnRequestFailed(bool has_stale_copy_in_cache, 283 void NavigationRequest::OnRequestFailed(bool has_stale_copy_in_cache,
280 int net_error) { 284 int net_error) {
281 DCHECK(state_ == STARTED); 285 DCHECK(state_ == STARTED);
282 state_ = FAILED; 286 state_ = FAILED;
283 navigation_handle_->set_net_error_code(static_cast<net::Error>(net_error)); 287 navigation_handle_->set_net_error_code(static_cast<net::Error>(net_error));
284 frame_tree_node_->navigator()->FailedNavigation( 288 frame_tree_node_->navigator()->FailedNavigation(
285 frame_tree_node_, has_stale_copy_in_cache, net_error); 289 frame_tree_node_, has_stale_copy_in_cache, net_error);
286 } 290 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 result == NavigationThrottle::CANCEL) { 327 result == NavigationThrottle::CANCEL) {
324 // TODO(clamy): distinguish between CANCEL and CANCEL_AND_IGNORE. 328 // TODO(clamy): distinguish between CANCEL and CANCEL_AND_IGNORE.
325 frame_tree_node_->ResetNavigationRequest(false); 329 frame_tree_node_->ResetNavigationRequest(false);
326 return; 330 return;
327 } 331 }
328 332
329 loader_->FollowRedirect(); 333 loader_->FollowRedirect();
330 navigation_handle_->DidRedirectNavigation(common_params_.url); 334 navigation_handle_->DidRedirectNavigation(common_params_.url);
331 } 335 }
332 336
337 void NavigationRequest::OnResponseChecksComplete(
338 NavigationThrottle::ThrottleCheckResult result) {
339 CHECK(result != NavigationThrottle::DEFER);
340
341 // Abort the request if needed. This will destroy the NavigationRequest.
342 if (result == NavigationThrottle::CANCEL_AND_IGNORE ||
343 result == NavigationThrottle::CANCEL) {
344 // TODO(clamy): distinguish between CANCEL and CANCEL_AND_IGNORE.
345 frame_tree_node_->ResetNavigationRequest(false);
346 return;
347 }
348
349 frame_tree_node_->navigator()->CommitNavigation(
350 frame_tree_node_, response_.get(), std::move(body_));
351 }
352
333 void NavigationRequest::InitializeServiceWorkerHandleIfNeeded() { 353 void NavigationRequest::InitializeServiceWorkerHandleIfNeeded() {
334 // Only initialize the ServiceWorkerNavigationHandle if it can be created for 354 // Only initialize the ServiceWorkerNavigationHandle if it can be created for
335 // this frame. 355 // this frame.
336 bool can_create_service_worker = 356 bool can_create_service_worker =
337 (frame_tree_node_->pending_sandbox_flags() & 357 (frame_tree_node_->pending_sandbox_flags() &
338 blink::WebSandboxFlags::Origin) != blink::WebSandboxFlags::Origin; 358 blink::WebSandboxFlags::Origin) != blink::WebSandboxFlags::Origin;
339 if (!can_create_service_worker) 359 if (!can_create_service_worker)
340 return; 360 return;
341 361
342 // Use the SiteInstance of the navigating RenderFrameHost to get access to 362 // Use the SiteInstance of the navigating RenderFrameHost to get access to
(...skipping 11 matching lines...) Expand all
354 browser_context, navigating_frame_host->GetSiteInstance()); 374 browser_context, navigating_frame_host->GetSiteInstance());
355 DCHECK(partition); 375 DCHECK(partition);
356 376
357 ServiceWorkerContextWrapper* service_worker_context = 377 ServiceWorkerContextWrapper* service_worker_context =
358 static_cast<ServiceWorkerContextWrapper*>( 378 static_cast<ServiceWorkerContextWrapper*>(
359 partition->GetServiceWorkerContext()); 379 partition->GetServiceWorkerContext());
360 navigation_handle_->InitServiceWorkerHandle(service_worker_context); 380 navigation_handle_->InitServiceWorkerHandle(service_worker_context);
361 } 381 }
362 382
363 } // namespace content 383 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698