summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_message_handler.h
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-08 17:38:14 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-08 17:38:14 +0000
commitff1e913c6d63f3b5b12b4d0cb0b960bcb2e682af (patch)
treed92f1e8949d181069e0defe685d8e4b65c42619e /chrome/browser/extensions/extension_message_handler.h
parentafc4ce91f94bc0cb976884e1c1c785a9e75f127a (diff)
downloadchromium_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.h51
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_