| Index: chrome/browser/extensions/api/platform_keys/platform_keys_api.cc
|
| diff --git a/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc b/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc
|
| index 819558be74442ad7aa045e955f7b30377b8cba2c..9a4e2d29a5b39b1a1640573e98e742d965f4d367 100644
|
| --- a/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc
|
| +++ b/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc
|
| @@ -17,6 +17,7 @@
|
|
|
| namespace extensions {
|
|
|
| +namespace api_pk = api::platform_keys;
|
| namespace api_pki = api::platform_keys_internal;
|
|
|
| namespace platform_keys {
|
| @@ -53,6 +54,59 @@ std::string PlatformKeysTokenIdToApiId(
|
|
|
| } // namespace platform_keys
|
|
|
| +PlatformKeysInternalSelectClientCertificatesFunction::
|
| + ~PlatformKeysInternalSelectClientCertificatesFunction() {
|
| +}
|
| +
|
| +ExtensionFunction::ResponseAction
|
| +PlatformKeysInternalSelectClientCertificatesFunction::Run() {
|
| + scoped_ptr<api_pki::SelectClientCertificates::Params> params(
|
| + api_pki::SelectClientCertificates::Params::Create(*args_));
|
| + EXTENSION_FUNCTION_VALIDATE(params);
|
| +
|
| + chromeos::PlatformKeysService* service =
|
| + chromeos::PlatformKeysServiceFactory::GetForBrowserContext(
|
| + browser_context());
|
| + DCHECK(service);
|
| +
|
| + chromeos::platform_keys::ClientCertificateRequest request;
|
| + for (const std::vector<char>& cert_authority :
|
| + params->details.request.certificate_authorities) {
|
| + request.certificate_authorities.push_back(
|
| + std::string(cert_authority.begin(), cert_authority.end()));
|
| + }
|
| +
|
| + service->SelectClientCertificates(
|
| + request, extension_id(),
|
| + base::Bind(&PlatformKeysInternalSelectClientCertificatesFunction::
|
| + OnSelectedCertificates,
|
| + this));
|
| + return RespondLater();
|
| +}
|
| +
|
| +void PlatformKeysInternalSelectClientCertificatesFunction::
|
| + OnSelectedCertificates(scoped_ptr<net::CertificateList> matches,
|
| + const std::string& error_message) {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| + if (!error_message.empty()) {
|
| + Respond(Error(error_message));
|
| + return;
|
| + }
|
| + DCHECK(matches);
|
| + std::vector<linked_ptr<api_pk::Match>> result_matches;
|
| + for (const scoped_refptr<net::X509Certificate>& match : *matches) {
|
| + linked_ptr<api_pk::Match> result_match(new api_pk::Match);
|
| + std::string der_encoded_cert;
|
| + net::X509Certificate::GetDEREncoded(match->os_cert_handle(),
|
| + &der_encoded_cert);
|
| + result_match->certificate.assign(der_encoded_cert.begin(),
|
| + der_encoded_cert.end());
|
| + result_matches.push_back(result_match);
|
| + }
|
| + Respond(ArgumentList(
|
| + api_pki::SelectClientCertificates::Results::Create(result_matches)));
|
| +}
|
| +
|
| PlatformKeysInternalSignFunction::~PlatformKeysInternalSignFunction() {
|
| }
|
|
|
|
|