Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(643)

Unified Diff: chrome/browser/extensions/zipfile_installer.cc

Issue 2697463002: Convert utility process extension Unpacker IPC to mojo (Closed)
Patch Set: Take #4, declare the IPC enum traits in the message file, try build fix. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/zipfile_installer.cc
diff --git a/chrome/browser/extensions/zipfile_installer.cc b/chrome/browser/extensions/zipfile_installer.cc
index f0da06da424956808b216a4e2522e795f1626999..803f71cf0b0917b6aa15b2b3bf25ffcae68053ee 100644
--- a/chrome/browser/extensions/zipfile_installer.cc
+++ b/chrome/browser/extensions/zipfile_installer.cc
@@ -6,128 +6,115 @@
#include "base/files/file_util.h"
#include "base/path_service.h"
-#include "base/threading/thread_task_runner_handle.h"
#include "chrome/browser/extensions/extension_error_reporter.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/unpacked_installer.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/utility_process_host.h"
-#include "extensions/common/extension_utility_messages.h"
+#include "extensions/common/extension_unpacker.mojom.h"
#include "ui/base/l10n/l10n_util.h"
-using content::BrowserThread;
-using content::UtilityProcessHost;
-
namespace {
const char kExtensionHandlerTempDirError[] =
"Could not create temporary directory for zipped extension.";
+const char kExtensionHandlerFileUnzipError[] =
+ "Could not unzip extension for install.";
} // namespace
namespace extensions {
-ZipFileInstaller::ZipFileInstaller(ExtensionService* extension_service)
- : be_noisy_on_failure_(true),
- extension_service_weak_(extension_service->AsWeakPtr()) {
+// static
+scoped_refptr<ZipFileInstaller> ZipFileInstaller::Create(
+ ExtensionService* service) {
+ DCHECK(service);
+ return make_scoped_refptr(new ZipFileInstaller(service));
}
-void ZipFileInstaller::LoadFromZipFile(const base::FilePath& path) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- zip_path_ = path;
- BrowserThread::PostTask(BrowserThread::FILE,
- FROM_HERE,
- base::Bind(&ZipFileInstaller::PrepareTempDir, this));
+void ZipFileInstaller::LoadFromZipFile(const base::FilePath& zip_file) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ DCHECK(!zip_file.empty());
+
+ zip_file_ = zip_file;
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::FILE, FROM_HERE,
+ base::Bind(&ZipFileInstaller::PrepareTempDir, this, zip_file_));
}
-void ZipFileInstaller::PrepareTempDir() {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- base::FilePath temp_dir;
- PathService::Get(base::DIR_TEMP, &temp_dir);
- base::FilePath new_temp_dir;
- if (!base::CreateTemporaryDirInDir(
- temp_dir,
- zip_path_.RemoveExtension().BaseName().value() +
- FILE_PATH_LITERAL("_"),
- &new_temp_dir)) {
- OnUnzipFailed(std::string(kExtensionHandlerTempDirError));
+ZipFileInstaller::ZipFileInstaller(ExtensionService* service)
+ : be_noisy_on_failure_(true),
+ extension_service_weak_(service->AsWeakPtr()) {}
+
+ZipFileInstaller::~ZipFileInstaller() = default;
+
+void ZipFileInstaller::PrepareTempDir(const base::FilePath& zip_file) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
+
+ base::FilePath dir_temp;
+ base::PathService::Get(base::DIR_TEMP, &dir_temp);
+
+ base::FilePath::StringType dir_name =
+ zip_file.RemoveExtension().BaseName().value() + FILE_PATH_LITERAL("_");
+
+ base::FilePath unzip_dir;
+ if (!base::CreateTemporaryDirInDir(dir_temp, dir_name, &unzip_dir)) {
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&ZipFileInstaller::ReportErrorOnUIThread, this,
+ std::string(kExtensionHandlerTempDirError)));
return;
}
- BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- base::Bind(&ZipFileInstaller::StartWorkOnIOThread, this, new_temp_dir));
-}
-ZipFileInstaller::~ZipFileInstaller() {
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&ZipFileInstaller::UnzipOnUIThread, this, unzip_dir));
}
-// static
-scoped_refptr<ZipFileInstaller> ZipFileInstaller::Create(
- ExtensionService* extension_service) {
- DCHECK(extension_service);
- return scoped_refptr<ZipFileInstaller>(
- new ZipFileInstaller(extension_service));
-}
+void ZipFileInstaller::UnzipOnUIThread(const base::FilePath& unzip_dir) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ DCHECK(!utility_process_mojo_client_);
-void ZipFileInstaller::StartWorkOnIOThread(const base::FilePath& temp_dir) {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- UtilityProcessHost* host =
- UtilityProcessHost::Create(this,
- base::ThreadTaskRunnerHandle::Get().get());
- host->SetName(l10n_util::GetStringUTF16(
- IDS_UTILITY_PROCESS_ZIP_FILE_INSTALLER_NAME));
- host->SetExposedDir(temp_dir);
- host->Send(new ExtensionUtilityMsg_UnzipToDir(zip_path_, temp_dir));
-}
+ temp_dir_ = unzip_dir;
+
+ utility_process_mojo_client_ = base::MakeUnique<
+ content::UtilityProcessMojoClient<mojom::ExtensionUnpacker>>(
+ l10n_util::GetStringUTF16(IDS_UTILITY_PROCESS_ZIP_FILE_INSTALLER_NAME));
+ utility_process_mojo_client_->set_error_callback(
+ base::Bind(&ZipFileInstaller::UnzipDone, this, false));
+
+ utility_process_mojo_client_->set_exposed_directory(temp_dir_);
+
+ utility_process_mojo_client_->Start();
-void ZipFileInstaller::ReportSuccessOnUIThread(
- const base::FilePath& unzipped_path) {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (extension_service_weak_.get())
- UnpackedInstaller::Create(extension_service_weak_.get())
- ->Load(unzipped_path);
+ utility_process_mojo_client_->service()->Unzip(
+ zip_file_, temp_dir_, base::Bind(&ZipFileInstaller::UnzipDone, this));
}
-void ZipFileInstaller::ReportErrorOnUIThread(const std::string& error) {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (extension_service_weak_.get()) {
- ExtensionErrorReporter::GetInstance()->ReportLoadError(
- zip_path_,
- error,
- extension_service_weak_->profile(),
- be_noisy_on_failure_);
+void ZipFileInstaller::UnzipDone(bool success) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ utility_process_mojo_client_.reset();
+
+ if (!success) {
+ ReportErrorOnUIThread(kExtensionHandlerFileUnzipError);
+ return;
}
-}
-void ZipFileInstaller::OnUnzipSucceeded(const base::FilePath& unzipped_path) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(
- &ZipFileInstaller::ReportSuccessOnUIThread, this, unzipped_path));
+ if (extension_service_weak_)
+ UnpackedInstaller::Create(extension_service_weak_.get())->Load(temp_dir_);
}
-void ZipFileInstaller::OnUnzipFailed(const std::string& error) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&ZipFileInstaller::ReportErrorOnUIThread, this, error));
-}
+void ZipFileInstaller::ReportErrorOnUIThread(const std::string& error) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-bool ZipFileInstaller::OnMessageReceived(const IPC::Message& message) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(ZipFileInstaller, message)
- IPC_MESSAGE_HANDLER(ExtensionUtilityHostMsg_UnzipToDir_Succeeded,
- OnUnzipSucceeded)
- IPC_MESSAGE_HANDLER(ExtensionUtilityHostMsg_UnzipToDir_Failed, OnUnzipFailed)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
+ if (extension_service_weak_) {
+ ExtensionErrorReporter::GetInstance()->ReportLoadError(
+ zip_file_, error, extension_service_weak_->profile(),
+ be_noisy_on_failure_);
+ }
}
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698