| // Copyright 2013 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/peer_connection_identity_service.h" |
| |
| #include "content/renderer/media/webrtc_identity_service.h" |
| #include "content/renderer/render_thread_impl.h" |
| |
| namespace content { |
| |
| PeerConnectionIdentityService::PeerConnectionIdentityService(const GURL& origin) |
| : origin_(origin), pending_observer_(NULL), pending_request_id_(0) {} |
| |
| PeerConnectionIdentityService::~PeerConnectionIdentityService() { |
| if (pending_observer_) |
| RenderThreadImpl::current()->get_webrtc_identity_service() |
| ->CancelRequest(pending_request_id_); |
| } |
| |
| bool PeerConnectionIdentityService::RequestIdentity( |
| const std::string& identity_name, |
| const std::string& common_name, |
| webrtc::DTLSIdentityRequestObserver* observer) { |
| DCHECK(observer); |
| if (pending_observer_) |
| return false; |
| |
| pending_observer_ = observer; |
| pending_request_id_ = RenderThreadImpl::current() |
| ->get_webrtc_identity_service()->RequestIdentity( |
| origin_, |
| identity_name, |
| common_name, |
| base::Bind(&PeerConnectionIdentityService::OnIdentityReady, |
| base::Unretained(this)), |
| base::Bind(&PeerConnectionIdentityService::OnRequestFailed, |
| base::Unretained(this))); |
| return true; |
| } |
| |
| void PeerConnectionIdentityService::OnIdentityReady( |
| const std::string& certificate, |
| const std::string& private_key) { |
| pending_observer_->OnSuccess(certificate, private_key); |
| ResetPendingRequest(); |
| } |
| |
| void PeerConnectionIdentityService::OnRequestFailed(int error) { |
| pending_observer_->OnFailure(error); |
| ResetPendingRequest(); |
| } |
| |
| void PeerConnectionIdentityService::ResetPendingRequest() { |
| pending_observer_ = NULL; |
| pending_request_id_ = 0; |
| } |
| |
| } // namespace content |