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> |
| 8 #include <stdint.h> |
| 9 |
7 #include "base/bind.h" | 10 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
9 #include "base/callback.h" | 12 #include "base/callback.h" |
10 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
11 #include "base/location.h" | 14 #include "base/location.h" |
| 15 #include "base/macros.h" |
12 #include "base/memory/scoped_ptr.h" | 16 #include "base/memory/scoped_ptr.h" |
13 #include "base/message_loop/message_loop.h" | 17 #include "base/message_loop/message_loop.h" |
14 #include "base/run_loop.h" | 18 #include "base/run_loop.h" |
15 #include "base/strings/stringprintf.h" | 19 #include "base/strings/stringprintf.h" |
16 #include "base/task_runner.h" | 20 #include "base/task_runner.h" |
17 #include "base/time/time.h" | 21 #include "base/time/time.h" |
18 #include "content/public/test/async_file_test_helper.h" | 22 #include "content/public/test/async_file_test_helper.h" |
19 #include "content/public/test/test_file_system_context.h" | 23 #include "content/public/test/test_file_system_context.h" |
20 #include "net/base/completion_callback.h" | 24 #include "net/base/completion_callback.h" |
21 #include "net/base/io_buffer.h" | 25 #include "net/base/io_buffer.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 void Close() override { delete this; } // Note this is required by the API. | 77 void Close() override { delete this; } // Note this is required by the API. |
74 | 78 |
75 std::string GetKey() const override { return entry_->GetKey(); } | 79 std::string GetKey() const override { return entry_->GetKey(); } |
76 | 80 |
77 base::Time GetLastUsed() const override { return entry_->GetLastUsed(); } | 81 base::Time GetLastUsed() const override { return entry_->GetLastUsed(); } |
78 | 82 |
79 base::Time GetLastModified() const override { | 83 base::Time GetLastModified() const override { |
80 return entry_->GetLastModified(); | 84 return entry_->GetLastModified(); |
81 } | 85 } |
82 | 86 |
83 int32 GetDataSize(int index) const override { | 87 int32_t GetDataSize(int index) const override { |
84 return entry_->GetDataSize(index); | 88 return entry_->GetDataSize(index); |
85 } | 89 } |
86 | 90 |
87 int ReadData(int index, | 91 int ReadData(int index, |
88 int offset, | 92 int offset, |
89 IOBuffer* buf, | 93 IOBuffer* buf, |
90 int buf_len, | 94 int buf_len, |
91 const CompletionCallback& original_callback) override { | 95 const CompletionCallback& original_callback) override { |
92 net::TestCompletionCallback callback; | 96 net::TestCompletionCallback callback; |
93 int rv = entry_->ReadData(index, offset, buf, buf_len, callback.callback()); | 97 int rv = entry_->ReadData(index, offset, buf, buf_len, callback.callback()); |
94 DCHECK_NE(rv, net::ERR_IO_PENDING) | 98 DCHECK_NE(rv, net::ERR_IO_PENDING) |
95 << "Test expects to use a MEMORY_CACHE instance, which is synchronous."; | 99 << "Test expects to use a MEMORY_CACHE instance, which is synchronous."; |
96 pending_read_callbacks_.push_back(base::Bind(original_callback, rv)); | 100 pending_read_callbacks_.push_back(base::Bind(original_callback, rv)); |
97 return net::ERR_IO_PENDING; | 101 return net::ERR_IO_PENDING; |
98 } | 102 } |
99 | 103 |
100 int WriteData(int index, | 104 int WriteData(int index, |
101 int offset, | 105 int offset, |
102 IOBuffer* buf, | 106 IOBuffer* buf, |
103 int buf_len, | 107 int buf_len, |
104 const CompletionCallback& callback, | 108 const CompletionCallback& callback, |
105 bool truncate) override { | 109 bool truncate) override { |
106 return entry_->WriteData(index, offset, buf, buf_len, callback, truncate); | 110 return entry_->WriteData(index, offset, buf, buf_len, callback, truncate); |
107 } | 111 } |
108 | 112 |
109 int ReadSparseData(int64 offset, | 113 int ReadSparseData(int64_t offset, |
110 IOBuffer* buf, | 114 IOBuffer* buf, |
111 int buf_len, | 115 int buf_len, |
112 const CompletionCallback& callback) override { | 116 const CompletionCallback& callback) override { |
113 return entry_->ReadSparseData(offset, buf, buf_len, callback); | 117 return entry_->ReadSparseData(offset, buf, buf_len, callback); |
114 } | 118 } |
115 | 119 |
116 int WriteSparseData(int64 offset, | 120 int WriteSparseData(int64_t offset, |
117 IOBuffer* buf, | 121 IOBuffer* buf, |
118 int buf_len, | 122 int buf_len, |
119 const CompletionCallback& callback) override { | 123 const CompletionCallback& callback) override { |
120 return entry_->WriteSparseData(offset, buf, buf_len, callback); | 124 return entry_->WriteSparseData(offset, buf, buf_len, callback); |
121 } | 125 } |
122 | 126 |
123 int GetAvailableRange(int64 offset, | 127 int GetAvailableRange(int64_t offset, |
124 int len, | 128 int len, |
125 int64* start, | 129 int64_t* start, |
126 const CompletionCallback& callback) override { | 130 const CompletionCallback& callback) override { |
127 return entry_->GetAvailableRange(offset, len, start, callback); | 131 return entry_->GetAvailableRange(offset, len, start, callback); |
128 } | 132 } |
129 | 133 |
130 bool CouldBeSparse() const override { return entry_->CouldBeSparse(); } | 134 bool CouldBeSparse() const override { return entry_->CouldBeSparse(); } |
131 | 135 |
132 void CancelSparseIO() override { entry_->CancelSparseIO(); } | 136 void CancelSparseIO() override { entry_->CancelSparseIO(); } |
133 | 137 |
134 int ReadyForSparseIO(const CompletionCallback& callback) override { | 138 int ReadyForSparseIO(const CompletionCallback& callback) override { |
135 return entry_->ReadyForSparseIO(callback); | 139 return entry_->ReadyForSparseIO(callback); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 FROM_HERE, | 222 FROM_HERE, |
219 base::Bind(base::IgnoreResult(&FakeFileStreamReader::ReadImpl), | 223 base::Bind(base::IgnoreResult(&FakeFileStreamReader::ReadImpl), |
220 base::Unretained(this), make_scoped_refptr(buf), | 224 base::Unretained(this), make_scoped_refptr(buf), |
221 buf_length, done)); | 225 buf_length, done)); |
222 } else { | 226 } else { |
223 async_task_runner_->PostTask(FROM_HERE, base::Bind(done, net_error_)); | 227 async_task_runner_->PostTask(FROM_HERE, base::Bind(done, net_error_)); |
224 } | 228 } |
225 return net::ERR_IO_PENDING; | 229 return net::ERR_IO_PENDING; |
226 } | 230 } |
227 | 231 |
228 int64 GetLength(const net::Int64CompletionCallback& size_callback) override { | 232 int64_t GetLength( |
| 233 const net::Int64CompletionCallback& size_callback) override { |
229 // When async_task_runner_ is not set, return synchronously. | 234 // When async_task_runner_ is not set, return synchronously. |
230 if (!async_task_runner_.get()) { | 235 if (!async_task_runner_.get()) { |
231 if (net_error_ == net::OK) { | 236 if (net_error_ == net::OK) { |
232 return size_; | 237 return size_; |
233 } else { | 238 } else { |
234 return net_error_; | 239 return net_error_; |
235 } | 240 } |
236 } | 241 } |
237 if (net_error_ == net::OK) { | 242 if (net_error_ == net::OK) { |
238 async_task_runner_->PostTask(FROM_HERE, base::Bind(size_callback, size_)); | 243 async_task_runner_->PostTask(FROM_HERE, base::Bind(size_callback, size_)); |
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 reader_->Read(buffer.get(), kReadLength, &bytes_read, | 826 reader_->Read(buffer.get(), kReadLength, &bytes_read, |
822 base::Bind(&SetValue<int>, &async_bytes_read))); | 827 base::Bind(&SetValue<int>, &async_bytes_read))); |
823 EXPECT_EQ(net::OK, reader_->net_error()); | 828 EXPECT_EQ(net::OK, reader_->net_error()); |
824 EXPECT_EQ(kReadLength, static_cast<size_t>(bytes_read)); | 829 EXPECT_EQ(kReadLength, static_cast<size_t>(bytes_read)); |
825 EXPECT_EQ(0, async_bytes_read); | 830 EXPECT_EQ(0, async_bytes_read); |
826 EXPECT_EQ(0, memcmp(buffer->data(), "st ", kReadLength)); | 831 EXPECT_EQ(0, memcmp(buffer->data(), "st ", kReadLength)); |
827 } | 832 } |
828 | 833 |
829 TEST_F(BlobReaderTest, FileSomeAsyncSegmentedOffsetsUnknownSizes) { | 834 TEST_F(BlobReaderTest, FileSomeAsyncSegmentedOffsetsUnknownSizes) { |
830 // This tests includes: | 835 // This tests includes: |
831 // * Unknown file sizes (item length of uint64::max) for every other item. | 836 // * Unknown file sizes (item length of uint64_t::max) for every other item. |
832 // * Offsets for every 3rd file item. | 837 // * Offsets for every 3rd file item. |
833 // * Non-async reader for every 4th file item. | 838 // * Non-async reader for every 4th file item. |
834 BlobDataBuilder b("uuid"); | 839 BlobDataBuilder b("uuid"); |
835 const FilePath kPathBase = FilePath::FromUTF8Unsafe("/fake/file.txt"); | 840 const FilePath kPathBase = FilePath::FromUTF8Unsafe("/fake/file.txt"); |
836 const base::Time kTime = base::Time::Now(); | 841 const base::Time kTime = base::Time::Now(); |
837 const size_t kNumItems = 10; | 842 const size_t kNumItems = 10; |
838 const size_t kItemSize = 6; | 843 const size_t kItemSize = 6; |
839 const size_t kBufferSize = 10; | 844 const size_t kBufferSize = 10; |
840 const size_t kTotalSize = kNumItems * kItemSize; | 845 const size_t kTotalSize = kNumItems * kItemSize; |
841 char current_value = 0; | 846 char current_value = 0; |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1102 EXPECT_EQ(BlobReader::Status::DONE, | 1107 EXPECT_EQ(BlobReader::Status::DONE, |
1103 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); | 1108 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); |
1104 buffer = CreateBuffer(kDataSize + 1); | 1109 buffer = CreateBuffer(kDataSize + 1); |
1105 EXPECT_EQ(BlobReader::Status::NET_ERROR, | 1110 EXPECT_EQ(BlobReader::Status::NET_ERROR, |
1106 reader_->SetReadRange(0, kDataSize + 1)); | 1111 reader_->SetReadRange(0, kDataSize + 1)); |
1107 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, reader_->net_error()); | 1112 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, reader_->net_error()); |
1108 } | 1113 } |
1109 | 1114 |
1110 } // namespace | 1115 } // namespace |
1111 } // namespace storage | 1116 } // namespace storage |
OLD | NEW |