Index: chrome/browser/extensions/extension_function.cc |
diff --git a/chrome/browser/extensions/extension_function.cc b/chrome/browser/extensions/extension_function.cc |
index c4a502f90ae549a5c3e4cdf4ef0d258a3599ccd0..fb943bfa1c0d0c40f6d85df1142eb7501b4a331d 100644 |
--- a/chrome/browser/extensions/extension_function.cc |
+++ b/chrome/browser/extensions/extension_function.cc |
@@ -26,8 +26,10 @@ void ExtensionFunctionDeleteTraits::Destruct(const ExtensionFunction* x) { |
} |
UIThreadExtensionFunction::RenderViewHostTracker::RenderViewHostTracker( |
- UIThreadExtensionFunction* function) |
- : function_(function) { |
+ UIThreadExtensionFunction* function, |
+ RenderViewHost* render_view_host) |
+ : RenderViewHostObserver(render_view_host), |
+ function_(function) { |
registrar_.Add(this, |
content::NOTIFICATION_RENDER_VIEW_HOST_DELETED, |
content::Source<RenderViewHost>(function->render_view_host())); |
@@ -43,6 +45,18 @@ void UIThreadExtensionFunction::RenderViewHostTracker::Observe( |
function_->SetRenderViewHost(NULL); |
} |
+void UIThreadExtensionFunction::RenderViewHostTracker::RenderViewHostDestroyed( |
+ RenderViewHost* render_view_host) { |
+ // Overidding the default behavior of RenderViewHostObserver which is to |
+ // delete this. In our case, we'll be deleted when the |
+ // UIThreadExtensionFunction that contains us goes away. |
+} |
+ |
+bool UIThreadExtensionFunction::RenderViewHostTracker::OnMessageReceived( |
+ const IPC::Message& message) { |
+ return function_->OnMessageReceivedFromRenderView(message); |
+} |
+ |
ExtensionFunction::ExtensionFunction() |
: request_id_(-1), |
profile_id_(NULL), |
@@ -139,6 +153,11 @@ UIThreadExtensionFunction::AsUIThreadExtensionFunction() { |
return this; |
} |
+bool UIThreadExtensionFunction::OnMessageReceivedFromRenderView( |
+ const IPC::Message& message) { |
+ return false; |
+} |
+ |
void UIThreadExtensionFunction::Destruct() const { |
BrowserThread::DeleteOnUIThread::Destruct(this); |
} |
@@ -146,7 +165,8 @@ void UIThreadExtensionFunction::Destruct() const { |
void UIThreadExtensionFunction::SetRenderViewHost( |
RenderViewHost* render_view_host) { |
render_view_host_ = render_view_host; |
- tracker_.reset(render_view_host ? new RenderViewHostTracker(this) : NULL); |
+ tracker_.reset(render_view_host ? |
+ new RenderViewHostTracker(this, render_view_host) : NULL); |
} |
Browser* UIThreadExtensionFunction::GetCurrentBrowser() { |