| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_UI_COCOA_EXTENSIONS_EXTENSION_POPUP_CONTROLLER_H_ |
| #define CHROME_BROWSER_UI_COCOA_EXTENSIONS_EXTENSION_POPUP_CONTROLLER_H_ |
| |
| #import <Cocoa/Cocoa.h> |
| |
| #include <memory> |
| #include <string> |
| |
| #import "chrome/browser/ui/cocoa/base_bubble_controller.h" |
| #import "chrome/browser/ui/cocoa/info_bubble_view.h" |
| #include "content/public/browser/notification_registrar.h" |
| |
| class Browser; |
| class ExtensionPopupNotificationBridge; |
| class ExtensionPopupContainer; |
| |
| namespace extensions { |
| class ExtensionViewHost; |
| } |
| |
| // This controller manages a single browser action popup that can appear once a |
| // user has clicked on a browser action button. It instantiates the extension |
| // popup view showing the content and resizes the window to accomodate any size |
| // changes as they occur. |
| // |
| // There can only be one browser action popup open at a time, so a static |
| // variable holds a reference to the current popup. |
| @interface ExtensionPopupController : BaseBubbleController { |
| @private |
| // The native extension view retrieved from the extension host. Weak. |
| NSView* extensionView_; |
| |
| // The current frame of the extension view. Cached to prevent setting the |
| // frame if the size hasn't changed. |
| NSRect extensionFrame_; |
| |
| // The extension host object. |
| std::unique_ptr<extensions::ExtensionViewHost> host_; |
| |
| content::NotificationRegistrar registrar_; |
| std::unique_ptr<ExtensionPopupNotificationBridge> notificationBridge_; |
| std::unique_ptr<ExtensionPopupContainer> container_; |
| |
| std::string extensionId_; |
| |
| // Whether the popup has a devtools window attached to it. |
| BOOL beingInspected_; |
| |
| // There's an extra windowDidResignKey: notification right after a |
| // ConstrainedWindow closes that should be ignored. |
| BOOL ignoreWindowDidResignKey_; |
| |
| // The size once the ExtensionView has loaded. |
| NSSize pendingSize_; |
| } |
| |
| // Starts the process of showing the given popup URL. Instantiates an |
| // ExtensionPopupController with the parent window retrieved from |browser|, a |
| // host for the popup created by the extension process manager specific to the |
| // browser profile and the remaining arguments |anchoredAt| and |arrowLocation|. |
| // |anchoredAt| is expected to be in the window's coordinates at the bottom |
| // center of the browser action button. |
| // The actual display of the popup is delayed until the page contents finish |
| // loading in order to minimize UI flashing and resizing. |
| // Passing YES to |devMode| will launch the webkit inspector for the popup, |
| // and prevent the popup from closing when focus is lost. It will be closed |
| // after the inspector is closed, or another popup is opened. |
| + (ExtensionPopupController*) |
| host:(std::unique_ptr<extensions::ExtensionViewHost>)host |
| inBrowser:(Browser*)browser |
| anchoredAt:(NSPoint)anchoredAt |
| arrowLocation:(info_bubble::BubbleArrowLocation)arrowLocation |
| devMode:(BOOL)devMode; |
| |
| // Returns the controller used to display the popup being shown. If no popup is |
| // currently open, then nil is returned. Static because only one extension popup |
| // window can be open at a time. |
| + (ExtensionPopupController*)popup; |
| |
| // Whether the popup is in the process of closing (via Core Animation). |
| - (BOOL)isClosing; |
| |
| // Show the dev tools attached to the popup. |
| - (void)showDevTools; |
| |
| // Set whether the popup is being inspected or not. If it is being inspected |
| // it will not be hidden when it loses focus. |
| - (void)setBeingInspected:(BOOL)beingInspected; |
| |
| @property(readonly, nonatomic) std::string extensionId; |
| |
| @end |
| |
| @interface ExtensionPopupController(TestingAPI) |
| // Sets whether or not animations are enabled. |
| + (void)setAnimationsEnabledForTesting:(BOOL)enabled; |
| // Returns a weak pointer to the current popup's view. |
| - (NSView*)view; |
| // Returns the minimum allowed size for an extension popup. |
| + (NSSize)minPopupSize; |
| // Returns the maximum allowed size for an extension popup. |
| + (NSSize)maxPopupSize; |
| @end |
| |
| #endif // CHROME_BROWSER_UI_COCOA_EXTENSIONS_EXTENSION_POPUP_CONTROLLER_H_ |