OLD | NEW |
(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 |
OLD | NEW |