| Index: media/cdm/player_tracker_impl.cc
|
| diff --git a/media/cdm/player_tracker_impl.cc b/media/cdm/player_tracker_impl.cc
|
| index e4abd61f707de3a6a2331cc21fdb342187b8df40..98f2050edefec132bb0989473dcaff63fd020382 100644
|
| --- a/media/cdm/player_tracker_impl.cc
|
| +++ b/media/cdm/player_tracker_impl.cc
|
| @@ -11,25 +11,21 @@
|
| namespace media {
|
|
|
| PlayerTrackerImpl::PlayerCallbacks::PlayerCallbacks(
|
| - base::Closure new_key_cb,
|
| - base::Closure cdm_unset_cb)
|
| - : new_key_cb(new_key_cb), cdm_unset_cb(cdm_unset_cb) {
|
| -}
|
| + const base::Closure& new_key_cb,
|
| + const base::Closure& cdm_unset_cb)
|
| + : new_key_cb(new_key_cb), cdm_unset_cb(cdm_unset_cb) {}
|
|
|
| PlayerTrackerImpl::PlayerCallbacks::~PlayerCallbacks() {
|
| }
|
|
|
| PlayerTrackerImpl::PlayerTrackerImpl() : next_registration_id_(1) {
|
| - // Enable PlayerTrackerImpl to be created on another thread than it will be
|
| - // later exclusively used.
|
| - thread_checker_.DetachFromThread();
|
| }
|
|
|
| PlayerTrackerImpl::~PlayerTrackerImpl() {}
|
|
|
| int PlayerTrackerImpl::RegisterPlayer(const base::Closure& new_key_cb,
|
| const base::Closure& cdm_unset_cb) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| + base::AutoLock lock(lock_);
|
| int registration_id = next_registration_id_++;
|
| DCHECK(!ContainsKey(player_callbacks_map_, registration_id));
|
| player_callbacks_map_.insert(std::make_pair(
|
| @@ -38,24 +34,36 @@ int PlayerTrackerImpl::RegisterPlayer(const base::Closure& new_key_cb,
|
| }
|
|
|
| void PlayerTrackerImpl::UnregisterPlayer(int registration_id) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| + base::AutoLock lock(lock_);
|
| DCHECK(ContainsKey(player_callbacks_map_, registration_id))
|
| << registration_id;
|
| player_callbacks_map_.erase(registration_id);
|
| }
|
|
|
| void PlayerTrackerImpl::NotifyNewKey() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - std::map<int, PlayerCallbacks>::iterator iter = player_callbacks_map_.begin();
|
| - for (; iter != player_callbacks_map_.end(); ++iter)
|
| - iter->second.new_key_cb.Run();
|
| + std::vector<base::Closure> new_key_callbacks;
|
| +
|
| + {
|
| + base::AutoLock lock(lock_);
|
| + for (const auto& entry : player_callbacks_map_)
|
| + new_key_callbacks.push_back(entry.second.new_key_cb);
|
| + }
|
| +
|
| + for (const auto& cb : new_key_callbacks)
|
| + cb.Run();
|
| }
|
|
|
| void PlayerTrackerImpl::NotifyCdmUnset() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - std::map<int, PlayerCallbacks>::iterator iter = player_callbacks_map_.begin();
|
| - for (; iter != player_callbacks_map_.end(); ++iter)
|
| - iter->second.cdm_unset_cb.Run();
|
| + std::vector<base::Closure> cdm_unset_callbacks;
|
| +
|
| + {
|
| + base::AutoLock lock(lock_);
|
| + for (const auto& entry : player_callbacks_map_)
|
| + cdm_unset_callbacks.push_back(entry.second.cdm_unset_cb);
|
| + }
|
| +
|
| + for (const auto& cb : cdm_unset_callbacks)
|
| + cb.Run();
|
| }
|
|
|
| } // namespace media
|
|
|