Index: chrome/browser/extensions/extension_function.h |
diff --git a/chrome/browser/extensions/extension_function.h b/chrome/browser/extensions/extension_function.h |
index 6894c2ce306fe48038e3e317e1a03971701446f3..4e35579a074a355167502df959ff1e16227c8d40 100644 |
--- a/chrome/browser/extensions/extension_function.h |
+++ b/chrome/browser/extensions/extension_function.h |
@@ -16,6 +16,7 @@ |
#include "base/process.h" |
#include "chrome/browser/extensions/extension_info_map.h" |
#include "chrome/common/extensions/extension.h" |
+#include "content/browser/renderer_host/render_view_host_observer.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/notification_observer.h" |
#include "content/public/browser/notification_registrar.h" |
@@ -222,6 +223,11 @@ class UIThreadExtensionFunction : public ExtensionFunction { |
void set_test_delegate(DelegateForTests* delegate) { |
delegate_ = delegate; |
} |
+ |
+ // Called when a message was received. |
+ // Should return true if it processed the message. |
+ virtual bool OnMessageReceivedFromRenderView(const IPC::Message& message); |
+ |
// Set the profile which contains the extension that has originated this |
// function call. |
void set_profile(Profile* profile) { profile_ = profile; } |
@@ -276,20 +282,30 @@ class UIThreadExtensionFunction : public ExtensionFunction { |
private: |
// Helper class to track the lifetime of ExtensionFunction's RenderViewHost |
- // pointer and NULL it out when it dies. We use this separate class (instead |
- // of implementing NotificationObserver on ExtensionFunction) because it is |
- // common for subclasses of ExtensionFunction to be NotificationObservers, and |
- // it would be an easy error to forget to call the base class's Observe() |
- // method. |
- class RenderViewHostTracker : public content::NotificationObserver { |
+ // pointer and NULL it out when it dies. It also allows us to filter IPC |
+ // messages comming from the RenderViewHost. We use this separate class |
+ // (instead of implementing NotificationObserver on ExtensionFunction) because |
+ // it is/ common for subclasses of ExtensionFunction to be |
+ // NotificationObservers, and it would be an easy error to forget to call the |
+ // base class's Observe() method. |
+ class RenderViewHostTracker : public content::NotificationObserver, |
+ public RenderViewHostObserver { |
public: |
- explicit RenderViewHostTracker(UIThreadExtensionFunction* function); |
+ RenderViewHostTracker(UIThreadExtensionFunction* function, |
+ RenderViewHost* render_view_host); |
private: |
virtual void Observe(int type, |
const content::NotificationSource& source, |
const content::NotificationDetails& details) OVERRIDE; |
+ |
+ virtual void RenderViewHostDestroyed( |
+ RenderViewHost* render_view_host) OVERRIDE; |
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
+ |
UIThreadExtensionFunction* function_; |
content::NotificationRegistrar registrar_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RenderViewHostTracker); |
}; |
virtual void Destruct() const OVERRIDE; |