| 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_response.h" | 5 #include "content/browser/appcache/appcache_response.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 | 22 |
| 23 namespace { | 23 namespace { |
| 24 | 24 |
| 25 // Disk cache entry data indices. | 25 // Disk cache entry data indices. |
| 26 enum { kResponseInfoIndex, kResponseContentIndex, kResponseMetadataIndex }; | 26 enum { kResponseInfoIndex, kResponseContentIndex, kResponseMetadataIndex }; |
| 27 | 27 |
| 28 // An IOBuffer that wraps a pickle's data. Ownership of the | 28 // An IOBuffer that wraps a pickle's data. Ownership of the |
| 29 // pickle is transfered to the WrappedPickleIOBuffer object. | 29 // pickle is transfered to the WrappedPickleIOBuffer object. |
| 30 class WrappedPickleIOBuffer : public net::WrappedIOBuffer { | 30 class WrappedPickleIOBuffer : public net::WrappedIOBuffer { |
| 31 public: | 31 public: |
| 32 explicit WrappedPickleIOBuffer(const Pickle* pickle) : | 32 explicit WrappedPickleIOBuffer(const base::Pickle* pickle) |
| 33 net::WrappedIOBuffer(reinterpret_cast<const char*>(pickle->data())), | 33 : net::WrappedIOBuffer(reinterpret_cast<const char*>(pickle->data())), |
| 34 pickle_(pickle) { | 34 pickle_(pickle) { |
| 35 DCHECK(pickle->data()); | 35 DCHECK(pickle->data()); |
| 36 } | 36 } |
| 37 | 37 |
| 38 private: | 38 private: |
| 39 ~WrappedPickleIOBuffer() override {} | 39 ~WrappedPickleIOBuffer() override {} |
| 40 | 40 |
| 41 scoped_ptr<const Pickle> pickle_; | 41 scoped_ptr<const base::Pickle> pickle_; |
| 42 }; | 42 }; |
| 43 | 43 |
| 44 } // anon namespace | 44 } // anon namespace |
| 45 | 45 |
| 46 | 46 |
| 47 // AppCacheResponseInfo ---------------------------------------------- | 47 // AppCacheResponseInfo ---------------------------------------------- |
| 48 | 48 |
| 49 AppCacheResponseInfo::AppCacheResponseInfo( | 49 AppCacheResponseInfo::AppCacheResponseInfo( |
| 50 AppCacheStorage* storage, const GURL& manifest_url, | 50 AppCacheStorage* storage, const GURL& manifest_url, |
| 51 int64 response_id, net::HttpResponseInfo* http_info, | 51 int64 response_id, net::HttpResponseInfo* http_info, |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 } | 247 } |
| 248 | 248 |
| 249 void AppCacheResponseReader::OnIOComplete(int result) { | 249 void AppCacheResponseReader::OnIOComplete(int result) { |
| 250 if (result >= 0) { | 250 if (result >= 0) { |
| 251 if (reading_metadata_size_) { | 251 if (reading_metadata_size_) { |
| 252 DCHECK(reading_metadata_size_ == result); | 252 DCHECK(reading_metadata_size_ == result); |
| 253 DCHECK(info_buffer_->http_info->metadata); | 253 DCHECK(info_buffer_->http_info->metadata); |
| 254 reading_metadata_size_ = 0; | 254 reading_metadata_size_ = 0; |
| 255 } else if (info_buffer_.get()) { | 255 } else if (info_buffer_.get()) { |
| 256 // Deserialize the http info structure, ensuring we got headers. | 256 // Deserialize the http info structure, ensuring we got headers. |
| 257 Pickle pickle(buffer_->data(), result); | 257 base::Pickle pickle(buffer_->data(), result); |
| 258 scoped_ptr<net::HttpResponseInfo> info(new net::HttpResponseInfo); | 258 scoped_ptr<net::HttpResponseInfo> info(new net::HttpResponseInfo); |
| 259 bool response_truncated = false; | 259 bool response_truncated = false; |
| 260 if (!info->InitFromPickle(pickle, &response_truncated) || | 260 if (!info->InitFromPickle(pickle, &response_truncated) || |
| 261 !info->headers.get()) { | 261 !info->headers.get()) { |
| 262 InvokeUserCompletionCallback(net::ERR_FAILED); | 262 InvokeUserCompletionCallback(net::ERR_FAILED); |
| 263 return; | 263 return; |
| 264 } | 264 } |
| 265 DCHECK(!response_truncated); | 265 DCHECK(!response_truncated); |
| 266 info_buffer_->http_info.reset(info.release()); | 266 info_buffer_->http_info.reset(info.release()); |
| 267 | 267 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 } | 329 } |
| 330 | 330 |
| 331 void AppCacheResponseWriter::ContinueWriteInfo() { | 331 void AppCacheResponseWriter::ContinueWriteInfo() { |
| 332 if (!entry_) { | 332 if (!entry_) { |
| 333 ScheduleIOCompletionCallback(net::ERR_FAILED); | 333 ScheduleIOCompletionCallback(net::ERR_FAILED); |
| 334 return; | 334 return; |
| 335 } | 335 } |
| 336 | 336 |
| 337 const bool kSkipTransientHeaders = true; | 337 const bool kSkipTransientHeaders = true; |
| 338 const bool kTruncated = false; | 338 const bool kTruncated = false; |
| 339 Pickle* pickle = new Pickle; | 339 base::Pickle* pickle = new base::Pickle; |
| 340 info_buffer_->http_info->Persist(pickle, kSkipTransientHeaders, kTruncated); | 340 info_buffer_->http_info->Persist(pickle, kSkipTransientHeaders, kTruncated); |
| 341 write_amount_ = static_cast<int>(pickle->size()); | 341 write_amount_ = static_cast<int>(pickle->size()); |
| 342 buffer_ = new WrappedPickleIOBuffer(pickle); // takes ownership of pickle | 342 buffer_ = new WrappedPickleIOBuffer(pickle); // takes ownership of pickle |
| 343 WriteRaw(kResponseInfoIndex, 0, buffer_.get(), write_amount_); | 343 WriteRaw(kResponseInfoIndex, 0, buffer_.get(), write_amount_); |
| 344 } | 344 } |
| 345 | 345 |
| 346 void AppCacheResponseWriter::WriteData( | 346 void AppCacheResponseWriter::WriteData( |
| 347 net::IOBuffer* buf, int buf_len, const net::CompletionCallback& callback) { | 347 net::IOBuffer* buf, int buf_len, const net::CompletionCallback& callback) { |
| 348 DCHECK(!callback.is_null()); | 348 DCHECK(!callback.is_null()); |
| 349 DCHECK(!IsWritePending()); | 349 DCHECK(!IsWritePending()); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 } | 475 } |
| 476 WriteRaw(kResponseMetadataIndex, 0, buffer_.get(), write_amount_); | 476 WriteRaw(kResponseMetadataIndex, 0, buffer_.get(), write_amount_); |
| 477 } | 477 } |
| 478 | 478 |
| 479 void AppCacheResponseMetadataWriter::OnIOComplete(int result) { | 479 void AppCacheResponseMetadataWriter::OnIOComplete(int result) { |
| 480 DCHECK(result < 0 || write_amount_ == result); | 480 DCHECK(result < 0 || write_amount_ == result); |
| 481 InvokeUserCompletionCallback(result); | 481 InvokeUserCompletionCallback(result); |
| 482 } | 482 } |
| 483 | 483 |
| 484 } // namespace content | 484 } // namespace content |
| OLD | NEW |