summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-22 03:46:14 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-22 03:46:14 +0000
commitbc0ee2456baa98624a7254071008bb7aa66307cd (patch)
tree2216724ed9d3af0ace5e80c2a069c01ac30601f8
parentc7ec171bf29801a3aede36ec404ae38d2a26e25d (diff)
downloadchromium_src-bc0ee2456baa98624a7254071008bb7aa66307cd.zip
chromium_src-bc0ee2456baa98624a7254071008bb7aa66307cd.tar.gz
chromium_src-bc0ee2456baa98624a7254071008bb7aa66307cd.tar.bz2
Replace the RenderViewHostObserver in UIThreadExtensionFunction with a WebContentsObserver. This is part of the effort to remove RenderViewHostObserver.
BUG=306569 R=yoz@chromium.org Review URL: https://codereview.chromium.org/32633004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@230037 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/extension_function.cc46
-rw-r--r--chrome/browser/extensions/extension_function.h19
2 files changed, 31 insertions, 34 deletions
diff --git a/chrome/browser/extensions/extension_function.cc b/chrome/browser/extensions/extension_function.cc
index 766a106..5b5ea2a 100644
--- a/chrome/browser/extensions/extension_function.cc
+++ b/chrome/browser/extensions/extension_function.cc
@@ -21,9 +21,12 @@
#include "content/public/browser/notification_types.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_observer.h"
using content::BrowserThread;
using content::RenderViewHost;
+using content::WebContents;
using extensions::ExtensionAPI;
using extensions::Feature;
@@ -32,25 +35,36 @@ void ExtensionFunctionDeleteTraits::Destruct(const ExtensionFunction* x) {
x->Destruct();
}
-UIThreadExtensionFunction::RenderViewHostTracker::RenderViewHostTracker(
- UIThreadExtensionFunction* function)
- : content::RenderViewHostObserver(function->render_view_host()),
- function_(function) {
-}
+// Helper class to track the lifetime of ExtensionFunction's RenderViewHost
+// pointer and NULL it out when it dies. It also allows us to filter IPC
+// messages coming from the RenderViewHost.
+class UIThreadExtensionFunction::RenderViewHostTracker
+ : public content::WebContentsObserver {
+ public:
+ explicit RenderViewHostTracker(UIThreadExtensionFunction* function)
+ : content::WebContentsObserver(
+ WebContents::FromRenderViewHost(function->render_view_host())),
+ function_(function) {
+ }
-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.
+ private:
+ // content::WebContentsObserver:
+ virtual void RenderViewDeleted(
+ content::RenderViewHost* render_view_host) OVERRIDE {
+ if (render_view_host != function_->render_view_host())
+ return;
- function_->SetRenderViewHost(NULL);
-}
+ function_->SetRenderViewHost(NULL);
+ }
-bool UIThreadExtensionFunction::RenderViewHostTracker::OnMessageReceived(
- const IPC::Message& message) {
- return function_->OnMessageReceivedFromRenderView(message);
-}
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
+ return function_->OnMessageReceivedFromRenderView(message);
+ }
+
+ UIThreadExtensionFunction* function_;
+
+ DISALLOW_COPY_AND_ASSIGN(RenderViewHostTracker);
+};
ExtensionFunction::ExtensionFunction()
: request_id_(-1),
diff --git a/chrome/browser/extensions/extension_function.h b/chrome/browser/extensions/extension_function.h
index 8ffee2e..d26ae1e 100644
--- a/chrome/browser/extensions/extension_function.h
+++ b/chrome/browser/extensions/extension_function.h
@@ -19,7 +19,6 @@
#include "chrome/browser/extensions/extension_info_map.h"
#include "chrome/common/extensions/extension.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/render_view_host_observer.h"
#include "content/public/common/console_message_level.h"
#include "ipc/ipc_message.h"
@@ -368,23 +367,7 @@ class UIThreadExtensionFunction : public ExtensionFunction {
Profile* profile_;
private:
- // Helper class to track the lifetime of ExtensionFunction's RenderViewHost
- // pointer and NULL it out when it dies. It also allows us to filter IPC
- // messages coming from the RenderViewHost.
- class RenderViewHostTracker : public content::RenderViewHostObserver {
- public:
- explicit RenderViewHostTracker(UIThreadExtensionFunction* function);
-
- private:
- // content::RenderViewHostObserver:
- virtual void RenderViewHostDestroyed(
- content::RenderViewHost* render_view_host) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
-
- UIThreadExtensionFunction* function_;
-
- DISALLOW_COPY_AND_ASSIGN(RenderViewHostTracker);
- };
+ class RenderViewHostTracker;
virtual void Destruct() const OVERRIDE;