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