Title: [285986] trunk/Source
Revision
285986
Author
[email protected]
Date
2021-11-17 23:58:23 -0800 (Wed, 17 Nov 2021)

Log Message

[Model] [macOS] Add support for interaction on macOS
https://bugs.webkit.org/show_bug.cgi?id=233105
<rdar://problem/80079386>

Reviewed by Wenson Hsieh.

Source/WebCore:

Capture mouse events after the mouse button is pressed over a <model> element,
unless preventDefault() is called, and forward those events through ModelPlayer
to the UI process.

* Modules/model-element/HTMLModelElement.cpp:
(WebCore::HTMLModelElement::defaultEventHandler):
(WebCore::HTMLModelElement::dragDidStart):
(WebCore::HTMLModelElement::dragDidChange):
(WebCore::HTMLModelElement::dragDidEnd):
* Modules/model-element/HTMLModelElement.h:
* Modules/model-element/ModelPlayer.cpp:
(WebCore::ModelPlayer::supportsMouseInteraction):
* Modules/model-element/ModelPlayer.h:
* Modules/model-element/dummy/DummyModelPlayer.cpp:
(WebCore::DummyModelPlayer::handleMouseDown):
(WebCore::DummyModelPlayer::handleMouseMove):
(WebCore::DummyModelPlayer::handleMouseUp):
* Modules/model-element/dummy/DummyModelPlayer.h:
* Modules/model-element/scenekit/SceneKitModelPlayer.h:
* Modules/model-element/scenekit/SceneKitModelPlayer.mm:
(WebCore::SceneKitModelPlayer::handleMouseDown):
(WebCore::SceneKitModelPlayer::handleMouseMove):
(WebCore::SceneKitModelPlayer::handleMouseUp):

Source/WebCore/PAL:

Add new ARQL SPIs.

* pal/spi/mac/SystemPreviewSPI.h:

Source/WebKit:

Forward mouse events captured in the Web process to the matching ASVInlinePreview.

* UIProcess/Cocoa/ModelElementControllerCocoa.mm:
(WebKit::ModelElementController::previewForUUID):
(WebKit::ModelElementController::handleMouseDownForModelElement):
(WebKit::ModelElementController::handleMouseMoveForModelElement):
(WebKit::ModelElementController::handleMouseUpForModelElement):
* UIProcess/ModelElementController.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::handleMouseDownForModelElement):
(WebKit::WebPageProxy::handleMouseMoveForModelElement):
(WebKit::WebPageProxy::handleMouseUpForModelElement):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h:
* WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm:
(WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseDown):
(WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseMove):
(WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseUp):
* WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h:
* WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm:
(WebKit::ARKitInlinePreviewModelPlayerMac::supportsMouseInteraction):
(WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseDown):
(WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseMove):
(WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseUp):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (285985 => 285986)


--- trunk/Source/WebCore/ChangeLog	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebCore/ChangeLog	2021-11-18 07:58:23 UTC (rev 285986)
@@ -1,3 +1,35 @@
+2021-11-18 Antoine Quint  <[email protected]>
+
+        [Model] [macOS] Add support for interaction on macOS
+        https://bugs.webkit.org/show_bug.cgi?id=233105
+        <rdar://problem/80079386>
+
+        Reviewed by Wenson Hsieh.
+
+        Capture mouse events after the mouse button is pressed over a <model> element,
+        unless preventDefault() is called, and forward those events through ModelPlayer
+        to the UI process.
+
+        * Modules/model-element/HTMLModelElement.cpp:
+        (WebCore::HTMLModelElement::defaultEventHandler):
+        (WebCore::HTMLModelElement::dragDidStart):
+        (WebCore::HTMLModelElement::dragDidChange):
+        (WebCore::HTMLModelElement::dragDidEnd):
+        * Modules/model-element/HTMLModelElement.h:
+        * Modules/model-element/ModelPlayer.cpp:
+        (WebCore::ModelPlayer::supportsMouseInteraction):
+        * Modules/model-element/ModelPlayer.h:
+        * Modules/model-element/dummy/DummyModelPlayer.cpp:
+        (WebCore::DummyModelPlayer::handleMouseDown):
+        (WebCore::DummyModelPlayer::handleMouseMove):
+        (WebCore::DummyModelPlayer::handleMouseUp):
+        * Modules/model-element/dummy/DummyModelPlayer.h:
+        * Modules/model-element/scenekit/SceneKitModelPlayer.h:
+        * Modules/model-element/scenekit/SceneKitModelPlayer.mm:
+        (WebCore::SceneKitModelPlayer::handleMouseDown):
+        (WebCore::SceneKitModelPlayer::handleMouseMove):
+        (WebCore::SceneKitModelPlayer::handleMouseUp):
+
 2021-11-17  Youenn Fablet  <[email protected]>
 
         Audio Rate Gets Messed up With Safari WebRTC and Bluetooth Switching

