Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /service-workers/service-worker/fetch-audio-tainting.https.html - WPT Dashboard Interop Dashboard
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="resources/test-helpers.sub.js?pipe=sub"></script>
<script>
promise_test(async (t) => {
const SCOPE = 'resources/empty.html';
const SCRIPT = 'resources/fetch-rewrite-worker.js';
const host_info = get_host_info();
const REMOTE_ORIGIN = host_info.HTTPS_REMOTE_ORIGIN;
const reg = await service_worker_unregister_and_register(t, SCRIPT, SCOPE);
await wait_for_state(t, reg.installing, 'activated');
const frame = await with_iframe(SCOPE);
const doc = frame.contentDocument;
const win = frame.contentWindow;
const context = new win.AudioContext();
try {
context.suspend();
const audio = doc.createElement('audio');
audio.autoplay = true;
const source = context.createMediaElementSource(audio);
const spn = context.createScriptProcessor(16384, 1, 1);
source.connect(spn).connect(context.destination);
const url = `${REMOTE_ORIGIN}/webaudio/resources/sin_440Hz_-6dBFS_1s.wav`;
audio.src = '/test?url=' + encodeURIComponent(url);
doc.body.appendChild(audio);
await new Promise((resolve) => {
audio.addEventListener('playing', resolve);
});
await context.resume();
const event = await new Promise((resolve) => {
spn.addEventListener('audioprocess', resolve);
});
const data = event.inputBuffer.getChannelData(0);
for (const e of data) {
assert_equals(e, 0);
}
} finally {
context.close();
}
}, 'Verify CORS XHR of fetch() in a Service Worker');
</script>