Index: chrome/browser/extensions/sandboxed_extension_unpacker.cc |
=================================================================== |
--- chrome/browser/extensions/sandboxed_extension_unpacker.cc (revision 88135) |
+++ chrome/browser/extensions/sandboxed_extension_unpacker.cc (working copy) |
@@ -19,6 +19,7 @@ |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/common/chrome_paths.h" |
#include "chrome/common/chrome_switches.h" |
+#include "chrome/common/chrome_utility_messages.h" |
#include "chrome/common/extensions/extension.h" |
#include "chrome/common/extensions/extension_constants.h" |
#include "chrome/common/extensions/extension_file_util.h" |
@@ -229,10 +230,39 @@ |
NULL); |
} |
+bool SandboxedExtensionUnpacker::OnMessageReceived( |
+ const IPC::Message& message) { |
+ bool handled = true; |
+ IPC_BEGIN_MESSAGE_MAP(SandboxedExtensionUnpacker, message) |
+ IPC_MESSAGE_HANDLER(UtilityHostMsg_UnpackExtension_Succeeded, |
+ OnUnpackExtensionSucceeded) |
+ IPC_MESSAGE_HANDLER(UtilityHostMsg_UnpackExtension_Failed, |
+ OnUnpackExtensionFailed) |
+ IPC_MESSAGE_UNHANDLED(handled = false) |
+ IPC_END_MESSAGE_MAP_EX() |
+ return handled; |
+} |
+ |
+void SandboxedExtensionUnpacker::OnProcessCrashed(int exit_code) { |
+ // Don't report crashes if they happen after we got a response. |
+ if (got_response_) |
+ return; |
+ |
+ // Utility process crashed while trying to install. |
+ ReportFailure( |
+ UTILITY_PROCESS_CRASHED_WHILE_TRYING_TO_INSTALL, |
+ l10n_util::GetStringFUTF8( |
+ IDS_EXTENSION_PACKAGE_INSTALL_ERROR, |
+ ASCIIToUTF16("UTILITY_PROCESS_CRASHED_WHILE_TRYING_TO_INSTALL"))); |
+} |
+ |
void SandboxedExtensionUnpacker::StartProcessOnIOThread( |
const FilePath& temp_crx_path) { |
UtilityProcessHost* host = new UtilityProcessHost(this, thread_identifier_); |
- host->StartExtensionUnpacker(temp_crx_path); |
+ // Grant the subprocess access to the entire subdir the extension file is |
+ // in, so that it can unpack to that dir. |
+ host->set_exposed_dir(temp_crx_path.DirName()); |
+ host->Send(new UtilityMsg_UnpackExtension(temp_crx_path)); |
} |
void SandboxedExtensionUnpacker::OnUnpackExtensionSucceeded( |
@@ -298,19 +328,6 @@ |
ASCIIToUTF16(error))); |
} |
-void SandboxedExtensionUnpacker::OnProcessCrashed(int exit_code) { |
- // Don't report crashes if they happen after we got a response. |
- if (got_response_) |
- return; |
- |
- // Utility process crashed while trying to install. |
- ReportFailure( |
- UTILITY_PROCESS_CRASHED_WHILE_TRYING_TO_INSTALL, |
- l10n_util::GetStringFUTF8( |
- IDS_EXTENSION_PACKAGE_INSTALL_ERROR, |
- ASCIIToUTF16("UTILITY_PROCESS_CRASHED_WHILE_TRYING_TO_INSTALL"))); |
-} |
- |
bool SandboxedExtensionUnpacker::ValidateSignature() { |
ScopedStdioHandle file(file_util::OpenFile(crx_path_, "rb")); |