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