Chromium Code Reviews| 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 |