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 "storage/browser/fileapi/file_system_operation_impl.h" | 5 #include "storage/browser/fileapi/file_system_operation_impl.h" |
6 | 6 |
| 7 #include <limits> |
| 8 |
7 #include "base/bind.h" | 9 #include "base/bind.h" |
8 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
9 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
10 #include "base/time/time.h" | 12 #include "base/time/time.h" |
11 #include "base/trace_event/trace_event.h" | 13 #include "base/trace_event/trace_event.h" |
12 #include "net/base/escape.h" | 14 #include "net/base/escape.h" |
13 #include "net/url_request/url_request.h" | 15 #include "net/url_request/url_request.h" |
14 #include "storage/browser/blob/shareable_file_reference.h" | 16 #include "storage/browser/blob/shareable_file_reference.h" |
15 #include "storage/browser/fileapi/async_file_util.h" | 17 #include "storage/browser/fileapi/async_file_util.h" |
16 #include "storage/browser/fileapi/copy_or_move_operation_delegate.h" | 18 #include "storage/browser/fileapi/copy_or_move_operation_delegate.h" |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 scoped_ptr<net::URLRequest> blob_request, | 193 scoped_ptr<net::URLRequest> blob_request, |
192 const WriteCallback& callback) { | 194 const WriteCallback& callback) { |
193 DCHECK(SetPendingOperationType(kOperationWrite)); | 195 DCHECK(SetPendingOperationType(kOperationWrite)); |
194 file_writer_delegate_ = writer_delegate.Pass(); | 196 file_writer_delegate_ = writer_delegate.Pass(); |
195 file_writer_delegate_->Start( | 197 file_writer_delegate_->Start( |
196 blob_request.Pass(), | 198 blob_request.Pass(), |
197 base::Bind(&FileSystemOperationImpl::DidWrite, | 199 base::Bind(&FileSystemOperationImpl::DidWrite, |
198 weak_factory_.GetWeakPtr(), url, callback)); | 200 weak_factory_.GetWeakPtr(), url, callback)); |
199 } | 201 } |
200 | 202 |
201 void FileSystemOperationImpl::Truncate(const FileSystemURL& url, int64 length, | 203 void FileSystemOperationImpl::Truncate(const FileSystemURL& url, |
| 204 int64_t length, |
202 const StatusCallback& callback) { | 205 const StatusCallback& callback) { |
203 DCHECK(SetPendingOperationType(kOperationTruncate)); | 206 DCHECK(SetPendingOperationType(kOperationTruncate)); |
204 | 207 |
205 // crbug.com/349708 | 208 // crbug.com/349708 |
206 TRACE_EVENT0("io", "FileSystemOperationImpl::Truncate"); | 209 TRACE_EVENT0("io", "FileSystemOperationImpl::Truncate"); |
207 | 210 |
208 GetUsageAndQuotaThenRunTask( | 211 GetUsageAndQuotaThenRunTask( |
209 url, | 212 url, |
210 base::Bind(&FileSystemOperationImpl::DoTruncate, | 213 base::Bind(&FileSystemOperationImpl::DoTruncate, |
211 weak_factory_.GetWeakPtr(), url, callback, length), | 214 weak_factory_.GetWeakPtr(), url, callback, length), |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 void FileSystemOperationImpl::GetUsageAndQuotaThenRunTask( | 389 void FileSystemOperationImpl::GetUsageAndQuotaThenRunTask( |
387 const FileSystemURL& url, | 390 const FileSystemURL& url, |
388 const base::Closure& task, | 391 const base::Closure& task, |
389 const base::Closure& error_callback) { | 392 const base::Closure& error_callback) { |
390 storage::QuotaManagerProxy* quota_manager_proxy = | 393 storage::QuotaManagerProxy* quota_manager_proxy = |
391 file_system_context()->quota_manager_proxy(); | 394 file_system_context()->quota_manager_proxy(); |
392 if (!quota_manager_proxy || | 395 if (!quota_manager_proxy || |
393 !file_system_context()->GetQuotaUtil(url.type())) { | 396 !file_system_context()->GetQuotaUtil(url.type())) { |
394 // If we don't have the quota manager or the requested filesystem type | 397 // If we don't have the quota manager or the requested filesystem type |
395 // does not support quota, we should be able to let it go. | 398 // does not support quota, we should be able to let it go. |
396 operation_context_->set_allowed_bytes_growth(kint64max); | 399 operation_context_->set_allowed_bytes_growth( |
| 400 std::numeric_limits<int64_t>::max()); |
397 task.Run(); | 401 task.Run(); |
398 return; | 402 return; |
399 } | 403 } |
400 | 404 |
401 DCHECK(quota_manager_proxy); | 405 DCHECK(quota_manager_proxy); |
402 DCHECK(quota_manager_proxy->quota_manager()); | 406 DCHECK(quota_manager_proxy->quota_manager()); |
403 quota_manager_proxy->quota_manager()->GetUsageAndQuota( | 407 quota_manager_proxy->quota_manager()->GetUsageAndQuota( |
404 url.origin(), | 408 url.origin(), |
405 FileSystemTypeToQuotaStorageType(url.type()), | 409 FileSystemTypeToQuotaStorageType(url.type()), |
406 base::Bind(&FileSystemOperationImpl::DidGetUsageAndQuotaAndRunTask, | 410 base::Bind(&FileSystemOperationImpl::DidGetUsageAndQuotaAndRunTask, |
407 weak_factory_.GetWeakPtr(), task, error_callback)); | 411 weak_factory_.GetWeakPtr(), task, error_callback)); |
408 } | 412 } |
409 | 413 |
410 void FileSystemOperationImpl::DidGetUsageAndQuotaAndRunTask( | 414 void FileSystemOperationImpl::DidGetUsageAndQuotaAndRunTask( |
411 const base::Closure& task, | 415 const base::Closure& task, |
412 const base::Closure& error_callback, | 416 const base::Closure& error_callback, |
413 storage::QuotaStatusCode status, | 417 storage::QuotaStatusCode status, |
414 int64 usage, | 418 int64_t usage, |
415 int64 quota) { | 419 int64_t quota) { |
416 if (status != storage::kQuotaStatusOk) { | 420 if (status != storage::kQuotaStatusOk) { |
417 LOG(WARNING) << "Got unexpected quota error : " << status; | 421 LOG(WARNING) << "Got unexpected quota error : " << status; |
418 error_callback.Run(); | 422 error_callback.Run(); |
419 return; | 423 return; |
420 } | 424 } |
421 | 425 |
422 operation_context_->set_allowed_bytes_growth(quota - usage); | 426 operation_context_->set_allowed_bytes_growth(quota - usage); |
423 task.Run(); | 427 task.Run(); |
424 } | 428 } |
425 | 429 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 const StatusCallback& callback) { | 480 const StatusCallback& callback) { |
477 async_file_util_->CopyInForeignFile( | 481 async_file_util_->CopyInForeignFile( |
478 operation_context_.Pass(), | 482 operation_context_.Pass(), |
479 src_local_disk_file_path, dest_url, | 483 src_local_disk_file_path, dest_url, |
480 base::Bind(&FileSystemOperationImpl::DidFinishOperation, | 484 base::Bind(&FileSystemOperationImpl::DidFinishOperation, |
481 weak_factory_.GetWeakPtr(), callback)); | 485 weak_factory_.GetWeakPtr(), callback)); |
482 } | 486 } |
483 | 487 |
484 void FileSystemOperationImpl::DoTruncate(const FileSystemURL& url, | 488 void FileSystemOperationImpl::DoTruncate(const FileSystemURL& url, |
485 const StatusCallback& callback, | 489 const StatusCallback& callback, |
486 int64 length) { | 490 int64_t length) { |
487 async_file_util_->Truncate( | 491 async_file_util_->Truncate( |
488 operation_context_.Pass(), url, length, | 492 operation_context_.Pass(), url, length, |
489 base::Bind(&FileSystemOperationImpl::DidFinishOperation, | 493 base::Bind(&FileSystemOperationImpl::DidFinishOperation, |
490 weak_factory_.GetWeakPtr(), callback)); | 494 weak_factory_.GetWeakPtr(), callback)); |
491 } | 495 } |
492 | 496 |
493 void FileSystemOperationImpl::DoOpenFile(const FileSystemURL& url, | 497 void FileSystemOperationImpl::DoOpenFile(const FileSystemURL& url, |
494 const OpenFileCallback& callback, | 498 const OpenFileCallback& callback, |
495 int file_flags) { | 499 int file_flags) { |
496 async_file_util_->CreateOrOpen( | 500 async_file_util_->CreateOrOpen( |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
565 return; | 569 return; |
566 } | 570 } |
567 | 571 |
568 callback.Run(rv); | 572 callback.Run(rv); |
569 } | 573 } |
570 | 574 |
571 void FileSystemOperationImpl::DidWrite( | 575 void FileSystemOperationImpl::DidWrite( |
572 const FileSystemURL& url, | 576 const FileSystemURL& url, |
573 const WriteCallback& write_callback, | 577 const WriteCallback& write_callback, |
574 base::File::Error rv, | 578 base::File::Error rv, |
575 int64 bytes, | 579 int64_t bytes, |
576 FileWriterDelegate::WriteProgressStatus write_status) { | 580 FileWriterDelegate::WriteProgressStatus write_status) { |
577 const bool complete = ( | 581 const bool complete = ( |
578 write_status != FileWriterDelegate::SUCCESS_IO_PENDING); | 582 write_status != FileWriterDelegate::SUCCESS_IO_PENDING); |
579 if (complete && write_status != FileWriterDelegate::ERROR_WRITE_NOT_STARTED) { | 583 if (complete && write_status != FileWriterDelegate::ERROR_WRITE_NOT_STARTED) { |
580 DCHECK(operation_context_); | 584 DCHECK(operation_context_); |
581 operation_context_->change_observers()->Notify( | 585 operation_context_->change_observers()->Notify( |
582 &FileChangeObserver::OnModifyFile, base::MakeTuple(url)); | 586 &FileChangeObserver::OnModifyFile, base::MakeTuple(url)); |
583 } | 587 } |
584 | 588 |
585 StatusCallback cancel_callback = cancel_callback_; | 589 StatusCallback cancel_callback = cancel_callback_; |
586 write_callback.Run(rv, bytes, complete); | 590 write_callback.Run(rv, bytes, complete); |
587 if (!cancel_callback.is_null()) | 591 if (!cancel_callback.is_null()) |
588 cancel_callback.Run(base::File::FILE_OK); | 592 cancel_callback.Run(base::File::FILE_OK); |
589 } | 593 } |
590 | 594 |
591 bool FileSystemOperationImpl::SetPendingOperationType(OperationType type) { | 595 bool FileSystemOperationImpl::SetPendingOperationType(OperationType type) { |
592 if (pending_operation_ != kOperationNone) | 596 if (pending_operation_ != kOperationNone) |
593 return false; | 597 return false; |
594 pending_operation_ = type; | 598 pending_operation_ = type; |
595 return true; | 599 return true; |
596 } | 600 } |
597 | 601 |
598 } // namespace storage | 602 } // namespace storage |
OLD | NEW |