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)); |
+ |
+ 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 |