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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 void WriteFileSystemFile(const std::string& filename, | 194 void WriteFileSystemFile(const std::string& filename, |
195 const char* buf, int buf_size, | 195 const char* buf, int buf_size, |
196 base::Time* modification_time) { | 196 base::Time* modification_time) { |
197 fileapi::FileSystemURL url(GURL(kFileSystemURLOrigin), | 197 fileapi::FileSystemURL url(GURL(kFileSystemURLOrigin), |
198 kFileSystemType, | 198 kFileSystemType, |
199 FilePath().AppendASCII(filename)); | 199 FilePath().AppendASCII(filename)); |
200 | 200 |
201 fileapi::FileSystemFileUtil* file_util = | 201 fileapi::FileSystemFileUtil* file_util = |
202 file_system_context_->GetFileUtil(kFileSystemType); | 202 file_system_context_->GetFileUtil(kFileSystemType); |
203 | 203 |
204 fileapi::FileSystemOperationContext context(file_system_context_); | 204 fileapi::FileSystemOperationContext context(file_system_context_.get()); |
205 context.set_allowed_bytes_growth(1024); | 205 context.set_allowed_bytes_growth(1024); |
206 | 206 |
207 base::PlatformFile handle = base::kInvalidPlatformFileValue; | 207 base::PlatformFile handle = base::kInvalidPlatformFileValue; |
208 bool created = false; | 208 bool created = false; |
209 ASSERT_EQ(base::PLATFORM_FILE_OK, file_util->CreateOrOpen( | 209 ASSERT_EQ(base::PLATFORM_FILE_OK, file_util->CreateOrOpen( |
210 &context, | 210 &context, |
211 url, | 211 url, |
212 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, | 212 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, |
213 &handle, | 213 &handle, |
214 &created)); | 214 &created)); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 BlobData* blob_data) { | 254 BlobData* blob_data) { |
255 MockURLRequestDelegate url_request_delegate; | 255 MockURLRequestDelegate url_request_delegate; |
256 | 256 |
257 request_.reset(empty_context_.CreateRequest( | 257 request_.reset(empty_context_.CreateRequest( |
258 GURL("blob:blah"), &url_request_delegate)); | 258 GURL("blob:blah"), &url_request_delegate)); |
259 request_->set_method(method); | 259 request_->set_method(method); |
260 blob_url_request_job_ = new BlobURLRequestJob( | 260 blob_url_request_job_ = new BlobURLRequestJob( |
261 request_.get(), | 261 request_.get(), |
262 empty_context_.network_delegate(), | 262 empty_context_.network_delegate(), |
263 blob_data, | 263 blob_data, |
264 file_system_context_, | 264 file_system_context_.get(), |
265 base::MessageLoopProxy::current()); | 265 base::MessageLoopProxy::current().get()); |
266 | 266 |
267 // Start the request. | 267 // Start the request. |
268 if (!extra_headers.IsEmpty()) | 268 if (!extra_headers.IsEmpty()) |
269 request_->SetExtraRequestHeaders(extra_headers); | 269 request_->SetExtraRequestHeaders(extra_headers); |
270 request_->Start(); | 270 request_->Start(); |
271 | 271 |
272 MessageLoop::current()->Run(); | 272 MessageLoop::current()->Run(); |
273 | 273 |
274 // Verify response. | 274 // Verify response. |
275 EXPECT_TRUE(request_->status().is_success()); | 275 EXPECT_TRUE(request_->status().is_success()); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 int expected_status_code_; | 318 int expected_status_code_; |
319 std::string expected_response_; | 319 std::string expected_response_; |
320 }; | 320 }; |
321 | 321 |
322 // static | 322 // static |
323 BlobURLRequestJob* BlobURLRequestJobTest::blob_url_request_job_ = NULL; | 323 BlobURLRequestJob* BlobURLRequestJobTest::blob_url_request_job_ = NULL; |
324 | 324 |
325 TEST_F(BlobURLRequestJobTest, TestGetSimpleDataRequest) { | 325 TEST_F(BlobURLRequestJobTest, TestGetSimpleDataRequest) { |
326 scoped_refptr<BlobData> blob_data(new BlobData()); | 326 scoped_refptr<BlobData> blob_data(new BlobData()); |
327 blob_data->AppendData(kTestData1); | 327 blob_data->AppendData(kTestData1); |
328 TestSuccessRequest(blob_data, kTestData1); | 328 TestSuccessRequest(blob_data.get(), kTestData1); |
329 } | 329 } |
330 | 330 |
331 TEST_F(BlobURLRequestJobTest, TestGetSimpleFileRequest) { | 331 TEST_F(BlobURLRequestJobTest, TestGetSimpleFileRequest) { |
332 scoped_refptr<BlobData> blob_data(new BlobData()); | 332 scoped_refptr<BlobData> blob_data(new BlobData()); |
333 blob_data->AppendFile(temp_file1_, 0, -1, base::Time()); | 333 blob_data->AppendFile(temp_file1_, 0, -1, base::Time()); |
334 TestSuccessRequest(blob_data, kTestFileData1); | 334 TestSuccessRequest(blob_data.get(), kTestFileData1); |
335 } | 335 } |
336 | 336 |
337 TEST_F(BlobURLRequestJobTest, TestGetLargeFileRequest) { | 337 TEST_F(BlobURLRequestJobTest, TestGetLargeFileRequest) { |
338 scoped_refptr<BlobData> blob_data(new BlobData()); | 338 scoped_refptr<BlobData> blob_data(new BlobData()); |
339 FilePath large_temp_file = temp_dir_.path().AppendASCII("LargeBlob.dat"); | 339 FilePath large_temp_file = temp_dir_.path().AppendASCII("LargeBlob.dat"); |
340 std::string large_data; | 340 std::string large_data; |
341 large_data.reserve(kBufferSize * 5); | 341 large_data.reserve(kBufferSize * 5); |
342 for (int i = 0; i < kBufferSize * 5; ++i) | 342 for (int i = 0; i < kBufferSize * 5; ++i) |
343 large_data.append(1, static_cast<char>(i % 256)); | 343 large_data.append(1, static_cast<char>(i % 256)); |
344 ASSERT_EQ(static_cast<int>(large_data.size()), | 344 ASSERT_EQ(static_cast<int>(large_data.size()), |
345 file_util::WriteFile(large_temp_file, large_data.data(), | 345 file_util::WriteFile(large_temp_file, large_data.data(), |
346 large_data.size())); | 346 large_data.size())); |
347 blob_data->AppendFile(large_temp_file, 0, -1, base::Time()); | 347 blob_data->AppendFile(large_temp_file, 0, -1, base::Time()); |
348 TestSuccessRequest(blob_data, large_data); | 348 TestSuccessRequest(blob_data.get(), large_data); |
349 } | 349 } |
350 | 350 |
351 TEST_F(BlobURLRequestJobTest, TestGetNonExistentFileRequest) { | 351 TEST_F(BlobURLRequestJobTest, TestGetNonExistentFileRequest) { |
352 FilePath non_existent_file = | 352 FilePath non_existent_file = |
353 temp_file1_.InsertBeforeExtension(FILE_PATH_LITERAL("-na")); | 353 temp_file1_.InsertBeforeExtension(FILE_PATH_LITERAL("-na")); |
354 scoped_refptr<BlobData> blob_data(new BlobData()); | 354 scoped_refptr<BlobData> blob_data(new BlobData()); |
355 blob_data->AppendFile(non_existent_file, 0, -1, base::Time()); | 355 blob_data->AppendFile(non_existent_file, 0, -1, base::Time()); |
356 TestErrorRequest(blob_data, 404); | 356 TestErrorRequest(blob_data.get(), 404); |
357 } | 357 } |
358 | 358 |
359 TEST_F(BlobURLRequestJobTest, TestGetChangedFileRequest) { | 359 TEST_F(BlobURLRequestJobTest, TestGetChangedFileRequest) { |
360 scoped_refptr<BlobData> blob_data(new BlobData()); | 360 scoped_refptr<BlobData> blob_data(new BlobData()); |
361 base::Time old_time = | 361 base::Time old_time = |
362 temp_file_modification_time1_ - base::TimeDelta::FromSeconds(10); | 362 temp_file_modification_time1_ - base::TimeDelta::FromSeconds(10); |
363 blob_data->AppendFile(temp_file1_, 0, 3, old_time); | 363 blob_data->AppendFile(temp_file1_, 0, 3, old_time); |
364 TestErrorRequest(blob_data, 404); | 364 TestErrorRequest(blob_data.get(), 404); |
365 } | 365 } |
366 | 366 |
367 TEST_F(BlobURLRequestJobTest, TestGetSlicedFileRequest) { | 367 TEST_F(BlobURLRequestJobTest, TestGetSlicedFileRequest) { |
368 scoped_refptr<BlobData> blob_data(new BlobData()); | 368 scoped_refptr<BlobData> blob_data(new BlobData()); |
369 blob_data->AppendFile(temp_file1_, 2, 4, temp_file_modification_time1_); | 369 blob_data->AppendFile(temp_file1_, 2, 4, temp_file_modification_time1_); |
370 std::string result(kTestFileData1 + 2, 4); | 370 std::string result(kTestFileData1 + 2, 4); |
371 TestSuccessRequest(blob_data, result); | 371 TestSuccessRequest(blob_data.get(), result); |
372 } | 372 } |
373 | 373 |
374 TEST_F(BlobURLRequestJobTest, TestGetSimpleFileSystemFileRequest) { | 374 TEST_F(BlobURLRequestJobTest, TestGetSimpleFileSystemFileRequest) { |
375 SetUpFileSystem(); | 375 SetUpFileSystem(); |
376 scoped_refptr<BlobData> blob_data(new BlobData()); | 376 scoped_refptr<BlobData> blob_data(new BlobData()); |
377 blob_data->AppendFileSystemFile(temp_file_system_file1_, 0, -1, | 377 blob_data->AppendFileSystemFile(temp_file_system_file1_, 0, -1, |
378 base::Time()); | 378 base::Time()); |
379 TestSuccessRequest(blob_data, kTestFileSystemFileData1); | 379 TestSuccessRequest(blob_data.get(), kTestFileSystemFileData1); |
380 } | 380 } |
381 | 381 |
382 TEST_F(BlobURLRequestJobTest, TestGetLargeFileSystemFileRequest) { | 382 TEST_F(BlobURLRequestJobTest, TestGetLargeFileSystemFileRequest) { |
383 SetUpFileSystem(); | 383 SetUpFileSystem(); |
384 std::string large_data; | 384 std::string large_data; |
385 large_data.reserve(kBufferSize * 5); | 385 large_data.reserve(kBufferSize * 5); |
386 for (int i = 0; i < kBufferSize * 5; ++i) | 386 for (int i = 0; i < kBufferSize * 5; ++i) |
387 large_data.append(1, static_cast<char>(i % 256)); | 387 large_data.append(1, static_cast<char>(i % 256)); |
388 | 388 |
389 const char kFilename[] = "LargeBlob.dat"; | 389 const char kFilename[] = "LargeBlob.dat"; |
390 WriteFileSystemFile(kFilename, large_data.data(), large_data.size(), NULL); | 390 WriteFileSystemFile(kFilename, large_data.data(), large_data.size(), NULL); |
391 | 391 |
392 scoped_refptr<BlobData> blob_data(new BlobData()); | 392 scoped_refptr<BlobData> blob_data(new BlobData()); |
393 blob_data->AppendFileSystemFile(GetFileSystemURL(kFilename), | 393 blob_data->AppendFileSystemFile(GetFileSystemURL(kFilename), |
394 0, -1, base::Time()); | 394 0, -1, base::Time()); |
395 TestSuccessRequest(blob_data, large_data); | 395 TestSuccessRequest(blob_data.get(), large_data); |
396 } | 396 } |
397 | 397 |
398 TEST_F(BlobURLRequestJobTest, TestGetNonExistentFileSystemFileRequest) { | 398 TEST_F(BlobURLRequestJobTest, TestGetNonExistentFileSystemFileRequest) { |
399 SetUpFileSystem(); | 399 SetUpFileSystem(); |
400 GURL non_existent_file = GetFileSystemURL("non-existent.dat"); | 400 GURL non_existent_file = GetFileSystemURL("non-existent.dat"); |
401 scoped_refptr<BlobData> blob_data(new BlobData()); | 401 scoped_refptr<BlobData> blob_data(new BlobData()); |
402 blob_data->AppendFileSystemFile(non_existent_file, 0, -1, base::Time()); | 402 blob_data->AppendFileSystemFile(non_existent_file, 0, -1, base::Time()); |
403 TestErrorRequest(blob_data, 404); | 403 TestErrorRequest(blob_data.get(), 404); |
404 } | 404 } |
405 | 405 |
406 TEST_F(BlobURLRequestJobTest, TestGetChangedFileSystemFileRequest) { | 406 TEST_F(BlobURLRequestJobTest, TestGetChangedFileSystemFileRequest) { |
407 SetUpFileSystem(); | 407 SetUpFileSystem(); |
408 scoped_refptr<BlobData> blob_data(new BlobData()); | 408 scoped_refptr<BlobData> blob_data(new BlobData()); |
409 base::Time old_time = | 409 base::Time old_time = |
410 temp_file_system_file_modification_time1_ - | 410 temp_file_system_file_modification_time1_ - |
411 base::TimeDelta::FromSeconds(10); | 411 base::TimeDelta::FromSeconds(10); |
412 blob_data->AppendFileSystemFile(temp_file_system_file1_, 0, 3, old_time); | 412 blob_data->AppendFileSystemFile(temp_file_system_file1_, 0, 3, old_time); |
413 TestErrorRequest(blob_data, 404); | 413 TestErrorRequest(blob_data.get(), 404); |
414 } | 414 } |
415 | 415 |
416 TEST_F(BlobURLRequestJobTest, TestGetSlicedFileSystemFileRequest) { | 416 TEST_F(BlobURLRequestJobTest, TestGetSlicedFileSystemFileRequest) { |
417 SetUpFileSystem(); | 417 SetUpFileSystem(); |
418 scoped_refptr<BlobData> blob_data(new BlobData()); | 418 scoped_refptr<BlobData> blob_data(new BlobData()); |
419 blob_data->AppendFileSystemFile(temp_file_system_file1_, 2, 4, | 419 blob_data->AppendFileSystemFile(temp_file_system_file1_, 2, 4, |
420 temp_file_system_file_modification_time1_); | 420 temp_file_system_file_modification_time1_); |
421 std::string result(kTestFileSystemFileData1 + 2, 4); | 421 std::string result(kTestFileSystemFileData1 + 2, 4); |
422 TestSuccessRequest(blob_data, result); | 422 TestSuccessRequest(blob_data.get(), result); |
423 } | 423 } |
424 | 424 |
425 TEST_F(BlobURLRequestJobTest, TestGetComplicatedDataAndFileRequest) { | 425 TEST_F(BlobURLRequestJobTest, TestGetComplicatedDataAndFileRequest) { |
426 SetUpFileSystem(); | 426 SetUpFileSystem(); |
427 std::string result; | 427 std::string result; |
428 scoped_refptr<BlobData> blob_data = BuildComplicatedData(&result); | 428 scoped_refptr<BlobData> blob_data = BuildComplicatedData(&result); |
429 TestSuccessRequest(blob_data, result); | 429 TestSuccessRequest(blob_data.get(), result); |
430 } | 430 } |
431 | 431 |
432 TEST_F(BlobURLRequestJobTest, TestGetRangeRequest1) { | 432 TEST_F(BlobURLRequestJobTest, TestGetRangeRequest1) { |
433 SetUpFileSystem(); | 433 SetUpFileSystem(); |
434 std::string result; | 434 std::string result; |
435 scoped_refptr<BlobData> blob_data = BuildComplicatedData(&result); | 435 scoped_refptr<BlobData> blob_data = BuildComplicatedData(&result); |
436 net::HttpRequestHeaders extra_headers; | 436 net::HttpRequestHeaders extra_headers; |
437 extra_headers.SetHeader(net::HttpRequestHeaders::kRange, "bytes=5-10"); | 437 extra_headers.SetHeader(net::HttpRequestHeaders::kRange, "bytes=5-10"); |
438 expected_status_code_ = 206; | 438 expected_status_code_ = 206; |
439 expected_response_ = result.substr(5, 10 - 5 + 1); | 439 expected_response_ = result.substr(5, 10 - 5 + 1); |
440 TestRequest("GET", extra_headers, blob_data); | 440 TestRequest("GET", extra_headers, blob_data.get()); |
441 } | 441 } |
442 | 442 |
443 TEST_F(BlobURLRequestJobTest, TestGetRangeRequest2) { | 443 TEST_F(BlobURLRequestJobTest, TestGetRangeRequest2) { |
444 SetUpFileSystem(); | 444 SetUpFileSystem(); |
445 std::string result; | 445 std::string result; |
446 scoped_refptr<BlobData> blob_data = BuildComplicatedData(&result); | 446 scoped_refptr<BlobData> blob_data = BuildComplicatedData(&result); |
447 net::HttpRequestHeaders extra_headers; | 447 net::HttpRequestHeaders extra_headers; |
448 extra_headers.SetHeader(net::HttpRequestHeaders::kRange, "bytes=-10"); | 448 extra_headers.SetHeader(net::HttpRequestHeaders::kRange, "bytes=-10"); |
449 expected_status_code_ = 206; | 449 expected_status_code_ = 206; |
450 expected_response_ = result.substr(result.length() - 10); | 450 expected_response_ = result.substr(result.length() - 10); |
451 TestRequest("GET", extra_headers, blob_data); | 451 TestRequest("GET", extra_headers, blob_data.get()); |
452 } | 452 } |
453 | 453 |
454 TEST_F(BlobURLRequestJobTest, TestExtraHeaders) { | 454 TEST_F(BlobURLRequestJobTest, TestExtraHeaders) { |
455 scoped_refptr<BlobData> blob_data(new BlobData()); | 455 scoped_refptr<BlobData> blob_data(new BlobData()); |
456 blob_data->set_content_type(kTestContentType); | 456 blob_data->set_content_type(kTestContentType); |
457 blob_data->set_content_disposition(kTestContentDisposition); | 457 blob_data->set_content_disposition(kTestContentDisposition); |
458 blob_data->AppendData(kTestData1); | 458 blob_data->AppendData(kTestData1); |
459 expected_status_code_ = 200; | 459 expected_status_code_ = 200; |
460 expected_response_ = kTestData1; | 460 expected_response_ = kTestData1; |
461 TestRequest("GET", net::HttpRequestHeaders(), blob_data); | 461 TestRequest("GET", net::HttpRequestHeaders(), blob_data.get()); |
462 | 462 |
463 std::string content_type; | 463 std::string content_type; |
464 EXPECT_TRUE(request_->response_headers()->GetMimeType(&content_type)); | 464 EXPECT_TRUE(request_->response_headers()->GetMimeType(&content_type)); |
465 EXPECT_STREQ(content_type.c_str(), kTestContentType); | 465 EXPECT_STREQ(content_type.c_str(), kTestContentType); |
466 void* iter = NULL; | 466 void* iter = NULL; |
467 std::string content_disposition; | 467 std::string content_disposition; |
468 EXPECT_TRUE(request_->response_headers()->EnumerateHeader( | 468 EXPECT_TRUE(request_->response_headers()->EnumerateHeader( |
469 &iter, "Content-Disposition", &content_disposition)); | 469 &iter, "Content-Disposition", &content_disposition)); |
470 EXPECT_STREQ(content_disposition.c_str(), kTestContentDisposition); | 470 EXPECT_STREQ(content_disposition.c_str(), kTestContentDisposition); |
471 } | 471 } |
472 | 472 |
473 } // namespace webkit_blob | 473 } // namespace webkit_blob |
OLD | NEW |