Skip to content

Commit

Permalink
Bug 1466075 [wpt PR 11291] - Test identity encoding for range request…
Browse files Browse the repository at this point in the history
…s, a=testonly

Automatic update from web-platform-testsFetch: test identity encoding for range requests

For whatwg/fetch#751.
--

wpt-commits: 1421a4a976d4d8263bde4864a1ce412eba106d39
wpt-pr: 11291

UltraBlame original commit: 954f7290ff43966a30c2ab2806e6841ab3618059
  • Loading branch information
marco-c committed Oct 3, 2019
1 parent 3635c85 commit 021e9b1
Show file tree
Hide file tree
Showing 8 changed files with 166 additions and 42 deletions.
18 changes: 9 additions & 9 deletions testing/web-platform/meta/MANIFEST.json
Original file line number Diff line number Diff line change
Expand Up @@ -337310,9 +337310,9 @@
{}
]
],
"fetch/range/partial-script.window.js": [
"fetch/range/general.window.js": [
[
"/fetch/range/partial-script.window.html",
"/fetch/range/general.window.html",
{}
]
],
Expand Down Expand Up @@ -566992,39 +566992,39 @@
"support"
],
"fetch/range/general.any.js": [
"2c16c0398373fca53ae80aae1107868c8cdeb6b4",
"ad1cdfc3bdcd8e713f27831f6f08c4213726ccfb",
"testharness"
],
"fetch/range/partial-script.window.js": [
"1352080860b8671290919ab0d09cb41f4100763e",
"fetch/range/general.window.js": [
"1ce131a5aa6815d9a6bb7f4a9f2004c33d28dacd",
"testharness"
],
"fetch/range/resources/basic.html": [
"51a23151c28992fe062b36914463de216bd55fbe",
"support"
],
"fetch/range/resources/long-wav.py": [
"a9bdaefeb4e9cefd4bb678832d7ffcbe1b3167f7",
"b3e9951b240ccd97756eb6c65651223d40c78cd3",
"support"
],
"fetch/range/resources/partial-script.py": [
"d74bf301d56ad7d5ae4067e8e27ec544a21aa2ed",
"support"
],
"fetch/range/resources/range-sw.js": [
"1ec66e1dd8bf9a11b058b90e32ca7caab2233d4d",
"24fd34bdf1331eb908e0a2144f4c84af357c9fa3",
"support"
],
"fetch/range/resources/stash-take.py": [
"9d29b6276fa690d6acb366bdb4d60a12bc57ea52",
"support"
],
"fetch/range/resources/utils.js": [
"81cc493a76265cc64408fc2d41a67434ec99391a",
"fd2e57888fa9c18d46a2a4d7c9857d6cb99d087b",
"support"
],
"fetch/range/sw.https.window.js": [
"5bf1ebc9ce82990013831f2f7f55589e29a69bde",
"32cc96656190618f73951d577abe948b45abb777",
"testharness"
],
"fetch/sec-metadata/README.md": [
Expand Down
30 changes: 30 additions & 0 deletions testing/web-platform/tests/fetch/range/general.any.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@



function headersGuardNone(fill) {
if (fill) return new Headers(fill);
return new Headers();
Expand Down Expand Up @@ -58,3 +60,31 @@ test(() => {
assert_false(headers.has('Range'));
}, `Privileged header not allowed for guard type: request-no-cors`);

promise_test(async () => {
const wavURL = new URL('resources/long-wav.py', location);
const stashTakeURL = new URL('resources/stash-take.py', location);

function changeToken() {
const stashToken = token();
wavURL.searchParams.set('accept-encoding-key', stashToken);
stashTakeURL.searchParams.set('key', stashToken);
}

const rangeHeaders = [
'bytes=0-10',
'foo=0-10',
'foo',
''
];

for (const rangeHeader of rangeHeaders) {
changeToken();

await fetch(wavURL, {
headers: { Range: rangeHeader }
});

const response = await fetch(stashTakeURL);
assert_equals(await response.json(), 'identity', `Expect identity accept-encoding if range header is ${JSON.stringify(rangeHeader)}`);
}
}, `Fetch with range header will be sent with Accept-Encoding: identity`);
29 changes: 29 additions & 0 deletions testing/web-platform/tests/fetch/range/general.window.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@



const onload = new Promise(r => window.addEventListener('load', r));


promise_test(async t => {
await loadScript('resources/partial-script.py?pretend-offset=90000');
assert_true(self.scriptExecuted);
}, `Script executed from partial response`);

promise_test(async () => {
const wavURL = new URL('resources/long-wav.py', location);
const stashTakeURL = new URL('resources/stash-take.py', location);
const stashToken = token();
wavURL.searchParams.set('accept-encoding-key', stashToken);
stashTakeURL.searchParams.set('key', stashToken);



await onload;

const audio = appendAudio(document, wavURL);
await new Promise(r => audio.addEventListener('progress', r));
audio.remove();

const response = await fetch(stashTakeURL);
assert_equals(await response.json(), 'identity', `Expect identity accept-encoding on media request`);
}, `Fetch with range header will be sent with Accept-Encoding: identity`);

This file was deleted.

23 changes: 20 additions & 3 deletions testing/web-platform/tests/fetch/range/resources/long-wav.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,28 @@ def main(request, response):
response.headers.set("Cache-Control", "no-cache")

range_header = request.headers.get('Range', '')
range_header_match = range_header and re.search(r'^bytes=(\d*)-(\d*)$', range_header)
range_received_key = request.GET.first('range-received-key', '')
accept_encoding_key = request.GET.first('accept-encoding-key', '')

if range_received_key and range_header:

request.stash.put(range_received_key, 'range-header-received', '/fetch/range/')
request.server.stash.take(range_received_key, '/fetch/range/')

request.server.stash.put(range_received_key, 'range-header-received', '/fetch/range/')

if accept_encoding_key:

request.server.stash.take(
accept_encoding_key,
'/fetch/range/'
)

request.server.stash.put(
accept_encoding_key,
request.headers.get('Accept-Encoding', ''),
'/fetch/range/'
)


sample_rate = 8000
Expand All @@ -66,9 +83,9 @@ def main(request, response):
bytes_remaining_to_send = total_length
initial_write = ''

if range_header:
if range_header_match:
response.status = 206
start, end = re.search(r'^bytes=(\d*)-(\d*)$', range_header).groups()
start, end = range_header_match.groups()

start = int(start)
end = int(end) if end else 0
Expand Down
19 changes: 18 additions & 1 deletion testing/web-platform/tests/fetch/range/resources/range-sw.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ addEventListener('fetch', event => {
case 'use-stored-ranged-response':
useStoredRangeResponse(event);
return;
case 'broadcast-accept-encoding':
broadcastAcceptEncoding(event);
return;
}
});

Expand Down Expand Up @@ -108,7 +111,7 @@ function rangeHeaderPassthroughTest(event) {
promise_test(async () => {
await fetch(event.request);
const response = await fetch('stash-take.py?key=' + key);
assert_equals(await response.json(), '"range-header-received"');
assert_equals(await response.json(), 'range-header-received');
resolve();
}, `Include range header in network request`);

Expand Down Expand Up @@ -140,3 +143,17 @@ function useStoredRangeResponse(event) {
return response.clone();
}());
}

function broadcastAcceptEncoding(event) {

const request = event.request;
const id = new URL(request.url).searchParams.get('id');

broadcast({
id,
acceptEncoding: request.headers.get('Accept-Encoding')
});


event.respondWith(new Response(''));
}
15 changes: 15 additions & 0 deletions testing/web-platform/tests/fetch/range/resources/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,18 @@ function loadScript(url, { doc = document }={}) {
doc.body.appendChild(script);
})
}







