| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Test MediaKeySession not callable after close().</title> |
| <script src="encrypted-media-utils.js"></script> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <script> |
| // After a MediaKeySession object is closed, other operations |
| // (except calling close() again) on the session are not allowed |
| // and should return an InvalidStateError. |
| |
| // Create, initialize, and close a session. Returns a promise that |
| // resolves with the created and closed mediaKeySession and the |
| // initDataType used. |
| function createClosedSession() { |
| var initDataType; |
| var initData; |
| var mediaKeySession; |
| |
| return navigator.requestMediaKeySystemAccess('org.w3.clearkey', getSimpleConfiguration()).then(function(access) { |
| initDataType = access.getConfiguration().initDataTypes[0]; |
| initData = getInitData(initDataType); |
| return access.createMediaKeys(); |
| }).then(function(mediaKeys) { |
| mediaKeySession = mediaKeys.createSession(); |
| return mediaKeySession.generateRequest(initDataType, initData); |
| }).then(function() { |
| return mediaKeySession.close(); |
| }).then(function(result) { |
| return Promise.resolve({ session: mediaKeySession, initDataType: initDataType} ); |
| }); |
| } |
| |
| promise_test(function() |
| { |
| return createClosedSession().then(function(result) { |
| var mediaKeySession = result.session; |
| var initDataType = result.initDataType; |
| var initData = getInitData(initDataType); |
| |
| // Now try the operation that should fail. |
| return mediaKeySession.generateRequest(initDataType, initData); |
| }).then(function() { |
| assert_unreached('Unexpected generateRequest() success.'); |
| }, function(error) { |
| assert_equals(error.name, 'InvalidStateError'); |
| return Promise.resolve(null); |
| }); |
| }, 'generateRequest() after close().'); |
| |
| promise_test(function() |
| { |
| return createClosedSession().then(function(result) { |
| var mediaKeySession = result.session; |
| |
| // Now try the operation that should fail. |
| return mediaKeySession.load('1234'); |
| }).then(function() { |
| assert_unreached('Unexpected load() success.'); |
| }, function(error) { |
| assert_equals(error.name, 'InvalidStateError'); |
| return Promise.resolve(null); |
| }); |
| }, 'load() after close().'); |
| |
| promise_test(function() |
| { |
| return createClosedSession().then(function(result) { |
| var mediaKeySession = result.session; |
| |
| // Now try the operation that should fail. |
| var validLicense = stringToUint8Array(createJWKSet(createJWK(stringToUint8Array('123'), stringToUint8Array('1234567890abcdef')))); |
| return mediaKeySession.update(validLicense); |
| }).then(function() { |
| assert_unreached('Unexpected update() success.'); |
| }, function(error) { |
| assert_equals(error.name, 'InvalidStateError'); |
| return Promise.resolve(null); |
| }); |
| }, 'update() after close().'); |
| |
| promise_test(function() |
| { |
| return createClosedSession().then(function(result) { |
| var mediaKeySession = result.session; |
| |
| // Now try the operation that should fail. |
| return mediaKeySession.remove(); |
| }).then(function() { |
| assert_unreached('Unexpected remove() success.'); |
| }, function(error) { |
| assert_equals(error.name, 'InvalidStateError'); |
| return Promise.resolve(null); |
| }); |
| }, 'remove() after close().'); |
| |
| promise_test(function() |
| { |
| return createClosedSession().then(function(result) { |
| var mediaKeySession = result.session; |
| |
| // Now try calling close() again, which should succeed. |
| return mediaKeySession.close(); |
| }); |
| }, 'close() after close().'); |
| </script> |
| </body> |
| </html> |
| |