Changeset 288723 in webkit


Ignore:
Timestamp:
Jan 27, 2022 10:53:57 PM (6 months ago)
Author:
graouts@webkit.org
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):

Location:
trunk/Source
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r288721 r288723  
     12022-01-27  Antoine Quint  <graouts@webkit.org>
     2
     3        <model> should not be draggable on macOS
     4        https://bugs.webkit.org/show_bug.cgi?id=235697
     5
     6        Reviewed by Dean Jackson.
     7
     8        As part of bug 229246 we added support for dragging <model> elements. However, it did not
     9        work on macOS in practice so we make that explicit.
     10
     11        This is also important leading up to bug 227621, where we'll implement the "interactive"
     12        HTML attribute and IDL property, since disabling dragging over a <model> element to adjust
     13        the camera would trigger a crash under Pasteboard::write() on macOS due to not having an
     14        image set on the pasteboard data.
     15
     16        * Modules/model-element/HTMLModelElement.cpp:
     17        (WebCore::HTMLModelElement::supportsDragging const):
     18        (WebCore::HTMLModelElement::isDraggableIgnoringAttributes const):
     19        * Modules/model-element/HTMLModelElement.h:
     20        * Modules/model-element/ModelPlayer.cpp:
     21        (WebCore::ModelPlayer::supportsDragging):
     22        * Modules/model-element/ModelPlayer.h:
     23        * page/DragController.cpp:
     24        (WebCore::modelElementIsDraggable):
     25
    1262022-01-27  Megan Gardner  <megan_gardner@apple.com>
    227
  • trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp

    r288694 r288723  
    322322// MARK: - Interaction support.
    323323
     324bool HTMLModelElement::supportsDragging() const
     325{
     326    if (!m_modelPlayer)
     327        return true;
     328
     329    return m_modelPlayer->supportsDragging();
     330}
     331
     332bool HTMLModelElement::isDraggableIgnoringAttributes() const
     333{
     334    return supportsDragging();
     335}
     336
    324337void HTMLModelElement::defaultEventHandler(Event& event)
    325338{
  • trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h

    r288694 r288723  
    9898    void setIsMuted(bool, DOMPromiseDeferred<void>&&);
    9999
    100     bool isDraggableIgnoringAttributes() const final { return true; }
     100    bool supportsDragging() const;
     101    bool isDraggableIgnoringAttributes() const final;
    101102
    102103#if PLATFORM(COCOA)
  • trunk/Source/WebCore/Modules/model-element/ModelPlayer.cpp

    r288694 r288723  
    3636}
    3737
     38bool ModelPlayer::supportsDragging()
     39{
     40    return true;
    3841}
     42
     43}
  • trunk/Source/WebCore/Modules/model-element/ModelPlayer.h

    r288694 r288723  
    4848    virtual void enterFullscreen() = 0;
    4949    virtual bool supportsMouseInteraction();
     50    virtual bool supportsDragging();
    5051    virtual void handleMouseDown(const LayoutPoint&, MonotonicTime) = 0;
    5152    virtual void handleMouseMove(const LayoutPoint&, MonotonicTime) = 0;
  • trunk/Source/WebCore/page/DragController.cpp

    r288694 r288723  
    756756static bool modelElementIsDraggable(const HTMLModelElement& modelElement)
    757757{
    758     return !!modelElement.model();
     758    return modelElement.supportsDragging() && !!modelElement.model();
    759759}
    760760
  • trunk/Source/WebKit/ChangeLog

    r288722 r288723  
     12022-01-27  Antoine Quint  <graouts@webkit.org>
     2
     3        <model> should not be draggable on macOS
     4        https://bugs.webkit.org/show_bug.cgi?id=235697
     5
     6        Reviewed by Dean Jackson.
     7
     8        Override the ModelPlayer method to disable <model> dragging on macOS.
     9
     10        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h:
     11        * WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm:
     12        (WebKit::ARKitInlinePreviewModelPlayerMac::supportsDragging):
     13
    1142022-01-27  Antoine Quint  <graouts@webkit.org>
    215
  • trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.h

    r286317 r288723  
    5454    PlatformLayer* layer() override;
    5555    bool supportsMouseInteraction() override;
     56    bool supportsDragging() override;
    5657    void handleMouseDown(const WebCore::LayoutPoint&, MonotonicTime) override;
    5758    void handleMouseMove(const WebCore::LayoutPoint&, MonotonicTime) override;
  • trunk/Source/WebKit/WebProcess/Model/mac/ARKitInlinePreviewModelPlayerMac.mm

    r288722 r288723  
    183183}
    184184
     185bool ARKitInlinePreviewModelPlayerMac::supportsDragging()
     186{
     187    return false;
     188}
     189
    185190void ARKitInlinePreviewModelPlayerMac::handleMouseDown(const LayoutPoint& flippedLocationInElement, MonotonicTime timestamp)
    186191{
Note: See TracChangeset for help on using the changeset viewer.