1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/renderer/media/webrtc_logging_message_filter.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h"
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/common/media/webrtc_logging_messages.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/renderer/media/chrome_webrtc_log_message_delegate.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ipc/ipc_logging.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebRtcLoggingMessageFilter::WebRtcLoggingMessageFilter(
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const scoped_refptr<base::MessageLoopProxy>& io_message_loop)
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : io_message_loop_(io_message_loop),
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      log_message_delegate_(NULL),
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      sender_(NULL) {
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // May be null in a browsertest using MockRenderThread.
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (io_message_loop_.get()) {
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    io_message_loop_->PostTask(
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        FROM_HERE, base::Bind(
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            &WebRtcLoggingMessageFilter::CreateLoggingHandler,
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            base::Unretained(this)));
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebRtcLoggingMessageFilter::~WebRtcLoggingMessageFilter() {
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool WebRtcLoggingMessageFilter::OnMessageReceived(
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const IPC::Message& message) {
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DCHECK(io_message_loop_->BelongsToCurrentThread());
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool handled = true;
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  IPC_BEGIN_MESSAGE_MAP(WebRtcLoggingMessageFilter, message)
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    IPC_MESSAGE_HANDLER(WebRtcLoggingMsg_StartLogging, OnStartLogging)
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    IPC_MESSAGE_HANDLER(WebRtcLoggingMsg_StopLogging, OnStopLogging)
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    IPC_MESSAGE_UNHANDLED(handled = false)
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  IPC_END_MESSAGE_MAP()
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return handled;
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void WebRtcLoggingMessageFilter::OnFilterAdded(IPC::Sender* sender) {
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(!io_message_loop_.get() || io_message_loop_->BelongsToCurrentThread());
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  sender_ = sender;
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WebRtcLoggingMessageFilter::OnFilterRemoved() {
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(!io_message_loop_.get() || io_message_loop_->BelongsToCurrentThread());
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  sender_ = NULL;
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  log_message_delegate_->OnFilterRemoved();
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WebRtcLoggingMessageFilter::OnChannelClosing() {
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(!io_message_loop_.get() || io_message_loop_->BelongsToCurrentThread());
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  sender_ = NULL;
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  log_message_delegate_->OnFilterRemoved();
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid WebRtcLoggingMessageFilter::AddLogMessages(
60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const std::vector<WebRtcLoggingMessageData>& messages) {
61b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  DCHECK(io_message_loop_->BelongsToCurrentThread());
62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  Send(new WebRtcLoggingMsg_AddLogMessages(messages));
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void WebRtcLoggingMessageFilter::LoggingStopped() {
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(!io_message_loop_.get() || io_message_loop_->BelongsToCurrentThread());
674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  Send(new WebRtcLoggingMsg_LoggingStopped());
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void WebRtcLoggingMessageFilter::CreateLoggingHandler() {
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(!io_message_loop_.get() || io_message_loop_->BelongsToCurrentThread());
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  log_message_delegate_ =
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      new ChromeWebRtcLogMessageDelegate(io_message_loop_, this);
74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void WebRtcLoggingMessageFilter::OnStartLogging() {
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(!io_message_loop_.get() || io_message_loop_->BelongsToCurrentThread());
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  log_message_delegate_->OnStartLogging();
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebRtcLoggingMessageFilter::OnStopLogging() {
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(!io_message_loop_.get() || io_message_loop_->BelongsToCurrentThread());
834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  log_message_delegate_->OnStopLogging();
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WebRtcLoggingMessageFilter::Send(IPC::Message* message) {
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(!io_message_loop_.get() || io_message_loop_->BelongsToCurrentThread());
88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (!sender_) {
89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    DLOG(ERROR) << "IPC sender not available.";
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    delete message;
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  } else {
92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    sender_->Send(message);
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
95