Index: media/cdm/player_tracker_impl.cc |
diff --git a/media/cdm/player_tracker_impl.cc b/media/cdm/player_tracker_impl.cc |
index 8f102bd724e18ac00a200e2bfb4efd330b040131..ff0e5f71e217339d433c4cb90a2082125782f78f 100644 |
--- a/media/cdm/player_tracker_impl.cc |
+++ b/media/cdm/player_tracker_impl.cc |
@@ -25,7 +25,10 @@ PlayerTrackerImpl::~PlayerTrackerImpl() {} |
int PlayerTrackerImpl::RegisterPlayer(const base::Closure& new_key_cb, |
const base::Closure& cdm_unset_cb) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ DVLOG(1) << "PlayerTrackerImpl::RegisterPlayer"; |
+ |
+ base::AutoLock lock(lock_); |
+ |
int registration_id = next_registration_id_++; |
DCHECK(!ContainsKey(player_callbacks_map_, registration_id)); |
player_callbacks_map_.insert(std::make_pair( |
@@ -34,21 +37,32 @@ 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() { |
+ // Ensure that callbacks are called on the same thread that created this |
+ // class. |
DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
+ base::AutoLock lock(lock_); |
+ |
std::map<int, PlayerCallbacks>::iterator iter = player_callbacks_map_.begin(); |
for (; iter != player_callbacks_map_.end(); ++iter) |
iter->second.new_key_cb.Run(); |
} |
void PlayerTrackerImpl::NotifyCdmUnset() { |
+ // Ensure that callbacks are called on the same thread that created this |
+ // class. |
DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
+ base::AutoLock lock(lock_); |
+ |
std::map<int, PlayerCallbacks>::iterator iter = player_callbacks_map_.begin(); |
for (; iter != player_callbacks_map_.end(); ++iter) |
iter->second.cdm_unset_cb.Run(); |