Diff
Modified: trunk/Source/WebCore/ChangeLog (286065 => 286066)
--- trunk/Source/WebCore/ChangeLog 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/ChangeLog 2021-11-19 18:21:57 UTC (rev 286066)
@@ -1,5 +1,32 @@
2021-11-19 Antoine Quint <[email protected]>
+ [Model] add support for controlling looping animations
+ https://bugs.webkit.org/show_bug.cgi?id=233356
+ <rdar://problem/85428884>
+
+ Reviewed by Wenson Hsieh.
+
+ We add two new promise-based methods to the HTMLModelElement IDL to control the looping state
+ of the animation built into the USDZ asset: isLoopingAnimation() and setIsLoopingAnimation().
+ All these methods are promise-based.
+
+ * Modules/model-element/HTMLModelElement.cpp:
+ (WebCore::HTMLModelElement::isLoopingAnimation):
+ (WebCore::HTMLModelElement::setIsLoopingAnimation):
+ * Modules/model-element/HTMLModelElement.h:
+ * Modules/model-element/HTMLModelElement.idl:
+ * Modules/model-element/ModelPlayer.h:
+ * Modules/model-element/dummy/DummyModelPlayer.cpp:
+ (WebCore::DummyModelPlayer::isLoopingAnimation):
+ (WebCore::DummyModelPlayer::setIsLoopingAnimation):
+ * Modules/model-element/dummy/DummyModelPlayer.h:
+ * Modules/model-element/scenekit/SceneKitModelPlayer.h:
+ * Modules/model-element/scenekit/SceneKitModelPlayer.mm:
+ (WebCore::SceneKitModelPlayer::isLoopingAnimation):
+ (WebCore::SceneKitModelPlayer::setIsLoopingAnimation):
+
+2021-11-19 Antoine Quint <[email protected]>
+
[Model] add audio support
https://bugs.webkit.org/show_bug.cgi?id=233365
<rdar://problem/85428982>
Modified: trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp (286065 => 286066)
--- trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp 2021-11-19 18:21:57 UTC (rev 286066)
@@ -437,6 +437,36 @@
setAnimationIsPlaying(false, WTFMove(promise));
}
+void HTMLModelElement::isLoopingAnimation(IsLoopingAnimationPromise&& promise)
+{
+ if (!m_modelPlayer) {
+ promise.reject();
+ return;
+ }
+
+ m_modelPlayer->isLoopingAnimation([promise = WTFMove(promise)] (std::optional<bool> isLooping) mutable {
+ if (!isLooping)
+ promise.reject();
+ else
+ promise.resolve(*isLooping);
+ });
+}
+
+void HTMLModelElement::setIsLoopingAnimation(bool isLooping, DOMPromiseDeferred<void>&& promise)
+{
+ if (!m_modelPlayer) {
+ promise.reject();
+ return;
+ }
+
+ m_modelPlayer->setIsLoopingAnimation(isLooping, [promise = WTFMove(promise)] (bool success) mutable {
+ if (success)
+ promise.resolve();
+ else
+ promise.reject();
+ });
+}
+
// MARK: - Audio support.
void HTMLModelElement::hasAudio(HasAudioPromise&& promise)
Modified: trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h (286065 => 286066)
--- trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h 2021-11-19 18:21:57 UTC (rev 286066)
@@ -80,6 +80,10 @@
void playAnimation(DOMPromiseDeferred<void>&&);
void pauseAnimation(DOMPromiseDeferred<void>&&);
+ using IsLoopingAnimationPromise = DOMPromiseDeferred<IDLBoolean>;
+ void isLoopingAnimation(IsLoopingAnimationPromise&&);
+ void setIsLoopingAnimation(bool, DOMPromiseDeferred<void>&&);
+
using HasAudioPromise = DOMPromiseDeferred<IDLBoolean>;
void hasAudio(HasAudioPromise&&);
using IsMutedPromise = DOMPromiseDeferred<IDLBoolean>;
Modified: trunk/Source/WebCore/Modules/model-element/HTMLModelElement.idl (286065 => 286066)
--- trunk/Source/WebCore/Modules/model-element/HTMLModelElement.idl 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/Modules/model-element/HTMLModelElement.idl 2021-11-19 18:21:57 UTC (rev 286066)
@@ -41,6 +41,9 @@
Promise<undefined> playAnimation();
Promise<undefined> pauseAnimation();
+ Promise<boolean> isLoopingAnimation();
+ Promise<undefined> setIsLoopingAnimation(boolean looping);
+
Promise<boolean> hasAudio();
Promise<boolean> isMuted();
Promise<undefined> setIsMuted(boolean isMuted);
Modified: trunk/Source/WebCore/Modules/model-element/ModelPlayer.h (286065 => 286066)
--- trunk/Source/WebCore/Modules/model-element/ModelPlayer.h 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/Modules/model-element/ModelPlayer.h 2021-11-19 18:21:57 UTC (rev 286066)
@@ -53,6 +53,8 @@
virtual void setCamera(HTMLModelElementCamera, CompletionHandler<void(bool success)>&&) = 0;
virtual void isPlayingAnimation(CompletionHandler<void(std::optional<bool>&&)>&&) = 0;
virtual void setAnimationIsPlaying(bool, CompletionHandler<void(bool success)>&&) = 0;
+ virtual void isLoopingAnimation(CompletionHandler<void(std::optional<bool>&&)>&&) = 0;
+ virtual void setIsLoopingAnimation(bool, CompletionHandler<void(bool success)>&&) = 0;
virtual void hasAudio(CompletionHandler<void(std::optional<bool>&&)>&&) = 0;
virtual void isMuted(CompletionHandler<void(std::optional<bool>&&)>&&) = 0;
virtual void setIsMuted(bool, CompletionHandler<void(bool success)>&&) = 0;
Modified: trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp (286065 => 286066)
--- trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp 2021-11-19 18:21:57 UTC (rev 286066)
@@ -90,6 +90,14 @@
{
}
+void DummyModelPlayer::isLoopingAnimation(CompletionHandler<void(std::optional<bool>&&)>&&)
+{
+}
+
+void DummyModelPlayer::setIsLoopingAnimation(bool, CompletionHandler<void(bool success)>&&)
+{
+}
+
void DummyModelPlayer::isMuted(CompletionHandler<void(std::optional<bool>&&)>&&)
{
}
Modified: trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.h (286065 => 286066)
--- trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.h 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.h 2021-11-19 18:21:57 UTC (rev 286066)
@@ -51,6 +51,8 @@
void setCamera(WebCore::HTMLModelElementCamera, CompletionHandler<void(bool success)>&&) override;
void isPlayingAnimation(CompletionHandler<void(std::optional<bool>&&)>&&) override;
void setAnimationIsPlaying(bool, CompletionHandler<void(bool success)>&&) override;
+ void isLoopingAnimation(CompletionHandler<void(std::optional<bool>&&)>&&) override;
+ void setIsLoopingAnimation(bool, CompletionHandler<void(bool success)>&&) override;
void hasAudio(CompletionHandler<void(std::optional<bool>&&)>&&) override;
void isMuted(CompletionHandler<void(std::optional<bool>&&)>&&) override;
void setIsMuted(bool, CompletionHandler<void(bool success)>&&) override;
Modified: trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.h (286065 => 286066)
--- trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.h 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.h 2021-11-19 18:21:57 UTC (rev 286066)
@@ -65,6 +65,8 @@
void setCamera(HTMLModelElementCamera, CompletionHandler<void(bool success)>&&) override;
void isPlayingAnimation(CompletionHandler<void(std::optional<bool>&&)>&&) override;
void setAnimationIsPlaying(bool, CompletionHandler<void(bool success)>&&) override;
+ void isLoopingAnimation(CompletionHandler<void(std::optional<bool>&&)>&&) override;
+ void setIsLoopingAnimation(bool, CompletionHandler<void(bool success)>&&) override;
void hasAudio(CompletionHandler<void(std::optional<bool>&&)>&&) override;
void isMuted(CompletionHandler<void(std::optional<bool>&&)>&&) override;
void setIsMuted(bool, CompletionHandler<void(bool success)>&&) override;
Modified: trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.mm (286065 => 286066)
--- trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.mm 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.mm 2021-11-19 18:21:57 UTC (rev 286066)
@@ -104,6 +104,14 @@
{
}
+void SceneKitModelPlayer::isLoopingAnimation(CompletionHandler<void(std::optional<bool>&&)>&&)
+{
+}
+
+void SceneKitModelPlayer::setIsLoopingAnimation(bool, CompletionHandler<void(bool success)>&&)
+{
+}
+
void SceneKitModelPlayer::hasAudio(CompletionHandler<void(std::optional<bool>&&)>&&)
{
}
Modified: trunk/Source/WebCore/PAL/ChangeLog (286065 => 286066)
--- trunk/Source/WebCore/PAL/ChangeLog 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/PAL/ChangeLog 2021-11-19 18:21:57 UTC (rev 286066)
@@ -1,5 +1,18 @@
2021-11-19 Antoine Quint <[email protected]>
+ [Model] add support for controlling looping animations
+ https://bugs.webkit.org/show_bug.cgi?id=233356
+ <rdar://problem/85428884>
+
+ Reviewed by Wenson Hsieh.
+
+ Add the new ARQL SPIs we are using to control animation looping.
+
+ * pal/spi/ios/SystemPreviewSPI.h:
+ * pal/spi/mac/SystemPreviewSPI.h:
+
+2021-11-19 Antoine Quint <[email protected]>
+
[Model] add audio support
https://bugs.webkit.org/show_bug.cgi?id=233365
<rdar://problem/85428982>
Modified: trunk/Source/WebCore/PAL/pal/spi/ios/SystemPreviewSPI.h (286065 => 286066)
--- trunk/Source/WebCore/PAL/pal/spi/ios/SystemPreviewSPI.h 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/PAL/pal/spi/ios/SystemPreviewSPI.h 2021-11-19 18:21:57 UTC (rev 286066)
@@ -108,6 +108,7 @@
- (void)getCameraTransform:(ASVCameraTransformReplyBlock)reply;
- (void)setCameraTransform:(simd_float3)transform;
+@property (nonatomic, readwrite) BOOL isLooping;
@property (nonatomic, readonly) BOOL isPlaying;
typedef void (^ASVSetIsPlayingReplyBlock) (BOOL isPlaying, NSError * _Nullable error);
- (void)setIsPlaying:(BOOL)isPlaying reply:(ASVSetIsPlayingReplyBlock)reply;
Modified: trunk/Source/WebCore/PAL/pal/spi/mac/SystemPreviewSPI.h (286065 => 286066)
--- trunk/Source/WebCore/PAL/pal/spi/mac/SystemPreviewSPI.h 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebCore/PAL/pal/spi/mac/SystemPreviewSPI.h 2021-11-19 18:21:57 UTC (rev 286066)
@@ -58,6 +58,7 @@
- (void)getCameraTransform:(ASVCameraTransformReplyBlock)reply;
- (void)setCameraTransform:(simd_float3)transform;
+@property (nonatomic, readwrite) BOOL isLooping;
@property (nonatomic, readonly) BOOL isPlaying;
typedef void (^ASVSetIsPlayingReplyBlock) (BOOL isPlaying, NSError * _Nullable error);
- (void)setIsPlaying:(BOOL)isPlaying reply:(ASVSetIsPlayingReplyBlock)reply;
Modified: trunk/Source/WebKit/ChangeLog (286065 => 286066)
--- trunk/Source/WebKit/ChangeLog 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebKit/ChangeLog 2021-11-19 18:21:57 UTC (rev 286066)
@@ -1,5 +1,31 @@
2021-11-19 Antoine Quint <[email protected]>
+ [Model] add support for controlling looping animations
+ https://bugs.webkit.org/show_bug.cgi?id=233356
+ <rdar://problem/85428884>
+
+ Reviewed by Wenson Hsieh.
+
+ Expose new WebPageProxy messages to let the WebProcess message the UIProcess
+ to call into ASVInlinePreview methods to get and set the animation's looping
+ state.
+
+ * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
+ (WebKit::ModelElementController::isLoopingAnimationForModelElement):
+ (WebKit::ModelElementController::setIsLoopingAnimationForModelElement):
+ * UIProcess/ModelElementController.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::modelElementIsLoopingAnimation):
+ (WebKit::WebPageProxy::modelElementSetIsLoopingAnimation):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * WebProcess/Model/ARKitInlinePreviewModelPlayer.h:
+ * WebProcess/Model/ARKitInlinePreviewModelPlayer.mm:
+ (WebKit::ARKitInlinePreviewModelPlayer::isLoopingAnimation):
+ (WebKit::ARKitInlinePreviewModelPlayer::setIsLoopingAnimation):
+
+2021-11-19 Antoine Quint <[email protected]>
+
[Model] add audio support
https://bugs.webkit.org/show_bug.cgi?id=233365
<rdar://problem/85428982>
Modified: trunk/Source/WebKit/UIProcess/Cocoa/ModelElementControllerCocoa.mm (286065 => 286066)
--- trunk/Source/WebKit/UIProcess/Cocoa/ModelElementControllerCocoa.mm 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebKit/UIProcess/Cocoa/ModelElementControllerCocoa.mm 2021-11-19 18:21:57 UTC (rev 286066)
@@ -359,6 +359,38 @@
#endif
}
+void ModelElementController::isLoopingAnimationForModelElement(ModelIdentifier modelIdentifier, CompletionHandler<void(Expected<bool, WebCore::ResourceError>)>&& completionHandler)
+{
+ auto* preview = previewForModelIdentifier(modelIdentifier);
+ if (!previewHasAnimationSupport(preview)) {
+ completionHandler(makeUnexpected(WebCore::ResourceError { WebCore::ResourceError::Type::General }));
+ return;
+ }
+
+#if ENABLE(ARKIT_INLINE_PREVIEW_ANIMATIONS_CONTROL)
+ completionHandler([preview isLooping]);
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+void ModelElementController::setIsLoopingAnimationForModelElement(ModelIdentifier modelIdentifier, bool isLooping, CompletionHandler<void(bool)>&& completionHandler)
+{
+ auto* preview = previewForModelIdentifier(modelIdentifier);
+ if (!previewHasAnimationSupport(preview)) {
+ completionHandler(false);
+ return;
+ }
+
+#if ENABLE(ARKIT_INLINE_PREVIEW_ANIMATIONS_CONTROL)
+ preview.isLooping = isLooping;
+ completionHandler(true);
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+
static bool previewHasAudioSupport(ASVInlinePreview *preview)
{
#if ENABLE(ARKIT_INLINE_PREVIEW_AUDIO_CONTROL)
Modified: trunk/Source/WebKit/UIProcess/ModelElementController.h (286065 => 286066)
--- trunk/Source/WebKit/UIProcess/ModelElementController.h 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebKit/UIProcess/ModelElementController.h 2021-11-19 18:21:57 UTC (rev 286066)
@@ -56,6 +56,8 @@
void setCameraForModelElement(ModelIdentifier, WebCore::HTMLModelElementCamera, CompletionHandler<void(bool)>&&);
void isPlayingAnimationForModelElement(ModelIdentifier, CompletionHandler<void(Expected<bool, WebCore::ResourceError>)>&&);
void setAnimationIsPlayingForModelElement(ModelIdentifier, bool, CompletionHandler<void(bool)>&&);
+ void isLoopingAnimationForModelElement(ModelIdentifier, CompletionHandler<void(Expected<bool, WebCore::ResourceError>)>&&);
+ void setIsLoopingAnimationForModelElement(ModelIdentifier, bool, CompletionHandler<void(bool)>&&);
void hasAudioForModelElement(ModelIdentifier, CompletionHandler<void(Expected<bool, WebCore::ResourceError>)>&&);
void isMutedForModelElement(ModelIdentifier, CompletionHandler<void(Expected<bool, WebCore::ResourceError>)>&&);
void setIsMutedForModelElement(ModelIdentifier, bool, CompletionHandler<void(bool)>&&);
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (286065 => 286066)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2021-11-19 18:21:57 UTC (rev 286066)
@@ -10853,6 +10853,16 @@
modelElementController()->setAnimationIsPlayingForModelElement(modelIdentifier, isPlaying, WTFMove(completionHandler));
}
+void WebPageProxy::modelElementIsLoopingAnimation(ModelIdentifier modelIdentifier, CompletionHandler<void(Expected<bool, ResourceError>)>&& completionHandler)
+{
+ modelElementController()->isLoopingAnimationForModelElement(modelIdentifier, WTFMove(completionHandler));
+}
+
+void WebPageProxy::modelElementSetIsLoopingAnimation(ModelIdentifier modelIdentifier, bool isLooping, CompletionHandler<void(bool)>&& completionHandler)
+{
+ modelElementController()->setIsLoopingAnimationForModelElement(modelIdentifier, isLooping, WTFMove(completionHandler));
+}
+
void WebPageProxy::modelElementHasAudio(ModelIdentifier modelIdentifier, CompletionHandler<void(Expected<bool, ResourceError>)>&& completionHandler)
{
modelElementController()->hasAudioForModelElement(modelIdentifier, WTFMove(completionHandler));
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (286065 => 286066)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2021-11-19 18:21:57 UTC (rev 286066)
@@ -592,6 +592,8 @@
void modelElementSetCamera(ModelIdentifier, WebCore::HTMLModelElementCamera, CompletionHandler<void(bool)>&&);
void modelElementIsPlayingAnimation(ModelIdentifier, CompletionHandler<void(Expected<bool, WebCore::ResourceError>)>&&);
void modelElementSetAnimationIsPlaying(ModelIdentifier, bool, CompletionHandler<void(bool)>&&);
+ void modelElementIsLoopingAnimation(ModelIdentifier, CompletionHandler<void(Expected<bool, WebCore::ResourceError>)>&&);
+ void modelElementSetIsLoopingAnimation(ModelIdentifier, bool, CompletionHandler<void(bool)>&&);
void modelElementHasAudio(ModelIdentifier, CompletionHandler<void(Expected<bool, WebCore::ResourceError>)>&&);
void modelElementIsMuted(ModelIdentifier, CompletionHandler<void(Expected<bool, WebCore::ResourceError>)>&&);
void modelElementSetIsMuted(ModelIdentifier, bool, CompletionHandler<void(bool)>&&);
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in (286065 => 286066)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in 2021-11-19 18:21:57 UTC (rev 286066)
@@ -599,6 +599,8 @@
ModelElementSetCamera(struct WebKit::ModelIdentifier modelIdentifier, struct WebCore::HTMLModelElementCamera camera) -> (bool success) Async
ModelElementIsPlayingAnimation(struct WebKit::ModelIdentifier modelIdentifier) -> (Expected<bool, WebCore::ResourceError> result) Async
ModelElementSetAnimationIsPlaying(struct WebKit::ModelIdentifier modelIdentifier, bool isPlaying) -> (bool success) Async
+ ModelElementIsLoopingAnimation(struct WebKit::ModelIdentifier modelIdentifier) -> (Expected<bool, WebCore::ResourceError> result) Async
+ ModelElementSetIsLoopingAnimation(struct WebKit::ModelIdentifier modelIdentifier, bool isLooping) -> (bool success) Async
ModelElementHasAudio(struct WebKit::ModelIdentifier modelIdentifier) -> (Expected<bool, WebCore::ResourceError> result) Async
ModelElementIsMuted(struct WebKit::ModelIdentifier modelIdentifier) -> (Expected<bool, WebCore::ResourceError> result) Async
ModelElementSetIsMuted(struct WebKit::ModelIdentifier modelIdentifier, bool isMuted) -> (bool success) Async
Modified: trunk/Source/WebKit/WebProcess/Model/ARKitInlinePreviewModelPlayer.h (286065 => 286066)
--- trunk/Source/WebKit/WebProcess/Model/ARKitInlinePreviewModelPlayer.h 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebKit/WebProcess/Model/ARKitInlinePreviewModelPlayer.h 2021-11-19 18:21:57 UTC (rev 286066)
@@ -57,6 +57,8 @@
void setCamera(WebCore::HTMLModelElementCamera, CompletionHandler<void(bool success)>&&) override;
void isPlayingAnimation(CompletionHandler<void(std::optional<bool>&&)>&&) override;
void setAnimationIsPlaying(bool, CompletionHandler<void(bool success)>&&) override;
+ void isLoopingAnimation(CompletionHandler<void(std::optional<bool>&&)>&&) override;
+ void setIsLoopingAnimation(bool, CompletionHandler<void(bool success)>&&) override;
void hasAudio(CompletionHandler<void(std::optional<bool>&&)>&&) override;
void isMuted(CompletionHandler<void(std::optional<bool>&&)>&&) override;
void setIsMuted(bool, CompletionHandler<void(bool success)>&&) override;
Modified: trunk/Source/WebKit/WebProcess/Model/ARKitInlinePreviewModelPlayer.mm (286065 => 286066)
--- trunk/Source/WebKit/WebProcess/Model/ARKitInlinePreviewModelPlayer.mm 2021-11-19 17:42:38 UTC (rev 286065)
+++ trunk/Source/WebKit/WebProcess/Model/ARKitInlinePreviewModelPlayer.mm 2021-11-19 18:21:57 UTC (rev 286066)
@@ -149,6 +149,53 @@
strongPage->sendWithAsyncReply(Messages::WebPageProxy::ModelElementSetAnimationIsPlaying(*modelIdentifier, isPlaying), WTFMove(remoteCompletionHandler));
}
+void ARKitInlinePreviewModelPlayer::isLoopingAnimation(CompletionHandler<void(std::optional<bool>&&)>&& completionHandler)
+{
+ auto modelIdentifier = this->modelIdentifier();
+ if (!modelIdentifier) {
+ completionHandler(std::nullopt);
+ return;
+ }
+
+ RefPtr strongPage = m_page.get();
+ if (!strongPage) {
+ completionHandler(std::nullopt);
+ return;
+ }
+
+ CompletionHandler<void(Expected<bool, WebCore::ResourceError>)> remoteCompletionHandler = [completionHandler = WTFMove(completionHandler)] (Expected<bool, WebCore::ResourceError> result) mutable {
+ if (!result) {
+ completionHandler(std::nullopt);
+ return;
+ }
+
+ completionHandler(*result);
+ };
+
+ strongPage->sendWithAsyncReply(Messages::WebPageProxy::ModelElementIsLoopingAnimation(*modelIdentifier), WTFMove(remoteCompletionHandler));
+}
+
+void ARKitInlinePreviewModelPlayer::setIsLoopingAnimation(bool isLooping, CompletionHandler<void(bool success)>&& completionHandler)
+{
+ auto modelIdentifier = this->modelIdentifier();
+ if (!modelIdentifier) {
+ completionHandler(false);
+ return;
+ }
+
+ RefPtr strongPage = m_page.get();
+ if (!strongPage) {
+ completionHandler(false);
+ return;
+ }
+
+ CompletionHandler<void(bool)> remoteCompletionHandler = [completionHandler = WTFMove(completionHandler)] (bool success) mutable {
+ completionHandler(success);
+ };
+
+ strongPage->sendWithAsyncReply(Messages::WebPageProxy::ModelElementSetIsLoopingAnimation(*modelIdentifier, isLooping), WTFMove(remoteCompletionHandler));
+}
+
void ARKitInlinePreviewModelPlayer::hasAudio(CompletionHandler<void(std::optional<bool>&&)>&& completionHandler)
{
auto modelIdentifier = this->modelIdentifier();