// META: script=/service-workers/service-worker/resources/test-helpers.sub.js // META: script=resources/utils.js 'use strict'; // Tests that Mixed Content requests are blocked. // https://w3c.github.io/webappsec-mixed-content/#should-block-fetch // https://w3c.github.io/webappsec-mixed-content/#a-priori-authenticated-url // https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy // With an additional restriction that only https:// and loopback http:// // requests are allowed. Hence the wss:, file:, data:, etc schemes are blocked. // https://github.com/WICG/background-fetch/issues/44 // This is not a comprehensive test of mixed content blocking - it is just // intended to check that blocking is enabled. backgroundFetchTest((t, bgFetch) => { return bgFetch.fetch(uniqueId(), 'https://example.com'); }, 'https: fetch should register ok'); backgroundFetchTest((t, bgFetch) => { return bgFetch.fetch(uniqueId(), 'http://127.0.0.1'); }, 'loopback IPv4 http: fetch should register ok'); backgroundFetchTest((t, bgFetch) => { return bgFetch.fetch(uniqueId(), 'http://[::1]'); }, 'loopback IPv6 http: fetch should register ok'); backgroundFetchTest((t, bgFetch) => { return bgFetch.fetch(uniqueId(), 'http://localhost'); }, 'localhost http: fetch should register ok'); function testBgFetch(bgFetch, url) { return bgFetch.fetch(uniqueId(), url).then(fetch => { return fetch.match(url); }).then(match => match.responseReady); } backgroundFetchTest((t, bgFetch) => { return promise_rejects_js(t, TypeError, testBgFetch(bgFetch, 'wss:127.0.0.1')); }, 'wss: fetch should reject'); backgroundFetchTest((t, bgFetch) => { return promise_rejects_js(t, TypeError, testBgFetch(bgFetch, 'file:///')); }, 'file: fetch should reject'); backgroundFetchTest((t, bgFetch) => { return promise_rejects_js(t, TypeError, testBgFetch(bgFetch, 'data:text/plain,foo')); }, 'data: fetch should reject'); backgroundFetchTest((t, bgFetch) => { return promise_rejects_js(t, TypeError, testBgFetch(bgFetch, 'foobar:bazqux')); }, 'unknown scheme fetch should reject');