Index: chrome/browser/extensions/extension_service.cc |
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc |
index 2eff617ac029c5c9343cdf57911c671d6bf4e4e7..49cb1bdc5aa71050ccbae913ddfc6639046cf9ae 100644 |
--- a/chrome/browser/extensions/extension_service.cc |
+++ b/chrome/browser/extensions/extension_service.cc |
@@ -63,6 +63,7 @@ |
#include "chrome/browser/extensions/installed_loader.h" |
#include "chrome/browser/extensions/pending_extension_manager.h" |
#include "chrome/browser/extensions/permissions_updater.h" |
+#include "chrome/browser/extensions/requirements_provider.h" |
#include "chrome/browser/extensions/settings/settings_frontend.h" |
#include "chrome/browser/extensions/unpacked_installer.h" |
#include "chrome/browser/extensions/updater/extension_updater.h" |
@@ -116,7 +117,6 @@ |
#include "chrome/browser/chromeos/extensions/input_method_event_router.h" |
#include "chrome/browser/chromeos/extensions/media_player_event_router.h" |
#include "chrome/browser/chromeos/input_method/input_method_manager.h" |
-#include "chrome/browser/extensions/extension_input_ime_api.h" |
#include "webkit/fileapi/file_system_context.h" |
#include "webkit/fileapi/file_system_mount_point_provider.h" |
#endif |
@@ -343,7 +343,7 @@ ExtensionService::ExtensionService(Profile* profile, |
api_resource_controller_(NULL), |
app_shortcut_manager_(profile) { |
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
+ requirements_provider_.reset(new extensions::RequirementsProvider()); |
// Figure out if extension installation should be enabled. |
if (command_line->HasSwitch(switches::kDisableExtensions)) { |
extensions_enabled_ = false; |
@@ -609,7 +609,6 @@ bool ExtensionService::UpdateExtension( |
creation_flags |= Extension::FROM_BOOKMARK; |
installer->set_creation_flags(creation_flags); |
- |
installer->set_delete_source(true); |
installer->set_download_url(download_url); |
installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE); |
@@ -883,6 +882,19 @@ void ExtensionService::DisableExtension( |
extension_warnings_.ClearWarnings(warnings); |
} |
+void ExtensionService::UnsupportedRequirements(const std::string& extension_id, |
+ const string16& error, |
+ bool disable_extension) { |
+ if (disable_extension) |
+ DisableExtension(extension_id, Extension::DISABLE_UNSUPPORTED_REQUIREMENTS); |
+ Extension::InstallWarningVector warnings; |
+ warnings.push_back(Extension::InstallWarning( |
+ Extension::InstallWarning::FORMAT_TEXT, UTF16ToUTF8(error))); |
+ const Extension* extension = GetExtensionById(extension_id, true); |
+ if (extension) |
+ const_cast<Extension*>(extension)->AddInstallWarnings(warnings); |
+} |
+ |
void ExtensionService::GrantPermissionsAndEnableExtension( |
const Extension* extension, bool record_oauth2_grant) { |
CHECK(extension); |
@@ -1924,6 +1936,20 @@ void ExtensionService::AddExtension(const Extension* extension) { |
InitializePermissions(extension); |
bool disabled = extension_prefs_->IsExtensionDisabled(extension->id()); |
+ |
+ std::list<string16> errors; |
+ bool async; |
+ if (!requirements_provider_->Supports(extension, &errors, &async, this)) { |
Aaron Boodman
2012/07/22 17:46:25
I think that this is going to result in a GPU proc
|
+ disabled = true; |
+ Extension::InstallWarningVector warnings; |
+ std::list<string16>::iterator it; |
+ for (it = errors.begin(); it != errors.end(); ++it) { |
+ warnings.push_back(Extension::InstallWarning( |
+ Extension::InstallWarning::FORMAT_TEXT, UTF16ToUTF8(*it))); |
+ } |
+ const_cast<Extension*>(extension)->AddInstallWarnings(warnings); |
+ } |
+ |
if (disabled) { |
disabled_extensions_.Insert(scoped_extension); |
SyncExtensionChangeIfNeeded(*extension); |