1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file. 4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/renderer/media/peer_connection_identity_service.h" 6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/renderer/media/webrtc_identity_service.h" 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/renderer/render_thread_impl.h" 9ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace content { 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)PeerConnectionIdentityService::PeerConnectionIdentityService(const GURL& origin) 138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) : origin_(origin), pending_observer_(NULL), pending_request_id_(0) {} 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochPeerConnectionIdentityService::~PeerConnectionIdentityService() { 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (pending_observer_) 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderThreadImpl::current()->get_webrtc_identity_service() 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ->CancelRequest(pending_request_id_); 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochbool PeerConnectionIdentityService::RequestIdentity( 22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& identity_name, 23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& common_name, 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch webrtc::DTLSIdentityRequestObserver* observer) { 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DCHECK(observer); 26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (pending_observer_) 27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return false; 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pending_observer_ = observer; 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pending_request_id_ = RenderThreadImpl::current() 31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ->get_webrtc_identity_service()->RequestIdentity( 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch origin_, 33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch identity_name, 34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch common_name, 35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::Bind(&PeerConnectionIdentityService::OnIdentityReady, 36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::Unretained(this)), 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::Bind(&PeerConnectionIdentityService::OnRequestFailed, 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::Unretained(this))); 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return true; 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid PeerConnectionIdentityService::OnIdentityReady( 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& certificate, 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& private_key) { 45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pending_observer_->OnSuccess(certificate, private_key); 46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ResetPendingRequest(); 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid PeerConnectionIdentityService::OnRequestFailed(int error) { 50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pending_observer_->OnFailure(error); 51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ResetPendingRequest(); 52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid PeerConnectionIdentityService::ResetPendingRequest() { 55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pending_observer_ = NULL; 56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pending_request_id_ = 0; 57ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 58ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace content 60