blob: 48b45e5b3a03d96a4bff99239053bd306928f88f [file] [log] [blame]
// Copyright 2017 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 CHROME_RENDERER_MEDIA_CHROME_KEY_SYSTEMS_PROVIDER_H_
#define CHROME_RENDERER_MEDIA_CHROME_KEY_SYSTEMS_PROVIDER_H_
#include <memory>
#include <vector>
#include "base/callback.h"
#include "base/threading/thread_checker.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
#include "media/base/key_system_properties.h"
typedef std::vector<std::unique_ptr<media::KeySystemProperties>>
KeySystemPropertiesVector;
typedef base::Callback<void(KeySystemPropertiesVector*)>
KeySystemsProviderDelegate;
class ChromeKeySystemsProvider {
public:
ChromeKeySystemsProvider();
~ChromeKeySystemsProvider();
// Adds properties for supported key systems.
void AddSupportedKeySystems(KeySystemPropertiesVector* key_systems);
// Returns whether client key systems properties should be updated.
// TODO(chcunningham): Refactor this to a proper change "observer" API that is
// less fragile (don't assume AddSupportedKeySystems has just one caller).
bool IsKeySystemsUpdateNeeded();
void SetTickClockForTesting(const base::TickClock* tick_clock);
void SetProviderDelegateForTesting(
const KeySystemsProviderDelegate& test_provider);
private:
// Whether AddSupportedKeySystems() has ever been called.
bool has_updated_;
// Whether a future update is needed. For example, when some potentially
// supported key systems are NOT supported yet. This could happen when the
// required component for a key system is not yet available.
bool is_update_needed_;
// Throttle how often we signal an update is needed to avoid unnecessary high
// frequency of expensive IPC calls.
base::TimeTicks last_update_time_ticks_;
const base::TickClock* tick_clock_;
// Ensure all methods are called from the same (Main) thread.
base::ThreadChecker thread_checker_;
// For unit tests to inject their own key systems. Will bypass adding default
// Chrome key systems when set.
KeySystemsProviderDelegate test_provider_;
DISALLOW_COPY_AND_ASSIGN(ChromeKeySystemsProvider);
};
#endif // CHROME_RENDERER_MEDIA_CHROME_KEY_SYSTEMS_PROVIDER_H_