| Index: chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm
|
| diff --git a/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm b/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm
|
| index a17f3d8cde36d18dbab3e47d97209012f9400896..cdc9840e3e99f1cbd433b45ce140e7d7500ae48b 100644
|
| --- a/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm
|
| +++ b/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm
|
| @@ -140,6 +140,10 @@ const CGFloat kBrowserActionBubbleYOffset = 3.0;
|
| // Handles when the given BrowserActionButton object is clicked.
|
| - (void)browserActionClicked:(BrowserActionButton*)button;
|
|
|
| +// Triggers opening the popup window for an extension without a user action.
|
| +// Used by an extension API that opens an extension's popup.
|
| +- (void)openPopup:(const Extension*)extension;
|
| +
|
| // Returns whether the given extension should be displayed. Only displays
|
| // incognito-enabled extensions in incognito mode. Otherwise returns YES.
|
| - (BOOL)shouldDisplayBrowserAction:(const Extension*)extension;
|
| @@ -238,6 +242,14 @@ class ExtensionServiceObserverBridge : public content::NotificationObserver,
|
| [owner_ resizeContainerAndAnimate:NO];
|
| }
|
|
|
| + virtual void BrowserActionShowPopup(const Extension* extension) OVERRIDE {
|
| + content::WebContents* active_tab =
|
| + browser_->tab_strip_model()->GetActiveWebContents();
|
| + if (!active_tab)
|
| + return;
|
| + [owner_ openPopup:extension];
|
| + }
|
| +
|
| private:
|
| // The object we need to inform when we get a notification. Weak. Owns us.
|
| BrowserActionsController* owner_;
|
| @@ -739,6 +751,26 @@ class ExtensionServiceObserverBridge : public content::NotificationObserver,
|
| }
|
| }
|
|
|
| +- (void)openPopup:(const Extension*)extension {
|
| + const GURL popupUrl = toolbarModel_->GetPopupUrl(extension, browser_);
|
| + if (!popupUrl.is_empty()) {
|
| + NSPoint arrowPoint = [self popupPointForBrowserAction:extension];
|
| + if (NSEqualPoints(arrowPoint, NSZeroPoint)) {
|
| + // The button is hidden if arrowPoint is zero.
|
| +
|
| + // TODO(justinlin): This is not right.. position below hotdog menu.
|
| + arrowPoint = NSMakePoint(NSWidth([containerView_ frame]),
|
| + kBrowserActionOriginYOffset);
|
| + }
|
| +
|
| + [ExtensionPopupController showURL:popupUrl
|
| + inBrowser:browser_
|
| + anchoredAt:arrowPoint
|
| + arrowLocation:info_bubble::kTopRight
|
| + devMode:NO];
|
| + }
|
| +}
|
| +
|
| - (void)browserActionClicked:(BrowserActionButton*)button {
|
| const Extension* extension = [button extension];
|
| GURL popupUrl;
|
|
|