| 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..01aaf29ac4862aa7a6fc2b9aa5f837a9c1c9ecc8 100644
|
| --- a/webkit/plugins/ppapi/quota_file_io.cc
|
| +++ b/webkit/plugins/ppapi/quota_file_io.cc
|
| @@ -107,6 +107,13 @@ class QuotaFileIO::WriteOperation : public PendingOperationBase {
|
|
|
| bool finished() const { return finished_; }
|
|
|
| + void RunCallbackSoon() {
|
| + base::MessageLoopProxy::CreateForCurrentThread()->PostTask(
|
| + FROM_HERE, runnable_factory_.NewRunnableMethod(
|
| + &WriteOperation::RunCallback));
|
| + }
|
| +
|
| + private:
|
| void RunCallback() {
|
| DCHECK(callback_.get());
|
| callback_->Run(status_, bytes_written_);
|
| @@ -114,7 +121,6 @@ class QuotaFileIO::WriteOperation : public PendingOperationBase {
|
| delete this;
|
| }
|
|
|
| - private:
|
| void DidFinish(PlatformFileError status, int bytes_written) {
|
| finished_ = true;
|
| status_ = status;
|
| @@ -144,6 +150,7 @@ class QuotaFileIO::SetLengthOperation : public PendingOperationBase {
|
| StatusCallback* callback)
|
| : PendingOperationBase(quota_io, is_will_operation),
|
| length_(length),
|
| + status_(base::PLATFORM_FILE_OK),
|
| callback_(callback),
|
| callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
|
| runnable_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {}
|
| @@ -158,8 +165,7 @@ class QuotaFileIO::SetLengthOperation : public PendingOperationBase {
|
| if (is_will_operation_) {
|
| base::MessageLoopProxy::CreateForCurrentThread()->PostTask(
|
| FROM_HERE, runnable_factory_.NewRunnableMethod(
|
| - &SetLengthOperation::DidFinish,
|
| - base::PLATFORM_FILE_OK));
|
| + &SetLengthOperation::DidFinish, base::PLATFORM_FILE_OK));
|
| return;
|
| }
|
| if (!base::FileUtilProxy::Truncate(
|
| @@ -180,13 +186,21 @@ class QuotaFileIO::SetLengthOperation : public PendingOperationBase {
|
| private:
|
| void DidFinish(PlatformFileError status) {
|
| quota_io_->DidSetLength(status, length_);
|
| + status_ = status;
|
| + base::MessageLoopProxy::CreateForCurrentThread()->PostTask(
|
| + FROM_HERE, runnable_factory_.NewRunnableMethod(
|
| + &SetLengthOperation::RunCallback));
|
| + }
|
| +
|
| + void RunCallback() {
|
| DCHECK(callback_.get());
|
| - callback_->Run(status);
|
| + callback_->Run(status_);
|
| callback_.reset();
|
| delete this;
|
| }
|
|
|
| int64_t length_;
|
| + PlatformFileError status_;
|
| scoped_ptr<StatusCallback> callback_;
|
| base::ScopedCallbackFactory<QuotaFileIO::SetLengthOperation>
|
| callback_factory_;
|
| @@ -339,8 +353,8 @@ void QuotaFileIO::DidWrite(WriteOperation* op,
|
| pending_operations_.front());
|
| if (!op->finished())
|
| break;
|
| - op->RunCallback();
|
| pending_operations_.pop_front();
|
| + op->RunCallbackSoon();
|
| }
|
| // If we have no more pending writes, notify the browser that we did
|
| // update the file.
|
|
|