Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(877)

Unified Diff: webkit/media/key_systems.cc

Issue 10020053: Initial implementation of Encrypted Media Extensions in Chrome. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fixed header guard typo Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/media/key_systems.cc
diff --git a/webkit/media/key_systems.cc b/webkit/media/key_systems.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c2be8239f7af2119e774085b92948b700475eca7
--- /dev/null
+++ b/webkit/media/key_systems.cc
@@ -0,0 +1,81 @@
+// Copyright (c) 2012 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.
+
+#include "webkit/media/key_systems.h"
+
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
+
+namespace webkit_media {
+
+namespace key_systems {
+
+namespace {
+
+const char kClearKeyKeySystem[] = "webkit-org.w3.clearkey";
+
+struct MediaFormatAndKeySystem {
+ const char* mime_type;
+ const char* codec;
+ const char* key_system;
+};
+
+static const MediaFormatAndKeySystem
+supported_format_key_system_combinations[] = {
+ // TODO(ddorwin): Reconsider based on how usage of this class evolves.
+ // For now, this class is stateless, so we do not have the opportunity to
+ // build a list using ParseCodecString() like MimeUtil. Therfore, the
+ // following line must be separate entries.
+ // { "video/webm", "vorbis,vp8,vp8.0", kClearKeyKeySystem },
+ { "video/webm", "vorbis", kClearKeyKeySystem },
+ { "video/webm", "vp8", kClearKeyKeySystem },
+ { "video/webm", "vp8.0", kClearKeyKeySystem },
+ { "audio/webm", "vorbis", kClearKeyKeySystem },
+ { "video/webm", "", kClearKeyKeySystem },
+ { "audio/webm", "", kClearKeyKeySystem }
+};
+
+bool IsSupportedKeySystemWithContainerAndCodec(const std::string& mime_type,
+ const std::string& codec,
+ const std::string& key_system) {
+ for (size_t i = 0;
+ i < arraysize(supported_format_key_system_combinations);
+ ++i) {
+ const MediaFormatAndKeySystem& combination =
+ supported_format_key_system_combinations[i];
+ if (combination.mime_type == mime_type &&
+ combination.codec == codec &&
+ combination.key_system == key_system)
+ return true;
+ }
+
+ return false;
+}
+
+} // namespace
+
+bool isKeySystemSupported(const WebKit::WebString& keySystem) {
+ if (keySystem == kClearKeyKeySystem)
+ return true;
+ return false;
+}
+
+bool IsSupportedKeySystemWithMediaMimeType(
+ const std::string& mime_type,
+ const std::vector<std::string>& codecs,
+ const std::string& key_system) {
+ if (codecs.empty())
+ return IsSupportedKeySystemWithContainerAndCodec(mime_type, "", key_system);
+
+ for (size_t i = 0; i < codecs.size(); ++i) {
+ if (!IsSupportedKeySystemWithContainerAndCodec(
+ mime_type, codecs[i], key_system))
+ return false;
+ }
+
+ return true;
+}
+
+} // namespace key_systems
+
+} // namespace webkit_media

Powered by Google App Engine
This is Rietveld 408576698