Index: content/renderer/media/media_stream_video_track.h |
diff --git a/content/renderer/media/media_stream_video_track.h b/content/renderer/media/media_stream_video_track.h |
index 9fa8125d27b27f7184afc300e006db3ddecf44a2..040686c582891d7ab598e04cca10205284773778 100644 |
--- a/content/renderer/media/media_stream_video_track.h |
+++ b/content/renderer/media/media_stream_video_track.h |
@@ -8,6 +8,7 @@ |
#include <vector> |
#include "base/compiler_specific.h" |
+#include "base/gtest_prod_util.h" |
#include "base/memory/scoped_vector.h" |
#include "base/threading/thread_checker.h" |
#include "content/common/content_export.h" |
@@ -48,17 +49,6 @@ class CONTENT_EXPORT MediaStreamVideoTrack : public MediaStreamTrack { |
bool enabled); |
virtual ~MediaStreamVideoTrack(); |
- // Add |sink| to receive state changes and video frames on the main render |
- // thread. |
- virtual void AddSink(MediaStreamVideoSink* sink); |
- virtual void RemoveSink(MediaStreamVideoSink* sink); |
- |
- // Add |sink| to receive state changes on the main render thread and video |
- // frames in the |callback| method on the IO-thread. |
- virtual void AddSink(MediaStreamSink* sink, |
- const VideoCaptureDeliverFrameCB& callback); |
- virtual void RemoveSink(MediaStreamSink* sink); |
- |
virtual void SetEnabled(bool enabled) OVERRIDE; |
virtual void Stop() OVERRIDE; |
@@ -73,6 +63,23 @@ class CONTENT_EXPORT MediaStreamVideoTrack : public MediaStreamTrack { |
base::ThreadChecker thread_checker_; |
private: |
+ // MediaStreamVideoSink is a friend to allow it to call AddSink() and |
+ // RemoveSink(). |
+ friend class MediaStreamVideoSink; |
+ FRIEND_TEST_ALL_PREFIXES(MediaStreamRemoteVideoSourceTest, StartTrack); |
+ FRIEND_TEST_ALL_PREFIXES(MediaStreamRemoteVideoSourceTest, RemoteTrackStop); |
+ FRIEND_TEST_ALL_PREFIXES(VideoDestinationHandlerTest, PutFrame); |
+ |
+ // Add |sink| to receive state changes on the main render thread and video |
+ // frames in the |callback| method on the IO-thread. |
+ // |callback| will be reset on the render thread. |
+ // These two methods are private such that no subclass can intercept and |
+ // store the callback. This is important to ensure that we can release |
+ // the callback on render thread without reference to it on the IO-thread. |
+ void AddSink(MediaStreamVideoSink* sink, |
+ const VideoCaptureDeliverFrameCB& callback); |
+ void RemoveSink(MediaStreamVideoSink* sink); |
+ |
// |FrameDeliverer| is an internal helper object used for delivering video |
// frames on the IO-thread using callbacks to all registered tracks. |
class FrameDeliverer; |