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

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: Add comments. 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) {
55 // Convert query_id_ to string here since queryId is defined as string in
56 // javascript side API while we use uint32 internally to generate it.
57 // TODO(yawano): Consider if we can change it to integer at javascript side.
48 event_router->DispatchEventToExtension( 58 event_router->DispatchEventToExtension(
49 extension_id, 59 extension_id,
50 make_scoped_ptr(new extensions::Event( 60 make_scoped_ptr(new extensions::Event(
51 api_launcher_search_provider::OnQueryStarted::kEventName, 61 api_launcher_search_provider::OnQueryStarted::kEventName,
52 api_launcher_search_provider::OnQueryStarted::Create( 62 api_launcher_search_provider::OnQueryStarted::Create(
53 std::to_string(query_id_), query, max_result)))); 63 std::to_string(query_id_), query, max_result))));
54 } 64 }
55 } 65 }
56 66
57 void Service::OnQueryEnded() { 67 void Service::OnQueryEnded() {
58 DCHECK(is_query_running_); 68 DCHECK(is_query_running_);
69 provider_ = nullptr;
59 70
60 extensions::EventRouter* event_router = 71 extensions::EventRouter* event_router =
61 extensions::EventRouter::Get(profile_); 72 extensions::EventRouter::Get(profile_);
62 73
63 std::set<ExtensionId> extension_ids = GetListenerExtensionIds(); 74 std::set<ExtensionId> extension_ids = GetListenerExtensionIds();
64 for (const ExtensionId extension_id : extension_ids) { 75 for (const ExtensionId extension_id : extension_ids) {
65 event_router->DispatchEventToExtension( 76 event_router->DispatchEventToExtension(
66 extension_id, 77 extension_id,
67 make_scoped_ptr(new extensions::Event( 78 make_scoped_ptr(new extensions::Event(
68 api_launcher_search_provider::OnQueryEnded::kEventName, 79 api_launcher_search_provider::OnQueryEnded::kEventName,
69 api_launcher_search_provider::OnQueryEnded::Create( 80 api_launcher_search_provider::OnQueryEnded::Create(
70 std::to_string(query_id_))))); 81 std::to_string(query_id_)))));
71 } 82 }
72 83
73 is_query_running_ = false; 84 is_query_running_ = false;
74 } 85 }
75 86
87 void Service::SetSearchResults(
88 const extensions::Extension* extension,
89 const std::string& query_id,
90 const std::vector<linked_ptr<
91 extensions::api::launcher_search_provider::SearchResult>>& results) {
92 // If query is not running or query_id is different from current query id,
93 // discard the results.
94 if (!is_query_running_ || query_id != std::to_string(query_id_))
95 return;
96
97 // Set search results to provider.
98 DCHECK(provider_);
99 ScopedVector<app_list::LauncherSearchResult> search_results;
100 for (const auto& result : results) {
101 const int relevance =
102 std::min(kMaxSearchResultScore, std::max(result->relevance, 0));
103 const GURL icon_url =
104 result->icon_url ? GURL(*result->icon_url.get()) : GURL();
105
106 app_list::LauncherSearchResult* search_result =
107 new app_list::LauncherSearchResult(result->item_id, icon_url, relevance,
108 profile_, extension);
109 search_result->set_title(base::UTF8ToUTF16(result->title));
110 search_results.push_back(search_result);
111 }
112 provider_->SetSearchResults(extension->id(), search_results.Pass());
113 }
114
76 bool Service::IsQueryRunning() const { 115 bool Service::IsQueryRunning() const {
77 return is_query_running_; 116 return is_query_running_;
78 } 117 }
79 118
80 std::set<ExtensionId> Service::GetListenerExtensionIds() { 119 std::set<ExtensionId> Service::GetListenerExtensionIds() {
81 std::set<ExtensionId> extension_ids; 120 std::set<ExtensionId> extension_ids;
82 121
83 const ExtensionSet& extension_set = extension_registry_->enabled_extensions(); 122 const ExtensionSet& extension_set = extension_registry_->enabled_extensions();
84 for (scoped_refptr<const extensions::Extension> extension : extension_set) { 123 for (scoped_refptr<const extensions::Extension> extension : extension_set) {
85 const extensions::PermissionsData* permission_data = 124 const extensions::PermissionsData* permission_data =
86 extension->permissions_data(); 125 extension->permissions_data();
87 const bool has_permission = permission_data->HasAPIPermission( 126 const bool has_permission = permission_data->HasAPIPermission(
88 extensions::APIPermission::kLauncherSearchProvider); 127 extensions::APIPermission::kLauncherSearchProvider);
89 if (has_permission) 128 if (has_permission)
90 extension_ids.insert(extension->id()); 129 extension_ids.insert(extension->id());
91 } 130 }
92 131
93 return extension_ids; 132 return extension_ids;
94 } 133 }
95 134
96 } // namespace launcher_search_provider 135 } // namespace launcher_search_provider
97 } // namespace chromeos 136 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698