Consider module script evaluation with an exception as a failure
Previously, when an exception is thrown, ModulatorImplBase::ExecuteModule() returns ModuleEvaluationResult::Empty(), when CaptureEvalErrorFlag::kReport is used and top-level await is not enabled. This is considered as success, but this is inconsistent with - ModuleRecord::Evaluate() that returns ModuleEvaluationResult::FromException() (that is considered as non-success), and - Classic script evaluation. This CL makes ModulatorImplBase::ExecuteModule() return ModuleEvaluationResult with an exception in such cases. Behavior change: This changes WorkerReportingProxy::DidEvaluateTopLevelScript()'s |is_success| value from true to false when a module script have parse/evaluation/etc. errors. This makes serviceworker registration fails for such scripts, fixing crbug.com/1129795. This CL fixes content/test/data/service_worker/worker.js to use `globalThis` instead of `this`, because on module scripts `this` can't be used to get the global object. (Previously, the test using this script ServiceWorkerVersionBrowserTest.StartInstalledModuleScriptWhileOffline unexpectedly threw an exception during evaluation of `worker.js` as a module service worker top-level script, but didn't fail due to this issue) Bug: 1129795, 1129743, 1111134 Change-Id: I5443539c201e1ab220fd17f9291b307432853450 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2419054 Commit-Queue: Hiroshige Hayashizaki <hiroshige@chromium.org> Reviewed-by:Hiroki Nakagawa <nhiroki@chromium.org> Reviewed-by:
Matt Falkenhagen <falken@chromium.org> Reviewed-by:
Dominic Farolino <dom@chromium.org> Cr-Commit-Position: refs/heads/master@{#810141}
Showing
File moved
Please register or sign in to comment