Home | History | Annotate | Download | only in media
      1 // Copyright 2013 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/peer_connection_identity_service.h"
      6 
      7 #include "content/renderer/media/webrtc_identity_service.h"
      8 #include "content/renderer/render_thread_impl.h"
      9 
     10 namespace content {
     11 
     12 PeerConnectionIdentityService::PeerConnectionIdentityService(const GURL& origin)
     13     : origin_(origin), pending_observer_(NULL), pending_request_id_(0) {}
     14 
     15 PeerConnectionIdentityService::~PeerConnectionIdentityService() {
     16   if (pending_observer_)
     17     RenderThreadImpl::current()->get_webrtc_identity_service()
     18         ->CancelRequest(pending_request_id_);
     19 }
     20 
     21 bool PeerConnectionIdentityService::RequestIdentity(
     22     const std::string& identity_name,
     23     const std::string& common_name,
     24     webrtc::DTLSIdentityRequestObserver* observer) {
     25   DCHECK(observer);
     26   if (pending_observer_)
     27     return false;
     28 
     29   pending_observer_ = observer;
     30   pending_request_id_ = RenderThreadImpl::current()
     31       ->get_webrtc_identity_service()->RequestIdentity(
     32           origin_,
     33           identity_name,
     34           common_name,
     35           base::Bind(&PeerConnectionIdentityService::OnIdentityReady,
     36                      base::Unretained(this)),
     37           base::Bind(&PeerConnectionIdentityService::OnRequestFailed,
     38                      base::Unretained(this)));
     39   return true;
     40 }
     41 
     42 void PeerConnectionIdentityService::OnIdentityReady(
     43     const std::string& certificate,
     44     const std::string& private_key) {
     45   pending_observer_->OnSuccess(certificate, private_key);
     46   ResetPendingRequest();
     47 }
     48 
     49 void PeerConnectionIdentityService::OnRequestFailed(int error) {
     50   pending_observer_->OnFailure(error);
     51   ResetPendingRequest();
     52 }
     53 
     54 void PeerConnectionIdentityService::ResetPendingRequest() {
     55   pending_observer_ = NULL;
     56   pending_request_id_ = 0;
     57 }
     58 
     59 }  // namespace content
     60