<model> should only be draggable on iOS
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 only
worked on iOS in practice so we make that explicit so that other platforms that do not
have complete support for <model> dragging do not have that feature.
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 enable <model> dragging on iOS.
* WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h:
* WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm:
(WebKit::ARKitInlinePreviewModelPlayerIOS::supportsDragging):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@288670 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index f1bfded..43fd952 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,29 @@
+2022-01-27 Antoine Quint <graouts@webkit.org>
+
+ <model> should only be draggable on iOS
+ 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 only
+ worked on iOS in practice so we make that explicit so that other platforms that do not
+ have complete support for <model> dragging do not have that feature.
+
+ 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 Cameron McCormack <heycam@apple.com>
Avoid setting and clearing :active state when dispatching synthetic click events when possible
diff --git a/Source/WebCore/Modules/model-element/HTMLModelElement.cpp b/Source/WebCore/Modules/model-element/HTMLModelElement.cpp
index 9fea18c..3ac1902 100644
--- a/Source/WebCore/Modules/model-element/HTMLModelElement.cpp
+++ b/Source/WebCore/Modules/model-element/HTMLModelElement.cpp
@@ -321,6 +321,16 @@
// MARK: - Interaction support.
+bool HTMLModelElement::supportsDragging() const
+{
+ return m_modelPlayer && m_modelPlayer->supportsDragging();
+}
+
+bool HTMLModelElement::isDraggableIgnoringAttributes() const
+{
+ return supportsDragging();
+}
+
void HTMLModelElement::defaultEventHandler(Event& event)
{
if (!m_modelPlayer || !m_modelPlayer->supportsMouseInteraction())
diff --git a/Source/WebCore/Modules/model-element/HTMLModelElement.h b/Source/WebCore/Modules/model-element/HTMLModelElement.h
index 57ddf26..7468a33 100644
--- a/Source/WebCore/Modules/model-element/HTMLModelElement.h
+++ b/Source/WebCore/Modules/model-element/HTMLModelElement.h
@@ -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();
diff --git a/Source/WebCore/Modules/model-element/ModelPlayer.cpp b/Source/WebCore/Modules/model-element/ModelPlayer.cpp
index 8838d66..9f0ec7c 100644
--- a/Source/WebCore/Modules/model-element/ModelPlayer.cpp
+++ b/Source/WebCore/Modules/model-element/ModelPlayer.cpp
@@ -35,4 +35,9 @@
return false;
}
+bool ModelPlayer::supportsDragging()
+{
+ return false;
+}
+
}
diff --git a/Source/WebCore/Modules/model-element/ModelPlayer.h b/Source/WebCore/Modules/model-element/ModelPlayer.h
index 299c55f..892aa97 100644
--- a/Source/WebCore/Modules/model-element/ModelPlayer.h
+++ b/Source/WebCore/Modules/model-element/ModelPlayer.h
@@ -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;
diff --git a/Source/WebCore/page/DragController.cpp b/Source/WebCore/page/DragController.cpp
index f4b8c87..84b98bd 100644
--- a/Source/WebCore/page/DragController.cpp
+++ b/Source/WebCore/page/DragController.cpp
@@ -755,7 +755,7 @@
static bool modelElementIsDraggable(const HTMLModelElement& modelElement)
{
- return !!modelElement.model();
+ return modelElement.supportsDragging() && !!modelElement.model();
}
#endif
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index bdbed52..a60fdb9 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,16 @@
+2022-01-27 Antoine Quint <graouts@webkit.org>
+
+ <model> should only be draggable on iOS
+ https://bugs.webkit.org/show_bug.cgi?id=235697
+
+ Reviewed by Dean Jackson.
+
+ Override the ModelPlayer method to enable <model> dragging on iOS.
+
+ * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h:
+ * WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm:
+ (WebKit::ARKitInlinePreviewModelPlayerIOS::supportsDragging):
+
2022-01-26 ChangSeok Oh <changseok@webkit.org>
[GTK] WTR: Native HTML form validation popover is not supported
diff --git a/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h b/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h
index 40a2595..afc2984 100644
--- a/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h
+++ b/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.h
@@ -44,6 +44,7 @@
std::optional<ModelIdentifier> modelIdentifier() override;
// WebCore::ModelPlayer overrides.
+ bool supportsDragging() override;
void enterFullscreen() override;
void handleMouseDown(const WebCore::LayoutPoint&, MonotonicTime) override;
void handleMouseMove(const WebCore::LayoutPoint&, MonotonicTime) override;
diff --git a/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm b/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm
index a99a34b..1386a4e 100644
--- a/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm
+++ b/Source/WebKit/WebProcess/Model/ios/ARKitInlinePreviewModelPlayerIOS.mm
@@ -61,6 +61,11 @@
// MARK: - WebCore::ModelPlayer overrides.
+bool ARKitInlinePreviewModelPlayerIOS::supportsDragging()
+{
+ return true;
+}
+
void ARKitInlinePreviewModelPlayerIOS::enterFullscreen()
{
RefPtr strongPage = page();