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

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

Issue 702843004: Transfer serviceworker state during cross site navigations too. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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 "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/profiler/scoped_tracker.h" 10 #include "base/profiler/scoped_tracker.h"
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 } 182 }
183 last_upload_ticks_ = TimeTicks::Now(); 183 last_upload_ticks_ = TimeTicks::Now();
184 last_upload_position_ = progress.position(); 184 last_upload_position_ = progress.position();
185 } 185 }
186 } 186 }
187 187
188 void ResourceLoader::MarkAsTransferring() { 188 void ResourceLoader::MarkAsTransferring() {
189 CHECK(IsResourceTypeFrame(GetRequestInfo()->GetResourceType())) 189 CHECK(IsResourceTypeFrame(GetRequestInfo()->GetResourceType()))
190 << "Can only transfer for navigations"; 190 << "Can only transfer for navigations";
191 is_transferring_ = true; 191 is_transferring_ = true;
192
193 int child_id = GetRequestInfo()->GetChildID();
194 AppCacheInterceptor::PrepareForCrossSiteTransfer(request(), child_id);
195 ServiceWorkerRequestHandler* handler =
196 ServiceWorkerRequestHandler::GetHandler(request());
197 if (handler)
198 handler->PrepareForCrossSiteTransfer(child_id);
192 } 199 }
193 200
194 void ResourceLoader::CompleteTransfer() { 201 void ResourceLoader::CompleteTransfer() {
195 // Although CrossSiteResourceHandler defers at OnResponseStarted 202 // Although CrossSiteResourceHandler defers at OnResponseStarted
196 // (DEFERRED_READ), it may be seeing a replay of events via 203 // (DEFERRED_READ), it may be seeing a replay of events via
197 // BufferedResourceHandler, and so the request itself is actually deferred at 204 // BufferedResourceHandler, and so the request itself is actually deferred at
198 // a later read stage. 205 // a later read stage.
199 DCHECK(DEFERRED_READ == deferred_stage_ || 206 DCHECK(DEFERRED_READ == deferred_stage_ ||
200 DEFERRED_RESPONSE_COMPLETE == deferred_stage_); 207 DEFERRED_RESPONSE_COMPLETE == deferred_stage_);
208 DCHECK(is_transferring_);
209
210 // In some cases, a process transfer doesn't really happen and the
211 // request is resumed in the original process. Real transfers to a new process
212 // are completed via ResourceDispatcherHostImpl::UpdateRequestForTransfer.
213 int child_id = GetRequestInfo()->GetChildID();
214 AppCacheInterceptor::MaybeCompleteCrossSiteTransferInOldProcess(
215 request(), child_id);
216 ServiceWorkerRequestHandler* handler =
217 ServiceWorkerRequestHandler::GetHandler(request());
218 if (handler)
219 handler->MaybeCompleteCrossSiteTransferInOldProcess(child_id);
201 220
202 is_transferring_ = false; 221 is_transferring_ = false;
203 GetRequestInfo()->cross_site_handler()->ResumeResponse(); 222 GetRequestInfo()->cross_site_handler()->ResumeResponse();
204 } 223 }
205 224
206 ResourceRequestInfoImpl* ResourceLoader::GetRequestInfo() { 225 ResourceRequestInfoImpl* ResourceLoader::GetRequestInfo() {
207 return ResourceRequestInfoImpl::ForRequest(request_.get()); 226 return ResourceRequestInfoImpl::ForRequest(request_.get());
208 } 227 }
209 228
210 void ResourceLoader::ClearLoginDelegate() { 229 void ResourceLoader::ClearLoginDelegate() {
(...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 case net::URLRequestStatus::FAILED: 832 case net::URLRequestStatus::FAILED:
814 status = STATUS_UNDEFINED; 833 status = STATUS_UNDEFINED;
815 break; 834 break;
816 } 835 }
817 836
818 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); 837 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX);
819 } 838 }
820 } 839 }
821 840
822 } // namespace content 841 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698