1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/ui/gtk/extensions/extension_view_gtk.h" 6 7 #include "chrome/browser/extensions/extension_host.h" 8 #include "chrome/browser/ui/gtk/extensions/extension_popup_gtk.h" 9 #include "content/public/browser/render_view_host.h" 10 #include "content/public/browser/render_widget_host_view.h" 11 #include "content/public/browser/web_contents.h" 12 #include "content/public/browser/web_contents_view.h" 13 #include "extensions/common/view_type.h" 14 15 ExtensionViewGtk::ExtensionViewGtk(extensions::ExtensionHost* extension_host, 16 Browser* browser) 17 : browser_(browser), 18 extension_host_(extension_host), 19 container_(NULL) { 20 } 21 22 void ExtensionViewGtk::Init() { 23 CreateWidgetHostView(); 24 } 25 26 gfx::NativeView ExtensionViewGtk::native_view() { 27 return extension_host_->host_contents()->GetView()->GetNativeView(); 28 } 29 30 content::RenderViewHost* ExtensionViewGtk::render_view_host() const { 31 return extension_host_->render_view_host(); 32 } 33 34 void ExtensionViewGtk::SetBackground(const SkBitmap& background) { 35 if (render_view_host()->IsRenderViewLive() && render_view_host()->GetView()) { 36 render_view_host()->GetView()->SetBackground(background); 37 } else { 38 pending_background_ = background; 39 } 40 } 41 42 void ExtensionViewGtk::ResizeDueToAutoResize(const gfx::Size& new_size) { 43 if (container_) 44 container_->OnExtensionSizeChanged(this, new_size); 45 } 46 47 void ExtensionViewGtk::CreateWidgetHostView() { 48 extension_host_->CreateRenderViewSoon(); 49 } 50 51 void ExtensionViewGtk::RenderViewCreated() { 52 if (!pending_background_.empty() && render_view_host()->GetView()) { 53 render_view_host()->GetView()->SetBackground(pending_background_); 54 pending_background_.reset(); 55 } 56 57 extensions::ViewType host_type = extension_host_->extension_host_type(); 58 if (host_type == extensions::VIEW_TYPE_EXTENSION_POPUP) { 59 gfx::Size min_size(ExtensionPopupGtk::kMinWidth, 60 ExtensionPopupGtk::kMinHeight); 61 gfx::Size max_size(ExtensionPopupGtk::kMaxWidth, 62 ExtensionPopupGtk::kMaxHeight); 63 render_view_host()->EnableAutoResize(min_size, max_size); 64 } 65 } 66