OLD | NEW |
---|---|
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_))))); |
satorux1
2015/04/16 08:12:25
query id is internally uint32. why is it exposed a
yawano
2015/04/16 08:57:24
Added comment about the conversion. We designed th
| |
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 ? GURL(*result->icon_url.get()) : GURL(); | |
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 |
OLD | NEW |