| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/renderer_context_menu/render_view_context_menu.h" | 5 #include "chrome/browser/renderer_context_menu/render_view_context_menu.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 void EscapeAmpersands(base::string16* text) { | 270 void EscapeAmpersands(base::string16* text) { |
| 271 base::ReplaceChars(*text, base::ASCIIToUTF16("&"), base::ASCIIToUTF16("&&"), | 271 base::ReplaceChars(*text, base::ASCIIToUTF16("&"), base::ASCIIToUTF16("&&"), |
| 272 text); | 272 text); |
| 273 } | 273 } |
| 274 | 274 |
| 275 // Returns the preference of the profile represented by the |context|. | 275 // Returns the preference of the profile represented by the |context|. |
| 276 PrefService* GetPrefs(content::BrowserContext* context) { | 276 PrefService* GetPrefs(content::BrowserContext* context) { |
| 277 return user_prefs::UserPrefs::Get(context); | 277 return user_prefs::UserPrefs::Get(context); |
| 278 } | 278 } |
| 279 | 279 |
| 280 bool custom_id_ranges_initialized = false; | 280 bool ExtensionPatternMatch(const extensions::URLPatternSet& patterns, |
| 281 const GURL& url) { |
| 282 // No patterns means no restriction, so that implicitly matches. |
| 283 if (patterns.is_empty()) |
| 284 return true; |
| 285 return patterns.MatchesURL(url); |
| 286 } |
| 287 |
| 288 const GURL& GetDocumentURL(const content::ContextMenuParams& params) { |
| 289 return params.frame_url.is_empty() ? params.page_url : params.frame_url; |
| 290 } |
| 291 |
| 292 content::Referrer CreateSaveAsReferrer( |
| 293 const GURL& url, |
| 294 const content::ContextMenuParams& params) { |
| 295 const GURL& referring_url = GetDocumentURL(params); |
| 296 return content::Referrer::SanitizeForRequest( |
| 297 url, |
| 298 content::Referrer(referring_url.GetAsReferrer(), params.referrer_policy)); |
| 299 } |
| 300 |
| 301 bool g_custom_id_ranges_initialized = false; |
| 302 |
| 303 const int kSpellcheckRadioGroup = 1; |
| 281 | 304 |
| 282 } // namespace | 305 } // namespace |
| 283 | 306 |
| 284 // static | 307 // static |
| 285 bool RenderViewContextMenu::IsDevToolsURL(const GURL& url) { | 308 bool RenderViewContextMenu::IsDevToolsURL(const GURL& url) { |
| 286 return url.SchemeIs(content::kChromeDevToolsScheme); | 309 return url.SchemeIs(content::kChromeDevToolsScheme); |
| 287 } | 310 } |
| 288 | 311 |
| 289 // static | 312 // static |
| 290 bool RenderViewContextMenu::IsInternalResourcesURL(const GURL& url) { | 313 bool RenderViewContextMenu::IsInternalResourcesURL(const GURL& url) { |
| 291 if (!url.SchemeIs(content::kChromeUIScheme)) | 314 if (!url.SchemeIs(content::kChromeUIScheme)) |
| 292 return false; | 315 return false; |
| 293 return url.host() == chrome::kChromeUISyncResourcesHost; | 316 return url.host() == chrome::kChromeUISyncResourcesHost; |
| 294 } | 317 } |
| 295 | 318 |
| 296 static const int kSpellcheckRadioGroup = 1; | |
| 297 | |
| 298 RenderViewContextMenu::RenderViewContextMenu( | 319 RenderViewContextMenu::RenderViewContextMenu( |
| 299 content::RenderFrameHost* render_frame_host, | 320 content::RenderFrameHost* render_frame_host, |
| 300 const content::ContextMenuParams& params) | 321 const content::ContextMenuParams& params) |
| 301 : RenderViewContextMenuBase(render_frame_host, params), | 322 : RenderViewContextMenuBase(render_frame_host, params), |
| 302 extension_items_(browser_context_, | 323 extension_items_(browser_context_, |
| 303 this, | 324 this, |
| 304 &menu_model_, | 325 &menu_model_, |
| 305 base::Bind(MenuItemMatchesParams, params_)), | 326 base::Bind(MenuItemMatchesParams, params_)), |
| 306 protocol_handler_submenu_model_(this), | 327 protocol_handler_submenu_model_(this), |
| 307 protocol_handler_registry_( | 328 protocol_handler_registry_( |
| 308 ProtocolHandlerRegistryFactory::GetForBrowserContext(GetProfile())) { | 329 ProtocolHandlerRegistryFactory::GetForBrowserContext(GetProfile())) { |
| 309 if (!custom_id_ranges_initialized) { | 330 if (!g_custom_id_ranges_initialized) { |
| 310 custom_id_ranges_initialized = true; | 331 g_custom_id_ranges_initialized = true; |
| 311 SetContentCustomCommandIdRange(IDC_CONTENT_CONTEXT_CUSTOM_FIRST, | 332 SetContentCustomCommandIdRange(IDC_CONTENT_CONTEXT_CUSTOM_FIRST, |
| 312 IDC_CONTENT_CONTEXT_CUSTOM_LAST); | 333 IDC_CONTENT_CONTEXT_CUSTOM_LAST); |
| 313 } | 334 } |
| 314 set_content_type(ContextMenuContentTypeFactory::Create( | 335 set_content_type(ContextMenuContentTypeFactory::Create( |
| 315 source_web_contents_, params)); | 336 source_web_contents_, params)); |
| 316 } | 337 } |
| 317 | 338 |
| 318 RenderViewContextMenu::~RenderViewContextMenu() { | 339 RenderViewContextMenu::~RenderViewContextMenu() { |
| 319 } | 340 } |
| 320 | 341 |
| 321 // Menu construction functions ------------------------------------------------- | 342 // Menu construction functions ------------------------------------------------- |
| 322 | 343 |
| 323 static bool ExtensionPatternMatch(const extensions::URLPatternSet& patterns, | |
| 324 const GURL& url) { | |
| 325 // No patterns means no restriction, so that implicitly matches. | |
| 326 if (patterns.is_empty()) | |
| 327 return true; | |
| 328 return patterns.MatchesURL(url); | |
| 329 } | |
| 330 | |
| 331 // static | 344 // static |
| 332 bool RenderViewContextMenu::ExtensionContextAndPatternMatch( | 345 bool RenderViewContextMenu::ExtensionContextAndPatternMatch( |
| 333 const content::ContextMenuParams& params, | 346 const content::ContextMenuParams& params, |
| 334 MenuItem::ContextList contexts, | 347 const MenuItem::ContextList& contexts, |
| 335 const extensions::URLPatternSet& target_url_patterns) { | 348 const extensions::URLPatternSet& target_url_patterns) { |
| 336 const bool has_link = !params.link_url.is_empty(); | 349 const bool has_link = !params.link_url.is_empty(); |
| 337 const bool has_selection = !params.selection_text.empty(); | 350 const bool has_selection = !params.selection_text.empty(); |
| 338 const bool in_frame = !params.frame_url.is_empty(); | 351 const bool in_frame = !params.frame_url.is_empty(); |
| 339 | 352 |
| 340 if (contexts.Contains(MenuItem::ALL) || | 353 if (contexts.Contains(MenuItem::ALL) || |
| 341 (has_selection && contexts.Contains(MenuItem::SELECTION)) || | 354 (has_selection && contexts.Contains(MenuItem::SELECTION)) || |
| 342 (params.is_editable && contexts.Contains(MenuItem::EDITABLE)) || | 355 (params.is_editable && contexts.Contains(MenuItem::EDITABLE)) || |
| 343 (in_frame && contexts.Contains(MenuItem::FRAME))) | 356 (in_frame && contexts.Contains(MenuItem::FRAME))) |
| 344 return true; | 357 return true; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 374 // other contexts apply (except for FRAME, which is included in PAGE for | 387 // other contexts apply (except for FRAME, which is included in PAGE for |
| 375 // backwards compatibility). | 388 // backwards compatibility). |
| 376 if (!has_link && !has_selection && !params.is_editable && | 389 if (!has_link && !has_selection && !params.is_editable && |
| 377 params.media_type == WebContextMenuData::MediaTypeNone && | 390 params.media_type == WebContextMenuData::MediaTypeNone && |
| 378 contexts.Contains(MenuItem::PAGE)) | 391 contexts.Contains(MenuItem::PAGE)) |
| 379 return true; | 392 return true; |
| 380 | 393 |
| 381 return false; | 394 return false; |
| 382 } | 395 } |
| 383 | 396 |
| 384 static const GURL& GetDocumentURL(const content::ContextMenuParams& params) { | |
| 385 return params.frame_url.is_empty() ? params.page_url : params.frame_url; | |
| 386 } | |
| 387 | |
| 388 // static | 397 // static |
| 389 bool RenderViewContextMenu::MenuItemMatchesParams( | 398 bool RenderViewContextMenu::MenuItemMatchesParams( |
| 390 const content::ContextMenuParams& params, | 399 const content::ContextMenuParams& params, |
| 391 const extensions::MenuItem* item) { | 400 const extensions::MenuItem* item) { |
| 392 bool match = ExtensionContextAndPatternMatch(params, item->contexts(), | 401 bool match = ExtensionContextAndPatternMatch(params, item->contexts(), |
| 393 item->target_url_patterns()); | 402 item->target_url_patterns()); |
| 394 if (!match) | 403 if (!match) |
| 395 return false; | 404 return false; |
| 396 | 405 |
| 397 const GURL& document_url = GetDocumentURL(params); | 406 const GURL& document_url = GetDocumentURL(params); |
| (...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 | 837 |
| 829 base::TrimWhitespace(params_.selection_text, base::TRIM_ALL, | 838 base::TrimWhitespace(params_.selection_text, base::TRIM_ALL, |
| 830 ¶ms_.selection_text); | 839 ¶ms_.selection_text); |
| 831 if (params_.selection_text.empty()) | 840 if (params_.selection_text.empty()) |
| 832 return; | 841 return; |
| 833 | 842 |
| 834 base::ReplaceChars(params_.selection_text, AutocompleteMatch::kInvalidChars, | 843 base::ReplaceChars(params_.selection_text, AutocompleteMatch::kInvalidChars, |
| 835 base::ASCIIToUTF16(" "), ¶ms_.selection_text); | 844 base::ASCIIToUTF16(" "), ¶ms_.selection_text); |
| 836 | 845 |
| 837 AutocompleteMatch match; | 846 AutocompleteMatch match; |
| 838 AutocompleteClassifierFactory::GetForProfile(GetProfile()) | 847 AutocompleteClassifierFactory::GetForProfile(GetProfile())->Classify( |
| 839 ->Classify(params_.selection_text, | 848 params_.selection_text, |
| 840 false, | 849 false, |
| 841 false, | 850 false, |
| 842 metrics::OmniboxEventProto::INVALID_SPEC, | 851 metrics::OmniboxEventProto::INVALID_SPEC, |
| 843 &match, | 852 &match, |
| 844 NULL); | 853 NULL); |
| 845 selection_navigation_url_ = match.destination_url; | 854 selection_navigation_url_ = match.destination_url; |
| 846 if (!selection_navigation_url_.is_valid()) | 855 if (!selection_navigation_url_.is_valid()) |
| 847 return; | 856 return; |
| 848 | 857 |
| 849 base::string16 printable_selection_text = PrintableSelectionText(); | 858 base::string16 printable_selection_text = PrintableSelectionText(); |
| 850 EscapeAmpersands(&printable_selection_text); | 859 EscapeAmpersands(&printable_selection_text); |
| 851 | 860 |
| 852 if (AutocompleteMatch::IsSearchType(match.type)) { | 861 if (AutocompleteMatch::IsSearchType(match.type)) { |
| 853 const TemplateURL* const default_provider = | 862 const TemplateURL* const default_provider = |
| 854 TemplateURLServiceFactory::GetForProfile(GetProfile()) | 863 TemplateURLServiceFactory::GetForProfile(GetProfile()) |
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1242 NOTREACHED(); | 1251 NOTREACHED(); |
| 1243 return false; | 1252 return false; |
| 1244 } | 1253 } |
| 1245 } | 1254 } |
| 1246 | 1255 |
| 1247 bool RenderViewContextMenu::IsCommandIdChecked(int id) const { | 1256 bool RenderViewContextMenu::IsCommandIdChecked(int id) const { |
| 1248 if (RenderViewContextMenuBase::IsCommandIdChecked(id)) | 1257 if (RenderViewContextMenuBase::IsCommandIdChecked(id)) |
| 1249 return true; | 1258 return true; |
| 1250 | 1259 |
| 1251 // See if the video is set to looping. | 1260 // See if the video is set to looping. |
| 1252 if (id == IDC_CONTENT_CONTEXT_LOOP) { | 1261 if (id == IDC_CONTENT_CONTEXT_LOOP) |
| 1253 return (params_.media_flags & | 1262 return (params_.media_flags & WebContextMenuData::MediaLoop) != 0; |
| 1254 WebContextMenuData::MediaLoop) != 0; | |
| 1255 } | |
| 1256 | 1263 |
| 1257 if (id == IDC_CONTENT_CONTEXT_CONTROLS) { | 1264 if (id == IDC_CONTENT_CONTEXT_CONTROLS) |
| 1258 return (params_.media_flags & | 1265 return (params_.media_flags & WebContextMenuData::MediaControls) != 0; |
| 1259 WebContextMenuData::MediaControls) != 0; | |
| 1260 } | |
| 1261 | 1266 |
| 1262 // Extension items. | 1267 // Extension items. |
| 1263 if (ContextMenuMatcher::IsExtensionsCustomCommandId(id)) | 1268 if (ContextMenuMatcher::IsExtensionsCustomCommandId(id)) |
| 1264 return extension_items_.IsCommandIdChecked(id); | 1269 return extension_items_.IsCommandIdChecked(id); |
| 1265 | 1270 |
| 1266 return false; | 1271 return false; |
| 1267 } | 1272 } |
| 1268 | 1273 |
| 1269 void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) { | 1274 void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) { |
| 1270 RenderViewContextMenuBase::ExecuteCommand(id, event_flags); | 1275 RenderViewContextMenuBase::ExecuteCommand(id, event_flags); |
| 1271 if (command_executed_) | 1276 if (command_executed_) |
| 1272 return; | 1277 return; |
| 1273 command_executed_ = true; | 1278 command_executed_ = true; |
| 1274 | 1279 |
| 1275 RenderFrameHost* render_frame_host = GetRenderFrameHost(); | 1280 RenderFrameHost* render_frame_host = GetRenderFrameHost(); |
| 1276 | 1281 |
| 1277 // Process extension menu items. | 1282 // Process extension menu items. |
| 1278 if (ContextMenuMatcher::IsExtensionsCustomCommandId(id)) { | 1283 if (ContextMenuMatcher::IsExtensionsCustomCommandId(id)) { |
| 1279 extension_items_.ExecuteCommand(id, source_web_contents_, params_); | 1284 extension_items_.ExecuteCommand(id, source_web_contents_, params_); |
| 1280 return; | 1285 return; |
| 1281 } | 1286 } |
| 1282 | 1287 |
| 1283 if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST && | 1288 if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST && |
| 1284 id <= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST) { | 1289 id <= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST) { |
| 1285 ProtocolHandlerRegistry::ProtocolHandlerList handlers = | 1290 ProtocolHandlerRegistry::ProtocolHandlerList handlers = |
| 1286 GetHandlersForLinkUrl(); | 1291 GetHandlersForLinkUrl(); |
| 1287 if (handlers.empty()) { | 1292 if (handlers.empty()) |
| 1288 return; | 1293 return; |
| 1289 } | 1294 |
| 1290 content::RecordAction( | 1295 content::RecordAction( |
| 1291 UserMetricsAction("RegisterProtocolHandler.ContextMenu_Open")); | 1296 UserMetricsAction("RegisterProtocolHandler.ContextMenu_Open")); |
| 1292 int handlerIndex = id - IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST; | 1297 int handlerIndex = id - IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST; |
| 1293 WindowOpenDisposition disposition = | 1298 WindowOpenDisposition disposition = |
| 1294 ForceNewTabDispositionFromEventFlags(event_flags); | 1299 ForceNewTabDispositionFromEventFlags(event_flags); |
| 1295 OpenURL( | 1300 OpenURL(handlers[handlerIndex].TranslateUrl(params_.link_url), |
| 1296 handlers[handlerIndex].TranslateUrl(params_.link_url), | 1301 GetDocumentURL(params_), |
| 1297 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url, | 1302 disposition, |
| 1298 disposition, content::PAGE_TRANSITION_LINK); | 1303 content::PAGE_TRANSITION_LINK); |
| 1299 return; | 1304 return; |
| 1300 } | 1305 } |
| 1301 | 1306 |
| 1302 switch (id) { | 1307 switch (id) { |
| 1303 case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB: { | 1308 case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB: { |
| 1304 Browser* browser = | 1309 Browser* browser = |
| 1305 chrome::FindBrowserWithWebContents(source_web_contents_); | 1310 chrome::FindBrowserWithWebContents(source_web_contents_); |
| 1306 OpenURL( | 1311 OpenURL(params_.link_url, |
| 1307 params_.link_url, | 1312 GetDocumentURL(params_), |
| 1308 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url, | 1313 !browser || browser->is_app() ? |
| 1309 !browser || browser->is_app() ? | |
| 1310 NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB, | 1314 NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB, |
| 1311 content::PAGE_TRANSITION_LINK); | 1315 content::PAGE_TRANSITION_LINK); |
| 1312 break; | 1316 break; |
| 1313 } | 1317 } |
| 1314 case IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW: | 1318 case IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW: |
| 1315 OpenURL( | 1319 OpenURL(params_.link_url, |
| 1316 params_.link_url, | 1320 GetDocumentURL(params_), |
| 1317 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url, | 1321 NEW_WINDOW, |
| 1318 NEW_WINDOW, content::PAGE_TRANSITION_LINK); | 1322 content::PAGE_TRANSITION_LINK); |
| 1319 break; | 1323 break; |
| 1320 | 1324 |
| 1321 case IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD: | 1325 case IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD: |
| 1322 OpenURL(params_.link_url, GURL(), OFF_THE_RECORD, | 1326 OpenURL(params_.link_url, GURL(), OFF_THE_RECORD, |
| 1323 content::PAGE_TRANSITION_LINK); | 1327 content::PAGE_TRANSITION_LINK); |
| 1324 break; | 1328 break; |
| 1325 | 1329 |
| 1326 case IDC_CONTENT_CONTEXT_SAVELINKAS: { | 1330 case IDC_CONTENT_CONTEXT_SAVELINKAS: { |
| 1327 RecordDownloadSource(DOWNLOAD_INITIATED_BY_CONTEXT_MENU); | 1331 RecordDownloadSource(DOWNLOAD_INITIATED_BY_CONTEXT_MENU); |
| 1328 const GURL& url = params_.link_url; | 1332 const GURL& url = params_.link_url; |
| 1329 const GURL& referring_url = | 1333 content::Referrer referrer = CreateSaveAsReferrer(url, params_); |
| 1330 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url; | |
| 1331 content::Referrer referrer = content::Referrer::SanitizeForRequest( | |
| 1332 url, | |
| 1333 content::Referrer(referring_url.GetAsReferrer(), | |
| 1334 params_.referrer_policy)); | |
| 1335 DownloadManager* dlm = | 1334 DownloadManager* dlm = |
| 1336 BrowserContext::GetDownloadManager(browser_context_); | 1335 BrowserContext::GetDownloadManager(browser_context_); |
| 1337 scoped_ptr<DownloadUrlParameters> dl_params( | 1336 scoped_ptr<DownloadUrlParameters> dl_params( |
| 1338 DownloadUrlParameters::FromWebContents(source_web_contents_, url)); | 1337 DownloadUrlParameters::FromWebContents(source_web_contents_, url)); |
| 1339 dl_params->set_referrer(referrer); | 1338 dl_params->set_referrer(referrer); |
| 1340 dl_params->set_referrer_encoding(params_.frame_charset); | 1339 dl_params->set_referrer_encoding(params_.frame_charset); |
| 1341 dl_params->set_suggested_name(params_.suggested_filename); | 1340 dl_params->set_suggested_name(params_.suggested_filename); |
| 1342 dl_params->set_prompt(true); | 1341 dl_params->set_prompt(true); |
| 1343 dlm->DownloadUrl(dl_params.Pass()); | 1342 dlm->DownloadUrl(dl_params.Pass()); |
| 1344 break; | 1343 break; |
| 1345 } | 1344 } |
| 1346 | 1345 |
| 1347 case IDC_CONTENT_CONTEXT_SAVEAVAS: | 1346 case IDC_CONTENT_CONTEXT_SAVEAVAS: |
| 1348 case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: { | 1347 case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: { |
| 1349 if (params_.media_type == WebContextMenuData::MediaTypeCanvas) { | 1348 if (params_.media_type == WebContextMenuData::MediaTypeCanvas) { |
| 1350 source_web_contents_->GetRenderViewHost()->SaveImageAt( | 1349 source_web_contents_->GetRenderViewHost()->SaveImageAt( |
| 1351 params_.x, params_.y); | 1350 params_.x, params_.y); |
| 1352 } else { | 1351 } else { |
| 1353 // TODO(zino): We can use SaveImageAt() like a case of canvas. | 1352 // TODO(zino): We can use SaveImageAt() like a case of canvas. |
| 1354 RecordDownloadSource(DOWNLOAD_INITIATED_BY_CONTEXT_MENU); | 1353 RecordDownloadSource(DOWNLOAD_INITIATED_BY_CONTEXT_MENU); |
| 1355 const GURL& url = params_.src_url; | 1354 const GURL& url = params_.src_url; |
| 1356 const GURL& referring_url = | 1355 content::Referrer referrer = CreateSaveAsReferrer(url, params_); |
| 1357 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url; | |
| 1358 content::Referrer referrer = content::Referrer::SanitizeForRequest( | |
| 1359 url, | |
| 1360 content::Referrer(referring_url.GetAsReferrer(), | |
| 1361 params_.referrer_policy)); | |
| 1362 source_web_contents_->SaveFrame(url, referrer); | 1356 source_web_contents_->SaveFrame(url, referrer); |
| 1363 } | 1357 } |
| 1364 break; | 1358 break; |
| 1365 } | 1359 } |
| 1366 | 1360 |
| 1367 case IDC_CONTENT_CONTEXT_COPYLINKLOCATION: | 1361 case IDC_CONTENT_CONTEXT_COPYLINKLOCATION: |
| 1368 WriteURLToClipboard(params_.unfiltered_link_url); | 1362 WriteURLToClipboard(params_.unfiltered_link_url); |
| 1369 break; | 1363 break; |
| 1370 | 1364 |
| 1371 case IDC_CONTENT_CONTEXT_COPYIMAGELOCATION: | 1365 case IDC_CONTENT_CONTEXT_COPYIMAGELOCATION: |
| 1372 case IDC_CONTENT_CONTEXT_COPYAVLOCATION: | 1366 case IDC_CONTENT_CONTEXT_COPYAVLOCATION: |
| 1373 WriteURLToClipboard(params_.src_url); | 1367 WriteURLToClipboard(params_.src_url); |
| 1374 break; | 1368 break; |
| 1375 | 1369 |
| 1376 case IDC_CONTENT_CONTEXT_COPYIMAGE: | 1370 case IDC_CONTENT_CONTEXT_COPYIMAGE: |
| 1377 CopyImageAt(params_.x, params_.y); | 1371 CopyImageAt(params_.x, params_.y); |
| 1378 break; | 1372 break; |
| 1379 | 1373 |
| 1380 case IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE: | 1374 case IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE: |
| 1381 GetImageThumbnailForSearch(); | 1375 GetImageThumbnailForSearch(); |
| 1382 break; | 1376 break; |
| 1383 | 1377 |
| 1384 case IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB: | 1378 case IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB: |
| 1385 case IDC_CONTENT_CONTEXT_OPENAVNEWTAB: | 1379 case IDC_CONTENT_CONTEXT_OPENAVNEWTAB: |
| 1386 OpenURL( | 1380 OpenURL(params_.src_url, |
| 1387 params_.src_url, | 1381 GetDocumentURL(params_), |
| 1388 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url, | 1382 NEW_BACKGROUND_TAB, |
| 1389 NEW_BACKGROUND_TAB, content::PAGE_TRANSITION_LINK); | 1383 content::PAGE_TRANSITION_LINK); |
| 1390 break; | 1384 break; |
| 1391 | 1385 |
| 1392 case IDC_CONTENT_CONTEXT_PLAYPAUSE: { | 1386 case IDC_CONTENT_CONTEXT_PLAYPAUSE: { |
| 1393 bool play = !!(params_.media_flags & WebContextMenuData::MediaPaused); | 1387 bool play = !!(params_.media_flags & WebContextMenuData::MediaPaused); |
| 1394 if (play) { | 1388 if (play) { |
| 1395 content::RecordAction(UserMetricsAction("MediaContextMenu_Play")); | 1389 content::RecordAction(UserMetricsAction("MediaContextMenu_Play")); |
| 1396 } else { | 1390 } else { |
| 1397 content::RecordAction(UserMetricsAction("MediaContextMenu_Pause")); | 1391 content::RecordAction(UserMetricsAction("MediaContextMenu_Pause")); |
| 1398 } | 1392 } |
| 1399 MediaPlayerActionAt(gfx::Point(params_.x, params_.y), | 1393 MediaPlayerActionAt(gfx::Point(params_.x, params_.y), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1430 WebMediaPlayerAction( | 1424 WebMediaPlayerAction( |
| 1431 WebMediaPlayerAction::Controls, | 1425 WebMediaPlayerAction::Controls, |
| 1432 !IsCommandIdChecked(IDC_CONTENT_CONTEXT_CONTROLS))); | 1426 !IsCommandIdChecked(IDC_CONTENT_CONTEXT_CONTROLS))); |
| 1433 break; | 1427 break; |
| 1434 | 1428 |
| 1435 case IDC_CONTENT_CONTEXT_ROTATECW: | 1429 case IDC_CONTENT_CONTEXT_ROTATECW: |
| 1436 content::RecordAction( | 1430 content::RecordAction( |
| 1437 UserMetricsAction("PluginContextMenu_RotateClockwise")); | 1431 UserMetricsAction("PluginContextMenu_RotateClockwise")); |
| 1438 PluginActionAt( | 1432 PluginActionAt( |
| 1439 gfx::Point(params_.x, params_.y), | 1433 gfx::Point(params_.x, params_.y), |
| 1440 WebPluginAction( | 1434 WebPluginAction(WebPluginAction::Rotate90Clockwise, true)); |
| 1441 WebPluginAction::Rotate90Clockwise, | |
| 1442 true)); | |
| 1443 break; | 1435 break; |
| 1444 | 1436 |
| 1445 case IDC_CONTENT_CONTEXT_ROTATECCW: | 1437 case IDC_CONTENT_CONTEXT_ROTATECCW: |
| 1446 content::RecordAction( | 1438 content::RecordAction( |
| 1447 UserMetricsAction("PluginContextMenu_RotateCounterclockwise")); | 1439 UserMetricsAction("PluginContextMenu_RotateCounterclockwise")); |
| 1448 PluginActionAt( | 1440 PluginActionAt( |
| 1449 gfx::Point(params_.x, params_.y), | 1441 gfx::Point(params_.x, params_.y), |
| 1450 WebPluginAction( | 1442 WebPluginAction(WebPluginAction::Rotate90Counterclockwise, true)); |
| 1451 WebPluginAction::Rotate90Counterclockwise, | |
| 1452 true)); | |
| 1453 break; | 1443 break; |
| 1454 | 1444 |
| 1455 case IDC_BACK: | 1445 case IDC_BACK: |
| 1456 source_web_contents_->GetController().GoBack(); | 1446 source_web_contents_->GetController().GoBack(); |
| 1457 break; | 1447 break; |
| 1458 | 1448 |
| 1459 case IDC_FORWARD: | 1449 case IDC_FORWARD: |
| 1460 source_web_contents_->GetController().GoForward(); | 1450 source_web_contents_->GetController().GoForward(); |
| 1461 break; | 1451 break; |
| 1462 | 1452 |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1786 source_web_contents_->GetRenderViewHost()-> | 1776 source_web_contents_->GetRenderViewHost()-> |
| 1787 ExecuteMediaPlayerActionAtLocation(location, action); | 1777 ExecuteMediaPlayerActionAtLocation(location, action); |
| 1788 } | 1778 } |
| 1789 | 1779 |
| 1790 void RenderViewContextMenu::PluginActionAt( | 1780 void RenderViewContextMenu::PluginActionAt( |
| 1791 const gfx::Point& location, | 1781 const gfx::Point& location, |
| 1792 const WebPluginAction& action) { | 1782 const WebPluginAction& action) { |
| 1793 source_web_contents_->GetRenderViewHost()-> | 1783 source_web_contents_->GetRenderViewHost()-> |
| 1794 ExecutePluginActionAtLocation(location, action); | 1784 ExecutePluginActionAtLocation(location, action); |
| 1795 } | 1785 } |
| OLD | NEW |