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

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

Issue 1096983002: Update usages of std::map to use ScopedPtrMap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@passwordmanager-scopedmemory
Patch Set: Rebase. Created 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/app_list/search/launcher_search/launcher_search_prov ider.h" 5 #include "chrome/browser/ui/app_list/search/launcher_search/launcher_search_prov ider.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/chromeos/launcher_search_provider/service.h" 9 #include "chrome/browser/chromeos/launcher_search_provider/service.h"
10 10
11 using chromeos::launcher_search_provider::Service; 11 using chromeos::launcher_search_provider::Service;
12 12
13 namespace app_list { 13 namespace app_list {
14 14
15 namespace { 15 namespace {
16 16
17 const int kLauncherSearchProviderQueryDelayInMs = 100; 17 const int kLauncherSearchProviderQueryDelayInMs = 100;
18 const int kLauncherSearchProviderMaxResults = 6; 18 const int kLauncherSearchProviderMaxResults = 6;
19 19
20 } // namespace 20 } // namespace
21 21
22 LauncherSearchProvider::LauncherSearchProvider(Profile* profile) 22 LauncherSearchProvider::LauncherSearchProvider(Profile* profile)
23 : extension_results_deleter_(&extension_results_), 23 : profile_(profile), weak_ptr_factory_(this) {
24 profile_(profile),
25 weak_ptr_factory_(this) {
26 } 24 }
27 25
28 LauncherSearchProvider::~LauncherSearchProvider() { 26 LauncherSearchProvider::~LauncherSearchProvider() {
29 } 27 }
30 28
31 void LauncherSearchProvider::Start(bool /*is_voice_query*/, 29 void LauncherSearchProvider::Start(bool /*is_voice_query*/,
32 const base::string16& query) { 30 const base::string16& query) {
33 // Clear previously added search results. 31 // Clear previously added search results.
34 ClearResults(); 32 ClearResults();
35 33
36 DelayQuery(base::Bind(&LauncherSearchProvider::StartInternal, 34 DelayQuery(base::Bind(&LauncherSearchProvider::StartInternal,
37 weak_ptr_factory_.GetWeakPtr(), query)); 35 weak_ptr_factory_.GetWeakPtr(), query));
38 } 36 }
39 37
40 void LauncherSearchProvider::Stop() { 38 void LauncherSearchProvider::Stop() {
41 // Since app_list code can call Stop() at any time, we stop timer here in 39 // Since app_list code can call Stop() at any time, we stop timer here in
42 // order not to start query after Stop() is called. 40 // order not to start query after Stop() is called.
43 query_timer_.Stop(); 41 query_timer_.Stop();
44 42
45 // Clear all search results of the previous query. Since results are 43 // Clear all search results of the previous query. Since results are
46 // duplicated when being exported from the map, there are no external pointers 44 // duplicated when being exported from the map, there are no external pointers
47 // to |extension_results_|, so it is safe to clear the map. 45 // to |extension_results_|, so it is safe to clear the map.
48 STLDeleteValues(&extension_results_); 46 extension_results_.clear();
49 47
50 Service* service = Service::Get(profile_); 48 Service* service = Service::Get(profile_);
51 49
52 // Since we delay queries and filter out empty string queries, it can happen 50 // Since we delay queries and filter out empty string queries, it can happen
53 // that no query is running at service side. 51 // that no query is running at service side.
54 if (service->IsQueryRunning()) 52 if (service->IsQueryRunning())
55 service->OnQueryEnded(); 53 service->OnQueryEnded();
56 } 54 }
57 55
58 void LauncherSearchProvider::SetSearchResults( 56 void LauncherSearchProvider::SetSearchResults(
59 const extensions::ExtensionId& extension_id, 57 const extensions::ExtensionId& extension_id,
60 ScopedVector<LauncherSearchResult> results) { 58 ScopedVector<LauncherSearchResult> results) {
61 DCHECK(Service::Get(profile_)->IsQueryRunning()); 59 DCHECK(Service::Get(profile_)->IsQueryRunning());
62 60
63 // If it already has the results of this extension, delete it first. 61 // Add this extension's results (erasing any existing results).
64 if (ContainsKey(extension_results_, extension_id)) { 62 extension_results_.set(
65 delete extension_results_[extension_id]; 63 extension_id,
66 extension_results_.erase(extension_id); 64 make_scoped_ptr(new ScopedVector<LauncherSearchResult>(results.Pass())));
67 }
68
69 // Add this extension's results.
70 extension_results_.insert(std::make_pair(
71 extension_id, new ScopedVector<LauncherSearchResult>(results.Pass())));
72 65
73 // Update results with other extension results. 66 // Update results with other extension results.
74 ClearResults(); 67 ClearResults();
75 for (const auto& item : extension_results_) { 68 for (const auto& item : extension_results_) {
76 for (const auto* result : *item.second) 69 for (const auto* result : *item.second)
77 Add(result->Duplicate()); 70 Add(result->Duplicate());
78 } 71 }
79 } 72 }
80 73
81 void LauncherSearchProvider::DelayQuery(const base::Closure& closure) { 74 void LauncherSearchProvider::DelayQuery(const base::Closure& closure) {
82 base::TimeDelta delay = 75 base::TimeDelta delay =
83 base::TimeDelta::FromMilliseconds(kLauncherSearchProviderQueryDelayInMs); 76 base::TimeDelta::FromMilliseconds(kLauncherSearchProviderQueryDelayInMs);
84 if (base::Time::Now() - last_query_time_ > delay) { 77 if (base::Time::Now() - last_query_time_ > delay) {
85 query_timer_.Stop(); 78 query_timer_.Stop();
86 closure.Run(); 79 closure.Run();
87 } else { 80 } else {
88 query_timer_.Start(FROM_HERE, delay, closure); 81 query_timer_.Start(FROM_HERE, delay, closure);
89 } 82 }
90 last_query_time_ = base::Time::Now(); 83 last_query_time_ = base::Time::Now();
91 } 84 }
92 85
93 void LauncherSearchProvider::StartInternal(const base::string16& query) { 86 void LauncherSearchProvider::StartInternal(const base::string16& query) {
94 if (!query.empty()) { 87 if (!query.empty()) {
95 Service::Get(profile_)->OnQueryStarted(this, base::UTF16ToUTF8(query), 88 Service::Get(profile_)->OnQueryStarted(this, base::UTF16ToUTF8(query),
96 kLauncherSearchProviderMaxResults); 89 kLauncherSearchProviderMaxResults);
97 } 90 }
98 } 91 }
99 92
100 } // namespace app_list 93 } // namespace app_list
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698