• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_INSTALLED_BUBBLE_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_COCOA_EXTENSIONS_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/memory/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_EXTENSIONS_EXTENSION_INSTALLED_BUBBLE_CONTROLLER_H_
113