function appendAudio(document, url) {
const audio = document.createElement('audio');
audio.muted = true;
audio.src = url;
audio.preload = true;
document.body.appendChild(audio);
return audio;
}
67 changes: 45 additions & 22 deletions testing/web-platform/tests/fetch/range/sw.https.window.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,21 @@


const { REMOTE_HOST } = get_host_info();
const SCOPE = 'resources/basic.html' + Math.random();

function appendAudio(document, url) {
const audio = document.createElement('audio');
audio.muted = true;
audio.src = url;
audio.preload = true;
document.body.appendChild(audio);
}
const BASE_SCOPE = 'resources/basic.html?';

async function cleanup() {
for (const iframe of document.querySelectorAll('.test-iframe')) {
iframe.parentNode.removeChild(iframe);
}

const reg = await navigator.serviceWorker.getRegistration(SCOPE);
if (reg) await reg.unregister();
for (const reg of await navigator.serviceWorker.getRegistrations()) {
await reg.unregister();
}
}

async function setupRegistration(t) {
async function setupRegistration(t, scope) {
await cleanup();
const reg = await navigator.serviceWorker.register('resources/range-sw.js', { scope: SCOPE });
const reg = await navigator.serviceWorker.register('resources/range-sw.js', { scope });
await wait_for_state(t, reg.installing, 'activated');
return reg;
}
Expand All @@ -35,14 +28,15 @@ function awaitMessage(obj, id) {
obj.addEventListener('message', function listener(event) {
if (event.data.id !== id) return;
obj.removeEventListener('message', listener);
resolve();
resolve(event.data);
});
});
}

