/** * @fileoverview Test case for mixed-content in web-platform-tests. * @author burnik@google.com (Kristijan Burnik) */ /** * MixedContentTestCase exercises all the tests for checking browser behavior * when resources regarded as mixed-content are requested. A single run covers * only a single scenario. * @param {object} scenario A JSON describing the test arrangement and * expectation(s). Refer to /mixed-content/spec.src.json for details. * @param {string} description The test scenario verbose description. * @param {SanityChecker} sanityChecker Instance of an object used to check the * running scenario. Useful in debug mode. See ./sanity-checker.js. * Run {@code ./tools/generate.py -h} for info on test generating modes. * @return {object} Object wrapping the start method used to run the test. */ function TestCase(scenarios, sanityChecker) { function runTest(scenario) { sanityChecker.checkScenario(scenario, subresourceMap); 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}; }