Modified: trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp (285985 => 285986)


--- trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp	2021-11-18 07:58:23 UTC (rev 285986)
@@ -33,6 +33,8 @@
 #include "Document.h"
 #include "ElementChildIterator.h"
 #include "ElementInlines.h"
+#include "EventHandler.h"
+#include "EventNames.h"
 #include "GraphicsLayer.h"
 #include "GraphicsLayerCA.h"
 #include "HTMLNames.h"
@@ -43,7 +45,9 @@
 #include "Model.h"
 #include "ModelPlayer.h"
 #include "ModelPlayerProvider.h"
+#include "MouseEvent.h"
 #include "Page.h"
+#include "PlatformMouseEvent.h"
 #include "RenderLayer.h"
 #include "RenderLayerBacking.h"
 #include "RenderLayerModelObject.h"
@@ -289,6 +293,73 @@
     m_modelPlayer->enterFullscreen();
 }
 
+// MARK: - Interaction support.
+
+void HTMLModelElement::defaultEventHandler(Event& event)
+{
+    if (!m_modelPlayer || !m_modelPlayer->supportsMouseInteraction())
+        return;
+
+    auto type = event.type();
+    if (type != eventNames().mousedownEvent && type != eventNames().mousemoveEvent && type != eventNames().mouseupEvent)
+        return;
+
+    ASSERT(is<MouseEvent>(event));
+    auto& mouseEvent = downcast<MouseEvent>(event);
+
+    if (mouseEvent.button() != LeftButton)
+        return;
+
+    if (type == eventNames().mousedownEvent && !m_isDragging && !event.defaultPrevented())
+        dragDidStart(mouseEvent);
+    else if (type == eventNames().mousemoveEvent && m_isDragging)
+        dragDidChange(mouseEvent);
+    else if (type == eventNames().mouseupEvent && m_isDragging)
+        dragDidEnd(mouseEvent);
 }
 
+void HTMLModelElement::dragDidStart(MouseEvent& event)
+{
+    ASSERT(!m_isDragging);
+
+    RefPtr frame = document().frame();
+    if (!frame)
+        return;
+
+    frame->eventHandler().setCapturingMouseEventsElement(this);
+    event.setDefaultHandled();
+    m_isDragging = true;
+
+    if (m_modelPlayer)
+        m_modelPlayer->handleMouseDown(event.pageLocation(), event.timeStamp());
+}
+
+void HTMLModelElement::dragDidChange(MouseEvent& event)
+{
+    ASSERT(m_isDragging);
+
+    event.setDefaultHandled();
+
+    if (m_modelPlayer)
+        m_modelPlayer->handleMouseMove(event.pageLocation(), event.timeStamp());
+}
+
+void HTMLModelElement::dragDidEnd(MouseEvent& event)
+{
+    ASSERT(m_isDragging);
+
+    RefPtr frame = document().frame();
+    if (!frame)
+        return;
+
+    frame->eventHandler().setCapturingMouseEventsElement(nullptr);
+    event.setDefaultHandled();
+    m_isDragging = false;
+
+    if (m_modelPlayer)
+        m_modelPlayer->handleMouseUp(event.pageLocation(), event.timeStamp());
+}
+
+}
+
 #endif // ENABLE(MODEL_ELEMENT)

Modified: trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h (285985 => 285986)


--- trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h	2021-11-18 07:58:23 UTC (rev 285986)
@@ -40,8 +40,10 @@
 
 namespace WebCore {
 
+class Event;
 class Model;
 class ModelPlayer;
+class MouseEvent;
 
 template<typename IDLType> class DOMPromiseProxyWithResolveCallback;
 
@@ -92,6 +94,11 @@
     void didFailLoading(ModelPlayer&, const ResourceError&) final;
     GraphicsLayer::PlatformLayerID platformLayerID() final;
 
+    void defaultEventHandler(Event&) final;
+    void dragDidStart(MouseEvent&);
+    void dragDidChange(MouseEvent&);
+    void dragDidEnd(MouseEvent&);
+
     URL m_sourceURL;
     CachedResourceHandle<CachedRawResource> m_resource;
     RefPtr<SharedBuffer> m_data;
@@ -98,6 +105,7 @@
     RefPtr<Model> m_model;
     UniqueRef<ReadyPromise> m_readyPromise;
     bool m_dataComplete { false };
+    bool m_isDragging { false };
 
     RefPtr<ModelPlayer> m_modelPlayer;
 };

