• Hiroshige Hayashizaki's avatar
    Consider module script evaluation with an exception as a failure · 843341ce
    Hiroshige Hayashizaki authored
    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: default avatarHiroki Nakagawa <nhiroki@chromium.org>
    Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
    Reviewed-by: default avatarDominic Farolino <dom@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#810141}
    843341ce
worker.js 1.04 KB