gecko-dev/testing/web-platform/tests/workers/data-url.html
Joshua Bell 79387e064f Bug 1440033 [wpt PR 9609] - Update Web Platform Tests for storage APIs in 'data:' contexts, a=testonly
Automatic update from web-platform-testsUpdate Web Platform Tests for storage APIs in 'data:' contexts

Per https://github.com/w3c/web-platform-tests/pull/4832 remove
WebSQL cases from WPT's workers/data-url*.html since it's not
otherwise tested in WPT, and the test "passes" even if the API is
not present. Also add an addition assertion that indexedDB is
present before blithely checking that using it throws.

WebSQL is not exposed to Workers in Chrome so we don't lose
coverage here - we only "passed" because the API was not present
in these contexts. The webexposed/ tests cover this.

Change-Id: I0aa05ff9e674351a2a49ba0bae8e5a9938b2cf34
Reviewed-on: https://chromium-review.googlesource.com/929602
Reviewed-by: Philip Jägenstedt <foolip@chromium.org>
Commit-Queue: Joshua Bell <jsbell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#538833}

wpt-commits: d116ec3d76ee417df0982c4dde13c1baa846cf42
wpt-pr: 9609
wpt-commits: d116ec3d76ee417df0982c4dde13c1baa846cf42
wpt-pr: 9609
2018-03-31 22:26:22 +01:00

67 lines
2.8 KiB
HTML

<!DOCTYPE html>
<title>data URL dedicated workers</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
// Helper assert functions -START-
function assert_worker_sends_pass(test_desc, mime_type, worker_code) {
async_test(function(t) {
var w = new Worker(`data:${mime_type},${worker_code}`);
w.onmessage = t.step_func_done(function(e) {
assert_equals(e.data, 'PASS');
});
w.postMessage('SEND_PASS');
}, test_desc);
}
function assert_worker_throws(test_desc, worker_code) {
assert_worker_sends_pass(test_desc, '', `try { ${worker_code}; self.postMessage("FAIL"); } catch (e) { self.postMessage("PASS"); }`);
}
function assert_worker_construction_fails(test_desc, mime_type, worker_code) {
async_test(function(t) {
var w = new Worker(`data:${mime_type},${worker_code};postMessage("PASS")`);
w.onmessage = t.step_func_done(function(e) {
assert_unreached('Should not receive any message back.');
});
w.onerror = t.step_func_done(function(e) {
assert_true(true, 'Should throw ' + e.message);
// Stop the error from being propagated to the WPT test harness
e.preventDefault();
});
}, test_desc);
}
// Helper assert functions -END-
// Actual tests -START-
// Any MIME type allowed
assert_worker_sends_pass('application/javascript MIME allowed', 'application/javascript', 'self.postMessage("PASS")');
assert_worker_sends_pass('text/plain MIME allowed', 'text/plain', 'self.postMessage("PASS")');
assert_worker_sends_pass('empty MIME allowed', '', 'self.postMessage("PASS")');
// Communications goes both ways
assert_worker_sends_pass('communication goes both ways', 'application/javascript', 'onmessage = function(e) { self.postMessage("PASS"); }');
// test access to storage APIs
// https://w3c.github.io/IndexedDB/#dom-idbfactory-open
assert_worker_sends_pass('indexedDB is present', '', 'self.postMessage("indexedDB" in self ? "PASS" : "FAIL")');
assert_worker_throws('indexedDB is inaccessible', 'self.indexedDB.open("someDBName")');
// Other standardized storage APIs are either not exposed to workers
// (e.g. window.localStorage, window.sessionStorage), or are [SecureContext]
// (e.g. self.caches).
// 'data:' workers are cross-origin
assert_worker_sends_pass('cross-origin worker', '', 'fetch("/").then(() => self.postMessage("FAIL"), () => self.postMessage("PASS"))');
// 'data:' workers have opaque origin
assert_worker_sends_pass('worker has opaque origin', 'application/javascript', 'if (self.location.origin == "null") {postMessage("PASS");} else {postMessage("FAIL");}');
setup({allow_uncaught_exception:true});
// invalid javascript will trigger an ErrorEvent
assert_worker_construction_fails('invalid javascript produces error', 'application/javascript', '}x=3');
// Actual tests -END-
</script>