Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(527)

Unified Diff: chrome/browser/extensions/extension_info_map.cc

Issue 7024056: Handle extension webrequest API on the IO thread. This speeds up blocking event (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
+}
« no previous file with comments | « chrome/browser/extensions/extension_info_map.h ('k') | chrome/browser/extensions/extension_info_map_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698