Title: [209523] trunk
Revision
209523
Author
[email protected]
Date
2016-12-07 21:51:05 -0800 (Wed, 07 Dec 2016)

Log Message

[Modern Media Controls] Tracks panel does not display in the right location in fullscreen and cannot be dismissed
https://bugs.webkit.org/show_bug.cgi?id=165575

Patch by Antoine Quint <[email protected]> on 2016-12-07
Reviewed by Dean Jackson.

Source/WebCore:

We position the tracks panel programmatically based on the current bounds of the fullscreen button in fullscreen.
This allows for the tracks panel to be shown in the right spot even after dragging the controls bar. We also use
the fullscreen media controls as the target for tracking "mousedown" events when the tracks panel is shown in a
fullscreen presentation.

Tests: media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls.html
       media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen.html

* Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
(.media-controls.mac.fullscreen .scrubber):
(.media-controls.mac.fullscreen .tracks-panel): Deleted.
* Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
(MacOSFullscreenMediaControls.prototype.showTracksPanel):
* Modules/modern-media-controls/controls/tracks-panel.js:
(TracksPanel.prototype.presentInParent):
(TracksPanel.prototype.hide):
(TracksPanel.prototype.get bottomY):
(TracksPanel.prototype.set bottomY):
(TracksPanel.prototype.commitProperty):
(TracksPanel.prototype._mousedownTarget):

LayoutTests:

Add new tests to check we correctly position the tracks panel in fullscreen, including when we drag the controls bar.

* media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls-expected.txt: Added.
* media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls.html: Added.
* media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen-expected.txt: Added.
* media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (209522 => 209523)


--- trunk/LayoutTests/ChangeLog	2016-12-08 05:18:06 UTC (rev 209522)
+++ trunk/LayoutTests/ChangeLog	2016-12-08 05:51:05 UTC (rev 209523)
@@ -1,3 +1,17 @@
+2016-12-07  Antoine Quint  <[email protected]>
+
+        [Modern Media Controls] Tracks panel does not display in the right location in fullscreen and cannot be dismissed
+        https://bugs.webkit.org/show_bug.cgi?id=165575
+
+        Reviewed by Dean Jackson.
+
+        Add new tests to check we correctly position the tracks panel in fullscreen, including when we drag the controls bar.
+
+        * media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls-expected.txt: Added.
+        * media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls.html: Added.
+        * media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen-expected.txt: Added.
+        * media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen.html: Added.
+
 2016-12-07  Jeremy Jones  <[email protected]>
 
         pointer-lock/lock-lost-on-esc-in-fullscreen.html timeout on mac-wk1

Added: trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls-expected.txt (0 => 209523)


--- trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls-expected.txt	2016-12-08 05:51:05 UTC (rev 209523)
@@ -0,0 +1,12 @@
+Testing the display of a tracks panel after dragging the controls bar in fullscreen.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS shadowRoot.querySelector('.tracks-panel').style.right is "267px"
+PASS shadowRoot.querySelector('.tracks-panel').style.bottom is "151px"
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls.html (0 => 209523)


--- trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls.html	                        (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls.html	2016-12-08 05:51:05 UTC (rev 209523)
@@ -0,0 +1,59 @@
+<!DOCTYPE html><!-- webkit-test-runner [ enableModernMediaControls=true ] -->
+<script src=""
+<body>
+<video src="" style="width: 320px; height: 240px;" controls autoplay></video>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Testing the display of a tracks panel after dragging the controls bar in fullscreen.");
+
+const media = document.querySelector("video");
+const shadowRoot = window.internals.shadowRoot(media);
+
+media.addEventListener("webkitbeginfullscreen", () => {
+    debug("webkitbeginfullscreen");
+});
+
+media.addEventListener("webkitfullscreenchange", () => {
+    if (media.webkitDisplayingFullscreen) {
+        window.requestAnimationFrame(() => {
+            const bounds = shadowRoot.querySelector(".controls-bar").getBoundingClientRect();
+            eventSender.mouseMoveTo(bounds.left + 10, bounds.top + 10);
+            eventSender.mouseDown();
+            eventSender.mouseMoveTo(bounds.left - 40, bounds.top - 40);
+            eventSender.mouseUp();
+
+            window.requestAnimationFrame(() => {
+                window.requestAnimationFrame(() => {
+                    clickOnButton("tracks");
+                    window.requestAnimationFrame(() => {
+                        shouldBeEqualToString("shadowRoot.querySelector('.tracks-panel').style.right", "267px");
+                        shouldBeEqualToString("shadowRoot.querySelector('.tracks-panel').style.bottom", "151px");
+
+                        debug("");
+                        media.remove();
+                        finishJSTest();
+                    });
+                });
+            });
+        });
+    }
+});
+
+media.addEventListener("play", () => {
+    media.pause();
+    window.requestAnimationFrame(() => clickOnButton("fullscreen"));
+});
+
+function clickOnButton(name)
+{
+    const bounds = shadowRoot.querySelector(`button.${name}`).getBoundingClientRect();
+    eventSender.mouseMoveTo(bounds.left + 1, bounds.top + 1);
+    eventSender.mouseDown();
+    eventSender.mouseUp();
+}
+
+</script>
+<script src=""
+</body>

Added: trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen-expected.txt (0 => 209523)


--- trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen-expected.txt	2016-12-08 05:51:05 UTC (rev 209523)
@@ -0,0 +1,12 @@
+Showing the tracks panel in fullscreen.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS shadowRoot.querySelector('.tracks-panel').style.right is "217px"
+PASS shadowRoot.querySelector('.tracks-panel').style.bottom is "101px"
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen.html (0 => 209523)


--- trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen.html	                        (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen.html	2016-12-08 05:51:05 UTC (rev 209523)
@@ -0,0 +1,51 @@
+<!DOCTYPE html><!-- webkit-test-runner [ enableModernMediaControls=true ] -->
+<script src=""
+<body>
+<video src="" style="width: 320px; height: 240px;" controls autoplay></video>
+<script type="text/_javascript_">
+
+window.jsTestIsAsync = true;
+
+description("Showing the tracks panel in fullscreen.");
+
+const media = document.querySelector("video");
+const shadowRoot = window.internals.shadowRoot(media);
+
+media.addEventListener("webkitbeginfullscreen", () => {
+    debug("webkitbeginfullscreen");
+});
+
+media.addEventListener("webkitfullscreenchange", () => {
+    if (media.webkitDisplayingFullscreen) {
+        window.requestAnimationFrame(() => {
+            clickOnButton("tracks");
+            window.requestAnimationFrame(() => {
+                window.requestAnimationFrame(() => {
+                    shouldBeEqualToString("shadowRoot.querySelector('.tracks-panel').style.right", "217px");
+                    shouldBeEqualToString("shadowRoot.querySelector('.tracks-panel').style.bottom", "101px");
+
+                    debug("");
+                    media.remove();
+                    finishJSTest();
+                });
+            });
+        });
+    }
+});
+
+media.addEventListener("play", () => {
+    media.pause();
+    window.requestAnimationFrame(() => clickOnButton("fullscreen"));
+});
+
+function clickOnButton(name)
+{
+    const bounds = shadowRoot.querySelector(`button.${name}`).getBoundingClientRect();
+    eventSender.mouseMoveTo(bounds.left + 1, bounds.top + 1);
+    eventSender.mouseDown();
+    eventSender.mouseUp();
+}
+
+</script>
+<script src=""
+</body>

Modified: trunk/Source/WebCore/ChangeLog (209522 => 209523)


--- trunk/Source/WebCore/ChangeLog	2016-12-08 05:18:06 UTC (rev 209522)
+++ trunk/Source/WebCore/ChangeLog	2016-12-08 05:51:05 UTC (rev 209523)
@@ -1,5 +1,33 @@
 2016-12-07  Antoine Quint  <[email protected]>
 
+        [Modern Media Controls] Tracks panel does not display in the right location in fullscreen and cannot be dismissed
+        https://bugs.webkit.org/show_bug.cgi?id=165575
+
+        Reviewed by Dean Jackson.
+
+        We position the tracks panel programmatically based on the current bounds of the fullscreen button in fullscreen.
+        This allows for the tracks panel to be shown in the right spot even after dragging the controls bar. We also use
+        the fullscreen media controls as the target for tracking "mousedown" events when the tracks panel is shown in a
+        fullscreen presentation.
+
+        Tests: media/modern-media-controls/tracks-support/tracks-support-show-panel-after-dragging-controls.html
+               media/modern-media-controls/tracks-support/tracks-support-show-panel-fullscreen.html
+
+        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
+        (.media-controls.mac.fullscreen .scrubber):
+        (.media-controls.mac.fullscreen .tracks-panel): Deleted.
+        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
+        (MacOSFullscreenMediaControls.prototype.showTracksPanel):
+        * Modules/modern-media-controls/controls/tracks-panel.js:
+        (TracksPanel.prototype.presentInParent):
+        (TracksPanel.prototype.hide):
+        (TracksPanel.prototype.get bottomY):
+        (TracksPanel.prototype.set bottomY):
+        (TracksPanel.prototype.commitProperty):
+        (TracksPanel.prototype._mousedownTarget):
+
+2016-12-07  Antoine Quint  <[email protected]>
+
         [Modern Media Controls] Use a small picture-in-picture button in fullscreen
         https://bugs.webkit.org/show_bug.cgi?id=165587
 

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css (209522 => 209523)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css	2016-12-08 05:18:06 UTC (rev 209522)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css	2016-12-08 05:51:05 UTC (rev 209523)
@@ -132,11 +132,3 @@
 .media-controls.mac.fullscreen .scrubber {
     top: 7px;
 }
-
-/* Tracks Panel */
-
-.media-controls.mac.fullscreen .tracks-panel {
-    /* Half of the screen width minus half of the controls bar width minus the distance to the right edge of the tracks button */
-    right: calc(50% - var(--controls-bar-width) / 2 + var(--tracks-panel-right-margin));
-    bottom: 234px;
-}

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js (209522 => 209523)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js	2016-12-08 05:18:06 UTC (rev 209522)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js	2016-12-08 05:51:05 UTC (rev 209523)
@@ -64,6 +64,17 @@
         this.element.addEventListener("mousedown", this);
     }
 
+    // Public
+
+    showTracksPanel()
+    {
+        super.showTracksPanel();
+
+        const tracksButtonBounds = this.tracksButton.element.getBoundingClientRect();
+        this.tracksPanel.rightX = window.innerWidth - tracksButtonBounds.right;
+        this.tracksPanel.bottomY = window.innerHeight - tracksButtonBounds.top + 1;
+    }
+
     // Protected
 
     handleEvent(event)

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/tracks-panel.js (209522 => 209523)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/tracks-panel.js	2016-12-08 05:18:06 UTC (rev 209522)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/tracks-panel.js	2016-12-08 05:51:05 UTC (rev 209523)
@@ -6,6 +6,7 @@
     {
         super(`<div class="tracks-panel">`);
         this._rightX = 0;
+        this._bottomY = 0;
     }
 
     // Public
@@ -27,7 +28,7 @@
         this.element.removeEventListener("transitionend", this);
         this.element.classList.remove("fade-out");
 
-        window.addEventListener("mousedown", this, true);
+        this._mousedownTarget().addEventListener("mousedown", this, true);
         window.addEventListener("keydown", this, true);
 
         this._focusedTrackNode = null;
@@ -38,7 +39,7 @@
         if (!this.presented)
             return;
 
-        window.removeEventListener("mousedown", this, true);
+        this._mousedownTarget().removeEventListener("mousedown", this, true);
         window.removeEventListener("keydown", this, true);
 
         this.element.addEventListener("transitionend", this);
@@ -45,6 +46,20 @@
         this.element.classList.add("fade-out");
     }
 
+    get bottomY()
+    {
+        return this._bottomY;
+    }
+
+    set bottomY(bottomY)
+    {
+        if (this._bottomY === bottomY)
+            return;
+
+        this._bottomY = bottomY;
+        this.markDirtyProperty("bottomY");
+    }
+
     get rightX()
     {
         return this._rightX;
@@ -82,6 +97,8 @@
     {
         if (propertyName === "rightX")
             this.element.style.right = `${this._rightX}px`;
+        else if (propertyName === "bottomY")
+            this.element.style.bottom = `${this._bottomY}px`;
         else
             super.commitProperty(propertyName);
     }
@@ -103,6 +120,14 @@
 
     // Private
 
+    _mousedownTarget()
+    {
+        const mediaControls = this.parentOfType(MacOSFullscreenMediaControls);
+        if (mediaControls)
+            return mediaControls.element;
+        return window;
+    }
+
     _childrenFromDataSource()
     {
         const children = [];
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to