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 #ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_VIEW_VIEWS_H_ 6 #define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_VIEW_VIEWS_H_ 7 8 #include "base/basictypes.h" 9 #include "base/compiler_specific.h" 10 #include "content/public/browser/native_web_keyboard_event.h" 11 #include "extensions/browser/extension_host.h" 12 #include "third_party/skia/include/core/SkBitmap.h" 13 #include "ui/views/controls/native/native_view_host.h" 14 #include "ui/views/controls/webview/unhandled_keyboard_event_handler.h" 15 16 class Browser; 17 18 namespace content { 19 class RenderViewHost; 20 } 21 22 // This handles the display portion of an ExtensionHost. 23 class ExtensionViewViews : public views::NativeViewHost { 24 public: 25 // A class that represents the container that this view is in. 26 // (bottom shelf, side bar, etc.) 27 class Container { 28 public: 29 virtual ~Container() {} 30 31 virtual void OnExtensionSizeChanged(ExtensionViewViews* view) {} 32 }; 33 34 ExtensionViewViews(extensions::ExtensionHost* host, Browser* browser); 35 virtual ~ExtensionViewViews(); 36 37 // views::NativeViewHost: 38 virtual gfx::Size GetMinimumSize() const OVERRIDE; 39 virtual void SetVisible(bool is_visible) OVERRIDE; 40 virtual gfx::NativeCursor GetCursor(const ui::MouseEvent& event) OVERRIDE; 41 virtual void ViewHierarchyChanged( 42 const ViewHierarchyChangedDetails& details) OVERRIDE; 43 44 extensions::ExtensionHost* host() const { return host_; } 45 const extensions::Extension* extension() const { return host_->extension(); } 46 content::RenderViewHost* render_view_host() const { 47 return host_->render_view_host(); 48 } 49 Browser* browser() const { return browser_; } 50 void set_minimum_size(const gfx::Size& minimum_size) { 51 minimum_size_ = minimum_size; 52 } 53 void set_container(Container* container) { container_ = container; } 54 55 void DidStopLoading(); 56 void SetIsClipped(bool is_clipped); 57 58 // Notification from ExtensionHost. 59 void ResizeDueToAutoResize(const gfx::Size& new_size); 60 61 // Method for the ExtensionHost to notify us when the RenderViewHost has a 62 // connection. 63 void RenderViewCreated(); 64 65 // Handles unhandled keyboard messages coming back from the renderer process. 66 void HandleKeyboardEvent(const content::NativeWebKeyboardEvent& event); 67 68 private: 69 friend class extensions::ExtensionHost; 70 71 // views::NativeViewHost: 72 virtual bool SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) OVERRIDE; 73 virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE; 74 virtual void PreferredSizeChanged() OVERRIDE; 75 virtual void OnFocus() OVERRIDE; 76 77 // Initializes the RenderWidgetHostView for this object. 78 void CreateWidgetHostView(); 79 80 // We wait to show the ExtensionViewViews until several things have loaded. 81 void ShowIfCompletelyLoaded(); 82 83 // Restore object to initial state. Called on shutdown or after a renderer 84 // crash. 85 void CleanUp(); 86 87 // The running extension instance that we're displaying. 88 // Note that host_ owns view 89 extensions::ExtensionHost* host_; 90 91 // The browser window that this view is in. 92 Browser* browser_; 93 94 // True if we've been initialized. 95 bool initialized_; 96 97 // What we should set the preferred width to once the ExtensionViewViews has 98 // loaded. 99 gfx::Size pending_preferred_size_; 100 gfx::Size minimum_size_; 101 102 // The container this view is in (not necessarily its direct superview). 103 // Note: the view does not own its container. 104 Container* container_; 105 106 // Whether this extension view is clipped. 107 bool is_clipped_; 108 109 // A handler to handle unhandled keyboard messages coming back from the 110 // renderer process. 111 views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_; 112 113 DISALLOW_COPY_AND_ASSIGN(ExtensionViewViews); 114 }; 115 116 #endif // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_VIEW_VIEWS_H_ 117