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

Side by Side Diff: content/shell/shell_web_contents_view_delegate_win.cc

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
« no previous file with comments | « content/shell/shell_web_contents_view_delegate_mac.mm ('k') | content/shell/shell_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "base/command_line.h"
8 #include "content/public/browser/render_process_host.h"
9 #include "content/public/browser/render_view_host.h"
10 #include "content/public/browser/render_widget_host_view.h"
11 #include "content/public/browser/web_contents.h"
12 #include "content/public/browser/web_contents_view.h"
13 #include "content/public/common/context_menu_params.h"
14 #include "content/shell/common/shell_switches.h"
15 #include "content/shell/shell.h"
16 #include "content/shell/shell_browser_context.h"
17 #include "content/shell/shell_browser_main_parts.h"
18 #include "content/shell/shell_content_browser_client.h"
19 #include "content/shell/shell_devtools_frontend.h"
20 #include "content/shell/shell_web_contents_view_delegate_creator.h"
21 #include "third_party/WebKit/public/web/WebContextMenuData.h"
22
23 using WebKit::WebContextMenuData;
24
25 namespace {
26
27 enum {
28 ShellContextMenuItemCutId = 10001,
29 ShellContextMenuItemCopyId,
30 ShellContextMenuItemPasteId,
31 ShellContextMenuItemDeleteId,
32 ShellContextMenuItemOpenLinkId,
33 ShellContextMenuItemBackId,
34 ShellContextMenuItemForwardId,
35 ShellContextMenuItemReloadId,
36 ShellContextMenuItemInspectId
37 };
38
39 void MakeContextMenuItem(HMENU menu,
40 int menu_index,
41 LPTSTR text,
42 UINT id,
43 bool enabled) {
44 MENUITEMINFO mii = {0};
45 mii.cbSize = sizeof(mii);
46 mii.fMask = MIIM_FTYPE | MIIM_ID | MIIM_DATA | MIIM_STRING | MIIM_STATE;
47 mii.fState = enabled ? MFS_ENABLED : (MF_DISABLED | MFS_GRAYED);
48 mii.fType = MFT_STRING;
49 mii.wID = id;
50 mii.dwTypeData = text;
51
52 InsertMenuItem(menu, menu_index, TRUE, &mii);
53 }
54
55 } // namespace
56
57 namespace content {
58
59 WebContentsViewDelegate* CreateShellWebContentsViewDelegate(
60 WebContents* web_contents) {
61 return new ShellWebContentsViewDelegate(web_contents);
62 }
63
64 ShellWebContentsViewDelegate::ShellWebContentsViewDelegate(
65 WebContents* web_contents)
66 : web_contents_(web_contents) {
67 }
68
69 ShellWebContentsViewDelegate::~ShellWebContentsViewDelegate() {
70 }
71
72 void ShellWebContentsViewDelegate::ShowContextMenu(
73 const ContextMenuParams& params) {
74 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
75 return;
76
77 params_ = params;
78 bool has_link = !params_.unfiltered_link_url.is_empty();
79 bool has_selection = !params_.selection_text.empty();
80
81 HMENU menu = CreateMenu();
82 HMENU sub_menu = CreatePopupMenu();
83 AppendMenu(menu, MF_STRING | MF_POPUP, (UINT)sub_menu, L"");
84
85 int index = 0;
86 if (params_.media_type == WebContextMenuData::MediaTypeNone &&
87 !has_link &&
88 !has_selection &&
89 !params_.is_editable) {
90 MakeContextMenuItem(sub_menu,
91 index++,
92 L"Back",
93 ShellContextMenuItemBackId,
94 web_contents_->GetController().CanGoBack());
95
96 MakeContextMenuItem(sub_menu,
97 index++,
98 L"Forward",
99 ShellContextMenuItemForwardId,
100 web_contents_->GetController().CanGoForward());
101
102 MakeContextMenuItem(sub_menu,
103 index++,
104 L"Reload",
105 ShellContextMenuItemReloadId,
106 true);
107
108 AppendMenu(sub_menu, MF_SEPARATOR, 0, NULL);
109 index++;
110 }
111
112 if (has_link) {
113 MakeContextMenuItem(sub_menu,
114 index++,
115 L"Open in New Window",
116 ShellContextMenuItemOpenLinkId,
117 true);
118 AppendMenu(sub_menu, MF_SEPARATOR, 0, NULL);
119 index++;
120 }
121
122 if (params_.is_editable) {
123 bool cut_enabled = ((params_.edit_flags & WebContextMenuData::CanCut) != 0);
124 MakeContextMenuItem(sub_menu,
125 index++,
126 L"Cut",
127 ShellContextMenuItemCutId,
128 cut_enabled);
129
130 bool copy_enabled =
131 ((params_.edit_flags & WebContextMenuData::CanCopy) != 0);
132 MakeContextMenuItem(sub_menu,
133 index++,
134 L"Copy",
135 ShellContextMenuItemCopyId,
136 copy_enabled);
137
138 bool paste_enabled =
139 ((params_.edit_flags & WebContextMenuData::CanPaste) != 0);
140 MakeContextMenuItem(sub_menu,
141 index++,
142 L"Paste",
143 ShellContextMenuItemPasteId,
144 paste_enabled);
145 bool delete_enabled =
146 ((params_.edit_flags & WebContextMenuData::CanDelete) != 0);
147 MakeContextMenuItem(sub_menu,
148 index++,
149 L"Delete",
150 ShellContextMenuItemDeleteId,
151 delete_enabled);
152
153 AppendMenu(sub_menu, MF_SEPARATOR, 0, NULL);
154 index++;
155 } else if (has_selection) {
156 MakeContextMenuItem(sub_menu,
157 index++,
158 L"Copy",
159 ShellContextMenuItemCopyId,
160 true);
161
162 AppendMenu(sub_menu, MF_SEPARATOR, 0, NULL);
163 index++;
164 }
165
166 MakeContextMenuItem(sub_menu,
167 index++,
168 L"Inspect...",
169 ShellContextMenuItemInspectId,
170 true);
171 #if defined(USE_AURA)
172 NOTIMPLEMENTED();
173 #else
174 gfx::Point screen_point(params.x, params.y);
175 POINT point = screen_point.ToPOINT();
176 ClientToScreen(web_contents_->GetView()->GetNativeView(), &point);
177
178 int selection =
179 TrackPopupMenu(sub_menu,
180 TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD,
181 point.x, point.y,
182 0,
183 web_contents_->GetView()->GetContentNativeView(),
184 NULL);
185
186 MenuItemSelected(selection);
187 #endif
188 DestroyMenu(menu);
189 }
190
191 void ShellWebContentsViewDelegate::MenuItemSelected(int selection) {
192 switch (selection) {
193 case ShellContextMenuItemCutId:
194 web_contents_->GetRenderViewHost()->Cut();
195 break;
196 case ShellContextMenuItemCopyId:
197 web_contents_->GetRenderViewHost()->Copy();
198 break;
199 case ShellContextMenuItemPasteId:
200 web_contents_->GetRenderViewHost()->Paste();
201 break;
202 case ShellContextMenuItemDeleteId:
203 web_contents_->GetRenderViewHost()->Delete();
204 break;
205 case ShellContextMenuItemOpenLinkId: {
206 ShellBrowserContext* browser_context =
207 ShellContentBrowserClient::Get()->browser_context();
208 Shell::CreateNewWindow(browser_context,
209 params_.link_url,
210 NULL,
211 MSG_ROUTING_NONE,
212 gfx::Size());
213 break;
214 }
215 case ShellContextMenuItemBackId:
216 web_contents_->GetController().GoToOffset(-1);
217 web_contents_->GetView()->Focus();
218 break;
219 case ShellContextMenuItemForwardId:
220 web_contents_->GetController().GoToOffset(1);
221 web_contents_->GetView()->Focus();
222 break;
223 case ShellContextMenuItemReloadId:
224 web_contents_->GetController().Reload(false);
225 web_contents_->GetView()->Focus();
226 break;
227 case ShellContextMenuItemInspectId: {
228 ShellDevToolsFrontend::Show(web_contents_);
229 break;
230 }
231 }
232 }
233
234 WebDragDestDelegate* ShellWebContentsViewDelegate::GetDragDestDelegate() {
235 return NULL;
236 }
237
238 void ShellWebContentsViewDelegate::StoreFocus() {
239 }
240
241 void ShellWebContentsViewDelegate::RestoreFocus() {
242 }
243
244 bool ShellWebContentsViewDelegate::Focus() {
245 return false;
246 }
247
248 void ShellWebContentsViewDelegate::TakeFocus(bool reverse) {
249 }
250
251 void ShellWebContentsViewDelegate::SizeChanged(const gfx::Size& size) {
252 }
253
254 } // namespace content
OLDNEW
« no previous file with comments | « content/shell/shell_web_contents_view_delegate_mac.mm ('k') | content/shell/shell_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698