OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |