Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(465)

Side by Side Diff: chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm

Issue 703443002: Move more extension action cocoa logic into the platform delegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dc_toolbar_abstract_extension_action
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "chrome/browser/ui/cocoa/extensions/browser_actions_controller.h" 5 #import "chrome/browser/ui/cocoa/extensions/browser_actions_controller.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <string> 8 #include <string>
9 9
10 #include "base/strings/sys_string_conversions.h" 10 #include "base/strings/sys_string_conversions.h"
11 #include "chrome/browser/chrome_notification_types.h"
12 #include "chrome/browser/extensions/extension_action.h" 11 #include "chrome/browser/extensions/extension_action.h"
13 #include "chrome/browser/extensions/extension_action_manager.h" 12 #include "chrome/browser/extensions/extension_action_manager.h"
14 #include "chrome/browser/extensions/extension_toolbar_model.h" 13 #include "chrome/browser/extensions/extension_toolbar_model.h"
15 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/ui/browser.h" 15 #include "chrome/browser/ui/browser.h"
17 #include "chrome/browser/ui/browser_window.h" 16 #include "chrome/browser/ui/browser_window.h"
18 #import "chrome/browser/ui/cocoa/extensions/browser_action_button.h" 17 #import "chrome/browser/ui/cocoa/extensions/browser_action_button.h"
19 #import "chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h" 18 #import "chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h"
20 #import "chrome/browser/ui/cocoa/extensions/extension_action_context_menu_contro ller.h"
21 #import "chrome/browser/ui/cocoa/extensions/extension_popup_controller.h" 19 #import "chrome/browser/ui/cocoa/extensions/extension_popup_controller.h"
22 #import "chrome/browser/ui/cocoa/image_button_cell.h" 20 #import "chrome/browser/ui/cocoa/image_button_cell.h"
23 #import "chrome/browser/ui/cocoa/menu_button.h" 21 #import "chrome/browser/ui/cocoa/menu_button.h"
24 #include "chrome/browser/ui/extensions/extension_action_view_controller.h" 22 #include "chrome/browser/ui/extensions/extension_action_view_controller.h"
25 #include "chrome/browser/ui/tabs/tab_strip_model.h" 23 #include "chrome/browser/ui/tabs/tab_strip_model.h"
26 #include "content/public/browser/notification_details.h"
27 #include "content/public/browser/notification_observer.h"
28 #include "content/public/browser/notification_registrar.h"
29 #include "content/public/browser/notification_source.h"
30 #include "grit/theme_resources.h" 24 #include "grit/theme_resources.h"
31 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSAnimation+Duration.h " 25 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSAnimation+Duration.h "
32 26
33 using extensions::Extension; 27 using extensions::Extension;
34 using extensions::ExtensionList; 28 using extensions::ExtensionList;
35 29
36 NSString* const kBrowserActionVisibilityChangedNotification = 30 NSString* const kBrowserActionVisibilityChangedNotification =
37 @"BrowserActionVisibilityChangedNotification"; 31 @"BrowserActionVisibilityChangedNotification";
38 32
39 namespace { 33 namespace {
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 // Handles when a menu item within the chevron overflow menu is selected. 157 // Handles when a menu item within the chevron overflow menu is selected.
164 - (void)chevronItemSelected:(id)menuItem; 158 - (void)chevronItemSelected:(id)menuItem;
165 159
166 // Updates the container's grippy cursor based on the number of hidden buttons. 160 // Updates the container's grippy cursor based on the number of hidden buttons.
167 - (void)updateGrippyCursors; 161 - (void)updateGrippyCursors;
168 @end 162 @end
169 163
170 // A helper class to proxy extension notifications to the view controller's 164 // A helper class to proxy extension notifications to the view controller's
171 // appropriate methods. 165 // appropriate methods.
172 class ExtensionServiceObserverBridge 166 class ExtensionServiceObserverBridge
173 : public content::NotificationObserver, 167 : public extensions::ExtensionToolbarModel::Observer {
174 public extensions::ExtensionToolbarModel::Observer {
175 public: 168 public:
176 ExtensionServiceObserverBridge(BrowserActionsController* owner, 169 ExtensionServiceObserverBridge(BrowserActionsController* owner,
177 Browser* browser) 170 Browser* browser)
178 : owner_(owner), browser_(browser) { 171 : owner_(owner), browser_(browser) {
179 registrar_.Add(this,
180 extensions::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE,
181 content::Source<Profile>(browser->profile()));
182 registrar_.Add(
183 this,
184 extensions::NOTIFICATION_EXTENSION_COMMAND_BROWSER_ACTION_MAC,
185 content::Source<Profile>(browser->profile()));
186 }
187
188 // Overridden from content::NotificationObserver.
189 void Observe(int type,
190 const content::NotificationSource& source,
191 const content::NotificationDetails& details) override {
192 switch (type) {
193 case extensions::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE: {
194 ExtensionPopupController* popup = [ExtensionPopupController popup];
195 if (popup && ![popup isClosing])
196 [popup close];
197
198 break;
199 }
200 case extensions::NOTIFICATION_EXTENSION_COMMAND_BROWSER_ACTION_MAC: {
201 std::pair<const std::string, gfx::NativeWindow>* payload =
202 content::Details<std::pair<const std::string, gfx::NativeWindow> >(
203 details).ptr();
204 std::string extension_id = payload->first;
205 gfx::NativeWindow window = payload->second;
206 if (window != browser_->window()->GetNativeWindow())
207 break;
208 [owner_ activateBrowserAction:extension_id];
209 break;
210 }
211 default:
212 NOTREACHED() << L"Unexpected notification";
213 }
214 } 172 }
215 173
216 // extensions::ExtensionToolbarModel::Observer implementation. 174 // extensions::ExtensionToolbarModel::Observer implementation.
217 void ToolbarExtensionAdded(const Extension* extension, int index) override { 175 void ToolbarExtensionAdded(const Extension* extension, int index) override {
218 [owner_ createActionButtonForExtension:extension withIndex:index]; 176 [owner_ createActionButtonForExtension:extension withIndex:index];
219 [owner_ resizeContainerAndAnimate:NO]; 177 [owner_ resizeContainerAndAnimate:NO];
220 } 178 }
221 179
222 void ToolbarExtensionRemoved(const Extension* extension) override { 180 void ToolbarExtensionRemoved(const Extension* extension) override {
223 [owner_ removeActionButtonForExtension:extension]; 181 [owner_ removeActionButtonForExtension:extension];
(...skipping 25 matching lines...) Expand all
249 207
250 Browser* GetBrowser() override { return browser_; } 208 Browser* GetBrowser() override { return browser_; }
251 209
252 private: 210 private:
253 // The object we need to inform when we get a notification. Weak. Owns us. 211 // The object we need to inform when we get a notification. Weak. Owns us.
254 BrowserActionsController* owner_; 212 BrowserActionsController* owner_;
255 213
256 // The browser we listen for events from. Weak. 214 // The browser we listen for events from. Weak.
257 Browser* browser_; 215 Browser* browser_;
258 216
259 // Used for registering to receive notifications and automatic clean up.
260 content::NotificationRegistrar registrar_;
261
262 DISALLOW_COPY_AND_ASSIGN(ExtensionServiceObserverBridge); 217 DISALLOW_COPY_AND_ASSIGN(ExtensionServiceObserverBridge);
263 }; 218 };
264 219
265 @implementation BrowserActionsController 220 @implementation BrowserActionsController
266 221
267 @synthesize containerView = containerView_; 222 @synthesize containerView = containerView_;
268 223
269 #pragma mark - 224 #pragma mark -
270 #pragma mark Public Methods 225 #pragma mark Public Methods
271 226
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 439
485 NSRect buttonFrame = NSMakeRect(0.0, kBrowserActionOriginYOffset, 440 NSRect buttonFrame = NSMakeRect(0.0, kBrowserActionOriginYOffset,
486 kBrowserActionWidth, kBrowserActionHeight); 441 kBrowserActionWidth, kBrowserActionHeight);
487 ExtensionAction* extensionAction = 442 ExtensionAction* extensionAction =
488 extensions::ExtensionActionManager::Get(browser_->profile())-> 443 extensions::ExtensionActionManager::Get(browser_->profile())->
489 GetExtensionAction(*extension); 444 GetExtensionAction(*extension);
490 DCHECK(extensionAction) 445 DCHECK(extensionAction)
491 << "Don't create a BrowserActionButton if there is no browser action."; 446 << "Don't create a BrowserActionButton if there is no browser action.";
492 scoped_ptr<ToolbarActionViewController> viewController( 447 scoped_ptr<ToolbarActionViewController> viewController(
493 new ExtensionActionViewController(extension, browser_, extensionAction)); 448 new ExtensionActionViewController(extension, browser_, extensionAction));
494 // TODO(devlin): Move ContextMenuController stuff to
495 // ExtensionActionViewController.
496 ExtensionActionContextMenuController* menuController =
497 [[ExtensionActionContextMenuController alloc]
498 initWithExtension:extension
499 browser:browser_
500 extensionAction:extensionAction];
501 BrowserActionButton* newButton = 449 BrowserActionButton* newButton =
502 [[[BrowserActionButton alloc] 450 [[[BrowserActionButton alloc]
503 initWithFrame:buttonFrame 451 initWithFrame:buttonFrame
504 viewController:viewController.Pass() 452 viewController:viewController.Pass()
505 controller:self 453 controller:self] autorelease];
506 menuController:menuController] autorelease];
507 [newButton setTarget:self]; 454 [newButton setTarget:self];
508 [newButton setAction:@selector(browserActionClicked:)]; 455 [newButton setAction:@selector(browserActionClicked:)];
509 NSString* buttonKey = base::SysUTF8ToNSString(extension->id()); 456 NSString* buttonKey = base::SysUTF8ToNSString(extension->id());
510 if (!buttonKey) 457 if (!buttonKey)
511 return; 458 return;
512 [buttons_ setObject:newButton forKey:buttonKey]; 459 [buttons_ setObject:newButton forKey:buttonKey];
513 460
514 [self positionActionButtonsAndAnimate:NO]; 461 [self positionActionButtonsAndAnimate:NO];
515 462
516 [[NSNotificationCenter defaultCenter] 463 [[NSNotificationCenter defaultCenter]
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 const extensions::ExtensionList& toolbar_items = 780 const extensions::ExtensionList& toolbar_items =
834 toolbarModel_->toolbar_items(); 781 toolbarModel_->toolbar_items();
835 if (index < toolbar_items.size()) { 782 if (index < toolbar_items.size()) {
836 const Extension* extension = toolbar_items[index].get(); 783 const Extension* extension = toolbar_items[index].get();
837 return [buttons_ objectForKey:base::SysUTF8ToNSString(extension->id())]; 784 return [buttons_ objectForKey:base::SysUTF8ToNSString(extension->id())];
838 } 785 }
839 return nil; 786 return nil;
840 } 787 }
841 788
842 @end 789 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698