promise_test(async t => {
const reg = await setupRegistration(t);
const iframe = await with_iframe(SCOPE);
const scope = BASE_SCOPE + Math.random();
const reg = await setupRegistration(t, scope);
const iframe = await with_iframe(scope);
const w = iframe.contentWindow;


Expand All @@ -55,8 +49,9 @@ promise_test(async t => {
}, `Defer range header filter tests to service worker`);

promise_test(async t => {
const reg = await setupRegistration(t);
const iframe = await with_iframe(SCOPE);
const scope = BASE_SCOPE + Math.random();
const reg = await setupRegistration(t, scope);
const iframe = await with_iframe(scope);
const w = iframe.contentWindow;


Expand All @@ -71,8 +66,9 @@ promise_test(async t => {
}, `Defer range header passthrough tests to service worker`);

promise_test(async t => {
await setupRegistration(t);
const iframe = await with_iframe(SCOPE);
const scope = BASE_SCOPE + Math.random();
await setupRegistration(t, scope);
const iframe = await with_iframe(scope);
const w = iframe.contentWindow;
const id = Math.random() + '';
const storedRangeResponse = awaitMessage(w.navigator.serviceWorker, id);
Expand Down Expand Up @@ -102,8 +98,9 @@ promise_test(async t => {
}, `Ranged response not allowed following no-cors ranged request`);

promise_test(async t => {
await setupRegistration(t);
const iframe = await with_iframe(SCOPE);
const scope = BASE_SCOPE + Math.random();
await setupRegistration(t, scope);
const iframe = await with_iframe(scope);
const w = iframe.contentWindow;
const id = Math.random() + '';
const storedRangeResponse = awaitMessage(w.navigator.serviceWorker, id);
Expand All @@ -126,3 +123,29 @@ promise_test(async t => {

assert_true(w.scriptExecuted, `Partial response should be executed`);
}, `Non-opaque ranged response executed`);

promise_test(async t => {
const scope = BASE_SCOPE + Math.random();
await setupRegistration(t, scope);
const iframe = await with_iframe(scope);
const w = iframe.contentWindow;
const fetchId = Math.random() + '';
const fetchBroadcast = awaitMessage(w.navigator.serviceWorker, fetchId);
const audioId = Math.random() + '';
const audioBroadcast = awaitMessage(w.navigator.serviceWorker, audioId);

const url = new URL('long-wav.py', w.location);
url.searchParams.set('action', 'broadcast-accept-encoding');
url.searchParams.set('id', fetchId);

await w.fetch(url, {
headers: { Range: 'bytes=0-10' }
});

assert_equals((await fetchBroadcast).acceptEncoding, null, "Accept-Encoding should not be set for fetch");

url.searchParams.set('id', audioId);
appendAudio(w.document, url);

assert_equals((await audioBroadcast).acceptEncoding, null, "Accept-Encoding should not be set for media");
}, `Accept-Encoding should not appear in a service worker`);

0 comments on commit 021e9b1

Please sign in to comment.