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

Side by Side Diff: chrome/browser/tab_contents/render_view_context_menu.cc

Issue 149604: Begin implementation of the context menu for Video and Audio tags. (Closed)
Patch Set: Fix small style issues. Created 11 years, 5 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
« no previous file with comments | « chrome/browser/tab_contents/render_view_context_menu.h ('k') | chrome/common/render_messages.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 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 #include "chrome/browser/tab_contents/render_view_context_menu.h" 5 #include "chrome/browser/tab_contents/render_view_context_menu.h"
6 6
7 #include "app/l10n_util.h" 7 #include "app/l10n_util.h"
8 #include "base/clipboard.h" 8 #include "base/clipboard.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/scoped_clipboard_writer.h" 11 #include "base/scoped_clipboard_writer.h"
12 #include "chrome/app/chrome_dll_resource.h" 12 #include "chrome/app/chrome_dll_resource.h"
13 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/debugger/devtools_manager.h" 14 #include "chrome/browser/debugger/devtools_manager.h"
15 #include "chrome/browser/download/download_manager.h" 15 #include "chrome/browser/download/download_manager.h"
16 #include "chrome/browser/fonts_languages_window.h" 16 #include "chrome/browser/fonts_languages_window.h"
17 #include "chrome/browser/page_info_window.h" 17 #include "chrome/browser/page_info_window.h"
18 #include "chrome/browser/profile.h" 18 #include "chrome/browser/profile.h"
19 #include "chrome/browser/search_engines/template_url_model.h" 19 #include "chrome/browser/search_engines/template_url_model.h"
20 #include "chrome/browser/spellchecker.h" 20 #include "chrome/browser/spellchecker.h"
21 #include "chrome/browser/tab_contents/navigation_entry.h" 21 #include "chrome/browser/tab_contents/navigation_entry.h"
22 #include "chrome/browser/tab_contents/tab_contents.h" 22 #include "chrome/browser/tab_contents/tab_contents.h"
23 #include "chrome/common/chrome_switches.h" 23 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/platform_util.h" 24 #include "chrome/common/platform_util.h"
25 #include "chrome/common/pref_service.h" 25 #include "chrome/common/pref_service.h"
26 #include "chrome/common/url_constants.h" 26 #include "chrome/common/url_constants.h"
27 #include "grit/generated_resources.h" 27 #include "grit/generated_resources.h"
28 #include "net/base/escape.h" 28 #include "net/base/escape.h"
29 #include "net/base/net_util.h" 29 #include "net/base/net_util.h"
30 30
31 // Constants for the standard playback rates provided by the context
32 // menu. If another rate is reported, it will be considered unknown and
33 // no rate will be selected in the submenu.
34 static const double kSlowPlaybackRate = 0.5f;
35 static const double kNormalPlaybackRate = 1.0f;
36 static const double kFastPlaybackRate = 1.25f;
37 static const double kFasterPlaybackRate = 1.50f;
38 static const double kDoubleTimePlaybackRate = 2.0f;
39
31 RenderViewContextMenu::RenderViewContextMenu( 40 RenderViewContextMenu::RenderViewContextMenu(
32 TabContents* tab_contents, 41 TabContents* tab_contents,
33 const ContextMenuParams& params) 42 const ContextMenuParams& params)
34 : params_(params), 43 : params_(params),
35 source_tab_contents_(tab_contents), 44 source_tab_contents_(tab_contents),
36 profile_(tab_contents->profile()) { 45 profile_(tab_contents->profile()) {
37 } 46 }
38 47
39 RenderViewContextMenu::~RenderViewContextMenu() { 48 RenderViewContextMenu::~RenderViewContextMenu() {
40 } 49 }
41 50
42 // Menu construction functions ------------------------------------------------- 51 // Menu construction functions -------------------------------------------------
43 52
44 void RenderViewContextMenu::Init() { 53 void RenderViewContextMenu::Init() {
45 InitMenu(params_.node); 54 InitMenu(params_.node, params_.media_params);
46 DoInit(); 55 DoInit();
47 } 56 }
48 57
49 void RenderViewContextMenu::InitMenu(ContextNode node) { 58 void RenderViewContextMenu::InitMenu(ContextNode node,
59 ContextMenuMediaParams media_params) {
50 if (node.type & ContextNode::PAGE) 60 if (node.type & ContextNode::PAGE)
51 AppendPageItems(); 61 AppendPageItems();
52 if (node.type & ContextNode::FRAME) 62 if (node.type & ContextNode::FRAME)
53 AppendFrameItems(); 63 AppendFrameItems();
54 if (node.type & ContextNode::LINK) 64 if (node.type & ContextNode::LINK)
55 AppendLinkItems(); 65 AppendLinkItems();
56 66
57 if (node.type & ContextNode::IMAGE) { 67 if (node.type & ContextNode::IMAGE) {
58 if (node.type & ContextNode::LINK) 68 if (node.type & ContextNode::LINK)
59 AppendSeparator(); 69 AppendSeparator();
60 AppendImageItems(); 70 AppendImageItems();
61 } 71 }
62 72
73 if (node.type & ContextNode::VIDEO) {
74 if (node.type & ContextNode::LINK)
75 AppendSeparator();
76 AppendVideoItems(media_params);
77 }
78
79 if (node.type & ContextNode::AUDIO) {
80 if (node.type & ContextNode::LINK)
81 AppendSeparator();
82 AppendAudioItems(media_params);
83 }
84
63 if (node.type & ContextNode::EDITABLE) 85 if (node.type & ContextNode::EDITABLE)
64 AppendEditableItems(); 86 AppendEditableItems();
65 else if (node.type & ContextNode::SELECTION || 87 else if (node.type & ContextNode::SELECTION ||
66 node.type & ContextNode::LINK) 88 node.type & ContextNode::LINK)
67 AppendCopyItem(); 89 AppendCopyItem();
68 90
69 if (node.type & ContextNode::SELECTION) 91 if (node.type & ContextNode::SELECTION)
70 AppendSearchProvider(); 92 AppendSearchProvider();
71 AppendSeparator(); 93 AppendSeparator();
72 AppendDeveloperItems(); 94 AppendDeveloperItems();
(...skipping 18 matching lines...) Expand all
91 } 113 }
92 } 114 }
93 115
94 void RenderViewContextMenu::AppendImageItems() { 116 void RenderViewContextMenu::AppendImageItems() {
95 AppendMenuItem(IDS_CONTENT_CONTEXT_SAVEIMAGEAS); 117 AppendMenuItem(IDS_CONTENT_CONTEXT_SAVEIMAGEAS);
96 AppendMenuItem(IDS_CONTENT_CONTEXT_COPYIMAGELOCATION); 118 AppendMenuItem(IDS_CONTENT_CONTEXT_COPYIMAGELOCATION);
97 AppendMenuItem(IDS_CONTENT_CONTEXT_COPYIMAGE); 119 AppendMenuItem(IDS_CONTENT_CONTEXT_COPYIMAGE);
98 AppendMenuItem(IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB); 120 AppendMenuItem(IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB);
99 } 121 }
100 122
123 void RenderViewContextMenu::AppendAudioItems(
124 ContextMenuMediaParams media_params) {
125 AppendMediaItems(media_params);
126 AppendSeparator();
127 AppendMenuItem(IDS_CONTENT_CONTEXT_SAVEAUDIOAS);
128 AppendMenuItem(IDS_CONTENT_CONTEXT_COPYAUDIOLOCATION);
129 AppendMenuItem(IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB);
130 }
131
132 void RenderViewContextMenu::AppendVideoItems(
133 ContextMenuMediaParams media_params) {
134 AppendMediaItems(media_params);
135 AppendMenuItem(IDS_CONTENT_CONTEXT_FULLSCREEN);
136 AppendSeparator();
137 AppendMenuItem(IDS_CONTENT_CONTEXT_SAVEVIDEOAS);
138 AppendMenuItem(IDS_CONTENT_CONTEXT_SAVESCREENSHOTAS);
139 AppendMenuItem(IDS_CONTENT_CONTEXT_COPYVIDEOLOCATION);
140 AppendMenuItem(IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB);
141 }
142
143 void RenderViewContextMenu::AppendMediaItems(
144 ContextMenuMediaParams media_params) {
145 if (media_params.player_state & ContextMenuMediaParams::PLAYER_PAUSED) {
146 AppendMenuItem(IDS_CONTENT_CONTEXT_PLAY);
147 } else {
148 AppendMenuItem(IDS_CONTENT_CONTEXT_PAUSE);
149 }
150
151 if (media_params.player_state & ContextMenuMediaParams::PLAYER_MUTED) {
152 AppendMenuItem(IDS_CONTENT_CONTEXT_UNMUTE);
153 } else {
154 AppendMenuItem(IDS_CONTENT_CONTEXT_MUTE);
155 }
156
157 AppendCheckboxMenuItem(IDS_CONTENT_CONTEXT_LOOP,
158 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_LOOP));
159
160 StartSubMenu(IDS_CONTENT_CONTEXT_PLAYBACKRATE_MENU,
161 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_PLAYBACKRATE_MENU));
162 AppendRadioMenuItem(IDS_CONTENT_CONTEXT_PLAYBACKRATE_SLOW,
163 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_PLAYBACKRATE_SLOW));
164 AppendRadioMenuItem(IDS_CONTENT_CONTEXT_PLAYBACKRATE_NORMAL,
165 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_PLAYBACKRATE_NORMAL));
166 AppendRadioMenuItem(IDS_CONTENT_CONTEXT_PLAYBACKRATE_FAST,
167 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_PLAYBACKRATE_FAST));
168 AppendRadioMenuItem(IDS_CONTENT_CONTEXT_PLAYBACKRATE_FASTER,
169 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_PLAYBACKRATE_FASTER));
170 AppendRadioMenuItem(IDS_CONTENT_CONTEXT_PLAYBACKRATE_DOUBLETIME,
171 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_PLAYBACKRATE_DOUBLETIME));
172 FinishSubMenu();
173 }
174
101 void RenderViewContextMenu::AppendPageItems() { 175 void RenderViewContextMenu::AppendPageItems() {
102 AppendMenuItem(IDS_CONTENT_CONTEXT_BACK); 176 AppendMenuItem(IDS_CONTENT_CONTEXT_BACK);
103 AppendMenuItem(IDS_CONTENT_CONTEXT_FORWARD); 177 AppendMenuItem(IDS_CONTENT_CONTEXT_FORWARD);
104 AppendMenuItem(IDS_CONTENT_CONTEXT_RELOAD); 178 AppendMenuItem(IDS_CONTENT_CONTEXT_RELOAD);
105 AppendSeparator(); 179 AppendSeparator();
106 AppendMenuItem(IDS_CONTENT_CONTEXT_SAVEPAGEAS); 180 AppendMenuItem(IDS_CONTENT_CONTEXT_SAVEPAGEAS);
107 AppendMenuItem(IDS_CONTENT_CONTEXT_PRINT); 181 AppendMenuItem(IDS_CONTENT_CONTEXT_PRINT);
108 AppendMenuItem(IDS_CONTENT_CONTEXT_VIEWPAGESOURCE); 182 AppendMenuItem(IDS_CONTENT_CONTEXT_VIEWPAGESOURCE);
109 AppendMenuItem(IDS_CONTENT_CONTEXT_VIEWPAGEINFO); 183 AppendMenuItem(IDS_CONTENT_CONTEXT_VIEWPAGEINFO);
110 } 184 }
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 return params_.link_url.is_valid(); 313 return params_.link_url.is_valid();
240 314
241 case IDS_CONTENT_CONTEXT_COPYLINKLOCATION: 315 case IDS_CONTENT_CONTEXT_COPYLINKLOCATION:
242 return params_.unfiltered_link_url.is_valid(); 316 return params_.unfiltered_link_url.is_valid();
243 317
244 case IDS_CONTENT_CONTEXT_SAVELINKAS: 318 case IDS_CONTENT_CONTEXT_SAVELINKAS:
245 return params_.link_url.is_valid() && 319 return params_.link_url.is_valid() &&
246 URLRequest::IsHandledURL(params_.link_url); 320 URLRequest::IsHandledURL(params_.link_url);
247 321
248 case IDS_CONTENT_CONTEXT_SAVEIMAGEAS: 322 case IDS_CONTENT_CONTEXT_SAVEIMAGEAS:
249 return params_.image_url.is_valid() && 323 return params_.src_url.is_valid() &&
250 URLRequest::IsHandledURL(params_.image_url); 324 URLRequest::IsHandledURL(params_.src_url);
251 325
252 case IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB: 326 case IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB:
253 // The images shown in the most visited thumbnails do not currently open 327 // The images shown in the most visited thumbnails do not currently open
254 // in a new tab as they should. Disabling this context menu option for 328 // in a new tab as they should. Disabling this context menu option for
255 // now, as a quick hack, before we resolve this issue (Issue = 2608). 329 // now, as a quick hack, before we resolve this issue (Issue = 2608).
256 // TODO (sidchat): Enable this option once this issue is resolved. 330 // TODO (sidchat): Enable this option once this issue is resolved.
257 if (params_.image_url.scheme() == chrome::kChromeUIScheme) 331 if (params_.src_url.scheme() == chrome::kChromeUIScheme)
258 return false; 332 return false;
259 return true; 333 return true;
260 334
335 case IDS_CONTENT_CONTEXT_FULLSCREEN:
336 // TODO(ajwong): Enable fullsceren after we actually implement this.
337 return false;
338
339 // Media control commands should all be disabled if the player is in an
340 // error state.
341 case IDS_CONTENT_CONTEXT_PLAY:
342 case IDS_CONTENT_CONTEXT_PAUSE:
343 case IDS_CONTENT_CONTEXT_MUTE:
344 case IDS_CONTENT_CONTEXT_UNMUTE:
345 case IDS_CONTENT_CONTEXT_LOOP:
346 case IDS_CONTENT_CONTEXT_PLAYBACKRATE_MENU:
347 case IDS_CONTENT_CONTEXT_PLAYBACKRATE_SLOW:
348 case IDS_CONTENT_CONTEXT_PLAYBACKRATE_NORMAL:
349 case IDS_CONTENT_CONTEXT_PLAYBACKRATE_FAST:
350 case IDS_CONTENT_CONTEXT_PLAYBACKRATE_FASTER:
351 case IDS_CONTENT_CONTEXT_PLAYBACKRATE_DOUBLETIME:
352 return (params_.media_params.player_state &
353 ContextMenuMediaParams::PLAYER_ERROR) == 0;
354
355 case IDS_CONTENT_CONTEXT_SAVESCREENSHOTAS:
356 // TODO(ajwong): Enable save screenshot after we actually implement
357 // this.
358 return false;
359
360 case IDS_CONTENT_CONTEXT_COPYAUDIOLOCATION:
361 case IDS_CONTENT_CONTEXT_COPYVIDEOLOCATION:
261 case IDS_CONTENT_CONTEXT_COPYIMAGELOCATION: 362 case IDS_CONTENT_CONTEXT_COPYIMAGELOCATION:
262 return params_.image_url.is_valid(); 363 return params_.src_url.is_valid();
364
365 case IDS_CONTENT_CONTEXT_SAVEAUDIOAS:
366 case IDS_CONTENT_CONTEXT_SAVEVIDEOAS:
367 return (params_.media_params.player_state &
368 ContextMenuMediaParams::PLAYER_CAN_SAVE) &&
369 params_.src_url.is_valid() &&
370 URLRequest::IsHandledURL(params_.src_url);
371
372 case IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB:
373 case IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB:
374 return true;
263 375
264 case IDS_CONTENT_CONTEXT_SAVEPAGEAS: 376 case IDS_CONTENT_CONTEXT_SAVEPAGEAS:
265 return SavePackage::IsSavableURL(source_tab_contents_->GetURL()); 377 return SavePackage::IsSavableURL(source_tab_contents_->GetURL());
266 378
267 case IDS_CONTENT_CONTEXT_OPENFRAMENEWTAB: 379 case IDS_CONTENT_CONTEXT_OPENFRAMENEWTAB:
268 case IDS_CONTENT_CONTEXT_OPENFRAMENEWWINDOW: 380 case IDS_CONTENT_CONTEXT_OPENFRAMENEWWINDOW:
269 return params_.frame_url.is_valid(); 381 return params_.frame_url.is_valid();
270 382
271 case IDS_CONTENT_CONTEXT_UNDO: 383 case IDS_CONTENT_CONTEXT_UNDO:
272 return !!(params_.edit_flags & ContextNode::CAN_UNDO); 384 return !!(params_.edit_flags & ContextNode::CAN_UNDO);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 429
318 case IDS_CONTENT_CONTEXT_SAVEFRAMEAS: 430 case IDS_CONTENT_CONTEXT_SAVEFRAMEAS:
319 case IDS_CONTENT_CONTEXT_PRINTFRAME: 431 case IDS_CONTENT_CONTEXT_PRINTFRAME:
320 case IDS_CONTENT_CONTEXT_ADDSEARCHENGINE: // Not implemented. 432 case IDS_CONTENT_CONTEXT_ADDSEARCHENGINE: // Not implemented.
321 default: 433 default:
322 return false; 434 return false;
323 } 435 }
324 } 436 }
325 437
326 bool RenderViewContextMenu::ItemIsChecked(int id) const { 438 bool RenderViewContextMenu::ItemIsChecked(int id) const {
439 // Select the correct playback rate.
440 if (id == IDS_CONTENT_CONTEXT_PLAYBACKRATE_SLOW) {
441 return params_.media_params.playback_rate == kSlowPlaybackRate;
442 }
443 if (id == IDS_CONTENT_CONTEXT_PLAYBACKRATE_NORMAL) {
444 return params_.media_params.playback_rate == kNormalPlaybackRate;
445 }
446 if (id == IDS_CONTENT_CONTEXT_PLAYBACKRATE_FAST) {
447 return params_.media_params.playback_rate == kFastPlaybackRate;
448 }
449 if (id == IDS_CONTENT_CONTEXT_PLAYBACKRATE_FASTER) {
450 return params_.media_params.playback_rate == kFasterPlaybackRate;
451 }
452 if (id == IDS_CONTENT_CONTEXT_PLAYBACKRATE_DOUBLETIME) {
453 return params_.media_params.playback_rate == kDoubleTimePlaybackRate;
454 }
455
456 // See if the video is set to looping.
457 if (id == IDS_CONTENT_CONTEXT_LOOP) {
458 return (params_.media_params.player_state &
459 ContextMenuMediaParams::PLAYER_LOOP) != 0;
460 }
461
327 // Check box for 'Check the Spelling of this field'. 462 // Check box for 'Check the Spelling of this field'.
328 if (id == IDC_CHECK_SPELLING_OF_THIS_FIELD) { 463 if (id == IDC_CHECK_SPELLING_OF_THIS_FIELD) {
329 return (params_.spellcheck_enabled && 464 return (params_.spellcheck_enabled &&
330 profile_->GetPrefs()->GetBoolean(prefs::kEnableSpellCheck)); 465 profile_->GetPrefs()->GetBoolean(prefs::kEnableSpellCheck));
331 } 466 }
332 467
333 // Don't bother getting the display language vector if this isn't a spellcheck 468 // Don't bother getting the display language vector if this isn't a spellcheck
334 // language. 469 // language.
335 if ((id < IDC_SPELLCHECK_LANGUAGES_FIRST) || 470 if ((id < IDC_SPELLCHECK_LANGUAGES_FIRST) ||
336 (id >= IDC_SPELLCHECK_LANGUAGES_LAST)) 471 (id >= IDC_SPELLCHECK_LANGUAGES_LAST))
(...skipping 27 matching lines...) Expand all
364 break; 499 break;
365 500
366 case IDS_CONTENT_CONTEXT_OPENLINKNEWWINDOW: 501 case IDS_CONTENT_CONTEXT_OPENLINKNEWWINDOW:
367 OpenURL(params_.link_url, NEW_WINDOW, PageTransition::LINK); 502 OpenURL(params_.link_url, NEW_WINDOW, PageTransition::LINK);
368 break; 503 break;
369 504
370 case IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD: 505 case IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD:
371 OpenURL(params_.link_url, OFF_THE_RECORD, PageTransition::LINK); 506 OpenURL(params_.link_url, OFF_THE_RECORD, PageTransition::LINK);
372 break; 507 break;
373 508
509 case IDS_CONTENT_CONTEXT_SAVEAUDIOAS:
510 case IDS_CONTENT_CONTEXT_SAVEVIDEOAS:
374 case IDS_CONTENT_CONTEXT_SAVEIMAGEAS: 511 case IDS_CONTENT_CONTEXT_SAVEIMAGEAS:
375 case IDS_CONTENT_CONTEXT_SAVELINKAS: { 512 case IDS_CONTENT_CONTEXT_SAVELINKAS: {
376 const GURL& referrer = 513 const GURL& referrer =
377 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url; 514 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url;
378 const GURL& url = 515 const GURL& url =
379 (id == IDS_CONTENT_CONTEXT_SAVELINKAS ? params_.link_url : 516 (id == IDS_CONTENT_CONTEXT_SAVELINKAS ? params_.link_url :
380 params_.image_url); 517 params_.src_url);
381 DownloadManager* dlm = profile_->GetDownloadManager(); 518 DownloadManager* dlm = profile_->GetDownloadManager();
382 dlm->DownloadUrl(url, referrer, params_.frame_charset, 519 dlm->DownloadUrl(url, referrer, params_.frame_charset,
383 source_tab_contents_); 520 source_tab_contents_);
384 break; 521 break;
385 } 522 }
386 523
387 case IDS_CONTENT_CONTEXT_COPYLINKLOCATION: 524 case IDS_CONTENT_CONTEXT_COPYLINKLOCATION:
388 WriteURLToClipboard(params_.unfiltered_link_url); 525 WriteURLToClipboard(params_.unfiltered_link_url);
389 break; 526 break;
390 527
528 case IDS_CONTENT_CONTEXT_COPYAUDIOLOCATION:
529 case IDS_CONTENT_CONTEXT_COPYVIDEOLOCATION:
391 case IDS_CONTENT_CONTEXT_COPYIMAGELOCATION: 530 case IDS_CONTENT_CONTEXT_COPYIMAGELOCATION:
392 WriteURLToClipboard(params_.image_url); 531 WriteURLToClipboard(params_.src_url);
393 break; 532 break;
394 533
395 case IDS_CONTENT_CONTEXT_COPYIMAGE: 534 case IDS_CONTENT_CONTEXT_COPYIMAGE:
396 CopyImageAt(params_.x, params_.y); 535 CopyImageAt(params_.x, params_.y);
397 break; 536 break;
398 537
538 case IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB:
539 case IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB:
399 case IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB: 540 case IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB:
400 OpenURL(params_.image_url, NEW_BACKGROUND_TAB, PageTransition::LINK); 541 OpenURL(params_.src_url, NEW_BACKGROUND_TAB, PageTransition::LINK);
401 break; 542 break;
402 543
403 case IDS_CONTENT_CONTEXT_BACK: 544 case IDS_CONTENT_CONTEXT_BACK:
404 source_tab_contents_->controller().GoBack(); 545 source_tab_contents_->controller().GoBack();
405 break; 546 break;
406 547
407 case IDS_CONTENT_CONTEXT_FORWARD: 548 case IDS_CONTENT_CONTEXT_FORWARD:
408 source_tab_contents_->controller().GoForward(); 549 source_tab_contents_->controller().GoForward();
409 break; 550 break;
410 551
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 766
626 void RenderViewContextMenu::CopyImageAt(int x, int y) { 767 void RenderViewContextMenu::CopyImageAt(int x, int y) {
627 source_tab_contents_->render_view_host()->CopyImageAt(x, y); 768 source_tab_contents_->render_view_host()->CopyImageAt(x, y);
628 } 769 }
629 770
630 void RenderViewContextMenu::Inspect(int x, int y) { 771 void RenderViewContextMenu::Inspect(int x, int y) {
631 DevToolsManager::GetInstance()->InspectElement( 772 DevToolsManager::GetInstance()->InspectElement(
632 source_tab_contents_->render_view_host(), x, y); 773 source_tab_contents_->render_view_host(), x, y);
633 } 774 }
634 775
635 void RenderViewContextMenu::WriteTextToClipboard( 776 void RenderViewContextMenu::WriteTextToClipboard(const string16& text) {
636 const string16& text) {
637 Clipboard* clipboard = g_browser_process->clipboard(); 777 Clipboard* clipboard = g_browser_process->clipboard();
638 778
639 if (!clipboard) 779 if (!clipboard)
640 return; 780 return;
641 781
642 ScopedClipboardWriter scw(clipboard); 782 ScopedClipboardWriter scw(clipboard);
643 scw.WriteText(text); 783 scw.WriteText(text);
644 } 784 }
645 785
646 void RenderViewContextMenu::WriteURLToClipboard(const GURL& url) { 786 void RenderViewContextMenu::WriteURLToClipboard(const GURL& url) {
647 std::string utf8_text = url.SchemeIs(chrome::kMailToScheme) ? url.path() : 787 std::string utf8_text = url.SchemeIs(chrome::kMailToScheme) ? url.path() :
648 // Unescaping path and query is not a good idea because other 788 // Unescaping path and query is not a good idea because other
649 // applications may not enocode non-ASCII characters in UTF-8. 789 // applications may not enocode non-ASCII characters in UTF-8.
650 // So the 4th parameter of net::FormatUrl() should be false. 790 // So the 4th parameter of net::FormatUrl() should be false.
651 // See crbug.com/2820. 791 // See crbug.com/2820.
652 WideToUTF8(net::FormatUrl( 792 WideToUTF8(net::FormatUrl(
653 url, profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), 793 url, profile_->GetPrefs()->GetString(prefs::kAcceptLanguages),
654 false, UnescapeRule::NONE, NULL, NULL)); 794 false, UnescapeRule::NONE, NULL, NULL));
655 795
656 WriteTextToClipboard(UTF8ToUTF16(utf8_text)); 796 WriteTextToClipboard(UTF8ToUTF16(utf8_text));
657 DidWriteURLToClipboard(utf8_text); 797 DidWriteURLToClipboard(utf8_text);
658 } 798 }
OLDNEW
« no previous file with comments | « chrome/browser/tab_contents/render_view_context_menu.h ('k') | chrome/common/render_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698