Index: content/renderer/media/media_stream_impl.h |
diff --git a/content/renderer/media/media_stream_impl.h b/content/renderer/media/media_stream_impl.h |
index a9c2db7caa0954cd3b0ae1fe0c5c1dbf82760dbf..26883137f3f428d87a9651861585588567b93f8f 100644 |
--- a/content/renderer/media/media_stream_impl.h |
+++ b/content/renderer/media/media_stream_impl.h |
@@ -20,6 +20,7 @@ |
#include "base/threading/non_thread_safe.h" |
#include "base/threading/thread.h" |
#include "content/common/content_export.h" |
+#include "content/public/renderer/render_view_observer.h" |
#include "content/renderer/media/media_stream_dispatcher_eventhandler.h" |
#include "content/renderer/media/rtc_video_decoder.h" |
#include "third_party/libjingle/source/talk/app/webrtc/mediastream.h" |
@@ -60,15 +61,19 @@ class RTCVideoDecoder; |
// MediaStreamManager (via MediaStreamDispatcher and MediaStreamDispatcherHost) |
// in the browser process. It must be created, called and destroyed on the |
// render thread. |
+// MediaStreamImpl have weak pointers to a P2PSocketDispatcher and a |
+// MediaStreamDispatcher. These objects are also RenderViewObservers. |
+// MediaStreamImpl must be deleted before the P2PSocketDispatcher. |
class CONTENT_EXPORT MediaStreamImpl |
- : NON_EXPORTED_BASE(public WebKit::WebUserMediaClient), |
+ : public content::RenderViewObserver, |
+ NON_EXPORTED_BASE(public WebKit::WebUserMediaClient), |
NON_EXPORTED_BASE(public webkit_media::MediaStreamClient), |
public MediaStreamDispatcherEventHandler, |
- NON_EXPORTED_BASE(public base::NonThreadSafe), |
- public base::RefCountedThreadSafe<MediaStreamImpl>, |
- public base::SupportsWeakPtr<MediaStreamImpl> { |
+ public base::SupportsWeakPtr<MediaStreamImpl>, |
+ NON_EXPORTED_BASE(public base::NonThreadSafe) { |
public: |
MediaStreamImpl( |
+ content::RenderView* render_view, |
MediaStreamDispatcher* media_stream_dispatcher, |
content::P2PSocketDispatcher* p2p_socket_dispatcher, |
VideoCaptureImplManager* vc_manager, |
@@ -159,6 +164,7 @@ class CONTENT_EXPORT MediaStreamImpl |
content::P2PSocketDispatcher* p2p_socket_dispatcher_; |
// We own network_manager_, must be deleted on the worker thread. |
+ // The network manager uses |p2p_socket_dispatcher_|. |
content::IpcNetworkManager* network_manager_; |
scoped_ptr<content::IpcPacketSocketFactory> socket_factory_; |