summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-26 21:21:43 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-26 21:21:43 +0000
commit058254a8c1f684aecce93ed3d6ba6ca8864611b1 (patch)
treec84d8cf66868226dca13c1da0f46cf444b1dedc4
parentd4f6a0cf1d854737b63ae96b63800ada2d1c222d (diff)
downloadchromium_src-058254a8c1f684aecce93ed3d6ba6ca8864611b1.zip
chromium_src-058254a8c1f684aecce93ed3d6ba6ca8864611b1.tar.gz
chromium_src-058254a8c1f684aecce93ed3d6ba6ca8864611b1.tar.bz2
Fix crash in Linux extension shelf.
We need to delay creating render view until we're fully constructed. TEST=none BUG=none Review URL: http://codereview.chromium.org/173506 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24530 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/extension_host.cc5
-rw-r--r--chrome/browser/gtk/extension_view_gtk.cc7
-rw-r--r--chrome/browser/gtk/extension_view_gtk.h8
3 files changed, 16 insertions, 4 deletions
diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc
index 304a399..bc03f8f 100644
--- a/chrome/browser/extensions/extension_host.cc
+++ b/chrome/browser/extensions/extension_host.cc
@@ -63,7 +63,8 @@ void ExtensionHost::CreateView(Browser* browser) {
// hierarchy.
view_->SetParentOwned(false);
#elif defined(OS_LINUX)
- view_.reset(new ExtensionViewGtk(this));
+ view_.reset(new ExtensionViewGtk(this, browser));
+ view_->Init();
#else
// TODO(port)
NOTREACHED();
@@ -298,7 +299,7 @@ void ExtensionHost::HandleMouseLeave() {
}
Browser* ExtensionHost::GetBrowser() {
-#if defined(OS_WIN)
+#if defined(OS_WIN) || defined(OS_LINUX)
if (view_.get())
return view_->browser();
#endif
diff --git a/chrome/browser/gtk/extension_view_gtk.cc b/chrome/browser/gtk/extension_view_gtk.cc
index 60d1a3f..e2712cf 100644
--- a/chrome/browser/gtk/extension_view_gtk.cc
+++ b/chrome/browser/gtk/extension_view_gtk.cc
@@ -8,10 +8,15 @@
#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/browser/renderer_host/render_widget_host_view_gtk.h"
-ExtensionViewGtk::ExtensionViewGtk(ExtensionHost* extension_host)
+ExtensionViewGtk::ExtensionViewGtk(ExtensionHost* extension_host,
+ Browser* browser)
: is_toolstrip_(true),
+ browser_(browser),
extension_host_(extension_host),
render_widget_host_view_(NULL) {
+}
+
+void ExtensionViewGtk::Init() {
CreateWidgetHostView();
}
diff --git a/chrome/browser/gtk/extension_view_gtk.h b/chrome/browser/gtk/extension_view_gtk.h
index 1220873..495039d 100644
--- a/chrome/browser/gtk/extension_view_gtk.h
+++ b/chrome/browser/gtk/extension_view_gtk.h
@@ -8,15 +8,19 @@
#include "base/basictypes.h"
#include "base/gfx/native_widget_types.h"
+class Browser;
class ExtensionHost;
class RenderViewHost;
class RenderWidgetHostViewGtk;
class ExtensionViewGtk {
public:
- explicit ExtensionViewGtk(ExtensionHost* extension_host);
+ ExtensionViewGtk(ExtensionHost* extension_host, Browser* browser);
+
+ void Init();
gfx::NativeView native_view();
+ Browser* browser() const { return browser_; }
bool is_toolstrip() const { return is_toolstrip_; }
void set_is_toolstrip(bool is_toolstrip) { is_toolstrip_ = is_toolstrip; }
@@ -33,6 +37,8 @@ class ExtensionViewGtk {
// True if the contents are being displayed inside the extension shelf.
bool is_toolstrip_;
+ Browser* browser_;
+
ExtensionHost* extension_host_;
RenderWidgetHostViewGtk* render_widget_host_view_;