Title: [288723] trunk/Source
Revision
288723
Author
grao...@webkit.org
Date
2022-01-27 22:53:57 -0800 (Thu, 27 Jan 2022)

Log Message

<model> should not be draggable on macOS
https://bugs.webkit.org/show_bug.cgi?id=235697

Reviewed by Dean Jackson.

Source/WebCore:

As part of bug 229246 we added support for dragging <model> elements. However, it did not
work on macOS in practice so we make that explicit.

This is also important leading up to bug 227621, where we'll implement the "interactive"
HTML attribute and IDL property, since disabling dragging over a <model> element to adjust
the camera would trigger a crash under Pasteboard::write() on macOS due to not having an
image set on the pasteboard data.

* Modules/model-element/HTMLModelElement.cpp:
(WebCore::HTMLModelElement::supportsDragging const):
(WebCore::HTMLModelElement::isDraggableIgnoringAttributes const):
* Modules/model-element/HTMLModelElement.h:
* Modules/model-element/ModelPlayer.cpp:
(WebCore::ModelPlayer::supportsDragging):
* Modules/model-element/ModelPlayer.h:
* page/DragController.cpp:
(WebCore::modelElementIsDraggable):

Source/WebKit:

Override the ModelPlayer method to disable <model> dragging on macOS.

* WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h:
* WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm:
(WebKit::ARKitInlinePreviewModelPlayerMac::supportsDragging):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (288722 => 288723)


--- trunk/Source/WebCore/ChangeLog	2022-01-28 06:51:10 UTC (rev 288722)
+++ trunk/Source/WebCore/ChangeLog	2022-01-28 06:53:57 UTC (rev 288723)
@@ -1,3 +1,28 @@
+2022-01-27  Antoine Quint  <grao...@webkit.org>
+
+        <model> should not be draggable on macOS
+        https://bugs.webkit.org/show_bug.cgi?id=235697
+
+        Reviewed by Dean Jackson.
+
+        As part of bug 229246 we added support for dragging <model> elements. However, it did not
+        work on macOS in practice so we make that explicit.
+
+        This is also important leading up to bug 227621, where we'll implement the "interactive"
+        HTML attribute and IDL property, since disabling dragging over a <model> element to adjust
+        the camera would trigger a crash under Pasteboard::write() on macOS due to not having an
+        image set on the pasteboard data.
+
+        * Modules/model-element/HTMLModelElement.cpp:
+        (WebCore::HTMLModelElement::supportsDragging const):
+        (WebCore::HTMLModelElement::isDraggableIgnoringAttributes const):
+        * Modules/model-element/HTMLModelElement.h:
+        * Modules/model-element/ModelPlayer.cpp:
+        (WebCore::ModelPlayer::supportsDragging):
+        * Modules/model-element/ModelPlayer.h:
+        * page/DragController.cpp:
+        (WebCore::modelElementIsDraggable):
+
 2022-01-27  Megan Gardner  <megan_gard...@apple.com>
 
         DocumentContext gives empty rects for blank lines.

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


--- trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp	2022-01-28 06:51:10 UTC (rev 288722)
+++ trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp	2022-01-28 06:53:57 UTC (rev 288723)
@@ -321,6 +321,19 @@
 
 // MARK: - Interaction support.
 
