Title: [167750] trunk
Revision
167750
Author
commit-qu...@webkit.org
Date
2014-04-23 23:37:51 -0700 (Wed, 23 Apr 2014)

Log Message

[MediaStream] Implement MediaStream active attribute
https://bugs.webkit.org/show_bug.cgi?id=131973

Patch by Praveen R Jadhav <pravee...@samsung.com> on 2014-04-23
Reviewed by Eric Carlson.

Source/WebCore:
MediaStream .active attribute are introduced which will replace
.ended attribute. This patch implements the newly introduced attributes.

MediaStream-add-remove-tracks.html is updated to handle this scenario.

* Modules/mediastream/MediaStream.cpp:
(WebCore::MediaStream::active): Added.
(WebCore::MediaStream::setActive): Added.
(WebCore::MediaStream::addTrack): Propagates 'onactive' event when required.
(WebCore::MediaStream::removeTrack): Propagates 'oninactive' event when required.
(WebCore::MediaStream::trackDidEnd): Propagates 'oninactive' event when required.
(WebCore::MediaStream::streamDidEnd):
(WebCore::MediaStream::setStreamIsActive): Added.
* Modules/mediastream/MediaStream.h:
* Modules/mediastream/MediaStream.idl:
* dom/EventNames.h:
* platform/mediastream/MediaStreamPrivate.cpp:
(WebCore::MediaStreamPrivate::MediaStreamPrivate): Initialize .active attribute
(WebCore::MediaStreamPrivate::setEnded):
(WebCore::MediaStreamPrivate::setActive): Added.
* platform/mediastream/MediaStreamPrivate.h:
(WebCore::MediaStreamPrivate::active): Added.

LayoutTests:
MediaStream .onended attribute will be replaced with .active attribute.
Patch updates the test case to verify the .active attribute.

* fast/mediastream/MediaStream-add-remove-tracks-expected.txt:
* fast/mediastream/MediaStream-add-remove-tracks.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (167749 => 167750)


--- trunk/LayoutTests/ChangeLog	2014-04-24 05:16:45 UTC (rev 167749)
+++ trunk/LayoutTests/ChangeLog	2014-04-24 06:37:51 UTC (rev 167750)
@@ -1,3 +1,16 @@
+2014-04-23  Praveen R Jadhav  <pravee...@samsung.com>
+
+        [MediaStream] Implement MediaStream active attribute
+        https://bugs.webkit.org/show_bug.cgi?id=131973
+
+        Reviewed by Eric Carlson.
+
+        MediaStream .onended attribute will be replaced with .active attribute.
+        Patch updates the test case to verify the .active attribute.
+
+        * fast/mediastream/MediaStream-add-remove-tracks-expected.txt:
+        * fast/mediastream/MediaStream-add-remove-tracks.html:
+
 2014-04-23  Alexey Proskuryakov  <a...@apple.com>
 
         Eliminate internals.setMockScrollbarsEnabled()

Modified: trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks-expected.txt (167749 => 167750)


--- trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks-expected.txt	2014-04-24 05:16:45 UTC (rev 167749)
+++ trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks-expected.txt	2014-04-24 06:37:51 UTC (rev 167750)
@@ -3,8 +3,10 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
+PASS stream1.active is true
 PASS stream1.getAudioTracks().length is 1
 PASS stream1.getVideoTracks().length is 1
+PASS stream2.active is true
 PASS stream2.getAudioTracks().length is 1
 PASS stream2.getVideoTracks().length is 1
 
@@ -50,6 +52,7 @@
 *** it should be impossible to add a track after the stream has ended
 PASS stream2.addTrack(audioTrack) threw exception Error: InvalidStateError: DOM Exception 11.
 PASS stream2.removeTrack(audioTrack) threw exception Error: InvalidStateError: DOM Exception 11.
+Stream2 is inactive.
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks.html (167749 => 167750)


--- trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks.html	2014-04-24 05:16:45 UTC (rev 167749)
+++ trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks.html	2014-04-24 06:37:51 UTC (rev 167750)
@@ -50,18 +50,33 @@
                 testFailed("\"addtrack\" or \"removetrack\" events should not fire as a result of local addTrack() or removeTrack() operations.");
             }
 
