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

Unified Diff: chrome/browser/ui/app_list/search/launcher_search/launcher_search_provider.cc

Issue 1071093002: Implement setSearchResults. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix memory leak. Created 5 years, 8 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/ui/app_list/search/launcher_search/launcher_search_provider.cc
diff --git a/chrome/browser/ui/app_list/search/launcher_search/launcher_search_provider.cc b/chrome/browser/ui/app_list/search/launcher_search/launcher_search_provider.cc
index 103c4b76bd8b8a0037618f4286aa1f37793c1449..f2c9ec103a6449b62383433f5864236a001acd9e 100644
--- a/chrome/browser/ui/app_list/search/launcher_search/launcher_search_provider.cc
+++ b/chrome/browser/ui/app_list/search/launcher_search/launcher_search_provider.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/ui/app_list/search/launcher_search/launcher_search_provider.h"
+#include "base/stl_util.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/chromeos/launcher_search_provider/service.h"
@@ -19,7 +20,9 @@ const int kLauncherSearchProviderMaxResults = 6;
} // namespace
LauncherSearchProvider::LauncherSearchProvider(Profile* profile)
- : profile_(profile), weak_ptr_factory_(this) {
+ : extension_results_deleter_(&extension_results_),
+ profile_(profile),
+ weak_ptr_factory_(this) {
}
LauncherSearchProvider::~LauncherSearchProvider() {
@@ -36,6 +39,9 @@ void LauncherSearchProvider::Stop() {
// order not to start query after Stop() is called.
query_timer_.Stop();
+ // Clear all search results of the previous query.
+ STLDeleteValues(&extension_results_);
+
Service* service = Service::Get(profile_);
// Since we delay queries and filter out empty string queries, it can happen
@@ -44,6 +50,29 @@ void LauncherSearchProvider::Stop() {
service->OnQueryEnded();
}
+void LauncherSearchProvider::SetSearchResults(
+ const extensions::ExtensionId& extension_id,
+ ScopedVector<LauncherSearchResult> results) {
+ DCHECK(Service::Get(profile_)->IsQueryRunning());
+
+ // If it already has the results of this extension, delete it first.
+ if (ContainsKey(extension_results_, extension_id)) {
+ delete extension_results_[extension_id];
+ extension_results_.erase(extension_id);
+ }
+
+ // Add this extension's results.
+ extension_results_.insert(std::make_pair(
+ extension_id, new ScopedVector<LauncherSearchResult>(results.Pass())));
+
+ // Update results with other extension results.
+ ClearResults();
+ for (const auto& item : extension_results_) {
+ for (const auto* result : *item.second)
+ Add(result->Duplicate());
+ }
+}
+
void LauncherSearchProvider::DelayQuery(const base::Closure& closure) {
base::TimeDelta delay =
base::TimeDelta::FromMilliseconds(kLauncherSearchProviderQueryDelayInMs);
@@ -58,7 +87,7 @@ void LauncherSearchProvider::DelayQuery(const base::Closure& closure) {
void LauncherSearchProvider::StartInternal(const base::string16& query) {
if (!query.empty()) {
- Service::Get(profile_)->OnQueryStarted(base::UTF16ToUTF8(query),
+ Service::Get(profile_)->OnQueryStarted(this, base::UTF16ToUTF8(query),
kLauncherSearchProviderMaxResults);
}
}

Powered by Google App Engine
This is Rietveld 408576698