| Index: chrome/browser/extensions/extension_info_map.cc
|
| diff --git a/chrome/browser/extensions/extension_info_map.cc b/chrome/browser/extensions/extension_info_map.cc
|
| index c8122375df9c13f3237ade4c688bc7f14e942064..4e1642029350a807345717d594a4b65f584f7a5b 100644
|
| --- a/chrome/browser/extensions/extension_info_map.cc
|
| +++ b/chrome/browser/extensions/extension_info_map.cc
|
| @@ -15,35 +15,82 @@ static void CheckOnValidThread() {
|
|
|
| } // namespace
|
|
|
| +
|
| +struct ExtensionInfoMap::ExtraData {
|
| + // When the extension was installed.
|
| + base::Time install_time;
|
| +
|
| + // True if the user has allowed this extension to run in incognito mode.
|
| + bool incognito_enabled;
|
| +
|
| + ExtraData();
|
| + ~ExtraData();
|
| +};
|
| +
|
| +ExtensionInfoMap::ExtraData::ExtraData() : incognito_enabled(false) {
|
| +}
|
| +
|
| +ExtensionInfoMap::ExtraData::~ExtraData() {
|
| +}
|
| +
|
| +
|
| ExtensionInfoMap::ExtensionInfoMap() {
|
| }
|
|
|
| ExtensionInfoMap::~ExtensionInfoMap() {
|
| }
|
|
|
| -void ExtensionInfoMap::AddExtension(const Extension* extension) {
|
| +void ExtensionInfoMap::AddExtension(const Extension* extension,
|
| + base::Time install_time,
|
| + bool incognito_enabled) {
|
| CheckOnValidThread();
|
| extensions_.Insert(extension);
|
| disabled_extensions_.Remove(extension->id());
|
| +
|
| + extra_data_[extension->id()].install_time = install_time;
|
| + extra_data_[extension->id()].incognito_enabled = incognito_enabled;
|
| }
|
|
|
| -void ExtensionInfoMap::RemoveExtension(const std::string& id,
|
| +void ExtensionInfoMap::RemoveExtension(const std::string& extension_id,
|
| const UnloadedExtensionInfo::Reason reason) {
|
| CheckOnValidThread();
|
| - const Extension* extension = extensions_.GetByID(id);
|
| + const Extension* extension = extensions_.GetByID(extension_id);
|
| + extra_data_.erase(extension_id); // we don't care about disabled extra data
|
| if (extension) {
|
| if (reason == UnloadedExtensionInfo::DISABLE)
|
| disabled_extensions_.Insert(extension);
|
| - extensions_.Remove(id);
|
| + extensions_.Remove(extension_id);
|
| } else if (reason != UnloadedExtensionInfo::DISABLE) {
|
| // If the extension was uninstalled, make sure it's removed from the map of
|
| // disabled extensions.
|
| - disabled_extensions_.Remove(id);
|
| + disabled_extensions_.Remove(extension_id);
|
| } else {
|
| // NOTE: This can currently happen if we receive multiple unload
|
| // notifications, e.g. setting incognito-enabled state for a
|
| // disabled extension (e.g., via sync). See
|
| // http://code.google.com/p/chromium/issues/detail?id=50582 .
|
| - NOTREACHED() << id;
|
| + NOTREACHED() << extension_id;
|
| }
|
| }
|
| +
|
| +base::Time ExtensionInfoMap::GetInstallTime(
|
| + const std::string& extension_id) const {
|
| + ExtraDataMap::const_iterator iter = extra_data_.find(extension_id);
|
| + if (iter != extra_data_.end())
|
| + return iter->second.install_time;
|
| + return base::Time();
|
| +}
|
| +
|
| +bool ExtensionInfoMap::IsIncognitoEnabled(
|
| + const std::string& extension_id) const {
|
| + ExtraDataMap::const_iterator iter = extra_data_.find(extension_id);
|
| + if (iter != extra_data_.end())
|
| + return iter->second.incognito_enabled;
|
| + return false;
|
| +}
|
| +
|
| +bool ExtensionInfoMap::CanCrossIncognito(const Extension* extension) {
|
| + // This is duplicated from ExtensionService :(.
|
| + return IsIncognitoEnabled(extension->id()) &&
|
| + !extension->incognito_split_mode();
|
| +}
|
|
|