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

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

Issue 343081: Fix a problem in the implementation of search-vs.-go-in-context-menus. We we... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/clipboard/clipboard.h" 7 #include "app/clipboard/clipboard.h"
8 #include "app/clipboard/scoped_clipboard_writer.h" 8 #include "app/clipboard/scoped_clipboard_writer.h"
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 18 matching lines...) Expand all
29 #include "chrome/common/pref_service.h" 29 #include "chrome/common/pref_service.h"
30 #include "chrome/common/url_constants.h" 30 #include "chrome/common/url_constants.h"
31 #include "grit/generated_resources.h" 31 #include "grit/generated_resources.h"
32 #include "net/base/escape.h" 32 #include "net/base/escape.h"
33 #include "webkit/api/public/WebMediaPlayerAction.h" 33 #include "webkit/api/public/WebMediaPlayerAction.h"
34 #include "webkit/api/public/WebContextMenuData.h" 34 #include "webkit/api/public/WebContextMenuData.h"
35 35
36 using WebKit::WebContextMenuData; 36 using WebKit::WebContextMenuData;
37 using WebKit::WebMediaPlayerAction; 37 using WebKit::WebMediaPlayerAction;
38 38
39 namespace {
40
41 string16 EscapeAmpersands(const string16& text) {
42 string16 ret;
43 ret.reserve(text.length() * 2);
44 for (string16::const_iterator i = text.begin();
45 i != text.end(); ++i) {
46 // The escape for an ampersand is two ampersands.
47 if ('&' == *i)
48 ret.push_back(*i);
49
50 ret.push_back(*i);
51 }
52
53 return ret;
54 }
55
56 } // namespace
57
58 RenderViewContextMenu::RenderViewContextMenu( 39 RenderViewContextMenu::RenderViewContextMenu(
59 TabContents* tab_contents, 40 TabContents* tab_contents,
60 const ContextMenuParams& params) 41 const ContextMenuParams& params)
61 : params_(params), 42 : params_(params),
62 source_tab_contents_(tab_contents), 43 source_tab_contents_(tab_contents),
63 profile_(tab_contents->profile()) { 44 profile_(tab_contents->profile()) {
64 } 45 }
65 46
66 RenderViewContextMenu::~RenderViewContextMenu() { 47 RenderViewContextMenu::~RenderViewContextMenu() {
67 } 48 }
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 AppendMenuItem(IDS_CONTENT_CONTEXT_VIEWFRAMESOURCE); 192 AppendMenuItem(IDS_CONTENT_CONTEXT_VIEWFRAMESOURCE);
212 AppendMenuItem(IDS_CONTENT_CONTEXT_VIEWFRAMEINFO); 193 AppendMenuItem(IDS_CONTENT_CONTEXT_VIEWFRAMEINFO);
213 } 194 }
214 195
215 void RenderViewContextMenu::AppendCopyItem() { 196 void RenderViewContextMenu::AppendCopyItem() {
216 AppendMenuItem(IDS_CONTENT_CONTEXT_COPY); 197 AppendMenuItem(IDS_CONTENT_CONTEXT_COPY);
217 } 198 }
218 199
219 void RenderViewContextMenu::AppendSearchProvider() { 200 void RenderViewContextMenu::AppendSearchProvider() {
220 DCHECK(profile_); 201 DCHECK(profile_);
221 const TemplateURL* const default_provider =
222 profile_->GetTemplateURLModel()->GetDefaultSearchProvider();
223 if (!default_provider)
224 return;
225 202
226 string16 selection_text = EscapeAmpersands(WideToUTF16( 203 if (params_.selection_text.empty())
227 l10n_util::TruncateString(params_.selection_text, 50)));
228 if (selection_text.empty())
229 return; 204 return;
230 205
231 bool is_search; 206 bool is_search;
232 profile_->GetSearchVersusNavigateClassifier()->Classify( 207 profile_->GetSearchVersusNavigateClassifier()->Classify(
233 UTF16ToWide(selection_text), std::wstring(), &is_search, 208 params_.selection_text, std::wstring(), &is_search,
234 &selection_navigation_url_, &transition_, NULL, NULL); 209 &selection_navigation_url_, &transition_, NULL, NULL);
235 if (!selection_navigation_url_.is_valid()) 210 if (!selection_navigation_url_.is_valid())
236 return; 211 return;
237 212
213 string16 printable_selection_text(
214 WideToUTF16(l10n_util::TruncateString(params_.selection_text, 50)));
215 // Escape "&" as "&&".
216 for (size_t i = printable_selection_text.find('&'); i != string16::npos;
217 i = printable_selection_text.find('&', i + 2))
218 printable_selection_text.insert(i, 1, '&');
219
238 if (is_search) { 220 if (is_search) {
239 string16 label(l10n_util::GetStringFUTF16( 221 const TemplateURL* const default_provider =
240 IDS_CONTENT_CONTEXT_SEARCHWEBFOR, 222 profile_->GetTemplateURLModel()->GetDefaultSearchProvider();
241 WideToUTF16(default_provider->short_name()), 223 if (!default_provider)
242 selection_text)); 224 return;
243 AppendMenuItem(IDS_CONTENT_CONTEXT_SEARCHWEBFOR, label); 225 AppendMenuItem(IDS_CONTENT_CONTEXT_SEARCHWEBFOR,
226 l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_SEARCHWEBFOR,
227 WideToUTF16(default_provider->short_name()),
228 printable_selection_text));
244 } else { 229 } else {
245 string16 label(l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_GOTOURL, 230 AppendMenuItem(IDS_CONTENT_CONTEXT_GOTOURL,
246 selection_text)); 231 l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_GOTOURL,
247 AppendMenuItem(IDS_CONTENT_CONTEXT_GOTOURL, label); 232 printable_selection_text));
248 } 233 }
249 } 234 }
250 235
251 void RenderViewContextMenu::AppendEditableItems() { 236 void RenderViewContextMenu::AppendEditableItems() {
252 // Append Dictionary spell check suggestions. 237 // Append Dictionary spell check suggestions.
253 for (size_t i = 0; i < params_.dictionary_suggestions.size() && 238 for (size_t i = 0; i < params_.dictionary_suggestions.size() &&
254 IDC_SPELLCHECK_SUGGESTION_0 + i <= IDC_SPELLCHECK_SUGGESTION_LAST; 239 IDC_SPELLCHECK_SUGGESTION_0 + i <= IDC_SPELLCHECK_SUGGESTION_LAST;
255 ++i) { 240 ++i) {
256 AppendMenuItem(IDC_SPELLCHECK_SUGGESTION_0 + static_cast<int>(i), 241 AppendMenuItem(IDC_SPELLCHECK_SUGGESTION_0 + static_cast<int>(i),
257 params_.dictionary_suggestions[i]); 242 params_.dictionary_suggestions[i]);
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), 810 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages),
826 g_browser_process->clipboard()); 811 g_browser_process->clipboard());
827 } 812 }
828 813
829 void RenderViewContextMenu::MediaPlayerActionAt( 814 void RenderViewContextMenu::MediaPlayerActionAt(
830 const gfx::Point& location, 815 const gfx::Point& location,
831 const WebMediaPlayerAction& action) { 816 const WebMediaPlayerAction& action) {
832 source_tab_contents_->render_view_host()->MediaPlayerActionAt( 817 source_tab_contents_->render_view_host()->MediaPlayerActionAt(
833 location, action); 818 location, action);
834 } 819 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698