| Index: content/public/browser/browser_message_filter.cc
|
| diff --git a/content/public/browser/browser_message_filter.cc b/content/public/browser/browser_message_filter.cc
|
| index 209f4a9ce897cea01cb6ee2ade019a3994c13ef2..3d695ab4570bb01a6807b6fe614c676fd80850e1 100644
|
| --- a/content/public/browser/browser_message_filter.cc
|
| +++ b/content/public/browser/browser_message_filter.cc
|
| @@ -22,10 +22,6 @@ BrowserMessageFilter::BrowserMessageFilter()
|
| : channel_(NULL), peer_handle_(base::kNullProcessHandle) {
|
| }
|
|
|
| -BrowserMessageFilter::~BrowserMessageFilter() {
|
| - base::CloseProcessHandle(peer_handle_);
|
| -}
|
| -
|
| void BrowserMessageFilter::OnFilterAdded(IPC::Channel* channel) {
|
| channel_ = channel;
|
| }
|
| @@ -40,6 +36,32 @@ void BrowserMessageFilter::OnChannelConnected(int32 peer_pid) {
|
| }
|
| }
|
|
|
| +bool BrowserMessageFilter::OnMessageReceived(const IPC::Message& message) {
|
| + BrowserThread::ID thread = BrowserThread::IO;
|
| + OverrideThreadForMessage(message, &thread);
|
| +
|
| + if (thread == BrowserThread::IO) {
|
| + scoped_refptr<base::TaskRunner> runner =
|
| + OverrideTaskRunnerForMessage(message);
|
| + if (runner) {
|
| + runner->PostTask(FROM_HERE,
|
| + base::Bind(base::IgnoreResult(&BrowserMessageFilter::DispatchMessage),
|
| + this, message));
|
| + return true;
|
| + }
|
| + return DispatchMessage(message);
|
| + }
|
| +
|
| + if (thread == BrowserThread::UI && !CheckCanDispatchOnUI(message, this))
|
| + return true;
|
| +
|
| + BrowserThread::PostTask(
|
| + thread, FROM_HERE,
|
| + base::Bind(base::IgnoreResult(&BrowserMessageFilter::DispatchMessage),
|
| + this, message));
|
| + return true;
|
| +}
|
| +
|
| bool BrowserMessageFilter::Send(IPC::Message* message) {
|
| if (message->is_sync()) {
|
| // We don't support sending synchronous messages from the browser. If we
|
| @@ -75,50 +97,6 @@ base::TaskRunner* BrowserMessageFilter::OverrideTaskRunnerForMessage(
|
| return NULL;
|
| }
|
|
|
| -bool BrowserMessageFilter::OnMessageReceived(const IPC::Message& message) {
|
| - BrowserThread::ID thread = BrowserThread::IO;
|
| - OverrideThreadForMessage(message, &thread);
|
| -
|
| - if (thread == BrowserThread::IO) {
|
| - scoped_refptr<base::TaskRunner> runner =
|
| - OverrideTaskRunnerForMessage(message);
|
| - if (runner) {
|
| - runner->PostTask(FROM_HERE,
|
| - base::Bind(base::IgnoreResult(&BrowserMessageFilter::DispatchMessage),
|
| - this, message));
|
| - return true;
|
| - }
|
| - return DispatchMessage(message);
|
| - }
|
| -
|
| - if (thread == BrowserThread::UI && !CheckCanDispatchOnUI(message, this))
|
| - return true;
|
| -
|
| - BrowserThread::PostTask(
|
| - thread, FROM_HERE,
|
| - base::Bind(base::IgnoreResult(&BrowserMessageFilter::DispatchMessage),
|
| - this, 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) {
|
| - content::RecordAction(UserMetricsAction("BadMessageTerminate_BMF"));
|
| - BadMessageReceived();
|
| - }
|
| -
|
| - return rv;
|
| -}
|
| -
|
| -void BrowserMessageFilter::BadMessageReceived() {
|
| - base::KillProcess(peer_handle(), content::RESULT_CODE_KILLED_BAD_MESSAGE,
|
| - false);
|
| -}
|
| -
|
| bool BrowserMessageFilter::CheckCanDispatchOnUI(const IPC::Message& message,
|
| IPC::Message::Sender* sender) {
|
| #if defined(OS_WIN) && !defined(USE_AURA)
|
| @@ -144,4 +122,26 @@ bool BrowserMessageFilter::CheckCanDispatchOnUI(const IPC::Message& message,
|
| return true;
|
| }
|
|
|
| +BrowserMessageFilter::~BrowserMessageFilter() {
|
| + base::CloseProcessHandle(peer_handle_);
|
| +}
|
| +
|
| +void BrowserMessageFilter::BadMessageReceived() {
|
| + base::KillProcess(peer_handle(), content::RESULT_CODE_KILLED_BAD_MESSAGE,
|
| + false);
|
| +}
|
| +
|
| +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) {
|
| + content::RecordAction(UserMetricsAction("BadMessageTerminate_BMF"));
|
| + BadMessageReceived();
|
| + }
|
| +
|
| + return rv;
|
| +}
|
| +
|
| } // namespace content
|
|
|