Title: [153861] tags/Safari-537.55.1

Diff

Modified: tags/Safari-537.55.1/LayoutTests/ChangeLog (153860 => 153861)


--- tags/Safari-537.55.1/LayoutTests/ChangeLog	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/LayoutTests/ChangeLog	2013-08-08 23:41:38 UTC (rev 153861)
@@ -1,3 +1,17 @@
+2013-08-08  Lucas Forschler  <lforsch...@apple.com>
+
+        Merge r153838
+
+    2013-08-08  Jer Noble  <jer.no...@apple.com>
+
+            [EME] Implement MediaKeys.isTypeSupported()
+            https://bugs.webkit.org/show_bug.cgi?id=119586
+
+            Reviewed by Eric Carlson.
+
+            * media/encrypted-media/encrypted-media-is-type-supported-expected.txt: Added.
+            * media/encrypted-media/encrypted-media-is-type-supported.html: Added.
+
 2013-08-05  Lucas Forschler  <lforsch...@apple.com>
 
         Merge r153725

Copied: tags/Safari-537.55.1/LayoutTests/media/encrypted-media/encrypted-media-is-type-supported-expected.txt (from rev 153838, trunk/LayoutTests/media/encrypted-media/encrypted-media-is-type-supported-expected.txt) (0 => 153861)


--- tags/Safari-537.55.1/LayoutTests/media/encrypted-media/encrypted-media-is-type-supported-expected.txt	                        (rev 0)
+++ tags/Safari-537.55.1/LayoutTests/media/encrypted-media/encrypted-media-is-type-supported-expected.txt	2013-08-08 23:41:38 UTC (rev 153861)
@@ -0,0 +1,22 @@
+Test Encrypted Media extension of MediaKeys isTypeSupported() method.
+
+Always return false for a null type.
+EXPECTED (MediaKeys.isTypeSupported(null) == 'false') OK
+
+Always return false for an empty type.
+EXPECTED (MediaKeys.isTypeSupported('') == 'false') OK
+EXPECTED (MediaKeys.isTypeSupported('', '') == 'false') OK
+EXPECTED (MediaKeys.isTypeSupported('', null) == 'false') OK
+EXPECTED (MediaKeys.isTypeSupported('', undefined) == 'false') OK
+EXPECTED (MediaKeys.isTypeSupported('', 'video/invalid') == 'false') OK
+
+Always return true for supported types.
+EXPECTED (MediaKeys.isTypeSupported('com.webcore.mock') == 'true') OK
+
+Always return true for supported types and containers.
+EXPECTED (MediaKeys.isTypeSupported('com.webcore.mock', 'video/mock') == 'true') OK
+
+Always return false for supported types but unsupported containers.
+EXPECTED (MediaKeys.isTypeSupported('com.webcore.mock', 'video/invalid') == 'false') OK
+END OF TEST
+

Copied: tags/Safari-537.55.1/LayoutTests/media/encrypted-media/encrypted-media-is-type-supported.html (from rev 153838, trunk/LayoutTests/media/encrypted-media/encrypted-media-is-type-supported.html) (0 => 153861)


