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

Side by Side Diff: chrome/browser/chromeos/launcher_search_provider/service.cc

Issue 1071093002: Implement setSearchResults. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clear results after query is ended. 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 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/chromeos/launcher_search_provider/service.h" 5 #include "chrome/browser/chromeos/launcher_search_provider/service.h"
6 6
7 #include "base/strings/utf_string_conversions.h"
7 #include "chrome/browser/chromeos/launcher_search_provider/service_factory.h" 8 #include "chrome/browser/chromeos/launcher_search_provider/service_factory.h"
8 #include "chrome/common/extensions/api/launcher_search_provider.h" 9 #include "chrome/browser/ui/app_list/search/launcher_search/launcher_search_prov ider.h"
9 #include "extensions/browser/extension_registry.h" 10 #include "extensions/browser/extension_registry.h"
10 #include "extensions/common/extension_set.h" 11 #include "extensions/common/extension_set.h"
11 #include "extensions/common/permissions/permissions_data.h" 12 #include "extensions/common/permissions/permissions_data.h"
12 13
13 namespace api_launcher_search_provider = 14 namespace api_launcher_search_provider =
14 extensions::api::launcher_search_provider; 15 extensions::api::launcher_search_provider;
15 using extensions::ExtensionId; 16 using extensions::ExtensionId;
16 using extensions::ExtensionSet; 17 using extensions::ExtensionSet;
17 18
18 namespace chromeos { 19 namespace chromeos {
19 namespace launcher_search_provider { 20 namespace launcher_search_provider {
20 21
21 Service::Service(Profile* profile, 22 Service::Service(Profile* profile,
22 extensions::ExtensionRegistry* extension_registry) 23 extensions::ExtensionRegistry* extension_registry)
23 : profile_(profile), 24 : profile_(profile),
24 extension_registry_(extension_registry), 25 extension_registry_(extension_registry),
26 provider_(nullptr),
25 query_id_(0), 27 query_id_(0),
26 is_query_running_(false) { 28 is_query_running_(false) {
27 } 29 }
28 30
29 Service::~Service() { 31 Service::~Service() {
30 } 32 }
31 33
32 // static 34 // static
33 Service* Service::Get(content::BrowserContext* context) { 35 Service* Service::Get(content::BrowserContext* context) {
34 return ServiceFactory::Get(context); 36 return ServiceFactory::Get(context);
35 } 37 }
36 38
37 void Service::OnQueryStarted(const std::string& query, const int max_result) { 39 void Service::OnQueryStarted(app_list::LauncherSearchProvider* provider,
40 const std::string& query,
41 const int max_result) {
38 DCHECK(!is_query_running_); 42 DCHECK(!is_query_running_);
39 is_query_running_ = true; 43 is_query_running_ = true;
44 provider_ = provider;
40 45
41 ++query_id_; 46 ++query_id_;
42 47
43 extensions::EventRouter* event_router = 48 extensions::EventRouter* event_router =
44 extensions::EventRouter::Get(profile_); 49 extensions::EventRouter::Get(profile_);
45 50
46 std::set<ExtensionId> extension_ids = GetListenerExtensionIds(); 51 std::set<ExtensionId> extension_ids = GetListenerExtensionIds();
47 for (const ExtensionId extension_id : extension_ids) { 52 for (const ExtensionId extension_id : extension_ids) {
48 event_router->DispatchEventToExtension( 53 event_router->DispatchEventToExtension(
49 extension_id, 54 extension_id,
50 make_scoped_ptr(new extensions::Event( 55 make_scoped_ptr(new extensions::Event(
51 api_launcher_search_provider::OnQueryStarted::kEventName, 56 api_launcher_search_provider::OnQueryStarted::kEventName,
52 api_launcher_search_provider::OnQueryStarted::Create( 57 api_launcher_search_provider::OnQueryStarted::Create(
53 std::to_string(query_id_), query, max_result)))); 58 std::to_string(query_id_), query, max_result))));
54 } 59 }
55 } 60 }
56 61
57 void Service::OnQueryEnded() { 62 void Service::OnQueryEnded() {
58 DCHECK(is_query_running_); 63 DCHECK(is_query_running_);
64 provider_ = nullptr;
59 65
60 extensions::EventRouter* event_router = 66 extensions::EventRouter* event_router =
61 extensions::EventRouter::Get(profile_); 67 extensions::EventRouter::Get(profile_);
62 68
63 std::set<ExtensionId> extension_ids = GetListenerExtensionIds(); 69 std::set<ExtensionId> extension_ids = GetListenerExtensionIds();
64 for (const ExtensionId extension_id : extension_ids) { 70 for (const ExtensionId extension_id : extension_ids) {
65 event_router->DispatchEventToExtension( 71 event_router->DispatchEventToExtension(
66 extension_id, 72 extension_id,
67 make_scoped_ptr(new extensions::Event( 73 make_scoped_ptr(new extensions::Event(
68 api_launcher_search_provider::OnQueryEnded::kEventName, 74 api_launcher_search_provider::OnQueryEnded::kEventName,
69 api_launcher_search_provider::OnQueryEnded::Create( 75 api_launcher_search_provider::OnQueryEnded::Create(
70 std::to_string(query_id_))))); 76 std::to_string(query_id_)))));
71 } 77 }
72 78
73 is_query_running_ = false; 79 is_query_running_ = false;
74 } 80 }
75 81
82 void Service::SetSearchResults(
83 const extensions::Extension* extension,
84 const std::string& query_id,
85 std::vector<linked_ptr<
86 extensions::api::launcher_search_provider::SearchResult>> results) {
87 // If query is not running or query_id is different from current query id,
88 // discard the results.
89 if (!is_query_running_ || query_id != std::to_string(query_id_))
90 return;
91
92 // Set search results to provider.
93 DCHECK(provider_);
94 std::vector<linked_ptr<app_list::LauncherSearchResult>> search_results;
95 for (const auto& result : results) {
96 app_list::LauncherSearchResult* search_result =
97 new app_list::LauncherSearchResult(
98 result->item_id, result->icon_url.Pass(), result->relevance,
Matt Giuca 2015/04/10 13:29:13 It looks like you are going to trust relevance val
yawano 2015/04/13 07:30:52 Done.
99 profile_, extension);
100 search_result->set_title(base::UTF8ToUTF16(result->title));
101 search_results.push_back(make_linked_ptr(search_result));
102 }
103 provider_->SetSearchResults(extension->id(), search_results);
104 }
105
76 bool Service::IsQueryRunning() const { 106 bool Service::IsQueryRunning() const {
77 return is_query_running_; 107 return is_query_running_;
78 } 108 }
79 109
80 std::set<ExtensionId> Service::GetListenerExtensionIds() { 110 std::set<ExtensionId> Service::GetListenerExtensionIds() {
81 std::set<ExtensionId> extension_ids; 111 std::set<ExtensionId> extension_ids;
82 112
83 const ExtensionSet& extension_set = extension_registry_->enabled_extensions(); 113 const ExtensionSet& extension_set = extension_registry_->enabled_extensions();
84 for (scoped_refptr<const extensions::Extension> extension : extension_set) { 114 for (scoped_refptr<const extensions::Extension> extension : extension_set) {
85 const extensions::PermissionsData* permission_data = 115 const extensions::PermissionsData* permission_data =
86 extension->permissions_data(); 116 extension->permissions_data();
87 const bool has_permission = permission_data->HasAPIPermission( 117 const bool has_permission = permission_data->HasAPIPermission(
88 extensions::APIPermission::kLauncherSearchProvider); 118 extensions::APIPermission::kLauncherSearchProvider);
89 if (has_permission) 119 if (has_permission)
90 extension_ids.insert(extension->id()); 120 extension_ids.insert(extension->id());
91 } 121 }
92 122
93 return extension_ids; 123 return extension_ids;
94 } 124 }
95 125
96 } // namespace launcher_search_provider 126 } // namespace launcher_search_provider
97 } // namespace chromeos 127 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698