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.
5 #ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_VIEW_VIEWS_H_
6 #define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_VIEW_VIEWS_H_
8 #include "base/basictypes.h"
9 #include "base/compiler_specific.h"
10 #include "chrome/browser/extensions/extension_host.h"
11 #include "content/public/browser/native_web_keyboard_event.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"
22 // This handles the display portion of an ExtensionHost.
23 class ExtensionViewViews
: public views::NativeViewHost
{
25 // A class that represents the container that this view is in.
26 // (bottom shelf, side bar, etc.)
29 virtual ~Container() {}
31 virtual void OnExtensionSizeChanged(ExtensionViewViews
* view
) {}
34 ExtensionViewViews(extensions::ExtensionHost
* host
, Browser
* browser
);
35 virtual ~ExtensionViewViews();
37 // views::NativeViewHost:
38 virtual gfx::Size
GetMinimumSize() 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
;
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();
49 Browser
* browser() const { return browser_
; }
50 void set_minimum_size(const gfx::Size
& minimum_size
) {
51 minimum_size_
= minimum_size
;
53 void set_container(Container
* container
) { container_
= container
; }
55 void DidStopLoading();
56 void SetIsClipped(bool is_clipped
);
58 // Notification from ExtensionHost.
59 void ResizeDueToAutoResize(const gfx::Size
& new_size
);
61 // Method for the ExtensionHost to notify us when the RenderViewHost has a
63 void RenderViewCreated();
65 // Handles unhandled keyboard messages coming back from the renderer process.
66 void HandleKeyboardEvent(const content::NativeWebKeyboardEvent
& event
);
69 friend class extensions::ExtensionHost
;
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
;
77 // Initializes the RenderWidgetHostView for this object.
78 void CreateWidgetHostView();
80 // We wait to show the ExtensionViewViews until several things have loaded.
81 void ShowIfCompletelyLoaded();
83 // Restore object to initial state. Called on shutdown or after a renderer
87 // The running extension instance that we're displaying.
88 // Note that host_ owns view
89 extensions::ExtensionHost
* host_
;
91 // The browser window that this view is in.
94 // True if we've been initialized.
97 // What we should set the preferred width to once the ExtensionViewViews has
99 gfx::Size pending_preferred_size_
;
100 gfx::Size minimum_size_
;
102 // The container this view is in (not necessarily its direct superview).
103 // Note: the view does not own its container.
104 Container
* container_
;
106 // Whether this extension view is clipped.
109 // A handler to handle unhandled keyboard messages coming back from the
111 views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_
;
113 DISALLOW_COPY_AND_ASSIGN(ExtensionViewViews
);
116 #endif // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_VIEW_VIEWS_H_