Modified: trunk/Source/WebCore/Modules/model-element/ModelPlayer.cpp (285985 => 285986)


--- trunk/Source/WebCore/Modules/model-element/ModelPlayer.cpp	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebCore/Modules/model-element/ModelPlayer.cpp	2021-11-18 07:58:23 UTC (rev 285986)
@@ -30,4 +30,9 @@
 
 ModelPlayer::~ModelPlayer() = default;
 
+bool ModelPlayer::supportsMouseInteraction()
+{
+    return false;
 }
+
+}

Modified: trunk/Source/WebCore/Modules/model-element/ModelPlayer.h (285985 => 285986)


--- trunk/Source/WebCore/Modules/model-element/ModelPlayer.h	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebCore/Modules/model-element/ModelPlayer.h	2021-11-18 07:58:23 UTC (rev 285986)
@@ -25,9 +25,11 @@
 
 #pragma once
 
+#include "LayoutPoint.h"
 #include "LayoutSize.h"
 #include "PlatformLayer.h"
 #include <wtf/Forward.h>
+#include <wtf/MonotonicTime.h>
 
 namespace WebCore {
 
@@ -41,6 +43,11 @@
     virtual void load(Model&, LayoutSize) = 0;
     virtual PlatformLayer* layer() = 0;
     virtual void enterFullscreen() = 0;
+    virtual bool supportsMouseInteraction();
+    virtual void handleMouseDown(const LayoutPoint&, MonotonicTime) = 0;
+    virtual void handleMouseMove(const LayoutPoint&, MonotonicTime) = 0;
+    virtual void handleMouseUp(const LayoutPoint&, MonotonicTime) = 0;
+
 };
 
 }

Modified: trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp (285985 => 285986)


--- trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp	2021-11-18 07:58:23 UTC (rev 285986)
@@ -58,4 +58,16 @@
 {
 }
 
+void DummyModelPlayer::handleMouseDown(const LayoutPoint&, MonotonicTime)
+{
 }
+
+void DummyModelPlayer::handleMouseMove(const LayoutPoint&, MonotonicTime)
+{
+}
+
+void DummyModelPlayer::handleMouseUp(const LayoutPoint&, MonotonicTime)
+{
+}
+
+}

Modified: trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.h (285985 => 285986)


--- trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.h	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.h	2021-11-18 07:58:23 UTC (rev 285986)
@@ -44,6 +44,9 @@
     void load(Model&, LayoutSize) override;
     PlatformLayer* layer() override;
     void enterFullscreen() override;
+    void handleMouseDown(const LayoutPoint&, MonotonicTime) override;
+    void handleMouseMove(const LayoutPoint&, MonotonicTime) override;
+    void handleMouseUp(const LayoutPoint&, MonotonicTime) override;
 
     WeakPtr<ModelPlayerClient> m_client;
 };

Modified: trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.h (285985 => 285986)


--- trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.h	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.h	2021-11-18 07:58:23 UTC (rev 285986)
@@ -58,6 +58,9 @@
     void load(Model&, LayoutSize) override;
     CALayer *layer() override;
     void enterFullscreen() override;
+    void handleMouseDown(const LayoutPoint&, MonotonicTime) override;
+    void handleMouseMove(const LayoutPoint&, MonotonicTime) override;
+    void handleMouseUp(const LayoutPoint&, MonotonicTime) override;
 
     // SceneKitModelLoaderClient overrides.
     virtual void didFinishLoading(SceneKitModelLoader&, Ref<SceneKitModel>) override;

Modified: trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.mm (285985 => 285986)


--- trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.mm	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebCore/Modules/model-element/scenekit/SceneKitModelPlayer.mm	2021-11-18 07:58:23 UTC (rev 285986)
@@ -76,6 +76,18 @@
 {
 }
 
