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 "chrome/browser/chromeos/launcher_search_provider/service_factory.h" | 7 #include "chrome/browser/chromeos/launcher_search_provider/service_factory.h" |
8 #include "chrome/common/extensions/api/launcher_search_provider.h" | 8 #include "chrome/common/extensions/api/launcher_search_provider.h" |
9 #include "extensions/browser/extension_registry.h" | 9 #include "extensions/browser/extension_registry.h" |
10 #include "extensions/common/extension_set.h" | 10 #include "extensions/common/extension_set.h" |
11 #include "extensions/common/permissions/permissions_data.h" | 11 #include "extensions/common/permissions/permissions_data.h" |
12 | 12 |
13 namespace api_launcher_search_provider = | 13 namespace api_launcher_search_provider = |
14 extensions::api::launcher_search_provider; | 14 extensions::api::launcher_search_provider; |
15 using extensions::ExtensionId; | 15 using extensions::ExtensionId; |
16 using extensions::ExtensionSet; | 16 using extensions::ExtensionSet; |
17 | 17 |
18 namespace chromeos { | 18 namespace chromeos { |
19 namespace launcher_search_provider { | 19 namespace launcher_search_provider { |
20 | 20 |
21 Service::Service(Profile* profile, | 21 Service::Service(Profile* profile, |
22 extensions::ExtensionRegistry* extension_registry) | 22 extensions::ExtensionRegistry* extension_registry) |
23 : profile_(profile), extension_registry_(extension_registry), query_id_(0) { | 23 : profile_(profile), |
| 24 extension_registry_(extension_registry), |
| 25 query_id_(0), |
| 26 is_query_running_(false) { |
24 } | 27 } |
25 | 28 |
26 Service::~Service() { | 29 Service::~Service() { |
27 } | 30 } |
28 | 31 |
29 // static | 32 // static |
30 Service* Service::Get(content::BrowserContext* context) { | 33 Service* Service::Get(content::BrowserContext* context) { |
31 return ServiceFactory::Get(context); | 34 return ServiceFactory::Get(context); |
32 } | 35 } |
33 | 36 |
34 void Service::OnQueryStarted(const std::string& query, const int max_result) { | 37 void Service::OnQueryStarted(const std::string& query, const int max_result) { |
| 38 DCHECK(!is_query_running_); |
| 39 is_query_running_ = true; |
| 40 |
35 ++query_id_; | 41 ++query_id_; |
36 | 42 |
37 extensions::EventRouter* event_router = | 43 extensions::EventRouter* event_router = |
38 extensions::EventRouter::Get(profile_); | 44 extensions::EventRouter::Get(profile_); |
39 | 45 |
40 std::set<ExtensionId> extension_ids = GetListenerExtensionIds(); | 46 std::set<ExtensionId> extension_ids = GetListenerExtensionIds(); |
41 for (const ExtensionId extension_id : extension_ids) { | 47 for (const ExtensionId extension_id : extension_ids) { |
42 event_router->DispatchEventToExtension( | 48 event_router->DispatchEventToExtension( |
43 extension_id, | 49 extension_id, |
44 make_scoped_ptr(new extensions::Event( | 50 make_scoped_ptr(new extensions::Event( |
45 api_launcher_search_provider::OnQueryStarted::kEventName, | 51 api_launcher_search_provider::OnQueryStarted::kEventName, |
46 api_launcher_search_provider::OnQueryStarted::Create( | 52 api_launcher_search_provider::OnQueryStarted::Create( |
47 std::to_string(query_id_), query, max_result)))); | 53 std::to_string(query_id_), query, max_result)))); |
48 } | 54 } |
49 } | 55 } |
50 | 56 |
| 57 void Service::OnQueryEnded() { |
| 58 DCHECK(is_query_running_); |
| 59 |
| 60 extensions::EventRouter* event_router = |
| 61 extensions::EventRouter::Get(profile_); |
| 62 |
| 63 std::set<ExtensionId> extension_ids = GetListenerExtensionIds(); |
| 64 for (const ExtensionId extension_id : extension_ids) { |
| 65 event_router->DispatchEventToExtension( |
| 66 extension_id, |
| 67 make_scoped_ptr(new extensions::Event( |
| 68 api_launcher_search_provider::OnQueryEnded::kEventName, |
| 69 api_launcher_search_provider::OnQueryEnded::Create( |
| 70 std::to_string(query_id_))))); |
| 71 } |
| 72 |
| 73 is_query_running_ = false; |
| 74 } |
| 75 |
| 76 bool Service::IsQueryRunning() const { |
| 77 return is_query_running_; |
| 78 } |
| 79 |
51 std::set<ExtensionId> Service::GetListenerExtensionIds() { | 80 std::set<ExtensionId> Service::GetListenerExtensionIds() { |
52 std::set<ExtensionId> extension_ids; | 81 std::set<ExtensionId> extension_ids; |
53 | 82 |
54 const ExtensionSet& extension_set = extension_registry_->enabled_extensions(); | 83 const ExtensionSet& extension_set = extension_registry_->enabled_extensions(); |
55 for (scoped_refptr<const extensions::Extension> extension : extension_set) { | 84 for (scoped_refptr<const extensions::Extension> extension : extension_set) { |
56 const extensions::PermissionsData* permission_data = | 85 const extensions::PermissionsData* permission_data = |
57 extension->permissions_data(); | 86 extension->permissions_data(); |
58 const bool has_permission = permission_data->HasAPIPermission( | 87 const bool has_permission = permission_data->HasAPIPermission( |
59 extensions::APIPermission::kLauncherSearchProvider); | 88 extensions::APIPermission::kLauncherSearchProvider); |
60 if (has_permission) | 89 if (has_permission) |
61 extension_ids.insert(extension->id()); | 90 extension_ids.insert(extension->id()); |
62 } | 91 } |
63 | 92 |
64 return extension_ids; | 93 return extension_ids; |
65 } | 94 } |
66 | 95 |
67 } // namespace launcher_search_provider | 96 } // namespace launcher_search_provider |
68 } // namespace chromeos | 97 } // namespace chromeos |
OLD | NEW |