Changeset 166238 in webkit
- Timestamp:
- Mar 25, 2014 9:51:40 AM (10 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r166237 r166238 1 2014-03-24 Brent Fulgham <bfulgham@apple.com> 2 3 Prevent 'removetrack' events from firing when all inband text tracks are removed. 4 https://bugs.webkit.org/show_bug.cgi?id=130704 5 6 Reviewed by Eric Carlson. 7 8 Based on the Blink change (patch by acolwell@chromium.org): 9 https://codereview.chromium.org/177243018/ 10 11 * media/track/track-remove-track-expected.txt: Added. 12 * media/track/track-remove-track.html: Added. 13 1 14 2014-03-25 Alexey Proskuryakov <ap@apple.com> 2 15 -
trunk/Source/WebCore/ChangeLog
r166236 r166238 1 2014-03-24 Brent Fulgham <bfulgham@apple.com> 2 3 Prevent 'removetrack' events from firing when all inband text tracks are removed. 4 https://bugs.webkit.org/show_bug.cgi?id=130704 5 6 Reviewed by Eric Carlson. 7 8 Test: media/track/track-remove-track.html 9 10 Based on the Blink change (patch by acolwell@chromium.org): 11 https://codereview.chromium.org/177243018/ 12 13 * html/HTMLMediaElement.cpp: 14 (WebCore::HTMLMediaElement::prepareForLoad): Reorder steps to match W3C specification. 15 (WebCore::HTMLMediaElement::noneSupported): Forget tracks as required by specification. 16 (WebCore::HTMLMediaElement::mediaLoadingFailed): Forget tracks as required by specification. 17 (WebCore::HTMLMediaElement::removeTextTrack): Only request the 'removetracks' event if 18 requested by caller. 19 (WebCore::HTMLMediaElement::removeAllInbandTracks): Renamed to 'forgetResourceSpecificTracks' 20 (WebCore::HTMLMediaElement::noneSupported): Specify that we want the 'removetracks' event 21 fired for this use case. 22 (WebCore::HTMLMediaElement::prepareForLoad): Switch to new 'forgetResourceSpecificTracks' name. 23 * html/HTMLMediaElement.h: 24 * html/track/TextTrackList.cpp: 25 (TextTrackList::remove): Only fire the 'removetrack' event if the caller requests it. 26 * html/track/TextTrackList.h: Add default argument to fire the 'removetrack' event 27 when removing a track. 28 * html/track/TrackListBase.cpp: 29 (TrackListBase::remove): Only fire the 'removetrack' event if the caller requests it. 30 * html/track/TrackListBase.h: Add default argument to fire the 'removetrack' event. 31 1 32 2014-03-25 David Kilzer <ddkilzer@apple.com> 2 33 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r165916 r166238 979 979 // 4 - If the media element's networkState is not set to NETWORK_EMPTY, then run these substeps 980 980 if (m_networkState != NETWORK_EMPTY) { 981 // 4.1 - Queue a task to fire a simple event named emptied at the media element. 982 scheduleEvent(eventNames().emptiedEvent); 983 984 // 4.2 - If a fetching process is in progress for the media element, the user agent should stop it. 981 985 m_networkState = NETWORK_EMPTY; 986 987 // 4.3 - Forget the media element's media-resource-specific tracks. 988 forgetResourceSpecificTracks(); 989 990 // 4.4 - If readyState is not set to HAVE_NOTHING, then set it to that state. 982 991 m_readyState = HAVE_NOTHING; 983 992 m_readyStateMaximum = HAVE_NOTHING; 993 994 // 4.5 - If the paused attribute is false, then set it to true. 995 m_paused = true; 996 997 // 4.6 - If seeking is true, set it to false. 998 m_seeking = false; 999 1000 // 4.7 - Set the current playback position to 0. 1001 // Set the official playback position to 0. 1002 // If this changed the official playback position, then queue a task to fire a simple event named timeupdate at the media element. 1003 // FIXME: Add support for firing this event. e.g., scheduleEvent(eventNames().timeUpdateEvent); 1004 1005 // 4.8 - Set the initial playback position to 0. 1006 // FIXME: Make this less subtle. The position only becomes 0 because of the createMediaPlayer() call 1007 // above. 984 1008 refreshCachedTime(); 985 m_paused = true; 986 m_seeking = false; 1009 987 1010 invalidateCachedTime(); 988 scheduleEvent(eventNames().emptiedEvent); 1011 1012 // 4.9 - Set the timeline offset to Not-a-Number (NaN). 1013 // 4.10 - Update the duration attribute to Not-a-Number (NaN). 1014 989 1015 updateMediaController(); 990 1016 #if ENABLE(VIDEO_TRACK) … … 1012 1038 1013 1039 m_playedTimeRanges = TimeRanges::create(); 1040 1041 // FIXME: Investigate whether these can be moved into m_networkState != NETWORK_EMPTY block above 1042 // so they are closer to the relevant spec steps. 1014 1043 m_lastSeekTime = 0; 1015 1044 … … 1793 1822 1794 1823 // 6.2 - Forget the media element's media-resource-specific text tracks. 1824 forgetResourceSpecificTracks(); 1795 1825 1796 1826 // 6.3 - Set the element's networkState attribute to the NETWORK_NO_SOURCE value. … … 1918 1948 if (m_readyState < HAVE_METADATA && m_loadState == LoadingFromSourceElement) { 1919 1949 1950 // resource selection algorithm 1951 // Step 9.Otherwise.9 - Failed with elements: Queue a task, using the DOM manipulation task source, to fire a simple event named error at the candidate element. 1920 1952 if (m_currentSourceNode) 1921 1953 m_currentSourceNode->scheduleErrorEvent(); … … 1923 1955 LOG(Media, "HTMLMediaElement::setNetworkState - error event not sent, <source> was removed"); 1924 1956 1957 // 9.Otherwise.10 - Asynchronously await a stable state. The synchronous section consists of all the remaining steps of this algorithm until the algorithm says the synchronous section has ended. 1958 1959 // 9.Otherwise.11 - Forget the media element's media-resource-specific tracks. 1960 forgetResourceSpecificTracks(); 1961 1925 1962 if (havePotentialSourceChild()) { 1926 1963 LOG(Media, "HTMLMediaElement::setNetworkState - scheduling next <source>"); … … 3366 3403 } 3367 3404 3368 void HTMLMediaElement::removeTextTrack(TextTrack* track )3405 void HTMLMediaElement::removeTextTrack(TextTrack* track, bool scheduleEvent) 3369 3406 { 3370 3407 if (!RuntimeEnabledFeatures::sharedFeatures().webkitVideoTrackEnabled()) … … 3376 3413 textTrackRemoveCues(track, cues); 3377 3414 track->clearClient(); 3378 m_textTracks->remove(track );3415 m_textTracks->remove(track, scheduleEvent); 3379 3416 3380 3417 closeCaptionTracksChanged(); … … 3389 3426 } 3390 3427 3391 void HTMLMediaElement:: removeAllInbandTracks()3428 void HTMLMediaElement::forgetResourceSpecificTracks() 3392 3429 { 3393 3430 while (m_audioTracks && m_audioTracks->length()) … … 3400 3437 3401 3438 if (track->trackType() == TextTrack::InBand) 3402 removeTextTrack(track );3439 removeTextTrack(track, false); 3403 3440 } 3404 3441 } … … 4520 4557 4521 4558 #if ENABLE(VIDEO_TRACK) 4522 removeAllInbandTracks();4559 forgetResourceSpecificTracks(); 4523 4560 #endif 4524 4561 … … 5425 5462 5426 5463 #if ENABLE(VIDEO_TRACK) 5427 removeAllInbandTracks();5464 forgetResourceSpecificTracks(); 5428 5465 #endif 5429 5466 m_player = MediaPlayer::create(this); -
trunk/Source/WebCore/html/HTMLMediaElement.h
r165928 r166238 291 291 void addVideoTrack(PassRefPtr<VideoTrack>); 292 292 void removeAudioTrack(AudioTrack*); 293 void removeTextTrack(TextTrack* );293 void removeTextTrack(TextTrack*, bool scheduleEvent = true); 294 294 void removeVideoTrack(VideoTrack*); 295 void removeAllInbandTracks();295 void forgetResourceSpecificTracks(); 296 296 void closeCaptionTracksChanged(); 297 297 void notifyMediaPlayerOfTextTrackChanges(); -
trunk/Source/WebCore/html/track/TextTrackList.cpp
r165676 r166238 196 196 } 197 197 198 void TextTrackList::remove(TrackBase* track )198 void TextTrackList::remove(TrackBase* track, bool scheduleEvent) 199 199 { 200 200 TextTrack* textTrack = toTextTrack(track); … … 220 220 RefPtr<TrackBase> trackRef = (*tracks)[index]; 221 221 tracks->remove(index); 222 scheduleRemoveTrackEvent(trackRef.release()); 222 223 if (scheduleEvent) 224 scheduleRemoveTrackEvent(trackRef.release()); 223 225 } 224 226 -
trunk/Source/WebCore/html/track/TextTrackList.h
r165676 r166238 53 53 54 54 void append(PassRefPtr<TextTrack>); 55 virtual void remove(TrackBase* ) override;55 virtual void remove(TrackBase*, bool scheduleEvent = true) override; 56 56 57 57 // EventTarget -
trunk/Source/WebCore/html/track/TrackListBase.cpp
r165676 r166238 59 59 } 60 60 61 void TrackListBase::remove(TrackBase* track )61 void TrackListBase::remove(TrackBase* track, bool scheduleEvent) 62 62 { 63 63 size_t index = m_inbandTracks.find(track); … … 71 71 m_inbandTracks.remove(index); 72 72 73 scheduleRemoveTrackEvent(trackRef.release()); 73 if (scheduleEvent) 74 scheduleRemoveTrackEvent(trackRef.release()); 74 75 } 75 76 -
trunk/Source/WebCore/html/track/TrackListBase.h
r165676 r166238 49 49 virtual unsigned length() const; 50 50 virtual bool contains(TrackBase*) const; 51 virtual void remove(TrackBase* );51 virtual void remove(TrackBase*, bool scheduleEvent = true); 52 52 53 53 // EventTarget
Note: See TracChangeset
for help on using the changeset viewer.