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

Unified 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, 3 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/rtc_certificate_generator.cc
diff --git a/content/renderer/media/rtc_certificate_generator.cc b/content/renderer/media/rtc_certificate_generator.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9138b833a731ebbbc3bc3e2b7c91ce50a0cbb930
--- /dev/null
+++ b/content/renderer/media/rtc_certificate_generator.cc
@@ -0,0 +1,92 @@
+// Copyright (c) 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/renderer/media/rtc_certificate_generator.h"
+
+#include "content/renderer/media/peer_connection_identity_store.h"
+#include "content/renderer/media/rtc_certificate.h"
+#include "third_party/webrtc/base/rtccertificate.h"
+#include "url/gurl.h"
+
+namespace content {
+namespace {
+
+class RTCCertificateIdentityObserver
+ : public webrtc::DtlsIdentityRequestObserver {
+ public:
+ RTCCertificateIdentityObserver(
+ blink::WebRTCKeyType key_type,
+ webrtc::DtlsIdentityStoreInterface* store,
+ blink::WebCallbacks<blink::WebRTCCertificate*, void>* observer)
+ : key_type_(key_type), store_(store), observer_(observer) {
+ }
+
+ ~RTCCertificateIdentityObserver() override {
+ }
+
+ void Init(rtc::scoped_refptr<RTCCertificateIdentityObserver> self) {
+ this_ = self;
+ }
+
+ private:
+ void OnFailure(int error) override {
+ DCHECK(this_) << "Not initialized.";
+ observer_->onError();
+ // Stop protecting against destruction. This could result in "delete this".
+ this_ = nullptr;
+ }
+
+ void OnSuccess(const std::string& der_cert,
+ const std::string& der_private_key) override {
+ DCHECK(this_) << "Not initialized.";
+ std::string pem_cert = rtc::SSLIdentity::DerToPem(
+ rtc::kPemTypeCertificate,
+ reinterpret_cast<const unsigned char*>(der_cert.data()),
+ der_cert.length());
+ std::string pem_key = rtc::SSLIdentity::DerToPem(
+ rtc::kPemTypeRsaPrivateKey,
+ reinterpret_cast<const unsigned char*>(der_private_key.data()),
+ der_private_key.length());
+ rtc::scoped_ptr<rtc::SSLIdentity> identity(
+ rtc::SSLIdentity::FromPEMStrings(pem_key, pem_cert));
+ OnSuccess(identity.Pass());
+ }
+
+ void OnSuccess(rtc::scoped_ptr<rtc::SSLIdentity> identity) override {
+ DCHECK(this_) << "Not initialized.";
+ rtc::scoped_refptr<rtc::RTCCertificate> certificate =
+ rtc::RTCCertificate::Create(identity.Pass());
+ observer_->onSuccess(new RTCCertificate(key_type_, certificate));
+ // Stop protecting against destruction. This could result in "delete this".
+ this_ = nullptr;
+ }
+
+ rtc::scoped_refptr<RTCCertificateIdentityObserver> this_;
+ blink::WebRTCKeyType key_type_;
+ rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> store_;
+ blink::WebCallbacks<blink::WebRTCCertificate*, void>* observer_;
+};
+
+} // anonymous namespace
+
+void RTCCertificateGenerator::generateCertificate(
+ const blink::WebRTCKeyType& keyType,
+ const blink::WebURL& url,
+ const blink::WebURL& firstPartyForCookies,
+ blink::WebCallbacks<blink::WebRTCCertificate*, void>* observer) {
+ // TODO(hbos): Update conversion when rtc::KeyType has been updated.
+ rtc::KeyType rtc_key_type = rtc::IntKeyTypeFamilyToKeyType(
+ static_cast<int>(keyType.family()));
+
+ content::PeerConnectionIdentityStore* store =
+ new content::PeerConnectionIdentityStore(url, firstPartyForCookies);
+
+ rtc::scoped_refptr<RTCCertificateIdentityObserver> identity_observer(
+ new rtc::RefCountedObject<RTCCertificateIdentityObserver>(
+ keyType, store, observer));
+ identity_observer->Init(identity_observer);
+ store->RequestIdentity(rtc_key_type, identity_observer);
+}
+
+} // namespace content
« 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