+bool HTMLModelElement::supportsDragging() const
+{
+    if (!m_modelPlayer)
+        return true;
+
+    return m_modelPlayer->supportsDragging();
+}
+
+bool HTMLModelElement::isDraggableIgnoringAttributes() const
+{
+    return supportsDragging();
+}
+
 void HTMLModelElement::defaultEventHandler(Event& event)
 {
     if (!m_modelPlayer || !m_modelPlayer->supportsMouseInteraction())

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


--- trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h	2022-01-28 06:51:10 UTC (rev 288722)
+++ trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h	2022-01-28 06:53:57 UTC (rev 288723)
@@ -97,7 +97,8 @@
     void isMuted(IsMutedPromise&&);
     void setIsMuted(bool, DOMPromiseDeferred<void>&&);
 
-    bool isDraggableIgnoringAttributes() const final { return true; }
+    bool supportsDragging() const;
+    bool isDraggableIgnoringAttributes() const final;
 
 #if PLATFORM(COCOA)
     Vector<RetainPtr<id>> accessibilityChildren();

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


--- trunk/Source/WebCore/Modules/model-element/ModelPlayer.cpp	2022-01-28 06:51:10 UTC (rev 288722)
+++ trunk/Source/WebCore/Modules/model-element/ModelPlayer.cpp	2022-01-28 06:53:57 UTC (rev 288723)
@@ -35,4 +35,9 @@
     return false;
 }
 
+bool ModelPlayer::supportsDragging()
+{
+    return true;
 }
+
+}

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


--- trunk/Source/WebCore/Modules/model-element/ModelPlayer.h	2022-01-28 06:51:10 UTC (rev 288722)
+++ trunk/Source/WebCore/Modules/model-element/ModelPlayer.h	2022-01-28 06:53:57 UTC (rev 288723)
@@ -47,6 +47,7 @@
     virtual PlatformLayer* layer() = 0;
     virtual void enterFullscreen() = 0;
     virtual bool supportsMouseInteraction();
+    virtual bool supportsDragging();
     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/page/DragController.cpp (288722 => 288723)


--- trunk/Source/WebCore/page/DragController.cpp	2022-01-28 06:51:10 UTC (rev 288722)
+++ trunk/Source/WebCore/page/DragController.cpp	2022-01-28 06:53:57 UTC (rev 288723)
@@ -755,7 +755,7 @@
 
 static bool modelElementIsDraggable(const HTMLModelElement& modelElement)
 {
-    return !!modelElement.model();
+    return modelElement.supportsDragging() && !!modelElement.model();
 }
 
 #endif

Modified: trunk/Source/WebKit/ChangeLog (288722 => 288723)


--- trunk/Source/WebKit/ChangeLog	2022-01-28 06:51:10 UTC (rev 288722)
+++ trunk/Source/WebKit/ChangeLog	2022-01-28 06:53:57 UTC (rev 288723)
@@ -1,5 +1,18 @@
 2022-01-27  Antoine Quint  <grao...@webkit.org>
 
+        <model> should not be draggable on macOS
+        https://bugs.webkit.org/show_bug.cgi?id=235697
+
+        Reviewed by Dean Jackson.
+
+        Override the ModelPlayer method to disable <model> dragging on macOS.
+
+        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h:
+        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm:
+        (WebKit::ARKitInlinePreviewModelPlayerMac::supportsDragging):
+
+2022-01-27  Antoine Quint  <grao...@webkit.org>
+
         Remove unnecessary build-time branch in ARKitInlinePreviewModelPlayerMac::supportsMouseInteraction()
         https://bugs.webkit.org/show_bug.cgi?id=235729
 

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


--- trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h	2022-01-28 06:51:10 UTC (rev 288722)
+++ trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h	2022-01-28 06:53:57 UTC (rev 288723)
@@ -53,6 +53,7 @@
     void load(WebCore::Model&, WebCore::LayoutSize) override;
     PlatformLayer* layer() override;
     bool supportsMouseInteraction() override;
+    bool supportsDragging() 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/mac/ARKitInlinePreviewModelPlayerMac.mm (288722 => 288723)


--- trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm	2022-01-28 06:51:10 UTC (rev 288722)
+++ trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm	2022-01-28 06:53:57 UTC (rev 288723)
@@ -182,6 +182,11 @@
     return true;
 }
 
+bool ARKitInlinePreviewModelPlayerMac::supportsDragging()
+{
+    return false;
+}
+
 void ARKitInlinePreviewModelPlayerMac::handleMouseDown(const LayoutPoint& flippedLocationInElement, MonotonicTime timestamp)
 {
     if (auto* page = this->page())
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to