<!DOCTYPE html>
<html>
    <head>
        <title>WebKitMediaKeys</title>
        <script src=../video-test.js></script>
        <script>
            function stringToUint8Array(str)
            {
                var arr=[];
                for(var i=0,j=str.length;i<j;++i)
                  arr[i]=str.charCodeAt(i);
                return new Uint8Array(arr);
            }

            var mediaKeys;
            var mediaKeySession;
            var initData = stringToUint8Array('mock');

            function runTest() 
            {
                // Initialize the MockCDM. It supports the key system 'com.apple.mock', the 
                // mime type 'video/mock'. It requires init data to begin with 'mock', and
                // keys to begin with 'key'.
                if (internals)
                    internals.initializeMockCDM();

                consoleWrite("Test WebKitMediaKeys.");
                testExpected('typeof window.WebKitMediaKeys', 'function');
                testDOMException('new WebKitMediaKeys("")', "DOMException.INVALID_ACCESS_ERR");
                testDOMException('new WebKitMediaKeys("unsupported")', "DOMException.NOT_SUPPORTED_ERR");
                run('mediaKeys = new WebKitMediaKeys("com.webcore.mock")');
                testExpected('mediaKeys.keySystem', 'com.webcore.mock');
                testExpected('typeof mediaKeys.createSession', 'function');
                testDOMException('mediaKeys.createSession("", new Uint8Array(1))', "DOMException.INVALID_ACCESS_ERR");
                testException('mediaKeys.createSession("unsupported/type")', "'TypeError: Not enough arguments'");
                testDOMException('mediaKeys.createSession("unsupported/type", new Uint8Array(1))', "DOMException.NOT_SUPPORTED_ERR");
                consoleWrite("");

                consoleWrite("Test WebKitMediaKeySession.");
                run('mediaKeySession = mediaKeys.createSession("video/mock", initData)');
                testExpected('typeof mediaKeySession', 'object');
                testExpected('typeof mediaKeySession.addEventListener', 'function');
                testExpected('typeof mediaKeySession.update', 'function');
                testExpected('mediaKeySession.error', null);
                testExpected('mediaKeySession.keySystem', 'com.webcore.mock');
                testExpected('mediaKeySession.sessionId', null, '!=');
                testExpected('mediaKeySession.onwebkitkeyadded', null);
                testExpected('mediaKeySession.onwebkitkeyerror', null);
                testExpected('mediaKeySession.onwebkitkeymessage', null);
                testException('mediaKeySession.update(null)', "'TypeError: Argument 1 (\\'key\\') to WebKitMediaKeySession.update must be an instance of Uint8Array'");
                endTest();
            }
        </script>
    </head>
    <body onload="runTest()">
        <p>This tests the basic API of WebKitMediaKeys and WebKitMediaKeySession.</p>
    </body>
</html>
