Index: chrome/renderer/media/chrome_key_systems_provider.h |
diff --git a/chrome/renderer/media/chrome_key_systems_provider.h b/chrome/renderer/media/chrome_key_systems_provider.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3daf0cd3db00c8c3580a1e175d5db9692626da45 |
--- /dev/null |
+++ b/chrome/renderer/media/chrome_key_systems_provider.h |
@@ -0,0 +1,68 @@ |
+// 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" |
+ |
+namespace chrome { |
+ |
+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(std::unique_ptr<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_; |
+ std::unique_ptr<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); |
+}; |
+ |
+} // namespace chrome |
+ |
+#endif // CHROME_RENDERER_MEDIA_CHROME_KEY_SYSTEMS_PROVIDER_H_ |