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 "net/http/http_cache.h" | 5 #include "net/http/http_cache.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 | 10 |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 public: | 204 public: |
205 explicit MetadataWriter(HttpCache::Transaction* trans) | 205 explicit MetadataWriter(HttpCache::Transaction* trans) |
206 : transaction_(trans), | 206 : transaction_(trans), |
207 verified_(false), | 207 verified_(false), |
208 buf_len_(0) { | 208 buf_len_(0) { |
209 } | 209 } |
210 | 210 |
211 ~MetadataWriter() {} | 211 ~MetadataWriter() {} |
212 | 212 |
213 // Implements the bulk of HttpCache::WriteMetadata. | 213 // Implements the bulk of HttpCache::WriteMetadata. |
214 void Write(const GURL& url, base::Time expected_response_time, IOBuffer* buf, | 214 void Write(const GURL& url, |
| 215 double expected_response_time, |
| 216 IOBuffer* buf, |
215 int buf_len); | 217 int buf_len); |
216 | 218 |
217 private: | 219 private: |
218 void VerifyResponse(int result); | 220 void VerifyResponse(int result); |
219 void SelfDestroy(); | 221 void SelfDestroy(); |
220 void OnIOComplete(int result); | 222 void OnIOComplete(int result); |
221 | 223 |
222 scoped_ptr<HttpCache::Transaction> transaction_; | 224 scoped_ptr<HttpCache::Transaction> transaction_; |
223 bool verified_; | 225 bool verified_; |
224 scoped_refptr<IOBuffer> buf_; | 226 scoped_refptr<IOBuffer> buf_; |
225 int buf_len_; | 227 int buf_len_; |
226 base::Time expected_response_time_; | 228 double expected_response_time_; |
227 HttpRequestInfo request_info_; | 229 HttpRequestInfo request_info_; |
228 DISALLOW_COPY_AND_ASSIGN(MetadataWriter); | 230 DISALLOW_COPY_AND_ASSIGN(MetadataWriter); |
229 }; | 231 }; |
230 | 232 |
231 void HttpCache::MetadataWriter::Write(const GURL& url, | 233 void HttpCache::MetadataWriter::Write(const GURL& url, |
232 base::Time expected_response_time, | 234 double expected_response_time, |
233 IOBuffer* buf, int buf_len) { | 235 IOBuffer* buf, |
| 236 int buf_len) { |
234 DCHECK_GT(buf_len, 0); | 237 DCHECK_GT(buf_len, 0); |
235 DCHECK(buf); | 238 DCHECK(buf); |
236 DCHECK(buf->data()); | 239 DCHECK(buf->data()); |
237 request_info_.url = url; | 240 request_info_.url = url; |
238 request_info_.method = "GET"; | 241 request_info_.method = "GET"; |
239 request_info_.load_flags = LOAD_ONLY_FROM_CACHE; | 242 request_info_.load_flags = LOAD_ONLY_FROM_CACHE; |
240 | 243 |
241 expected_response_time_ = expected_response_time; | 244 expected_response_time_ = expected_response_time; |
242 buf_ = buf; | 245 buf_ = buf; |
243 buf_len_ = buf_len; | 246 buf_len_ = buf_len; |
244 verified_ = false; | 247 verified_ = false; |
245 | 248 |
246 int rv = transaction_->Start( | 249 int rv = transaction_->Start( |
247 &request_info_, | 250 &request_info_, |
248 base::Bind(&MetadataWriter::OnIOComplete, base::Unretained(this)), | 251 base::Bind(&MetadataWriter::OnIOComplete, base::Unretained(this)), |
249 BoundNetLog()); | 252 BoundNetLog()); |
250 if (rv != ERR_IO_PENDING) | 253 if (rv != ERR_IO_PENDING) |
251 VerifyResponse(rv); | 254 VerifyResponse(rv); |
252 } | 255 } |
253 | 256 |
254 void HttpCache::MetadataWriter::VerifyResponse(int result) { | 257 void HttpCache::MetadataWriter::VerifyResponse(int result) { |
255 verified_ = true; | 258 verified_ = true; |
256 if (result != OK) | 259 if (result != OK) |
257 return SelfDestroy(); | 260 return SelfDestroy(); |
258 | 261 |
259 const HttpResponseInfo* response_info = transaction_->GetResponseInfo(); | 262 const HttpResponseInfo* response_info = transaction_->GetResponseInfo(); |
260 DCHECK(response_info->was_cached); | 263 DCHECK(response_info->was_cached); |
261 if (response_info->response_time != expected_response_time_) | 264 if (response_info->response_time.ToDoubleT() != expected_response_time_) |
262 return SelfDestroy(); | 265 return SelfDestroy(); |
263 | 266 |
264 result = transaction_->WriteMetadata( | 267 result = transaction_->WriteMetadata( |
265 buf_.get(), | 268 buf_.get(), |
266 buf_len_, | 269 buf_len_, |
267 base::Bind(&MetadataWriter::OnIOComplete, base::Unretained(this))); | 270 base::Bind(&MetadataWriter::OnIOComplete, base::Unretained(this))); |
268 if (result != ERR_IO_PENDING) | 271 if (result != ERR_IO_PENDING) |
269 SelfDestroy(); | 272 SelfDestroy(); |
270 } | 273 } |
271 | 274 |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 // static | 572 // static |
570 bool HttpCache::ParseResponseInfo(const char* data, int len, | 573 bool HttpCache::ParseResponseInfo(const char* data, int len, |
571 HttpResponseInfo* response_info, | 574 HttpResponseInfo* response_info, |
572 bool* response_truncated) { | 575 bool* response_truncated) { |
573 Pickle pickle(data, len); | 576 Pickle pickle(data, len); |
574 return response_info->InitFromPickle(pickle, response_truncated); | 577 return response_info->InitFromPickle(pickle, response_truncated); |
575 } | 578 } |
576 | 579 |
577 void HttpCache::WriteMetadata(const GURL& url, | 580 void HttpCache::WriteMetadata(const GURL& url, |
578 RequestPriority priority, | 581 RequestPriority priority, |
579 base::Time expected_response_time, | 582 double expected_response_time, |
580 IOBuffer* buf, | 583 IOBuffer* buf, |
581 int buf_len) { | 584 int buf_len) { |
582 if (!buf_len) | 585 if (!buf_len) |
583 return; | 586 return; |
584 | 587 |
585 // Do lazy initialization of disk cache if needed. | 588 // Do lazy initialization of disk cache if needed. |
586 if (!disk_cache_.get()) { | 589 if (!disk_cache_.get()) { |
587 // We don't care about the result. | 590 // We don't care about the result. |
588 CreateBackend(NULL, net::CompletionCallback()); | 591 CreateBackend(NULL, net::CompletionCallback()); |
589 } | 592 } |
(...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1415 building_backend_ = false; | 1418 building_backend_ = false; |
1416 DeletePendingOp(pending_op); | 1419 DeletePendingOp(pending_op); |
1417 } | 1420 } |
1418 | 1421 |
1419 // The cache may be gone when we return from the callback. | 1422 // The cache may be gone when we return from the callback. |
1420 if (!item->DoCallback(result, disk_cache_.get())) | 1423 if (!item->DoCallback(result, disk_cache_.get())) |
1421 item->NotifyTransaction(result, NULL); | 1424 item->NotifyTransaction(result, NULL); |
1422 } | 1425 } |
1423 | 1426 |
1424 } // namespace net | 1427 } // namespace net |
OLD | NEW |