Chromium Code Reviews| Index: webkit/plugins/ppapi/quota_file_io.cc |
| diff --git a/webkit/plugins/ppapi/quota_file_io.cc b/webkit/plugins/ppapi/quota_file_io.cc |
| index 2a618a55fd7627ca805e0fc52dd250d4e18df8bb..8e072e5834eae860a645c4008e0e352726143fcf 100644 |
| --- a/webkit/plugins/ppapi/quota_file_io.cc |
| +++ b/webkit/plugins/ppapi/quota_file_io.cc |
| @@ -83,10 +83,7 @@ class QuotaFileIO::WriteOperation : public PendingOperationBase { |
| } |
| if (is_will_operation_) { |
| // Assuming the write will succeed. |
| - base::MessageLoopProxy::CreateForCurrentThread()->PostTask( |
| - FROM_HERE, runnable_factory_.NewRunnableMethod( |
| - &WriteOperation::DidFinish, |
| - base::PLATFORM_FILE_OK, bytes_to_write_)); |
| + DidFinish(base::PLATFORM_FILE_OK, bytes_to_write_); |
| return; |
| } |
| DCHECK(buffer_.get()); |
| @@ -100,18 +97,15 @@ class QuotaFileIO::WriteOperation : public PendingOperationBase { |
| } |
| virtual void DidFail(PlatformFileError error) OVERRIDE { |
| - base::MessageLoopProxy::CreateForCurrentThread()->PostTask( |
| - FROM_HERE, runnable_factory_.NewRunnableMethod( |
| - &WriteOperation::DidFinish, error, 0)); |
| + DidFinish(error, 0); |
| } |
| bool finished() const { return finished_; } |
| - void RunCallback() { |
| - DCHECK(callback_.get()); |
| - callback_->Run(status_, bytes_written_); |
| - callback_.reset(); |
| - delete this; |
| + virtual void WillRunCallback() { |
| + base::MessageLoopProxy::CreateForCurrentThread()->PostTask( |
| + FROM_HERE, runnable_factory_.NewRunnableMethod( |
| + &WriteOperation::RunCallback)); |
| } |
| private: |
| @@ -125,6 +119,13 @@ class QuotaFileIO::WriteOperation : public PendingOperationBase { |
| quota_io_->DidWrite(this, max_offset); |
| } |
| + virtual void RunCallback() { |
| + DCHECK(callback_.get()); |
| + callback_->Run(status_, bytes_written_); |
| + callback_.reset(); |
| + delete this; |
| + } |
| + |
| const int64_t offset_; |
| scoped_array<char> buffer_; |
| const int32_t bytes_to_write_; |
| @@ -132,8 +133,8 @@ class QuotaFileIO::WriteOperation : public PendingOperationBase { |
| bool finished_; |
| PlatformFileError status_; |
| int64_t bytes_written_; |
| - base::ScopedCallbackFactory<QuotaFileIO::WriteOperation> callback_factory_; |
| - ScopedRunnableMethodFactory<QuotaFileIO::WriteOperation> runnable_factory_; |
| + base::ScopedCallbackFactory<WriteOperation> callback_factory_; |
| + ScopedRunnableMethodFactory<WriteOperation> runnable_factory_; |
| }; |
| class QuotaFileIO::SetLengthOperation : public PendingOperationBase { |
| @@ -145,8 +146,9 @@ class QuotaFileIO::SetLengthOperation : public PendingOperationBase { |
| : PendingOperationBase(quota_io, is_will_operation), |
| length_(length), |
| callback_(callback), |
| - callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| - runnable_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {} |
| + callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {} |
| + |
| + protected: |
|
yzshen1
2011/08/05 20:31:46
Is this 'protected' intended for all the methods b
kinuko
2011/08/08 11:21:12
Oops, this was a remnant of the other (reverted) c
|
| virtual ~SetLengthOperation() {} |
| virtual void Run() OVERRIDE { |
| @@ -156,10 +158,7 @@ class QuotaFileIO::SetLengthOperation : public PendingOperationBase { |
| return; |
| } |
| if (is_will_operation_) { |
| - base::MessageLoopProxy::CreateForCurrentThread()->PostTask( |
| - FROM_HERE, runnable_factory_.NewRunnableMethod( |
| - &SetLengthOperation::DidFinish, |
| - base::PLATFORM_FILE_OK)); |
| + DidFinish(base::PLATFORM_FILE_OK); |
| return; |
| } |
| if (!base::FileUtilProxy::Truncate( |
| @@ -172,9 +171,7 @@ class QuotaFileIO::SetLengthOperation : public PendingOperationBase { |
| } |
| virtual void DidFail(PlatformFileError error) OVERRIDE { |
| - base::MessageLoopProxy::CreateForCurrentThread()->PostTask( |
| - FROM_HERE, runnable_factory_.NewRunnableMethod( |
| - &SetLengthOperation::DidFinish, error)); |
| + DidFinish(error); |
| } |
| private: |
| @@ -188,10 +185,7 @@ class QuotaFileIO::SetLengthOperation : public PendingOperationBase { |
| int64_t length_; |
| scoped_ptr<StatusCallback> callback_; |
| - base::ScopedCallbackFactory<QuotaFileIO::SetLengthOperation> |
| - callback_factory_; |
| - ScopedRunnableMethodFactory<QuotaFileIO::SetLengthOperation> |
| - runnable_factory_; |
| + base::ScopedCallbackFactory<SetLengthOperation> callback_factory_; |
| }; |
| // QuotaFileIO -------------------------------------------------------------- |
| @@ -221,6 +215,8 @@ QuotaFileIO::~QuotaFileIO() { |
| // Note that this doesn't dispatch pending callbacks. |
| STLDeleteContainerPointers(pending_operations_.begin(), |
| pending_operations_.end()); |
| + STLDeleteContainerPointers(pending_callbacks_.begin(), |
| + pending_callbacks_.end()); |
| } |
| bool QuotaFileIO::Write( |
| @@ -302,11 +298,10 @@ void QuotaFileIO::DidQueryAvailableSpace(int64_t avail_space) { |
| void QuotaFileIO::DidQueryForQuotaCheck() { |
| DCHECK(!pending_operations_.empty()); |
| DCHECK_GT(inflight_operations_, 0); |
| - for (std::deque<PendingOperationBase*>::iterator iter = |
| - pending_operations_.begin(); |
| - iter != pending_operations_.end(); |
| - ++iter) { |
| - PendingOperationBase* op = *iter; |
| + while (!pending_operations_.empty()) { |
| + PendingOperationBase* op = pending_operations_.front(); |
| + pending_operations_.pop_front(); |
| + pending_callbacks_.push_back(op); |
| if (outstanding_errors_ > 0) { |
| op->DidFail(base::PLATFORM_FILE_ERROR_FAILED); |
| continue; |
| @@ -332,15 +327,15 @@ void QuotaFileIO::DidWrite(WriteOperation* op, |
| int64_t written_offset_end) { |
| max_written_offset_ = std::max(max_written_offset_, written_offset_end); |
| DCHECK_GT(inflight_operations_, 0); |
| - DCHECK(!pending_operations_.empty()); |
| + DCHECK(!pending_callbacks_.empty()); |
| // Fire callbacks for finished operations. |
| - while (!pending_operations_.empty()) { |
| + while (!pending_callbacks_.empty()) { |
| WriteOperation* op = static_cast<WriteOperation*>( |
| - pending_operations_.front()); |
| + pending_callbacks_.front()); |
| if (!op->finished()) |
| break; |
| - op->RunCallback(); |
| - pending_operations_.pop_front(); |
| + pending_callbacks_.pop_front(); |
| + op->WillRunCallback(); |
| } |
| // If we have no more pending writes, notify the browser that we did |
| // update the file. |
| @@ -355,8 +350,8 @@ void QuotaFileIO::DidWrite(WriteOperation* op, |
| void QuotaFileIO::DidSetLength(PlatformFileError error, int64_t new_file_size) { |
| DCHECK_EQ(1, inflight_operations_); |
| - pending_operations_.pop_front(); |
| - DCHECK(pending_operations_.empty()); |
| + pending_callbacks_.pop_front(); |
| + DCHECK(pending_callbacks_.empty()); |
| int64_t delta = (error != base::PLATFORM_FILE_OK) ? 0 : |
| new_file_size - cached_file_size_; |
| instance_->delegate()->DidUpdateFile(file_url_, delta); |