- Revision
- 236536
- Author
- commit-qu...@webkit.org
- Date
- 2018-09-26 18:42:24 -0700 (Wed, 26 Sep 2018)
Log Message
Video track clone cannot preserve original property
https://bugs.webkit.org/show_bug.cgi?id=189872
<rdar://problem/44706579>
Patch by YUHAN WU <yuhan...@apple.com> on 2018-09-26
Reviewed by Youenn Fablet.
LayoutTests/imported/w3c:
* web-platform-tests/mst-content-hint/MediaStreamTrack-contentHint-expected.txt:
Source/WebCore:
Fix the issue that the cloned track created by canvas.captureStream().getVideoTracks() cannot keep some attributes, such as enabled.
Updated a testcase expected result:
LayoutTests/imported/w3c/web-platform-tests/mst-content-hint/MediaStreamTrack-contentHint.html
* Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
(WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack):
(WebCore::CanvasCaptureMediaStreamTrack::create):
(WebCore::CanvasCaptureMediaStreamTrack::clone):
* Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
* Modules/mediastream/MediaStreamTrack.h:
Modified Paths
Diff
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (236535 => 236536)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2018-09-27 01:24:45 UTC (rev 236535)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2018-09-27 01:42:24 UTC (rev 236536)
@@ -1,3 +1,13 @@
+2018-09-26 YUHAN WU <yuhan...@apple.com>
+
+ Video track clone cannot preserve original property
+ https://bugs.webkit.org/show_bug.cgi?id=189872
+ <rdar://problem/44706579>
+
+ Reviewed by Youenn Fablet.
+
+ * web-platform-tests/mst-content-hint/MediaStreamTrack-contentHint-expected.txt:
+
2018-09-26 Alex Christensen <achristen...@webkit.org>
Unreviewed, rolling out r236524.
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/mst-content-hint/MediaStreamTrack-contentHint-expected.txt (236535 => 236536)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/mst-content-hint/MediaStreamTrack-contentHint-expected.txt 2018-09-27 01:24:45 UTC (rev 236535)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/mst-content-hint/MediaStreamTrack-contentHint-expected.txt 2018-09-27 01:42:24 UTC (rev 236536)
@@ -4,6 +4,6 @@
PASS Audio tracks ignore invalid/video contentHints
PASS Accepts valid video contentHints
PASS Video tracks ignore invalid/audio contentHints
-FAIL Cloned video tracks have separate contentHints assert_equals: expected "motion" but got ""
+PASS Cloned video tracks have separate contentHints
PASS Cloned audio tracks have separate contentHints
Modified: trunk/Source/WebCore/ChangeLog (236535 => 236536)
--- trunk/Source/WebCore/ChangeLog 2018-09-27 01:24:45 UTC (rev 236535)
+++ trunk/Source/WebCore/ChangeLog 2018-09-27 01:42:24 UTC (rev 236536)
@@ -1,3 +1,22 @@
+2018-09-26 YUHAN WU <yuhan...@apple.com>
+
+ Video track clone cannot preserve original property
+ https://bugs.webkit.org/show_bug.cgi?id=189872
+ <rdar://problem/44706579>
+
+ Reviewed by Youenn Fablet.
+
+ Fix the issue that the cloned track created by canvas.captureStream().getVideoTracks() cannot keep some attributes, such as enabled.
+ Updated a testcase expected result:
+ LayoutTests/imported/w3c/web-platform-tests/mst-content-hint/MediaStreamTrack-contentHint.html
+
+ * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
+ (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack):
+ (WebCore::CanvasCaptureMediaStreamTrack::create):
+ (WebCore::CanvasCaptureMediaStreamTrack::clone):
+ * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
+ * Modules/mediastream/MediaStreamTrack.h:
+
2018-09-26 Alex Christensen <achristen...@webkit.org>
Unreviewed, rolling out r236524.
Modified: trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp (236535 => 236536)
--- trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp 2018-09-27 01:24:45 UTC (rev 236535)
+++ trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp 2018-09-27 01:42:24 UTC (rev 236536)
@@ -42,10 +42,15 @@
CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack(ScriptExecutionContext& context, Ref<HTMLCanvasElement>&& canvas, Ref<CanvasCaptureMediaStreamTrack::Source>&& source)
: MediaStreamTrack(context, MediaStreamTrackPrivate::create(source.copyRef()))
, m_canvas(WTFMove(canvas))
- , m_source(WTFMove(source))
{
}
+CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack(ScriptExecutionContext& context, Ref<HTMLCanvasElement>&& canvas, Ref<MediaStreamTrackPrivate>&& privateTrack)
+ : MediaStreamTrack(context, WTFMove(privateTrack))
+ , m_canvas(WTFMove(canvas))
+{
+}
+
Ref<CanvasCaptureMediaStreamTrack::Source> CanvasCaptureMediaStreamTrack::Source::create(HTMLCanvasElement& canvas, std::optional<double>&& frameRequestRate)
{
auto source = adoptRef(*new Source(canvas, WTFMove(frameRequestRate)));
@@ -174,8 +179,8 @@
{
if (!scriptExecutionContext())
return nullptr;
-
- return CanvasCaptureMediaStreamTrack::create(*scriptExecutionContext(), m_canvas.copyRef(), m_source->frameRequestRate());
+
+ return adoptRef(*new CanvasCaptureMediaStreamTrack(*scriptExecutionContext(), m_canvas.copyRef(), m_private->clone()));
}
}
Modified: trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h (236535 => 236536)
--- trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h 2018-09-27 01:24:45 UTC (rev 236535)
+++ trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h 2018-09-27 01:42:24 UTC (rev 236536)
@@ -42,7 +42,7 @@
static Ref<CanvasCaptureMediaStreamTrack> create(ScriptExecutionContext&, Ref<HTMLCanvasElement>&&, std::optional<double>&& frameRequestRate);
HTMLCanvasElement& canvas() { return m_canvas.get(); }
- void requestFrame() { m_source->requestFrame(); }
+ void requestFrame() { static_cast<Source&>(source()).requestFrame(); }
RefPtr<MediaStreamTrack> clone() final;
@@ -81,11 +81,11 @@
};
CanvasCaptureMediaStreamTrack(ScriptExecutionContext&, Ref<HTMLCanvasElement>&&, Ref<Source>&&);
+ CanvasCaptureMediaStreamTrack(ScriptExecutionContext&, Ref<HTMLCanvasElement>&&, Ref<MediaStreamTrackPrivate>&&);
bool isCanvas() const final { return true; }
Ref<HTMLCanvasElement> m_canvas;
- Ref<Source> m_source;
};
}
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h (236535 => 236536)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2018-09-27 01:24:45 UTC (rev 236535)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2018-09-27 01:42:24 UTC (rev 236536)
@@ -149,7 +149,9 @@
MediaStreamTrack(ScriptExecutionContext&, Ref<MediaStreamTrackPrivate>&&);
ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
-
+
+ Ref<MediaStreamTrackPrivate> m_private;
+
private:
explicit MediaStreamTrack(MediaStreamTrack&);
@@ -175,7 +177,7 @@
void trackEnabledChanged(MediaStreamTrackPrivate&) final;
Vector<Observer*> m_observers;
- Ref<MediaStreamTrackPrivate> m_private;
+
MediaTrackConstraints m_constraints;
std::optional<DOMPromiseDeferred<void>> m_promise;