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

Side by Side Diff: chrome/browser/extensions/api/certificate_provider/certificate_provider_api.cc

Issue 1232553003: Add new certificateProvider extension API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 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 #include "chrome/browser/extensions/api/certificate_provider/certificate_provide r_api.h"
2
3 #include "base/memory/linked_ptr.h"
4 #include "base/stl_util.h"
5 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice.h"
6 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice_factory.h"
7 #include "chrome/common/extensions/api/certificate_provider.h"
8 #include "net/cert/x509_certificate.h"
9
10 namespace extensions {
11
12 namespace api_cp = api::certificate_provider;
13
14 namespace {
15
16 const char kErrorInvalidX509Cert[] =
17 "Certificate is not a valid X.509 certificate.";
18
19 } // namespace
20
21 CertificateProviderPublishClientCertificatesFunction::
22 ~CertificateProviderPublishClientCertificatesFunction() {}
23
24 ExtensionFunction::ResponseAction
25 CertificateProviderPublishClientCertificatesFunction::Run() {
26 scoped_ptr<api_cp::PublishClientCertificates::Params> params(
27 api_cp::PublishClientCertificates::Params::Create(*args_));
28 EXTENSION_FUNCTION_VALIDATE(params);
29
30 chromeos::CertificateProviderService* service =
31 chromeos::CertificateProviderServiceFactory::GetForBrowserContext(
32 browser_context());
33 DCHECK(service);
34
35 chromeos::CertificateProviderService::CertificateInfos cert_infos;
36 for (linked_ptr<api_cp::CertificateInfo> input_cert_info :
37 params->certificates) {
38 chromeos::CertificateProviderService::CertificateInfo new_cert_info;
39
40 const std::vector<char>& cert_der = input_cert_info->certificate;
41 if (cert_der.empty())
42 return RespondNow(Error(kErrorInvalidX509Cert));
43
44 new_cert_info.certificate = net::X509Certificate::CreateFromBytes(
45 vector_as_array(&cert_der), cert_der.size());
46 if (!new_cert_info.certificate)
47 return RespondNow(Error(kErrorInvalidX509Cert));
48
49 for (auto hash : input_cert_info->supported_hashes) {
50 switch(hash) {
51 case api_cp::HASH_MD5_SHA1:
52 new_cert_info.supported_hashes.push_back(
53 net::SSLPrivateKey::Hash::MD5_SHA1);
54 break;
55 case api_cp::HASH_SHA1:
56 new_cert_info.supported_hashes.push_back(
57 net::SSLPrivateKey::Hash::SHA1);
58 break;
59 case api_cp::HASH_SHA256:
60 new_cert_info.supported_hashes.push_back(
61 net::SSLPrivateKey::Hash::SHA256);
62 break;
63 case api_cp::HASH_SHA384:
64 new_cert_info.supported_hashes.push_back(
65 net::SSLPrivateKey::Hash::SHA384);
66 break;
67 case api_cp::HASH_SHA512:
68 new_cert_info.supported_hashes.push_back(
69 net::SSLPrivateKey::Hash::SHA512);
70 break;
71 case api_cp::HASH_NONE:
72 return RespondNow(Error("Unknown hash function"));
73 }
74 }
75
76 cert_infos.push_back(new_cert_info);
77 }
78
79 service->SetCertificatesProvidedByExtension(extension_id(), cert_infos);
80
81 return RespondNow(NoArguments());
82 // return RespondNow(Error("Not implemented"));
83 }
84
85 CertificateProviderReplyToSignRequestFunction::
86 ~CertificateProviderReplyToSignRequestFunction() {}
87
88 ExtensionFunction::ResponseAction
89 CertificateProviderReplyToSignRequestFunction::Run() {
90 return RespondNow(Error("Not implemented"));
91 }
92
93 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698