summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/extensions/extension_host.cc2
-rw-r--r--chrome/browser/extensions/extension_host.h8
-rw-r--r--chrome/browser/gtk/extension_shelf_gtk.cc1
-rw-r--r--chrome/browser/gtk/extension_view_gtk.cc31
-rw-r--r--chrome/browser/gtk/extension_view_gtk.h33
5 files changed, 73 insertions, 2 deletions
diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc
index 276a432..78ec493 100644
--- a/chrome/browser/extensions/extension_host.cc
+++ b/chrome/browser/extensions/extension_host.cc
@@ -110,7 +110,7 @@ void ExtensionHost::CreateView(Browser* browser) {
// hierarchy.
view_->SetParentOwned(false);
#elif defined(OS_LINUX)
- // FIXME(phajdan.jr): Add extension view for GTK.
+ view_.reset(new ExtensionViewGtk(this));
#else
// TODO(port)
NOTREACHED();
diff --git a/chrome/browser/extensions/extension_host.h b/chrome/browser/extensions/extension_host.h
index 66290e3..8961dfe 100644
--- a/chrome/browser/extensions/extension_host.h
+++ b/chrome/browser/extensions/extension_host.h
@@ -13,6 +13,8 @@
#include "chrome/browser/tab_contents/render_view_host_delegate_helper.h"
#if defined(TOOLKIT_VIEWS)
#include "chrome/browser/views/extensions/extension_view.h"
+#elif defined(OS_LINUX)
+#include "chrome/browser/gtk/extension_view_gtk.h"
#endif
class Browser;
@@ -42,6 +44,8 @@ class ExtensionHost : public RenderViewHostDelegate,
#if defined(TOOLKIT_VIEWS)
void set_view(ExtensionView* view) { view_.reset(view); }
ExtensionView* view() const { return view_.get(); }
+#elif defined(OS_LINUX)
+ ExtensionViewGtk* view() const { return view_.get(); }
#endif
// Create an ExtensionView and tie it to this host and |browser|.
@@ -127,9 +131,11 @@ class ExtensionHost : public RenderViewHostDelegate,
// The profile that this host is tied to.
Profile* profile_;
-#if defined(TOOLKIT_VIEWS)
// Optional view that shows the rendered content in the UI.
+#if defined(TOOLKIT_VIEWS)
scoped_ptr<ExtensionView> view_;
+#elif defined(OS_LINUX)
+ scoped_ptr<ExtensionViewGtk> view_;
#endif
// The host for our HTML content.
diff --git a/chrome/browser/gtk/extension_shelf_gtk.cc b/chrome/browser/gtk/extension_shelf_gtk.cc
index 9befd7d..5f3a4b9 100644
--- a/chrome/browser/gtk/extension_shelf_gtk.cc
+++ b/chrome/browser/gtk/extension_shelf_gtk.cc
@@ -24,6 +24,7 @@ class ExtensionShelfGtk::Toolstrip {
explicit Toolstrip(ExtensionHost* host)
: host_(host),
extension_name_(host_->extension()->name()) {
+ DCHECK(host_->view());
Init();
}
diff --git a/chrome/browser/gtk/extension_view_gtk.cc b/chrome/browser/gtk/extension_view_gtk.cc
new file mode 100644
index 0000000..fc358cd
--- /dev/null
+++ b/chrome/browser/gtk/extension_view_gtk.cc
@@ -0,0 +1,31 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/gtk/extension_view_gtk.h"
+
+#include "chrome/browser/extensions/extension_host.h"
+#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)
+ : extension_host_(extension_host),
+ render_widget_host_view_(NULL) {
+ CreateWidgetHostView();
+}
+
+gfx::NativeView ExtensionViewGtk::native_view() {
+ return render_widget_host_view_->native_view();
+}
+
+RenderViewHost* ExtensionViewGtk::render_view_host() const {
+ return extension_host_->render_view_host();
+}
+
+void ExtensionViewGtk::CreateWidgetHostView() {
+ DCHECK(!render_widget_host_view_);
+ render_widget_host_view_ = new RenderWidgetHostViewGtk(render_view_host());
+ render_widget_host_view_->InitAsChild();
+
+ extension_host_->CreateRenderView(render_widget_host_view_);
+}
diff --git a/chrome/browser/gtk/extension_view_gtk.h b/chrome/browser/gtk/extension_view_gtk.h
new file mode 100644
index 0000000..61e58fd4f
--- /dev/null
+++ b/chrome/browser/gtk/extension_view_gtk.h
@@ -0,0 +1,33 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_GTK_EXTENSION_VIEW_GTK_H_
+#define CHROME_BROWSER_GTK_EXTENSION_VIEW_GTK_H_
+
+#include "base/basictypes.h"
+#include "base/gfx/native_widget_types.h"
+
+class ExtensionHost;
+class RenderViewHost;
+class RenderWidgetHostViewGtk;
+
+class ExtensionViewGtk {
+ public:
+ explicit ExtensionViewGtk(ExtensionHost* extension_host);
+
+ gfx::NativeView native_view();
+
+ private:
+ RenderViewHost* render_view_host() const;
+
+ void CreateWidgetHostView();
+
+ ExtensionHost* extension_host_;
+
+ RenderWidgetHostViewGtk* render_widget_host_view_;
+
+ DISALLOW_COPY_AND_ASSIGN(ExtensionViewGtk);
+};
+
+#endif // CHROME_BROWSER_GTK_EXTENSION_VIEW_GTK_H_