summaryrefslogtreecommitdiffstats
path: root/chrome/utility/utility_thread.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/utility/utility_thread.cc')
-rw-r--r--chrome/utility/utility_thread.cc40
1 files changed, 40 insertions, 0 deletions
diff --git a/chrome/utility/utility_thread.cc b/chrome/utility/utility_thread.cc
new file mode 100644
index 0000000..269a86b
--- /dev/null
+++ b/chrome/utility/utility_thread.cc
@@ -0,0 +1,40 @@
+// Copyright (c) 2009 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 "chrome/utility/utility_thread.h"
+
+#include "chrome/common/child_process.h"
+#include "chrome/common/extensions/extension_unpacker.h"
+#include "chrome/common/render_messages.h"
+
+UtilityThread::UtilityThread() : ChildThread(base::Thread::Options()) {
+}
+
+UtilityThread::~UtilityThread() {
+}
+
+void UtilityThread::Init() {
+ ChildThread::Init();
+ ChildProcess::current()->AddRefProcess();
+}
+
+void UtilityThread::CleanUp() {
+ // Shutdown in reverse of the initialization order.
+ ChildThread::CleanUp();
+}
+
+void UtilityThread::OnControlMessageReceived(const IPC::Message& msg) {
+ IPC_BEGIN_MESSAGE_MAP(UtilityThread, msg)
+ IPC_MESSAGE_HANDLER(UtilityMsg_UnpackExtension, OnUnpackExtension)
+ IPC_END_MESSAGE_MAP()
+}
+
+void UtilityThread::OnUnpackExtension(const FilePath& extension_path) {
+ ExtensionUnpacker unpacker(extension_path);
+ bool success = unpacker.Run();
+ Send(new UtilityHostMsg_UnpackExtension_Reply(success,
+ unpacker.error_message()));
+
+ ChildProcess::current()->ReleaseProcess();
+}