| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/files/file_path.h" | 11 #include "base/files/file_path.h" |
| 12 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" |
| 13 #include "base/files/scoped_temp_dir.h" | 13 #include "base/files/scoped_temp_dir.h" |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
| 16 #include "base/memory/ref_counted.h" | 16 #include "base/memory/ref_counted.h" |
| 17 #include "base/numerics/safe_conversions.h" | 17 #include "base/numerics/safe_conversions.h" |
| 18 #include "base/run_loop.h" | 18 #include "base/run_loop.h" |
| 19 #include "base/threading/thread_task_runner_handle.h" | 19 #include "base/threading/thread_task_runner_handle.h" |
| 20 #include "base/time/time.h" | 20 #include "base/time/time.h" |
| 21 #include "content/public/test/async_file_test_helper.h" | |
| 22 #include "content/public/test/test_file_system_context.h" | |
| 23 #include "net/base/net_errors.h" | 21 #include "net/base/net_errors.h" |
| 24 #include "net/base/request_priority.h" | 22 #include "net/base/request_priority.h" |
| 25 #include "net/base/test_completion_callback.h" | 23 #include "net/base/test_completion_callback.h" |
| 26 #include "net/disk_cache/disk_cache.h" | 24 #include "net/disk_cache/disk_cache.h" |
| 27 #include "net/http/http_byte_range.h" | 25 #include "net/http/http_byte_range.h" |
| 28 #include "net/http/http_request_headers.h" | 26 #include "net/http/http_request_headers.h" |
| 29 #include "net/http/http_response_headers.h" | 27 #include "net/http/http_response_headers.h" |
| 30 #include "net/url_request/url_request.h" | 28 #include "net/url_request/url_request.h" |
| 31 #include "net/url_request/url_request_context.h" | 29 #include "net/url_request/url_request_context.h" |
| 32 #include "net/url_request/url_request_job_factory_impl.h" | 30 #include "net/url_request/url_request_job_factory_impl.h" |
| 33 #include "net/url_request/url_request_test_util.h" | 31 #include "net/url_request/url_request_test_util.h" |
| 34 #include "storage/browser/blob/blob_data_builder.h" | 32 #include "storage/browser/blob/blob_data_builder.h" |
| 35 #include "storage/browser/blob/blob_data_handle.h" | 33 #include "storage/browser/blob/blob_data_handle.h" |
| 36 #include "storage/browser/blob/blob_data_snapshot.h" | 34 #include "storage/browser/blob/blob_data_snapshot.h" |
| 37 #include "storage/browser/blob/blob_storage_context.h" | 35 #include "storage/browser/blob/blob_storage_context.h" |
| 38 #include "storage/browser/blob/blob_url_request_job.h" | 36 #include "storage/browser/blob/blob_url_request_job.h" |
| 39 #include "storage/browser/fileapi/file_system_context.h" | 37 #include "storage/browser/fileapi/file_system_context.h" |
| 40 #include "storage/browser/fileapi/file_system_operation_context.h" | 38 #include "storage/browser/fileapi/file_system_operation_context.h" |
| 41 #include "storage/browser/fileapi/file_system_url.h" | 39 #include "storage/browser/fileapi/file_system_url.h" |
| 40 #include "storage/browser/test/async_file_test_helper.h" |
| 41 #include "storage/browser/test/test_file_system_context.h" |
| 42 #include "testing/gtest/include/gtest/gtest.h" | 42 #include "testing/gtest/include/gtest/gtest.h" |
| 43 | 43 |
| 44 using storage::BlobDataSnapshot; | 44 using storage::BlobDataSnapshot; |
| 45 using storage::BlobDataBuilder; | 45 using storage::BlobDataBuilder; |
| 46 using storage::BlobURLRequestJob; | 46 using storage::BlobURLRequestJob; |
| 47 | 47 |
| 48 namespace content { | 48 namespace content { |
| 49 | 49 |
| 50 namespace { | 50 namespace { |
| 51 | 51 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 74 // Our disk cache tests don't need a real data handle since the tests themselves | 74 // Our disk cache tests don't need a real data handle since the tests themselves |
| 75 // scope the disk cache and entries. | 75 // scope the disk cache and entries. |
| 76 class EmptyDataHandle : public storage::BlobDataBuilder::DataHandle { | 76 class EmptyDataHandle : public storage::BlobDataBuilder::DataHandle { |
| 77 private: | 77 private: |
| 78 ~EmptyDataHandle() override {} | 78 ~EmptyDataHandle() override {} |
| 79 }; | 79 }; |
| 80 | 80 |
| 81 std::unique_ptr<disk_cache::Backend> CreateInMemoryDiskCache() { | 81 std::unique_ptr<disk_cache::Backend> CreateInMemoryDiskCache() { |
| 82 std::unique_ptr<disk_cache::Backend> cache; | 82 std::unique_ptr<disk_cache::Backend> cache; |
| 83 net::TestCompletionCallback callback; | 83 net::TestCompletionCallback callback; |
| 84 int rv = disk_cache::CreateCacheBackend(net::MEMORY_CACHE, | 84 int rv = disk_cache::CreateCacheBackend( |
| 85 net::CACHE_BACKEND_DEFAULT, | 85 net::MEMORY_CACHE, net::CACHE_BACKEND_DEFAULT, base::FilePath(), 0, false, |
| 86 base::FilePath(), 0, | 86 nullptr, nullptr, &cache, callback.callback()); |
| 87 false, nullptr, nullptr, &cache, | |
| 88 callback.callback()); | |
| 89 EXPECT_EQ(net::OK, callback.GetResult(rv)); | 87 EXPECT_EQ(net::OK, callback.GetResult(rv)); |
| 90 | 88 |
| 91 return cache; | 89 return cache; |
| 92 } | 90 } |
| 93 | 91 |
| 94 disk_cache::ScopedEntryPtr CreateDiskCacheEntry(disk_cache::Backend* cache, | 92 disk_cache::ScopedEntryPtr CreateDiskCacheEntry(disk_cache::Backend* cache, |
| 95 const char* key, | 93 const char* key, |
| 96 const std::string& data) { | 94 const std::string& data) { |
| 97 disk_cache::Entry* temp_entry = nullptr; | 95 disk_cache::Entry* temp_entry = nullptr; |
| 98 net::TestCompletionCallback callback; | 96 net::TestCompletionCallback callback; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 121 iobuffer->size(), callback.callback(), false); | 119 iobuffer->size(), callback.callback(), false); |
| 122 EXPECT_EQ(static_cast<int>(side_data.size()), callback.GetResult(rv)); | 120 EXPECT_EQ(static_cast<int>(side_data.size()), callback.GetResult(rv)); |
| 123 return entry; | 121 return entry; |
| 124 } | 122 } |
| 125 | 123 |
| 126 } // namespace | 124 } // namespace |
| 127 | 125 |
| 128 class BlobURLRequestJobTest : public testing::Test { | 126 class BlobURLRequestJobTest : public testing::Test { |
| 129 public: | 127 public: |
| 130 // A simple ProtocolHandler implementation to create BlobURLRequestJob. | 128 // A simple ProtocolHandler implementation to create BlobURLRequestJob. |
| 131 class MockProtocolHandler : | 129 class MockProtocolHandler |
| 132 public net::URLRequestJobFactory::ProtocolHandler { | 130 : public net::URLRequestJobFactory::ProtocolHandler { |
| 133 public: | 131 public: |
| 134 MockProtocolHandler(BlobURLRequestJobTest* test) : test_(test) {} | 132 MockProtocolHandler(BlobURLRequestJobTest* test) : test_(test) {} |
| 135 | 133 |
| 136 // net::URLRequestJobFactory::ProtocolHandler override. | 134 // net::URLRequestJobFactory::ProtocolHandler override. |
| 137 net::URLRequestJob* MaybeCreateJob( | 135 net::URLRequestJob* MaybeCreateJob( |
| 138 net::URLRequest* request, | 136 net::URLRequest* request, |
| 139 net::NetworkDelegate* network_delegate) const override { | 137 net::NetworkDelegate* network_delegate) const override { |
| 140 return new BlobURLRequestJob(request, network_delegate, | 138 return new BlobURLRequestJob(request, network_delegate, |
| 141 test_->GetHandleFromBuilder(), | 139 test_->GetHandleFromBuilder(), |
| 142 test_->file_system_context_.get(), | 140 test_->file_system_context_.get(), |
| 143 base::ThreadTaskRunnerHandle::Get().get()); | 141 base::ThreadTaskRunnerHandle::Get().get()); |
| 144 } | 142 } |
| 145 | 143 |
| 146 private: | 144 private: |
| 147 BlobURLRequestJobTest* test_; | 145 BlobURLRequestJobTest* test_; |
| 148 }; | 146 }; |
| 149 | 147 |
| 150 BlobURLRequestJobTest() | 148 BlobURLRequestJobTest() |
| 151 : blob_data_(new BlobDataBuilder("uuid")), expected_status_code_(0) {} | 149 : blob_data_(new BlobDataBuilder("uuid")), expected_status_code_(0) {} |
| 152 | 150 |
| 153 void SetUp() override { | 151 void SetUp() override { |
| 154 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 152 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 155 | 153 |
| 156 temp_file1_ = temp_dir_.GetPath().AppendASCII("BlobFile1.dat"); | 154 temp_file1_ = temp_dir_.GetPath().AppendASCII("BlobFile1.dat"); |
| 157 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData1) - 1), | 155 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData1) - 1), |
| 158 base::WriteFile(temp_file1_, kTestFileData1, | 156 base::WriteFile(temp_file1_, kTestFileData1, |
| 159 arraysize(kTestFileData1) - 1)); | 157 arraysize(kTestFileData1) - 1)); |
| 160 base::File::Info file_info1; | 158 base::File::Info file_info1; |
| 161 base::GetFileInfo(temp_file1_, &file_info1); | 159 base::GetFileInfo(temp_file1_, &file_info1); |
| 162 temp_file_modification_time1_ = file_info1.last_modified; | 160 temp_file_modification_time1_ = file_info1.last_modified; |
| 163 | 161 |
| 164 temp_file2_ = temp_dir_.GetPath().AppendASCII("BlobFile2.dat"); | 162 temp_file2_ = temp_dir_.GetPath().AppendASCII("BlobFile2.dat"); |
| 165 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData2) - 1), | 163 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData2) - 1), |
| 166 base::WriteFile(temp_file2_, kTestFileData2, | 164 base::WriteFile(temp_file2_, kTestFileData2, |
| 167 arraysize(kTestFileData2) - 1)); | 165 arraysize(kTestFileData2) - 1)); |
| 168 base::File::Info file_info2; | 166 base::File::Info file_info2; |
| 169 base::GetFileInfo(temp_file2_, &file_info2); | 167 base::GetFileInfo(temp_file2_, &file_info2); |
| 170 temp_file_modification_time2_ = file_info2.last_modified; | 168 temp_file_modification_time2_ = file_info2.last_modified; |
| 171 | 169 |
| 172 disk_cache_backend_ = CreateInMemoryDiskCache(); | 170 disk_cache_backend_ = CreateInMemoryDiskCache(); |
| 173 disk_cache_entry_ = CreateDiskCacheEntry( | 171 disk_cache_entry_ = CreateDiskCacheEntry( |
| 174 disk_cache_backend_.get(), kTestDiskCacheKey1, kTestDiskCacheData1); | 172 disk_cache_backend_.get(), kTestDiskCacheKey1, kTestDiskCacheData1); |
| 175 | 173 |
| 176 url_request_job_factory_.SetProtocolHandler( | 174 url_request_job_factory_.SetProtocolHandler( |
| 177 "blob", base::MakeUnique<MockProtocolHandler>(this)); | 175 "blob", base::MakeUnique<MockProtocolHandler>(this)); |
| 178 url_request_context_.set_job_factory(&url_request_job_factory_); | 176 url_request_context_.set_job_factory(&url_request_job_factory_); |
| 179 } | 177 } |
| 180 | 178 |
| 181 void TearDown() override { | 179 void TearDown() override { |
| 182 blob_handle_.reset(); | 180 blob_handle_.reset(); |
| 183 request_.reset(); | 181 request_.reset(); |
| 184 // Clean up for ASAN | 182 // Clean up for ASAN |
| 185 base::RunLoop run_loop; | 183 base::RunLoop run_loop; |
| 186 run_loop.RunUntilIdle(); | 184 run_loop.RunUntilIdle(); |
| 187 } | 185 } |
| 188 | 186 |
| 189 void SetUpFileSystem() { | 187 void SetUpFileSystem() { |
| 190 // Prepare file system. | 188 // Prepare file system. |
| 191 file_system_context_ = | 189 file_system_context_ = |
| 192 CreateFileSystemContextForTesting(NULL, temp_dir_.GetPath()); | 190 CreateFileSystemContextForTesting(NULL, temp_dir_.GetPath()); |
| 193 | 191 |
| 194 file_system_context_->OpenFileSystem( | 192 file_system_context_->OpenFileSystem( |
| 195 GURL(kFileSystemURLOrigin), | 193 GURL(kFileSystemURLOrigin), kFileSystemType, |
| 196 kFileSystemType, | |
| 197 storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT, | 194 storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT, |
| 198 base::Bind(&BlobURLRequestJobTest::OnValidateFileSystem, | 195 base::Bind(&BlobURLRequestJobTest::OnValidateFileSystem, |
| 199 base::Unretained(this))); | 196 base::Unretained(this))); |
| 200 base::RunLoop().RunUntilIdle(); | 197 base::RunLoop().RunUntilIdle(); |
| 201 ASSERT_TRUE(file_system_root_url_.is_valid()); | 198 ASSERT_TRUE(file_system_root_url_.is_valid()); |
| 202 | 199 |
| 203 // Prepare files on file system. | 200 // Prepare files on file system. |
| 204 const char kFilename1[] = "FileSystemFile1.dat"; | 201 const char kFilename1[] = "FileSystemFile1.dat"; |
| 205 temp_file_system_file1_ = GetFileSystemURL(kFilename1); | 202 temp_file_system_file1_ = GetFileSystemURL(kFilename1); |
| 206 WriteFileSystemFile(kFilename1, kTestFileSystemFileData1, | 203 WriteFileSystemFile(kFilename1, kTestFileSystemFileData1, |
| 207 arraysize(kTestFileSystemFileData1) - 1, | 204 arraysize(kTestFileSystemFileData1) - 1, |
| 208 &temp_file_system_file_modification_time1_); | 205 &temp_file_system_file_modification_time1_); |
| 209 const char kFilename2[] = "FileSystemFile2.dat"; | 206 const char kFilename2[] = "FileSystemFile2.dat"; |
| 210 temp_file_system_file2_ = GetFileSystemURL(kFilename2); | 207 temp_file_system_file2_ = GetFileSystemURL(kFilename2); |
| 211 WriteFileSystemFile(kFilename2, kTestFileSystemFileData2, | 208 WriteFileSystemFile(kFilename2, kTestFileSystemFileData2, |
| 212 arraysize(kTestFileSystemFileData2) - 1, | 209 arraysize(kTestFileSystemFileData2) - 1, |
| 213 &temp_file_system_file_modification_time2_); | 210 &temp_file_system_file_modification_time2_); |
| 214 } | 211 } |
| 215 | 212 |
| 216 GURL GetFileSystemURL(const std::string& filename) { | 213 GURL GetFileSystemURL(const std::string& filename) { |
| 217 return GURL(file_system_root_url_.spec() + filename); | 214 return GURL(file_system_root_url_.spec() + filename); |
| 218 } | 215 } |
| 219 | 216 |
| 220 void WriteFileSystemFile(const std::string& filename, | 217 void WriteFileSystemFile(const std::string& filename, |
| 221 const char* buf, int buf_size, | 218 const char* buf, |
| 219 int buf_size, |
| 222 base::Time* modification_time) { | 220 base::Time* modification_time) { |
| 223 storage::FileSystemURL url = | 221 storage::FileSystemURL url = |
| 224 file_system_context_->CreateCrackedFileSystemURL( | 222 file_system_context_->CreateCrackedFileSystemURL( |
| 225 GURL(kFileSystemURLOrigin), | 223 GURL(kFileSystemURLOrigin), kFileSystemType, |
| 226 kFileSystemType, | |
| 227 base::FilePath().AppendASCII(filename)); | 224 base::FilePath().AppendASCII(filename)); |
| 228 | 225 |
| 229 ASSERT_EQ(base::File::FILE_OK, | 226 ASSERT_EQ(base::File::FILE_OK, |
| 230 content::AsyncFileTestHelper::CreateFileWithData( | 227 content::AsyncFileTestHelper::CreateFileWithData( |
| 231 file_system_context_.get(), url, buf, buf_size)); | 228 file_system_context_.get(), url, buf, buf_size)); |
| 232 | 229 |
| 233 base::File::Info file_info; | 230 base::File::Info file_info; |
| 234 ASSERT_EQ(base::File::FILE_OK, | 231 ASSERT_EQ(base::File::FILE_OK, |
| 235 content::AsyncFileTestHelper::GetMetadata( | 232 content::AsyncFileTestHelper::GetMetadata( |
| 236 file_system_context_.get(), url, &file_info)); | 233 file_system_context_.get(), url, &file_info)); |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 TestSuccessNonrangeRequest(kTestFileData1, arraysize(kTestFileData1) - 1); | 368 TestSuccessNonrangeRequest(kTestFileData1, arraysize(kTestFileData1) - 1); |
| 372 } | 369 } |
| 373 | 370 |
| 374 TEST_F(BlobURLRequestJobTest, TestGetLargeFileRequest) { | 371 TEST_F(BlobURLRequestJobTest, TestGetLargeFileRequest) { |
| 375 base::FilePath large_temp_file = | 372 base::FilePath large_temp_file = |
| 376 temp_dir_.GetPath().AppendASCII("LargeBlob.dat"); | 373 temp_dir_.GetPath().AppendASCII("LargeBlob.dat"); |
| 377 std::string large_data; | 374 std::string large_data; |
| 378 large_data.reserve(kBufferSize * 5); | 375 large_data.reserve(kBufferSize * 5); |
| 379 for (int i = 0; i < kBufferSize * 5; ++i) | 376 for (int i = 0; i < kBufferSize * 5; ++i) |
| 380 large_data.append(1, static_cast<char>(i % 256)); | 377 large_data.append(1, static_cast<char>(i % 256)); |
| 381 ASSERT_EQ(static_cast<int>(large_data.size()), | 378 ASSERT_EQ( |
| 382 base::WriteFile(large_temp_file, large_data.data(), | 379 static_cast<int>(large_data.size()), |
| 383 large_data.size())); | 380 base::WriteFile(large_temp_file, large_data.data(), large_data.size())); |
| 384 blob_data_->AppendFile(large_temp_file, 0, | 381 blob_data_->AppendFile(large_temp_file, 0, |
| 385 std::numeric_limits<uint64_t>::max(), base::Time()); | 382 std::numeric_limits<uint64_t>::max(), base::Time()); |
| 386 TestSuccessNonrangeRequest(large_data, large_data.size()); | 383 TestSuccessNonrangeRequest(large_data, large_data.size()); |
| 387 } | 384 } |
| 388 | 385 |
| 389 TEST_F(BlobURLRequestJobTest, TestGetNonExistentFileRequest) { | 386 TEST_F(BlobURLRequestJobTest, TestGetNonExistentFileRequest) { |
| 390 base::FilePath non_existent_file = | 387 base::FilePath non_existent_file = |
| 391 temp_file1_.InsertBeforeExtension(FILE_PATH_LITERAL("-na")); | 388 temp_file1_.InsertBeforeExtension(FILE_PATH_LITERAL("-na")); |
| 392 blob_data_->AppendFile(non_existent_file, 0, | 389 blob_data_->AppendFile(non_existent_file, 0, |
| 393 std::numeric_limits<uint64_t>::max(), base::Time()); | 390 std::numeric_limits<uint64_t>::max(), base::Time()); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 TEST_F(BlobURLRequestJobTest, TestGetInvalidFileSystemFileRequest) { | 440 TEST_F(BlobURLRequestJobTest, TestGetInvalidFileSystemFileRequest) { |
| 444 SetUpFileSystem(); | 441 SetUpFileSystem(); |
| 445 GURL invalid_file; | 442 GURL invalid_file; |
| 446 blob_data_->AppendFileSystemFile( | 443 blob_data_->AppendFileSystemFile( |
| 447 invalid_file, 0, std::numeric_limits<uint64_t>::max(), base::Time()); | 444 invalid_file, 0, std::numeric_limits<uint64_t>::max(), base::Time()); |
| 448 TestErrorRequest(500); | 445 TestErrorRequest(500); |
| 449 } | 446 } |
| 450 | 447 |
| 451 TEST_F(BlobURLRequestJobTest, TestGetChangedFileSystemFileRequest) { | 448 TEST_F(BlobURLRequestJobTest, TestGetChangedFileSystemFileRequest) { |
| 452 SetUpFileSystem(); | 449 SetUpFileSystem(); |
| 453 base::Time old_time = | 450 base::Time old_time = temp_file_system_file_modification_time1_ - |
| 454 temp_file_system_file_modification_time1_ - | 451 base::TimeDelta::FromSeconds(10); |
| 455 base::TimeDelta::FromSeconds(10); | |
| 456 blob_data_->AppendFileSystemFile(temp_file_system_file1_, 0, 3, old_time); | 452 blob_data_->AppendFileSystemFile(temp_file_system_file1_, 0, 3, old_time); |
| 457 TestErrorRequest(404); | 453 TestErrorRequest(404); |
| 458 } | 454 } |
| 459 | 455 |
| 460 TEST_F(BlobURLRequestJobTest, TestGetSlicedFileSystemFileRequest) { | 456 TEST_F(BlobURLRequestJobTest, TestGetSlicedFileSystemFileRequest) { |
| 461 SetUpFileSystem(); | 457 SetUpFileSystem(); |
| 462 blob_data_->AppendFileSystemFile(temp_file_system_file1_, 2, 4, | 458 blob_data_->AppendFileSystemFile(temp_file_system_file1_, 2, 4, |
| 463 temp_file_system_file_modification_time1_); | 459 temp_file_system_file_modification_time1_); |
| 464 std::string result(kTestFileSystemFileData1 + 2, 4); | 460 std::string result(kTestFileSystemFileData1 + 2, 4); |
| 465 TestSuccessNonrangeRequest(result, 4); | 461 TestSuccessNonrangeRequest(result, 4); |
| 466 } | 462 } |
| 467 | 463 |
| 468 TEST_F(BlobURLRequestJobTest, TestGetSimpleDiskCacheRequest) { | 464 TEST_F(BlobURLRequestJobTest, TestGetSimpleDiskCacheRequest) { |
| 469 blob_data_->AppendDiskCacheEntry(new EmptyDataHandle(), | 465 blob_data_->AppendDiskCacheEntry(new EmptyDataHandle(), |
| 470 disk_cache_entry_.get(), | 466 disk_cache_entry_.get(), |
| 471 kTestDiskCacheStreamIndex); | 467 kTestDiskCacheStreamIndex); |
| 472 TestSuccessNonrangeRequest(kTestDiskCacheData1, | 468 TestSuccessNonrangeRequest(kTestDiskCacheData1, |
| 473 arraysize(kTestDiskCacheData1) - 1); | 469 arraysize(kTestDiskCacheData1) - 1); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 EXPECT_FALSE(request_->response_info().metadata); | 599 EXPECT_FALSE(request_->response_info().metadata); |
| 604 } | 600 } |
| 605 | 601 |
| 606 TEST_F(BlobURLRequestJobTest, BrokenBlob) { | 602 TEST_F(BlobURLRequestJobTest, BrokenBlob) { |
| 607 blob_handle_ = blob_context_.AddBrokenBlob( | 603 blob_handle_ = blob_context_.AddBrokenBlob( |
| 608 "uuid", "", "", storage::BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS); | 604 "uuid", "", "", storage::BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS); |
| 609 TestErrorRequest(500); | 605 TestErrorRequest(500); |
| 610 } | 606 } |
| 611 | 607 |
| 612 } // namespace content | 608 } // namespace content |
| OLD | NEW |