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 16namespace 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. 21class 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