Changeset 274293 in webkit
- Timestamp:
- Mar 11, 2021 12:33:42 PM (17 months ago)
- Location:
- trunk
- Files:
-
- 6 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/media/modern-media-controls/tracks-panel/tracks-panel-prevent-controls-bar-from-fading-expected.txt (modified) (1 diff)
-
LayoutTests/media/modern-media-controls/tracks-panel/tracks-panel-prevent-controls-bar-from-fading.html (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Modules/modern-media-controls/controls/auto-hide-controller.js (modified) (8 diffs)
-
Source/WebCore/Modules/modern-media-controls/controls/media-controls.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r274292 r274293 1 2021-03-11 Devin Rousso <drousso@apple.com> 2 3 Video controls stay on screen indefinitely after interacting with time scrubber 4 https://bugs.webkit.org/show_bug.cgi?id=223081 5 <rdar://problem/73935705> 6 7 Reviewed by Eric Carlson. 8 9 * media/modern-media-controls/tracks-panel/tracks-panel-prevent-controls-bar-from-fading.html: 10 * media/modern-media-controls/tracks-panel/tracks-panel-prevent-controls-bar-from-fading-expected.txt: 11 1 12 2021-03-11 Eric Carlson <eric.carlson@apple.com> 2 13 -
trunk/LayoutTests/media/modern-media-controls/tracks-panel/tracks-panel-prevent-controls-bar-from-fading-expected.txt
r228010 r274293 14 14 15 15 mediaControls.hideTracksPanel() 16 PASS mediaControls.faded istrue16 PASS mediaControls.faded became true 17 17 18 18 PASS successfullyParsed is true -
trunk/LayoutTests/media/modern-media-controls/tracks-panel/tracks-panel-prevent-controls-bar-from-fading.html
r228010 r274293 48 48 debug("mediaControls.hideTracksPanel()"); 49 49 mediaControls.hideTracksPanel(); 50 shouldBe True("mediaControls.faded");51 52 debug("");53 mediaControls.element.remove();54 finishJSTest();50 shouldBecomeEqual("mediaControls.faded", "true", () => { 51 debug(""); 52 mediaControls.element.remove(); 53 finishJSTest(); 54 }); 55 55 }, mediaControls.autoHideController.autoHideDelay); 56 56 }); -
trunk/Source/WebCore/ChangeLog
r274287 r274293 1 2021-03-11 Devin Rousso <drousso@apple.com> 2 3 Video controls stay on screen indefinitely after interacting with time scrubber 4 https://bugs.webkit.org/show_bug.cgi?id=223081 5 <rdar://problem/73935705> 6 7 Reviewed by Eric Carlson. 8 9 Test: media/modern-media-controls/tracks-panel/tracks-panel-prevent-controls-bar-from-fading.html 10 11 * Modules/modern-media-controls/controls/auto-hide-controller.js: 12 (AutoHideController): 13 (AutoHideController.prototype.set fadesWhileIdle): 14 (AutoHideController.prototype.get hasSecondaryUIAttached): Added. 15 (AutoHideController.prototype.set hasSecondaryUIAttached): Added. 16 (AutoHideController.prototype.handleEvent): 17 (AutoHideController.prototype.mediaControlsFadedStateDidChange): 18 (AutoHideController.prototype.mediaControlsBecameInvisible): 19 (AutoHideController.prototype.get _canFadeControls): Added. 20 (AutoHideController.prototype._resetAutoHideTimer): 21 (AutoHideController.prototype._autoHideTimerFired): 22 (AutoHideController.prototype._cancelNonEnforcedAutoHideTimer): Deleted. 23 Simplify the logic of `AutoHideController` to always listen for `"pointer*"` events instead 24 of adding/removing them depending on `set fadesWhileIdle`. This was problematic because when 25 the media is paused, `ControlsVisibilitySupport` will disable `fadesWhileIdle`, removing all 26 `"pointer*"` event listeners, only to re-add them as soon as the media is resumed (this is 27 especially bad when clicking on the time scrubber track to seek, as this will pause and then 28 resume the media in rapid succession). Remove `_enforceAutoHideTimer` as there's no case 29 where we wouldn't want to be able to delay/cancel the auto-hide based on user interaction. 30 31 * Modules/modern-media-controls/controls/media-controls.js: 32 (MediaControls.prototype.hideTracksPanel): 33 Now that `set hasSecondaryUIAttached` also calls `_resetAutoHideTimer`, don't manually set 34 `this.faded` and instead use the logic/timing in `AutoHideController`. 35 1 36 2021-03-11 Rob Buis <rbuis@igalia.com> 2 37 -
trunk/Source/WebCore/Modules/modern-media-controls/controls/auto-hide-controller.js
r253248 r274293 36 36 this._pointerIdentifiersPreventingAutoHideForHover = new Set; 37 37 38 this._mediaControls.element.addEventListener("pointermove", this); 39 this._mediaControls.element.addEventListener("pointerdown", this); 40 this._mediaControls.element.addEventListener("pointerup", this); 41 this._mediaControls.element.addEventListener("pointerleave", this); 42 this._mediaControls.element.addEventListener("pointerout", this); 43 38 44 if (GestureRecognizer.SupportsTouches) 39 45 this._tapGestureRecognizer = new TapGestureRecognizer(this._mediaControls.element, this); … … 56 62 this._fadesWhileIdle = flag; 57 63 58 if (flag) { 59 this._mediaControls.element.addEventListener("pointermove", this); 60 this._mediaControls.element.addEventListener("pointerdown", this); 61 this._mediaControls.element.addEventListener("pointerup", this); 62 this._mediaControls.element.addEventListener("pointerleave", this); 63 this._mediaControls.element.addEventListener("pointerout", this); 64 } else { 65 this._mediaControls.element.removeEventListener("pointermove", this); 66 this._mediaControls.element.removeEventListener("pointerdown", this); 67 this._mediaControls.element.removeEventListener("pointerup", this); 68 this._mediaControls.element.removeEventListener("pointerleave", this); 69 this._mediaControls.element.removeEventListener("pointerout", this); 70 } 64 if (!this._fadesWhileIdle) 65 this._mediaControls.faded = false; 71 66 72 if (flag && !this._mediaControls.faded) 73 this._resetAutoHideTimer(false); 74 else if (!flag) 75 this._mediaControls.faded = false; 67 this._resetAutoHideTimer(); 68 } 69 70 get hasSecondaryUIAttached() 71 { 72 return this._hasSecondaryUIAttached; 73 } 74 75 set hasSecondaryUIAttached(flag) 76 { 77 if (this._hasSecondaryUIAttached == flag) 78 return; 79 80 this._hasSecondaryUIAttached = flag; 81 82 this._resetAutoHideTimer(); 76 83 } 77 84 … … 83 90 return; 84 91 85 if (event.type === "pointermove") { 92 switch (event.type) { 93 case "pointermove": 86 94 this._mediaControls.faded = false; 87 this._resetAutoHideTimer(true);88 95 if (this._mediaControls.isPointInControls(new DOMPoint(event.clientX, event.clientY))) { 89 96 this._pointerIdentifiersPreventingAutoHideForHover.add(event.pointerId); 90 this._cancel NonEnforcedAutoHideTimer();97 this._cancelAutoHideTimer(); 91 98 } else { 92 99 this._pointerIdentifiersPreventingAutoHideForHover.delete(event.pointerId); 93 this._resetAutoHideTimer( true);100 this._resetAutoHideTimer(); 94 101 } 95 } else if (event.type === "pointerleave" && this._fadesWhileIdle && !this.hasSecondaryUIAttached && !this._enforceAutoHideTimer) { 102 return; 103 104 case "pointerleave": 96 105 this._pointerIdentifiersPreventingAutoHide.delete(event.pointerId); 97 106 this._pointerIdentifiersPreventingAutoHideForHover.delete(event.pointerId); … … 102 111 this._autoHideTimerFired(); 103 112 104 this._resetAutoHideTimer( true);105 }113 this._resetAutoHideTimer(); 114 return; 106 115 107 if (event.type === "pointerdown") {116 case "pointerdown": 108 117 // Remember the current faded state so that we can determine, 109 118 // if we recognize a tap, if it should fade the controls out. … … 111 120 this._pointerIdentifiersPreventingAutoHide.add(event.pointerId); 112 121 this._mediaControls.faded = false; 113 this._cancelNonEnforcedAutoHideTimer(); 114 } else if (event.type === "pointerup") { 122 this._cancelAutoHideTimer(); 123 return; 124 125 case "pointerup": 115 126 this._pointerIdentifiersPreventingAutoHide.delete(event.pointerId); 116 this._resetAutoHideTimer(true); 127 this._resetAutoHideTimer(); 128 return; 117 129 } 118 130 } … … 129 141 mediaControlsFadedStateDidChange() 130 142 { 131 if (this._mediaControls.faded) 132 delete this._enforceAutoHideTimer; 133 else 134 this._resetAutoHideTimer(true); 143 this._resetAutoHideTimer(); 135 144 } 136 145 137 146 mediaControlsBecameInvisible() 138 147 { 139 this._cancel NonEnforcedAutoHideTimer();148 this._cancelAutoHideTimer(); 140 149 } 141 150 142 151 // Private 143 152 144 _cancelNonEnforcedAutoHideTimer()153 get _canFadeControls() 145 154 { 146 if (!this._enforceAutoHideTimer) 147 this._cancelAutoHideTimer(); 155 return this._fadesWhileIdle && !this._hasSecondaryUIAttached; 148 156 } 149 157 … … 154 162 } 155 163 156 _resetAutoHideTimer( cancelable)164 _resetAutoHideTimer() 157 165 { 158 if (cancelable && this._enforceAutoHideTimer)159 return;160 161 166 this._cancelAutoHideTimer(); 162 167 163 if (cancelable) 164 delete this._enforceAutoHideTimer; 165 else 166 this._enforceAutoHideTimer = true; 168 if (this._mediaControls.faded || !this._canFadeControls) 169 return; 167 170 168 171 this._autoHideTimer = window.setTimeout(this._autoHideTimerFired.bind(this), this.autoHideDelay); … … 171 174 _autoHideTimerFired() 172 175 { 173 const disableAutoHiding = this._pointerIdentifiersPreventingAutoHide.size || this._pointerIdentifiersPreventingAutoHideForHover.size;176 delete this._autoHideTimer; 174 177 175 delete this._enforceAutoHideTimer; 176 if (disableAutoHiding) 177 return; 178 179 this._cancelAutoHideTimer(); 180 this._mediaControls.faded = this._fadesWhileIdle && !this.hasSecondaryUIAttached; 178 this._mediaControls.faded = this._canFadeControls && !this._pointerIdentifiersPreventingAutoHide.size && !this._pointerIdentifiersPreventingAutoHideForHover.size; 181 179 } 182 180 -
trunk/Source/WebCore/Modules/modern-media-controls/controls/media-controls.js
r273004 r274293 192 192 this.element.classList.remove("shows-tracks-panel"); 193 193 194 let shouldFadeControlsBar = true;195 if (window.event instanceof MouseEvent)196 shouldFadeControlsBar = !this.isPointInControls(new DOMPoint(event.clientX, event.clientY), true);197 198 194 this.tracksButton.on = false; 199 195 this.tracksButton.element.focus(); 200 196 this.autoHideController.hasSecondaryUIAttached = false; 201 this.faded = this.autoHideController.fadesWhileIdle && shouldFadeControlsBar;202 197 this.tracksPanel.hide(); 203 198 }
Note: See TracChangeset
for help on using the changeset viewer.