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 612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
623 ContextMenuContentType::ITEM_GROUP_MEDIA_VIDEO)) { | 623 ContextMenuContentType::ITEM_GROUP_MEDIA_VIDEO)) { |
624 AppendVideoItems(); | 624 AppendVideoItems(); |
625 } | 625 } |
626 | 626 |
627 if (content_type_->SupportsGroup( | 627 if (content_type_->SupportsGroup( |
628 ContextMenuContentType::ITEM_GROUP_MEDIA_AUDIO)) { | 628 ContextMenuContentType::ITEM_GROUP_MEDIA_AUDIO)) { |
629 AppendAudioItems(); | 629 AppendAudioItems(); |
630 } | 630 } |
631 | 631 |
632 if (content_type_->SupportsGroup( | 632 if (content_type_->SupportsGroup( |
| 633 ContextMenuContentType::ITEM_GROUP_MEDIA_CANVAS)) { |
| 634 AppendCanvasItems(); |
| 635 } |
| 636 |
| 637 if (content_type_->SupportsGroup( |
633 ContextMenuContentType::ITEM_GROUP_MEDIA_PLUGIN)) { | 638 ContextMenuContentType::ITEM_GROUP_MEDIA_PLUGIN)) { |
634 AppendPluginItems(); | 639 AppendPluginItems(); |
635 } | 640 } |
636 | 641 |
637 // ITEM_GROUP_MEDIA_FILE has no specific items. | 642 // ITEM_GROUP_MEDIA_FILE has no specific items. |
638 | 643 |
639 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_EDITABLE)) | 644 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_EDITABLE)) |
640 AppendEditableItems(); | 645 AppendEditableItems(); |
641 | 646 |
642 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_COPY)) { | 647 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_COPY)) { |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 AppendMediaItems(); | 841 AppendMediaItems(); |
837 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | 842 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
838 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, | 843 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, |
839 IDS_CONTENT_CONTEXT_SAVEAUDIOAS); | 844 IDS_CONTENT_CONTEXT_SAVEAUDIOAS); |
840 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, | 845 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, |
841 IDS_CONTENT_CONTEXT_COPYAUDIOLOCATION); | 846 IDS_CONTENT_CONTEXT_COPYAUDIOLOCATION); |
842 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, | 847 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, |
843 IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB); | 848 IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB); |
844 } | 849 } |
845 | 850 |
| 851 void RenderViewContextMenu::AppendCanvasItems() { |
| 852 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEIMAGEAS, |
| 853 IDS_CONTENT_CONTEXT_SAVEIMAGEAS); |
| 854 |
| 855 // TODO(zino): We should support 'copy image' for canvas. |
| 856 // http://crbug.com/369092 |
| 857 } |
| 858 |
846 void RenderViewContextMenu::AppendVideoItems() { | 859 void RenderViewContextMenu::AppendVideoItems() { |
847 AppendMediaItems(); | 860 AppendMediaItems(); |
848 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); | 861 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
849 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, | 862 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVEAVAS, |
850 IDS_CONTENT_CONTEXT_SAVEVIDEOAS); | 863 IDS_CONTENT_CONTEXT_SAVEVIDEOAS); |
851 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, | 864 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPYAVLOCATION, |
852 IDS_CONTENT_CONTEXT_COPYVIDEOLOCATION); | 865 IDS_CONTENT_CONTEXT_COPYVIDEOLOCATION); |
853 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, | 866 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENAVNEWTAB, |
854 IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB); | 867 IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB); |
855 } | 868 } |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1218 ProfileIOData::IsHandledProtocol(params_.link_url.scheme()); | 1231 ProfileIOData::IsHandledProtocol(params_.link_url.scheme()); |
1219 } | 1232 } |
1220 | 1233 |
1221 case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: { | 1234 case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: { |
1222 PrefService* local_state = g_browser_process->local_state(); | 1235 PrefService* local_state = g_browser_process->local_state(); |
1223 DCHECK(local_state); | 1236 DCHECK(local_state); |
1224 // Test if file-selection dialogs are forbidden by policy. | 1237 // Test if file-selection dialogs are forbidden by policy. |
1225 if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs)) | 1238 if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs)) |
1226 return false; | 1239 return false; |
1227 | 1240 |
| 1241 if (params_.media_type == WebContextMenuData::MediaTypeCanvas) |
| 1242 return true; |
| 1243 |
1228 return params_.src_url.is_valid() && | 1244 return params_.src_url.is_valid() && |
1229 ProfileIOData::IsHandledProtocol(params_.src_url.scheme()); | 1245 ProfileIOData::IsHandledProtocol(params_.src_url.scheme()); |
1230 } | 1246 } |
1231 | 1247 |
1232 // The images shown in the most visited thumbnails can't be opened or | 1248 // The images shown in the most visited thumbnails can't be opened or |
1233 // searched for conventionally. | 1249 // searched for conventionally. |
1234 case IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB: | 1250 case IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB: |
1235 case IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE: | 1251 case IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE: |
1236 return params_.src_url.is_valid() && | 1252 return params_.src_url.is_valid() && |
1237 (params_.src_url.scheme() != content::kChromeUIScheme); | 1253 (params_.src_url.scheme() != content::kChromeUIScheme); |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1530 dl_params->set_referrer( | 1546 dl_params->set_referrer( |
1531 content::Referrer(referrer, params_.referrer_policy)); | 1547 content::Referrer(referrer, params_.referrer_policy)); |
1532 dl_params->set_referrer_encoding(params_.frame_charset); | 1548 dl_params->set_referrer_encoding(params_.frame_charset); |
1533 dl_params->set_prompt(true); | 1549 dl_params->set_prompt(true); |
1534 dlm->DownloadUrl(dl_params.Pass()); | 1550 dlm->DownloadUrl(dl_params.Pass()); |
1535 break; | 1551 break; |
1536 } | 1552 } |
1537 | 1553 |
1538 case IDC_CONTENT_CONTEXT_SAVEAVAS: | 1554 case IDC_CONTENT_CONTEXT_SAVEAVAS: |
1539 case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: { | 1555 case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: { |
1540 RecordDownloadSource(DOWNLOAD_INITIATED_BY_CONTEXT_MENU); | 1556 if (params_.media_type == WebContextMenuData::MediaTypeCanvas) { |
1541 const GURL& referrer = | 1557 source_web_contents_->GetRenderViewHost()->SaveImageAt( |
1542 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url; | 1558 params_.x, params_.y); |
1543 const GURL& url = params_.src_url; | 1559 } else { |
1544 source_web_contents_->SaveFrame(url, content::Referrer( | 1560 // TODO(zino): We can use SaveImageAt() like a case of canvas. |
1545 referrer, params_.referrer_policy)); | 1561 RecordDownloadSource(DOWNLOAD_INITIATED_BY_CONTEXT_MENU); |
| 1562 const GURL& referrer = |
| 1563 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url; |
| 1564 const GURL& url = params_.src_url; |
| 1565 source_web_contents_->SaveFrame(url, content::Referrer( |
| 1566 referrer, params_.referrer_policy)); |
| 1567 } |
1546 break; | 1568 break; |
1547 } | 1569 } |
1548 | 1570 |
1549 case IDC_CONTENT_CONTEXT_COPYLINKLOCATION: | 1571 case IDC_CONTENT_CONTEXT_COPYLINKLOCATION: |
1550 WriteURLToClipboard(params_.unfiltered_link_url); | 1572 WriteURLToClipboard(params_.unfiltered_link_url); |
1551 break; | 1573 break; |
1552 | 1574 |
1553 case IDC_CONTENT_CONTEXT_COPYIMAGELOCATION: | 1575 case IDC_CONTENT_CONTEXT_COPYIMAGELOCATION: |
1554 case IDC_CONTENT_CONTEXT_COPYAVLOCATION: | 1576 case IDC_CONTENT_CONTEXT_COPYAVLOCATION: |
1555 WriteURLToClipboard(params_.src_url); | 1577 WriteURLToClipboard(params_.src_url); |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2021 source_web_contents_->GetRenderViewHost()-> | 2043 source_web_contents_->GetRenderViewHost()-> |
2022 ExecuteMediaPlayerActionAtLocation(location, action); | 2044 ExecuteMediaPlayerActionAtLocation(location, action); |
2023 } | 2045 } |
2024 | 2046 |
2025 void RenderViewContextMenu::PluginActionAt( | 2047 void RenderViewContextMenu::PluginActionAt( |
2026 const gfx::Point& location, | 2048 const gfx::Point& location, |
2027 const WebPluginAction& action) { | 2049 const WebPluginAction& action) { |
2028 source_web_contents_->GetRenderViewHost()-> | 2050 source_web_contents_->GetRenderViewHost()-> |
2029 ExecutePluginActionAtLocation(location, action); | 2051 ExecutePluginActionAtLocation(location, action); |
2030 } | 2052 } |
OLD | NEW |