Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Side by Side Diff: chrome/browser/chromeos/certificate_provider/certificate_provider_service_factory.cc

Issue 1232553003: Add new certificateProvider extension API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice_factory.h"
6
7 #include "base/debug/stack_trace.h"
bartfab (slow) 2015/09/03 17:30:51 Nit: Not used.
pneubeck (no reviews) 2015/09/07 17:21:31 Done.
8 #include "base/logging.h"
9 #include "base/memory/singleton.h"
10 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice.h"
11 #include "chrome/browser/chromeos/profiles/profile_helper.h"
12 #include "chrome/browser/profiles/incognito_helpers.h"
13 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/common/extensions/api/certificate_provider.h"
15 #include "components/keyed_service/content/browser_context_dependency_manager.h"
16 #include "extensions/browser/event_router.h"
17 #include "extensions/browser/event_router_factory.h"
18 #include "extensions/browser/extension_registry.h"
19 #include "extensions/browser/extension_registry_factory.h"
20
21 namespace chromeos {
22
23 namespace {
24
25 namespace api_cp = extensions::api::certificate_provider;
26
27 class DefaultDelegate : public CertificateProviderService::Delegate,
28 public extensions::ExtensionRegistryObserver {
bartfab (slow) 2015/09/03 17:30:52 Nit: #include "extensions/browser/extension_regist
pneubeck (no reviews) 2015/09/07 17:21:31 Done.
29 public:
30 DefaultDelegate(CertificateProviderService* service,
31 extensions::ExtensionRegistry* registry,
32 extensions::EventRouter* event_router);
33 ~DefaultDelegate() override;
34
35 std::vector<std::string> CertificateProviderExtensions() override;
bartfab (slow) 2015/09/03 17:30:51 Nit 1: // CertificateProviderService::Delegate: Ni
pneubeck (no reviews) 2015/09/07 17:21:31 Done.
36 void BroadcastCertificateRequest(int request_id) override;
37 bool DispatchSignRequestToExtension(const std::string& extension_id,
38 int request_id,
39 net::SSLPrivateKey::Hash hash,
40 const std::string& digest) override;
41
42 // extensions::ExtensionRegistryObserver:
43 void OnExtensionUnloaded(
44 content::BrowserContext* browser_context,
45 const extensions::Extension* extension,
46 extensions::UnloadedExtensionInfo::Reason reason) override;
47
48 private:
49 CertificateProviderService* const service_;
50 extensions::ExtensionRegistry* const registry_;
51 extensions::EventRouter* const event_router_;
52
53 DISALLOW_COPY_AND_ASSIGN(DefaultDelegate);
54 };
55
56 DefaultDelegate::DefaultDelegate(CertificateProviderService* service,
57 extensions::ExtensionRegistry* registry,
58 extensions::EventRouter* event_router)
59 : service_(service), registry_(registry), event_router_(event_router) {
60 DCHECK(service_);
61 DCHECK(event_router_);
62 registry_->AddObserver(this);
63 }
64
65 DefaultDelegate::~DefaultDelegate() {
66 registry_->RemoveObserver(this);
67 }
68
69 std::vector<std::string> DefaultDelegate::CertificateProviderExtensions() {
70 const std::string event_name(api_cp::OnCertificatesRequested::kEventName);
71 std::vector<std::string> ids;
72 for (const auto& listener :
73 event_router_->listeners().GetEventListenersByName(event_name)) {
bartfab (slow) 2015/09/03 17:30:51 Nit: #include "extensions/browser/event_listener_m
pneubeck (no reviews) 2015/09/07 17:21:31 Done.
74 ids.push_back(listener->extension_id());
75 }
76 return ids;
77 }
78
79 void DefaultDelegate::BroadcastCertificateRequest(int request_id) {
80 const std::string event_name(api_cp::OnCertificatesRequested::kEventName);
81 scoped_ptr<base::ListValue> internal_args(new base::ListValue);
bartfab (slow) 2015/09/03 17:30:52 Nit: #include "base/values.h"
pneubeck (no reviews) 2015/09/07 17:21:31 Done.
82 internal_args->AppendInteger(request_id);
83 scoped_ptr<extensions::Event> event(new extensions::Event(
bartfab (slow) 2015/09/03 17:30:51 Nit: #include "base/memory/scoped_ptr.h"
pneubeck (no reviews) 2015/09/07 17:21:31 Done.
84 extensions::events::CERTIFICATEPROVIDER_ON_CERTIFICATES_REQUESTED,
bartfab (slow) 2015/09/03 17:30:52 Nit: #include "extensions/browser/extension_event_
pneubeck (no reviews) 2015/09/07 17:21:31 Done.
85 event_name, internal_args.Pass()));
86 event_router_->BroadcastEvent(event.Pass());
87 }
88
89 bool DefaultDelegate::DispatchSignRequestToExtension(
90 const std::string& extension_id,
91 int request_id,
92 net::SSLPrivateKey::Hash hash,
93 const std::string& digest) {
94 const std::string event_name(api_cp::OnSignDigestRequested::kEventName);
95 if (!event_router_->ExtensionHasEventListener(extension_id, event_name))
96 return false;
97
98 api_cp::SignRequest request;
99 switch (hash) {
bartfab (slow) 2015/09/03 17:30:51 Nit: #include "net/ssl/ssl_private_key.h"
pneubeck (no reviews) 2015/09/07 17:21:31 Done.
100 case net::SSLPrivateKey::Hash::MD5_SHA1:
101 request.hash = api_cp::HASH_MD5_SHA1;
102 break;
103 case net::SSLPrivateKey::Hash::SHA1:
104 request.hash = api_cp::HASH_SHA1;
105 break;
106 case net::SSLPrivateKey::Hash::SHA256:
107 request.hash = api_cp::HASH_SHA256;
108 break;
109 case net::SSLPrivateKey::Hash::SHA384:
110 request.hash = api_cp::HASH_SHA384;
111 break;
112 case net::SSLPrivateKey::Hash::SHA512:
113 request.hash = api_cp::HASH_SHA512;
114 break;
115 }
116 request.digest.assign(digest.begin(), digest.end());
117
118 scoped_ptr<base::ListValue> internal_args(new base::ListValue);
119 internal_args->AppendInteger(request_id);
120 internal_args->Append(request.ToValue().Pass());
121
122 event_router_->DispatchEventToExtension(
123 extension_id,
124 make_scoped_ptr(new extensions::Event(
125 extensions::events::CERTIFICATEPROVIDER_ON_SIGN_DIGEST_REQUESTED,
126 event_name, internal_args.Pass())));
127 return true;
128 }
129
130 void DefaultDelegate::OnExtensionUnloaded(
131 content::BrowserContext* browser_context,
132 const extensions::Extension* extension,
133 extensions::UnloadedExtensionInfo::Reason reason) {
134 service_->OnExtensionUnloaded(extension->id());
bartfab (slow) 2015/09/03 17:30:51 Nit: #include "extensions/common/extension.h"
pneubeck (no reviews) 2015/09/07 17:21:31 Done.
135 }
136
137 } // namespace
138
139 // static
140 CertificateProviderService*
141 CertificateProviderServiceFactory::GetForBrowserContext(
142 content::BrowserContext* context) {
143 return static_cast<CertificateProviderService*>(
144 GetInstance()->GetServiceForBrowserContext(context, true));
145 }
146
147 // static
148 CertificateProviderServiceFactory*
149 CertificateProviderServiceFactory::GetInstance() {
150 return Singleton<CertificateProviderServiceFactory>::get();
151 }
152
153 CertificateProviderServiceFactory::CertificateProviderServiceFactory()
154 : BrowserContextKeyedServiceFactory(
155 "CertificateProviderService",
156 BrowserContextDependencyManager::GetInstance()) {
157 DependsOn(extensions::EventRouterFactory::GetInstance());
158 DependsOn(extensions::ExtensionRegistryFactory::GetInstance());
159 }
160
161 CertificateProviderServiceFactory::~CertificateProviderServiceFactory() {}
162
163 content::BrowserContext*
164 CertificateProviderServiceFactory::GetBrowserContextToUse(
165 content::BrowserContext* context) const {
166 return chrome::GetBrowserContextRedirectedInIncognito(context);
167 }
168
169 bool CertificateProviderServiceFactory::ServiceIsNULLWhileTesting() const {
170 return true;
171 }
172
173 KeyedService* CertificateProviderServiceFactory::BuildServiceInstanceFor(
174 content::BrowserContext* context) const {
175 if (chromeos::ProfileHelper::IsSigninProfile(
176 Profile::FromBrowserContext(context))) {
177 return nullptr;
178 }
179 CertificateProviderService* const service = new CertificateProviderService();
180 service->SetDelegate(make_scoped_ptr(new DefaultDelegate(
181 service,
182 extensions::ExtensionRegistryFactory::GetForBrowserContext(context),
183 extensions::EventRouterFactory::GetForBrowserContext(context))));
184 return service;
185 }
186
187 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698