Diff
Modified: trunk/LayoutTests/ChangeLog (221276 => 221277)
--- trunk/LayoutTests/ChangeLog 2017-08-28 22:23:08 UTC (rev 221276)
+++ trunk/LayoutTests/ChangeLog 2017-08-28 22:38:13 UTC (rev 221277)
@@ -1,3 +1,15 @@
+2017-08-28 Youenn Fablet <[email protected]>
+
+ WebRTC MediaStream created without tracks does not update active state after tracks are added
+ https://bugs.webkit.org/show_bug.cgi?id=175434
+
+ Reviewed by Eric Carlson.
+
+ * fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track-expected.txt:
+ * fast/mediacapturefromelement/CanvasCaptureMediaStream-creation-expected.txt:
+ * fast/mediastream/MediaStream-add-remove-tracks-expected.txt:
+ * fast/mediastream/MediaStream-add-remove-tracks.html:
+
2017-08-28 Brent Fulgham <[email protected]>
Disable access to secure cookies if an HTTPS site loads mixed content (Part 2: Header Requests)
Modified: trunk/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track-expected.txt (221276 => 221277)
--- trunk/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track-expected.txt 2017-08-28 22:23:08 UTC (rev 221276)
+++ trunk/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track-expected.txt 2017-08-28 22:38:13 UTC (rev 221277)
@@ -1,3 +1,3 @@
-FAIL check clone track after captureStream() assert_equals: expected true but got false
+FAIL check clone track after captureStream() cloned_track.requestFrame is not a function. (In 'cloned_track.requestFrame()', 'cloned_track.requestFrame' is undefined)
Modified: trunk/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-creation-expected.txt (221276 => 221277)
--- trunk/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-creation-expected.txt 2017-08-28 22:23:08 UTC (rev 221276)
+++ trunk/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-creation-expected.txt 2017-08-28 22:38:13 UTC (rev 221277)
@@ -1,5 +1,5 @@
-FAIL check <canvas> captureStream(undefined) assert_equals: expected true but got false
-FAIL check <canvas> captureStream(0) assert_equals: expected true but got false
-FAIL check <canvas> captureStream(30) assert_equals: expected true but got false
+PASS check <canvas> captureStream(undefined)
+PASS check <canvas> captureStream(0)
+PASS check <canvas> captureStream(30)
Modified: trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks-expected.txt (221276 => 221277)
--- trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks-expected.txt 2017-08-28 22:23:08 UTC (rev 221276)
+++ trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks-expected.txt 2017-08-28 22:38:13 UTC (rev 221277)
@@ -3,6 +3,8 @@
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+PASS streamCopy.active is false
+PASS streamCopy.active is true
PASS stream1.active is true
PASS stream1.getAudioTracks().length is 1
PASS stream1.getVideoTracks().length is 1
@@ -47,12 +49,8 @@
*** remove all tracks, stream will become inactive
PASS stream2.getAudioTracks().length is 0
PASS stream2.getVideoTracks().length is 0
-
-*** active attribute is still true (until event is fired)
-FAIL stream2.active should be true. Was false.
-
-Stream2 is active.
-FAIL stream2.active should be true. Was false.
+PASS stream2.active is false
+PASS stream2.active is false
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks.html (221276 => 221277)
--- trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks.html 2017-08-28 22:23:08 UTC (rev 221276)
+++ trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks.html 2017-08-28 22:38:13 UTC (rev 221277)
@@ -11,6 +11,7 @@
description("Test adding and removing tracks.");
var stream1;
+ var streamCopy;
var stream2;
var audioTrack;
var videoTrack;
@@ -37,24 +38,6 @@
testFailed("\"addtrack\" or \"removetrack\" events should not fire as a result of local addTrack() or removeTrack() operations.");
}
- function shouldFireActive() {
- debug("<br>Stream2 is active.");
- shouldBe('stream2.active', 'true');
- finishJSTest();
- }
-
- function shouldFireInActive() {
- debug("<br>Stream2 is inactive.");
- shouldBe('stream2.active', 'false');
-
- debug("<br>*** add non-ended track");
- shouldNotBe('audioTrack.readyState', '"ended"');
- tryAddTrack(stream2, audioTrack);
-
- debug("<br>*** active attribute is still false (until event is fired)");
- shouldBe('stream2.active', 'false');
- }
-
function gotStream2(s) {
stream2 = s;
@@ -69,8 +52,10 @@
stream1._onaddtrack_ = shouldNotFire;
stream1._onremovetrack_ = shouldNotFire;
- stream2._onactive_ = shouldFireActive;
- stream2._oninactive_ = shouldFireInActive;
+ setTimeout(() => {
+ shouldBe('stream2.active', 'false');
+ finishJSTest();
+ }, 1000);
audioTrack = stream1.getAudioTracks()[0];
videoTrack = stream1.getVideoTracks()[0];
@@ -125,12 +110,17 @@
shouldBe('stream2.getAudioTracks().length', '0');
shouldBe('stream2.getVideoTracks().length', '0');
- debug("<br>*** active attribute is still true (until event is fired)");
- shouldBe('stream2.active', 'true');
+ shouldBe('stream2.active', 'false');
}
function gotStream1(s) {
stream1 = s;
+
+ streamCopy = new MediaStream();
+ shouldBe('streamCopy.active', 'false');
+ streamCopy.addTrack(stream1.getVideoTracks()[0]);
+ shouldBe('streamCopy.active', 'true');
+
getUserMedia("allow", {audio:true, video:true}, gotStream2);
}
Modified: trunk/Source/WebCore/ChangeLog (221276 => 221277)
--- trunk/Source/WebCore/ChangeLog 2017-08-28 22:23:08 UTC (rev 221276)
+++ trunk/Source/WebCore/ChangeLog 2017-08-28 22:38:13 UTC (rev 221277)
@@ -1,3 +1,26 @@
+2017-08-28 Youenn Fablet <[email protected]>
+
+ WebRTC MediaStream created without tracks does not update active state after tracks are added
+ https://bugs.webkit.org/show_bug.cgi?id=175434
+
+ Reviewed by Eric Carlson.
+
+ Covered by updated test.
+
+ Removing active/inactive events.
+ active attribute is still kept and is updated synchronously on every track change.
+
+ * Modules/mediastream/MediaStream.cpp:
+ (WebCore::MediaStream::MediaStream):
+ (WebCore::MediaStream::activeStatusChanged):
+ (WebCore::MediaStream::internalAddTrack):
+ (WebCore::MediaStream::updateActiveState):
+ (WebCore::MediaStream::hasPendingActivity const):
+ (WebCore::MediaStream::scheduleActiveStateChange): Deleted.
+ (WebCore::MediaStream::activityEventTimerFired): Deleted.
+ * Modules/mediastream/MediaStream.h:
+ * Modules/mediastream/MediaStream.idl:
+
2017-08-28 Andy Estes <[email protected]>
[Cocoa] Upstream CFNetwork-related WebKitSystemInterface functions
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp (221276 => 221277)
--- trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp 2017-08-28 22:23:08 UTC (rev 221276)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.cpp 2017-08-28 22:38:13 UTC (rev 221277)
@@ -77,7 +77,6 @@
MediaStream::MediaStream(ScriptExecutionContext& context, const MediaStreamTrackVector& tracks)
: ActiveDOMObject(&context)
, m_private(MediaStreamPrivate::create(createTrackPrivateVector(tracks)))
- , m_activityEventTimer(*this, &MediaStream::activityEventTimerFired)
, m_mediaSession(PlatformMediaSession::create(*this))
{
// This constructor preserves MediaStreamTrack instances and must be used by calls originating
@@ -97,7 +96,6 @@
MediaStream::MediaStream(ScriptExecutionContext& context, Ref<MediaStreamPrivate>&& streamPrivate)
: ActiveDOMObject(&context)
, m_private(WTFMove(streamPrivate))
- , m_activityEventTimer(*this, &MediaStream::activityEventTimerFired)
, m_mediaSession(PlatformMediaSession::create(*this))
{
setIsActive(m_private->active());
@@ -193,9 +191,7 @@
void MediaStream::activeStatusChanged()
{
- // Schedule the active state change and event dispatch since this callback may be called
- // synchronously from the DOM API (e.g. as a result of addTrack()).
- scheduleActiveStateChange();
+ updateActiveState();
}
void MediaStream::didAddTrack(MediaStreamTrackPrivate& trackPrivate)
@@ -230,6 +226,8 @@
auto& track = *result.iterator->value;
track.addObserver(*this);
+ updateActiveState();
+
if (streamModifier == StreamModifier::DomAPI)
m_private->addTrack(&track.privateTrack(), MediaStreamPrivate::NotifyClientOption::DontNotify);
else
@@ -246,6 +244,8 @@
track->removeObserver(*this);
+ updateActiveState();
+
if (streamModifier == StreamModifier::DomAPI)
m_private->removeTrack(track->privateTrack(), MediaStreamPrivate::NotifyClientOption::DontNotify);
else
@@ -352,7 +352,7 @@
}
}
-void MediaStream::scheduleActiveStateChange()
+void MediaStream::updateActiveState()
{
bool active = false;
for (auto& track : m_trackSet.values()) {
@@ -366,23 +366,8 @@
return;
setIsActive(active);
-
- const AtomicString& eventName = m_isActive ? eventNames().inactiveEvent : eventNames().activeEvent;
- m_scheduledActivityEvents.append(Event::create(eventName, false, false));
-
- if (!m_activityEventTimer.isActive())
- m_activityEventTimer.startOneShot(0_s);
}
-void MediaStream::activityEventTimerFired()
-{
- Vector<Ref<Event>> events;
- events.swap(m_scheduledActivityEvents);
-
- for (auto& event : events)
- dispatchEvent(event);
-}
-
URLRegistry& MediaStream::registry() const
{
return MediaStreamRegistry::shared();
@@ -497,7 +482,7 @@
bool MediaStream::hasPendingActivity() const
{
- return m_isActive || !m_scheduledActivityEvents.isEmpty();
+ return m_isActive;
}
} // namespace WebCore
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.h (221276 => 221277)
--- trunk/Source/WebCore/Modules/mediastream/MediaStream.h 2017-08-28 22:23:08 UTC (rev 221276)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.h 2017-08-28 22:38:13 UTC (rev 221277)
@@ -159,7 +159,7 @@
const char* activeDOMObjectName() const final;
bool canSuspendForDocumentSuspension() const final;
- void scheduleActiveStateChange();
+ void updateActiveState();
void activityEventTimerFired();
void setIsActive(bool);
void statusDidChange();
@@ -170,9 +170,6 @@
HashMap<String, RefPtr<MediaStreamTrack>> m_trackSet;
- Timer m_activityEventTimer;
- Vector<Ref<Event>> m_scheduledActivityEvents;
-
Vector<Observer*> m_observers;
std::unique_ptr<PlatformMediaSession> m_mediaSession;
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStream.idl (221276 => 221277)
--- trunk/Source/WebCore/Modules/mediastream/MediaStream.idl 2017-08-28 22:23:08 UTC (rev 221276)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStream.idl 2017-08-28 22:38:13 UTC (rev 221277)
@@ -50,10 +50,5 @@
attribute EventHandler onaddtrack;
attribute EventHandler onremovetrack;
-
- // FIXME 169871: legacy or remove?
- attribute EventHandler onactive;
- // FIXME 169871: legacy or remove?
- attribute EventHandler oninactive;
};