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

Side by Side Diff: content/renderer/media/rtc_certificate_generator.cc

Issue 1311853005: RTCCertificate and RTCPeerConnection.generateCertificate added to JavaScript (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Chromium implementation of Blink interfaces. Addressed comments. Created 5 years, 2 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 // 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 };
70
71 } // anonymous namespace
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 =
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
OLDNEW
« no previous file with comments | « content/renderer/media/rtc_certificate_generator.h ('k') | content/renderer/media/rtc_peer_connection_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698