OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 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_EXTENSION_INSTALLED_BUBBLE_CONTROLLER_H_ | |
6 #define CHROME_BROWSER_UI_COCOA_EXTENSION_INSTALLED_BUBBLE_CONTROLLER_H_ | |
7 #pragma once | |
8 | |
9 #import <Cocoa/Cocoa.h> | |
10 | |
11 #import "base/mac/cocoa_protocols.h" | |
12 #include "base/scoped_ptr.h" | |
13 #import "chrome/browser/ui/cocoa/browser_window_controller.h" | |
14 #include "third_party/skia/include/core/SkBitmap.h" | |
15 | |
16 class Browser; | |
17 class Extension; | |
18 class ExtensionLoadedNotificationObserver; | |
19 @class HoverCloseButton; | |
20 @class InfoBubbleView; | |
21 | |
22 namespace extension_installed_bubble { | |
23 | |
24 // Maximum height or width of extension's icon (corresponds to Windows & GTK). | |
25 const int kIconSize = 43; | |
26 | |
27 // Outer vertical margin for text, icon, and closing x. | |
28 const int kOuterVerticalMargin = 15; | |
29 | |
30 // Inner vertical margin for text messages. | |
31 const int kInnerVerticalMargin = 10; | |
32 | |
33 // We use a different kind of notification for each of these extension types. | |
34 typedef enum { | |
35 kBrowserAction, | |
36 kGeneric, | |
37 kOmniboxKeyword, | |
38 kPageAction | |
39 } ExtensionType; | |
40 | |
41 } | |
42 | |
43 // Controller for the extension installed bubble. This bubble pops up after | |
44 // an extension has been installed to inform the user that the install happened | |
45 // properly, and to let the user know how to manage this extension in the | |
46 // future. | |
47 @interface ExtensionInstalledBubbleController : | |
48 NSWindowController<NSWindowDelegate> { | |
49 @private | |
50 NSWindow* parentWindow_; // weak | |
51 const Extension* extension_; // weak | |
52 Browser* browser_; // weak | |
53 scoped_nsobject<NSImage> icon_; | |
54 | |
55 extension_installed_bubble::ExtensionType type_; | |
56 | |
57 // We need to remove the page action immediately when the browser window | |
58 // closes while this bubble is still open, so the bubble's closing animation | |
59 // doesn't overlap browser destruction. | |
60 BOOL pageActionRemoved_; | |
61 | |
62 // Lets us register for EXTENSION_LOADED notifications. The actual | |
63 // notifications are sent to the observer object, which proxies them | |
64 // back to the controller. | |
65 scoped_ptr<ExtensionLoadedNotificationObserver> extensionObserver_; | |
66 | |
67 // References below are weak, being obtained from the nib. | |
68 IBOutlet InfoBubbleView* infoBubbleView_; | |
69 IBOutlet HoverCloseButton* closeButton_; | |
70 IBOutlet NSImageView* iconImage_; | |
71 IBOutlet NSTextField* extensionInstalledMsg_; | |
72 // Only shown for page actions and omnibox keywords. | |
73 IBOutlet NSTextField* extraInfoMsg_; | |
74 IBOutlet NSTextField* extensionInstalledInfoMsg_; | |
75 } | |
76 | |
77 @property (nonatomic, readonly) const Extension* extension; | |
78 @property (nonatomic) BOOL pageActionRemoved; | |
79 | |
80 // Initialize the window, and then create observers to wait for the extension | |
81 // to complete loading, or the browser window to close. | |
82 - (id)initWithParentWindow:(NSWindow*)parentWindow | |
83 extension:(const Extension*)extension | |
84 browser:(Browser*)browser | |
85 icon:(SkBitmap)icon; | |
86 | |
87 // Action for close button. | |
88 - (IBAction)closeWindow:(id)sender; | |
89 | |
90 // Displays the extension installed bubble. This callback is triggered by | |
91 // the extensionObserver when the extension has completed loading. | |
92 - (void)showWindow:(id)sender; | |
93 | |
94 // Clears our weak pointer to the Extension. This callback is triggered by | |
95 // the extensionObserver when the extension is unloaded. | |
96 - (void)extensionUnloaded:(id)sender; | |
97 | |
98 @end | |
99 | |
100 @interface ExtensionInstalledBubbleController(ExposedForTesting) | |
101 | |
102 - (void)removePageActionPreviewIfNecessary; | |
103 - (NSWindow*)initializeWindow; | |
104 - (int)calculateWindowHeight; | |
105 - (void)setMessageFrames:(int)newWindowHeight; | |
106 - (NSRect)getExtensionInstalledMsgFrame; | |
107 - (NSRect)getExtraInfoMsgFrame; | |
108 - (NSRect)getExtensionInstalledInfoMsgFrame; | |
109 | |
110 @end // ExtensionInstalledBubbleController(ExposedForTesting) | |
111 | |
112 #endif // CHROME_BROWSER_UI_COCOA_EXTENSION_INSTALLED_BUBBLE_CONTROLLER_H_ | |
OLD | NEW |