+            function shouldFireActive() {
+                debug("Stream2 is active.");
+                finishJSTest();
+            }
+
+            function shouldFireInActive() {
+                debug("Stream2 is inactive.");
+                finishJSTest();
+            }
+
             function gotStream2(s) {
                 stream2 = s;
 
+                shouldBe('stream1.active', 'true');
                 shouldBe('stream1.getAudioTracks().length', '1');
                 shouldBe('stream1.getVideoTracks().length', '1');
 
+                shouldBe('stream2.active', 'true');
                 shouldBe('stream2.getAudioTracks().length', '1');
                 shouldBe('stream2.getVideoTracks().length', '1');
 
                 stream1._onaddtrack_ = shouldNotFire;
                 stream1._onremovetrack_ = shouldNotFire;
 
+                stream2._onactive_ = shouldFireActive;
+                stream2._oninactive_ = shouldFireInActive;
+
                 audioTrack = stream1.getAudioTracks()[0];
                 videoTrack = stream1.getVideoTracks()[0];
 
@@ -119,8 +134,6 @@
                 debug("<br>*** it should be impossible to add a track after the stream has ended");
                 shouldThrow('stream2.addTrack(audioTrack)', '"Error: InvalidStateError: DOM Exception 11"');
                 shouldThrow('stream2.removeTrack(audioTrack)', '"Error: InvalidStateError: DOM Exception 11"');
-
-                setTimeout(finishJSTest, 0);
             }
 
             function gotStream1(s) {

Modified: trunk/Source/WebCore/ChangeLog (167749 => 167750)


--- trunk/Source/WebCore/ChangeLog	2014-04-24 05:16:45 UTC (rev 167749)
+++ trunk/Source/WebCore/ChangeLog	2014-04-24 06:37:51 UTC (rev 167750)
@@ -1,3 +1,33 @@
+2014-04-23  Praveen R Jadhav  <pravee...@samsung.com>
+
+        [MediaStream] Implement MediaStream active attribute
+        https://bugs.webkit.org/show_bug.cgi?id=131973
+
+        Reviewed by Eric Carlson.
+
+        MediaStream .active attribute are introduced which will replace
+        .ended attribute. This patch implements the newly introduced attributes.
+
+        MediaStream-add-remove-tracks.html is updated to handle this scenario.
+
+        * Modules/mediastream/MediaStream.cpp:
+        (WebCore::MediaStream::active): Added.
+        (WebCore::MediaStream::setActive): Added.
+        (WebCore::MediaStream::addTrack): Propagates 'onactive' event when required.
+        (WebCore::MediaStream::removeTrack): Propagates 'oninactive' event when required.
+        (WebCore::MediaStream::trackDidEnd): Propagates 'oninactive' event when required.
+        (WebCore::MediaStream::streamDidEnd):
+        (WebCore::MediaStream::setStreamIsActive): Added.
+        * Modules/mediastream/MediaStream.h:
+        * Modules/mediastream/MediaStream.idl:
+        * dom/EventNames.h:
+        * platform/mediastream/MediaStreamPrivate.cpp:
+        (WebCore::MediaStreamPrivate::MediaStreamPrivate): Initialize .active attribute
+        (WebCore::MediaStreamPrivate::setEnded):
+        (WebCore::MediaStreamPrivate::setActive): Added.
+        * platform/mediastream/MediaStreamPrivate.h:
+        (WebCore::MediaStreamPrivate::active): Added.
+
 2014-04-23  Darin Adler  <da...@apple.com>
 
         [Cocoa] fix CF leaks found by code inspection

Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp (167749 => 167750)


--- trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp	2014-04-24 05:16:45 UTC (rev 167749)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp	2014-04-24 06:37:51 UTC (rev 167750)
@@ -126,6 +126,18 @@
     m_private->setEnded();
 }
 
+bool MediaStream::active() const
+{
+    return m_private->active();
+}
+
+void MediaStream::setActive(bool isActive)
+{
+    if (active() == isActive)
+        return;
+    m_private->setActive(isActive);
+}
+
 PassRefPtr<MediaStream> MediaStream::clone()
 {
     Vector<RefPtr<MediaStreamTrack>> trackSet;
@@ -172,6 +184,7 @@
     tracks->append(track);
     track->addObserver(this);
     m_private->addTrack(&track->privateTrack());
+    setActive(true);
     return true;
 }
 
@@ -214,8 +227,10 @@
         m_private->removeSource(track->source());
 
     track->removeObserver(this);
-    if (!m_audioTracks.size() && !m_videoTracks.size())
-        setEnded();
+    if (!m_audioTracks.size() && !m_videoTracks.size()) {
+        setEnded(); // FIXME : to be removed in bug https://bugs.webkit.org/show_bug.cgi?id=132104
+        setActive(false);
+    }
 
     return true;
 }
@@ -264,7 +279,10 @@
             return;
     }
 
-    setEnded();
+    setEnded(); // FIXME : to be removed in bug https://bugs.webkit.org/show_bug.cgi?id=132104
+
+    if (!m_audioTracks.size() && !m_videoTracks.size())
+        setActive(false);
 }
 
 void MediaStream::streamDidEnd()
@@ -275,6 +293,14 @@
     scheduleDispatchEvent(Event::create(eventNames().endedEvent, false, false));
 }
 
+void MediaStream::setStreamIsActive(bool streamActive)
+{
+    if (streamActive)
+        scheduleDispatchEvent(Event::create(eventNames().activeEvent, false, false));
+    else
+        scheduleDispatchEvent(Event::create(eventNames().inactiveEvent, false, false));
+}
+
 void MediaStream::contextDestroyed()
 {
     ContextDestructionObserver::contextDestroyed();

Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.h (167749 => 167750)


--- trunk/Source/WebCore/Modules/mediastream/MediaStream.h	2014-04-24 05:16:45 UTC (rev 167749)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.h	2014-04-24 06:37:51 UTC (rev 167750)
@@ -75,6 +75,12 @@
     DEFINE_ATTRIBUTE_EVENT_LISTENER(addtrack);
     DEFINE_ATTRIBUTE_EVENT_LISTENER(removetrack);
 
+    bool active() const;
+    void setActive(bool);
+
+    DEFINE_ATTRIBUTE_EVENT_LISTENER(active);
+    DEFINE_ATTRIBUTE_EVENT_LISTENER(inactive);
+
     MediaStreamPrivate* privateStream() const { return m_private.get(); }
 
     // EventTarget
@@ -104,6 +110,7 @@
     // MediaStreamPrivateClient
     virtual void trackDidEnd() override final;
     virtual void streamDidEnd() override final;
+    virtual void setStreamIsActive(bool) override final;
     virtual void addRemoteSource(MediaStreamSource*) override final;
     virtual void removeRemoteSource(MediaStreamSource*) override final;
     virtual void addRemoteTrack(MediaStreamTrackPrivate*) override final;

Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.idl (167749 => 167750)


--- trunk/Source/WebCore/Modules/mediastream/MediaStream.idl	2014-04-24 05:16:45 UTC (rev 167749)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.idl	2014-04-24 06:37:51 UTC (rev 167750)
@@ -48,6 +48,11 @@
     attribute EventListener onaddtrack;
     attribute EventListener onremovetrack;
 
+    readonly attribute boolean active;
+
+    attribute EventListener onactive;
+    attribute EventListener oninactive;
+
     // EventTarget interface
     void addEventListener(DOMString type,
                           EventListener listener,

Modified: trunk/Source/WebCore/dom/EventNames.h (167749 => 167750)


--- trunk/Source/WebCore/dom/EventNames.h	2014-04-24 05:16:45 UTC (rev 167749)
+++ trunk/Source/WebCore/dom/EventNames.h	2014-04-24 06:37:51 UTC (rev 167750)
@@ -163,6 +163,8 @@
     macro(volumechange) \
     macro(waiting) \
     \
+    macro(active) \
+    macro(inactive) \
     macro(addtrack) \
     macro(cuechange) \
     macro(enter) \

Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp (167749 => 167750)


--- trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp	2014-04-24 05:16:45 UTC (rev 167749)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp	2014-04-24 06:37:51 UTC (rev 167750)
@@ -129,6 +129,7 @@
     : m_client(0)
     , m_id(id)
     , m_ended(false)
+    , m_isActive(false)
 {
     ASSERT(m_id.length());
     for (size_t i = 0; i < audioSources.size(); i++)
@@ -140,15 +141,20 @@
     unsigned providedSourcesSize = audioSources.size() + videoSources.size();
     unsigned tracksSize = m_audioPrivateTracks.size() + m_videoPrivateTracks.size();
     // If sources were provided and no track was added to the MediaStreamPrivate's tracks, this means
-    // that the tracks were all ended
+    // that the tracks were all ended.
+    // Deprecated. to be removed in bug https://bugs.webkit.org/show_bug.cgi?id=132104
     if (providedSourcesSize > 0 && !tracksSize)
         m_ended = true;
+
+    if (providedSourcesSize > 0 && tracksSize > 0)
+        m_isActive = true;
 }
 
 MediaStreamPrivate::MediaStreamPrivate(const String& id, const Vector<RefPtr<MediaStreamTrackPrivate>>& audioPrivateTracks, const Vector<RefPtr<MediaStreamTrackPrivate>>& videoPrivateTracks)
     : m_client(0)
     , m_id(id)
     , m_ended(false)
+    , m_isActive(false)
 {
     ASSERT(m_id.length());
     for (size_t i = 0; i < audioPrivateTracks.size(); i++)
@@ -161,8 +167,12 @@
     unsigned tracksSize = m_audioPrivateTracks.size() + m_videoPrivateTracks.size();
     // If tracks were provided and no one was added to the MediaStreamPrivate's tracks, this means
     // that the tracks were all ended
+    // Deprecated. to be removed in bug https://bugs.webkit.org/show_bug.cgi?id=132104
     if (providedTracksSize > 0 && !tracksSize)
         m_ended = true;
+
+    if (providedTracksSize > 0 && tracksSize > 0)
+        m_isActive = true;
 }
 
 void MediaStreamPrivate::setEnded()
@@ -173,6 +183,16 @@
     m_ended = true;
 }
 
+void MediaStreamPrivate::setActive(bool active)
+{
+    if (m_isActive != active) {
+        m_isActive = active;
+
+        if (m_client)
+            m_client->setStreamIsActive(active);
+    }
+}
+
 void MediaStreamPrivate::addTrack(PassRefPtr<MediaStreamTrackPrivate> prpTrack)
 {
     RefPtr<MediaStreamTrackPrivate> track = prpTrack;

Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.h (167749 => 167750)


--- trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.h	2014-04-24 05:16:45 UTC (rev 167749)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamPrivate.h	2014-04-24 06:37:51 UTC (rev 167750)
@@ -50,6 +50,7 @@
     virtual ~MediaStreamPrivateClient() { }
 
     virtual void streamDidEnd() = 0;
+    virtual void setStreamIsActive(bool) = 0;
     virtual void addRemoteSource(MediaStreamSource*) = 0;
     virtual void removeRemoteSource(MediaStreamSource*) = 0;
     virtual void addRemoteTrack(MediaStreamTrackPrivate*) = 0;
@@ -86,9 +87,13 @@
     void addRemoteSource(MediaStreamSource*);
     void removeRemoteSource(MediaStreamSource*);
 
+    // Deprecated. to be removed in bug https://bugs.webkit.org/show_bug.cgi?id=132104
     bool ended() const { return m_ended; }
     void setEnded();
 
+    bool active() const { return m_isActive; }
+    void setActive(bool);
+
     void addTrack(PassRefPtr<MediaStreamTrackPrivate>);
     void removeTrack(PassRefPtr<MediaStreamTrackPrivate>);
 
@@ -106,7 +111,8 @@
 
     Vector<RefPtr<MediaStreamTrackPrivate>> m_audioPrivateTracks;
     Vector<RefPtr<MediaStreamTrackPrivate>> m_videoPrivateTracks;
-    bool m_ended;
+    bool m_ended; // Deprecated. to be removed in bug https://bugs.webkit.org/show_bug.cgi?id=132104
+    bool m_isActive;
 };
 
 typedef Vector<RefPtr<MediaStreamPrivate>> MediaStreamPrivateVector;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to