Changeset 237311 in webkit
- Timestamp:
- Oct 20, 2018, 6:15:27 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/imported/w3c/ChangeLog
r237299 r237311 1 2018-10-20 YUHAN WU <yuhan_wu@apple.com> 2 3 MediaRecorder should fire a stop event when all tracks are ended 4 https://bugs.webkit.org/show_bug.cgi?id=190642 5 6 Reviewed by Youenn Fablet. 7 8 * web-platform-tests/mediacapture-record/MediaRecorder-stop-expected.txt: Added. 9 * web-platform-tests/mediacapture-record/MediaRecorder-stop.html: Added. 10 1 11 2018-10-19 Commit Queue <commit-queue@webkit.org> 2 12 -
trunk/Source/WebCore/ChangeLog
r237308 r237311 1 2018-10-20 YUHAN WU <yuhan_wu@apple.com> 2 3 MediaRecorder should fire a stop event when all tracks are ended 4 https://bugs.webkit.org/show_bug.cgi?id=190642 5 6 Reviewed by Youenn Fablet. 7 8 This patch only implements to fire the stop event when all tracks are ended. 9 We will need to fire a dataavailable event when all tracks are ended. 10 11 Test: imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-stop.html 12 13 * Modules/mediarecorder/MediaRecorder.cpp: 14 (WebCore::MediaRecorder::MediaRecorder): 15 (WebCore::MediaRecorder::~MediaRecorder): 16 (WebCore::MediaRecorder::trackEnded): 17 * Modules/mediarecorder/MediaRecorder.h: 18 * Modules/mediarecorder/MediaRecorder.idl: 19 * WebCore.xcodeproj/project.pbxproj: 20 * dom/EventNames.h: 21 1 22 2018-10-19 Stephan Szabo <stephan.szabo@sony.com> 2 23 -
trunk/Source/WebCore/Modules/mediarecorder/MediaRecorder.cpp
r237106 r237311 47 47 , m_stream(WTFMove(stream)) 48 48 { 49 m_tracks = WTF::map(m_stream->getTracks(), [this] (const auto& track) -> Ref<MediaStreamTrackPrivate> { 50 auto& privateTrack = track->privateTrack(); 51 privateTrack.addObserver(*this); 52 return privateTrack; 53 }); 49 54 m_stream->addObserver(this); 50 55 } … … 53 58 { 54 59 m_stream->removeObserver(this); 60 for (auto& track : m_tracks) 61 track->removeObserver(*this); 55 62 } 56 63 … … 90 97 } 91 98 99 void MediaRecorder::trackEnded(MediaStreamTrackPrivate&) 100 { 101 auto position = m_tracks.findMatching([](auto& track) { 102 return !track->ended(); 103 }); 104 if (position != notFound) 105 return; 106 scheduleDeferredTask([this] { 107 if (!m_isActive || state() == RecordingState::Inactive) 108 return; 109 // FIXME: Add a dataavailable event 110 auto event = Event::create(eventNames().stopEvent, Event::CanBubble::No, Event::IsCancelable::No); 111 setNewRecordingState(RecordingState::Inactive, WTFMove(event)); 112 }); 113 } 114 92 115 void MediaRecorder::setNewRecordingState(RecordingState newState, Ref<Event>&& event) 93 116 { -
trunk/Source/WebCore/Modules/mediarecorder/MediaRecorder.h
r237106 r237311 29 29 #include "EventTarget.h" 30 30 #include "MediaStream.h" 31 #include "MediaStreamTrackPrivate.h" 31 32 32 33 namespace WebCore { … … 34 35 class Document; 35 36 36 class MediaRecorder final : public ActiveDOMObject, public RefCounted<MediaRecorder>, public EventTargetWithInlineData, public CanMakeWeakPtr<MediaRecorder>, private MediaStream::Observer { 37 class MediaRecorder final 38 : public ActiveDOMObject 39 , public RefCounted<MediaRecorder> 40 , public EventTargetWithInlineData 41 , public CanMakeWeakPtr<MediaRecorder> 42 , private MediaStream::Observer 43 , private MediaStreamTrackPrivate::Observer { 37 44 public: 38 45 enum class RecordingState { Inactive, Recording, Paused }; … … 73 80 void didAddOrRemoveTrack() final; 74 81 82 // MediaStreamTrackPrivate::Observer 83 void trackEnded(MediaStreamTrackPrivate&) final; 84 void trackMutedChanged(MediaStreamTrackPrivate&) final { }; 85 void trackSettingsChanged(MediaStreamTrackPrivate&) final { }; 86 void trackEnabledChanged(MediaStreamTrackPrivate&) final { }; 87 75 88 void scheduleDeferredTask(Function<void()>&&); 76 89 void setNewRecordingState(RecordingState, Ref<Event>&&); … … 79 92 Ref<MediaStream> m_stream; 80 93 RecordingState m_state { RecordingState::Inactive }; 94 Vector<Ref<MediaStreamTrackPrivate>> m_tracks; 81 95 82 96 bool m_isActive { true }; -
trunk/Source/WebCore/Modules/mediarecorder/MediaRecorder.idl
r237106 r237311 38 38 // readonly attribute DOMString mimeType; 39 39 // attribute EventHandler onstart; 40 //attribute EventHandler onstop;40 attribute EventHandler onstop; 41 41 // attribute EventHandler ondataavailable; 42 42 // attribute EventHandler onpause; -
trunk/Source/WebCore/dom/EventNames.h
r235625 r237311 238 238 macro(started) \ 239 239 macro(statechange) \ 240 macro(stop) \ 240 241 macro(storage) \ 241 242 macro(submit) \
Note:
See TracChangeset
for help on using the changeset viewer.