Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / image_writer_private / operation_manager.cc
index c6d8c85..dd840d4 100644 (file)
@@ -5,19 +5,19 @@
 #include "base/lazy_instance.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/extensions/api/image_writer_private/destroy_partitions_operation.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 "chrome/browser/extensions/api/image_writer_private/write_from_file_operation.h"
 #include "chrome/browser/extensions/api/image_writer_private/write_from_url_operation.h"
-#include "chrome/browser/extensions/event_router.h"
 #include "chrome/browser/extensions/event_router_forwarder.h"
 #include "chrome/browser/extensions/extension_host.h"
 #include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_system.h"
-#include "chrome/browser/extensions/extension_system_factory.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_service.h"
+#include "extensions/browser/event_router.h"
+#include "extensions/browser/extension_system.h"
 
 namespace image_writer_api = extensions::api::image_writer_private;
 
@@ -63,12 +63,10 @@ void OperationManager::StartWriteFromUrl(
     bool saveImageAsDownload,
     const std::string& storage_unit_id,
     const Operation::StartWriteCallback& callback) {
-
   OperationMap::iterator existing_operation = operations_.find(extension_id);
 
   if (existing_operation != operations_.end()) {
-    return callback.Run(false,
-                        error::kOperationAlreadyInProgress);
+    return callback.Run(false, error::kOperationAlreadyInProgress);
   }
 
   scoped_refptr<Operation> operation(
@@ -79,23 +77,34 @@ void OperationManager::StartWriteFromUrl(
                                 hash,
                                 saveImageAsDownload,
                                 storage_unit_id));
-
   operations_[extension_id] = operation;
-
   BrowserThread::PostTask(BrowserThread::FILE,
                           FROM_HERE,
-                          base::Bind(&Operation::Start,
-                                     operation.get()));
-
+                          base::Bind(&Operation::Start, operation));
   callback.Run(true, "");
 }
 
 void OperationManager::StartWriteFromFile(
     const ExtensionId& extension_id,
+    const base::FilePath& path,
     const std::string& storage_unit_id,
     const Operation::StartWriteCallback& callback) {
-  // Currently unimplemented.
-  callback.Run(false, error::kFileOperationsNotImplemented);
+  OperationMap::iterator existing_operation = operations_.find(extension_id);
+
+  if (existing_operation != operations_.end()) {
+    return callback.Run(false, error::kOperationAlreadyInProgress);
+  }
+
+  scoped_refptr<Operation> operation(
+      new WriteFromFileOperation(weak_factory_.GetWeakPtr(),
+                                 extension_id,
+                                 path,
+                                 storage_unit_id));
+  operations_[extension_id] = operation;
+  BrowserThread::PostTask(BrowserThread::FILE,
+                          FROM_HERE,
+                          base::Bind(&Operation::Start, operation));
+  callback.Run(true, "");
 }
 
 void OperationManager::CancelWrite(
@@ -114,6 +123,27 @@ void OperationManager::CancelWrite(
   }
 }
 
+void OperationManager::DestroyPartitions(
+    const ExtensionId& extension_id,
+    const std::string& storage_unit_id,
+    const Operation::StartWriteCallback& callback) {
+  OperationMap::iterator existing_operation = operations_.find(extension_id);
+
+  if (existing_operation != operations_.end()) {
+    return callback.Run(false, error::kOperationAlreadyInProgress);
+  }
+
+  scoped_refptr<Operation> operation(
+      new DestroyPartitionsOperation(weak_factory_.GetWeakPtr(),
+                                     extension_id,
+                                     storage_unit_id));
+  operations_[extension_id] = operation;
+  BrowserThread::PostTask(BrowserThread::FILE,
+                          FROM_HERE,
+                          base::Bind(&Operation::Start, operation));
+  callback.Run(true, "");
+}
+
 void OperationManager::OnProgress(const ExtensionId& extension_id,
                                   image_writer_api::Stage stage,
                                   int progress) {
@@ -155,7 +185,6 @@ void OperationManager::OnError(const ExtensionId& extension_id,
 
   DLOG(ERROR) << "ImageWriter error: " << error_message;
 
-  // TODO(haven): Set up error messages. http://crbug.com/284880
   info.stage = stage;
   info.percent_complete = progress;
 
@@ -228,7 +257,7 @@ static base::LazyInstance<ProfileKeyedAPIFactory<OperationManager> >
 
 ProfileKeyedAPIFactory<OperationManager>*
     OperationManager::GetFactoryInstance() {
-  return &g_factory.Get();
+  return g_factory.Pointer();
 }