+void SceneKitModelPlayer::handleMouseDown(const LayoutPoint&, MonotonicTime)
+{
+}
+
+void SceneKitModelPlayer::handleMouseMove(const LayoutPoint&, MonotonicTime)
+{
+}
+
+void SceneKitModelPlayer::handleMouseUp(const LayoutPoint&, MonotonicTime)
+{
+}
+
 // MARK: - SceneKitModelLoaderClient overrides.
 
 void SceneKitModelPlayer::didFinishLoading(SceneKitModelLoader& loader, Ref<SceneKitModel> model)

Modified: trunk/Source/WebCore/PAL/ChangeLog (285985 => 285986)


--- trunk/Source/WebCore/PAL/ChangeLog	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebCore/PAL/ChangeLog	2021-11-18 07:58:23 UTC (rev 285986)
@@ -1,3 +1,15 @@
+2021-11-18  Antoine Quint  <[email protected]>
+
+        [Model] [macOS] Add support for interaction on macOS
+        https://bugs.webkit.org/show_bug.cgi?id=233105
+        <rdar://problem/80079386>
+
+        Reviewed by Wenson Hsieh.
+
+        Add new ARQL SPIs.
+
+        * pal/spi/mac/SystemPreviewSPI.h:
+
 2021-11-17  Myles C. Maxfield  <[email protected]>
 
         [WebGPU] Add IPC message handlers for WebGPU

Modified: trunk/Source/WebCore/PAL/pal/spi/mac/SystemPreviewSPI.h (285985 => 285986)


--- trunk/Source/WebCore/PAL/pal/spi/mac/SystemPreviewSPI.h	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebCore/PAL/pal/spi/mac/SystemPreviewSPI.h	2021-11-18 07:58:23 UTC (rev 285986)
@@ -48,6 +48,10 @@
 - (void)preparePreviewOfFileAtURL:(NSURL *)url completionHandler:(void (^)(NSError * _Nullable error))handler;
 - (void)setRemoteContext:(uint32_t)contextId;
 
+- (void)mouseDownAtLocation:(CGPoint)location timestamp:(NSTimeInterval)timestamp;
+- (void)mouseDraggedAtLocation:(CGPoint)location timestamp:(NSTimeInterval)timestamp;
+- (void)mouseUpAtLocation:(CGPoint)location timestamp:(NSTimeInterval)timestamp;
+
 @end
 
 #endif // ENABLE(ARKIT_INLINE_PREVIEW_MAC)

Modified: trunk/Source/WebKit/ChangeLog (285985 => 285986)


--- trunk/Source/WebKit/ChangeLog	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebKit/ChangeLog	2021-11-18 07:58:23 UTC (rev 285986)
@@ -1,3 +1,37 @@
+2021-11-18  Antoine Quint  <[email protected]>
+
+        [Model] [macOS] Add support for interaction on macOS
+        https://bugs.webkit.org/show_bug.cgi?id=233105
+        <rdar://problem/80079386>
+
+        Reviewed by Wenson Hsieh.
+
+        Forward mouse events captured in the Web process to the matching ASVInlinePreview.
+
+        * UIProcess/Cocoa/ModelElementControllerCocoa.mm:
+        (WebKit::ModelElementController::previewForUUID):
+        (WebKit::ModelElementController::handleMouseDownForModelElement):
+        (WebKit::ModelElementController::handleMouseMoveForModelElement):
+        (WebKit::ModelElementController::handleMouseUpForModelElement):
+        * UIProcess/ModelElementController.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::handleMouseDownForModelElement):
+        (WebKit::WebPageProxy::handleMouseMoveForModelElement):
+        (WebKit::WebPageProxy::handleMouseUpForModelElement):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+        * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h:
+        * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm:
+        (WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseDown):
+        (WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseMove):
+        (WebKit::ARKitInlinePreviewModelPlayerIOS::handleMouseUp):
+        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h:
+        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm:
+        (WebKit::ARKitInlinePreviewModelPlayerMac::supportsMouseInteraction):
+        (WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseDown):
+        (WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseMove):
+        (WebKit::ARKitInlinePreviewModelPlayerMac::handleMouseUp):
+
 2021-11-17  Youenn Fablet  <[email protected]>
 
         Add support for more rvfc metadata

Modified: trunk/Source/WebKit/UIProcess/Cocoa/ModelElementControllerCocoa.mm (285985 => 285986)


--- trunk/Source/WebKit/UIProcess/Cocoa/ModelElementControllerCocoa.mm	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebKit/UIProcess/Cocoa/ModelElementControllerCocoa.mm	2021-11-18 07:58:23 UTC (rev 285986)
@@ -42,9 +42,12 @@
 #endif
 
 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC)
