Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: d7514794b61f7eca9936b334471ac444e2493ace
      
https://github.com/WebKit/WebKit/commit/d7514794b61f7eca9936b334471ac444e2493ace
  Author: Chris Dumez <[email protected]>
  Date:   2023-11-02 (Thu, 02 Nov 2023)

  Changed paths:
    A LayoutTests/webaudio/audioworklet-bad-array-type-expected.txt
    A LayoutTests/webaudio/audioworklet-bad-array-type.html
    A LayoutTests/webaudio/bad-array-type-processor.js
    M Source/WebCore/Modules/webaudio/AudioWorkletProcessor.cpp

  Log Message:
  -----------
  Bad jsCast<>() in copyDataFromJSArrayToBuses() in AudioWorkletProcessor.cpp
https://bugs.webkit.org/show_bug.cgi?id=261289
rdar://115042475

Reviewed by Ryosuke Niwa.

Use jsDynamicCast<>() instead of jsCast<>() in AudioWorkletProcessor.cpp for
safety.

* LayoutTests/webaudio/audioworklet-bad-array-type-expected.txt: Added.
* LayoutTests/webaudio/audioworklet-bad-array-type.html: Added.
* LayoutTests/webaudio/bad-array-type-processor.js: Added.
(CustomProcessor.prototype.process):
(CustomProcessor):
* Source/WebCore/Modules/webaudio/AudioWorkletProcessor.cpp:
(WebCore::toJSArray):
(WebCore::toJSObject):
(WebCore::copyDataFromJSArrayToBuses):
(WebCore::AudioWorkletProcessor::process):

Originally-landed-as: 265870.534@safari-7616-branch (3be781681be0). 
rdar://117810073
Canonical link: https://commits.webkit.org/270120@main


  Commit: 363afc5630dc2505f43771739954542fa4f58831
      
https://github.com/WebKit/WebKit/commit/363afc5630dc2505f43771739954542fa4f58831
  Author: Alexey Shvayka <[email protected]>
  Date:   2023-11-02 (Thu, 02 Nov 2023)

  Changed paths:
    A JSTests/stress/regress-114860483.js
    M Source/JavaScriptCore/runtime/JSObject.cpp
    M Source/JavaScriptCore/runtime/JSObjectInlines.h

  Log Message:
  -----------
  JSObject::anyObjectInChainMayInterceptIndexedAccesses and 
JSObject::didBecomePrototype need to account for JSGlobalProxy
https://bugs.webkit.org/show_bug.cgi?id=261287
rdar://114860483

Reviewed by Yusuke Suzuki.

Since JSObject::anyObjectInChainMayInterceptIndexedAccesses() walks up the 
[[Prototype]] chain,
whenever an indexed property is defined on a JSGlobalObject, we should add 
MayHaveIndexedAccessors
flag to JSGlobalProxy instead.

Currently, mayInterceptIndexedAccesses() is never queried on JSGlobalObject 
instances.

This change also fixes mayBePrototype() to be queried from JSGlobalProxy rather 
than JSGlobalObject,
which is correct given setPrototypeDirect() used to call didBecomePrototype() 
only on the proxy.
However, for extra robustness, this we propagate didBecomePrototype() to the 
global object as well.

* JSTests/stress/regress-114860483.js: Added.
* Source/JavaScriptCore/runtime/JSObjectInlines.h:
(JSC::JSObject::didBecomePrototype):
* Source/JavaScriptCore/runtime/JSObject.cpp:
(JSC::JSObject::notifyPresenceOfIndexedAccessors):

Originally-landed-as: 265870.535@safari-7616-branch (049d074c4b1b). 
rdar://117810163
Canonical link: https://commits.webkit.org/270121@main


  Commit: d73e7a76fb08ed4cd7678293862000808f4e843e
      
https://github.com/WebKit/WebKit/commit/d73e7a76fb08ed4cd7678293862000808f4e843e
  Author: Ryosuke Niwa <[email protected]>
  Date:   2023-11-02 (Thu, 02 Nov 2023)

  Changed paths:
    A 
LayoutTests/animations/resolve-animation-should-not-execute-scripts-expected.txt
    A LayoutTests/animations/resolve-animation-should-not-execute-scripts.html
    M 
LayoutTests/platform/ios/imported/w3c/web-platform-tests/screen-orientation/active-lock-expected.txt
    M Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp
    M Source/WebCore/Modules/paymentrequest/PaymentResponse.cpp
    M Source/WebCore/Modules/webaudio/OfflineAudioContext.cpp
    M Source/WebCore/animation/WebAnimation.cpp
    M Source/WebCore/bindings/js/JSDOMPromiseDeferred.cpp
    M Source/WebCore/dom/TaskSource.h
    M Source/WebCore/page/ScreenOrientation.cpp

  Log Message:
  -----------
  ScriptDisallowedScope bypass via a `then` getter in 
