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)