Skip to content

[Model Element] Model with autoplay sometimes does not play after page reload #47396

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

achan00
Copy link
Contributor

@achan00 achan00 commented Jun 30, 2025

1b98465

[Model Element] Model with autoplay sometimes does not play after page reload
https://bugs.webkit.org/show_bug.cgi?id=295221
rdar://154646578

Reviewed by Mike Wyrzykowski.

This issue happens under a timing condition where the model got suspended
before the model process has finished loading it. That can happen if the model
process crashes during model load, or if page navigation happens before the
model finishes loading.

In HTMLModelElement::unloadModelPlayer(), we try to save off the current state
of the model player before the deleting the model player, so we can restore to
that state when the element is resumed and a new model player is created.
However, if the model player hasn't even finished loading when unloadModelPlayer()
is called, its animation/transform states won't be valid. Before this fix, the
invalid animation state returned has paused=true, so after the model element is
resumed and the model player is created with that animation state, it then
incorrectly pauses the animation.

To fix this, return null for ModelProcessModelPlayer::currentAnimationState()
and ModelProcessModelPlayer::currentTransformState() if the model load has not
completed successfully. We can tell whether the model load has finished loading
by checking for the presence of a non-null m_boundingBoxExtents.

* LayoutTests/model-element/model-element-suspend-before-ready-expected.txt: Added.
* LayoutTests/model-element/model-element-suspend-before-ready.html: Added.
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.cpp:
(WebKit::ModelProcessModelPlayer::currentAnimationState const):
(WebKit::ModelProcessModelPlayer::currentTransformState const):

Canonical link: https://commits.webkit.org/296870@main

637da4d

Misc iOS, visionOS, tvOS & watchOS macOS Linux Windows
✅ 🧪 style ✅ 🛠 ios ✅ 🛠 mac ✅ 🛠 wpe ✅ 🛠 win
✅ 🛠 ios-sim ✅ 🛠 mac-AS-debug ✅ 🧪 wpe-wk2 ⏳ 🧪 win-tests
✅ 🧪 webkitperl ✅ 🧪 ios-wk2 ✅ 🧪 api-mac ✅ 🧪 api-wpe
✅ 🧪 ios-wk2-wpt loading-orange 🧪 mac-wk1 ✅ 🛠 wpe-cairo
✅ 🧪 api-ios ✅ 🧪 mac-wk2 ✅ 🛠 gtk
✅ 🛠 vision ✅ 🧪 mac-AS-debug-wk2 ✅ 🧪 gtk-wk2
✅ 🛠 vision-sim ✅ 🧪 mac-wk2-stress ✅ 🧪 api-gtk
✅ 🛠 🧪 merge ✅ 🧪 vision-wk2 ✅ 🧪 mac-intel-wk2 ✅ 🛠 playstation
✅ 🛠 tv ✅ 🛠 mac-safer-cpp
✅ 🛠 tv-sim
✅ 🛠 watch
✅ 🛠 watch-sim

@achan00 achan00 requested a review from cdumez as a code owner June 30, 2025 20:32
@achan00 achan00 self-assigned this Jun 30, 2025
@achan00 achan00 added the WebKit Misc. For miscellaneous bugs in the WebKit framework (and not JavaScriptCore or WebCore). label Jun 30, 2025
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jun 30, 2025
@achan00 achan00 removed the merging-blocked Applied to prevent a change from being merged label Jun 30, 2025
@achan00 achan00 force-pushed the eng/Model-Element-Model-with-autoplay-sometimes-does-not-play-after-page-reload branch from c1b3218 to 637da4d Compare July 1, 2025 01:31
@achan00 achan00 added the merge-queue Applied to send a pull request to merge-queue label Jul 1, 2025
…e reload

https://bugs.webkit.org/show_bug.cgi?id=295221
rdar://154646578

Reviewed by Mike Wyrzykowski.

This issue happens under a timing condition where the model got suspended
before the model process has finished loading it. That can happen if the model
process crashes during model load, or if page navigation happens before the
model finishes loading.

In HTMLModelElement::unloadModelPlayer(), we try to save off the current state
of the model player before the deleting the model player, so we can restore to
that state when the element is resumed and a new model player is created.
However, if the model player hasn't even finished loading when unloadModelPlayer()
is called, its animation/transform states won't be valid. Before this fix, the
invalid animation state returned has paused=true, so after the model element is
resumed and the model player is created with that animation state, it then
incorrectly pauses the animation.

To fix this, return null for ModelProcessModelPlayer::currentAnimationState()
and ModelProcessModelPlayer::currentTransformState() if the model load has not
completed successfully. We can tell whether the model load has finished loading
by checking for the presence of a non-null m_boundingBoxExtents.

* LayoutTests/model-element/model-element-suspend-before-ready-expected.txt: Added.
* LayoutTests/model-element/model-element-suspend-before-ready.html: Added.
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.cpp:
(WebKit::ModelProcessModelPlayer::currentAnimationState const):
(WebKit::ModelProcessModelPlayer::currentTransformState const):

Canonical link: https://commits.webkit.org/296870@main
@webkit-commit-queue webkit-commit-queue force-pushed the eng/Model-Element-Model-with-autoplay-sometimes-does-not-play-after-page-reload branch from 637da4d to 1b98465 Compare July 1, 2025 16:54
@webkit-commit-queue
Copy link
Collaborator

Committed 296870@main (1b98465): https://commits.webkit.org/296870@main

Reviewed commits have been landed. Closing PR #47396 and removing active labels.

@webkit-commit-queue webkit-commit-queue merged commit 1b98465 into WebKit:main Jul 1, 2025
@webkit-commit-queue webkit-commit-queue removed the merge-queue Applied to send a pull request to merge-queue label Jul 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
WebKit Misc. For miscellaneous bugs in the WebKit framework (and not JavaScriptCore or WebCore).
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants