| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "storage/browser/blob/blob_reader.h" | 5 #include "storage/browser/blob/blob_reader.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <limits> | 10 #include <limits> |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 namespace { | 30 namespace { |
| 31 bool IsFileType(DataElement::Type type) { | 31 bool IsFileType(DataElement::Type type) { |
| 32 switch (type) { | 32 switch (type) { |
| 33 case DataElement::TYPE_FILE: | 33 case DataElement::TYPE_FILE: |
| 34 case DataElement::TYPE_FILE_FILESYSTEM: | 34 case DataElement::TYPE_FILE_FILESYSTEM: |
| 35 return true; | 35 return true; |
| 36 default: | 36 default: |
| 37 return false; | 37 return false; |
| 38 } | 38 } |
| 39 } | 39 } |
| 40 |
| 41 int TransformBlobErrorToNetError(IPCBlobCreationCancelCode reason) { |
| 42 switch (reason) { |
| 43 case IPCBlobCreationCancelCode::UNKNOWN: |
| 44 return net::ERR_FAILED; |
| 45 case IPCBlobCreationCancelCode::OUT_OF_MEMORY: |
| 46 return net::ERR_OUT_OF_MEMORY; |
| 47 case IPCBlobCreationCancelCode::FILE_WRITE_FAILED: |
| 48 return net::ERR_FILE_NO_SPACE; |
| 49 case IPCBlobCreationCancelCode::SOURCE_DIED_IN_TRANSIT: |
| 50 return net::ERR_UNEXPECTED; |
| 51 case IPCBlobCreationCancelCode::BLOB_DEREFERENCED_WHILE_BUILDING: |
| 52 return net::ERR_UNEXPECTED; |
| 53 case IPCBlobCreationCancelCode::REFERENCED_BLOB_BROKEN: |
| 54 return net::ERR_INVALID_HANDLE; |
| 55 } |
| 56 NOTREACHED(); |
| 57 } |
| 40 } // namespace | 58 } // namespace |
| 41 | 59 |
| 42 BlobReader::FileStreamReaderProvider::~FileStreamReaderProvider() {} | 60 BlobReader::FileStreamReaderProvider::~FileStreamReaderProvider() {} |
| 43 | 61 |
| 44 BlobReader::BlobReader( | 62 BlobReader::BlobReader( |
| 45 const BlobDataHandle* blob_handle, | 63 const BlobDataHandle* blob_handle, |
| 46 scoped_ptr<FileStreamReaderProvider> file_stream_provider, | 64 scoped_ptr<FileStreamReaderProvider> file_stream_provider, |
| 47 base::SequencedTaskRunner* file_task_runner) | 65 base::SequencedTaskRunner* file_task_runner) |
| 48 : file_stream_provider_(std::move(file_stream_provider)), | 66 : file_stream_provider_(std::move(file_stream_provider)), |
| 49 file_task_runner_(file_task_runner), | 67 file_task_runner_(file_task_runner), |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 read_buf_ = nullptr; | 194 read_buf_ = nullptr; |
| 177 done.Run(net_error); | 195 done.Run(net_error); |
| 178 } | 196 } |
| 179 | 197 |
| 180 BlobReader::Status BlobReader::ReportError(int net_error) { | 198 BlobReader::Status BlobReader::ReportError(int net_error) { |
| 181 net_error_ = net_error; | 199 net_error_ = net_error; |
| 182 return Status::NET_ERROR; | 200 return Status::NET_ERROR; |
| 183 } | 201 } |
| 184 | 202 |
| 185 void BlobReader::AsyncCalculateSize(const net::CompletionCallback& done, | 203 void BlobReader::AsyncCalculateSize(const net::CompletionCallback& done, |
| 186 bool async_succeeded) { | 204 bool async_succeeded, |
| 205 IPCBlobCreationCancelCode reason) { |
| 187 if (!async_succeeded) { | 206 if (!async_succeeded) { |
| 188 InvalidateCallbacksAndDone(net::ERR_FAILED, done); | 207 InvalidateCallbacksAndDone(TransformBlobErrorToNetError(reason), done); |
| 189 return; | 208 return; |
| 190 } | 209 } |
| 191 DCHECK(!blob_handle_->IsBroken()) << "Callback should have returned false."; | 210 DCHECK(!blob_handle_->IsBroken()) << "Callback should have returned false."; |
| 192 blob_data_ = blob_handle_->CreateSnapshot(); | 211 blob_data_ = blob_handle_->CreateSnapshot(); |
| 193 Status size_status = CalculateSizeImpl(done); | 212 Status size_status = CalculateSizeImpl(done); |
| 194 switch (size_status) { | 213 switch (size_status) { |
| 195 case Status::NET_ERROR: | 214 case Status::NET_ERROR: |
| 196 InvalidateCallbacksAndDone(net_error_, done); | 215 InvalidateCallbacksAndDone(net_error_, done); |
| 197 return; | 216 return; |
| 198 case Status::DONE: | 217 case Status::DONE: |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 index_to_reader_.erase(found); | 614 index_to_reader_.erase(found); |
| 596 return; | 615 return; |
| 597 } | 616 } |
| 598 found->second = reader.release(); | 617 found->second = reader.release(); |
| 599 } else if (reader.get()) { | 618 } else if (reader.get()) { |
| 600 index_to_reader_[current_item_index_] = reader.release(); | 619 index_to_reader_[current_item_index_] = reader.release(); |
| 601 } | 620 } |
| 602 } | 621 } |
| 603 | 622 |
| 604 } // namespace storage | 623 } // namespace storage |
| OLD | NEW |