Document::updateStyleIfNeeded
https://bugs.webkit.org/show_bug.cgi?id=261256
<rdar://114545310>

Reviewed by Ryosuke Niwa.

This PR addresses several bugs:
1. There is a ScriptDisallowedScope bypass via DeferredPromise::callFunction.
2. WebAnimation::resolve() tries to execute scripts by rejecting promises 
during updateStyle.
3. WebAnimation::cancel() and WebAnimation::resetPendingTasks() also tries to 
execute scripts by
rejecting promises during updateStyle.
4. PaymentRequest and PaymentResponse try to reject promises during active DOM 
object suspension
as well as the script execution context is being stopped.
5. WebAudio tries to reject promises during active DOM object suspension.

For (1), this PR adds a release assertion in DeferredPromise::callFunction like 
the one we have in
ScriptController::canExecuteScripts. Note this has to be a thread safe variant 
since this code can be
executed in a worker thread.

For (2), this PR makes WebAnimation::resolve call updateFinishedState with 
SynchronouslyNotify::No
instead of SynchronouslyNotify::Yes. Note that in the spec [1], the only 
scenario in which this flag
is set to yes is when the author script calls finish() on an Animation object.

For (3), (4), and (5), this PR makes these actions asynchronous by scheduling a 
task / microtask
instead of synchronously rejecting promises.

[1] 
https://drafts.csswg.org/web-animations-1/#update-an-animations-finished-state

Based on original patch by Ryosuke Niwa.

* 
LayoutTests/animations/resolve-animation-should-not-execute-scripts-expected.txt:
 Added.
* LayoutTests/animations/resolve-animation-should-not-execute-scripts.html: 
Added.

* Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:
(WebCore::PaymentRequest::~PaymentRequest): Now allows pending activity to 
exist when the associated
script execution context had been stopped.
(WebCore::PaymentRequest::stop): Don't try to settle the promise in the middle 
of stopping this
active DOM object.
(WebCore::PaymentRequest::suspend): Ditto for suspension. Schedule a task to 
settle promise instead.

* Source/WebCore/Modules/paymentrequest/PaymentResponse.cpp:
(WebCore::PaymentResponse::~PaymentResponse): Now allows pending activity to 
exist when
the associated script execution context had been stopped.
(WebCore::PaymentResponse::suspend): Don't try to settle the promise in the 
middle of stopping this
active DOM object.

* Source/WebCore/Modules/webaudio/OfflineAudioContext.cpp:
(WebCore::OfflineAudioContext::uninitialize): Don't reject the promise when the 
active DOM objects
had already been stopped.

* Source/WebCore/animation/WebAnimation.cpp:
(WebCore::WebAnimation::cancel): Reject the finished promise in a newly 
scheduled task instead of
synchronously rejecting it, which would result in script execution.
(WebCore::WebAnimation::resolve): Resolve the promise asynchronously.

* Source/WebCore/bindings/js/JSDOMPromiseDeferred.cpp:
(WebCore::DeferredPromise::callFunction): Added a release assertion.
* Source/WebCore/dom/TaskSource.h:

Originally-landed-as: 265870.536@safari-7616-branch (6d865c4bf3da). 
rdar://117810274
Canonical link: https://commits.webkit.org/270122@main


  Commit: eb3a8c2925c527c15ac432c60457d5d592be71c3
      
https://github.com/WebKit/WebKit/commit/eb3a8c2925c527c15ac432c60457d5d592be71c3
  Author: Brandon Stewart <[email protected]>
  Date:   2023-11-02 (Thu, 02 Nov 2023)

  Changed paths:
    M Source/WebCore/crypto/SubtleCrypto.cpp

  Log Message:
  -----------
  SubtleCrypto:wrapKey ensure promise is not garbage collected
https://bugs.webkit.org/show_bug.cgi?id=261519
rdar://115349445

Reviewed by Tim Nguyen.

We need to ensure that the promise always remains alive when in use.
Adding a RefPtr guarantees that it will not be garbage collected.

* Source/WebCore/crypto/SubtleCrypto.cpp:
(WebCore::SubtleCrypto::wrapKey):

Originally-landed-as: 8e9332694594. rdar://117810508
Canonical link: https://commits.webkit.org/270123@main


Compare: https://github.com/WebKit/WebKit/compare/77c606018747...eb3a8c2925c5
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to