summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-28 22:45:58 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-28 22:45:58 +0000
commitf86ff45ef0bb701aeb41208858ffe8e640980144 (patch)
tree6a1943a620ff26938a5eed665a39c9925bfeae61 /chrome/browser
parent59c9d7d02cdd43be2428addf59d29c030a0f535a (diff)
downloadchromium_src-f86ff45ef0bb701aeb41208858ffe8e640980144.zip
chromium_src-f86ff45ef0bb701aeb41208858ffe8e640980144.tar.gz
chromium_src-f86ff45ef0bb701aeb41208858ffe8e640980144.tar.bz2
Create render view for extensions on Linux.
Now when an extension is loaded, you will see its entry in the task manager. However, on the shelf there is still only a placeholder label (I have to work on setting proper size for the render widget). TEST=none http://crbug.com/16759 Review URL: http://codereview.chromium.org/159527 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21908 0039d316-1c4b-4281-b951-d872f2087c98
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_