Index: chrome/utility/extensions/extensions_handler.cc |
diff --git a/chrome/utility/extensions/extensions_handler.cc b/chrome/utility/extensions/extensions_handler.cc |
index 6aa0c2ef6e229feceb4ae2b808daf63ecae88d80..25f65a77707dfe1cd13deb206666dc7bcbb0901e 100644 |
--- a/chrome/utility/extensions/extensions_handler.cc |
+++ b/chrome/utility/extensions/extensions_handler.cc |
@@ -21,6 +21,7 @@ |
#include "extensions/common/update_manifest.h" |
#include "media/base/media.h" |
#include "media/base/media_file_checker.h" |
+#include "third_party/zlib/google/zip.h" |
#include "ui/base/ui_base_switches.h" |
#if defined(OS_WIN) |
@@ -52,6 +53,9 @@ void ReleaseProcessIfNeeded() { |
content::UtilityThread::Get()->ReleaseProcessIfNeeded(); |
} |
+const char kExtensionHandlerUnzipError[] = |
+ "Could not unzip extension for install."; |
+ |
} // namespace |
ExtensionsHandler::ExtensionsHandler() {} |
@@ -81,6 +85,7 @@ bool ExtensionsHandler::OnMessageReceived(const IPC::Message& message) { |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP(ExtensionsHandler, message) |
IPC_MESSAGE_HANDLER(ChromeUtilityMsg_UnpackExtension, OnUnpackExtension) |
+ IPC_MESSAGE_HANDLER(ChromeUtilityMsg_UnzipToDir, OnUnzipToDir) |
IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseUpdateManifest, |
OnParseUpdateManifest) |
IPC_MESSAGE_HANDLER(ChromeUtilityMsg_DecodeImageBase64, OnDecodeImageBase64) |
@@ -139,6 +144,18 @@ void ExtensionsHandler::OnUnpackExtension( |
ReleaseProcessIfNeeded(); |
} |
+void ExtensionsHandler::OnUnzipToDir(const base::FilePath& zip_path, |
+ const base::FilePath& dir) { |
+ if (!zip::Unzip(zip_path, dir)) { |
+ Send(new ChromeUtilityHostMsg_UnzipToDir_Failed( |
+ std::string(kExtensionHandlerUnzipError))); |
+ } else { |
+ Send(new ChromeUtilityHostMsg_UnzipToDir_Succeeded(dir)); |
+ } |
+ |
+ ReleaseProcessIfNeeded(); |
+} |
+ |
void ExtensionsHandler::OnParseUpdateManifest(const std::string& xml) { |
UpdateManifest manifest; |
if (!manifest.Parse(xml)) { |