tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

syntax-mediakeys.js (7648B)


      1 function runTest(config) {
      2    var keysystem = config.keysystem;
      3    var testname  = testnamePrefix(null, config.keysystem);
      4    var initDataType = config.initDataType;
      5    var configuration = {
      6        initDataTypes: [config.initDataType],
      7        audioCapabilities: [{contentType: config.audioType}],
      8        videoCapabilities: [{contentType: config.videoType}],
      9        sessionTypes: ['temporary']
     10    };
     11 
     12    function createMediaKeysAttributeTest() {
     13        return new Promise(function (resolve, reject) {
     14            var access;
     15            isInitDataTypeSupported(keysystem, initDataType).then(function (isTypeSupported) {
     16                assert_equals(typeof navigator.requestMediaKeySystemAccess, 'function');
     17                assert_true(isTypeSupported, "initDataType should be supported");
     18                return navigator.requestMediaKeySystemAccess(keysystem, [configuration]);
     19            }).then(function (result) {
     20                access = result;
     21                assert_equals(access.keySystem, keysystem);
     22                return access.createMediaKeys();
     23            }).then(function (mediaKeys) {
     24                assert_not_equals(mediaKeys, null);
     25                assert_equals(typeof mediaKeys, 'object');
     26                assert_equals(typeof mediaKeys.createSession, 'function');
     27                assert_equals(typeof mediaKeys.setServerCertificate, 'function');
     28 
     29                // Test creation of a second MediaKeys.
     30                // The extra parameter is ignored.
     31                return access.createMediaKeys('extra');
     32            }).then(function (mediaKeys) {
     33                assert_not_equals(mediaKeys, null);
     34                assert_equals(typeof mediaKeys, 'object');
     35                assert_equals(typeof mediaKeys.createSession, 'function');
     36                assert_equals(typeof mediaKeys.setServerCertificate, 'function');
     37                resolve();
     38            }).catch(function (error) {
     39                reject(error);
     40            });
     41        })
     42    }
     43 
     44    promise_test(function() {
     45        return createMediaKeysAttributeTest();
     46    }, testname + ' test MediaKeys attribute syntax');
     47 
     48    var kSetServerCertificateExceptionsTestCases = [
     49        // Too few parameters.
     50        {
     51            exception: 'TypeError',
     52            func: function (mk) {
     53                return mk.setServerCertificate();
     54            }
     55        },
     56        // Invalid parameters.
     57        {
     58            exception: 'TypeError',
     59            func: function (mk) {
     60                return mk.setServerCertificate('');
     61            }
     62        },
     63        {
     64            exception: 'TypeError',
     65            func: function (mk) {
     66                return mk.setServerCertificate(null);
     67            }
     68        },
     69        {
     70            exception: 'TypeError',
     71            func: function (mk) {
     72                return mk.setServerCertificate(undefined);
     73            }
     74        },
     75        {
     76            exception: 'TypeError',
     77            func: function (mk) {
     78                return mk.setServerCertificate(1);
     79            }
     80        },
     81        // Empty array.
     82        {
     83            exception: 'TypeError',
     84            func: function (mk) {
     85                return mk.setServerCertificate(new Uint8Array(0));
     86            }
     87        }
     88    ];
     89 
     90 
     91    function setServerCertificateTestExceptions() {
     92        return new Promise(function(resolve, reject) {
     93            isInitDataTypeSupported(keysystem, initDataType).then(function (isTypeSupported) {
     94                        assert_equals(typeof navigator.requestMediaKeySystemAccess, 'function');
     95                        assert_true(isTypeSupported, "initDataType not supported");
     96                        return navigator.requestMediaKeySystemAccess(keysystem, [configuration]);
     97                    }).then(function (access) {
     98                        return access.createMediaKeys();
     99                    }).then(function (mediaKeys) {
    100                        var promises = kSetServerCertificateExceptionsTestCases.map(function (testCase) {
    101                            return test_exception(testCase, mediaKeys);
    102                        });
    103                        assert_not_equals(promises.length, 0);
    104                        return Promise.all(promises);
    105                    }).then(function () {
    106                        resolve();
    107                    }).catch(function (error) {
    108                        reject(error);
    109                    });
    110        })
    111    }
    112    promise_test(function() {
    113        return setServerCertificateTestExceptions();
    114    }, testname + ' test MediaKeys setServerCertificate() exceptions.');
    115 
    116    // All calls to |func| in this group resolve. setServerCertificate with these cert may either resolve with true
    117    // for clearkey or throw a DOMException.
    118    var kSetServerCertificateTestCases = [
    119        {
    120            // Pass in ArrayBufferView
    121            func: function (mk) {
    122                var cert = new Uint8Array(200);
    123                assert_true(ArrayBuffer.isView(cert));
    124 
    125                return new Promise(function (resolve, reject) {
    126                    mk.setServerCertificate(cert).then(function (value) {
    127                        resolve(value);
    128                    }).catch(function (error) {
    129                        if (Object.prototype.toString.call(error) === "[object DOMException]") {
    130                            resolve(false);
    131                        }
    132                    });
    133                })
    134            },
    135            expected: false
    136        },
    137        {
    138            // Pass in ArrayBuffer.
    139            func: function (mk) {
    140                var cert = new ArrayBuffer(200);
    141                assert_false(ArrayBuffer.isView(cert));
    142                return new Promise(function (resolve) {
    143                    mk.setServerCertificate(cert).then(function (resolveValue) {
    144                        resolve(resolveValue);
    145                    }).catch(function (error) {
    146                        if (Object.prototype.toString.call(error) === "[object DOMException]") {
    147                            resolve(false);
    148                        }
    149                    });
    150                })
    151            },
    152            expected: false
    153        }
    154    ];
    155    function setServerCertificateTest(){
    156        return new Promise(function(resolve, reject){
    157            var expected_result;
    158            isInitDataTypeSupported(keysystem, initDataType).then(function (isTypeSupported) {
    159                    assert_equals(typeof navigator.requestMediaKeySystemAccess, 'function');
    160                    assert_true(isTypeSupported, "initDataType not supported");
    161                    return navigator.requestMediaKeySystemAccess(keysystem, [configuration]);
    162                }).then(function (access) {
    163                    return access.createMediaKeys();
    164                }).then(function (mediaKeys) {
    165                    var promises = kSetServerCertificateTestCases.map(function (testCase) {
    166                        return testCase.func.call(null, mediaKeys);
    167                    });
    168                    expected_result = kSetServerCertificateTestCases.map(function (testCase) {
    169                        return testCase.expected;
    170                    });
    171                    assert_not_equals(promises.length, 0);
    172                    return Promise.all(promises);
    173                }).then(function (result) {
    174                    assert_array_equals(result, expected_result);
    175                    resolve();
    176                }).catch(function (error) {
    177                    reject(error);
    178                });
    179        })
    180    }
    181    promise_test(function() {
    182       return  setServerCertificateTest();
    183    }, testname + ' test MediaKeys setServerCertificate() syntax with non-empty certificate.');
    184 }