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

Side by Side Diff: content/browser/loader/resource_loader.cc

Issue 2496193002: Implement transfer navigation with mojo (Closed)
Patch Set: fix Created 4 years, 1 month 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/loader/resource_loader.h" 5 #include "content/browser/loader/resource_loader.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 CancelRequest(false); 191 CancelRequest(false);
192 } 192 }
193 193
194 void ResourceLoader::CancelWithError(int error_code) { 194 void ResourceLoader::CancelWithError(int error_code) {
195 TRACE_EVENT_WITH_FLOW0("loading", "ResourceLoader::CancelWithError", this, 195 TRACE_EVENT_WITH_FLOW0("loading", "ResourceLoader::CancelWithError", this,
196 TRACE_EVENT_FLAG_FLOW_IN); 196 TRACE_EVENT_FLAG_FLOW_IN);
197 CancelRequestInternal(error_code, false); 197 CancelRequestInternal(error_code, false);
198 } 198 }
199 199
200 void ResourceLoader::MarkAsTransferring( 200 void ResourceLoader::MarkAsTransferring(
201 const base::Closure& on_transfer_complete_callback) { 201 const TransferCallback& on_transfer_complete_callback) {
202 CHECK(IsResourceTypeFrame(GetRequestInfo()->GetResourceType())) 202 CHECK(IsResourceTypeFrame(GetRequestInfo()->GetResourceType()))
203 << "Can only transfer for navigations"; 203 << "Can only transfer for navigations";
204 is_transferring_ = true; 204 is_transferring_ = true;
205 on_transfer_complete_callback_ = on_transfer_complete_callback; 205 on_transfer_complete_callback_ = on_transfer_complete_callback;
206 206
207 int child_id = GetRequestInfo()->GetChildID(); 207 int child_id = GetRequestInfo()->GetChildID();
208 AppCacheInterceptor::PrepareForCrossSiteTransfer(request(), child_id); 208 AppCacheInterceptor::PrepareForCrossSiteTransfer(request(), child_id);
209 ServiceWorkerRequestHandler* handler = 209 ServiceWorkerRequestHandler* handler =
210 ServiceWorkerRequestHandler::GetHandler(request()); 210 ServiceWorkerRequestHandler::GetHandler(request());
211 if (handler) 211 if (handler)
212 handler->PrepareForCrossSiteTransfer(child_id); 212 handler->PrepareForCrossSiteTransfer(child_id);
213 } 213 }
214 214
215 void ResourceLoader::CompleteTransfer() { 215 void ResourceLoader::CompleteTransfer(
216 mojom::URLLoaderAssociatedRequest mojo_request,
217 mojom::URLLoaderClientAssociatedPtr url_loader_client) {
216 // Although NavigationResourceThrottle defers at WillProcessResponse 218 // Although NavigationResourceThrottle defers at WillProcessResponse
217 // (DEFERRED_READ), it may be seeing a replay of events via 219 // (DEFERRED_READ), it may be seeing a replay of events via
218 // MimeTypeResourceHandler, and so the request itself is actually deferred at 220 // MimeTypeResourceHandler, and so the request itself is actually deferred at
219 // a later read stage. 221 // a later read stage.
220 DCHECK(DEFERRED_READ == deferred_stage_ || 222 DCHECK(DEFERRED_READ == deferred_stage_ ||
221 DEFERRED_RESPONSE_COMPLETE == deferred_stage_); 223 DEFERRED_RESPONSE_COMPLETE == deferred_stage_);
222 DCHECK(is_transferring_); 224 DCHECK(is_transferring_);
223 DCHECK(!on_transfer_complete_callback_.is_null()); 225 DCHECK(!on_transfer_complete_callback_.is_null());
224 226
225 // In some cases, a process transfer doesn't really happen and the 227 // In some cases, a process transfer doesn't really happen and the
226 // request is resumed in the original process. Real transfers to a new process 228 // request is resumed in the original process. Real transfers to a new process
227 // are completed via ResourceDispatcherHostImpl::UpdateRequestForTransfer. 229 // are completed via ResourceDispatcherHostImpl::UpdateRequestForTransfer.
228 int child_id = GetRequestInfo()->GetChildID(); 230 int child_id = GetRequestInfo()->GetChildID();
229 AppCacheInterceptor::MaybeCompleteCrossSiteTransferInOldProcess( 231 AppCacheInterceptor::MaybeCompleteCrossSiteTransferInOldProcess(
230 request(), child_id); 232 request(), child_id);
231 ServiceWorkerRequestHandler* handler = 233 ServiceWorkerRequestHandler* handler =
232 ServiceWorkerRequestHandler::GetHandler(request()); 234 ServiceWorkerRequestHandler::GetHandler(request());
233 if (handler) 235 if (handler)
234 handler->MaybeCompleteCrossSiteTransferInOldProcess(child_id); 236 handler->MaybeCompleteCrossSiteTransferInOldProcess(child_id);
235 237
236 is_transferring_ = false; 238 is_transferring_ = false;
237 base::ResetAndReturn(&on_transfer_complete_callback_).Run(); 239 base::ResetAndReturn(&on_transfer_complete_callback_)
240 .Run(std::move(mojo_request), std::move(url_loader_client));
238 } 241 }
239 242
240 ResourceRequestInfoImpl* ResourceLoader::GetRequestInfo() { 243 ResourceRequestInfoImpl* ResourceLoader::GetRequestInfo() {
241 return ResourceRequestInfoImpl::ForRequest(request_.get()); 244 return ResourceRequestInfoImpl::ForRequest(request_.get());
242 } 245 }
243 246
244 void ResourceLoader::ClearLoginDelegate() { 247 void ResourceLoader::ClearLoginDelegate() {
245 login_delegate_ = NULL; 248 login_delegate_ = NULL;
246 } 249 }
247 250
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 } 724 }
722 725
723 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); 726 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX);
724 } else if (request_->response_info().unused_since_prefetch) { 727 } else if (request_->response_info().unused_since_prefetch) {
725 TimeDelta total_time = base::TimeTicks::Now() - request_->creation_time(); 728 TimeDelta total_time = base::TimeTicks::Now() - request_->creation_time();
726 UMA_HISTOGRAM_TIMES("Net.Prefetch.TimeSpentOnPrefetchHit", total_time); 729 UMA_HISTOGRAM_TIMES("Net.Prefetch.TimeSpentOnPrefetchHit", total_time);
727 } 730 }
728 } 731 }
729 732
730 } // namespace content 733 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698