diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-08 17:38:14 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-08 17:38:14 +0000 |
commit | ff1e913c6d63f3b5b12b4d0cb0b960bcb2e682af (patch) | |
tree | d92f1e8949d181069e0defe685d8e4b65c42619e /chrome/browser/extensions/extension_message_handler.h | |
parent | afc4ce91f94bc0cb976884e1c1c785a9e75f127a (diff) | |
download | chromium_src-ff1e913c6d63f3b5b12b4d0cb0b960bcb2e682af.zip chromium_src-ff1e913c6d63f3b5b12b4d0cb0b960bcb2e682af.tar.gz chromium_src-ff1e913c6d63f3b5b12b4d0cb0b960bcb2e682af.tar.bz2 |
Revert 80938 - Add a new RenderViewHostObserver interface for filtering IPCs send to RenderViewHost. This is needed because with TabContentsObserver, an observer might not know which RenderViewHost a message came from duing a pending navigation. A side-benefit is that we only have to add these observers once, instead of remembering/knowing all the delegates that might want to filter these messages.BUG=78629Review URL: http://codereview.chromium.org/6812030
TBR=jam@chromium.org
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80956 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_message_handler.h')
-rw-r--r-- | chrome/browser/extensions/extension_message_handler.h | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/chrome/browser/extensions/extension_message_handler.h b/chrome/browser/extensions/extension_message_handler.h index d134d09..3cd8d3c 100644 --- a/chrome/browser/extensions/extension_message_handler.h +++ b/chrome/browser/extensions/extension_message_handler.h @@ -6,8 +6,10 @@ #define CHROME_BROWSER_EXTENSIONS_EXTENSION_MESSAGE_HANDLER_H_ #pragma once -#include "content/browser/renderer_host/render_view_host_observer.h" +#include "content/browser/tab_contents/tab_contents_observer.h" +#include "ipc/ipc_channel.h" +class ExtensionFunctionDispatcher; class Profile; struct ExtensionHostMsg_DomMessage_Params; @@ -15,21 +17,60 @@ struct ExtensionHostMsg_DomMessage_Params; // renderer/extension processes. This object is created for renderers and also // ExtensionHost/BackgroundContents. Contrast this with ExtensionTabHelper, // which is only created for TabContents. -class ExtensionMessageHandler : public RenderViewHostObserver { +class ExtensionMessageHandler : public IPC::Channel::Listener { public: // |sender| is guaranteed to outlive this object. - explicit ExtensionMessageHandler(RenderViewHost* render_view_host); + ExtensionMessageHandler(int child_id, + IPC::Message::Sender* sender, + Profile* profile); virtual ~ExtensionMessageHandler(); - // RenderViewHostObserver overrides. + // IPC::Channel::Listener overrides. virtual bool OnMessageReceived(const IPC::Message& message); + // Returns true iff the message can be dispatched. + bool CanDispatchRequest(int child_id, + int routing_id, + const ExtensionHostMsg_DomMessage_Params& params); + + void set_extension_function_dispatcher(ExtensionFunctionDispatcher* e) { + extension_function_dispatcher_ = e; + } + private: // Message handlers. void OnPostMessage(int port_id, const std::string& message); - void OnRequest(const ExtensionHostMsg_DomMessage_Params& params); + void OnRequest(const IPC::Message& message, + const ExtensionHostMsg_DomMessage_Params& params); + + // The child id of the corresponding process. Can be 0. + int child_id_; + + // Guaranteed to outlive this object. + IPC::Message::Sender* sender_; + ExtensionFunctionDispatcher* extension_function_dispatcher_; + + Profile* profile_; DISALLOW_COPY_AND_ASSIGN(ExtensionMessageHandler); }; +// A TabContentsObserver that forwards IPCs to ExtensionMessageHandler. +class ExtensionMessageObserver : public TabContentsObserver { + public: + explicit ExtensionMessageObserver(TabContents* tab_contents); + ~ExtensionMessageObserver(); + + private: + // TabContentsObserver overrides. + virtual bool OnMessageReceived(const IPC::Message& message); + + void OnRequest(const IPC::Message& message, + const ExtensionHostMsg_DomMessage_Params& params); + + ExtensionMessageHandler handler_; + + DISALLOW_COPY_AND_ASSIGN(ExtensionMessageObserver); +}; + #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_MESSAGE_HANDLER_H_ |