Title: [294573] trunk
Revision
294573
Author
drou...@apple.com
Date
2022-05-20 13:49:54 -0700 (Fri, 20 May 2022)

Log Message

[Modern Media Controls] macCatalyst should not use touch events
https://bugs.webkit.org/show_bug.cgi?id=240704
<rdar://problem/84570717>

Reviewed by Eric Carlson.

* Source/WebCore/Modules/modern-media-controls/controls/layout-traits.js:
(LayoutTraits.prototype.supportsTouches): Added.
* Source/WebCore/Modules/modern-media-controls/controls/macos-layout-traits.js:
(MacOSLayoutTraits.prototype.supportsTouches): Added.
Allow `LayoutTraits` to indicate whether touches are supported.

* Source/WebCore/Modules/modern-media-controls/controls/auto-hide-controller.js:
(AutoHideController):
* Source/WebCore/Modules/modern-media-controls/controls/button.js:
(Button):
* Source/WebCore/Modules/modern-media-controls/controls/range-button.js:
(RangeButton):
* Source/WebCore/Modules/modern-media-controls/controls/slider.js:
(Slider.prototype._interactionEndTarget):
* Source/WebCore/Modules/modern-media-controls/media/media-document-controller.js:
(MediaDocumentController):
Use `LayoutTraits.prototype.supportsTouches` instead of `GestureRecognizer.SupportsTouches` so that
macOS (including macCatalyst) can always act as though touches are not supported (which is fine
since mouse events are fully functional on macOS).

* LayoutTests/media/modern-media-controls/button/button-icon-name.html:
* LayoutTests/media/modern-media-controls/button/button.html:
* LayoutTests/media/modern-media-controls/buttons-container/buttons-container-buttons-property.html:
* LayoutTests/media/modern-media-controls/buttons-container/buttons-container-constructor.html:
* LayoutTests/media/modern-media-controls/buttons-container/buttons-container-layout.html:
Add `layoutDelegate`/`layoutTraits` where needed.

Canonical link: https://commits.webkit.org/250814@main

Modified Paths

Diff

Modified: trunk/LayoutTests/media/modern-media-controls/button/button-icon-name.html (294572 => 294573)


--- trunk/LayoutTests/media/modern-media-controls/button/button-icon-name.html	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/LayoutTests/media/modern-media-controls/button/button-icon-name.html	2022-05-20 20:49:54 UTC (rev 294573)
@@ -8,7 +8,7 @@
 
 description("Testing the <code>Button</code> class <code>iconName</code> property.");
 
-const layoutDelegate = {};
+const layoutDelegate = { layoutTraits: new MacOSLayoutTraits(LayoutTraits.Mode.Inline) };
 
 const button = new Button({ layoutDelegate });
 
@@ -18,6 +18,7 @@
 
 debug("");
 debug("Setting an iconName with invalid layout traits should throw");
+layoutDelegate.layoutTraits = null;
 shouldThrow(function() { button.iconName = Icons.Pause });
 shouldBeEqualToString("button.iconName", "");
 

Modified: trunk/LayoutTests/media/modern-media-controls/button/button.html (294572 => 294573)


--- trunk/LayoutTests/media/modern-media-controls/button/button.html	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/LayoutTests/media/modern-media-controls/button/button.html	2022-05-20 20:49:54 UTC (rev 294573)
@@ -17,7 +17,9 @@
 
 description("Testing the <code>Button</code> class.");
 
-const button = new Button;
+const layoutDelegate = { layoutTraits: new MacOSLayoutTraits(LayoutTraits.Mode.Inline) };
+
+const button = new Button({ layoutDelegate });
 document.body.appendChild(button.element);
 
 debug("Default values");

Modified: trunk/LayoutTests/media/modern-media-controls/buttons-container/buttons-container-buttons-property.html (294572 => 294573)


--- trunk/LayoutTests/media/modern-media-controls/buttons-container/buttons-container-buttons-property.html	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/LayoutTests/media/modern-media-controls/buttons-container/buttons-container-buttons-property.html	2022-05-20 20:49:54 UTC (rev 294573)
@@ -8,6 +8,8 @@
 
 window.jsTestIsAsync = true;
 
+const layoutDelegate = { layoutTraits: new MacOSLayoutTraits(LayoutTraits.Mode.Inline) };
+
 const container = new ButtonsContainer({
     leftMargin: 20,
     rightMargin: 20,
@@ -14,7 +16,11 @@
     buttonMargin: 10
 });
 
