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

Unified Diff: chrome/browser/chromeos/launcher_search_provider/service.cc

Issue 1137603005: Cache listener extension ids. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 5 years, 7 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
« no previous file with comments | « chrome/browser/chromeos/launcher_search_provider/service.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/launcher_search_provider/service.cc
diff --git a/chrome/browser/chromeos/launcher_search_provider/service.cc b/chrome/browser/chromeos/launcher_search_provider/service.cc
index 95ed72bdb8fd85ad4b1cb73a3f8a37d97bf2c531..c12976c1e3c1af8406621ecd76a1a0a9722ab19d 100644
--- a/chrome/browser/chromeos/launcher_search_provider/service.cc
+++ b/chrome/browser/chromeos/launcher_search_provider/service.cc
@@ -28,9 +28,11 @@ Service::Service(Profile* profile,
provider_(nullptr),
query_id_(0),
is_query_running_(false) {
+ extension_registry_->AddObserver(this);
}
Service::~Service() {
+ extension_registry_->RemoveObserver(this);
}
// static
@@ -50,8 +52,8 @@ void Service::OnQueryStarted(app_list::LauncherSearchProvider* provider,
extensions::EventRouter* event_router =
extensions::EventRouter::Get(profile_);
- std::set<ExtensionId> extension_ids = GetListenerExtensionIds();
- for (const ExtensionId extension_id : extension_ids) {
+ CacheListenerExtensionIds();
+ for (const ExtensionId extension_id : *cached_listener_extension_ids_.get()) {
// Convert query_id_ to string here since queryId is defined as string in
// javascript side API while we use uint32 internally to generate it.
event_router->DispatchEventToExtension(
@@ -70,8 +72,8 @@ void Service::OnQueryEnded() {
extensions::EventRouter* event_router =
extensions::EventRouter::Get(profile_);
- std::set<ExtensionId> extension_ids = GetListenerExtensionIds();
- for (const ExtensionId extension_id : extension_ids) {
+ CacheListenerExtensionIds();
+ for (const ExtensionId extension_id : *cached_listener_extension_ids_.get()) {
event_router->DispatchEventToExtension(
extension_id,
make_scoped_ptr(new extensions::Event(
@@ -84,7 +86,8 @@ void Service::OnQueryEnded() {
void Service::OnOpenResult(const ExtensionId& extension_id,
const std::string& item_id) {
- CHECK(ContainsValue(GetListenerExtensionIds(), extension_id));
+ CacheListenerExtensionIds();
+ CHECK(ContainsValue(*cached_listener_extension_ids_.get(), extension_id));
extensions::EventRouter* event_router =
extensions::EventRouter::Get(profile_);
@@ -107,7 +110,8 @@ void Service::SetSearchResults(
return;
// If |extension| is not in the listener extensions list, ignore it.
- if (!ContainsValue(GetListenerExtensionIds(), extension->id()))
+ CacheListenerExtensionIds();
+ if (!ContainsValue(*cached_listener_extension_ids_.get(), extension->id()))
return;
// Set search results to provider.
@@ -133,9 +137,26 @@ bool Service::IsQueryRunning() const {
return is_query_running_;
}
-std::set<ExtensionId> Service::GetListenerExtensionIds() {
- // TODO(yawano): Cache this result for optimization (crbug.com/440649).
- std::set<ExtensionId> extension_ids;
+void Service::OnExtensionLoaded(content::BrowserContext* browser_context,
+ const extensions::Extension* extension) {
+ // Invalidate cache.
+ cached_listener_extension_ids_.reset();
+}
+
+void Service::OnExtensionUnloaded(
+ content::BrowserContext* browser_context,
+ const extensions::Extension* extension,
+ extensions::UnloadedExtensionInfo::Reason reason) {
+ // Invalidate cache.
+ cached_listener_extension_ids_.reset();
+}
+
+void Service::CacheListenerExtensionIds() {
+ // If it's already cached, do nothing.
+ if (cached_listener_extension_ids_)
+ return;
+
+ cached_listener_extension_ids_.reset(new std::set<ExtensionId>());
const ExtensionSet& extension_set = extension_registry_->enabled_extensions();
for (scoped_refptr<const extensions::Extension> extension : extension_set) {
@@ -144,10 +165,8 @@ std::set<ExtensionId> Service::GetListenerExtensionIds() {
const bool has_permission = permission_data->HasAPIPermission(
extensions::APIPermission::kLauncherSearchProvider);
if (has_permission)
- extension_ids.insert(extension->id());
+ cached_listener_extension_ids_->insert(extension->id());
}
-
- return extension_ids;
}
} // namespace launcher_search_provider
« no previous file with comments | « chrome/browser/chromeos/launcher_search_provider/service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698