Index: LayoutTests/media/encrypted-media/encrypted-media-v2-syntax.html |
diff --git a/LayoutTests/media/encrypted-media/encrypted-media-v2-syntax.html b/LayoutTests/media/encrypted-media/encrypted-media-v2-syntax.html |
index 89ae7e69f2c8fd65198bcef4ca2ccbe6f13b13b2..ed6f482eaccd0a9684f693e6b707b903ae6354a3 100644 |
--- a/LayoutTests/media/encrypted-media/encrypted-media-v2-syntax.html |
+++ b/LayoutTests/media/encrypted-media/encrypted-media-v2-syntax.html |
@@ -1,70 +1,117 @@ |
<!DOCTYPE html> |
<html> |
<head> |
- <title>MediaKeys</title> |
- <script src=../video-test.js></script> |
+ <title>Test EME syntax</title> |
+ <script src="encrypted-media-utils.js"></script> |
+ <script src="../../resources/testharness.js"></script> |
+ <script src="../../resources/testharnessreport.js"></script> |
+ </head> |
+ <body> |
+ <div id="log"></div> |
<script> |
- function stringToUint8Array(str) |
+ var typeError = new TypeError(); |
+ var mediaKeys = null; |
+ var mediaKeySession = null; |
+ var initData = stringToUint8Array('init data'); |
+ |
+ test(function() |
{ |
- var arr=[]; |
- for(var i=0,j=str.length;i<j;++i) |
- arr[i]=str.charCodeAt(i); |
- return new Uint8Array(arr); |
- } |
+ // Too few parameters. |
+ assert_throws(typeError, function() { new MediaKeys(); }); |
+ // Invalid parameters. |
+ assert_throws('INVALID_ACCESS_ERR', function() { new MediaKeys(''); }); |
+ // Invalid key systems. |
+ assert_throws('NOT_SUPPORTED_ERR', function() { new MediaKeys(null); }); |
+ assert_throws('NOT_SUPPORTED_ERR', function() { new MediaKeys(undefined); }); |
+ assert_throws('NOT_SUPPORTED_ERR', function() { new MediaKeys('unsupported'); }); |
+ assert_throws('NOT_SUPPORTED_ERR', function() { new MediaKeys(1); }); |
+ assert_throws('NOT_SUPPORTED_ERR', function() { new MediaKeys(new Uint8Array(0)); }); |
+ }, 'Test MediaKeys constructor exceptions.'); |
- var mediaKeys; |
- var mediaKeySession; |
- var initData = stringToUint8Array('mock'); |
+ test(function() |
+ { |
+ assert_equals(typeof window.MediaKeys, 'function'); |
+ assert_not_equals(new MediaKeys('org.w3.clearkey', 'extra'), null); |
+ mediaKeys = new MediaKeys('org.w3.clearkey'); |
+ assert_not_equals(mediaKeys, null); |
+ assert_equals(typeof mediaKeys, 'object'); |
+ assert_equals(mediaKeys.keySystem, 'org.w3.clearkey'); |
+ assert_equals(typeof mediaKeys.createSession, 'function'); |
+ assert_equals(typeof mediaKeys.addEventListener, 'undefined'); |
+ }, 'Test MediaKeys constructor.'); |
- function checkError() |
+ test(function() |
{ |
- testExpected('mediaKeySession.error', null, '!='); |
- testExpected('mediaKeySession.error.code', MediaKeyError.MEDIA_KEYERR_UNKNOWN); |
- testExpected('mediaKeySession.error.systemCode', 0); |
- } |
+ // Too few parameters. |
+ assert_throws(typeError, function() { mediaKeys.createSession(); }); |
+ assert_throws(typeError, function() { mediaKeys.createSession(''); }); |
+ assert_throws(typeError, function() { mediaKeys.createSession(null); }); |
+ assert_throws(typeError, function() { mediaKeys.createSession(undefined); }); |
+ assert_throws(typeError, function() { mediaKeys.createSession('video/webm'); }); |
+ assert_throws(typeError, function() { mediaKeys.createSession(new Uint8Array(0)); }); |
+ assert_throws(typeError, function() { mediaKeys.createSession(initData); }); |
+ // Invalid parameters. |
+ assert_throws('InvalidAccessError', function() { mediaKeys.createSession('video/webm', ''); }); |
+ assert_throws('InvalidAccessError', function() { mediaKeys.createSession('video/webm', null); }); |
+ assert_throws('InvalidAccessError', function() { mediaKeys.createSession('video/webm', undefined); }); |
+ assert_throws('InvalidAccessError', function() { mediaKeys.createSession('video/webm', 1); }); |
+ assert_throws('InvalidAccessError', function() { mediaKeys.createSession('video/webm', new Uint8Array(0)); }); |
+ assert_throws('InvalidAccessError', function() { mediaKeys.createSession('', initData); }); |
+ // Not supported contentTypes. |
+ assert_throws('NotSupportedError', function() { mediaKeys.createSession(null, initData); }); |
+ assert_throws('NotSupportedError', function() { mediaKeys.createSession(undefined, initData); }); |
+ assert_throws('NotSupportedError', function() { mediaKeys.createSession(new Uint8Array(0), initData); }); |
+ assert_throws('NotSupportedError', function() { mediaKeys.createSession(1, initData); }); |
+ assert_throws('NotSupportedError', function() { mediaKeys.createSession('unsupported', initData); }); |
+ assert_throws('NotSupportedError', function() { mediaKeys.createSession('video/foo', initData); }); |
+ assert_throws('NotSupportedError', function() { mediaKeys.createSession('text/webm', initData); }); |
+ }, 'Test MediaKeys createSession() exceptions.'); |
- function runTest() |
+ test(function() |
{ |
- consoleWrite("Test MediaKeys."); |
- testExpected('typeof window.MediaKeys', 'function'); |
- testDOMException('new MediaKeys("")', "DOMException.INVALID_ACCESS_ERR"); |
- testDOMException('new MediaKeys("unsupported")', "DOMException.NOT_SUPPORTED_ERR"); |
- run('mediaKeys = new MediaKeys("org.w3.clearkey")'); |
- testExpected('typeof mediaKeys', 'object'); |
- testExpected('mediaKeys.keySystem', 'org.w3.clearkey'); |
- testExpected('typeof mediaKeys.createSession', 'function'); |
+ assert_not_equals(mediaKeys.createSession('video/webm', initData, 'extra'), null); |
+ mediaKeySession = mediaKeys.createSession('video/webm', initData); |
+ assert_not_equals(mediaKeySession, null); |
+ assert_equals(typeof mediaKeySession, 'object'); |
+ assert_equals(typeof mediaKeySession.addEventListener, 'function'); |
+ assert_equals(typeof mediaKeySession.update, 'function'); |
+ assert_equals(mediaKeySession.error, null); |
+ assert_equals(mediaKeySession.keySystem, 'org.w3.clearkey'); |
+ assert_equals(typeof mediaKeySession.sessionId, 'string'); |
+ assert_equals(typeof mediaKeySession.onopen, 'undefined'); |
+ assert_equals(typeof mediaKeySession.onmessage, 'undefined'); |
+ assert_equals(typeof mediaKeySession.onclose, 'undefined'); |
+ assert_equals(typeof mediaKeySession.onerror, 'undefined'); |
+ }, 'Test MediaKeys createSession().'); |
- testException('mediaKeys.createSession()', '"TypeError: Failed to execute \'createSession\' on \'MediaKeys\': 2 arguments required, but only 0 present."'); |
- testException('mediaKeys.createSession("")', '"TypeError: Failed to execute \'createSession\' on \'MediaKeys\': 2 arguments required, but only 1 present."'); |
- testException('mediaKeys.createSession("video/webm")', '"TypeError: Failed to execute \'createSession\' on \'MediaKeys\': 2 arguments required, but only 1 present."'); |
- testDOMException('mediaKeys.createSession("", new Uint8Array(1))', "DOMException.INVALID_ACCESS_ERR"); |
- testDOMException('mediaKeys.createSession("video/webm", null)', "DOMException.INVALID_ACCESS_ERR"); |
- testDOMException('mediaKeys.createSession("video/webm", new Uint8Array(0))', "DOMException.INVALID_ACCESS_ERR"); |
- testDOMException('mediaKeys.createSession("unsupported/type", new Uint8Array(1))', "DOMException.NOT_SUPPORTED_ERR"); |
- consoleWrite(""); |
+ test(function() |
+ { |
+ // Too few parameters. |
+ assert_throws(typeError, function() { mediaKeySession.update(); }); |
+ // Invalid parameters. |
+ assert_throws('InvalidAccessError', function() { mediaKeySession.update(''); }); |
+ assert_throws('InvalidAccessError', function() { mediaKeySession.update(null); }); |
+ assert_throws('InvalidAccessError', function() { mediaKeySession.update(undefined); }); |
+ assert_throws('InvalidAccessError', function() { mediaKeySession.update(1); }); |
+ assert_throws('InvalidAccessError', function() { mediaKeySession.update(new Uint8Array(0)); }); |
+ }, 'Test MediaKeySession update() exceptions.'); |
- consoleWrite("Test MediaKeySession."); |
- run('mediaKeySession = mediaKeys.createSession("video/webm", initData)'); |
- testExpected('typeof mediaKeySession', 'object'); |
- testExpected('typeof mediaKeySession.addEventListener', 'function'); |
- testExpected('typeof mediaKeySession.update', 'function'); |
- testExpected('mediaKeySession.error', null); |
- testExpected('mediaKeySession.keySystem', 'org.w3.clearkey'); |
- testExpected('mediaKeySession.sessionId', null, '!='); |
- testExpected('mediaKeySession.onwebkitkeyadded', null); |
- testExpected('mediaKeySession.onwebkitkeyerror', null); |
- testExpected('mediaKeySession.onwebkitkeymessage', null); |
- testException('mediaKeySession.update()', '"TypeError: Failed to execute \'update\' on \'MediaKeySession\': 1 argument required, but only 0 present."'); |
- testDOMException('mediaKeySession.update(null)', "DOMException.INVALID_ACCESS_ERR"); |
- run('mediaKeySession.update(new Uint8Array(1))'); |
+ test(function() |
+ { |
+ mediaKeySession.update(new Uint8Array(1), 'extra'); |
+ mediaKeySession.update(new Uint8Array(1)); |
+ }, 'Test MediaKeySession update().'); |
- run('mediaKeySession.release()'); |
+ test(function() |
+ { |
+ mediaKeySession.release(); |
+ // FIXME: This causes Chromium to crash. Uncomment this once Chromium is fixed. |
+ // mediaKeySession.release('extra'); |
+ }, 'Test MediaKeySession release().'); |
- endTest(); |
- } |
+ // FIXME: Add syntax checks for MediaKeys.IsTypeSupported(). |
+ // FIXME: Add syntax checks for MediaKeyError and MediaKeySession events. |
+ // FIXME: Add HTMLMediaElement syntax checks, e.g. setMediaKeys, mediakeys, onneedkey. |
</script> |
- </head> |
- <body onload="runTest()"> |
- <p>This tests the basic API of MediaKeys and MediaKeySession.</p> |
</body> |
</html> |