Chromium Code Reviews| 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); |