Home | History | Annotate | Download | only in media
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_RENDERER_MEDIA_WEBRTC_LOGGING_MESSAGE_FILTER_H_
      6 #define CHROME_RENDERER_MEDIA_WEBRTC_LOGGING_MESSAGE_FILTER_H_
      7 
      8 #include "base/memory/shared_memory.h"
      9 #include "ipc/ipc_channel_proxy.h"
     10 
     11 namespace base {
     12 class MessageLoopProxy;
     13 }
     14 
     15 class ChromeWebRtcLogMessageDelegate;
     16 
     17 // Filter for WebRTC logging messages. Sits between
     18 // ChromeWebRtcLogMessageDelegate (renderer process) and
     19 // WebRtcLoggingHandlerHost (browser process). Must be called on the IO thread.
     20 class WebRtcLoggingMessageFilter
     21     : public IPC::ChannelProxy::MessageFilter {
     22  public:
     23   explicit WebRtcLoggingMessageFilter(
     24       const scoped_refptr<base::MessageLoopProxy>& io_message_loop);
     25 
     26   virtual void InitLogging(const std::string& app_session_id,
     27                            const std::string& app_url);
     28 
     29   const scoped_refptr<base::MessageLoopProxy>& io_message_loop() {
     30     return io_message_loop_;
     31   }
     32 
     33  protected:
     34   virtual ~WebRtcLoggingMessageFilter();
     35 
     36  private:
     37   // IPC::ChannelProxy::MessageFilter implementation.
     38   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
     39   virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE;
     40   virtual void OnFilterRemoved() OVERRIDE;
     41   virtual void OnChannelClosing() OVERRIDE;
     42 
     43   void CreateLoggingHandler();
     44 
     45   void OnLogOpened(base::SharedMemoryHandle handle, uint32 length);
     46   void OnOpenLogFailed();
     47 
     48   void Send(IPC::Message* message);
     49 
     50   // Owned by this class. The only other pointer to it is in libjingle's logging
     51   // file. That's a global pointer used on different threads, so we will leak
     52   // this object when we go away to ensure that it outlives any log messages
     53   // coming from libjingle.
     54   ChromeWebRtcLogMessageDelegate* log_message_delegate_;
     55 
     56   scoped_refptr<base::MessageLoopProxy> io_message_loop_;
     57 
     58   IPC::Channel* channel_;
     59 
     60   DISALLOW_COPY_AND_ASSIGN(WebRtcLoggingMessageFilter);
     61 };
     62 
     63 #endif  // CHROME_RENDERER_MEDIA_WEBRTC_LOGGING_MESSAGE_FILTER_H_
     64