-container.children = [new Button, new Button, new Button];
+container.children = [
+    new Button({ layoutDelegate }),
+    new Button({ layoutDelegate }),
+    new Button({ layoutDelegate }),
+];
 
 scheduler.frameDidFire = function()
 {

Modified: trunk/LayoutTests/media/modern-media-controls/buttons-container/buttons-container-constructor.html (294572 => 294573)


--- trunk/LayoutTests/media/modern-media-controls/buttons-container/buttons-container-constructor.html	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/LayoutTests/media/modern-media-controls/buttons-container/buttons-container-constructor.html	2022-05-20 20:49:54 UTC (rev 294573)
@@ -5,6 +5,8 @@
 
 description("Testing the <code>ButtonsContainer</code> constructor.");
 
+const layoutDelegate = { layoutTraits: new MacOSLayoutTraits(LayoutTraits.Mode.Inline) };
+
 const defaultContainer = new ButtonsContainer;
 shouldBeEqualToString("defaultContainer.element.localName", "div");
 shouldBeEqualToString("defaultContainer.element.className.trim()", "buttons-container");
@@ -13,7 +15,11 @@
 shouldBe("defaultContainer.rightMargin", "16");
 shouldBe("defaultContainer.children", "[]");
 
-const buttons = [new Button, new Button];
+const buttons = [
+    new Button({ layoutDelegate }),
+    new Button({ layoutDelegate }),
+];
+
 const containerWithParameters = new ButtonsContainer({
     buttonMargin: 10,
     leftMargin: 20,

Modified: trunk/LayoutTests/media/modern-media-controls/buttons-container/buttons-container-layout.html (294572 => 294573)


--- trunk/LayoutTests/media/modern-media-controls/buttons-container/buttons-container-layout.html	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/LayoutTests/media/modern-media-controls/buttons-container/buttons-container-layout.html	2022-05-20 20:49:54 UTC (rev 294573)
@@ -5,22 +5,24 @@
 
 description("Testing <code>ButtonsContainer</code> layout.");
 
-const tenPtWideButton = new Button;
+const layoutDelegate = { layoutTraits: new MacOSLayoutTraits(LayoutTraits.Mode.Inline) };
+
+const tenPtWideButton = new Button({ layoutDelegate });
 tenPtWideButton.width = 10;
 
-const twentyPtWideButton = new Button;
+const twentyPtWideButton = new Button({ layoutDelegate });
 twentyPtWideButton.width = 20;
 
-const thirtyPtWideButton = new Button;
+const thirtyPtWideButton = new Button({ layoutDelegate });
 thirtyPtWideButton.width = 30;
 
 // Should be disregarded by the container.
-const disabledButton = new Button;
+const disabledButton = new Button({ layoutDelegate });
 disabledButton.width = 15;
 disabledButton.enabled = false;
 
 // Should be disregarded by the container.
-const droppedButton = new Button;
+const droppedButton = new Button({ layoutDelegate });
 droppedButton.width = 25;
 droppedButton.dropped = true;
 

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/auto-hide-controller.js (294572 => 294573)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/auto-hide-controller.js	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/auto-hide-controller.js	2022-05-20 20:49:54 UTC (rev 294573)
@@ -41,7 +41,7 @@
         this._mediaControls.element.addEventListener("pointerleave", this);
         this._mediaControls.element.addEventListener("pointerout", this);
 
-        if (GestureRecognizer.SupportsTouches)
+        if (this._mediaControls.layoutTraits.supportsTouches())
             this._tapGestureRecognizer = new TapGestureRecognizer(this._mediaControls.element, this);
 
         this.autoHideDelay = AutoHideDelayMS;

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/button.js (294572 => 294573)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/button.js	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/button.js	2022-05-20 20:49:54 UTC (rev 294573)
@@ -48,7 +48,7 @@
 
         this._enabled = true;
 
-        if (GestureRecognizer.SupportsTouches)
+        if (this.layoutTraits.supportsTouches())
             this._tapGestureRecognizer = new TapGestureRecognizer(this.element, this);
         else
             this.element.addEventListener("click", this);

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/layout-traits.js (294572 => 294573)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/layout-traits.js	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/layout-traits.js	2022-05-20 20:49:54 UTC (rev 294573)
@@ -91,6 +91,13 @@
         return false;
     }
 
+    supportsTouches()
+    {
+        // Can be overridden by subclasses.
+
+        return GestureRecognizer.SupportsTouches;
+    }
+
     additionalControlScaleFactor()
     {
         return 1;

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-layout-traits.js (294572 => 294573)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-layout-traits.js	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-layout-traits.js	2022-05-20 20:49:54 UTC (rev 294573)
@@ -76,6 +76,11 @@
     {
         return true;
     }
+
+    supportsTouches()
+    {
+        return false;
+    }
     
     toString()
     {

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/range-button.js (294572 => 294573)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/range-button.js	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/range-button.js	2022-05-20 20:49:54 UTC (rev 294573)
@@ -41,7 +41,7 @@
 
         this._indicator.visible = false;
 
-        if (GestureRecognizer.SupportsTouches)
+        if (this.layoutTraits.supportsTouches())
             this._tapGestureRecognizer.enabled = false;
         else
             this.element.removeEventListener("click", this);

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/slider.js (294572 => 294573)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/slider.js	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/slider.js	2022-05-20 20:49:54 UTC (rev 294573)
@@ -209,7 +209,7 @@
     _interactionEndTarget()
     {
         const mediaControls = this.parentOfType(MediaControls);
-        if (GestureRecognizer.SupportsTouches)
+        if (mediaControls?.layoutTraits.supportsTouches())
             return mediaControls.element;
         return (!mediaControls || !mediaControls.layoutTraits.isFullscreen) ? window : mediaControls.element;
     }

Modified: trunk/Source/WebCore/Modules/modern-media-controls/media/media-document-controller.js (294572 => 294573)


--- trunk/Source/WebCore/Modules/modern-media-controls/media/media-document-controller.js	2022-05-20 20:43:30 UTC (rev 294572)
+++ trunk/Source/WebCore/Modules/modern-media-controls/media/media-document-controller.js	2022-05-20 20:49:54 UTC (rev 294573)
@@ -42,7 +42,7 @@
 
         let deviceType = window.navigator.platform;
         if (deviceType == "MacIntel")
-            deviceType = GestureRecognizer.SupportsTouches ? "ipad" : "mac";
+            deviceType = mediaController.layoutTraits.supportsTouches() ? "ipad" : "mac";
 
         media.classList.add(deviceType);
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to