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(); |
+} |