| 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 |