+#import <WebCore/LayoutPoint.h>
+#import <WebCore/LayoutUnit.h>
 #import <WebCore/ResourceError.h>
 #import <pal/spi/mac/SystemPreviewSPI.h>
 #import <wtf/MainThread.h>
+#import <wtf/MonotonicTime.h>
 #endif
 
 SOFT_LINK_PRIVATE_FRAMEWORK(AssetViewer);
@@ -188,6 +191,29 @@
     }).get()];
 }
 
+RetainPtr<ASVInlinePreview> ModelElementController::previewForUUID(const String& uuid)
+{
+    return m_inlinePreviews.get(uuid);
+}
+
+void ModelElementController::handleMouseDownForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp)
+{
+    if (auto preview = previewForUUID(uuid))
+        [preview mouseDownAtLocation:CGPointMake(locationInPageCoordinates.x().toFloat(), locationInPageCoordinates.y().toFloat()) timestamp:timestamp.secondsSinceEpoch().value()];
+}
+
+void ModelElementController::handleMouseMoveForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp)
+{
+    if (auto preview = previewForUUID(uuid))
+        [preview mouseDraggedAtLocation:CGPointMake(locationInPageCoordinates.x().toFloat(), locationInPageCoordinates.y().toFloat()) timestamp:timestamp.secondsSinceEpoch().value()];
+}
+
+void ModelElementController::handleMouseUpForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp)
+{
+    if (auto preview = previewForUUID(uuid))
+        [preview mouseUpAtLocation:CGPointMake(locationInPageCoordinates.x().toFloat(), locationInPageCoordinates.y().toFloat()) timestamp:timestamp.secondsSinceEpoch().value()];
+}
+
 #endif
 
 }

Modified: trunk/Source/WebKit/UIProcess/ModelElementController.h (285985 => 285986)


--- trunk/Source/WebKit/UIProcess/ModelElementController.h	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebKit/UIProcess/ModelElementController.h	2021-11-18 07:58:23 UTC (rev 285986)
@@ -53,11 +53,15 @@
 #endif
 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC)
     void modelElementDidCreatePreview(URL, String, WebCore::FloatSize, CompletionHandler<void(Expected<std::pair<String, uint32_t>, WebCore::ResourceError>)>&&);
+    void handleMouseDownForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime);
+    void handleMouseMoveForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime);
+    void handleMouseUpForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime);
 #endif
 
 private:
     WebPageProxy& m_webPageProxy;
 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC)
+    RetainPtr<ASVInlinePreview> previewForUUID(const String&);
     HashMap<String, RetainPtr<ASVInlinePreview>> m_inlinePreviews;
 #endif
 };

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (285985 => 285986)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-11-18 07:58:23 UTC (rev 285986)
@@ -10844,6 +10844,21 @@
 {
     modelElementController()->modelElementDidCreatePreview(url, uuid, size, WTFMove(completionHandler));
 }
+
+void WebPageProxy::handleMouseDownForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp)
+{
+    modelElementController()->handleMouseDownForModelElement(uuid, locationInPageCoordinates, timestamp);
+}
+
+void WebPageProxy::handleMouseMoveForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp)
+{
+    modelElementController()->handleMouseMoveForModelElement(uuid, locationInPageCoordinates, timestamp);
+}
+
+void WebPageProxy::handleMouseUpForModelElement(const String& uuid, const WebCore::LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp)
+{
+    modelElementController()->handleMouseUpForModelElement(uuid, locationInPageCoordinates, timestamp);
+}
 #endif
 
 #if !PLATFORM(COCOA)

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (285985 => 285986)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2021-11-18 07:58:23 UTC (rev 285986)
@@ -593,6 +593,9 @@
 #endif
 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC)
     void modelElementDidCreatePreview(const URL&, const String&, const WebCore::FloatSize&, CompletionHandler<void(Expected<std::pair<String, uint32_t>, WebCore::ResourceError>)>&&);
+    void handleMouseDownForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime);
+    void handleMouseMoveForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime);
+    void handleMouseUpForModelElement(const String&, const WebCore::LayoutPoint&, MonotonicTime);
 #endif
 
 #if ENABLE(APPLE_PAY_AMS_UI)

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in (285985 => 285986)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in	2021-11-18 07:58:23 UTC (rev 285986)
@@ -590,6 +590,9 @@
 #endif
 #if ENABLE(ARKIT_INLINE_PREVIEW_MAC)
     ModelElementDidCreatePreview(URL url, String uuid, WebCore::FloatSize size) -> (Expected<std::pair<String, uint32_t>, WebCore::ResourceError> result) Async
