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 |