blob: 474c3fd72a775ed62514a0e4389250a820ab868d [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/renderer/media/webrtc_logging_message_filter.h"
#include "base/bind.h"
#include "base/logging.h"
#include "base/single_thread_task_runner.h"
#include "chrome/common/media/webrtc_logging_messages.h"
#include "chrome/renderer/media/chrome_webrtc_log_message_delegate.h"
#include "ipc/ipc_logging.h"
WebRtcLoggingMessageFilter::WebRtcLoggingMessageFilter(
const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner)
: io_task_runner_(io_task_runner),
log_message_delegate_(NULL),
sender_(NULL) {
// May be null in a browsertest using MockRenderThread.
if (io_task_runner_.get()) {
io_task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&WebRtcLoggingMessageFilter::CreateLoggingHandler,
base::Unretained(this)));
}
}
WebRtcLoggingMessageFilter::~WebRtcLoggingMessageFilter() {
}
bool WebRtcLoggingMessageFilter::OnMessageReceived(
const IPC::Message& message) {
DCHECK(io_task_runner_->BelongsToCurrentThread());
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(WebRtcLoggingMessageFilter, message)
IPC_MESSAGE_HANDLER(WebRtcLoggingMsg_StartLogging, OnStartLogging)
IPC_MESSAGE_HANDLER(WebRtcLoggingMsg_StopLogging, OnStopLogging)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
void WebRtcLoggingMessageFilter::OnFilterAdded(IPC::Channel* channel) {
DCHECK(!io_task_runner_.get() || io_task_runner_->BelongsToCurrentThread());
sender_ = channel;
}
void WebRtcLoggingMessageFilter::OnFilterRemoved() {
DCHECK(!io_task_runner_.get() || io_task_runner_->BelongsToCurrentThread());
sender_ = NULL;
log_message_delegate_->OnFilterRemoved();
}
void WebRtcLoggingMessageFilter::OnChannelClosing() {
DCHECK(!io_task_runner_.get() || io_task_runner_->BelongsToCurrentThread());
sender_ = NULL;
log_message_delegate_->OnFilterRemoved();
}
void WebRtcLoggingMessageFilter::AddLogMessages(
const std::vector<WebRtcLoggingMessageData>& messages) {
DCHECK(io_task_runner_->BelongsToCurrentThread());
Send(new WebRtcLoggingMsg_AddLogMessages(messages));
}
void WebRtcLoggingMessageFilter::LoggingStopped() {
DCHECK(!io_task_runner_.get() || io_task_runner_->BelongsToCurrentThread());
Send(new WebRtcLoggingMsg_LoggingStopped());
}
void WebRtcLoggingMessageFilter::CreateLoggingHandler() {
DCHECK(!io_task_runner_.get() || io_task_runner_->BelongsToCurrentThread());
log_message_delegate_ =
new ChromeWebRtcLogMessageDelegate(io_task_runner_, this);
}
void WebRtcLoggingMessageFilter::OnStartLogging() {
DCHECK(!io_task_runner_.get() || io_task_runner_->BelongsToCurrentThread());
log_message_delegate_->OnStartLogging();
}
void WebRtcLoggingMessageFilter::OnStopLogging() {
DCHECK(!io_task_runner_.get() || io_task_runner_->BelongsToCurrentThread());
log_message_delegate_->OnStopLogging();
}
void WebRtcLoggingMessageFilter::Send(IPC::Message* message) {
DCHECK(!io_task_runner_.get() || io_task_runner_->BelongsToCurrentThread());
if (!sender_) {
DLOG(ERROR) << "IPC sender not available.";
delete message;
} else {
sender_->Send(message);
}
}