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 "webkit/blob/blob_url_request_job.h" | 5 #include "webkit/blob/blob_url_request_job.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/file_util_proxy.h" | 9 #include "base/file_util_proxy.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 | 36 |
37 const char kHTTPOKText[] = "OK"; | 37 const char kHTTPOKText[] = "OK"; |
38 const char kHTTPPartialContentText[] = "Partial Content"; | 38 const char kHTTPPartialContentText[] = "Partial Content"; |
39 const char kHTTPNotAllowedText[] = "Not Allowed"; | 39 const char kHTTPNotAllowedText[] = "Not Allowed"; |
40 const char kHTTPNotFoundText[] = "Not Found"; | 40 const char kHTTPNotFoundText[] = "Not Found"; |
41 const char kHTTPMethodNotAllowText[] = "Method Not Allowed"; | 41 const char kHTTPMethodNotAllowText[] = "Method Not Allowed"; |
42 const char kHTTPRequestedRangeNotSatisfiableText[] = | 42 const char kHTTPRequestedRangeNotSatisfiableText[] = |
43 "Requested Range Not Satisfiable"; | 43 "Requested Range Not Satisfiable"; |
44 const char kHTTPInternalErrorText[] = "Internal Server Error"; | 44 const char kHTTPInternalErrorText[] = "Internal Server Error"; |
45 | 45 |
46 const int kFileOpenFlags = base::PLATFORM_FILE_OPEN | | |
47 base::PLATFORM_FILE_READ | | |
48 base::PLATFORM_FILE_ASYNC; | |
49 | |
50 } // namespace | 46 } // namespace |
51 | 47 |
52 BlobURLRequestJob::BlobURLRequestJob( | 48 BlobURLRequestJob::BlobURLRequestJob( |
53 net::URLRequest* request, | 49 net::URLRequest* request, |
54 BlobData* blob_data, | 50 BlobData* blob_data, |
55 base::MessageLoopProxy* file_thread_proxy) | 51 base::MessageLoopProxy* file_thread_proxy) |
56 : net::URLRequestJob(request), | 52 : net::URLRequestJob(request), |
57 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), | 53 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), |
58 blob_data_(blob_data), | 54 blob_data_(blob_data), |
59 file_thread_proxy_(file_thread_proxy), | 55 file_thread_proxy_(file_thread_proxy), |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 } | 350 } |
355 | 351 |
356 bool BlobURLRequestJob::ReadFileItem(LocalFileReader* reader, | 352 bool BlobURLRequestJob::ReadFileItem(LocalFileReader* reader, |
357 int bytes_to_read) { | 353 int bytes_to_read) { |
358 DCHECK_GE(read_buf_->BytesRemaining(), bytes_to_read); | 354 DCHECK_GE(read_buf_->BytesRemaining(), bytes_to_read); |
359 DCHECK(reader); | 355 DCHECK(reader); |
360 const int result = reader->Read( | 356 const int result = reader->Read( |
361 read_buf_, bytes_to_read, | 357 read_buf_, bytes_to_read, |
362 base::Bind(&BlobURLRequestJob::DidReadFile, | 358 base::Bind(&BlobURLRequestJob::DidReadFile, |
363 base::Unretained(this))); | 359 base::Unretained(this))); |
364 if (result != net::ERR_IO_PENDING) { | 360 if (result >= 0) { |
365 DCHECK(result != net::OK); | 361 // Data is immediately available. |
| 362 if (GetStatus().is_io_pending()) |
| 363 DidReadFile(result); |
| 364 else |
| 365 AdvanceBytesRead(result); |
| 366 return true; |
| 367 } |
| 368 if (result == net::ERR_IO_PENDING) |
| 369 SetStatus(net::URLRequestStatus(net::URLRequestStatus::IO_PENDING, 0)); |
| 370 else |
366 NotifyFailure(result); | 371 NotifyFailure(result); |
367 return false; | |
368 } | |
369 SetStatus(net::URLRequestStatus(net::URLRequestStatus::IO_PENDING, 0)); | |
370 return false; | 372 return false; |
371 } | 373 } |
372 | 374 |
373 void BlobURLRequestJob::DidReadFile(int result) { | 375 void BlobURLRequestJob::DidReadFile(int result) { |
374 if (result <= 0) { | 376 if (result <= 0) { |
375 NotifyFailure(net::ERR_FAILED); | 377 NotifyFailure(net::ERR_FAILED); |
376 return; | 378 return; |
377 } | 379 } |
378 SetStatus(net::URLRequestStatus()); // Clear the IO_PENDING status | 380 SetStatus(net::URLRequestStatus()); // Clear the IO_PENDING status |
379 | 381 |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 file_thread_proxy_, | 530 file_thread_proxy_, |
529 item.file_path, | 531 item.file_path, |
530 item.offset, | 532 item.offset, |
531 item.expected_modification_time); | 533 item.expected_modification_time); |
532 } | 534 } |
533 DCHECK(index_to_reader_[index]); | 535 DCHECK(index_to_reader_[index]); |
534 return index_to_reader_[index]; | 536 return index_to_reader_[index]; |
535 } | 537 } |
536 | 538 |
537 } // namespace webkit_blob | 539 } // namespace webkit_blob |
OLD | NEW |