function runTest(config, qualifier) { var testname = testnamePrefix(qualifier, config.keysystem) + ' test MediaKeySession closed event.'; var configuration = { initDataTypes: [config.initDataType], audioCapabilities: [{ contentType: config.audioType }], videoCapabilities: [{ contentType: config.videoType }], sessionTypes: ['temporary'] }; promise_test(function (test) { var initDataType; var initData; var mediaKeySession; return navigator.requestMediaKeySystemAccess(config.keysystem, [configuration]).then(function (access) { initDataType = access.getConfiguration().initDataTypes[0]; return access.createMediaKeys(); }).then(function (mediaKeys) { mediaKeySession = mediaKeys.createSession(); if(config.initData) { initData = config.initData; } else { initData = stringToUint8Array(atob(config.content.keys[0].initData)); } return mediaKeySession.generateRequest(initDataType, initData); }).then(function() { // close() should result in the closed promise being // fulfilled. return mediaKeySession.close(); }).then(function (result) { assert_equals(result, undefined); // Wait for the session to be closed. return mediaKeySession.closed; }).then(function (result) { assert_equals(result, undefined); // Now that the session is closed, verify that the // closed attribute immediately returns a fulfilled // promise. return mediaKeySession.closed; }).then(function (result) { assert_equals(result, undefined); }).catch(function(error) { assert_unreached('Error: ' + error.name); }); }, testname); }