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

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

Issue 10689097: Enforce the 'requirements' field in manifests. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fixed UnpackedInstller issue Created 8 years, 3 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/unpacked_installer.cc
diff --git a/chrome/browser/extensions/unpacked_installer.cc b/chrome/browser/extensions/unpacked_installer.cc
index 80307c0d25743f80e161e5817983721bb3102ce8..298d3ba6f66e892f32973beea26d5ba1defe3cc9 100644
--- a/chrome/browser/extensions/unpacked_installer.cc
+++ b/chrome/browser/extensions/unpacked_installer.cc
@@ -7,12 +7,14 @@
#include "base/bind.h"
#include "base/callback.h"
#include "base/file_util.h"
+#include "base/string_util.h"
#include "base/threading/thread_restrictions.h"
#include "chrome/browser/extensions/extension_install_prompt.h"
#include "chrome/browser/extensions/extension_install_ui.h"
#include "chrome/browser/extensions/extension_prefs.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/permissions_updater.h"
+#include "chrome/browser/extensions/requirements_checker.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_file_util.h"
#include "sync/api/string_ordinal.h"
@@ -67,7 +69,10 @@ void SimpleExtensionLoadPrompt::InstallUIProceed() {
extensions::PermissionsUpdater perms_updater(service_weak_->profile());
perms_updater.GrantActivePermissions(extension_, false);
service_weak_->OnExtensionInstalled(
- extension_, false, syncer::StringOrdinal()); // Not from web store.
+ extension_,
+ false, // Not from web store.
+ syncer::StringOrdinal(),
+ false /* no requirement errors */);
}
delete this;
}
@@ -90,6 +95,7 @@ scoped_refptr<UnpackedInstaller> UnpackedInstaller::Create(
UnpackedInstaller::UnpackedInstaller(ExtensionService* extension_service)
: service_weak_(extension_service->AsWeakPtr()),
prompt_for_plugins_(true),
+ requirements_checker_(new RequirementsChecker()),
require_modern_manifest_version_(true) {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
}
@@ -100,12 +106,16 @@ UnpackedInstaller::~UnpackedInstaller() {
}
void UnpackedInstaller::Load(const FilePath& path_in) {
+ DCHECK(extension_path_.empty());
extension_path_ = path_in;
BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
base::Bind(&UnpackedInstaller::GetAbsolutePath, this));
}
void UnpackedInstaller::LoadFromCommandLine(const FilePath& path_in) {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(extension_path_.empty());
+
if (!service_weak_.get())
return;
// Load extensions from the command line synchronously to avoid a race
@@ -121,18 +131,37 @@ void UnpackedInstaller::LoadFromCommandLine(const FilePath& path_in) {
}
std::string error;
- scoped_refptr<const Extension> extension(extension_file_util::LoadExtension(
+ extension_ = extension_file_util::LoadExtension(
extension_path_,
Extension::LOAD,
GetFlags(),
- &error));
+ &error);
- if (!extension) {
+ if (!extension_.get()) {
ReportExtensionLoadError(error);
return;
}
- OnLoaded(extension);
+ CheckRequirements();
+}
+
+void UnpackedInstaller::CheckRequirements() {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ requirements_checker_->Check(
+ extension_,
+ base::Bind(&UnpackedInstaller::OnRequirementsChecked, this));
+}
+
+void UnpackedInstaller::OnRequirementsChecked(
+ std::vector<std::string> requirement_errors) {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ if (!requirement_errors.empty()) {
+ ReportExtensionLoadError(JoinString(requirement_errors, ' '));
+ return;
+ }
+
+ OnLoaded();
}
int UnpackedInstaller::GetFlags() {
@@ -187,13 +216,13 @@ void UnpackedInstaller::LoadWithFileAccess(int flags) {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
std::string error;
- scoped_refptr<const Extension> extension(extension_file_util::LoadExtension(
+ extension_ = extension_file_util::LoadExtension(
extension_path_,
Extension::LOAD,
flags,
- &error));
+ &error);
- if (!extension) {
+ if (!extension_.get()) {
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(
&UnpackedInstaller::ReportExtensionLoadError,
@@ -202,9 +231,7 @@ void UnpackedInstaller::LoadWithFileAccess(int flags) {
}
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
- base::Bind(
- &UnpackedInstaller::OnLoaded,
- this, extension));
+ base::Bind(&UnpackedInstaller::CheckRequirements, this));
}
void UnpackedInstaller::ReportExtensionLoadError(const std::string &error) {
@@ -214,8 +241,7 @@ void UnpackedInstaller::ReportExtensionLoadError(const std::string &error) {
service_weak_->ReportExtensionLoadError(extension_path_, error, true);
}
-void UnpackedInstaller::OnLoaded(
- const scoped_refptr<const Extension>& extension) {
+void UnpackedInstaller::OnLoaded() {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (!service_weak_.get())
return;
@@ -223,21 +249,22 @@ void UnpackedInstaller::OnLoaded(
service_weak_->disabled_extensions();
if (service_weak_->show_extensions_prompts() &&
prompt_for_plugins_ &&
- !extension->plugins().empty() &&
- !disabled_extensions->Contains(extension->id())) {
+ !extension_->plugins().empty() &&
+ !disabled_extensions->Contains(extension_->id())) {
SimpleExtensionLoadPrompt* prompt = new SimpleExtensionLoadPrompt(
service_weak_->profile(),
service_weak_,
- extension);
+ extension_);
prompt->ShowPrompt();
return; // continues in SimpleExtensionLoadPrompt::InstallPrompt*
}
PermissionsUpdater perms_updater(service_weak_->profile());
- perms_updater.GrantActivePermissions(extension, false);
- service_weak_->OnExtensionInstalled(extension,
+ perms_updater.GrantActivePermissions(extension_, false);
+ service_weak_->OnExtensionInstalled(extension_,
false, // Not from web store.
- syncer::StringOrdinal());
+ syncer::StringOrdinal(),
+ false /* no requirement errors */);
}
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/unpacked_installer.h ('k') | chrome/browser/sync/test/integration/sync_extension_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698