Index: chrome/browser/image_writer/image_writer.cc |
diff --git a/chrome/browser/image_writer/image_writer.cc b/chrome/browser/image_writer/image_writer.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..400080b09a6f63d2991cd355c7be6dd0909774e5 |
--- /dev/null |
+++ b/chrome/browser/image_writer/image_writer.cc |
@@ -0,0 +1,74 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/bind.h" |
+#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/image_writer/image_writer.h" |
+#include "chrome/common/chrome_utility_messages.h" |
+#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/utility_process_host.h" |
+ |
+using content::BrowserThread; |
+using content::UtilityProcessHost; |
+ |
+ImageWriter::ImageWriter(Delegate* delegate, |
+ const base::FilePath& source, |
+ const base::FilePath& target) |
+ : delegate_(delegate), |
+ source_(source), |
+ target_(target) { |
+} |
+ |
+ImageWriter::~ImageWriter() {} |
+ |
+void ImageWriter::Start(scoped_refptr<base::SequencedTaskRunner> task_runner) { |
+ task_runner_ = task_runner; |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, |
+ FROM_HERE, |
+ base::Bind(&ImageWriter::StartWriteInUtilityProcess, this)); |
+} |
+ |
+bool ImageWriter::OnMessageReceived(const IPC::Message& message) { |
+ bool handled = true; |
+ IPC_BEGIN_MESSAGE_MAP(ImageWriter, message) |
+ IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ImageWriter_Succeeded, |
+ OnWriteImageSucceeded) |
+ IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ImageWriter_Failed, |
+ OnWriteImageFailed) |
+ IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_ImageWriter_Progress, |
+ OnWriteImageProgress) |
+ IPC_MESSAGE_UNHANDLED(handled = false) |
+ IPC_END_MESSAGE_MAP() |
+ return handled; |
+} |
+ |
+void ImageWriter::OnWriteImageSucceeded() { |
+ if (delegate_) |
+ delegate_->OnWriteImageSucceeded(); |
+} |
+ |
+void ImageWriter::OnWriteImageFailed(const std::string& message) { |
+ if (delegate_) |
+ delegate_->OnWriteImageFailed(message); |
+} |
+ |
+void ImageWriter::OnWriteImageProgress(int progress) { |
+ if (delegate_) |
+ delegate_->OnWriteImageProgress(progress); |
+} |
+ |
+void ImageWriter::StartWriteInUtilityProcess() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ |
+ DVLOG(0) << "Sending image write request."; |
+ |
+ UtilityProcessHost* utility_process_host; |
+ utility_process_host = UtilityProcessHost::Create(this, task_runner_.get()); |
+ utility_process_host->DisableSandbox(); |
+ if (!utility_process_host->Send( |
+ new ChromeUtilityMsg_ImageWriter_Write(source_, target_))) { |
+ DLOG(ERROR) << "Unable to send Write message to Utility Process."; |
+ } |
+} |