'use strict'; test(() => { assert_true(!!navigator.mediaDevices.setCaptureHandleConfig); navigator.mediaDevices.setCaptureHandleConfig({handle: 'X'.repeat(1024)}); }, 'setCaptureHandleConfig does not throw if handle length is 1024.'); test(() => { assert_true(!!navigator.mediaDevices.setCaptureHandleConfig); assert_throws_js( TypeError, () => navigator.mediaDevices.setCaptureHandleConfig( {handle: 'X'.repeat(1025)}), 'handle length must be 1024 characters or less'); }, 'setCaptureHandleConfig raises TypeError if handle is invalid.'); test(() => { assert_true(!!navigator.mediaDevices.setCaptureHandleConfig); navigator.mediaDevices.setCaptureHandleConfig({permittedOrigins: ['*']}); }, 'setCaptureHandleConfig does not throw if asterisk character appears only once.'); test(() => { assert_true(!!navigator.mediaDevices.setCaptureHandleConfig); assert_throws_dom( 'NotSupportedError', () => navigator.mediaDevices.setCaptureHandleConfig( {permittedOrigins: ['*', '*']}), 'two asterisk characters are not allowed'); assert_throws_dom( 'NotSupportedError', () => navigator.mediaDevices.setCaptureHandleConfig( {permittedOrigins: ['*', 'http://example.com']}), 'asterisk character is not allowed with valid origins'); assert_throws_dom( 'NotSupportedError', () => navigator.mediaDevices.setCaptureHandleConfig( {permittedOrigins: ['about://blank']}), 'origins must be valid'); }, 'setCaptureHandleConfig raises NotSupportedError if permittedOrigins is invalid.'); test(() => { assert_true(!!navigator.mediaDevices.setCaptureHandleConfig); const iframe = document.createElement('iframe'); document.body.appendChild(iframe); const mediaDevices = iframe.contentWindow.navigator.mediaDevices; const iframeDOMException = iframe.contentWindow.DOMException; assert_throws_dom('InvalidStateError', iframeDOMException, () => { mediaDevices.setCaptureHandleConfig(); }); }, 'setCaptureHandleConfig raises InvalidStateError if not from top-level browsing context.');