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 #ifndef MEDIA_CDM_PLAYER_TRACKER_IMPL_H_ 6 #define MEDIA_CDM_PLAYER_TRACKER_IMPL_H_ 7 8 #include <map> 9 10 #include "base/basictypes.h" 11 #include "base/callback.h" 12 #include "base/threading/thread_checker.h" 13 #include "media/base/media_export.h" 14 #include "media/base/player_tracker.h" 15 16 namespace media { 17 18 // A common implementation that can be shared by different PlayerTracker 19 // implementations. This class is not thread safe and should only be called 20 // on one thread. 21 class MEDIA_EXPORT PlayerTrackerImpl : public PlayerTracker { 22 public: 23 PlayerTrackerImpl(); 24 virtual ~PlayerTrackerImpl(); 25 26 // PlayerTracker implementation. 27 virtual int RegisterPlayer(const base::Closure& new_key_cb, 28 const base::Closure& cdm_unset_cb) OVERRIDE; 29 virtual void UnregisterPlayer(int registration_id) OVERRIDE; 30 31 // Helpers methods to fire registered callbacks. 32 void NotifyNewKey(); 33 void NotifyCdmUnset(); 34 35 private: 36 struct PlayerCallbacks { 37 PlayerCallbacks(base::Closure new_key_cb, base::Closure cdm_unset_cb); 38 ~PlayerCallbacks(); 39 40 base::Closure new_key_cb; 41 base::Closure cdm_unset_cb; 42 }; 43 44 int next_registration_id_; 45 std::map<int, PlayerCallbacks> player_callbacks_map_; 46 47 base::ThreadChecker thread_checker_; 48 49 DISALLOW_COPY_AND_ASSIGN(PlayerTrackerImpl); 50 }; 51 52 } // namespace media 53 54 #endif // MEDIA_CDM_PLAYER_TRACKER_IMPL_H_ 55