OLD | NEW |
---|---|
(Empty) | |
1 #import "chrome/browser/ui/cocoa/renderer_context_menu/share_menu_controller.h" | |
2 | |
3 #include "base/strings/sys_string_conversions.h" | |
4 #include "base/strings/utf_string_conversions.h" | |
5 #include "chrome/app/chrome_command_ids.h" | |
6 #import "chrome/browser/app_controller_mac.h" | |
Avi (use Gerrit)
2015/05/05 18:47:51
one space after #import, not 2
| |
7 #include "chrome/browser/ui/browser.h" | |
8 #include "chrome/browser/ui/browser_commands.h" | |
9 #include "chrome/browser/ui/browser_finder.h" | |
10 #include "chrome/browser/ui/browser_list.h" | |
11 #include "chrome/browser/ui/browser_list_observer.h" | |
12 #include "chrome/browser/ui/cocoa/last_active_browser_cocoa.h" | |
13 #include "chrome/browser/ui/cocoa/last_active_browser_cocoa.h" | |
14 #include "chrome/browser/ui/tabs/tab_strip_model.h" | |
15 #include "chrome/grit/generated_resources.h" | |
16 #include "ui/base/l10n/l10n_util.h" | |
17 #include "ui/base/l10n/l10n_util_mac.h" | |
18 #include "net/base/escape.h" | |
19 | |
20 @interface ShareMenuController() <NSSharingServiceDelegate> | |
shrike
2015/05/05 18:20:23
Should (NSArray*)items; (no extra space)
| |
21 - (NSMutableArray*)shareMenuItemsFor:(NSArray*) items; | |
shrike
2015/05/05 18:20:23
No extra space after (void).
| |
22 - (void) initShareMenuItem; | |
shrike
2015/05/05 18:20:23
No extra space after (void), or in (Browser*)
| |
23 - (void) buildShareItemsFor:(Browser* )browser; | |
shrike
2015/05/05 18:20:23
Similar extra space problems.
| |
24 - (NSString *)currentPageUrlFor:(Browser* )browser; | |
25 - (NSMenuItem*)createItemWithTitle:(NSString*)title action:(SEL)sel; | |
26 @end | |
27 | |
28 namespace ShareMenuControllerInternal { | |
29 | |
30 class Observer : public chrome::BrowserListObserver { | |
31 public: | |
32 Observer(ShareMenuController* controller) : controller_(controller) { | |
33 BrowserList::AddObserver(this); | |
34 } | |
35 | |
36 ~Observer() override { BrowserList::RemoveObserver(this); } | |
37 | |
38 // chrome::BrowserListObserver: | |
39 void OnBrowserAdded(Browser* browser) override {} | |
Avi (use Gerrit)
2015/05/05 18:47:51
Why are you overriding OnBrowserAdded/Removed if y
| |
40 void OnBrowserRemoved(Browser* browser) override {} | |
shrike
2015/05/05 18:20:23
Too many spaces after //
| |
41 // Allow the browser to add Share Menu once. | |
42 void OnBrowserSetLastActive(Browser* browser) override { | |
43 if (browser && ![controller_ menuItemsLoaded]) { | |
shrike
2015/05/05 18:20:23
Next line indented too far.
| |
44 [controller_ initShareMenuItem]; | |
45 } | |
46 [controller_ buildShareItemsFor:browser]; | |
47 } | |
48 | |
49 private: | |
50 ShareMenuController* controller_; // Weak; owns this. | |
51 }; | |
52 | |
shrike
2015/05/05 18:20:23
Two spaces after }, one after //
| |
53 } // namespace ShareMenuControllerInternal | |
54 | |
shrike
2015/05/05 18:20:24
Is there someplace else in the code base where the
sarka
2015/05/15 03:35:44
Yes, I have seen it in profile_menu_controller.
| |
55 //////////////////////////////////////////////////////////////////////////////// | |
56 | |
57 @implementation ShareMenuController | |
58 | |
59 - (id)initWithMainMenu:(NSMenu*)menu { | |
60 if (self = [super init]) { | |
61 mainMenu_ = menu; | |
shrike
2015/05/05 18:20:23
There needs to be a runtime check somewhere to mak
sarka
2015/05/15 03:35:43
Done that in app_controller_mac to make sure it is
| |
62 shareItems_ = [[NSMutableArray alloc] init]; | |
Avi (use Gerrit)
2015/05/05 18:47:51
You leak shareItems_. Use a scoped_nsobject.
| |
63 menuItemsLoaded_ = NO; | |
64 observer_.reset(new ShareMenuControllerInternal::Observer(self)); | |
65 } | |
66 return self; | |
67 } | |
68 | |
shrike
2015/05/05 18:20:23
No space after (BOOL)
| |
69 - (BOOL) menuItemsLoaded { | |
70 return menuItemsLoaded_; | |
71 } | |
72 | |
73 #pragma mark - Private Methods | |
Avi (use Gerrit)
2015/05/05 18:47:50
Don't #pragma mark.
| |
74 // Retrieve the list of possible sharing options and create menu item for each. | |
shrike
2015/05/05 18:20:23
No space after (NSArray*)
| |
75 - (NSMutableArray*)shareMenuItemsFor:(NSArray*) items { | |
76 NSMutableArray* menuItems = [NSMutableArray array]; | |
shrike
2015/05/05 18:20:23
Should be NSArray* sharingServices
| |
77 NSArray *sharingServices = [NSSharingService sharingServicesForItems:items]; | |
78 for (NSSharingService* currentService in sharingServices) { | |
79 NSString* titleText = nil; | |
shrike
2015/05/05 18:20:23
I don't think it's kosher to look for a service wi
| |
80 if ([currentService.title isEqualToString:@"Mail"]) { | |
shrike
2015/05/05 18:20:23
Lines should be indented 2 more spaces, not 4.
| |
81 titleText = l10n_util::GetNSString(IDS_EMAIL_PAGE_LOCATION_MAC); | |
82 } else { | |
shrike
2015/05/05 18:20:24
I would think you'd want to take currentService.me
| |
83 titleText = currentService.title; | |
84 } | |
shrike
2015/05/05 18:20:23
Colons should be aligned.
| |
85 NSMenuItem* item = [self createItemWithTitle:titleText | |
86 action:@selector(systemShareService:)]; | |
87 item.image = currentService.image; | |
88 item.representedObject = currentService; | |
89 [item setTarget:self]; | |
90 currentService.delegate = self; | |
91 [menuItems addObject:item]; | |
92 } | |
93 return menuItems; | |
94 } | |
95 | |
96 - (void) initShareMenuItem { | |
shrike
2015/05/05 18:20:23
1 space after //
| |
97 // Create a submenu for displaying various system wide sharing options. | |
98 shareSubMenu_ = [[NSMenu alloc] initWithTitle:@"ShareSubMenu"]; | |
Avi (use Gerrit)
2015/05/05 18:47:50
It's not clear what the ownership story is here, b
| |
99 fileMeuItem_ = [mainMenu_ itemWithTag:IDC_FILE_MENU]; | |
100 NSString* shareMenuName = | |
shrike
2015/05/05 18:20:23
Next line should be indented just 4 spaces.
| |
101 l10n_util::GetNSStringWithFixup(IDS_SHARE_MENU_MAC); | |
102 shareMenuItem_ = [self createItemWithTitle:shareMenuName action:nil]; | |
103 [shareMenuItem_ setTag:IDC_SHARE_MENU]; | |
104 } | |
105 | |
106 - (void) buildShareItemsFor:(Browser *)browser { | |
Avi (use Gerrit)
2015/05/05 18:47:50
No space after )
| |
107 if (!shareSubMenu_) | |
shrike
2015/05/05 18:20:23
Indented too far.
| |
108 return; | |
109 NSMutableArray* items = [NSMutableArray array]; | |
110 [items addObject:[self currentPageUrlFor:browser]]; | |
111 [shareItems_ removeAllObjects]; | |
112 [shareItems_ addObject:[self currentPageUrlFor:browser]]; | |
113 [shareSubMenu_ setAutoenablesItems:NO]; | |
shrike
2015/05/05 18:20:24
Why is it called twice?
| |
114 // Since this method is called twice, we don't want to add duplicate items. | |
115 if ([shareSubMenu_ numberOfItems] > 0) { | |
116 [shareSubMenu_ removeAllItems]; | |
117 } | |
Avi (use Gerrit)
2015/05/05 18:47:50
Why are you casting to NSArray below? Don't cast;
| |
118 NSArray* menuItems = (NSArray*)[self shareMenuItemsFor:items]; | |
shrike
2015/05/05 18:20:24
Should be NSMenuItem* item
| |
119 for (NSMenuItem *item in menuItems) { | |
120 [shareSubMenu_ addItem:item]; | |
121 BOOL enabled = chrome::CanEmailPageLocation(browser) ? | |
shrike
2015/05/05 18:20:23
Space before and after colon.
| |
122 [self validateMenuItem:item]:NO; | |
123 [item setEnabled:enabled]; | |
124 } | |
125 // Make sure we don't insert ShareMenuItem twice. | |
126 if (![[fileMeuItem_ submenu] itemWithTag:IDC_SHARE_MENU]) { | |
shrike
2015/05/05 18:20:24
Where does the # 12 come from? In general I think
| |
127 [[fileMeuItem_ submenu] insertItem:shareMenuItem_ atIndex:12]; | |
128 } | |
129 [[fileMeuItem_ submenu] setSubmenu:shareSubMenu_ forItem:shareMenuItem_]; | |
130 menuItemsLoaded_ = YES; | |
131 } | |
132 | |
133 - (NSString *)currentPageUrlFor:(Browser* )browser { | |
Avi (use Gerrit)
2015/05/05 18:47:50
No spaces before the *, no space after the *.
| |
134 TabStripModel* tabStrip = browser->tab_strip_model(); | |
135 content::WebContents* wc = tabStrip->GetActiveWebContents(); | |
136 std::string pageUrl = net::EscapeQueryParamValue(wc->GetURL().spec(), false); | |
Avi (use Gerrit)
2015/05/05 18:47:50
DO NOT CALL GetURL on WebContents.
In web_content
| |
137 return base::SysUTF8ToNSString(pageUrl); | |
138 } | |
139 | |
140 - (NSMenuItem*)createItemWithTitle:(NSString*)title action:(SEL)sel { | |
Avi (use Gerrit)
2015/05/05 18:47:51
Do not call this "createItemWithTitle". That makes
| |
141 base::scoped_nsobject<NSMenuItem> item( | |
142 [[NSMenuItem alloc] initWithTitle:title action:sel keyEquivalent:@""]); | |
143 [item setTarget:self]; | |
shrike
2015/05/05 18:20:23
I don't think saying item.release() is quite corre
Avi (use Gerrit)
2015/05/05 18:47:51
Yeah. Don't use scoped_nsobject here. Above, do [[
| |
144 return [item.release() autorelease]; | |
145 } | |
146 | |
147 #pragma mark - validate NSMenuItems | |
148 - (BOOL)validateMenuItem:(NSMenuItem *)menuItem { | |
shrike
2015/05/05 18:20:23
Why not just
return [menuItem action] == @sele
| |
149 BOOL ret = NO; | |
150 SEL action = [menuItem action]; | |
151 if (action == @selector(systemShareService:)) { | |
152 ret = YES; | |
153 } | |
154 return ret; | |
155 } | |
156 | |
157 #pragma mark - Handle Actions for individual MenuItems | |
158 | |
shrike
2015/05/05 18:20:23
Why is this defined as an IBAction (it's not hooke
| |
159 - (IBAction)systemShareService:(id)sender { | |
160 NSMenuItem* currentMenuItem = (NSMenuItem*)sender; | |
161 [currentMenuItem.representedObject performWithItems:shareItems_]; | |
162 } | |
163 | |
164 | |
165 @end | |
OLD | NEW |