--- tags/Safari-537.55.1/LayoutTests/media/encrypted-media/encrypted-media-is-type-supported.html	                        (rev 0)
+++ tags/Safari-537.55.1/LayoutTests/media/encrypted-media/encrypted-media-is-type-supported.html	2013-08-08 23:41:38 UTC (rev 153861)
@@ -0,0 +1,40 @@
+<!doctype html>
+<html lang="en">
+    <head>
+        <title>MediaKeys.isTypeSupported()</title>
+        <script src=""
+        <script>
+            // Initialize the MockCDM. It supports the key system 'com.webcore.mock', the 
+            // mime type 'video/mock'. It requires init data to begin with 'mock', and
+            // keys to begin with 'key'.
+            if (internals)
+                internals.initializeMockCDM();
+
+            function runTest() {
+                consoleWrite("Always return false for a null type.");
+                testExpected("MediaKeys.isTypeSupported(null)", false);
+
+                consoleWrite("<br>Always return false for an empty type.");
+                testExpected("MediaKeys.isTypeSupported('')", false);
+                testExpected("MediaKeys.isTypeSupported('', '')", false);
+                testExpected("MediaKeys.isTypeSupported('', null)", false);
+                testExpected("MediaKeys.isTypeSupported('', undefined)", false);
+                testExpected("MediaKeys.isTypeSupported('', 'video/invalid')", false);
+
+                consoleWrite("<br>Always return true for supported types.");
+                testExpected("MediaKeys.isTypeSupported('com.webcore.mock')", true);
+
+                consoleWrite("<br>Always return true for supported types and containers.");
+                testExpected("MediaKeys.isTypeSupported('com.webcore.mock', 'video/mock')", true);
+
+                consoleWrite("<br>Always return false for supported types but unsupported containers.");
+                testExpected("MediaKeys.isTypeSupported('com.webcore.mock', 'video/invalid')", false);
+
+                endTest();
+            }
+        </script>
+    </head>
+    <body _onload_="runTest()">
+        <p>Test Encrypted Media extension of MediaKeys <em>isTypeSupported()</em> method.</p>
+    </body>
+</html>

Modified: tags/Safari-537.55.1/Source/WebCore/ChangeLog (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/ChangeLog	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/ChangeLog	2013-08-08 23:41:38 UTC (rev 153861)
@@ -1,3 +1,52 @@
+2013-08-08  Lucas Forschler  <lforsch...@apple.com>
+
+        Merge r153838
+
+    2013-08-08  Jer Noble  <jer.no...@apple.com>
+
+            [EME] Implement MediaKeys.isTypeSupported()
+            https://bugs.webkit.org/show_bug.cgi?id=119586
+
+            Reviewed by Eric Carlson.
+
+            Test: media/encrypted-media/encrypted-media-is-type-supported.html
+
+            The EME spec has removed the extra keySystem parameter from
+            HTMLMediaElement.canPlayType() in favor of a new isTypeSupported()
+            method on MediaKeys.
+
+            To implement this method, the CDMFactory needs to know whether the
+            registered CDM supports the specified mime type.  CDMs must register
+            this new factory method, which requires changes to CDMPrivateAVFoundation
+            and MockCDM.
+
+            Add the new MediaKeys.isTypeSupported() method:
+            * Modules/encryptedmedia/MediaKeys.cpp:
+            (WebCore::MediaKeys::isTypeSupported):
+            * Modules/encryptedmedia/MediaKeys.h:
+            * Modules/encryptedmedia/MediaKeys.idl:
+
+            Add the new factory CDMSupportsKeySystemAndMimeType method:
+            * Modules/encryptedmedia/CDM.cpp:
+            (WebCore::CDMFactory::CDMFactory): Now takes a third parameter.
+            (WebCore::installedCDMFactories): When adding the AVFoundation CDM, pass its new method.
+            (WebCore::CDM::registerCDMFactory): Now takes a third parameter.
+            (WebCore::CDM::keySystemSupportsMimeType): Added.
+            * Modules/encryptedmedia/CDM.h:
+            * WebCore.exp.in:
+
+            Register this new method with the factory for all concrete CDMs:
+            * Modules/encryptedmedia/CDMPrivateAVFoundation.h:
+            * Modules/encryptedmedia/CDMPrivateAVFoundation.mm:
+            (WebCore::CDMPrivateAVFoundation::supportsKeySystem):
+            (WebCore::CDMPrivateAVFoundation::supportsKeySystemAndMimeType):
+            * testing/Internals.cpp:
+            (WebCore::Internals::initializeMockCDM):
+            * testing/MockCDM.cpp:
+            (WebCore::MockCDM::supportsKeySystem):
+            (WebCore::MockCDM::supportsKeySystemAndMimeType):
+            * testing/MockCDM.h:
+
 2013-08-06  Lucas Forschler  <lforsch...@apple.com>
 
         Merge r153758

Modified: tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDM.cpp (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDM.cpp	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDM.cpp	2013-08-08 23:41:38 UTC (rev 153861)
@@ -43,14 +43,16 @@
 struct CDMFactory {
     WTF_MAKE_NONCOPYABLE(CDMFactory); WTF_MAKE_FAST_ALLOCATED;
 public:
-    CDMFactory(CreateCDM constructor, CDMSupportsKeySystem supportsKeySystem)
+    CDMFactory(CreateCDM constructor, CDMSupportsKeySystem supportsKeySystem, CDMSupportsKeySystemAndMimeType supportsKeySystemAndMimeType)
         : constructor(constructor)
         , supportsKeySystem(supportsKeySystem)
+        , supportsKeySystemAndMimeType(supportsKeySystemAndMimeType)
     {
     }
 
     CreateCDM constructor;
     CDMSupportsKeySystem supportsKeySystem;
+    CDMSupportsKeySystemAndMimeType supportsKeySystemAndMimeType;
 };
 
 static Vector<CDMFactory*>& installedCDMFactories()
@@ -62,7 +64,7 @@
 
         // FIXME: initialize specific UA CDMs. http://webkit.org/b/109318, http://webkit.org/b/109320
 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
-        cdms.append(new CDMFactory(CDMPrivateAVFoundation::create, CDMPrivateAVFoundation::supportsKeySytem));
+        cdms.append(new CDMFactory(CDMPrivateAVFoundation::create, CDMPrivateAVFoundation::supportsKeySystem, CDMPrivateAVFoundation::supportsKeySystemAndMimeType));
 #endif
 
     }
@@ -70,9 +72,9 @@
     return cdms;
 }
 
