Chromium Code Reviews| Index: chrome/browser/extensions/api/image_writer_private/operation_win.cc |
| diff --git a/chrome/browser/extensions/api/image_writer_private/operation_win.cc b/chrome/browser/extensions/api/image_writer_private/operation_win.cc |
| index 5aeb7f52c01488729b431ed047e8905934d7febe..05335a510b7aa49279ca10fb0e4b967ff284bf5b 100644 |
| --- a/chrome/browser/extensions/api/image_writer_private/operation_win.cc |
| +++ b/chrome/browser/extensions/api/image_writer_private/operation_win.cc |
| @@ -2,19 +2,80 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| +#include "base/file_util.h" |
| +#include "base/files/file_enumerator.h" |
| #include "chrome/browser/extensions/api/image_writer_private/error_messages.h" |
| #include "chrome/browser/extensions/api/image_writer_private/operation.h" |
| +#include "chrome/browser/extensions/api/image_writer_private/operation_manager.h" |
| +#include "content/public/browser/browser_thread.h" |
| namespace extensions { |
| namespace image_writer { |
| +using content::BrowserThread; |
| + |
| void Operation::WriteStart() { |
| - Error(error::kUnsupportedOperation); |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| + if (IsCancelled()) { |
| + return; |
| + } |
| + |
| + SetStage(image_writer_api::STAGE_WRITE); |
| + |
| + base::FilePath storage_path = |
| + base::FilePath::FromUTF8Unsafe(storage_unit_id_); |
| + |
| + StartImageWriterClient(); |
| + |
| + int64 file_size; |
| + if (!base::GetFileSize(image_path_, &file_size)) { |
| + Error(error::kImageReadError); |
| + return; |
| + } |
| + |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, |
| + FROM_HERE, |
| + base::Bind(&ImageWriterClient::Write, |
| + image_writer_client_, |
| + base::Bind(&Operation::WriteImageProgress, this, file_size), |
| + base::Bind(&Operation::VerifyWriteStart, this), |
| + base::Bind(&Operation::Error, this), |
| + image_path_, |
| + storage_path)); |
| } |
| void Operation::VerifyWriteStart() { |
| - Error(error::kUnsupportedOperation); |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
|
Lei Zhang
2014/02/15 00:26:59
Consider switch to a blocking pool in a future CL.
Drew Haven
2014/02/15 01:23:58
tbarzic suggested that on another CL. I already o
|
| + |
| + if (IsCancelled()) { |
| + return; |
| + } |
| + |
| + SetStage(image_writer_api::STAGE_VERIFYWRITE); |
| + |
| + base::FilePath storage_path = |
| + base::FilePath::FromUTF8Unsafe(storage_unit_id_); |
| + |
| + StartImageWriterClient(); |
| + |
| + int64 file_size; |
| + if (!base::GetFileSize(image_path_, &file_size)) { |
| + Error(error::kImageReadError); |
| + return; |
| + } |
| + |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, |
| + FROM_HERE, |
| + base::Bind(&ImageWriterClient::Verify, |
| + image_writer_client_, |
| + base::Bind(&Operation::WriteImageProgress, this, file_size), |
| + base::Bind(&Operation::Finish, this), |
| + base::Bind(&Operation::Error, this), |
| + image_path_, |
| + storage_path)); |
| } |
| -} // namespace image_writer |
| -} // namespace extensions |
| +} // namespace image_writer |
| +} // namespace extensions |