OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "webkit/browser/appcache/appcache_request_handler.h" | 5 #include "webkit/browser/appcache/appcache_request_handler.h" |
6 | 6 |
7 #include "net/url_request/url_request.h" | 7 #include "net/url_request/url_request.h" |
8 #include "net/url_request/url_request_job.h" | 8 #include "net/url_request/url_request_job.h" |
9 #include "webkit/browser/appcache/appcache.h" | 9 #include "webkit/browser/appcache/appcache.h" |
10 #include "webkit/browser/appcache/appcache_backend_impl.h" | 10 #include "webkit/browser/appcache/appcache_backend_impl.h" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
96 return NULL; | 96 return NULL; |
97 if (request->url().GetOrigin() == location.GetOrigin()) | 97 if (request->url().GetOrigin() == location.GetOrigin()) |
98 return NULL; | 98 return NULL; |
99 | 99 |
100 DCHECK(!job_.get()); // our jobs never generate redirects | 100 DCHECK(!job_.get()); // our jobs never generate redirects |
101 | 101 |
102 if (found_fallback_entry_.has_response_id()) { | 102 if (found_fallback_entry_.has_response_id()) { |
103 // 6.9.6, step 4: If this results in a redirect to another origin, | 103 // 6.9.6, step 4: If this results in a redirect to another origin, |
104 // get the resource of the fallback entry. | 104 // get the resource of the fallback entry. |
105 job_ = new AppCacheURLRequestJob(request, network_delegate, | 105 job_ = new AppCacheURLRequestJob(request, network_delegate, |
106 storage(), host_); | 106 storage(), host_, is_main_resource()); |
107 DeliverAppCachedResponse( | 107 DeliverAppCachedResponse( |
108 found_fallback_entry_, found_cache_id_, found_group_id_, | 108 found_fallback_entry_, found_cache_id_, found_group_id_, |
109 found_manifest_url_, true, found_namespace_entry_url_); | 109 found_manifest_url_, true, found_namespace_entry_url_); |
110 } else if (!found_network_namespace_) { | 110 } else if (!found_network_namespace_) { |
111 // 6.9.6, step 6: Fail the resource load. | 111 // 6.9.6, step 6: Fail the resource load. |
112 job_ = new AppCacheURLRequestJob(request, network_delegate, | 112 job_ = new AppCacheURLRequestJob(request, network_delegate, |
113 storage(), host_); | 113 storage(), host_, is_main_resource()); |
114 DeliverErrorResponse(); | 114 DeliverErrorResponse(); |
115 } else { | 115 } else { |
116 // 6.9.6 step 3 and 5: Fetch the resource normally. | 116 // 6.9.6 step 3 and 5: Fetch the resource normally. |
117 } | 117 } |
118 | 118 |
119 return job_.get(); | 119 return job_.get(); |
120 } | 120 } |
121 | 121 |
122 AppCacheURLRequestJob* AppCacheRequestHandler::MaybeLoadFallbackForResponse( | 122 AppCacheURLRequestJob* AppCacheRequestHandler::MaybeLoadFallbackForResponse( |
123 net::URLRequest* request, net::NetworkDelegate* network_delegate) { | 123 net::URLRequest* request, net::NetworkDelegate* network_delegate) { |
(...skipping 25 matching lines...) Expand all Loading... | |
149 "disallow-fallback"); | 149 "disallow-fallback"); |
150 std::string header_value; | 150 std::string header_value; |
151 request->GetResponseHeaderByName(kFallbackOverrideHeader, &header_value); | 151 request->GetResponseHeaderByName(kFallbackOverrideHeader, &header_value); |
152 if (header_value == kFallbackOverrideValue) | 152 if (header_value == kFallbackOverrideValue) |
153 return NULL; | 153 return NULL; |
154 } | 154 } |
155 | 155 |
156 // 6.9.6, step 4: If this results in a 4xx or 5xx status code | 156 // 6.9.6, step 4: If this results in a 4xx or 5xx status code |
157 // or there were network errors, get the resource of the fallback entry. | 157 // or there were network errors, get the resource of the fallback entry. |
158 job_ = new AppCacheURLRequestJob(request, network_delegate, | 158 job_ = new AppCacheURLRequestJob(request, network_delegate, |
159 storage(), host_); | 159 storage(), host_, is_main_resource()); |
160 DeliverAppCachedResponse( | 160 DeliverAppCachedResponse( |
161 found_fallback_entry_, found_cache_id_, found_group_id_, | 161 found_fallback_entry_, found_cache_id_, found_group_id_, |
162 found_manifest_url_, true, found_namespace_entry_url_); | 162 found_manifest_url_, true, found_namespace_entry_url_); |
163 return job_.get(); | 163 return job_.get(); |
164 } | 164 } |
165 | 165 |
166 void AppCacheRequestHandler::GetExtraResponseInfo( | 166 void AppCacheRequestHandler::GetExtraResponseInfo( |
167 int64* cache_id, GURL* manifest_url) { | 167 int64* cache_id, GURL* manifest_url) { |
168 if (job_.get() && job_->is_delivering_appcache_response()) { | 168 if (job_.get() && job_->is_delivering_appcache_response()) { |
169 *cache_id = job_->cache_id(); | 169 *cache_id = job_->cache_id(); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
233 | 233 |
234 const AppCacheHost* spawning_host = | 234 const AppCacheHost* spawning_host = |
235 ResourceType::IsSharedWorker(resource_type_) ? | 235 ResourceType::IsSharedWorker(resource_type_) ? |
236 host_ : host_->GetSpawningHost(); | 236 host_ : host_->GetSpawningHost(); |
237 GURL preferred_manifest_url = spawning_host ? | 237 GURL preferred_manifest_url = spawning_host ? |
238 spawning_host->preferred_manifest_url() : GURL(); | 238 spawning_host->preferred_manifest_url() : GURL(); |
239 | 239 |
240 // We may have to wait for our storage query to complete, but | 240 // We may have to wait for our storage query to complete, but |
241 // this query can also complete syncrhonously. | 241 // this query can also complete syncrhonously. |
242 job_ = new AppCacheURLRequestJob(request, network_delegate, | 242 job_ = new AppCacheURLRequestJob(request, network_delegate, |
243 storage(), host_); | 243 storage(), host_, is_main_resource()); |
244 storage()->FindResponseForMainRequest( | 244 storage()->FindResponseForMainRequest( |
245 request->url(), preferred_manifest_url, this); | 245 request->url(), preferred_manifest_url, this); |
246 } | 246 } |
247 | 247 |
248 void AppCacheRequestHandler::OnMainResponseFound( | 248 void AppCacheRequestHandler::OnMainResponseFound( |
249 const GURL& url, const AppCacheEntry& entry, | 249 const GURL& url, const AppCacheEntry& entry, |
250 const GURL& namespace_entry_url, const AppCacheEntry& fallback_entry, | 250 const GURL& namespace_entry_url, const AppCacheEntry& fallback_entry, |
251 int64 cache_id, int64 group_id, const GURL& manifest_url) { | 251 int64 cache_id, int64 group_id, const GURL& manifest_url) { |
252 DCHECK(job_.get()); | 252 DCHECK(job_.get()); |
253 DCHECK(host_); | 253 DCHECK(host_); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
307 | 307 |
308 void AppCacheRequestHandler::MaybeLoadSubResource( | 308 void AppCacheRequestHandler::MaybeLoadSubResource( |
309 net::URLRequest* request, net::NetworkDelegate* network_delegate) { | 309 net::URLRequest* request, net::NetworkDelegate* network_delegate) { |
310 DCHECK(!job_.get()); | 310 DCHECK(!job_.get()); |
311 | 311 |
312 if (host_->is_selection_pending()) { | 312 if (host_->is_selection_pending()) { |
313 // We have to wait until cache selection is complete and the | 313 // We have to wait until cache selection is complete and the |
314 // selected cache is loaded. | 314 // selected cache is loaded. |
315 is_waiting_for_cache_selection_ = true; | 315 is_waiting_for_cache_selection_ = true; |
316 job_ = new AppCacheURLRequestJob(request, network_delegate, | 316 job_ = new AppCacheURLRequestJob(request, network_delegate, |
317 storage(), host_); | 317 storage(), host_, is_main_resource()); |
318 return; | 318 return; |
319 } | 319 } |
320 | 320 |
321 if (!host_->associated_cache() || | 321 if (!host_->associated_cache() || |
322 !host_->associated_cache()->is_complete()) { | 322 !host_->associated_cache()->is_complete() || |
323 host_->associated_cache()->owning_group()->is_being_deleted()) { | |
jsbell
2014/03/21 16:41:02
Is this a behavior change?
michaeln
2014/03/24 18:12:04
Yes, when is_being_deleted the request is doomed t
| |
323 return; | 324 return; |
324 } | 325 } |
325 | 326 |
326 job_ = new AppCacheURLRequestJob(request, network_delegate, | 327 job_ = new AppCacheURLRequestJob(request, network_delegate, |
327 storage(), host_); | 328 storage(), host_, is_main_resource()); |
328 ContinueMaybeLoadSubResource(); | 329 ContinueMaybeLoadSubResource(); |
329 } | 330 } |
330 | 331 |
331 void AppCacheRequestHandler::ContinueMaybeLoadSubResource() { | 332 void AppCacheRequestHandler::ContinueMaybeLoadSubResource() { |
332 // 6.9.6 Changes to the networking model | 333 // 6.9.6 Changes to the networking model |
333 // If the resource is not to be fetched using the HTTP GET mechanism or | 334 // If the resource is not to be fetched using the HTTP GET mechanism or |
334 // equivalent ... then fetch the resource normally. | 335 // equivalent ... then fetch the resource normally. |
335 DCHECK(job_.get()); | 336 DCHECK(job_.get()); |
336 DCHECK(host_->associated_cache() && host_->associated_cache()->is_complete()); | 337 DCHECK(host_->associated_cache() && host_->associated_cache()->is_complete()); |
337 | 338 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
389 if (!host_->associated_cache() || | 390 if (!host_->associated_cache() || |
390 !host_->associated_cache()->is_complete()) { | 391 !host_->associated_cache()->is_complete()) { |
391 DeliverNetworkResponse(); | 392 DeliverNetworkResponse(); |
392 return; | 393 return; |
393 } | 394 } |
394 | 395 |
395 ContinueMaybeLoadSubResource(); | 396 ContinueMaybeLoadSubResource(); |
396 } | 397 } |
397 | 398 |
398 } // namespace appcache | 399 } // namespace appcache |
OLD | NEW |