From f51c0d27e13cc401fcc606da237e0437c481192d Mon Sep 17 00:00:00 2001 From: Jeff Tinker Date: Thu, 22 Aug 2013 09:33:58 -0700 Subject: [PATCH] Support New isContentTypeSupported API Adds support and tests for the new isContentTypeSupported API to the Widevine DrmEngine. Bug: 10244066 Merge of https://widevine-internal-review.googlesource.com/#/c/7321/ from the Widevine CDM repo. Change-Id: I4f606de7897a49da745ff76faceeb358f8ac9073 --- libwvdrmengine/include/WVDrmFactory.h | 2 + libwvdrmengine/src/WVDrmFactory.cpp | 5 ++ .../test/unit/WVDrmFactory_test.cpp | 50 +++++++++++++++++-- 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/libwvdrmengine/include/WVDrmFactory.h b/libwvdrmengine/include/WVDrmFactory.h index e33845b7..7f09e417 100644 --- a/libwvdrmengine/include/WVDrmFactory.h +++ b/libwvdrmengine/include/WVDrmFactory.h @@ -19,6 +19,8 @@ class WVDrmFactory : public android::DrmFactory { virtual bool isCryptoSchemeSupported(const uint8_t uuid[16]); + virtual bool isContentTypeSupported(const android::String8 &mimeType); + virtual android::status_t createDrmPlugin(const uint8_t uuid[16], android::DrmPlugin** plugin); diff --git a/libwvdrmengine/src/WVDrmFactory.cpp b/libwvdrmengine/src/WVDrmFactory.cpp index 2751866f..addde4f6 100644 --- a/libwvdrmengine/src/WVDrmFactory.cpp +++ b/libwvdrmengine/src/WVDrmFactory.cpp @@ -23,6 +23,11 @@ bool WVDrmFactory::isCryptoSchemeSupported(const uint8_t uuid[16]) { return isWidevineUUID(uuid); } +bool WVDrmFactory::isContentTypeSupported(const String8 &mimeType) { + // For now, only ISO-BMFF is supported, which has MIME-type video/mp4 + return mimeType == "video/mp4"; +} + status_t WVDrmFactory::createDrmPlugin(const uint8_t uuid[16], DrmPlugin** plugin) { if (!isCryptoSchemeSupported(uuid)) { diff --git a/libwvdrmengine/test/unit/WVDrmFactory_test.cpp b/libwvdrmengine/test/unit/WVDrmFactory_test.cpp index a742cdbd..8a812313 100644 --- a/libwvdrmengine/test/unit/WVDrmFactory_test.cpp +++ b/libwvdrmengine/test/unit/WVDrmFactory_test.cpp @@ -7,6 +7,7 @@ #include "WVDrmFactory.h" using namespace wvdrm; +using namespace android; const uint8_t kWidevineUUID[16] = { 0xED,0xEF,0x8B,0xA9,0x79,0xD6,0x4A,0xCE, @@ -24,18 +25,57 @@ const uint8_t kUnknownUUID[16] = { }; TEST(WVDrmFactoryTest, SupportsSupportedCryptoSchemes) { - UniquePtr factory(new WVDrmFactory()); + WVDrmFactory factory; - EXPECT_TRUE(factory->isCryptoSchemeSupported(kWidevineUUID)) << + EXPECT_TRUE(factory.isCryptoSchemeSupported(kWidevineUUID)) << "WVPluginFactory does not support Widevine's UUID"; - EXPECT_TRUE(factory->isCryptoSchemeSupported(kOldNetflixWidevineUUID)) << + EXPECT_TRUE(factory.isCryptoSchemeSupported(kOldNetflixWidevineUUID)) << "WVPluginFactory does not support the old Netflix Widevine UUID"; } TEST(WVDrmFactoryTest, DoesNotSupportUnsupportedCryptoSchemes) { - UniquePtr factory(new WVDrmFactory()); + WVDrmFactory factory; - EXPECT_FALSE(factory->isCryptoSchemeSupported(kUnknownUUID)) << + EXPECT_FALSE(factory.isCryptoSchemeSupported(kUnknownUUID)) << "WVPluginFactory incorrectly claims to support an unknown UUID"; } + +TEST(WVDrmFactoryTest, SupportsSupportedContainerFormats) { + WVDrmFactory factory; + + EXPECT_TRUE(factory.isContentTypeSupported(String8("video/mp4"))) << + "WVPluginFactory does not support ISO-BMFF"; +} + +TEST(WVDrmFactoryTest, DoesNotSupportUnsupportedContainerFormats) { + WVDrmFactory factory; + + EXPECT_FALSE(factory.isContentTypeSupported(String8("video/webm"))) << + "WVPluginFactory incorrectly claims to support Web-M"; + + // Taken from Encoding.com's list of the most common internet video MIME-types + EXPECT_FALSE(factory.isContentTypeSupported(String8("video/x-matroska"))) << + "WVPluginFactory incorrectly claims to support Matroska"; + + EXPECT_FALSE(factory.isContentTypeSupported(String8("video/x-flv"))) << + "WVPluginFactory incorrectly claims to support Flash Video"; + + EXPECT_FALSE(factory.isContentTypeSupported(String8("application/x-mpegURL"))) << + "WVPluginFactory incorrectly claims to support m3u8 Indexes"; + + EXPECT_FALSE(factory.isContentTypeSupported(String8("video/MP2T"))) << + "WVPluginFactory incorrectly claims to support MPEG-2 TS"; + + EXPECT_FALSE(factory.isContentTypeSupported(String8("video/3gpp"))) << + "WVPluginFactory incorrectly claims to support 3GP Mobile"; + + EXPECT_FALSE(factory.isContentTypeSupported(String8("video/quicktime"))) << + "WVPluginFactory incorrectly claims to support Quicktime"; + + EXPECT_FALSE(factory.isContentTypeSupported(String8("video/x-msvideo"))) << + "WVPluginFactory incorrectly claims to support AVI"; + + EXPECT_FALSE(factory.isContentTypeSupported(String8("video/x-ms-wmv"))) << + "WVPluginFactory incorrectly claims to support WMV"; +}