зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1245768 - Implement a test for the correct error management when worker imports 3rd party scripts, r=bz
This commit is contained in:
Родитель
5b55c70961
Коммит
21900562cd
|
@ -0,0 +1,78 @@
|
||||||
|
const workerURL = 'http://mochi.test:8888/tests/dom/workers/test/importScripts_3rdParty_worker.js';
|
||||||
|
|
||||||
|
onmessage = function(a) {
|
||||||
|
if (a.data.nested) {
|
||||||
|
var worker = new Worker(workerURL);
|
||||||
|
worker.onmessage = function(event) {
|
||||||
|
postMessage(event.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
worker.onerror = function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
postMessage({ error: event instanceof ErrorEvent &&
|
||||||
|
event.filename == workerURL });
|
||||||
|
}
|
||||||
|
|
||||||
|
a.data.nested = false;
|
||||||
|
worker.postMessage(a.data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This first URL will use the same origin of this script.
|
||||||
|
var sameOriginURL = new URL(a.data.url);
|
||||||
|
var fileName1 = 42;
|
||||||
|
|
||||||
|
// This is cross-origin URL.
|
||||||
|
var crossOriginURL = new URL(a.data.url);
|
||||||
|
crossOriginURL.host = 'example.com';
|
||||||
|
crossOriginURL.port = 80;
|
||||||
|
var fileName2 = 42;
|
||||||
|
|
||||||
|
if (a.data.test == 'none') {
|
||||||
|
importScripts([crossOriginURL.href]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
importScripts([sameOriginURL.href]);
|
||||||
|
} catch(e) {
|
||||||
|
if (!(e instanceof SyntaxError)) {
|
||||||
|
postMessage({ result: false });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fileName1 = e.fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileName1 != sameOriginURL.href || !fileName1) {
|
||||||
|
postMessage({ result: false });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a.data.test == 'try') {
|
||||||
|
try {
|
||||||
|
importScripts([crossOriginURL.href]);
|
||||||
|
} catch(e) {
|
||||||
|
fileName2 = e.filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
postMessage({ result: fileName2 == workerURL });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a.data.test == 'eventListener') {
|
||||||
|
addEventListener("error", function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
postMessage({result: event instanceof ErrorEvent &&
|
||||||
|
event.filename == workerURL });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a.data.test == 'onerror') {
|
||||||
|
onerror = function(...args) {
|
||||||
|
postMessage({result: args[1] == workerURL });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
importScripts([crossOriginURL.href]);
|
||||||
|
}
|
|
@ -121,6 +121,7 @@ support-files =
|
||||||
websocket_https_worker.js
|
websocket_https_worker.js
|
||||||
worker_fileReader.js
|
worker_fileReader.js
|
||||||
fileapi_chromeScript.js
|
fileapi_chromeScript.js
|
||||||
|
importScripts_3rdParty_worker.js
|
||||||
|
|
||||||
[test_404.html]
|
[test_404.html]
|
||||||
[test_atob.html]
|
[test_atob.html]
|
||||||
|
@ -237,6 +238,7 @@ skip-if = buildapp == 'b2g'
|
||||||
skip-if = (os == "win") || (os == "mac") || toolkit == 'android' #bug 798220
|
skip-if = (os == "win") || (os == "mac") || toolkit == 'android' #bug 798220
|
||||||
[test_xhrAbort.html]
|
[test_xhrAbort.html]
|
||||||
[test_referrer.html]
|
[test_referrer.html]
|
||||||
|
[test_importScripts_3rdparty.html]
|
||||||
[test_sharedWorker_ports.html]
|
[test_sharedWorker_ports.html]
|
||||||
[test_sharedWorker_lifetime.html]
|
[test_sharedWorker_lifetime.html]
|
||||||
[test_fileReader.html]
|
[test_fileReader.html]
|
||||||
|
|
|
@ -0,0 +1,134 @@
|
||||||
|
<!--
|
||||||
|
Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
-->
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Test for 3rd party imported script and muted errors</title>
|
||||||
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
const workerURL = 'http://mochi.test:8888/tests/dom/workers/test/importScripts_3rdParty_worker.js';
|
||||||
|
|
||||||
|
var tests = [
|
||||||
|
function() {
|
||||||
|
var worker = new Worker("importScripts_3rdParty_worker.js");
|
||||||
|
worker.onmessage = function(event) {
|
||||||
|
ok("result" in event.data && event.data.result, "It seems we don't share data!");
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
|
||||||
|
worker.postMessage({ url: location.href, test: 'try', nested: false });
|
||||||
|
},
|
||||||
|
|
||||||
|
function() {
|
||||||
|
var worker = new Worker("importScripts_3rdParty_worker.js");
|
||||||
|
worker.onmessage = function(event) {
|
||||||
|
ok("result" in event.data && event.data.result, "It seems we don't share data in nested workers!");
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
|
||||||
|
worker.postMessage({ url: location.href, test: 'try', nested: true });
|
||||||
|
},
|
||||||
|
|
||||||
|
function() {
|
||||||
|
var worker = new Worker("importScripts_3rdParty_worker.js");
|
||||||
|
worker.onmessage = function(event) {
|
||||||
|
ok("result" in event.data && event.data.result, "It seems we don't share data via eventListener!");
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
|
||||||
|
worker.postMessage({ url: location.href, test: 'eventListener', nested: false });
|
||||||
|
},
|
||||||
|
|
||||||
|
function() {
|
||||||
|
var worker = new Worker("importScripts_3rdParty_worker.js");
|
||||||
|
worker.onmessage = function(event) {
|
||||||
|
ok("result" in event.data && event.data.result, "It seems we don't share data in nested workers via eventListener!");
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
|
||||||
|
worker.postMessage({ url: location.href, test: 'eventListener', nested: true });
|
||||||
|
},
|
||||||
|
|
||||||
|
function() {
|
||||||
|
var worker = new Worker("importScripts_3rdParty_worker.js");
|
||||||
|
worker.onmessage = function(event) {
|
||||||
|
ok("result" in event.data && event.data.result, "It seems we don't share data via onerror!");
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
worker.onerror = function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
worker.postMessage({ url: location.href, test: 'onerror', nested: false });
|
||||||
|
},
|
||||||
|
|
||||||
|
function() {
|
||||||
|
var worker = new Worker("importScripts_3rdParty_worker.js");
|
||||||
|
worker.onerror = function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
ok(event instanceof ErrorEvent, "ErrorEvent received.");
|
||||||
|
is(event.filename, workerURL, "ErrorEvent.filename is correct");
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
|
||||||
|
worker.postMessage({ url: location.href, test: 'none', nested: false });
|
||||||
|
},
|
||||||
|
|
||||||
|
function() {
|
||||||
|
var worker = new Worker("importScripts_3rdParty_worker.js");
|
||||||
|
worker.addEventListener("error", function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
ok(event instanceof ErrorEvent, "ErrorEvent received.");
|
||||||
|
is(event.filename, workerURL, "ErrorEvent.filename is correct");
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
|
||||||
|
worker.postMessage({ url: location.href, test: 'none', nested: false });
|
||||||
|
},
|
||||||
|
|
||||||
|
function() {
|
||||||
|
var worker = new Worker("importScripts_3rdParty_worker.js");
|
||||||
|
worker.onerror = function(event) {
|
||||||
|
ok(false, "No error should be received!");
|
||||||
|
};
|
||||||
|
|
||||||
|
worker.onmessage = function(event) {
|
||||||
|
ok("error" in event.data && event.data.error, "The error has been fully received from a nested worker");
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
worker.postMessage({ url: location.href, test: 'none', nested: true });
|
||||||
|
},
|
||||||
|
|
||||||
|
function() {
|
||||||
|
var url = URL.createObjectURL(new Blob(["%&%^&%^"]));
|
||||||
|
var worker = new Worker(url);
|
||||||
|
worker.onerror = function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
ok(event instanceof ErrorEvent, "ErrorEvent received.");
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
function next() {
|
||||||
|
if (!tests.length) {
|
||||||
|
SimpleTest.finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var test = tests.shift();
|
||||||
|
test();
|
||||||
|
}
|
||||||
|
|
||||||
|
SimpleTest.waitForExplicitFinish();
|
||||||
|
next();
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Загрузка…
Ссылка в новой задаче