| Index: chrome/browser/browser_message_filter.h | 
| =================================================================== | 
| --- chrome/browser/browser_message_filter.h	(revision 68139) | 
| +++ chrome/browser/browser_message_filter.h	(working copy) | 
| @@ -2,39 +2,63 @@ | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| -#ifndef CHROME_BROWSER_BROWSER_IO_MESSAGE_FILTER_H_ | 
| -#define CHROME_BROWSER_BROWSER_IO_MESSAGE_FILTER_H_ | 
| +#ifndef CHROME_BROWSER_BROWSER_MESSAGE_FILTER_H_ | 
| +#define CHROME_BROWSER_BROWSER_MESSAGE_FILTER_H_ | 
| #pragma once | 
|  | 
| #include "base/process.h" | 
| +#include "chrome/browser/browser_thread.h" | 
| #include "ipc/ipc_channel_proxy.h" | 
|  | 
| -// Base class for message filters in the browser process that reside on the IO | 
| -// thread. | 
| -class BrowserIOMessageFilter : public IPC::ChannelProxy::MessageFilter, | 
| -                               public IPC::Message::Sender { | 
| +// Base class for message filters in the browser process.  You can receive and | 
| +// send messages on any thread. | 
| +class BrowserMessageFilter : public IPC::ChannelProxy::MessageFilter, | 
| +                             public IPC::Message::Sender { | 
| public: | 
| -  BrowserIOMessageFilter(); | 
| -  virtual ~BrowserIOMessageFilter(); | 
| +  BrowserMessageFilter(); | 
| +  virtual ~BrowserMessageFilter(); | 
|  | 
| // IPC::ChannelProxy::MessageFilter methods.  If you override them, make sure | 
| -  // to call them as well. | 
| +  // to call them as well.  These are always called on the IO thread. | 
| virtual void OnFilterAdded(IPC::Channel* channel); | 
| virtual void OnChannelClosing(); | 
| virtual void OnChannelConnected(int32 peer_pid); | 
| +  // DON'T OVERRIDE THIS!  Override the other version below. | 
| +  virtual bool OnMessageReceived(const IPC::Message& message); | 
|  | 
| -  // IPC::Message::Sender implementation: | 
| -  virtual bool Send(IPC::Message* msg); | 
| +  // IPC::Message::Sender implementation.  Can be called on any thread.  Can't | 
| +  // send sync messages (since we don't want to block the browser on any other | 
| +  // process). | 
| +  virtual bool Send(IPC::Message* message); | 
|  | 
| +  // If you want the given message to be dispatched to your OnMessageReceived on | 
| +  // a different thread, change |thread| to the id of the target thread. | 
| +  // If you don't handle this message, or want to keep it on the IO thread, do | 
| +  // nothing. | 
| +  virtual void OverrideThreadForMessage(const IPC::Message& message, | 
| +                                        BrowserThread::ID* thread); | 
| + | 
| +  // Override this to receive messages. | 
| +  // Your function will normally be called on the IO thread.  However, if your | 
| +  // OverrideThreadForMessage modifies the thread used to dispatch the message, | 
| +  // your function will be called on the requested thread. | 
| +  virtual bool OnMessageReceived(const IPC::Message& message, | 
| +                                 bool* message_was_ok) = 0; | 
| + | 
| protected: | 
| +  // Can be called on any thread, after OnChannelConnected is called. | 
| base::ProcessHandle peer_handle() { return peer_handle_; } | 
|  | 
| // Call this if a message couldn't be deserialized.  This kills the renderer. | 
| +  // Can be called on any thread. | 
| void BadMessageReceived(uint32 msg_type); | 
|  | 
| private: | 
| +  // Dispatches a message to the derived class. | 
| +  bool DispatchMessage(const IPC::Message& message); | 
| + | 
| IPC::Channel* channel_; | 
| base::ProcessHandle peer_handle_; | 
| }; | 
|  | 
| -#endif  // CHROME_BROWSER_BROWSER_IO_MESSAGE_FILTER_H_ | 
| +#endif  // CHROME_BROWSER_BROWSER_MESSAGE_FILTER_H_ | 
|  |