| OLD | NEW |
| 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 kErrorKeyNotAllowedForSigning[] = | 21 const char kErrorKeyNotAllowedForSigning[] = |
| 21 "This key is not allowed for signing. Either it was used for signing " | 22 "This key is not allowed for signing. Either it was used for signing " |
| 22 "before or it was not correctly generated."; | 23 "before or it was not correctly generated."; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 public_key_spki_der, | 104 public_key_spki_der, |
| 104 base::Bind(&CheckValidityAndSign, | 105 base::Bind(&CheckValidityAndSign, |
| 105 token_id, | 106 token_id, |
| 106 public_key_spki_der, | 107 public_key_spki_der, |
| 107 hash_algorithm, | 108 hash_algorithm, |
| 108 data, | 109 data, |
| 109 callback, | 110 callback, |
| 110 browser_context_)); | 111 browser_context_)); |
| 111 } | 112 } |
| 112 | 113 |
| 114 void PlatformKeysService::SelectClientCertificates( |
| 115 const platform_keys::ClientCertificateRequest& request, |
| 116 const std::string& extension_id, |
| 117 const SelectCertificatesCallback& callback) { |
| 118 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 119 |
| 120 platform_keys::subtle::SelectClientCertificates( |
| 121 request, |
| 122 base::Bind(&PlatformKeysService::SelectClientCertificatesCallback, |
| 123 weak_factory_.GetWeakPtr(), extension_id, callback), |
| 124 browser_context_); |
| 125 } |
| 126 |
| 113 void PlatformKeysService::RegisterPublicKey( | 127 void PlatformKeysService::RegisterPublicKey( |
| 114 const std::string& extension_id, | 128 const std::string& extension_id, |
| 115 const std::string& public_key_spki_der, | 129 const std::string& public_key_spki_der, |
| 116 const base::Closure& callback) { | 130 const base::Closure& callback) { |
| 117 GetPlatformKeysOfExtension( | 131 GetPlatformKeysOfExtension( |
| 118 extension_id, | 132 extension_id, |
| 119 base::Bind(&PlatformKeysService::RegisterPublicKeyGotPlatformKeys, | 133 base::Bind(&PlatformKeysService::RegisterPublicKeyGotPlatformKeys, |
| 120 weak_factory_.GetWeakPtr(), | 134 weak_factory_.GetWeakPtr(), |
| 121 extension_id, | 135 extension_id, |
| 122 public_key_spki_der, | 136 public_key_spki_der, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 const std::string& error_message) { | 172 const std::string& error_message) { |
| 159 if (!error_message.empty()) { | 173 if (!error_message.empty()) { |
| 160 callback.Run(std::string() /* no public key */, error_message); | 174 callback.Run(std::string() /* no public key */, error_message); |
| 161 return; | 175 return; |
| 162 } | 176 } |
| 163 base::Closure wrapped_callback( | 177 base::Closure wrapped_callback( |
| 164 base::Bind(&WrapGenerateKeyCallback, callback, public_key_spki_der)); | 178 base::Bind(&WrapGenerateKeyCallback, callback, public_key_spki_der)); |
| 165 RegisterPublicKey(extension_id, public_key_spki_der, wrapped_callback); | 179 RegisterPublicKey(extension_id, public_key_spki_der, wrapped_callback); |
| 166 } | 180 } |
| 167 | 181 |
| 182 void PlatformKeysService::SelectClientCertificatesCallback( |
| 183 const std::string& extension_id, |
| 184 const SelectCertificatesCallback& callback, |
| 185 scoped_ptr<net::CertificateList> matches, |
| 186 const std::string& error_message) { |
| 187 // TODO(pneubeck): Remove all certs that the extension doesn't have access to. |
| 188 callback.Run(matches.Pass(), error_message); |
| 189 } |
| 190 |
| 168 void PlatformKeysService::RegisterPublicKeyGotPlatformKeys( | 191 void PlatformKeysService::RegisterPublicKeyGotPlatformKeys( |
| 169 const std::string& extension_id, | 192 const std::string& extension_id, |
| 170 const std::string& public_key_spki_der, | 193 const std::string& public_key_spki_der, |
| 171 const base::Closure& callback, | 194 const base::Closure& callback, |
| 172 scoped_ptr<base::ListValue> platform_keys) { | 195 scoped_ptr<base::ListValue> platform_keys) { |
| 173 scoped_ptr<base::StringValue> key_value( | 196 scoped_ptr<base::StringValue> key_value( |
| 174 GetPublicKeyValue(public_key_spki_der)); | 197 GetPublicKeyValue(public_key_spki_der)); |
| 175 | 198 |
| 176 DCHECK(platform_keys->end() == platform_keys->Find(*key_value)) | 199 DCHECK(platform_keys->end() == platform_keys->Find(*key_value)) |
| 177 << "Keys are assumed to be generated and not to be registered multiple " | 200 << "Keys are assumed to be generated and not to be registered multiple " |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 | 236 |
| 214 keys = new base::ListValue; | 237 keys = new base::ListValue; |
| 215 value.reset(keys); | 238 value.reset(keys); |
| 216 } | 239 } |
| 217 | 240 |
| 218 ignore_result(value.release()); | 241 ignore_result(value.release()); |
| 219 callback.Run(make_scoped_ptr(keys)); | 242 callback.Run(make_scoped_ptr(keys)); |
| 220 } | 243 } |
| 221 | 244 |
| 222 } // namespace chromeos | 245 } // namespace chromeos |
| OLD | NEW |