147 lines
3.4 KiB
HTML
147 lines
3.4 KiB
HTML
<script>
|
|
function ok(a, msg) {
|
|
parent.postMessage({ type: "check", status: !!a, message: msg }, "*");
|
|
}
|
|
|
|
function is(a, b, msg) {
|
|
ok(a === b, msg);
|
|
}
|
|
|
|
function testObserver() {
|
|
ok("FetchObserver" in self, "We have a FetchObserver prototype");
|
|
|
|
fetch('http://mochi.test:8888/tests/dom/tests/mochitest/fetch/slow.sjs', { observe: o => {
|
|
ok(!!o, "We have an observer");
|
|
ok(o instanceof FetchObserver, "The correct object has been passed");
|
|
is(o.state, "requesting", "By default the state is requesting");
|
|
next();
|
|
}});
|
|
}
|
|
|
|
function testObserveAbort() {
|
|
var fc = new AbortController();
|
|
|
|
fetch('http://mochi.test:8888/tests/dom/tests/mochitest/fetch/slow.sjs', {
|
|
signal: fc.signal,
|
|
observe: o => {
|
|
o.onstatechange = () => {
|
|
ok(true, "StateChange event dispatched");
|
|
if (o.state == "aborted") {
|
|
ok(true, "Aborted!");
|
|
next();
|
|
}
|
|
}
|
|
fc.abort();
|
|
}
|
|
});
|
|
}
|
|
|
|
function testObserveComplete() {
|
|
var fc = new AbortController();
|
|
|
|
fetch('http://mochi.test:8888/tests/dom/tests/mochitest/fetch/slow.sjs', {
|
|
signal: fc.signal,
|
|
observe: o => {
|
|
o.onstatechange = () => {
|
|
ok(true, "StateChange event dispatched");
|
|
if (o.state == "complete") {
|
|
ok(true, "Operation completed");
|
|
next();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function testObserveErrored() {
|
|
var fc = new AbortController();
|
|
|
|
fetch('foo: bar', {
|
|
signal: fc.signal,
|
|
observe: o => {
|
|
o.onstatechange = () => {
|
|
ok(true, "StateChange event dispatched");
|
|
if (o.state == "errored") {
|
|
ok(true, "Operation completed");
|
|
next();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function testObserveResponding() {
|
|
var fc = new AbortController();
|
|
|
|
fetch('http://mochi.test:8888/tests/dom/tests/mochitest/fetch/slow.sjs', {
|
|
signal: fc.signal,
|
|
observe: o => {
|
|
o.onstatechange = () => {
|
|
if (o.state == "responding") {
|
|
ok(true, "We have responding events");
|
|
next();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function workify(worker) {
|
|
function methods() {
|
|
function ok(a, msg) {
|
|
postMessage( { type: 'check', state: !!a, message: msg });
|
|
};
|
|
function is(a, b, msg) {
|
|
postMessage( { type: 'check', state: a === b, message: msg });
|
|
};
|
|
function next() {
|
|
postMessage( { type: 'finish' });
|
|
};
|
|
}
|
|
|
|
var str = methods.toString();
|
|
var methodsContent = str.substring(0, str.length - 1).split('\n').splice(1).join('\n');
|
|
|
|
str = worker.toString();
|
|
var workerContent = str.substring(0, str.length - 1).split('\n').splice(1).join('\n');
|
|
|
|
var content = methodsContent + workerContent;
|
|
var url = URL.createObjectURL(new Blob([content], { type: "application/javascript" }));
|
|
var w = new Worker(url);
|
|
w.onmessage = e => {
|
|
if (e.data.type == 'check') {
|
|
ok(e.data.state, "WORKER: " + e.data.message);
|
|
} else if (e.data.type == 'finish') {
|
|
next();
|
|
} else {
|
|
ok(false, "Something went wrong");
|
|
}
|
|
}
|
|
}
|
|
|
|
var steps = [
|
|
testObserver,
|
|
testObserveAbort,
|
|
function() { workify(testObserveAbort); },
|
|
testObserveComplete,
|
|
function() { workify(testObserveComplete); },
|
|
testObserveErrored,
|
|
function() { workify(testObserveErrored); },
|
|
testObserveResponding,
|
|
function() { workify(testObserveResponding); },
|
|
];
|
|
|
|
function next() {
|
|
if (!steps.length) {
|
|
parent.postMessage({ type: "finish" }, "*");
|
|
return;
|
|
}
|
|
|
|
var step = steps.shift();
|
|
step();
|
|
}
|
|
|
|
next();
|
|
|
|
</script>
|