Title: [221305] trunk
Revision
221305
Author
commit-qu...@webkit.org
Date
2017-08-29 10:43:51 -0700 (Tue, 29 Aug 2017)

Log Message

CanvasCaptureMediaStreamTrack clone is not a CanvasCaptureMediaStreamTrack
https://bugs.webkit.org/show_bug.cgi?id=176036

Patch by Youenn Fablet <you...@apple.com> on 2017-08-29
Reviewed by Eric Carlson.

Source/WebCore:

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:

LayoutTests:

* fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track-expected.txt:
* fast/mediastream/captureStream/canvas2d.html:
* fast/mediastream/captureStream/canvas2d-expected.txt:

Modified Paths

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;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to