| // 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(uniqueTag(), 'https://example.com'); |
| }, 'https: fetch should register ok'); |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return bgFetch.fetch(uniqueTag(), 'http://127.0.0.1'); |
| }, 'loopback IPv4 http: fetch should register ok'); |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return bgFetch.fetch(uniqueTag(), 'http://[::1]'); |
| }, 'loopback IPv6 http: fetch should register ok'); |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return bgFetch.fetch(uniqueTag(), 'http://localhost'); |
| }, 'localhost http: fetch should register ok'); |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return promise_rejects(t, new TypeError(), |
| bgFetch.fetch(uniqueTag(), 'http://example.com')); |
| }, 'non-loopback http: fetch should reject'); |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return promise_rejects(t, new TypeError(), |
| bgFetch.fetch(uniqueTag(), 'http://192.0.2.0')); |
| }, 'non-loopback IPv4 http: fetch should reject'); |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return promise_rejects(t, new TypeError(), |
| bgFetch.fetch(uniqueTag(), 'http://[2001:db8::1]')); |
| }, 'non-loopback IPv6 http: fetch should reject'); |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return promise_rejects(t, new TypeError(), |
| bgFetch.fetch(uniqueTag(), ['https://example.com', |
| 'http://example.com'])); |
| }, 'https: and non-loopback http: fetch should reject'); |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return promise_rejects(t, new TypeError(), |
| bgFetch.fetch(uniqueTag(), ['http://example.com', |
| 'https://example.com'])); |
| }, 'non-loopback http: and https: fetch should reject'); |
| |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return promise_rejects(t, new TypeError(), |
| bgFetch.fetch(uniqueTag(), 'wss:127.0.0.1')); |
| }, 'wss: fetch should reject'); |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return promise_rejects(t, new TypeError(), |
| bgFetch.fetch(uniqueTag(), 'file:///')); |
| }, 'file: fetch should reject'); |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return promise_rejects(t, new TypeError(), |
| bgFetch.fetch(uniqueTag(), 'data:text/plain,foo')); |
| }, 'data: fetch should reject'); |
| |
| backgroundFetchTest((t, bgFetch) => { |
| return promise_rejects(t, new TypeError(), |
| bgFetch.fetch(uniqueTag(), 'foobar:bazqux')); |
| }, 'unknown scheme fetch should reject'); |