-void CDM::registerCDMFactory(CreateCDM constructor, CDMSupportsKeySystem supportsKeySystem)
+void CDM::registerCDMFactory(CreateCDM constructor, CDMSupportsKeySystem supportsKeySystem, CDMSupportsKeySystemAndMimeType supportsKeySystemAndMimeType)
 {
-    installedCDMFactories().append(new CDMFactory(constructor, supportsKeySystem));
+    installedCDMFactories().append(new CDMFactory(constructor, supportsKeySystem, supportsKeySystemAndMimeType));
 }
 
 static CDMFactory* CDMFactoryForKeySystem(const String& keySystem)
@@ -90,6 +92,13 @@
     return CDMFactoryForKeySystem(keySystem);
 }
 
+bool CDM::keySystemSupportsMimeType(const String& keySystem, const String& mimeType)
+{
+    if (CDMFactory* factory = CDMFactoryForKeySystem(keySystem))
+        return factory->supportsKeySystemAndMimeType(keySystem, mimeType);
+    return false;
+}
+
 PassOwnPtr<CDM> CDM::create(const String& keySystem)
 {
     if (!supportsKeySystem(keySystem))

Modified: tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDM.h (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDM.h	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDM.h	2013-08-08 23:41:38 UTC (rev 153861)
@@ -42,6 +42,7 @@
 
 typedef PassOwnPtr<CDMPrivateInterface> (*CreateCDM)(CDM*);
 typedef bool (*CDMSupportsKeySystem)(const String&);
+typedef bool (*CDMSupportsKeySystemAndMimeType)(const String&, const String&);
 
 class CDMClient {
 public:
@@ -66,8 +67,9 @@
 
     enum CDMErrorCode { UnknownError = 1, ClientError, ServiceError, OutputError, HardwareChangeError, DomainError };
     static bool supportsKeySystem(const String&);
+    static bool keySystemSupportsMimeType(const String& keySystem, const String& mimeType);
     static PassOwnPtr<CDM> create(const String& keySystem);
-    static void registerCDMFactory(CreateCDM, CDMSupportsKeySystem);
+    static void registerCDMFactory(CreateCDM, CDMSupportsKeySystem, CDMSupportsKeySystemAndMimeType);
     ~CDM();
 
     bool supportsMIMEType(const String&) const;

Modified: tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDMPrivateAVFoundation.h (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDMPrivateAVFoundation.h	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDMPrivateAVFoundation.h	2013-08-08 23:41:38 UTC (rev 153861)
@@ -40,7 +40,8 @@
 public:
     // CDMFactory support:
     static PassOwnPtr<CDMPrivateInterface> create(CDM* cdm) { return adoptPtr(new CDMPrivateAVFoundation(cdm)); }
-    static bool supportsKeySytem(const String&);
+    static bool supportsKeySystem(const String&);
+    static bool supportsKeySystemAndMimeType(const String& keySystem, const String& mimeType);
 
     virtual ~CDMPrivateAVFoundation() { }
 

Modified: tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDMPrivateAVFoundation.mm (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDMPrivateAVFoundation.mm	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/CDMPrivateAVFoundation.mm	2013-08-08 23:41:38 UTC (rev 153861)
@@ -62,11 +62,18 @@
 #define AVAssetResourceLoadingRequest getAVAssetResourceLoadingRequest()
 
 
-bool CDMPrivateAVFoundation::supportsKeySytem(const String& keySystem)
+bool CDMPrivateAVFoundation::supportsKeySystem(const String& keySystem)
 {
     return equalIgnoringCase(keySystem, "com.apple.fps") || equalIgnoringCase(keySystem, "com.apple.fps.1_0");
 }
 
+bool CDMPrivateAVFoundation::supportsKeySystemAndMimeType(const String& keySystem, const String& mimeType)
+{
+    if (!supportsKeySystem(keySystem))
+        return false;
+    return [AVURLAsset isPlayableExtendedMIMEType:mimeType];
+}
+
 bool CDMPrivateAVFoundation::supportsMIMEType(const String& mimeType)
 {
     return [AVURLAsset isPlayableExtendedMIMEType:mimeType];

Modified: tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/MediaKeys.cpp (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/MediaKeys.cpp	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/MediaKeys.cpp	2013-08-08 23:41:38 UTC (rev 153861)
@@ -118,6 +118,26 @@
     return session;
 }
 
+bool MediaKeys::isTypeSupported(const String& keySystem, const String& mimeType)
+{
+    // 1. If keySystem contains an unrecognized or unsupported Key System, return false and abort these steps.
+    // Key system string comparison is case-sensitive.
+    if (keySystem.isNull() || keySystem.isEmpty() || !CDM::supportsKeySystem(keySystem))
+        return false;
+
+    // 2. If type is null or an empty string, return true and abort these steps.
+    if (mimeType.isNull() || mimeType.isEmpty())
+        return true;
+
+    // 3. If the Key System specified by keySystem does not support decrypting the container and/or codec
+    // specified by type, return false and abort these steps.
+    if (!CDM::keySystemSupportsMimeType(keySystem, mimeType))
+        return false;
+
+    // 4. Return true;
+    return true;
+}
+
 void MediaKeys::setMediaElement(HTMLMediaElement* element)
 {
     m_mediaElement = element;

Modified: tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/MediaKeys.h (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/MediaKeys.h	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/MediaKeys.h	2013-08-08 23:41:38 UTC (rev 153861)
@@ -50,6 +50,8 @@
 
     PassRefPtr<MediaKeySession> createSession(ScriptExecutionContext*, const String& mimeType, Uint8Array* initData, ExceptionCode&);
 
+    static bool isTypeSupported(const String& keySystem, const String& mimeType);
+
     const String& keySystem() const { return m_keySystem; }
     CDM* cdm() { return m_cdm.get(); }
 

Modified: tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/MediaKeys.idl (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/MediaKeys.idl	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/Modules/encryptedmedia/MediaKeys.idl	2013-08-08 23:41:38 UTC (rev 153861)
@@ -30,5 +30,7 @@
 ] interface MediaKeys {
     [CallWith=ScriptExecutionContext, RaisesException] MediaKeySession createSession([Default=Undefined] optional DOMString type, [Default=Undefined] optional Uint8Array initData);
 
+    static boolean isTypeSupported(DOMString keySystem, [Default=NullString] optional DOMString type);
+
     readonly attribute DOMString keySystem;
 };

Modified: tags/Safari-537.55.1/Source/WebCore/WebCore.exp.in (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/WebCore.exp.in	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/WebCore.exp.in	2013-08-08 23:41:38 UTC (rev 153861)
@@ -2776,7 +2776,7 @@
 #endif
 
 #if ENABLE(ENCRYPTED_MEDIA_V2)
-__ZN7WebCore3CDM18registerCDMFactoryEPFN3WTF10PassOwnPtrINS_19CDMPrivateInterfaceEEEPS0_EPFbRKNS1_6StringEE
+__ZN7WebCore3CDM18registerCDMFactoryEPFN3WTF10PassOwnPtrINS_19CDMPrivateInterfaceEEEPS0_EPFbRKNS1_6StringEEPFbSA_SA_E
 #endif
 
 #if ENABLE(VIDEO_TRACK)

Modified: tags/Safari-537.55.1/Source/WebCore/testing/Internals.cpp (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/testing/Internals.cpp	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/testing/Internals.cpp	2013-08-08 23:41:38 UTC (rev 153861)
@@ -2015,7 +2015,7 @@
 #if ENABLE(ENCRYPTED_MEDIA_V2)
 void Internals::initializeMockCDM()
 {
-    CDM::registerCDMFactory(MockCDM::create, MockCDM::supportsKeySytem);
+    CDM::registerCDMFactory(MockCDM::create, MockCDM::supportsKeySystem, MockCDM::supportsKeySystemAndMimeType);
 }
 #endif
 

Modified: tags/Safari-537.55.1/Source/WebCore/testing/MockCDM.cpp (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/testing/MockCDM.cpp	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/testing/MockCDM.cpp	2013-08-08 23:41:38 UTC (rev 153861)
@@ -50,11 +50,19 @@
     String m_sessionId;
 };
 
-bool MockCDM::supportsKeySytem(const String& keySystem)
+bool MockCDM::supportsKeySystem(const String& keySystem)
 {
     return equalIgnoringCase(keySystem, "com.webcore.mock");
 }
 
+bool MockCDM::supportsKeySystemAndMimeType(const String& keySystem, const String& mimeType)
+{
+    if (!supportsKeySystem(keySystem))
+        return false;
+
+    return equalIgnoringCase(mimeType, "video/mock");
+}
+
 bool MockCDM::supportsMIMEType(const String& mimeType)
 {
     return equalIgnoringCase(mimeType, "video/mock");

Modified: tags/Safari-537.55.1/Source/WebCore/testing/MockCDM.h (153860 => 153861)


--- tags/Safari-537.55.1/Source/WebCore/testing/MockCDM.h	2013-08-08 23:28:17 UTC (rev 153860)
+++ tags/Safari-537.55.1/Source/WebCore/testing/MockCDM.h	2013-08-08 23:41:38 UTC (rev 153861)
@@ -39,7 +39,8 @@
 public:
     // CDMFactory support:
     static PassOwnPtr<CDMPrivateInterface> create(CDM* cdm) { return adoptPtr(new MockCDM(cdm)); }
-    static bool supportsKeySytem(const String&);
+    static bool supportsKeySystem(const String&);
+    static bool supportsKeySystemAndMimeType(const String& keySystem, const String& mimeType);
 
     virtual ~MockCDM() { }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to