Title: [155249] trunk
Revision
155249
Author
[email protected]
Date
2013-09-07 08:34:21 -0700 (Sat, 07 Sep 2013)

Log Message

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

Source/WebCore: 

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.

LayoutTests: 

* fast/mediastream/MediaStream-onended-expected.txt: Added.
* fast/mediastream/MediaStream-onended.html: Added.

Modified Paths

Added Paths

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;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to