| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>requestMediaKeySystemAccess() is not available on unique origin</title> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <script> |
| // When the sandbox attribute is present on an iframe, it will |
| // treat the content as being from a unique origin. So try to |
| // call createMediaKeys() inside an iframe and it should fail. |
| |
| function load_iframe(src, sandbox) { |
| return new Promise(function(resolve) { |
| var iframe = document.createElement('iframe'); |
| iframe.onload = function() { resolve(iframe); }; |
| iframe.sandbox = sandbox; |
| iframe.src = src; |
| document.documentElement.appendChild(iframe); |
| }); |
| } |
| |
| function wait_for_message() { |
| return new Promise(function(resolve) { |
| self.addEventListener('message', function listener(e) { |
| resolve(e.data); |
| self.removeEventListener('message', listener); |
| }); |
| }); |
| } |
| |
| promise_test(function(test) { |
| // TODO(xhwang): Also check other EME APIs. |
| var script = 'data:text/html,' + |
| '<script>' + |
| ' window.onmessage = function(e) {' + |
| ' if (\'requestMediaKeySystemAccess\' in navigator) {' + |
| ' window.parent.postMessage({result: \'available\'}, \'*\');' + |
| ' } else { ' + |
| ' window.parent.postMessage({result: \'unavailable\'}, \'*\');' + |
| ' }' + |
| ' };' + |
| '<\/script>'; |
| |
| // Verify that this page can create a MediaKeys first. |
| return navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{ |
| initDataTypes: [ 'keyids' ], |
| audioCapabilities: [ |
| { contentType: 'audio/mp4; codecs="mp4a.40.2"' }, |
| { contentType: 'audio/webm; codecs="opus"' } |
| ] |
| }]).then(function(access) { |
| return access.createMediaKeys(); |
| }).then(function(mediaKeys) { |
| // Success, so now create the iframe and try there. |
| return load_iframe(script, 'allow-scripts'); |
| }).then(function(iframe) { |
| iframe.contentWindow.postMessage({}, '*'); |
| return wait_for_message(); |
| }).then(function(message) { |
| assert_equals(message.result, 'unavailable'); |
| }); |
| }, 'requestMediaKeySystemAccess() is not available on unique origin'); |
| </script> |
| </body> |
| </html> |