Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "content/renderer/media/rtc_certificate_generator.h" | |
| 6 | |
| 7 #include "content/renderer/media/peer_connection_identity_store.h" | |
| 8 #include "content/renderer/media/rtc_certificate.h" | |
| 9 #include "third_party/webrtc/base/rtccertificate.h" | |
| 10 #include "url/gurl.h" | |
| 11 | |
| 12 namespace content { | |
| 13 namespace { | |
| 14 | |
| 15 class RTCCertificateIdentityObserver | |
| 16 : public webrtc::DtlsIdentityRequestObserver { | |
| 17 public: | |
| 18 RTCCertificateIdentityObserver( | |
| 19 blink::WebRTCKeyType key_type, | |
| 20 webrtc::DtlsIdentityStoreInterface* store, | |
| 21 blink::WebCallbacks<blink::WebRTCCertificate*, void>* observer) | |
| 22 : key_type_(key_type), store_(store), observer_(observer) { | |
| 23 } | |
| 24 | |
| 25 ~RTCCertificateIdentityObserver() override { | |
| 26 } | |
| 27 | |
| 28 void Init(rtc::scoped_refptr<RTCCertificateIdentityObserver> self) { | |
| 29 this_ = self; | |
| 30 } | |
| 31 | |
| 32 private: | |
| 33 void OnFailure(int error) override { | |
| 34 DCHECK(this_) << "Not initialized."; | |
| 35 observer_->onError(); | |
| 36 // Stop protecting against destruction. This could result in "delete this". | |
| 37 this_ = nullptr; | |
| 38 } | |
| 39 | |
| 40 void OnSuccess(const std::string& der_cert, | |
| 41 const std::string& der_private_key) override { | |
| 42 DCHECK(this_) << "Not initialized."; | |
| 43 std::string pem_cert = rtc::SSLIdentity::DerToPem( | |
| 44 rtc::kPemTypeCertificate, | |
| 45 reinterpret_cast<const unsigned char*>(der_cert.data()), | |
| 46 der_cert.length()); | |
| 47 std::string pem_key = rtc::SSLIdentity::DerToPem( | |
| 48 rtc::kPemTypeRsaPrivateKey, | |
| 49 reinterpret_cast<const unsigned char*>(der_private_key.data()), | |
| 50 der_private_key.length()); | |
| 51 rtc::scoped_ptr<rtc::SSLIdentity> identity( | |
| 52 rtc::SSLIdentity::FromPEMStrings(pem_key, pem_cert)); | |
| 53 OnSuccess(identity.Pass()); | |
| 54 } | |
| 55 | |
| 56 void OnSuccess(rtc::scoped_ptr<rtc::SSLIdentity> identity) override { | |
| 57 DCHECK(this_) << "Not initialized."; | |
| 58 rtc::scoped_refptr<rtc::RTCCertificate> certificate = | |
| 59 rtc::RTCCertificate::Create(identity.Pass()); | |
| 60 observer_->onSuccess(new RTCCertificate(key_type_, certificate)); | |
| 61 // Stop protecting against destruction. This could result in "delete this". | |
| 62 this_ = nullptr; | |
| 63 } | |
| 64 | |
| 65 rtc::scoped_refptr<RTCCertificateIdentityObserver> this_; | |
| 66 blink::WebRTCKeyType key_type_; | |
| 67 rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> store_; | |
| 68 blink::WebCallbacks<blink::WebRTCCertificate*, void>* observer_; | |
| 69 }; | |
|
jochen (gone - plz use gerrit)
2015/09/29 07:47:09
disallow copy/assign
hbos_chromium
2015/10/02 15:43:17
Done.
| |
| 70 | |
| 71 } // anonymous namespace | |
|
jochen (gone - plz use gerrit)
2015/09/29 07:47:09
just // namespace
hbos_chromium
2015/10/02 15:43:17
Done.
| |
| 72 | |
| 73 void RTCCertificateGenerator::generateCertificate( | |
| 74 const blink::WebRTCKeyType& keyType, | |
| 75 const blink::WebURL& url, | |
| 76 const blink::WebURL& firstPartyForCookies, | |
| 77 blink::WebCallbacks<blink::WebRTCCertificate*, void>* observer) { | |
| 78 // TODO(hbos): Update conversion when rtc::KeyType has been updated. | |
| 79 rtc::KeyType rtc_key_type = rtc::IntKeyTypeFamilyToKeyType( | |
| 80 static_cast<int>(keyType.family())); | |
| 81 | |
| 82 content::PeerConnectionIdentityStore* store = | |
|
jochen (gone - plz use gerrit)
2015/09/29 07:47:09
inside content, you shouldn't need content::
hbos_chromium
2015/10/02 15:43:17
Done.
| |
| 83 new content::PeerConnectionIdentityStore(url, firstPartyForCookies); | |
| 84 | |
| 85 rtc::scoped_refptr<RTCCertificateIdentityObserver> identity_observer( | |
| 86 new rtc::RefCountedObject<RTCCertificateIdentityObserver>( | |
| 87 keyType, store, observer)); | |
| 88 identity_observer->Init(identity_observer); | |
| 89 store->RequestIdentity(rtc_key_type, identity_observer); | |
| 90 } | |
| 91 | |
| 92 } // namespace content | |
| OLD | NEW |