Commit d2f6756a authored by Katie Dillon's avatar Katie Dillon Committed by Commit Bot

Window onerror is not triggered bug fix

As pointed out in the bug, unhandled errors on worker threads were not
properly being propagated for the parent thread to handle as the spec
requires (https://html.spec.whatwg.org/multipage/workers.html#runtime-script-errors-2).
This fix adds in the code to do that.

Bug: 685303
Change-Id: Ie3e7ec03153a43efdc6e70b874d6b1a1d8ac35ef
Reviewed-on: https://chromium-review.googlesource.com/c/1287208
Commit-Queue: Katie Dillon <kdillon@chromium.org>
Reviewed-by: default avatarHiroshige Hayashizaki <hiroshige@chromium.org>
Reviewed-by: default avatarHiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605857}
parent 41c91bdb
...@@ -794,7 +794,6 @@ crbug.com/874695 external/wpt/websockets/opening-handshake/003.html?wss [ Slow ] ...@@ -794,7 +794,6 @@ crbug.com/874695 external/wpt/websockets/opening-handshake/003.html?wss [ Slow ]
crbug.com/874695 external/wpt/webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely.html [ Slow ] crbug.com/874695 external/wpt/webvtt/rendering/cues-with-video/processing-model/evil/9_cues_overlapping_completely.html [ Slow ]
crbug.com/874695 external/wpt/workers/constructors/SharedWorker/same-origin.html [ Slow ] crbug.com/874695 external/wpt/workers/constructors/SharedWorker/same-origin.html [ Slow ]
crbug.com/874695 external/wpt/workers/constructors/Worker/same-origin.html [ Slow ] crbug.com/874695 external/wpt/workers/constructors/Worker/same-origin.html [ Slow ]
crbug.com/874695 external/wpt/workers/interfaces/WorkerGlobalScope/onerror/propagate-to-window-onerror.html [ Slow ]
crbug.com/874695 external/wpt/workers/interfaces/WorkerUtils/importScripts/006.html [ Slow ] crbug.com/874695 external/wpt/workers/interfaces/WorkerUtils/importScripts/006.html [ Slow ]
crbug.com/874695 external/wpt/workers/semantics/multiple-workers/003.html [ Slow ] crbug.com/874695 external/wpt/workers/semantics/multiple-workers/003.html [ Slow ]
crbug.com/874695 external/wpt/workers/semantics/multiple-workers/004.html [ Slow ] crbug.com/874695 external/wpt/workers/semantics/multiple-workers/004.html [ Slow ]
......
...@@ -3892,8 +3892,6 @@ crbug.com/655458 external/wpt/workers/Worker_terminate_event_queue.htm [ Pass Ti ...@@ -3892,8 +3892,6 @@ crbug.com/655458 external/wpt/workers/Worker_terminate_event_queue.htm [ Pass Ti
crbug.com/655458 external/wpt/workers/interfaces/WorkerUtils/navigator/language.html [ Failure ] crbug.com/655458 external/wpt/workers/interfaces/WorkerUtils/navigator/language.html [ Failure ]
crbug.com/655458 external/wpt/workers/constructors/SharedWorker/interface-objects.html [ Failure ] crbug.com/655458 external/wpt/workers/constructors/SharedWorker/interface-objects.html [ Failure ]
crbug.com/655458 external/wpt/workers/constructors/SharedWorker/unresolvable-url.html [ Failure ] crbug.com/655458 external/wpt/workers/constructors/SharedWorker/unresolvable-url.html [ Failure ]
crbug.com/685303 external/wpt/workers/interfaces/WorkerGlobalScope/onerror/propagate-to-window-onerror.html [ Failure Timeout ]
crbug.com/685303 external/wpt/workers/constructors/Worker/AbstractWorker.onerror.html [ Failure Timeout ]
crbug.com/655458 external/wpt/workers/interfaces/WorkerUtils/importScripts/006.html [ Failure Timeout ] crbug.com/655458 external/wpt/workers/interfaces/WorkerUtils/importScripts/006.html [ Failure Timeout ]
crbug.com/655458 external/wpt/workers/semantics/multiple-workers/007.html [ Timeout ] crbug.com/655458 external/wpt/workers/semantics/multiple-workers/007.html [ Timeout ]
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
<title>DedicatedWorker: import failure</title> <title>DedicatedWorker: import failure</title>
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script> setup({allow_uncaught_exception: true}); </script>
<script> <script>
promise_test(async () => { promise_test(async () => {
......
...@@ -9,7 +9,10 @@ let worker; ...@@ -9,7 +9,10 @@ let worker;
window.onmessage = e => { window.onmessage = e => {
worker = new Worker(e.data, { type: 'module' }); worker = new Worker(e.data, { type: 'module' });
worker.onmessage = msg => window.opener.postMessage(msg.data, '*'); worker.onmessage = msg => window.opener.postMessage(msg.data, '*');
worker.onerror = err => window.opener.postMessage(['ERROR'], '*'); worker.onerror = err => {
window.opener.postMessage(['ERROR'], '*');
err.preventDefault();
};
}; };
window.opener.postMessage('LOADED', '*'); window.opener.postMessage('LOADED', '*');
</script> </script>
CONSOLE ERROR: line 7: Uncaught ReferenceError: foo is not defined
This tests that unhandled exceptions in a worker's onerror handler trigger 'worker.onerror'. This tests that unhandled exceptions in a worker's onerror handler trigger 'worker.onerror'.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
......
...@@ -11,6 +11,10 @@ function log(message) ...@@ -11,6 +11,10 @@ function log(message)
if (window.testRunner) { if (window.testRunner) {
testRunner.dumpAsText(); testRunner.dumpAsText();
testRunner.waitUntilDone(); testRunner.waitUntilDone();
// Disable console messages because console errors about worker script
// fetching can be printed depending on timing of worker termination and
// that confuses the test expectations.
testRunner.setDumpConsoleMessages(false);
} }
var worker = new Worker('resources/worker-common.js'); var worker = new Worker('resources/worker-common.js');
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "third_party/blink/renderer/core/workers/dedicated_worker_thread.h" #include "third_party/blink/renderer/core/workers/dedicated_worker_thread.h"
#include "third_party/blink/renderer/core/workers/worker_options.h" #include "third_party/blink/renderer/core/workers/worker_options.h"
#include "third_party/blink/renderer/platform/cross_thread_functional.h" #include "third_party/blink/renderer/platform/cross_thread_functional.h"
#include "third_party/blink/renderer/platform/loader/fetch/access_control_status.h"
#include "third_party/blink/renderer/platform/web_task_runner.h" #include "third_party/blink/renderer/platform/web_task_runner.h"
#include "third_party/blink/renderer/platform/wtf/wtf.h" #include "third_party/blink/renderer/platform/wtf/wtf.h"
...@@ -184,6 +185,10 @@ void DedicatedWorkerMessagingProxy::DispatchErrorEvent( ...@@ -184,6 +185,10 @@ void DedicatedWorkerMessagingProxy::DispatchErrorEvent(
CrossThreadBind(&DedicatedWorkerObjectProxy::ProcessUnhandledException, CrossThreadBind(&DedicatedWorkerObjectProxy::ProcessUnhandledException,
CrossThreadUnretained(worker_object_proxy_.get()), CrossThreadUnretained(worker_object_proxy_.get()),
exception_id, CrossThreadUnretained(GetWorkerThread()))); exception_id, CrossThreadUnretained(GetWorkerThread())));
// Propagate an unhandled error to the parent context.
AccessControlStatus access_control_status = kSharableCrossOrigin;
GetExecutionContext()->DispatchErrorEvent(event, access_control_status);
} }
void DedicatedWorkerMessagingProxy::Trace(blink::Visitor* visitor) { void DedicatedWorkerMessagingProxy::Trace(blink::Visitor* visitor) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment