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;