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_COCOA_EXTENSIONS_EXTENSION_VIEW_MAC_H_ 6 #define CHROME_BROWSER_UI_COCOA_EXTENSIONS_EXTENSION_VIEW_MAC_H_ 7 8 #include "base/basictypes.h" 9 #include "third_party/skia/include/core/SkBitmap.h" 10 #include "ui/gfx/native_widget_types.h" 11 #include "ui/gfx/size.h" 12 13 class Browser; 14 class SkBitmap; 15 16 namespace content { 17 class RenderViewHost; 18 } 19 20 namespace extensions { 21 class ExtensionHost; 22 } 23 24 // This class represents extension views. An extension view internally contains 25 // a bridge to an extension process, which draws to the extension view's 26 // native view object through IPC. 27 class ExtensionViewMac { 28 public: 29 class Container { 30 public: 31 virtual ~Container() {} 32 virtual void OnExtensionSizeChanged(ExtensionViewMac* view, 33 const gfx::Size& new_size) {} 34 virtual void OnExtensionViewDidShow(ExtensionViewMac* view) {}; 35 }; 36 37 ExtensionViewMac(extensions::ExtensionHost* extension_host, Browser* browser); 38 ~ExtensionViewMac(); 39 40 // Starts the extension process and creates the native view. You must call 41 // this method before calling any of this class's other methods. 42 void Init(); 43 44 // Returns the extension's native view. 45 gfx::NativeView native_view(); 46 47 // Returns the browser the extension belongs to. 48 Browser* browser() const { return browser_; } 49 50 // Method for the ExtensionHost to notify us that the extension page is 51 // loaded. 52 void DidStopLoading(); 53 54 // Sets the container for this view. 55 void set_container(Container* container) { container_ = container; } 56 57 // Method for the ExtensionHost to notify us about the correct size for 58 // extension contents. 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 // Informs the view that its containing window's frame changed. 66 void WindowFrameChanged(); 67 68 // The minimum/maximum dimensions of the popup. 69 // The minimum is just a little larger than the size of the button itself. 70 // The maximum is an arbitrary number that should be smaller than most 71 // screens. 72 static const CGFloat kMinWidth; 73 static const CGFloat kMinHeight; 74 static const CGFloat kMaxWidth; 75 static const CGFloat kMaxHeight; 76 77 private: 78 content::RenderViewHost* render_view_host() const; 79 80 void CreateWidgetHostView(); 81 82 // We wait to show the ExtensionView until several things have loaded. 83 void ShowIfCompletelyLoaded(); 84 85 Browser* browser_; // weak 86 87 extensions::ExtensionHost* extension_host_; // weak 88 89 // What we should set the preferred width to once the ExtensionView has 90 // loaded. 91 gfx::Size pending_preferred_size_; 92 93 Container* container_; 94 95 DISALLOW_COPY_AND_ASSIGN(ExtensionViewMac); 96 }; 97 98 #endif // CHROME_BROWSER_UI_COCOA_EXTENSIONS_EXTENSION_VIEW_MAC_H_ 99