// TODO(hiroshige): Document the type of `scenario`. function TestCase(scenarios) { function runTest(scenario) { const urls = getRequestURLs(scenario.subresource, scenario.origin, scenario.redirection); const checkResult = _ => { // Send request to check if the key has been torn down. return xhrRequest(urls.assertUrl) .then(assertResult => { // Now check if the value has been torn down. If it's still there, // we have blocked the request to mixed-content. assert_equals(assertResult.status, scenario.expectation, "The resource request should be '" + scenario.expectation + "'."); }); }; /** @type {Subresource} */ const subresource = { subresourceType: scenario.subresource, url: urls.testUrl, policyDeliveries: scenario.subresource_policy_deliveries, }; promise_test(() => { return xhrRequest(urls.announceUrl) // Send out the real resource request. // This should tear down the key if it's not blocked. .then(_ => invokeRequest(subresource, scenario.source_context_list)) // We check the key state, regardless of whether the main request // succeeded or failed. .then(checkResult, checkResult); }, scenario.test_description); } // runTest function runTests() { for (const scenario of scenarios) { runTest(scenario); } } return {start: runTests}; }