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/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 |
OLD | NEW |