// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_CDM_PLAYER_TRACKER_IMPL_H_
#define MEDIA_CDM_PLAYER_TRACKER_IMPL_H_
#include <map>
#include "base/basictypes.h"
#include "base/callback.h"
#include "base/threading/thread_checker.h"
#include "media/base/media_export.h"
#include "media/base/player_tracker.h"
namespace media {
// A common implementation that can be shared by different PlayerTracker
// implementations. This class is not thread safe and should only be called
// on one thread.
class MEDIA_EXPORT PlayerTrackerImpl : public PlayerTracker {
public:
PlayerTrackerImpl();
virtual ~PlayerTrackerImpl();
// PlayerTracker implementation.
virtual int RegisterPlayer(const base::Closure& new_key_cb,
const base::Closure& cdm_unset_cb) OVERRIDE;
virtual void UnregisterPlayer(int registration_id) OVERRIDE;
// Helpers methods to fire registered callbacks.
void NotifyNewKey();
void NotifyCdmUnset();
private:
struct PlayerCallbacks {
PlayerCallbacks(base::Closure new_key_cb, base::Closure cdm_unset_cb);
~PlayerCallbacks();
base::Closure new_key_cb;
base::Closure cdm_unset_cb;
};
int next_registration_id_;
std::map<int, PlayerCallbacks> player_callbacks_map_;
base::ThreadChecker thread_checker_;
DISALLOW_COPY_AND_ASSIGN(PlayerTrackerImpl);
};
} // namespace media
#endif // MEDIA_CDM_PLAYER_TRACKER_IMPL_H_