summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-11 20:22:32 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-11 20:22:32 +0000
commiteda48c7a4e569aaf2f2327e0226762868346f531 (patch)
treeeb1e837d6ff4a77add2df32c8286601c530a51b3 /chrome
parent34717bc08d6b56f276e49675acbbb5eb2fc48fbf (diff)
downloadchromium_src-eda48c7a4e569aaf2f2327e0226762868346f531.zip
chromium_src-eda48c7a4e569aaf2f2327e0226762868346f531.tar.gz
chromium_src-eda48c7a4e569aaf2f2327e0226762868346f531.tar.bz2
Get rid of RenderWidgetHostDestroyed method in the various classes. RenderWidgetHost fires a notification and also calls RenderWidgetHostView. The notification was being observed by TabContents, which calls TabContentsView which tells the RenderWidgetHostView and RenderViewHostDelegateHelper. So I took out the extra indirection which was redundant, and just made RenderViewHostDelegateHelper observe the notification itself.
BUG=87702 Review URL: http://codereview.chromium.org/7324057 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92045 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_mac.h1
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_views.h1
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_win.cc9
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_win.h1
-rw-r--r--chrome/browser/tab_contents/render_view_host_delegate_helper.cc32
-rw-r--r--chrome/browser/tab_contents/render_view_host_delegate_helper.h15
6 files changed, 33 insertions, 26 deletions
diff --git a/chrome/browser/renderer_host/render_widget_host_view_mac.h b/chrome/browser/renderer_host/render_widget_host_view_mac.h
index 1d032e7..93862f8 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_mac.h
+++ b/chrome/browser/renderer_host/render_widget_host_view_mac.h
@@ -202,7 +202,6 @@ class RenderWidgetHostViewMac : public RenderWidgetHostView {
const std::vector<gfx::Rect>& copy_rects) OVERRIDE;
virtual void RenderViewGone(base::TerminationStatus status,
int error_code) OVERRIDE;
- virtual void WillDestroyRenderWidget(RenderWidgetHost* rwh) OVERRIDE {};
virtual void Destroy() OVERRIDE;
virtual void SetTooltipText(const std::wstring& tooltip_text) OVERRIDE;
virtual void SelectionChanged(const std::string& text,
diff --git a/chrome/browser/renderer_host/render_widget_host_view_views.h b/chrome/browser/renderer_host/render_widget_host_view_views.h
index f1a44ea..86ea396 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_views.h
+++ b/chrome/browser/renderer_host/render_widget_host_view_views.h
@@ -76,7 +76,6 @@ class RenderWidgetHostViewViews : public RenderWidgetHostView,
virtual void RenderViewGone(base::TerminationStatus status,
int error_code) OVERRIDE;
virtual void Destroy() OVERRIDE;
- virtual void WillDestroyRenderWidget(RenderWidgetHost* rwh) OVERRIDE {}
virtual void SetTooltipText(const std::wstring& tooltip_text) OVERRIDE;
virtual void SelectionChanged(const std::string& text,
const ui::Range& range) OVERRIDE;
diff --git a/chrome/browser/renderer_host/render_widget_host_view_win.cc b/chrome/browser/renderer_host/render_widget_host_view_win.cc
index 7934837..f2c5e33 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_win.cc
+++ b/chrome/browser/renderer_host/render_widget_host_view_win.cc
@@ -691,11 +691,6 @@ void RenderWidgetHostViewWin::WillWmDestroy() {
CleanupCompositorWindow();
}
-void RenderWidgetHostViewWin::WillDestroyRenderWidget(RenderWidgetHost* rwh) {
- if (rwh == render_widget_host_)
- render_widget_host_ = NULL;
-}
-
void RenderWidgetHostViewWin::Destroy() {
// We've been told to destroy.
// By clearing close_on_deactivate_, we prevent further deactivations
@@ -703,6 +698,7 @@ void RenderWidgetHostViewWin::Destroy() {
// triggering further destructions. The deletion of this is handled by
// OnFinalMessage();
close_on_deactivate_ = false;
+ render_widget_host_ = NULL;
being_destroyed_ = true;
CleanupCompositorWindow();
DestroyWindow();
@@ -1688,8 +1684,7 @@ LRESULT RenderWidgetHostViewWin::OnParentNotify(UINT message, WPARAM wparam,
void RenderWidgetHostViewWin::OnFinalMessage(HWND window) {
// When the render widget host is being destroyed, it ends up calling
- // WillDestroyRenderWidget (through the RENDER_WIDGET_HOST_DESTROYED
- // notification) which NULLs render_widget_host_.
+ // Destroy() which NULLs render_widget_host_.
// Note: the following bug http://crbug.com/24248 seems to report that
// OnFinalMessage is called with a deleted |render_widget_host_|. It is not
// clear how this could happen, hence the NULLing of render_widget_host_
diff --git a/chrome/browser/renderer_host/render_widget_host_view_win.h b/chrome/browser/renderer_host/render_widget_host_view_win.h
index a079c55..d557f97 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_win.h
+++ b/chrome/browser/renderer_host/render_widget_host_view_win.h
@@ -159,7 +159,6 @@ class RenderWidgetHostViewWin
int error_code) OVERRIDE;
// called by TabContents before DestroyWindow
virtual void WillWmDestroy() OVERRIDE;
- virtual void WillDestroyRenderWidget(RenderWidgetHost* rwh) OVERRIDE;
virtual void Destroy() OVERRIDE;
virtual void SetTooltipText(const std::wstring& tooltip_text) OVERRIDE;
virtual BackingStore* AllocBackingStore(const gfx::Size& size) OVERRIDE;
diff --git a/chrome/browser/tab_contents/render_view_host_delegate_helper.cc b/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
index 2b61535..3f23de0 100644
--- a/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
+++ b/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
@@ -32,11 +32,30 @@
#include "content/browser/tab_contents/tab_contents.h"
#include "content/browser/tab_contents/tab_contents_view.h"
#include "content/browser/webui/web_ui.h"
+#include "content/common/notification_service.h"
-RenderViewHostDelegateViewHelper::RenderViewHostDelegateViewHelper() {}
+RenderViewHostDelegateViewHelper::RenderViewHostDelegateViewHelper() {
+ registrar_.Add(this, content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED,
+ NotificationService::AllSources());
+}
RenderViewHostDelegateViewHelper::~RenderViewHostDelegateViewHelper() {}
+void RenderViewHostDelegateViewHelper::Observe(
+ int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ DCHECK_EQ(type, content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED);
+ RenderWidgetHost* host = Source<RenderWidgetHost>(source).ptr();
+ for (PendingWidgetViews::iterator i = pending_widget_views_.begin();
+ i != pending_widget_views_.end(); ++i) {
+ if (host->view() == i->second) {
+ pending_widget_views_.erase(i);
+ break;
+ }
+ }
+}
+
BackgroundContents*
RenderViewHostDelegateViewHelper::MaybeCreateBackgroundContents(
int route_id,
@@ -202,17 +221,6 @@ RenderWidgetHostView* RenderViewHostDelegateViewHelper::GetCreatedWidget(
return widget_host_view;
}
-void RenderViewHostDelegateViewHelper::RenderWidgetHostDestroyed(
- RenderWidgetHost* host) {
- for (PendingWidgetViews::iterator i = pending_widget_views_.begin();
- i != pending_widget_views_.end(); ++i) {
- if (host->view() == i->second) {
- pending_widget_views_.erase(i);
- return;
- }
- }
-}
-
// static
WebPreferences RenderViewHostDelegateHelper::GetWebkitPrefs(
Profile* profile, bool is_web_ui) {
diff --git a/chrome/browser/tab_contents/render_view_host_delegate_helper.h b/chrome/browser/tab_contents/render_view_host_delegate_helper.h
index e0525fb..a2b2bf6 100644
--- a/chrome/browser/tab_contents/render_view_host_delegate_helper.h
+++ b/chrome/browser/tab_contents/render_view_host_delegate_helper.h
@@ -10,6 +10,8 @@
#include "base/basictypes.h"
#include "content/browser/webui/web_ui.h"
+#include "content/common/notification_observer.h"
+#include "content/common/notification_registrar.h"
#include "content/common/window_container_type.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPopupType.h"
#include "ui/gfx/rect.h"
@@ -28,7 +30,7 @@ class TabContents;
// Provides helper methods that provide common implementations of some
// RenderViewHostDelegate::View methods.
-class RenderViewHostDelegateViewHelper {
+class RenderViewHostDelegateViewHelper : public NotificationObserver {
public:
RenderViewHostDelegateViewHelper();
virtual ~RenderViewHostDelegateViewHelper();
@@ -66,10 +68,12 @@ class RenderViewHostDelegateViewHelper {
// map.
virtual TabContents* GetCreatedWindow(int route_id);
- // Removes |host| from the internal map of pending RenderWidgets.
- void RenderWidgetHostDestroyed(RenderWidgetHost* host);
-
private:
+ // NotificationObserver implementation
+ virtual void Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) OVERRIDE;
+
BackgroundContents* MaybeCreateBackgroundContents(
int route_id,
Profile* profile,
@@ -87,6 +91,9 @@ class RenderViewHostDelegateViewHelper {
typedef std::map<int, RenderWidgetHostView*> PendingWidgetViews;
PendingWidgetViews pending_widget_views_;
+ // Registers and unregisters us for notifications.
+ NotificationRegistrar registrar_;
+
DISALLOW_COPY_AND_ASSIGN(RenderViewHostDelegateViewHelper);
};