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

Side by Side Diff: content/shell/shell_web_contents_view_delegate_mac.mm

Issue 23316003: [content shell] move browser process stuff into browser/ subdir (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 4 months 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/shell/shell_web_contents_view_delegate.h"
6
7 #import <Cocoa/Cocoa.h>
8
9 #include "base/command_line.h"
10 #include "content/public/browser/render_process_host.h"
11 #include "content/public/browser/render_view_host.h"
12 #include "content/public/browser/render_widget_host_view.h"
13 #include "content/public/browser/web_contents.h"
14 #include "content/public/browser/web_contents_view.h"
15 #include "content/public/common/context_menu_params.h"
16 #include "content/shell/common/shell_switches.h"
17 #include "content/shell/shell.h"
18 #include "content/shell/shell_browser_context.h"
19 #include "content/shell/shell_browser_main_parts.h"
20 #include "content/shell/shell_content_browser_client.h"
21 #include "content/shell/shell_devtools_frontend.h"
22 #include "content/shell/shell_web_contents_view_delegate_creator.h"
23 #include "third_party/WebKit/public/web/WebContextMenuData.h"
24
25 using WebKit::WebContextMenuData;
26
27 enum {
28 ShellContextMenuItemCutTag = 0,
29 ShellContextMenuItemCopyTag,
30 ShellContextMenuItemPasteTag,
31 ShellContextMenuItemDeleteTag,
32 ShellContextMenuItemOpenLinkTag,
33 ShellContextMenuItemBackTag,
34 ShellContextMenuItemForwardTag,
35 ShellContextMenuItemReloadTag,
36 ShellContextMenuItemInspectTag
37 };
38
39 @interface ShellContextMenuDelegate : NSObject<NSMenuDelegate> {
40 @private
41 content::ShellWebContentsViewDelegate* delegate_;
42 }
43 @end
44
45 @implementation ShellContextMenuDelegate
46 - (id)initWithDelegate:(content::ShellWebContentsViewDelegate*) delegate {
47 if ((self = [super init])) {
48 delegate_ = delegate;
49 }
50 return self;
51 }
52
53 - (void)itemSelected:(id)sender {
54 NSInteger tag = [sender tag];
55 delegate_->ActionPerformed(tag);
56 }
57 @end
58
59 namespace {
60
61 NSMenuItem* MakeContextMenuItem(NSString* title,
62 NSInteger tag,
63 NSMenu* menu,
64 BOOL enabled,
65 ShellContextMenuDelegate* delegate) {
66 NSMenuItem* menu_item =
67 [[NSMenuItem alloc] initWithTitle:title
68 action:@selector(itemSelected:)
69 keyEquivalent:@""];
70 [menu_item setTarget:delegate];
71 [menu_item setTag:tag];
72 [menu_item setEnabled:enabled];
73 [menu addItem:menu_item];
74
75 return menu_item;
76 }
77
78 } // namespace
79
80 namespace content {
81
82 WebContentsViewDelegate* CreateShellWebContentsViewDelegate(
83 WebContents* web_contents) {
84 return new ShellWebContentsViewDelegate(web_contents);
85 }
86
87 ShellWebContentsViewDelegate::ShellWebContentsViewDelegate(
88 WebContents* web_contents)
89 : web_contents_(web_contents) {
90 }
91
92 ShellWebContentsViewDelegate::~ShellWebContentsViewDelegate() {
93 }
94
95 void ShellWebContentsViewDelegate::ShowContextMenu(
96 const ContextMenuParams& params) {
97 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
98 return;
99
100 params_ = params;
101 bool has_link = !params_.unfiltered_link_url.is_empty();
102 bool has_selection = ! params_.selection_text.empty();
103
104 NSMenu* menu = [[[NSMenu alloc] initWithTitle:@""] autorelease];
105 ShellContextMenuDelegate* delegate =
106 [[ShellContextMenuDelegate alloc] initWithDelegate:this];
107 [menu setDelegate:delegate];
108 [menu setAutoenablesItems:NO];
109
110 if (params.media_type == WebContextMenuData::MediaTypeNone &&
111 !has_link &&
112 !has_selection &&
113 !params_.is_editable) {
114 BOOL back_menu_enabled =
115 web_contents_->GetController().CanGoBack() ? YES : NO;
116 MakeContextMenuItem(@"Back",
117 ShellContextMenuItemBackTag,
118 menu,
119 back_menu_enabled,
120 delegate);
121
122 BOOL forward_menu_enabled =
123 web_contents_->GetController().CanGoForward() ? YES : NO;
124 MakeContextMenuItem(@"Forward",
125 ShellContextMenuItemForwardTag,
126 menu,
127 forward_menu_enabled,
128 delegate);
129
130 MakeContextMenuItem(@"Reload",
131 ShellContextMenuItemReloadTag,
132 menu,
133 YES,
134 delegate);
135
136 NSMenuItem* separator = [NSMenuItem separatorItem];
137 [menu addItem:separator];
138 }
139
140 if (has_link) {
141 MakeContextMenuItem(@"Open In New Window",
142 ShellContextMenuItemOpenLinkTag,
143 menu,
144 YES,
145 delegate);
146
147 NSMenuItem* separator = [NSMenuItem separatorItem];
148 [menu addItem:separator];
149 }
150
151 if (params_.is_editable) {
152 BOOL cut_menu_enabled =
153 (params_.edit_flags & WebContextMenuData::CanCut) ? YES : NO;
154 MakeContextMenuItem(@"Cut",
155 ShellContextMenuItemCutTag,
156 menu,
157 cut_menu_enabled,
158 delegate);
159
160 BOOL copy_menu_enabled =
161 (params_.edit_flags & WebContextMenuData::CanCopy) ? YES : NO;
162 MakeContextMenuItem(@"Copy",
163 ShellContextMenuItemCopyTag,
164 menu,
165 copy_menu_enabled,
166 delegate);
167
168 BOOL paste_menu_enabled =
169 (params_.edit_flags & WebContextMenuData::CanPaste) ? YES : NO;
170 MakeContextMenuItem(@"Paste",
171 ShellContextMenuItemPasteTag,
172 menu,
173 paste_menu_enabled,
174 delegate);
175
176 BOOL delete_menu_enabled =
177 (params_.edit_flags & WebContextMenuData::CanDelete) ? YES : NO;
178 MakeContextMenuItem(@"Delete",
179 ShellContextMenuItemDeleteTag,
180 menu,
181 delete_menu_enabled,
182 delegate);
183
184 NSMenuItem* separator = [NSMenuItem separatorItem];
185 [menu addItem:separator];
186 } else if (has_selection) {
187 MakeContextMenuItem(@"Copy",
188 ShellContextMenuItemCopyTag,
189 menu,
190 YES,
191 delegate);
192
193 NSMenuItem* separator = [NSMenuItem separatorItem];
194 [menu addItem:separator];
195 }
196
197 MakeContextMenuItem(@"Inspect",
198 ShellContextMenuItemInspectTag,
199 menu,
200 YES,
201 delegate);
202
203 NSView* parent_view = web_contents_->GetView()->GetContentNativeView();
204 NSEvent* currentEvent = [NSApp currentEvent];
205 NSWindow* window = [parent_view window];
206 NSPoint position = [window mouseLocationOutsideOfEventStream];
207 NSTimeInterval eventTime = [currentEvent timestamp];
208 NSEvent* clickEvent = [NSEvent mouseEventWithType:NSRightMouseDown
209 location:position
210 modifierFlags:NSRightMouseDownMask
211 timestamp:eventTime
212 windowNumber:[window windowNumber]
213 context:nil
214 eventNumber:0
215 clickCount:1
216 pressure:1.0];
217
218 [NSMenu popUpContextMenu:menu
219 withEvent:clickEvent
220 forView:parent_view];
221 }
222
223 void ShellWebContentsViewDelegate::ActionPerformed(int tag) {
224 switch (tag) {
225 case ShellContextMenuItemCutTag:
226 web_contents_->GetRenderViewHost()->Cut();
227 break;
228 case ShellContextMenuItemCopyTag:
229 web_contents_->GetRenderViewHost()->Copy();
230 break;
231 case ShellContextMenuItemPasteTag:
232 web_contents_->GetRenderViewHost()->Paste();
233 break;
234 case ShellContextMenuItemDeleteTag:
235 web_contents_->GetRenderViewHost()->Delete();
236 break;
237 case ShellContextMenuItemOpenLinkTag: {
238 ShellBrowserContext* browser_context =
239 ShellContentBrowserClient::Get()->browser_context();
240 Shell::CreateNewWindow(browser_context,
241 params_.link_url,
242 NULL,
243 MSG_ROUTING_NONE,
244 gfx::Size());
245 break;
246 }
247 case ShellContextMenuItemBackTag:
248 web_contents_->GetController().GoToOffset(-1);
249 web_contents_->GetView()->Focus();
250 break;
251 case ShellContextMenuItemForwardTag:
252 web_contents_->GetController().GoToOffset(1);
253 web_contents_->GetView()->Focus();
254 break;
255 case ShellContextMenuItemReloadTag: {
256 web_contents_->GetController().Reload(false);
257 web_contents_->GetView()->Focus();
258 break;
259 }
260 case ShellContextMenuItemInspectTag: {
261 ShellDevToolsFrontend::Show(web_contents_);
262 break;
263 }
264 }
265 }
266
267 WebDragDestDelegate* ShellWebContentsViewDelegate::GetDragDestDelegate() {
268 return NULL;
269 }
270
271 NSObject<RenderWidgetHostViewMacDelegate>*
272 ShellWebContentsViewDelegate::CreateRenderWidgetHostViewDelegate(
273 content::RenderWidgetHost* render_widget_host) {
274 return NULL;
275 }
276
277 } // namespace content
OLDNEW
« no previous file with comments | « content/shell/shell_web_contents_view_delegate_gtk.cc ('k') | content/shell/shell_web_contents_view_delegate_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698