extension_view_views.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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 "third_party/skia/include/core/SkBitmap.h" 12#include "ui/views/controls/native/native_view_host.h" 13#include "ui/views/controls/webview/unhandled_keyboard_event_handler.h" 14 15class Browser; 16 17namespace content { 18class RenderViewHost; 19} 20 21namespace extensions { 22class Extension; 23class ExtensionHost; 24} 25 26// This handles the display portion of an ExtensionHost. 27class ExtensionViewViews : public views::NativeViewHost { 28 public: 29 ExtensionViewViews(extensions::ExtensionHost* host, Browser* browser); 30 virtual ~ExtensionViewViews(); 31 32 // A class that represents the container that this view is in. 33 // (bottom shelf, side bar, etc.) 34 class Container { 35 public: 36 virtual ~Container() {} 37 virtual void OnExtensionSizeChanged(ExtensionViewViews* view) {} 38 virtual void OnViewWasResized() {} 39 }; 40 41 extensions::ExtensionHost* host() const { return host_; } 42 Browser* browser() const { return browser_; } 43 const extensions::Extension* extension() const; 44 content::RenderViewHost* render_view_host() const; 45 void DidStopLoading(); 46 void SetIsClipped(bool is_clipped); 47 48 // Notification from ExtensionHost. 49 void ResizeDueToAutoResize(const gfx::Size& new_size); 50 51 // Method for the ExtensionHost to notify us when the RenderViewHost has a 52 // connection. 53 void RenderViewCreated(); 54 55 // Sets the container for this view. 56 void SetContainer(Container* container) { container_ = container; } 57 58 // Handles unhandled keyboard messages coming back from the renderer process. 59 void HandleKeyboardEvent(const content::NativeWebKeyboardEvent& event); 60 61 // Overridden from views::NativeViewHost: 62 virtual gfx::NativeCursor GetCursor(const ui::MouseEvent& event) OVERRIDE; 63 virtual void SetVisible(bool is_visible) OVERRIDE; 64 virtual void ViewHierarchyChanged(bool is_add, 65 views::View* parent, 66 views::View* child) OVERRIDE; 67 68 private: 69 // Overridden from views::View. 70 virtual bool SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) OVERRIDE; 71 virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE; 72 virtual void PreferredSizeChanged() OVERRIDE; 73 virtual void OnFocus() OVERRIDE; 74 75 private: 76 friend class extensions::ExtensionHost; 77 78 // Initializes the RenderWidgetHostView for this object. 79 void CreateWidgetHostView(); 80 81 // We wait to show the ExtensionViewViews until several things have loaded. 82 void ShowIfCompletelyLoaded(); 83 84 // Restore object to initial state. Called on shutdown or after a renderer 85 // crash. 86 void CleanUp(); 87 88 // The running extension instance that we're displaying. 89 // Note that host_ owns view 90 extensions::ExtensionHost* host_; 91 92 // The browser window that this view is in. 93 Browser* browser_; 94 95 // True if we've been initialized. 96 bool initialized_; 97 98 // What we should set the preferred width to once the ExtensionViewViews has 99 // loaded. 100 gfx::Size pending_preferred_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