Diff
Modified: trunk/LayoutTests/ChangeLog (221304 => 221305)
--- trunk/LayoutTests/ChangeLog 2017-08-29 17:40:14 UTC (rev 221304)
+++ trunk/LayoutTests/ChangeLog 2017-08-29 17:43:51 UTC (rev 221305)
@@ -1,3 +1,14 @@
+2017-08-29 Youenn Fablet <you...@apple.com>
+
+ CanvasCaptureMediaStreamTrack clone is not a CanvasCaptureMediaStreamTrack
+ https://bugs.webkit.org/show_bug.cgi?id=176036
+
+ Reviewed by Eric Carlson.
+
+ * fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track-expected.txt:
+ * fast/mediastream/captureStream/canvas2d.html:
+ * fast/mediastream/captureStream/canvas2d-expected.txt:
+
2017-08-29 Per Arne Vollan <pvol...@apple.com>
Skip editing/pasteboard/paste-empty-startcontainer.html on Windows.
Modified: trunk/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track-expected.txt (221304 => 221305)
--- trunk/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track-expected.txt 2017-08-29 17:40:14 UTC (rev 221304)
+++ trunk/LayoutTests/fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track-expected.txt 2017-08-29 17:43:51 UTC (rev 221305)
@@ -1,3 +1,3 @@
-FAIL check clone track after captureStream() cloned_track.requestFrame is not a function. (In 'cloned_track.requestFrame()', 'cloned_track.requestFrame' is undefined)
+PASS check clone track after captureStream()
Modified: trunk/LayoutTests/fast/mediastream/captureStream/canvas2d-expected.txt (221304 => 221305)
--- trunk/LayoutTests/fast/mediastream/captureStream/canvas2d-expected.txt 2017-08-29 17:40:14 UTC (rev 221304)
+++ trunk/LayoutTests/fast/mediastream/captureStream/canvas2d-expected.txt 2017-08-29 17:43:51 UTC (rev 221305)
@@ -1,4 +1,5 @@
PASS captureStream with 2d context drawing
+PASS captureStream cloning
Modified: trunk/LayoutTests/fast/mediastream/captureStream/canvas2d.html (221304 => 221305)
--- trunk/LayoutTests/fast/mediastream/captureStream/canvas2d.html 2017-08-29 17:40:14 UTC (rev 221304)
+++ trunk/LayoutTests/fast/mediastream/captureStream/canvas2d.html 2017-08-29 17:43:51 UTC (rev 221305)
@@ -53,6 +53,18 @@
return promise;
}, "captureStream with 2d context drawing");
+
+promise_test((test) => {
+ var stream = canvas1.captureStream().clone();
+ if (window.internals)
+ assert_true(internals.pageMediaState().toLowerCase().indexOf("capture") == -1, "media state should not contain any camera capture");
+ promise = checkCanvas(canvas1, stream);
+
+ printLine();
+
+
+ return promise;
+}, "captureStream cloning");
</script>
</head>
</html>
Modified: trunk/Source/WebCore/ChangeLog (221304 => 221305)
--- trunk/Source/WebCore/ChangeLog 2017-08-29 17:40:14 UTC (rev 221304)
+++ trunk/Source/WebCore/ChangeLog 2017-08-29 17:43:51 UTC (rev 221305)
@@ -1,3 +1,23 @@
+2017-08-29 Youenn Fablet <you...@apple.com>
+
+ CanvasCaptureMediaStreamTrack clone is not a CanvasCaptureMediaStreamTrack
+ https://bugs.webkit.org/show_bug.cgi?id=176036
+
+ Reviewed by Eric Carlson.
+
+ Covered by existing tests.
+
+ Instead of creating a MediaStreamTrack clone when cloning a CanvasCaptureMediaStreamTrack,
+ we are now creating a CanvasCaptureMediaStreamTrack.
+ This allows exposing the expected methods and having the expected functionality.
+
+ * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
+ (WebCore::CanvasCaptureMediaStreamTrack::clone):
+ * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
+ * Modules/mediastream/MediaStreamTrack.cpp:
+ (WebCore::MediaStreamTrack::clone):
+ * Modules/mediastream/MediaStreamTrack.h:
+
2017-08-29 Chris Dumez <cdu...@apple.com>
Add initial support for dataTransferItem.webkitGetAsEntry()
Modified: trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp (221304 => 221305)
--- trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp 2017-08-29 17:40:14 UTC (rev 221304)
+++ trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp 2017-08-29 17:43:51 UTC (rev 221305)
@@ -163,6 +163,14 @@
videoSampleAvailable(*sample);
}
+RefPtr<MediaStreamTrack> CanvasCaptureMediaStreamTrack::clone()
+{
+ if (!scriptExecutionContext())
+ return nullptr;
+
+ return CanvasCaptureMediaStreamTrack::create(*scriptExecutionContext(), m_canvas.copyRef(), m_source->frameRequestRate());
}
+}
+
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h (221304 => 221305)
--- trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h 2017-08-29 17:40:14 UTC (rev 221304)
+++ trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h 2017-08-29 17:43:51 UTC (rev 221305)
@@ -44,6 +44,8 @@
HTMLCanvasElement& canvas() { return m_canvas.get(); }
void requestFrame() { m_source->requestFrame(); }
+ RefPtr<MediaStreamTrack> clone() final;
+
private:
class Source final : public RealtimeMediaSource, private CanvasObserver {
public:
@@ -50,6 +52,7 @@
static Ref<Source> create(HTMLCanvasElement&, std::optional<double>&& frameRequestRate);
void requestFrame() { m_shouldEmitFrame = true; }
+ std::optional<double> frameRequestRate() const { return m_frameRequestRate; }
private:
Source(HTMLCanvasElement&, std::optional<double>&&);
@@ -81,7 +84,7 @@
CanvasCaptureMediaStreamTrack(ScriptExecutionContext&, Ref<HTMLCanvasElement>&&, Ref<Source>&&);
bool isCanvas() const final { return true; }
-
+
Ref<HTMLCanvasElement> m_canvas;
Ref<Source> m_source;
};
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp (221304 => 221305)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2017-08-29 17:40:14 UTC (rev 221304)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2017-08-29 17:43:51 UTC (rev 221305)
@@ -117,8 +117,11 @@
return m_ended || m_private->ended();
}
-Ref<MediaStreamTrack> MediaStreamTrack::clone()
+RefPtr<MediaStreamTrack> MediaStreamTrack::clone()
{
+ if (!scriptExecutionContext())
+ return nullptr;
+
return MediaStreamTrack::create(*scriptExecutionContext(), m_private->clone());
}
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h (221304 => 221305)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2017-08-29 17:40:14 UTC (rev 221304)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2017-08-29 17:43:51 UTC (rev 221305)
@@ -78,7 +78,7 @@
bool ended() const;
- Ref<MediaStreamTrack> clone();
+ virtual RefPtr<MediaStreamTrack> clone();
enum class StopMode { Silently, PostEvent };
void stopTrack(StopMode = StopMode::Silently);
@@ -139,6 +139,8 @@
protected:
MediaStreamTrack(ScriptExecutionContext&, Ref<MediaStreamTrackPrivate>&&);
+ ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
+
private:
explicit MediaStreamTrack(MediaStreamTrack&);
@@ -155,7 +157,6 @@
void refEventTarget() final { ref(); }
void derefEventTarget() final { deref(); }
EventTargetInterface eventTargetInterface() const final { return MediaStreamTrackEventTargetInterfaceType; }
- ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
// MediaStreamTrackPrivate::Observer
void trackStarted(MediaStreamTrackPrivate&) final;