diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-28 22:45:58 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-28 22:45:58 +0000 |
commit | f86ff45ef0bb701aeb41208858ffe8e640980144 (patch) | |
tree | 6a1943a620ff26938a5eed665a39c9925bfeae61 /chrome/browser | |
parent | 59c9d7d02cdd43be2428addf59d29c030a0f535a (diff) | |
download | chromium_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.cc | 2 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_host.h | 8 | ||||
-rw-r--r-- | chrome/browser/gtk/extension_shelf_gtk.cc | 1 | ||||
-rw-r--r-- | chrome/browser/gtk/extension_view_gtk.cc | 31 | ||||
-rw-r--r-- | chrome/browser/gtk/extension_view_gtk.h | 33 |
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_ |