Changeset 211687 in webkit
- Timestamp:
- Feb 5, 2017 12:55:21 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r211685 r211687 1 2017-02-05 Antoine Quint <graouts@apple.com> 2 3 [Modern Media Controls] PiP button is not visible with a live broadcast video 4 https://bugs.webkit.org/show_bug.cgi?id=167794 5 <rdar://problem/30348790> 6 7 Reviewed by Dean Jackson. 8 9 Add a new test to check that a live broadcast video shows the picture-in-picture button. 10 11 * http/tests/media/modern-media-controls/pip-support/pip-support-live-broadcast-expected.txt: Added. 12 * http/tests/media/modern-media-controls/pip-support/pip-support-live-broadcast.html: Added. 13 * platform/mac/TestExpectations: 14 1 15 2017-02-05 Antoine Quint <graouts@apple.com> 2 16 -
trunk/LayoutTests/platform/mac/TestExpectations
r211650 r211687 1458 1458 # picture-in-picture is not supported prior to Sierra. 1459 1459 [ ElCapitan ] media/modern-media-controls/pip-support [ Skip ] 1460 [ ElCapitan ] http/tests/media/modern-media-controls/pip-support [ Skip ] 1460 1461 [ ElCapitan ] media/modern-media-controls/media-controller/media-controller-inline-to-fullscreen-to-pip-to-inline.html [ Skip ] 1461 1462 [ ElCapitan ] media/modern-media-controls/placard-support/placard-support-pip.html [ Skip ] -
trunk/Source/WebCore/ChangeLog
r211685 r211687 1 2017-02-05 Antoine Quint <graouts@apple.com> 2 3 [Modern Media Controls] PiP button is not visible with a live broadcast video 4 https://bugs.webkit.org/show_bug.cgi?id=167794 5 <rdar://problem/30348790> 6 7 Reviewed by Dean Jackson. 8 9 We were only listening to the "loadedmetadata", "error", "webkitpresentationmodechanged" 10 and "webkitcurrentplaybacktargetiswirelesschanged" events to invalidate the enabled state 11 for the PiP button. We also need to check availability of video tracks, which we already 12 did for fullscreen, which is quite similar. 13 14 So we now listen to "addtrack", "removetrack" and "change" events on the media.videoTracks 15 property, which correctly invalidates the PiP button when the first video track becomes 16 available or the last video track is removed. 17 18 Since a couple of other MediaControllerSupport subclasses (FullscreenSupport and TracksSupport) 19 would also listen to those events on various track types, we add a new "tracksToMonitor" 20 property on MediaControllerSupport which subclasses can override to provide a list of tracks 21 that should listen to those events. This removes the need for dedicated construction and 22 destruction time in MediaControllerSupport subclasses that need to listen to events on 23 tracks rather than the media itself. 24 25 Test: http/tests/media/modern-media-controls/pip-support/pip-support-live-broadcast.html 26 27 * Modules/modern-media-controls/media/fullscreen-support.js: 28 (FullscreenSupport): 29 (FullscreenSupport.prototype.get tracksToMonitor): 30 (FullscreenSupport.prototype.destroy): Deleted. 31 * Modules/modern-media-controls/media/media-controller-support.js: 32 (MediaControllerSupport): 33 (MediaControllerSupport.prototype.destroy): 34 (MediaControllerSupport.prototype.get tracksToMonitor): 35 * Modules/modern-media-controls/media/pip-support.js: 36 (PiPSupport.prototype.get tracksToMonitor): 37 * Modules/modern-media-controls/media/tracks-support.js: 38 (TracksSupport): 39 (TracksSupport.prototype.get tracksToMonitor): 40 (TracksSupport.prototype.destroy): Deleted. 41 1 42 2017-02-05 Antoine Quint <graouts@apple.com> 2 43 -
trunk/Source/WebCore/Modules/modern-media-controls/media/fullscreen-support.js
r209451 r211687 33 33 if (mediaController.controls instanceof IOSInlineMediaControls) 34 34 mediaController.controls.delegate = this; 35 36 const videoTracks = mediaController.media.videoTracks;37 for (let eventType of ["change", "addtrack", "removetrack"])38 videoTracks.addEventListener(eventType, this);39 }40 41 // Public42 43 destroy()44 {45 super.destroy();46 47 const videoTracks = this.mediaController.media.videoTracks;48 for (let eventType of ["change", "addtrack", "removetrack"])49 videoTracks.removeEventListener(eventType, this);50 35 } 51 36 … … 60 45 { 61 46 return ["loadedmetadata", "error"]; 47 } 48 49 get tracksToMonitor() 50 { 51 return [this.mediaController.media.videoTracks]; 62 52 } 63 53 -
trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js
r209451 r211687 34 34 mediaController.media.addEventListener(eventType, this); 35 35 36 for (let tracks of this.tracksToMonitor) { 37 for (let eventType of ["change", "addtrack", "removetrack"]) 38 tracks.addEventListener(eventType, this); 39 } 40 36 41 if (!this.control) 37 42 return; … … 50 55 media.removeEventListener(eventType, this); 51 56 57 for (let tracks of this.tracksToMonitor) { 58 for (let eventType of ["change", "addtrack", "removetrack"]) 59 tracks.removeEventListener(eventType, this); 60 } 61 52 62 if (this.control) 53 63 this.control.uiDelegate = null; … … 62 72 63 73 get mediaEvents() 74 { 75 // Implemented by subclasses. 76 return []; 77 } 78 79 get tracksToMonitor() 64 80 { 65 81 // Implemented by subclasses. -
trunk/Source/WebCore/Modules/modern-media-controls/media/pip-support.js
r210959 r211687 42 42 } 43 43 44 get tracksToMonitor() 45 { 46 return [this.mediaController.media.videoTracks]; 47 } 48 44 49 buttonWasPressed(control) 45 50 { -
trunk/Source/WebCore/Modules/modern-media-controls/media/tracks-support.js
r209451 r211687 36 36 this.mediaController.controls.tracksPanel.dataSource = this; 37 37 this.mediaController.controls.tracksPanel.uiDelegate = this; 38 39 const media = mediaController.media;40 for (let tracks of [media.audioTracks, media.textTracks]) {41 for (let eventType of ["addtrack", "change", "removetrack"])42 tracks.addEventListener(eventType, this);43 }44 }45 46 // Public47 48 destroy()49 {50 super.destroy();51 52 const media = this.mediaController.media;53 for (let tracks of [media.audioTracks, media.textTracks]) {54 for (let eventType of ["addtrack", "change", "removetrack"])55 tracks.removeEventListener(eventType, this);56 }57 38 } 58 39 … … 67 48 { 68 49 return ["loadedmetadata"]; 50 } 51 52 get tracksToMonitor() 53 { 54 return [this.mediaController.media.audioTracks, this.mediaController.media.textTracks]; 69 55 } 70 56
Note: See TracChangeset
for help on using the changeset viewer.