OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <algorithm> | 5 #include <algorithm> |
6 #include <set> | 6 #include <set> |
7 | 7 |
8 #include "chrome/browser/tab_contents/render_view_context_menu.h" | 8 #include "chrome/browser/tab_contents/render_view_context_menu.h" |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 #include "chrome/browser/page_info_window.h" | 29 #include "chrome/browser/page_info_window.h" |
30 #include "chrome/browser/platform_util.h" | 30 #include "chrome/browser/platform_util.h" |
31 #include "chrome/browser/prefs/pref_member.h" | 31 #include "chrome/browser/prefs/pref_member.h" |
32 #include "chrome/browser/prefs/pref_service.h" | 32 #include "chrome/browser/prefs/pref_service.h" |
33 #include "chrome/browser/printing/print_preview_tab_controller.h" | 33 #include "chrome/browser/printing/print_preview_tab_controller.h" |
34 #include "chrome/browser/profiles/profile.h" | 34 #include "chrome/browser/profiles/profile.h" |
35 #include "chrome/browser/search_engines/template_url.h" | 35 #include "chrome/browser/search_engines/template_url.h" |
36 #include "chrome/browser/search_engines/template_url_model.h" | 36 #include "chrome/browser/search_engines/template_url_model.h" |
37 #include "chrome/browser/spellcheck_host.h" | 37 #include "chrome/browser/spellcheck_host.h" |
38 #include "chrome/browser/spellchecker_platform_engine.h" | 38 #include "chrome/browser/spellchecker_platform_engine.h" |
| 39 #include "chrome/browser/tab_contents/introducer_handler.h" |
39 #include "chrome/browser/translate/translate_prefs.h" | 40 #include "chrome/browser/translate/translate_prefs.h" |
40 #include "chrome/browser/translate/translate_manager.h" | 41 #include "chrome/browser/translate/translate_manager.h" |
41 #include "chrome/common/chrome_constants.h" | 42 #include "chrome/common/chrome_constants.h" |
42 #include "chrome/common/chrome_switches.h" | 43 #include "chrome/common/chrome_switches.h" |
43 #include "chrome/common/content_restriction.h" | 44 #include "chrome/common/content_restriction.h" |
44 #include "chrome/common/pref_names.h" | 45 #include "chrome/common/pref_names.h" |
45 #include "chrome/common/print_messages.h" | 46 #include "chrome/common/print_messages.h" |
46 #include "chrome/common/url_constants.h" | 47 #include "chrome/common/url_constants.h" |
47 #include "content/browser/child_process_security_policy.h" | 48 #include "content/browser/child_process_security_policy.h" |
48 #include "content/browser/renderer_host/render_view_host.h" | 49 #include "content/browser/renderer_host/render_view_host.h" |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 bool has_link = !params_.link_url.is_empty(); | 451 bool has_link = !params_.link_url.is_empty(); |
451 bool has_selection = !params_.selection_text.empty(); | 452 bool has_selection = !params_.selection_text.empty(); |
452 | 453 |
453 if (AppendCustomItems()) { | 454 if (AppendCustomItems()) { |
454 // Don't add items for Pepper menu. | 455 // Don't add items for Pepper menu. |
455 if (!params_.custom_context.is_pepper_menu) | 456 if (!params_.custom_context.is_pepper_menu) |
456 AppendDeveloperItems(); | 457 AppendDeveloperItems(); |
457 return; | 458 return; |
458 } | 459 } |
459 | 460 |
| 461 if (IntroducerService::InitMenu(source_tab_contents_, profile_, params_, |
| 462 &introducer_commands_, &menu_model_)) { |
| 463 return; |
| 464 } |
| 465 |
460 // When no special node or text is selected and selection has no link, | 466 // When no special node or text is selected and selection has no link, |
461 // show page items. | 467 // show page items. |
462 bool is_devtools = false; | 468 bool is_devtools = false; |
463 if (params_.media_type == WebContextMenuData::MediaTypeNone && | 469 if (params_.media_type == WebContextMenuData::MediaTypeNone && |
464 !has_link && | 470 !has_link && |
465 !params_.is_editable && | 471 !params_.is_editable && |
466 !has_selection) { | 472 !has_selection) { |
467 if (!params_.page_url.is_empty()) { | 473 if (!params_.page_url.is_empty()) { |
468 is_devtools = IsDevToolsURL(params_.page_url); | 474 is_devtools = IsDevToolsURL(params_.page_url); |
469 if (!is_devtools && !IsInternalResourcesURL(params_.page_url)) { | 475 if (!is_devtools && !IsInternalResourcesURL(params_.page_url)) { |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
862 } | 868 } |
863 | 869 |
864 // Extension items. | 870 // Extension items. |
865 if (id >= IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST && | 871 if (id >= IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST && |
866 id <= IDC_EXTENSIONS_CONTEXT_CUSTOM_LAST) { | 872 id <= IDC_EXTENSIONS_CONTEXT_CUSTOM_LAST) { |
867 // In the future we may add APIs for extensions to disable items, but for | 873 // In the future we may add APIs for extensions to disable items, but for |
868 // now all items are implicitly enabled. | 874 // now all items are implicitly enabled. |
869 return true; | 875 return true; |
870 } | 876 } |
871 | 877 |
| 878 // Introducer items. |
| 879 if (id >= IDC_INTRODUCER_CONTEXT_CUSTOM_FIRST && |
| 880 id <= IDC_INTRODUCER_CONTEXT_CUSTOM_LAST) { |
| 881 return true; |
| 882 } |
| 883 |
872 switch (id) { | 884 switch (id) { |
873 case IDC_BACK: | 885 case IDC_BACK: |
874 return source_tab_contents_->controller().CanGoBack(); | 886 return source_tab_contents_->controller().CanGoBack(); |
875 | 887 |
876 case IDC_FORWARD: | 888 case IDC_FORWARD: |
877 return source_tab_contents_->controller().CanGoForward(); | 889 return source_tab_contents_->controller().CanGoForward(); |
878 | 890 |
879 case IDC_RELOAD: | 891 case IDC_RELOAD: |
880 return source_tab_contents_->delegate() && | 892 return source_tab_contents_->delegate() && |
881 source_tab_contents_->delegate()->CanReloadContents( | 893 source_tab_contents_->delegate()->CanReloadContents( |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1097 // Extension items. | 1109 // Extension items. |
1098 if (id >= IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST && | 1110 if (id >= IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST && |
1099 id <= IDC_EXTENSIONS_CONTEXT_CUSTOM_LAST) { | 1111 id <= IDC_EXTENSIONS_CONTEXT_CUSTOM_LAST) { |
1100 ExtensionMenuItem* item = GetExtensionMenuItem(id); | 1112 ExtensionMenuItem* item = GetExtensionMenuItem(id); |
1101 if (item) | 1113 if (item) |
1102 return item->checked(); | 1114 return item->checked(); |
1103 else | 1115 else |
1104 return false; | 1116 return false; |
1105 } | 1117 } |
1106 | 1118 |
| 1119 // Introducer items. |
| 1120 if (id >= IDC_INTRODUCER_CONTEXT_CUSTOM_FIRST && |
| 1121 id <= IDC_INTRODUCER_CONTEXT_CUSTOM_LAST) { |
| 1122 return false; |
| 1123 } |
| 1124 |
1107 #if defined(OS_MACOSX) | 1125 #if defined(OS_MACOSX) |
1108 if (id == IDC_WRITING_DIRECTION_DEFAULT) | 1126 if (id == IDC_WRITING_DIRECTION_DEFAULT) |
1109 return params_.writing_direction_default & | 1127 return params_.writing_direction_default & |
1110 WebContextMenuData::CheckableMenuItemChecked; | 1128 WebContextMenuData::CheckableMenuItemChecked; |
1111 if (id == IDC_WRITING_DIRECTION_RTL) | 1129 if (id == IDC_WRITING_DIRECTION_RTL) |
1112 return params_.writing_direction_right_to_left & | 1130 return params_.writing_direction_right_to_left & |
1113 WebContextMenuData::CheckableMenuItemChecked; | 1131 WebContextMenuData::CheckableMenuItemChecked; |
1114 if (id == IDC_WRITING_DIRECTION_LTR) | 1132 if (id == IDC_WRITING_DIRECTION_LTR) |
1115 return params_.writing_direction_left_to_right & | 1133 return params_.writing_direction_left_to_right & |
1116 WebContextMenuData::CheckableMenuItemChecked; | 1134 WebContextMenuData::CheckableMenuItemChecked; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1167 profile_->GetExtensionService()->menu_manager(); | 1185 profile_->GetExtensionService()->menu_manager(); |
1168 std::map<int, ExtensionMenuItem::Id>::const_iterator i = | 1186 std::map<int, ExtensionMenuItem::Id>::const_iterator i = |
1169 extension_item_map_.find(id); | 1187 extension_item_map_.find(id); |
1170 if (i != extension_item_map_.end()) { | 1188 if (i != extension_item_map_.end()) { |
1171 manager->ExecuteCommand(profile_, source_tab_contents_, params_, | 1189 manager->ExecuteCommand(profile_, source_tab_contents_, params_, |
1172 i->second); | 1190 i->second); |
1173 } | 1191 } |
1174 return; | 1192 return; |
1175 } | 1193 } |
1176 | 1194 |
| 1195 // Process Introducer menu items. |
| 1196 if (id >= IDC_INTRODUCER_CONTEXT_CUSTOM_FIRST && |
| 1197 id <= IDC_INTRODUCER_CONTEXT_CUSTOM_LAST) { |
| 1198 if (IntroducerService::Introduce(source_tab_contents_, profile_, params_, |
| 1199 introducer_commands_[id])) { |
| 1200 params_.introduction_context.request_id = 0; |
| 1201 } |
| 1202 return; |
| 1203 } |
1177 | 1204 |
1178 switch (id) { | 1205 switch (id) { |
1179 case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB: | 1206 case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB: |
1180 OpenURL(params_.link_url, | 1207 OpenURL(params_.link_url, |
1181 source_tab_contents_->delegate() && | 1208 source_tab_contents_->delegate() && |
1182 source_tab_contents_->delegate()->IsApplication() ? | 1209 source_tab_contents_->delegate()->IsApplication() ? |
1183 NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB, | 1210 NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB, |
1184 PageTransition::LINK); | 1211 PageTransition::LINK); |
1185 break; | 1212 break; |
1186 | 1213 |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1463 | 1490 |
1464 default: | 1491 default: |
1465 NOTREACHED(); | 1492 NOTREACHED(); |
1466 break; | 1493 break; |
1467 } | 1494 } |
1468 } | 1495 } |
1469 | 1496 |
1470 void RenderViewContextMenu::MenuClosed() { | 1497 void RenderViewContextMenu::MenuClosed() { |
1471 source_tab_contents_->render_view_host()->ContextMenuClosed( | 1498 source_tab_contents_->render_view_host()->ContextMenuClosed( |
1472 params_.custom_context); | 1499 params_.custom_context); |
| 1500 if (params_.introduction_context.request_id) { |
| 1501 IntroducerService::Dismiss(source_tab_contents_, |
| 1502 params_.introduction_context.request_id); |
| 1503 } |
1473 } | 1504 } |
1474 | 1505 |
1475 bool RenderViewContextMenu::IsDevCommandEnabled(int id) const { | 1506 bool RenderViewContextMenu::IsDevCommandEnabled(int id) const { |
1476 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 1507 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
1477 if (command_line.HasSwitch(switches::kAlwaysEnableDevTools)) | 1508 if (command_line.HasSwitch(switches::kAlwaysEnableDevTools)) |
1478 return true; | 1509 return true; |
1479 | 1510 |
1480 NavigationEntry *active_entry = | 1511 NavigationEntry *active_entry = |
1481 source_tab_contents_->controller().GetActiveEntry(); | 1512 source_tab_contents_->controller().GetActiveEntry(); |
1482 if (!active_entry) | 1513 if (!active_entry) |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1538 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), | 1569 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), |
1539 g_browser_process->clipboard()); | 1570 g_browser_process->clipboard()); |
1540 } | 1571 } |
1541 | 1572 |
1542 void RenderViewContextMenu::MediaPlayerActionAt( | 1573 void RenderViewContextMenu::MediaPlayerActionAt( |
1543 const gfx::Point& location, | 1574 const gfx::Point& location, |
1544 const WebMediaPlayerAction& action) { | 1575 const WebMediaPlayerAction& action) { |
1545 source_tab_contents_->render_view_host()->MediaPlayerActionAt( | 1576 source_tab_contents_->render_view_host()->MediaPlayerActionAt( |
1546 location, action); | 1577 location, action); |
1547 } | 1578 } |
OLD | NEW |