+    HandleMouseDownForModelElement(String uuid, WebCore::LayoutPoint locationInPageCoordinates, MonotonicTime timestamp)
+    HandleMouseMoveForModelElement(String uuid, WebCore::LayoutPoint locationInPageCoordinates, MonotonicTime timestamp)
+    HandleMouseUpForModelElement(String uuid, WebCore::LayoutPoint locationInPageCoordinates, MonotonicTime timestamp)
 #endif
 
     requestPermission(struct WebCore::ClientOrigin origin, struct WebCore::PermissionDescriptor descriptor) -> (enum:uint8_t WebCore::PermissionState state) Async

Modified: trunk/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h (285985 => 285986)


--- trunk/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h	2021-11-18 07:58:23 UTC (rev 285986)
@@ -43,6 +43,9 @@
 
     // WebCore::ModelPlayer overrides.
     void enterFullscreen() override;
+    void handleMouseDown(const WebCore::LayoutPoint&, MonotonicTime) override;
+    void handleMouseMove(const WebCore::LayoutPoint&, MonotonicTime) override;
+    void handleMouseUp(const WebCore::LayoutPoint&, MonotonicTime) override;
 };
 
 }

Modified: trunk/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm (285985 => 285986)


--- trunk/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm	2021-11-18 07:58:23 UTC (rev 285986)
@@ -59,6 +59,20 @@
         page()->takeModelElementFullscreen(layerId);
 }
 
+void ARKitInlinePreviewModelPlayerIOS::handleMouseDown(const WebCore::LayoutPoint&, MonotonicTime)
+{
+    ASSERT_NOT_REACHED();
 }
 
+void ARKitInlinePreviewModelPlayerIOS::handleMouseMove(const WebCore::LayoutPoint&, MonotonicTime)
+{
+    ASSERT_NOT_REACHED();
+}
+
+void ARKitInlinePreviewModelPlayerIOS::handleMouseUp(const WebCore::LayoutPoint&, MonotonicTime)
+{
+    ASSERT_NOT_REACHED();
+}
+
+}
 #endif

Modified: trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h (285985 => 285986)


--- trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h	2021-11-18 07:58:23 UTC (rev 285986)
@@ -50,6 +50,10 @@
     // WebCore::ModelPlayer overrides.
     void load(WebCore::Model&, WebCore::LayoutSize) override;
     PlatformLayer* layer() override;
+    bool supportsMouseInteraction() override;
+    void handleMouseDown(const WebCore::LayoutPoint&, MonotonicTime) override;
+    void handleMouseMove(const WebCore::LayoutPoint&, MonotonicTime) override;
+    void handleMouseUp(const WebCore::LayoutPoint&, MonotonicTime) override;
 
     void createFile(WebCore::Model&);
     void clearFile();

Modified: trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm (285985 => 285986)


--- trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm	2021-11-18 07:53:25 UTC (rev 285985)
+++ trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm	2021-11-18 07:58:23 UTC (rev 285986)
@@ -170,6 +170,32 @@
     return [m_inlinePreview layer];
 }
 
+bool ARKitInlinePreviewModelPlayerMac::supportsMouseInteraction()
+{
+#if ENABLE(ARKIT_INLINE_PREVIEW_MAC)
+    return true;
+#endif
+    return false;
 }
 
+void ARKitInlinePreviewModelPlayerMac::handleMouseDown(const LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp)
+{
+    if (auto* page = this->page())
+        page->send(Messages::WebPageProxy::HandleMouseDownForModelElement([m_inlinePreview uuid].UUIDString, locationInPageCoordinates, timestamp));
+}
+
+void ARKitInlinePreviewModelPlayerMac::handleMouseMove(const LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp)
+{
+    if (auto* page = this->page())
+        page->send(Messages::WebPageProxy::HandleMouseMoveForModelElement([m_inlinePreview uuid].UUIDString, locationInPageCoordinates, timestamp));
+}
+
+void ARKitInlinePreviewModelPlayerMac::handleMouseUp(const LayoutPoint& locationInPageCoordinates, MonotonicTime timestamp)
+{
+    if (auto* page = this->page())
+        page->send(Messages::WebPageProxy::HandleMouseUpForModelElement([m_inlinePreview uuid].UUIDString, locationInPageCoordinates, timestamp));
+}
+
+}
+
 #endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to