1// Copyright 2014 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 "media/cdm/player_tracker_impl.h" 6 7#include <utility> 8 9#include "base/stl_util.h" 10 11namespace media { 12 13PlayerTrackerImpl::PlayerCallbacks::PlayerCallbacks( 14 base::Closure new_key_cb, 15 base::Closure cdm_unset_cb) 16 : new_key_cb(new_key_cb), cdm_unset_cb(cdm_unset_cb) { 17} 18 19PlayerTrackerImpl::PlayerCallbacks::~PlayerCallbacks() { 20} 21 22PlayerTrackerImpl::PlayerTrackerImpl() : next_registration_id_(1) {} 23 24PlayerTrackerImpl::~PlayerTrackerImpl() {} 25 26int PlayerTrackerImpl::RegisterPlayer(const base::Closure& new_key_cb, 27 const base::Closure& cdm_unset_cb) { 28 DCHECK(thread_checker_.CalledOnValidThread()); 29 int registration_id = next_registration_id_++; 30 DCHECK(!ContainsKey(player_callbacks_map_, registration_id)); 31 player_callbacks_map_.insert(std::make_pair( 32 registration_id, PlayerCallbacks(new_key_cb, cdm_unset_cb))); 33 return registration_id; 34} 35 36void PlayerTrackerImpl::UnregisterPlayer(int registration_id) { 37 DCHECK(thread_checker_.CalledOnValidThread()); 38 DCHECK(ContainsKey(player_callbacks_map_, registration_id)) 39 << registration_id; 40 player_callbacks_map_.erase(registration_id); 41} 42 43void PlayerTrackerImpl::NotifyNewKey() { 44 DCHECK(thread_checker_.CalledOnValidThread()); 45 std::map<int, PlayerCallbacks>::iterator iter = player_callbacks_map_.begin(); 46 for (; iter != player_callbacks_map_.end(); ++iter) 47 iter->second.new_key_cb.Run(); 48} 49 50void PlayerTrackerImpl::NotifyCdmUnset() { 51 DCHECK(thread_checker_.CalledOnValidThread()); 52 std::map<int, PlayerCallbacks>::iterator iter = player_callbacks_map_.begin(); 53 for (; iter != player_callbacks_map_.end(); ++iter) 54 iter->second.cdm_unset_cb.Run(); 55} 56 57} // namespace media 58