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

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

Issue 340057: Add first-class support for user scripts (Closed)
Patch Set: newness Created 11 years, 1 month 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/crx_installer.cc
diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc
index 6c6259f579bdc19b58091a5d83a5930bfcdbdd03..cb5b4e42c9a284147d8ec7e4d5247de7dc86dca2 100644
--- a/chrome/browser/extensions/crx_installer.cc
+++ b/chrome/browser/extensions/crx_installer.cc
@@ -11,6 +11,7 @@
#include "base/task.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_thread.h"
+#include "chrome/browser/extensions/convert_user_script.h"
#include "chrome/browser/extensions/extension_file_util.h"
#include "chrome/common/extensions/extension_error_reporter.h"
#include "chrome/common/notification_service.h"
@@ -31,41 +32,56 @@ void CrxInstaller::Start(const FilePath& crx_path,
const FilePath& install_directory,
Extension::Location install_source,
const std::string& expected_id,
- bool delete_crx,
+ bool delete_source,
bool allow_privilege_increase,
ExtensionsService* frontend,
ExtensionInstallUI* client) {
// Note: We don't keep a reference because this object manages its own
// lifetime.
- new CrxInstaller(crx_path, install_directory, install_source, expected_id,
- delete_crx, allow_privilege_increase, frontend, client);
+ CrxInstaller* installer = new CrxInstaller(crx_path, install_directory,
+ delete_source, frontend,
+ client);
+ installer->install_source_ = install_source;
+ installer->expected_id_ = expected_id;
+ installer->allow_privilege_increase_ = allow_privilege_increase;
+
+ installer->unpacker_ = new SandboxedExtensionUnpacker(
+ installer->source_file_, g_browser_process->resource_dispatcher_host(),
+ installer);
+
+ ChromeThread::PostTask(
+ ChromeThread::FILE, FROM_HERE,
+ NewRunnableMethod(installer->unpacker_, &SandboxedExtensionUnpacker::Start));
+}
+
+void CrxInstaller::InstallUserScript(const FilePath& source_file,
+ const GURL& original_url,
+ const FilePath& install_directory,
+ bool delete_source,
+ ExtensionsService* frontend,
+ ExtensionInstallUI* client) {
+ CrxInstaller* installer = new CrxInstaller(source_file, install_directory,
+ delete_source, frontend, client);
+ installer->original_url_ = original_url;
+
+ ChromeThread::PostTask(
+ ChromeThread::FILE, FROM_HERE,
+ NewRunnableMethod(installer, &CrxInstaller::ConvertUserScriptOnFileThread));
}
-CrxInstaller::CrxInstaller(const FilePath& crx_path,
+CrxInstaller::CrxInstaller(const FilePath& source_file,
const FilePath& install_directory,
- Extension::Location install_source,
- const std::string& expected_id,
- bool delete_crx,
- bool allow_privilege_increase,
+ bool delete_source,
ExtensionsService* frontend,
ExtensionInstallUI* client)
- : crx_path_(crx_path),
+ : source_file_(source_file),
install_directory_(install_directory),
- install_source_(install_source),
- expected_id_(expected_id),
- delete_crx_(delete_crx),
- allow_privilege_increase_(allow_privilege_increase),
+ install_source_(Extension::INTERNAL),
+ delete_source_(delete_source),
+ allow_privilege_increase_(false),
frontend_(frontend),
client_(client) {
-
extensions_enabled_ = frontend_->extensions_enabled();
-
- unpacker_ = new SandboxedExtensionUnpacker(
- crx_path, g_browser_process->resource_dispatcher_host(), this);
-
- ChromeThread::PostTask(
- ChromeThread::FILE, FROM_HERE,
- NewRunnableMethod(unpacker_, &SandboxedExtensionUnpacker::Start));
}
CrxInstaller::~CrxInstaller() {
@@ -78,11 +94,23 @@ CrxInstaller::~CrxInstaller() {
NewRunnableFunction(&DeleteFileHelper, temp_dir_, true));
}
- if (delete_crx_) {
+ if (delete_source_) {
ChromeThread::PostTask(
ChromeThread::FILE, FROM_HERE,
- NewRunnableFunction(&DeleteFileHelper, crx_path_, false));
+ NewRunnableFunction(&DeleteFileHelper, source_file_, false));
+ }
+}
+
+void CrxInstaller::ConvertUserScriptOnFileThread() {
+ std::string error;
+ Extension* extension = ConvertUserScriptToExtension(source_file_,
+ original_url_, &error);
+ if (!extension) {
+ ReportFailureFromFileThread(error);
+ return;
}
+
+ OnUnpackSuccess(extension->path(), extension->path(), extension);
}
void CrxInstaller::OnUnpackFailure(const std::string& error_message) {
@@ -102,7 +130,6 @@ void CrxInstaller::OnUnpackSuccess(const FilePath& temp_dir,
// The unpack dir we don't have to delete explicity since it is a child of
// the temp dir.
unpacked_extension_root_ = extension_dir;
- DCHECK(file_util::ContainsPath(temp_dir_, unpacked_extension_root_));
// Determine whether to allow installation. We always allow themes and
// external installs.

Powered by Google App Engine
This is Rietveld 408576698