Index: chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm |
=================================================================== |
--- chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm (revision 151684) |
+++ chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm (working copy) |
@@ -15,6 +15,7 @@ |
#include "chrome/browser/sessions/restore_tab_helper.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_tabstrip.h" |
+#include "chrome/browser/ui/browser_window.h" |
#import "chrome/browser/ui/cocoa/extensions/browser_action_button.h" |
#import "chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h" |
#import "chrome/browser/ui/cocoa/extensions/extension_popup_controller.h" |
@@ -175,9 +176,13 @@ |
public ExtensionToolbarModel::Observer { |
public: |
ExtensionServiceObserverBridge(BrowserActionsController* owner, |
- Profile* profile) : owner_(owner) { |
+ Browser* browser) |
+ : owner_(owner), browser_(browser) { |
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE, |
- content::Source<Profile>(profile)); |
+ content::Source<Profile>(browser->profile())); |
+ registrar_.Add(this, |
+ chrome::NOTIFICATION_EXTENSION_COMMAND_BROWSER_ACTION_MAC, |
+ content::Source<Profile>(browser->profile())); |
} |
// Overridden from content::NotificationObserver. |
@@ -192,6 +197,25 @@ |
break; |
} |
+ case chrome::NOTIFICATION_EXTENSION_COMMAND_BROWSER_ACTION_MAC: { |
+ std::pair<const std::string, gfx::NativeWindow>* payload = |
+ content::Details<std::pair<const std::string, gfx::NativeWindow> >( |
+ details).ptr(); |
+ std::string extension_id = payload->first; |
+ gfx::NativeWindow window = payload->second; |
+ if (window != browser_->window()->GetNativeWindow()) |
+ break; |
+ ExtensionService* service = browser_->profile()->GetExtensionService(); |
+ if (!service) |
+ break; |
+ const Extension* extension = service->GetExtensionById(extension_id, |
+ false); |
+ if (!extension) |
+ break; |
+ BrowserActionButton* button = [owner_ buttonForExtension:extension]; |
+ [owner_ browserActionClicked:button]; |
+ break; |
+ } |
default: |
NOTREACHED() << L"Unexpected notification"; |
} |
@@ -212,6 +236,9 @@ |
// The object we need to inform when we get a notification. Weak. Owns us. |
BrowserActionsController* owner_; |
+ // The browser we listen for events from. Weak. |
+ Browser* browser_; |
+ |
// Used for registering to receive notifications and automatic clean up. |
content::NotificationRegistrar registrar_; |
@@ -237,7 +264,7 @@ |
prefs::kBrowserActionContainerWidth)) |
[BrowserActionsController registerUserPrefs:profile_->GetPrefs()]; |
- observer_.reset(new ExtensionServiceObserverBridge(self, profile_)); |
+ observer_.reset(new ExtensionServiceObserverBridge(self, browser_)); |
ExtensionService* extensionService = profile_->GetExtensionService(); |
// |extensionService| can be NULL in Incognito. |
if (extensionService) { |