Diff
Modified: trunk/LayoutTests/ChangeLog (155248 => 155249)
--- trunk/LayoutTests/ChangeLog 2013-09-07 06:45:04 UTC (rev 155248)
+++ trunk/LayoutTests/ChangeLog 2013-09-07 15:34:21 UTC (rev 155249)
@@ -1,3 +1,15 @@
+2013-09-07 Eric Carlson <[email protected]>
+
+ MediaStream should fire ended event when all tracks are ended
+ https://bugs.webkit.org/show_bug.cgi?id=120871
+
+ Reviewed by Jer Noble.
+
+ Merge https://chromium.googlesource.com/chromium/blink/+/bebd179b65be69e46f2f434a3ec8b1e4aa85cc42
+
+ * fast/mediastream/MediaStream-onended-expected.txt: Added.
+ * fast/mediastream/MediaStream-onended.html: Added.
+
2013-09-06 Bem Jones-Bey <[email protected]>
[CSS Shapes] Floats with shape-outside aren't painting in the correct order
Added: trunk/LayoutTests/fast/mediastream/MediaStream-onended-expected.txt (0 => 155249)
--- trunk/LayoutTests/fast/mediastream/MediaStream-onended-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/mediastream/MediaStream-onended-expected.txt 2013-09-07 15:34:21 UTC (rev 155249)
@@ -0,0 +1,12 @@
+Tests MediaStream::onended callback.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS stream.ended is false
+PASS streamEnded was called.
+PASS stream.ended is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/mediastream/MediaStream-onended.html (0 => 155249)
--- trunk/LayoutTests/fast/mediastream/MediaStream-onended.html (rev 0)
+++ trunk/LayoutTests/fast/mediastream/MediaStream-onended.html 2013-09-07 15:34:21 UTC (rev 155249)
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href=""
+<script src=""
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+description("Tests MediaStream::onended callback.");
+
+function error() {
+ testFailed('Stream generation failed.');
+ finishJSTest();
+}
+
+function getUserMedia(dictionary, callback) {
+ try {
+ navigator.webkitGetUserMedia(dictionary, callback, error);
+ } catch (e) {
+ testFailed('webkitGetUserMedia threw exception :' + e);
+ finishJSTest();
+ }
+}
+
+var stream;
+
+function streamEnded() {
+ testPassed('streamEnded was called.');
+ shouldBeTrue('stream.ended');
+ finishJSTest();
+}
+
+function gotStream(s) {
+ stream = new webkitMediaStream(s);
+ shouldBeFalse('stream.ended');
+ try {
+ stream._onended_ = streamEnded;
+ s.stop();
+ } catch (e) {
+ testFailed('LocalMediaStream threw exception :' + e);
+ finishJSTest();
+ }
+}
+
+getUserMedia({audio:true, video:true}, gotStream);
+
+window.jsTestIsAsync = true;
+window.successfullyParsed = true;
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (155248 => 155249)
--- trunk/Source/WebCore/ChangeLog 2013-09-07 06:45:04 UTC (rev 155248)
+++ trunk/Source/WebCore/ChangeLog 2013-09-07 15:34:21 UTC (rev 155249)
@@ -1,3 +1,27 @@
+2013-09-07 Eric Carlson <[email protected]>
+
+ MediaStream should fire ended event when all tracks are ended
+ https://bugs.webkit.org/show_bug.cgi?id=120871
+
+ Reviewed by Jer Noble.
+
+ Merge https://chromium.googlesource.com/chromium/blink/+/bebd179b65be69e46f2f434a3ec8b1e4aa85cc42
+
+ Test: fast/mediastream/MediaStream-onended.html
+
+ * Modules/mediastream/MediaStream.cpp:
+ (WebCore::MediaStream::trackEnded): New.
+ * Modules/mediastream/MediaStream.h:
+
+ * Modules/mediastream/MediaStreamTrack.cpp:
+ (WebCore::MediaStreamTrack::sourceChangedState): Call didEndTrack when state changes to ReadyStateEnded.
+ (WebCore::MediaStreamTrack::didEndTrack): New.
+ (WebCore::MediaStreamTrack::stop): Call didEndTrack.
+ * Modules/mediastream/MediaStreamTrack.h:
+
+ * platform/mediastream/MediaStreamDescriptor.h:
+ (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Require didEndTrack.
+
2013-09-06 Thiago de Barros Lacerda <[email protected]>
Get MEDIA_STREAM compiling for other ports (EFL and GTK)
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp (155248 => 155249)
--- trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp 2013-09-07 06:45:04 UTC (rev 155248)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp 2013-09-07 15:34:21 UTC (rev 155249)
@@ -221,6 +221,19 @@
return 0;
}
+void MediaStream::trackEnded()
+{
+ for (size_t i = 0; i < m_audioTracks.size(); ++i)
+ if (!m_audioTracks[i]->ended())
+ return;
+
+ for (size_t i = 0; i < m_videoTracks.size(); ++i)
+ if (!m_videoTracks[i]->ended())
+ return;
+
+ streamEnded();
+}
+
void MediaStream::streamEnded()
{
if (ended())
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.h (155248 => 155249)
--- trunk/Source/WebCore/Modules/mediastream/MediaStream.h 2013-09-07 06:45:04 UTC (rev 155248)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.h 2013-09-07 15:34:21 UTC (rev 155249)
@@ -66,6 +66,7 @@
DEFINE_ATTRIBUTE_EVENT_LISTENER(removetrack);
// MediaStreamDescriptorClient
+ virtual void trackEnded() OVERRIDE;
virtual void streamEnded() OVERRIDE;
virtual bool isLocal() const { return false; }
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp (155248 => 155249)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2013-09-07 06:45:04 UTC (rev 155248)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2013-09-07 15:34:21 UTC (rev 155249)
@@ -135,10 +135,20 @@
break;
case MediaStreamSource::ReadyStateEnded:
dispatchEvent(Event::create(eventNames().endedEvent, false, false));
+ didEndTrack();
break;
}
}
+void MediaStreamTrack::didEndTrack()
+{
+ MediaStreamDescriptorClient* client = m_component->stream()->client();
+ if (!client)
+ return;
+
+ client->trackEnded();
+}
+
MediaStreamComponent* MediaStreamTrack::component()
{
return m_component.get();
@@ -147,6 +157,7 @@
void MediaStreamTrack::stop()
{
m_stopped = true;
+ didEndTrack();
}
const AtomicString& MediaStreamTrack::interfaceName() const
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h (155248 => 155249)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2013-09-07 06:45:04 UTC (rev 155248)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2013-09-07 15:34:21 UTC (rev 155249)
@@ -53,6 +53,8 @@
bool enabled() const;
void setEnabled(bool);
+ void didEndTrack();
+
String readyState() const;
DEFINE_ATTRIBUTE_EVENT_LISTENER(mute);
Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.h (155248 => 155249)
--- trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.h 2013-09-07 06:45:04 UTC (rev 155248)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamDescriptor.h 2013-09-07 15:34:21 UTC (rev 155249)
@@ -44,6 +44,7 @@
public:
virtual ~MediaStreamDescriptorClient() { }
+ virtual void trackEnded() = 0;
virtual void streamEnded() = 0;
virtual void addRemoteTrack(MediaStreamComponent*) = 0;
virtual void removeRemoteTrack(MediaStreamComponent*) = 0;