Index: chrome/browser/browser_message_filter.cc |
=================================================================== |
--- chrome/browser/browser_message_filter.cc (revision 75626) |
+++ chrome/browser/browser_message_filter.cc (working copy) |
@@ -1,92 +0,0 @@ |
-// Copyright (c) 2010 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/browser/browser_message_filter.h" |
- |
-#include "base/logging.h" |
-#include "base/process.h" |
-#include "base/process_util.h" |
-#include "chrome/browser/metrics/user_metrics.h" |
-#include "chrome/common/result_codes.h" |
- |
-BrowserMessageFilter::BrowserMessageFilter() |
- : channel_(NULL), peer_handle_(base::kNullProcessHandle) { |
-} |
- |
-BrowserMessageFilter::~BrowserMessageFilter() { |
- base::CloseProcessHandle(peer_handle_); |
-} |
- |
-void BrowserMessageFilter::OnFilterAdded(IPC::Channel* channel) { |
- channel_ = channel; |
-} |
- |
-void BrowserMessageFilter::OnChannelClosing() { |
- channel_ = NULL; |
-} |
- |
-void BrowserMessageFilter::OnChannelConnected(int32 peer_pid) { |
- if (!base::OpenProcessHandle(peer_pid, &peer_handle_)) { |
- NOTREACHED(); |
- } |
-} |
- |
-bool BrowserMessageFilter::Send(IPC::Message* message) { |
- if (message->is_sync()) { |
- // We don't support sending synchronous messages from the browser. If we |
- // really needed it, we can make this class derive from SyncMessageFilter |
- // but it seems better to not allow sending synchronous messages from the |
- // browser, since it might allow a corrupt/malicious renderer to hang us. |
- NOTREACHED() << "Can't send sync message through BrowserMessageFilter!"; |
- return false; |
- } |
- |
- if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
- BrowserThread::PostTask( |
- BrowserThread::IO, |
- FROM_HERE, |
- NewRunnableMethod(this, &BrowserMessageFilter::Send, message)); |
- return true; |
- } |
- |
- if (channel_) |
- return channel_->Send(message); |
- |
- delete message; |
- return false; |
-} |
- |
-void BrowserMessageFilter::OverrideThreadForMessage(const IPC::Message& message, |
- BrowserThread::ID* thread) { |
-} |
- |
-bool BrowserMessageFilter::OnMessageReceived(const IPC::Message& message) { |
- BrowserThread::ID thread = BrowserThread::IO; |
- OverrideThreadForMessage(message, &thread); |
- if (thread == BrowserThread::IO) |
- return DispatchMessage(message); |
- |
- BrowserThread::PostTask( |
- thread, FROM_HERE, |
- NewRunnableMethod( |
- this, &BrowserMessageFilter::DispatchMessage, message)); |
- return true; |
-} |
- |
-bool BrowserMessageFilter::DispatchMessage(const IPC::Message& message) { |
- bool message_was_ok = true; |
- bool rv = OnMessageReceived(message, &message_was_ok); |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO) || rv) << |
- "Must handle messages that were dispatched to another thread!"; |
- if (!message_was_ok) { |
- UserMetrics::RecordAction(UserMetricsAction("BadMessageTerminate_BMF")); |
- BadMessageReceived(); |
- } |
- |
- return rv; |
-} |
- |
-void BrowserMessageFilter::BadMessageReceived() { |
- base::KillProcess(peer_handle(), ResultCodes::KILLED_BAD_MESSAGE, false); |
-} |