158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef MEDIA_CDM_PLAYER_TRACKER_IMPL_H_ 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define MEDIA_CDM_PLAYER_TRACKER_IMPL_H_ 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <map> 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/basictypes.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/callback.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/threading/thread_checker.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "media/base/media_export.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "media/base/player_tracker.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace media { 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// A common implementation that can be shared by different PlayerTracker 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// implementations. This class is not thread safe and should only be called 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// on one thread. 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class MEDIA_EXPORT PlayerTrackerImpl : public PlayerTracker { 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PlayerTrackerImpl(); 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~PlayerTrackerImpl(); 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // PlayerTracker implementation. 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual int RegisterPlayer(const base::Closure& new_key_cb, 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const base::Closure& cdm_unset_cb) OVERRIDE; 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void UnregisterPlayer(int registration_id) OVERRIDE; 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Helpers methods to fire registered callbacks. 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void NotifyNewKey(); 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) void NotifyCdmUnset(); 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) struct PlayerCallbacks { 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PlayerCallbacks(base::Closure new_key_cb, base::Closure cdm_unset_cb); 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ~PlayerCallbacks(); 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Closure new_key_cb; 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Closure cdm_unset_cb; 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) }; 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int next_registration_id_; 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::map<int, PlayerCallbacks> player_callbacks_map_; 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::ThreadChecker thread_checker_; 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PlayerTrackerImpl); 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace media 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // MEDIA_CDM_PLAYER_TRACKER_IMPL_H_ 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)