Changeset 228462 in webkit
- Timestamp:
- Feb 13, 2018 10:57:41 PM (6 years ago)
- Location:
- branches/safari-605-branch
- Files:
-
- 25 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-605-branch/LayoutTests/ChangeLog
r228450 r228462 1 2018-02-13 Jason Marcell <jmarcell@apple.com> 2 3 Cherry-pick r228445. rdar://problem/37523940 4 5 2018-02-13 Antoine Quint <graouts@apple.com> 6 7 Removing the controls attribute from a <video> element does not tear down the controls shadow DOM nor cancel event listeners. 8 https://bugs.webkit.org/show_bug.cgi?id=182668 9 10 Reviewed by Jer Noble. 11 12 Ensure controls are turned on for a number of tests that would fail otherwise since media events would not be handled by media 13 controls without it. 14 15 * http/tests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-live-broadcast.html: 16 * http/tests/media/modern-media-controls/pip-support/pip-support-live-broadcast.html: 17 * http/tests/media/modern-media-controls/skip-back-support/skip-back-support-button-click.html: 18 * http/tests/media/modern-media-controls/skip-back-support/skip-back-support-live-broadcast.html: 19 * http/tests/media/modern-media-controls/status-support/status-support-live-broadcast.html: 20 * http/tests/media/modern-media-controls/status-support/status-support-loading.html: 21 * media/modern-media-controls/airplay-support/airplay-support.html: 22 * media/modern-media-controls/mute-support/mute-support-media-api.html: 23 * media/modern-media-controls/playback-support/playback-support-autoplay.html: 24 * media/modern-media-controls/playback-support/playback-support-media-api.html: 25 * media/modern-media-controls/start-support/start-support-error.html: 26 * media/modern-media-controls/start-support/start-support-lowPowerMode.html: 27 * media/modern-media-controls/start-support/start-support-manual-play.html: 28 * media/modern-media-controls/status-support/status-support-error.html: 29 * media/modern-media-controls/time-labels-support/elapsed-time.html: 30 * media/modern-media-controls/time-labels-support/remaining-time.html: 31 * media/modern-media-controls/tracks-support/tracks-support-audio-tracks.html: 32 * media/modern-media-controls/tracks-support/tracks-support-text-tracks.html: 33 * media/modern-media-controls/volume-support/volume-support-media-api-mute.html: 34 * media/modern-media-controls/volume-support/volume-support-media-api.html: 35 1 36 2018-02-13 Jason Marcell <jmarcell@apple.com> 2 37 -
branches/safari-605-branch/LayoutTests/http/tests/media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-live-broadcast.html
r213920 r228462 3 3 <script src="/media-resources/modern-media-controls/resources/media-controls-utils.js"></script> 4 4 <body> 5 <video src="../../resources/hls/test-live.php" style="width: 800px;" autoplay ></video>5 <video src="../../resources/hls/test-live.php" style="width: 800px;" autoplay controls></video> 6 6 <div id="shadow"></div> 7 7 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/http/tests/media/modern-media-controls/pip-support/pip-support-live-broadcast.html
r211687 r228462 2 2 <script src="/media-resources/modern-media-controls/resources/media-controls-loader.js"></script> 3 3 <body> 4 <video src="../../resources/hls/test-live.php" style="width: 800px;" autoplay ></video>4 <video src="../../resources/hls/test-live.php" style="width: 800px;" autoplay controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/http/tests/media/modern-media-controls/skip-back-support/skip-back-support-button-click.html
r208226 r228462 2 2 <script src="/media-resources/modern-media-controls/resources/media-controls-loader.js"></script> 3 3 <body> 4 <video src="../../resources/hls/generate-vod.php?duration=8000" style="width: 320px; height: 240px;" ></video>4 <video src="../../resources/hls/generate-vod.php?duration=8000" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/http/tests/media/modern-media-controls/skip-back-support/skip-back-support-live-broadcast.html
r211641 r228462 2 2 <script src="/media-resources/modern-media-controls/resources/media-controls-loader.js"></script> 3 3 <body> 4 <video src="../../resources/hls/test-live.php" style="width: 800px;" autoplay ></video>4 <video src="../../resources/hls/test-live.php" style="width: 800px;" autoplay controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/http/tests/media/modern-media-controls/status-support/status-support-live-broadcast.html
r208491 r228462 2 2 <script src="/media-resources/modern-media-controls/resources/media-controls-loader.js"></script> 3 3 <body> 4 <video src="../../resources/hls/test-live.php" style="width: 320px; height: 240px;" autoplay ></video>4 <video src="../../resources/hls/test-live.php" style="width: 320px; height: 240px;" autoplay controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/http/tests/media/modern-media-controls/status-support/status-support-loading.html
r208491 r228462 2 2 <script src="/media-resources/modern-media-controls/resources/media-controls-loader.js"></script> 3 3 <body> 4 <video src="http://127.0.0.1:8000/resources/load-and-stall.cgi?name=../../../media/content/test.mp4&mimeType=video/mp4&stallAt=1&stallFor=4" style="width: 320px; height: 240px;" ></video>4 <video src="http://127.0.0.1:8000/resources/load-and-stall.cgi?name=../../../media/content/test.mp4&mimeType=video/mp4&stallAt=1&stallFor=4" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/airplay-support/airplay-support.html
r219412 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" autoplay ></video>4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" autoplay controls></video> 5 5 <div id="host"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/mute-support/mute-support-media-api.html
r208226 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" ></video>4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/playback-support/playback-support-autoplay.html
r208226 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" autoplay ></video>4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" autoplay controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/playback-support/playback-support-media-api.html
r215916 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" ></video>4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/start-support/start-support-error.html
r208226 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="404.mp4" style="width: 320px; height: 240px;" ></video>4 <video src="404.mp4" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/start-support/start-support-lowPowerMode.html
r219710 r228462 46 46 } 47 47 }); 48 49 setTimeout(finishJSTest, 5000); 50 48 51 </script> 49 52 <script src="../../../resources/js-test-post.js"></script> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/start-support/start-support-manual-play.html
r215916 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" ></video>4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/status-support/status-support-error.html
r208491 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="404.mp4" style="width: 320px; height: 240px;" ></video>4 <video src="404.mp4" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/time-labels-support/elapsed-time.html
r219715 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" ></video>4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/time-labels-support/remaining-time.html
r219715 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" ></video>4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-audio-tracks.html
r208585 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="../../content/audio-tracks.mp4" style="width: 320px; height: 240px;" ></video>4 <video src="../../content/audio-tracks.mp4" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/tracks-support/tracks-support-text-tracks.html
r208585 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="../../content/counting-subtitled.m4v" style="width: 320px; height: 240px;" ></video>4 <video src="../../content/counting-subtitled.m4v" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/volume-support/volume-support-media-api-mute.html
r208226 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" ></video>4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/LayoutTests/media/modern-media-controls/volume-support/volume-support-media-api.html
r208226 r228462 2 2 <script src="../resources/media-controls-loader.js" type="text/javascript"></script> 3 3 <body> 4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" ></video>4 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" controls></video> 5 5 <div id="shadow"></div> 6 6 <script type="text/javascript"> -
branches/safari-605-branch/Source/WebCore/ChangeLog
r228461 r228462 1 2018-02-13 Jason Marcell <jmarcell@apple.com> 2 3 Cherry-pick r228445. rdar://problem/37523940 4 5 2018-02-13 Antoine Quint <graouts@apple.com> 6 7 Removing the controls attribute from a <video> element does not tear down the controls shadow DOM nor cancel event listeners. 8 https://bugs.webkit.org/show_bug.cgi?id=182668 9 <rdar://problem/33793004> 10 11 Reviewed by Jer Noble. 12 13 When controls were turned off for inline media players, we would remove all media controls elements from the shadow root, 14 but we would nevertheless continue to listen to media events and, as a result, update properties of the media controls 15 which would lead to requestAnimationFrame() calls that would update the detached DOM nodes. 16 17 We now only listent to media events if controls are turned on. 18 19 * Modules/modern-media-controls/media/controls-visibility-support.js: 20 (ControlsVisibilitySupport.prototype.enable): Remove the mutation observer from ControlsVisibilitySupport since observing 21 changes to the controls attribute is now performed directly in MediaController. We need to make sure that we update the 22 controls however since fadesWhileIdle is turned off in the disable() call to ensure that the auto-hide behavior is disabled 23 as well. 24 (ControlsVisibilitySupport.prototype.disable): Disable the auto-hide controller as well. 25 (ControlsVisibilitySupport.prototype._updateControls): Remove code that has now been moved into MediaController._updateControlsAvailability(). 26 * Modules/modern-media-controls/media/media-controller.js: 27 (MediaController): Listen to the "play" event on the media so that we call _updateControlsAvailability() in this situation to account for 28 shouldForceControlsDisplay on MediaControlsHost. We also register for a mutation observer to track when the controls attribute availability 29 changes in which case we want to call _updateControlsAvailability() as well. 30 (MediaController.prototype.handleEvent): Call _updateControlsAvailability() instead of _updateiOSFullscreenProperties() which has been renamed 31 and expanded. 32 (MediaController.prototype._updateControlsIfNeeded): Call _updateControlsAvailability() after controls have been updated. 33 (MediaController.prototype._updateControlsAvailability): We now disable supporting media controller objects when we know that controls should 34 be hidden in all cases except when in fullscreen on macOS. 35 (MediaController.prototype._updateiOSFullscreenProperties): Deleted. 36 * Modules/modern-media-controls/media/placard-support.js: 37 (PlacardSupport.prototype.disable): Only allow the media events required to track when to show placards when in fullscreen since inline media 38 players need to show the AirPlay and picture-in-picture placards even when controls are disabled. 39 1 40 2018-02-13 Jason Marcell <jmarcell@apple.com> 2 41 -
branches/safari-605-branch/Source/WebCore/Modules/modern-media-controls/media/controls-visibility-support.js
r225279 r228462 39 39 { 40 40 super.enable(); 41 42 if (this._controlsAttributeObserver) 43 return; 44 45 this._controlsAttributeObserver = new MutationObserver(this._updateControls.bind(this)); 46 this._controlsAttributeObserver.observe(this.mediaController.media, { attributes: true, attributeFilter: ["controls"] }); 41 this._updateControls(); 47 42 } 48 43 … … 50 45 { 51 46 super.disable(); 52 53 if (!this._controlsAttributeObserver) 54 return; 55 56 this._controlsAttributeObserver.disconnect(); 57 delete this._controlsAttributeObserver; 47 this.mediaController.controls.autoHideController.fadesWhileIdle = false; 58 48 } 59 49 … … 78 68 { 79 69 const media = this.mediaController.media; 80 const host = this.mediaController.host;81 const shouldShowControls = !!(media.controls || (host && host.shouldForceControlsDisplay) || this.mediaController.isFullscreen);82 70 const isVideo = media instanceof HTMLVideoElement && media.videoTracks.length > 0; 83 84 const controls = this.mediaController.controls; 85 controls.visible = shouldShowControls; 86 controls.autoHideController.fadesWhileIdle = isVideo ? !media.paused && !media.webkitCurrentPlaybackTargetIsWireless : false; 71 this.mediaController.controls.autoHideController.fadesWhileIdle = isVideo ? !media.paused && !media.webkitCurrentPlaybackTargetIsWireless : false; 87 72 } 88 73 -
branches/safari-605-branch/Source/WebCore/Modules/modern-media-controls/media/media-controller.js
r226872 r228462 57 57 media.videoTracks.addEventListener("removetrack", this); 58 58 59 media.addEventListener("play", this); 59 60 media.addEventListener(this.fullscreenChangeEventType, this); 60 61 61 62 window.addEventListener("keydown", this); 63 64 new MutationObserver(this._updateControlsAvailability.bind(this)).observe(this.media, { attributes: true, attributeFilter: ["controls"] }); 62 65 } 63 66 … … 165 168 } else if (event.currentTarget === this.media) { 166 169 this._updateControlsIfNeeded(); 167 this._update iOSFullscreenProperties();170 this._updateControlsAvailability(); 168 171 if (event.type === "webkitpresentationmodechanged") 169 172 this._returnMediaLayerToInlineIfNeeded(); … … 215 218 216 219 this.controls.shouldUseSingleBarLayout = this.controls instanceof InlineMediaControls && this.isYouTubeEmbedWithTitle; 220 221 this._updateControlsAvailability(); 217 222 } 218 223 … … 301 306 } 302 307 303 _updateiOSFullscreenProperties() 304 { 305 // On iOS, we want to make sure not to update controls when we're in fullscreen since the UI 306 // will be completely invisible. 307 if (!(this.layoutTraits & LayoutTraits.iOS)) 308 return; 309 310 const isFullscreen = this.isFullscreen; 311 if (isFullscreen) 308 _updateControlsAvailability() 309 { 310 const shouldControlsBeAvailable = !!(this.media.controls || (this.host && this.host.shouldForceControlsDisplay) || ((this.layoutTraits & LayoutTraits.macOS) && this.isFullscreen)); 311 312 if (!shouldControlsBeAvailable) 312 313 this._supportingObjects.forEach(supportingObject => supportingObject.disable()); 313 314 else 314 315 this._supportingObjects.forEach(supportingObject => supportingObject.enable()); 315 316 316 this.controls.visible = !isFullscreen;317 this.controls.visible = shouldControlsBeAvailable; 317 318 } 318 319 -
branches/safari-605-branch/Source/WebCore/Modules/modern-media-controls/media/placard-support.js
r218400 r228462 45 45 } 46 46 47 disable() 48 { 49 // We should not allow disabling Placard support when playing inline as it would prevent the 50 // PiP placard from being shown if the controls are disabled. 51 if (this.mediaController.isFullscreen) 52 super.disable(); 53 } 54 47 55 // Private 48 56
Note: See TracChangeset
for help on using the changeset viewer.