webrtc_identity_service_host.cc revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/browser/renderer_host/media/webrtc_identity_service_host.h" 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/bind.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/callback_helpers.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/browser/media/webrtc_identity_store.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/common/media/webrtc_identity_messages.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/base/net_errors.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content { 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochWebRTCIdentityServiceHost::WebRTCIdentityServiceHost( 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebRTCIdentityStore* identity_store) 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : identity_store_(identity_store) {} 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochWebRTCIdentityServiceHost::~WebRTCIdentityServiceHost() { 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (!cancel_callback_.is_null()) 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch cancel_callback_.Run(); 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool WebRTCIdentityServiceHost::OnMessageReceived(const IPC::Message& message, 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool* message_was_ok) { 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool handled = true; 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IPC_BEGIN_MESSAGE_MAP_EX(WebRTCIdentityServiceHost, message, *message_was_ok) 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IPC_MESSAGE_HANDLER(WebRTCIdentityMsg_RequestIdentity, OnRequestIdentity) 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IPC_MESSAGE_HANDLER(WebRTCIdentityMsg_CancelRequest, OnCancelRequest) 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IPC_MESSAGE_UNHANDLED(handled = false) 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IPC_END_MESSAGE_MAP_EX() 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return handled; 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid WebRTCIdentityServiceHost::OnRequestIdentity( 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const GURL& origin, 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& identity_name, 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& common_name) { 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!cancel_callback_.is_null()) { 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DLOG(WARNING) 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch << "Request rejected because the previous request has not finished."; 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SendErrorMessage(net::ERR_INSUFFICIENT_RESOURCES); 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cancel_callback_ = identity_store_->RequestIdentity( 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch origin, 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch identity_name, 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch common_name, 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&WebRTCIdentityServiceHost::OnComplete, 50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::Unretained(this))); 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (cancel_callback_.is_null()) { 52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SendErrorMessage(net::ERR_UNEXPECTED); 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid WebRTCIdentityServiceHost::OnCancelRequest() { 57ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::ResetAndReturn(&cancel_callback_).Run(); 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid WebRTCIdentityServiceHost::OnComplete(int status, 61ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& certificate, 62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& private_key) { 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cancel_callback_.Reset(); 64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (status == net::OK) { 65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Send(new WebRTCIdentityHostMsg_IdentityReady(certificate, private_key)); 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } else { 67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SendErrorMessage(status); 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 71ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid WebRTCIdentityServiceHost::SendErrorMessage(int error) { 72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Send(new WebRTCIdentityHostMsg_RequestFailed(error)); 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace content 76