Commit bc8c161f authored by wittman@chromium.org's avatar wittman@chromium.org

Allow enhanced bookmarks external component extensions to be disabled

Allow enhanced bookmarks external component extensions to be
disabled/uninstalled. This facilitates ongoing development and testing
of multiple versions of extensions that are ultimately released as
external component extensions.

BUG=401315

Review URL: https://codereview.chromium.org/445233002

Cr-Commit-Position: refs/heads/master@{#289270}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289270 0039d316-1c4b-4281-b951-d872f2087c98
parent 845c4e3f
......@@ -5,6 +5,8 @@
#include "chrome/browser/extensions/external_component_loader.h"
#include "base/command_line.h"
#include "base/sha1.h"
#include "base/strings/string_number_conversions.h"
#include "chrome/browser/bookmarks/enhanced_bookmarks_features.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/signin/signin_manager_factory.h"
......@@ -34,6 +36,24 @@ ExternalComponentLoader::ExternalComponentLoader(Profile* profile)
ExternalComponentLoader::~ExternalComponentLoader() {}
// static
bool ExternalComponentLoader::IsModifiable(
const extensions::Extension* extension) {
if (extension->location() == extensions::Manifest::EXTERNAL_COMPONENT) {
static const char* enhanced_extension_hashes[] = {
"D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
"D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
"3F65507A3B39259B38C8173C6FFA3D12DF64CCE9" // http://crbug.com/371562
};
std::string hash = base::SHA1HashString(extension->id());
hash = base::HexEncode(hash.c_str(), hash.length());
for (size_t i = 0; i < arraysize(enhanced_extension_hashes); i++)
if (hash == enhanced_extension_hashes[i])
return true;
}
return false;
}
void ExternalComponentLoader::StartLoading() {
prefs_.reset(new base::DictionaryValue());
std::string appId = extension_misc::kInAppPaymentsSupportAppId;
......
......@@ -13,6 +13,8 @@
namespace extensions {
class Extension;
// A specialization of the ExternalLoader that loads a hard-coded list of
// external extensions, that should be considered components of chrome (but
// unlike Component extensions, these extensions are installed from the webstore
......@@ -23,6 +25,9 @@ class ExternalComponentLoader : public ExternalLoader {
public:
explicit ExternalComponentLoader(Profile* profile);
// True if |extension| should be modifiable by the user.
static bool IsModifiable(const extensions::Extension* extension);
protected:
virtual void StartLoading() OVERRIDE;
......
......@@ -6,6 +6,7 @@
#include "base/prefs/pref_service.h"
#include "chrome/browser/extensions/blacklist.h"
#include "chrome/browser/extensions/external_component_loader.h"
#include "chrome/common/pref_names.h"
#include "extensions/browser/admin_policy.h"
#include "extensions/browser/extension_prefs.h"
......@@ -54,13 +55,17 @@ bool StandardManagementPolicyProvider::UserMayLoad(
bool StandardManagementPolicyProvider::UserMayModifySettings(
const Extension* extension,
base::string16* error) const {
return admin_policy::UserMayModifySettings(extension, error);
return admin_policy::UserMayModifySettings(extension, error) ||
(extension->location() == extensions::Manifest::EXTERNAL_COMPONENT &&
ExternalComponentLoader::IsModifiable(extension));
}
bool StandardManagementPolicyProvider::MustRemainEnabled(
const Extension* extension,
base::string16* error) const {
return admin_policy::MustRemainEnabled(extension, error);
return admin_policy::MustRemainEnabled(extension, error) ||
(extension->location() == extensions::Manifest::EXTERNAL_COMPONENT &&
ExternalComponentLoader::IsModifiable(extension));
}
} // namespace extensions
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment