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