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

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

Powered by Google App Engine
This is Rietveld 408576698