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

Side by Side Diff: chrome/browser/chromeos/platform_keys/platform_keys_service.cc

Issue 875373002: First implementation of chrome.platformKeys. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cert_idl
Patch Set: Created 5 years, 11 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/platform_keys/platform_keys_service.h" 5 #include "chrome/browser/chromeos/platform_keys/platform_keys_service.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/browser/chromeos/platform_keys/platform_keys.h" 10 #include "chrome/browser/chromeos/platform_keys/platform_keys.h"
11 #include "content/public/browser/browser_thread.h" 11 #include "content/public/browser/browser_thread.h"
12 #include "extensions/browser/state_store.h" 12 #include "extensions/browser/state_store.h"
13 #include "net/cert/x509_certificate.h"
13 14
14 using content::BrowserThread; 15 using content::BrowserThread;
15 16
16 namespace chromeos { 17 namespace chromeos {
17 18
18 namespace { 19 namespace {
19 20
20 const char kErrorInternal[] = "Internal Error."; 21 const char kErrorInternal[] = "Internal Error.";
21 const char kErrorKeyNotAllowedForSigning[] = 22 const char kErrorKeyNotAllowedForSigning[] =
22 "This key is not allowed for signing. Either it was used for signing " 23 "This key is not allowed for signing. Either it was used for signing "
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 public_key_spki_der, 109 public_key_spki_der,
109 base::Bind(&CheckValidityAndSign, 110 base::Bind(&CheckValidityAndSign,
110 token_id, 111 token_id,
111 public_key_spki_der, 112 public_key_spki_der,
112 hash_algorithm, 113 hash_algorithm,
113 data, 114 data,
114 callback, 115 callback,
115 browser_context_)); 116 browser_context_));
116 } 117 }
117 118
119 void PlatformKeysService::SelectClientCertificates(
120 const platform_keys::ClientCertificateRequest& request,
121 const std::string& extension_id,
122 const SelectCertificatesCallback& callback) {
123 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
124
125 platform_keys::subtle::SelectClientCertificates(
126 request,
127 base::Bind(&PlatformKeysService::SelectClientCertificatesCallback,
128 weak_factory_.GetWeakPtr(), extension_id, callback),
129 browser_context_);
130 }
131
118 void PlatformKeysService::RegisterPublicKey( 132 void PlatformKeysService::RegisterPublicKey(
119 const std::string& extension_id, 133 const std::string& extension_id,
120 const std::string& public_key_spki_der, 134 const std::string& public_key_spki_der,
121 const base::Callback<void(bool)>& callback) { 135 const base::Callback<void(bool)>& callback) {
122 GetPlatformKeysOfExtension( 136 GetPlatformKeysOfExtension(
123 extension_id, 137 extension_id,
124 base::Bind(&PlatformKeysService::RegisterPublicKeyGotPlatformKeys, 138 base::Bind(&PlatformKeysService::RegisterPublicKeyGotPlatformKeys,
125 weak_factory_.GetWeakPtr(), 139 weak_factory_.GetWeakPtr(),
126 extension_id, 140 extension_id,
127 public_key_spki_der, 141 public_key_spki_der,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 const std::string& error_message) { 173 const std::string& error_message) {
160 if (!error_message.empty()) { 174 if (!error_message.empty()) {
161 callback.Run(std::string() /* no public key */, error_message); 175 callback.Run(std::string() /* no public key */, error_message);
162 return; 176 return;
163 } 177 }
164 base::Callback<void(bool)> wrapped_callback( 178 base::Callback<void(bool)> wrapped_callback(
165 base::Bind(&WrapGenerateKeyCallback, callback, public_key_spki_der)); 179 base::Bind(&WrapGenerateKeyCallback, callback, public_key_spki_der));
166 RegisterPublicKey(extension_id, public_key_spki_der, wrapped_callback); 180 RegisterPublicKey(extension_id, public_key_spki_der, wrapped_callback);
167 } 181 }
168 182
183 void PlatformKeysService::SelectClientCertificatesCallback(
184 const std::string& extension_id,
185 const SelectCertificatesCallback& callback,
186 scoped_ptr<net::CertificateList> matches,
187 const std::string& error_message) {
188 // TODO(pneubeck): Remove all certs that the extension doesn't have access to.
189 callback.Run(matches.Pass(), error_message);
190 }
191
169 void PlatformKeysService::RegisterPublicKeyGotPlatformKeys( 192 void PlatformKeysService::RegisterPublicKeyGotPlatformKeys(
170 const std::string& extension_id, 193 const std::string& extension_id,
171 const std::string& public_key_spki_der, 194 const std::string& public_key_spki_der,
172 const base::Callback<void(bool)>& callback, 195 const base::Callback<void(bool)>& callback,
173 scoped_ptr<base::ListValue> platform_keys) { 196 scoped_ptr<base::ListValue> platform_keys) {
174 if (!platform_keys) { 197 if (!platform_keys) {
175 LOG(ERROR) << "Error while reading the platform keys."; 198 LOG(ERROR) << "Error while reading the platform keys.";
176 callback.Run(false); 199 callback.Run(false);
177 return; 200 return;
178 } 201 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 base::ListValue* keys = NULL; 243 base::ListValue* keys = NULL;
221 if (!value->GetAsList(&keys)) { 244 if (!value->GetAsList(&keys)) {
222 LOG(ERROR) << "Found a value of wrong type."; 245 LOG(ERROR) << "Found a value of wrong type.";
223 value.reset(); 246 value.reset();
224 } 247 }
225 ignore_result(value.release()); 248 ignore_result(value.release());
226 callback.Run(make_scoped_ptr(keys)); 249 callback.Run(make_scoped_ptr(keys));
227 } 250 }
228 251
229 } // namespace chromeos 252 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698