Title: [211429] trunk
Revision
211429
Author
zandober...@gmail.com
Date
2017-01-31 03:41:07 -0800 (Tue, 31 Jan 2017)

Log Message

[EME] InitDataRegistry should use base64url encoding and decoding for keyids
https://bugs.webkit.org/show_bug.cgi?id=167592

Reviewed by Jer Noble.

Source/WebCore:

In InitDataRegistry, WTF::base64URLEncode() and WTF::base64URLDecode() should
be used to encode and decode the 'keyids' initialization data format, as
required by the relevant specification.
https://w3c.github.io/encrypted-media/format-registry/initdata/keyids.html#format

Relevant test case was added to media/encrypted-media/mock-MediaKeySession-generateRequest.html.

* Modules/encryptedmedia/InitDataRegistry.cpp:
(WebCore::extractKeyIDsKeyids):
(WebCore::sanitizeKeyids):

LayoutTests:

* media/encrypted-media/mock-MediaKeySession-generateRequest-expected.txt:
* media/encrypted-media/mock-MediaKeySession-generateRequest.html: Include a test case
that passes an init data JSON to generateRequest() that fails to decode when using the
plain base64 decoding algorithm. The test passes when base64url encoding and decoding
are used in InitDataRegistry.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (211428 => 211429)


--- trunk/LayoutTests/ChangeLog	2017-01-31 11:26:14 UTC (rev 211428)
+++ trunk/LayoutTests/ChangeLog	2017-01-31 11:41:07 UTC (rev 211429)
@@ -1,3 +1,16 @@
+2017-01-31  Zan Dobersek  <zdober...@igalia.com>
+
+        [EME] InitDataRegistry should use base64url encoding and decoding for keyids
+        https://bugs.webkit.org/show_bug.cgi?id=167592
+
+        Reviewed by Jer Noble.
+
+        * media/encrypted-media/mock-MediaKeySession-generateRequest-expected.txt:
+        * media/encrypted-media/mock-MediaKeySession-generateRequest.html: Include a test case
+        that passes an init data JSON to generateRequest() that fails to decode when using the
+        plain base64 decoding algorithm. The test passes when base64url encoding and decoding
+        are used in InitDataRegistry.
+
 2017-01-31  Antoine Quint  <grao...@apple.com>
 
         [Sierra WK1] LayoutTest media/modern-media-controls/placard-support/placard-support-pip.html is a flaky crash

Modified: trunk/LayoutTests/media/encrypted-media/mock-MediaKeySession-generateRequest-expected.txt (211428 => 211429)


--- trunk/LayoutTests/media/encrypted-media/mock-MediaKeySession-generateRequest-expected.txt	2017-01-31 11:26:14 UTC (rev 211428)
+++ trunk/LayoutTests/media/encrypted-media/mock-MediaKeySession-generateRequest-expected.txt	2017-01-31 11:41:07 UTC (rev 211429)
@@ -37,5 +37,11 @@
 RUN(mediaKeySession = mediaKeys.createSession("temporary"))
 RUN(promise = mediaKeySession.generateRequest("keyids", stringToUInt8Array(kids)))
 Promise resolved OK
+
+initData is encoded in base64url.
+RUN(kids = JSON.stringify({ kids: [ "ig2FRSEF1BU1j-qPaObBkQ"] }))
+RUN(mediaKeySession = mediaKeys.createSession("temporary"))
+RUN(promise = mediaKeySession.generateRequest("keyids", stringToUInt8Array(kids)))
+Promise resolved OK
 END OF TEST
 

Modified: trunk/LayoutTests/media/encrypted-media/mock-MediaKeySession-generateRequest.html (211428 => 211429)


--- trunk/LayoutTests/media/encrypted-media/mock-MediaKeySession-generateRequest.html	2017-01-31 11:26:14 UTC (rev 211428)
+++ trunk/LayoutTests/media/encrypted-media/mock-MediaKeySession-generateRequest.html	2017-01-31 11:41:07 UTC (rev 211429)
@@ -101,6 +101,14 @@
             run('promise = mediaKeySession.generateRequest("keyids", stringToUInt8Array(kids))');
             shouldResolve(promise).then(next, next);
         },
+
+        function() {
+            consoleWrite('initData is encoded in base64url.')
+            run('kids = JSON.stringify({ kids: [ "ig2FRSEF1BU1j-qPaObBkQ"] })');
+            run('mediaKeySession = mediaKeys.createSession("temporary")');
+            run('promise = mediaKeySession.generateRequest("keyids", stringToUInt8Array(kids))');
+            shouldResolve(promise).then(next, next);
+        },
     ];
     </script>
 </head>

Modified: trunk/Source/WebCore/ChangeLog (211428 => 211429)


--- trunk/Source/WebCore/ChangeLog	2017-01-31 11:26:14 UTC (rev 211428)
+++ trunk/Source/WebCore/ChangeLog	2017-01-31 11:41:07 UTC (rev 211429)
@@ -1,3 +1,21 @@
+2017-01-31  Zan Dobersek  <zdober...@igalia.com>
+
+        [EME] InitDataRegistry should use base64url encoding and decoding for keyids
+        https://bugs.webkit.org/show_bug.cgi?id=167592
+
+        Reviewed by Jer Noble.
+
+        In InitDataRegistry, WTF::base64URLEncode() and WTF::base64URLDecode() should
+        be used to encode and decode the 'keyids' initialization data format, as
+        required by the relevant specification.
+        https://w3c.github.io/encrypted-media/format-registry/initdata/keyids.html#format
+
+        Relevant test case was added to media/encrypted-media/mock-MediaKeySession-generateRequest.html.
+
+        * Modules/encryptedmedia/InitDataRegistry.cpp:
+        (WebCore::extractKeyIDsKeyids):
+        (WebCore::sanitizeKeyids):
+
 2017-01-31  Joseph Pecoraro  <pecor...@apple.com>
 
         Performance Timeline: Add serializer to PerformanceEntry

Modified: trunk/Source/WebCore/Modules/encryptedmedia/InitDataRegistry.cpp (211428 => 211429)


--- trunk/Source/WebCore/Modules/encryptedmedia/InitDataRegistry.cpp	2017-01-31 11:26:14 UTC (rev 211428)
+++ trunk/Source/WebCore/Modules/encryptedmedia/InitDataRegistry.cpp	2017-01-31 11:41:07 UTC (rev 211429)
@@ -63,7 +63,7 @@
             continue;
 
         Vector<char> keyIDData;
-        if (!WTF::base64Decode(keyID, { keyIDData }))
+        if (!WTF::base64URLDecode(keyID, { keyIDData }))
             continue;
 
         Ref<SharedBuffer> keyIDBuffer = SharedBuffer::adoptVector(keyIDData);
@@ -84,7 +84,7 @@
     auto object = InspectorObject::create();
     auto kidsArray = InspectorArray::create();
     for (auto& buffer : keyIDBuffer)
-        kidsArray->pushString(base64Encode(buffer->data(), buffer->size()));
+        kidsArray->pushString(WTF::base64URLEncode(buffer->data(), buffer->size()));
     object->setArray("kids", WTFMove(kidsArray));
 
     CString jsonData = object->toJSONString().utf8();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to