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/appcache/appcache_url_request_job.h" | 5 #include "content/browser/appcache/appcache_url_request_job.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 on_prepare_to_restart_callback_(restart_callback), | 49 on_prepare_to_restart_callback_(restart_callback), |
50 weak_factory_(this) { | 50 weak_factory_(this) { |
51 DCHECK(storage_); | 51 DCHECK(storage_); |
52 } | 52 } |
53 | 53 |
54 AppCacheURLRequestJob::~AppCacheURLRequestJob() { | 54 AppCacheURLRequestJob::~AppCacheURLRequestJob() { |
55 if (storage_) | 55 if (storage_) |
56 storage_->CancelDelegateCallbacks(this); | 56 storage_->CancelDelegateCallbacks(this); |
57 } | 57 } |
58 | 58 |
59 void AppCacheURLRequestJob::DeliverAppCachedResponse( | 59 void AppCacheURLRequestJob::DeliverAppCachedResponse(const GURL& manifest_url, |
60 const GURL& manifest_url, int64 group_id, int64 cache_id, | 60 int64_t group_id, |
61 const AppCacheEntry& entry, bool is_fallback) { | 61 int64_t cache_id, |
| 62 const AppCacheEntry& entry, |
| 63 bool is_fallback) { |
62 DCHECK(!has_delivery_orders()); | 64 DCHECK(!has_delivery_orders()); |
63 DCHECK(entry.has_response_id()); | 65 DCHECK(entry.has_response_id()); |
64 delivery_type_ = APPCACHED_DELIVERY; | 66 delivery_type_ = APPCACHED_DELIVERY; |
65 manifest_url_ = manifest_url; | 67 manifest_url_ = manifest_url; |
66 group_id_ = group_id; | 68 group_id_ = group_id; |
67 cache_id_ = cache_id; | 69 cache_id_ = cache_id; |
68 entry_ = entry; | 70 entry_ = entry; |
69 is_fallback_ = is_fallback; | 71 is_fallback_ = is_fallback; |
70 MaybeBeginDelivery(); | 72 MaybeBeginDelivery(); |
71 } | 73 } |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 // provides a response. The sequence goes like this... | 162 // provides a response. The sequence goes like this... |
161 // | 163 // |
162 // 1. First we load the cache. | 164 // 1. First we load the cache. |
163 // 2. Then if the handler is not spun up, we load the script resource which | 165 // 2. Then if the handler is not spun up, we load the script resource which |
164 // is needed to spin it up. | 166 // is needed to spin it up. |
165 // 3. Then we ask then we ask the handler to compute a response. | 167 // 3. Then we ask then we ask the handler to compute a response. |
166 // 4. Finally we deilver that response to the caller. | 168 // 4. Finally we deilver that response to the caller. |
167 storage_->LoadCache(cache_id_, this); | 169 storage_->LoadCache(cache_id_, this); |
168 } | 170 } |
169 | 171 |
170 void AppCacheURLRequestJob::OnCacheLoaded(AppCache* cache, int64 cache_id) { | 172 void AppCacheURLRequestJob::OnCacheLoaded(AppCache* cache, int64_t cache_id) { |
171 DCHECK_EQ(cache_id_, cache_id); | 173 DCHECK_EQ(cache_id_, cache_id); |
172 DCHECK(!has_been_killed()); | 174 DCHECK(!has_been_killed()); |
173 | 175 |
174 if (!cache) { | 176 if (!cache) { |
175 BeginErrorDelivery("cache load failed"); | 177 BeginErrorDelivery("cache load failed"); |
176 return; | 178 return; |
177 } | 179 } |
178 | 180 |
179 // Keep references to ensure they don't go out of scope until job completion. | 181 // Keep references to ensure they don't go out of scope until job completion. |
180 cache_ = cache; | 182 cache_ = cache; |
181 group_ = cache->owning_group(); | 183 group_ = cache->owning_group(); |
182 | 184 |
183 // If the handler is spun up, ask it to compute a response. | 185 // If the handler is spun up, ask it to compute a response. |
184 AppCacheExecutableHandler* handler = | 186 AppCacheExecutableHandler* handler = |
185 cache->GetExecutableHandler(entry_.response_id()); | 187 cache->GetExecutableHandler(entry_.response_id()); |
186 if (handler) { | 188 if (handler) { |
187 InvokeExecutableHandler(handler); | 189 InvokeExecutableHandler(handler); |
188 return; | 190 return; |
189 } | 191 } |
190 | 192 |
191 // Handler is not spun up yet, load the script resource to do that. | 193 // Handler is not spun up yet, load the script resource to do that. |
192 // NOTE: This is not ideal since multiple jobs may be doing this, | 194 // NOTE: This is not ideal since multiple jobs may be doing this, |
193 // concurrently but close enough for now, the first to load the script | 195 // concurrently but close enough for now, the first to load the script |
194 // will win. | 196 // will win. |
195 | 197 |
196 // Read the script data, truncating if its too large. | 198 // Read the script data, truncating if its too large. |
197 // NOTE: we just issue one read and don't bother chaining if the resource | 199 // NOTE: we just issue one read and don't bother chaining if the resource |
198 // is very (very) large, close enough for now. | 200 // is very (very) large, close enough for now. |
199 const int64 kLimit = 500 * 1000; | 201 const int64_t kLimit = 500 * 1000; |
200 handler_source_buffer_ = new net::GrowableIOBuffer(); | 202 handler_source_buffer_ = new net::GrowableIOBuffer(); |
201 handler_source_buffer_->SetCapacity(kLimit); | 203 handler_source_buffer_->SetCapacity(kLimit); |
202 handler_source_reader_.reset(storage_->CreateResponseReader( | 204 handler_source_reader_.reset(storage_->CreateResponseReader( |
203 manifest_url_, group_id_, entry_.response_id())); | 205 manifest_url_, group_id_, entry_.response_id())); |
204 handler_source_reader_->ReadData( | 206 handler_source_reader_->ReadData( |
205 handler_source_buffer_.get(), | 207 handler_source_buffer_.get(), |
206 kLimit, | 208 kLimit, |
207 base::Bind(&AppCacheURLRequestJob::OnExecutableSourceLoaded, | 209 base::Bind(&AppCacheURLRequestJob::OnExecutableSourceLoaded, |
208 base::Unretained(this))); | 210 base::Unretained(this))); |
209 } | 211 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 void AppCacheURLRequestJob::BeginErrorDelivery(const char* message) { | 271 void AppCacheURLRequestJob::BeginErrorDelivery(const char* message) { |
270 if (host_) | 272 if (host_) |
271 host_->frontend()->OnLogMessage(host_->host_id(), APPCACHE_LOG_ERROR, | 273 host_->frontend()->OnLogMessage(host_->host_id(), APPCACHE_LOG_ERROR, |
272 message); | 274 message); |
273 delivery_type_ = ERROR_DELIVERY; | 275 delivery_type_ = ERROR_DELIVERY; |
274 storage_ = NULL; | 276 storage_ = NULL; |
275 BeginDelivery(); | 277 BeginDelivery(); |
276 } | 278 } |
277 | 279 |
278 void AppCacheURLRequestJob::OnResponseInfoLoaded( | 280 void AppCacheURLRequestJob::OnResponseInfoLoaded( |
279 AppCacheResponseInfo* response_info, int64 response_id) { | 281 AppCacheResponseInfo* response_info, |
| 282 int64_t response_id) { |
280 DCHECK(is_delivering_appcache_response()); | 283 DCHECK(is_delivering_appcache_response()); |
281 if (response_info) { | 284 if (response_info) { |
282 info_ = response_info; | 285 info_ = response_info; |
283 reader_.reset(storage_->CreateResponseReader( | 286 reader_.reset(storage_->CreateResponseReader( |
284 manifest_url_, group_id_, entry_.response_id())); | 287 manifest_url_, group_id_, entry_.response_id())); |
285 | 288 |
286 if (is_range_request()) | 289 if (is_range_request()) |
287 SetupRangeResponse(); | 290 SetupRangeResponse(); |
288 | 291 |
289 NotifyHeadersComplete(); | 292 NotifyHeadersComplete(); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 if (ranges.size() == 1U) | 447 if (ranges.size() == 1U) |
445 range_requested_ = ranges[0]; | 448 range_requested_ = ranges[0]; |
446 } | 449 } |
447 | 450 |
448 void AppCacheURLRequestJob::NotifyRestartRequired() { | 451 void AppCacheURLRequestJob::NotifyRestartRequired() { |
449 on_prepare_to_restart_callback_.Run(); | 452 on_prepare_to_restart_callback_.Run(); |
450 URLRequestJob::NotifyRestartRequired(); | 453 URLRequestJob::NotifyRestartRequired(); |
451 } | 454 } |
452 | 455 |
453 } // namespace content | 456 } // namespace content |
OLD | NEW |