| 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 994 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1005 | 1005 |
| 1006 if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST && | 1006 if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST && |
| 1007 id <= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST) { | 1007 id <= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST) { |
| 1008 return true; | 1008 return true; |
| 1009 } | 1009 } |
| 1010 | 1010 |
| 1011 IncognitoModePrefs::Availability incognito_avail = | 1011 IncognitoModePrefs::Availability incognito_avail = |
| 1012 IncognitoModePrefs::GetAvailability(prefs); | 1012 IncognitoModePrefs::GetAvailability(prefs); |
| 1013 switch (id) { | 1013 switch (id) { |
| 1014 case IDC_BACK: | 1014 case IDC_BACK: |
| 1015 return embedded_web_contents_->GetController().CanGoBack(); | 1015 return embedder_web_contents_->GetController().CanGoBack(); |
| 1016 | 1016 |
| 1017 case IDC_FORWARD: | 1017 case IDC_FORWARD: |
| 1018 return embedded_web_contents_->GetController().CanGoForward(); | 1018 return embedder_web_contents_->GetController().CanGoForward(); |
| 1019 | 1019 |
| 1020 case IDC_RELOAD: { | 1020 case IDC_RELOAD: { |
| 1021 CoreTabHelper* core_tab_helper = | 1021 CoreTabHelper* core_tab_helper = |
| 1022 CoreTabHelper::FromWebContents(embedded_web_contents_); | 1022 CoreTabHelper::FromWebContents(embedder_web_contents_); |
| 1023 if (!core_tab_helper) | 1023 if (!core_tab_helper) |
| 1024 return false; | 1024 return false; |
| 1025 | 1025 |
| 1026 CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate(); | 1026 CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate(); |
| 1027 return !core_delegate || | 1027 return !core_delegate || |
| 1028 core_delegate->CanReloadContents(embedded_web_contents_); | 1028 core_delegate->CanReloadContents(embedder_web_contents_); |
| 1029 } | 1029 } |
| 1030 | 1030 |
| 1031 case IDC_VIEW_SOURCE: | 1031 case IDC_VIEW_SOURCE: |
| 1032 case IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE: | 1032 case IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE: |
| 1033 return embedded_web_contents_->GetController().CanViewSource(); | 1033 return embedder_web_contents_->GetController().CanViewSource(); |
| 1034 | 1034 |
| 1035 case IDC_CONTENT_CONTEXT_INSPECTELEMENT: | 1035 case IDC_CONTENT_CONTEXT_INSPECTELEMENT: |
| 1036 case IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE: | 1036 case IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE: |
| 1037 case IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP: | 1037 case IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP: |
| 1038 case IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP: | 1038 case IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP: |
| 1039 return IsDevCommandEnabled(id); | 1039 return IsDevCommandEnabled(id); |
| 1040 | 1040 |
| 1041 case IDC_CONTENT_CONTEXT_VIEWPAGEINFO: | 1041 case IDC_CONTENT_CONTEXT_VIEWPAGEINFO: |
| 1042 if (embedded_web_contents_->GetController().GetVisibleEntry() == NULL) | 1042 if (embedder_web_contents_->GetController().GetVisibleEntry() == NULL) |
| 1043 return false; | 1043 return false; |
| 1044 // Disabled if no browser is associated (e.g. desktop notifications). | 1044 // Disabled if no browser is associated (e.g. desktop notifications). |
| 1045 if (chrome::FindBrowserWithWebContents(embedded_web_contents_) == NULL) | 1045 if (chrome::FindBrowserWithWebContents(embedder_web_contents_) == NULL) |
| 1046 return false; | 1046 return false; |
| 1047 return true; | 1047 return true; |
| 1048 | 1048 |
| 1049 case IDC_CONTENT_CONTEXT_TRANSLATE: { | 1049 case IDC_CONTENT_CONTEXT_TRANSLATE: { |
| 1050 ChromeTranslateClient* chrome_translate_client = | 1050 ChromeTranslateClient* chrome_translate_client = |
| 1051 ChromeTranslateClient::FromWebContents(embedded_web_contents_); | 1051 ChromeTranslateClient::FromWebContents(embedder_web_contents_); |
| 1052 if (!chrome_translate_client) | 1052 if (!chrome_translate_client) |
| 1053 return false; | 1053 return false; |
| 1054 std::string original_lang = | 1054 std::string original_lang = |
| 1055 chrome_translate_client->GetLanguageState().original_language(); | 1055 chrome_translate_client->GetLanguageState().original_language(); |
| 1056 std::string target_lang = g_browser_process->GetApplicationLocale(); | 1056 std::string target_lang = g_browser_process->GetApplicationLocale(); |
| 1057 target_lang = | 1057 target_lang = |
| 1058 translate::TranslateDownloadManager::GetLanguageCode(target_lang); | 1058 translate::TranslateDownloadManager::GetLanguageCode(target_lang); |
| 1059 // Note that we intentionally enable the menu even if the original and | 1059 // Note that we intentionally enable the menu even if the original and |
| 1060 // target languages are identical. This is to give a way to user to | 1060 // target languages are identical. This is to give a way to user to |
| 1061 // translate a page that might contains text fragments in a different | 1061 // translate a page that might contains text fragments in a different |
| 1062 // language. | 1062 // language. |
| 1063 return ((params_.edit_flags & WebContextMenuData::CanTranslate) != 0) && | 1063 return ((params_.edit_flags & WebContextMenuData::CanTranslate) != 0) && |
| 1064 !original_lang.empty() && // Did we receive the page language yet? | 1064 !original_lang.empty() && // Did we receive the page language yet? |
| 1065 !chrome_translate_client->GetLanguageState().IsPageTranslated() && | 1065 !chrome_translate_client->GetLanguageState().IsPageTranslated() && |
| 1066 !embedded_web_contents_->GetInterstitialPage() && | 1066 !embedder_web_contents_->GetInterstitialPage() && |
| 1067 // There are some application locales which can't be used as a | 1067 // There are some application locales which can't be used as a |
| 1068 // target language for translation. | 1068 // target language for translation. |
| 1069 translate::TranslateDownloadManager::IsSupportedLanguage( | 1069 translate::TranslateDownloadManager::IsSupportedLanguage( |
| 1070 target_lang) && | 1070 target_lang) && |
| 1071 // Disable on the Instant Extended NTP. | 1071 // Disable on the Instant Extended NTP. |
| 1072 !chrome::IsInstantNTP(embedded_web_contents_); | 1072 !chrome::IsInstantNTP(embedder_web_contents_); |
| 1073 } | 1073 } |
| 1074 | 1074 |
| 1075 case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB: | 1075 case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB: |
| 1076 case IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW: | 1076 case IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW: |
| 1077 return params_.link_url.is_valid(); | 1077 return params_.link_url.is_valid(); |
| 1078 | 1078 |
| 1079 case IDC_CONTENT_CONTEXT_COPYLINKLOCATION: | 1079 case IDC_CONTENT_CONTEXT_COPYLINKLOCATION: |
| 1080 return params_.unfiltered_link_url.is_valid(); | 1080 return params_.unfiltered_link_url.is_valid(); |
| 1081 | 1081 |
| 1082 case IDC_CONTENT_CONTEXT_SAVELINKAS: { | 1082 case IDC_CONTENT_CONTEXT_SAVELINKAS: { |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1157 } | 1157 } |
| 1158 | 1158 |
| 1159 case IDC_CONTENT_CONTEXT_OPENAVNEWTAB: | 1159 case IDC_CONTENT_CONTEXT_OPENAVNEWTAB: |
| 1160 // Currently, a media element can be opened in a new tab iff it can | 1160 // Currently, a media element can be opened in a new tab iff it can |
| 1161 // be saved. So rather than duplicating the MediaCanSave flag, we rely | 1161 // be saved. So rather than duplicating the MediaCanSave flag, we rely |
| 1162 // on that here. | 1162 // on that here. |
| 1163 return !!(params_.media_flags & WebContextMenuData::MediaCanSave); | 1163 return !!(params_.media_flags & WebContextMenuData::MediaCanSave); |
| 1164 | 1164 |
| 1165 case IDC_SAVE_PAGE: { | 1165 case IDC_SAVE_PAGE: { |
| 1166 CoreTabHelper* core_tab_helper = | 1166 CoreTabHelper* core_tab_helper = |
| 1167 CoreTabHelper::FromWebContents(embedded_web_contents_); | 1167 CoreTabHelper::FromWebContents(embedder_web_contents_); |
| 1168 if (!core_tab_helper) | 1168 if (!core_tab_helper) |
| 1169 return false; | 1169 return false; |
| 1170 | 1170 |
| 1171 CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate(); | 1171 CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate(); |
| 1172 if (core_delegate && | 1172 if (core_delegate && |
| 1173 !core_delegate->CanSaveContents(embedded_web_contents_)) | 1173 !core_delegate->CanSaveContents(embedder_web_contents_)) |
| 1174 return false; | 1174 return false; |
| 1175 | 1175 |
| 1176 PrefService* local_state = g_browser_process->local_state(); | 1176 PrefService* local_state = g_browser_process->local_state(); |
| 1177 DCHECK(local_state); | 1177 DCHECK(local_state); |
| 1178 // Test if file-selection dialogs are forbidden by policy. | 1178 // Test if file-selection dialogs are forbidden by policy. |
| 1179 if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs)) | 1179 if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs)) |
| 1180 return false; | 1180 return false; |
| 1181 | 1181 |
| 1182 // We save the last committed entry (which the user is looking at), as | 1182 // We save the last committed entry (which the user is looking at), as |
| 1183 // opposed to any pending URL that hasn't committed yet. | 1183 // opposed to any pending URL that hasn't committed yet. |
| 1184 NavigationEntry* entry = | 1184 NavigationEntry* entry = |
| 1185 embedded_web_contents_->GetController().GetLastCommittedEntry(); | 1185 embedder_web_contents_->GetController().GetLastCommittedEntry(); |
| 1186 return content::IsSavableURL(entry ? entry->GetURL() : GURL()); | 1186 return content::IsSavableURL(entry ? entry->GetURL() : GURL()); |
| 1187 } | 1187 } |
| 1188 | 1188 |
| 1189 case IDC_CONTENT_CONTEXT_RELOADFRAME: | 1189 case IDC_CONTENT_CONTEXT_RELOADFRAME: |
| 1190 return params_.frame_url.is_valid(); | 1190 return params_.frame_url.is_valid(); |
| 1191 | 1191 |
| 1192 case IDC_CONTENT_CONTEXT_UNDO: | 1192 case IDC_CONTENT_CONTEXT_UNDO: |
| 1193 return !!(params_.edit_flags & WebContextMenuData::CanUndo); | 1193 return !!(params_.edit_flags & WebContextMenuData::CanUndo); |
| 1194 | 1194 |
| 1195 case IDC_CONTENT_CONTEXT_REDO: | 1195 case IDC_CONTENT_CONTEXT_REDO: |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1461 | 1461 |
| 1462 case IDC_CONTENT_CONTEXT_ROTATECCW: | 1462 case IDC_CONTENT_CONTEXT_ROTATECCW: |
| 1463 content::RecordAction( | 1463 content::RecordAction( |
| 1464 UserMetricsAction("PluginContextMenu_RotateCounterclockwise")); | 1464 UserMetricsAction("PluginContextMenu_RotateCounterclockwise")); |
| 1465 PluginActionAt( | 1465 PluginActionAt( |
| 1466 gfx::Point(params_.x, params_.y), | 1466 gfx::Point(params_.x, params_.y), |
| 1467 WebPluginAction(WebPluginAction::Rotate90Counterclockwise, true)); | 1467 WebPluginAction(WebPluginAction::Rotate90Counterclockwise, true)); |
| 1468 break; | 1468 break; |
| 1469 | 1469 |
| 1470 case IDC_BACK: | 1470 case IDC_BACK: |
| 1471 embedded_web_contents_->GetController().GoBack(); | 1471 embedder_web_contents_->GetController().GoBack(); |
| 1472 break; | 1472 break; |
| 1473 | 1473 |
| 1474 case IDC_FORWARD: | 1474 case IDC_FORWARD: |
| 1475 embedded_web_contents_->GetController().GoForward(); | 1475 embedder_web_contents_->GetController().GoForward(); |
| 1476 break; | 1476 break; |
| 1477 | 1477 |
| 1478 case IDC_SAVE_PAGE: | 1478 case IDC_SAVE_PAGE: |
| 1479 embedded_web_contents_->OnSavePage(); | 1479 embedder_web_contents_->OnSavePage(); |
| 1480 break; | 1480 break; |
| 1481 | 1481 |
| 1482 case IDC_RELOAD: | 1482 case IDC_RELOAD: |
| 1483 embedded_web_contents_->GetController().Reload(true); | 1483 embedder_web_contents_->GetController().Reload(true); |
| 1484 break; | 1484 break; |
| 1485 | 1485 |
| 1486 case IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP: { | 1486 case IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP: { |
| 1487 const Extension* platform_app = GetExtension(); | 1487 const Extension* platform_app = GetExtension(); |
| 1488 DCHECK(platform_app); | 1488 DCHECK(platform_app); |
| 1489 DCHECK(platform_app->is_platform_app()); | 1489 DCHECK(platform_app->is_platform_app()); |
| 1490 | 1490 |
| 1491 extensions::ExtensionSystem::Get(browser_context_) | 1491 extensions::ExtensionSystem::Get(browser_context_) |
| 1492 ->extension_service() | 1492 ->extension_service() |
| 1493 ->ReloadExtension(platform_app->id()); | 1493 ->ReloadExtension(platform_app->id()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1516 | 1516 |
| 1517 printing::StartPrint( | 1517 printing::StartPrint( |
| 1518 source_web_contents_, | 1518 source_web_contents_, |
| 1519 GetPrefs(browser_context_)->GetBoolean(prefs::kPrintPreviewDisabled), | 1519 GetPrefs(browser_context_)->GetBoolean(prefs::kPrintPreviewDisabled), |
| 1520 !params_.selection_text.empty()); | 1520 !params_.selection_text.empty()); |
| 1521 #endif // ENABLE_PRINTING | 1521 #endif // ENABLE_PRINTING |
| 1522 break; | 1522 break; |
| 1523 } | 1523 } |
| 1524 | 1524 |
| 1525 case IDC_VIEW_SOURCE: | 1525 case IDC_VIEW_SOURCE: |
| 1526 embedded_web_contents_->ViewSource(); | 1526 embedder_web_contents_->ViewSource(); |
| 1527 break; | 1527 break; |
| 1528 | 1528 |
| 1529 case IDC_CONTENT_CONTEXT_INSPECTELEMENT: | 1529 case IDC_CONTENT_CONTEXT_INSPECTELEMENT: |
| 1530 Inspect(params_.x, params_.y); | 1530 Inspect(params_.x, params_.y); |
| 1531 break; | 1531 break; |
| 1532 | 1532 |
| 1533 case IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE: { | 1533 case IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE: { |
| 1534 const Extension* platform_app = GetExtension(); | 1534 const Extension* platform_app = GetExtension(); |
| 1535 DCHECK(platform_app); | 1535 DCHECK(platform_app); |
| 1536 DCHECK(platform_app->is_platform_app()); | 1536 DCHECK(platform_app->is_platform_app()); |
| 1537 | 1537 |
| 1538 extensions::devtools_util::InspectBackgroundPage(platform_app, | 1538 extensions::devtools_util::InspectBackgroundPage(platform_app, |
| 1539 GetProfile()); | 1539 GetProfile()); |
| 1540 break; | 1540 break; |
| 1541 } | 1541 } |
| 1542 | 1542 |
| 1543 case IDC_CONTENT_CONTEXT_VIEWPAGEINFO: { | 1543 case IDC_CONTENT_CONTEXT_VIEWPAGEINFO: { |
| 1544 NavigationController* controller = | 1544 NavigationController* controller = |
| 1545 &embedded_web_contents_->GetController(); | 1545 &embedder_web_contents_->GetController(); |
| 1546 // Important to use GetVisibleEntry to match what's showing in the | 1546 // Important to use GetVisibleEntry to match what's showing in the |
| 1547 // omnibox. This may return null. | 1547 // omnibox. This may return null. |
| 1548 NavigationEntry* nav_entry = controller->GetVisibleEntry(); | 1548 NavigationEntry* nav_entry = controller->GetVisibleEntry(); |
| 1549 if (!nav_entry) | 1549 if (!nav_entry) |
| 1550 return; | 1550 return; |
| 1551 Browser* browser = | 1551 Browser* browser = |
| 1552 chrome::FindBrowserWithWebContents(embedded_web_contents_); | 1552 chrome::FindBrowserWithWebContents(embedder_web_contents_); |
| 1553 chrome::ShowWebsiteSettings(browser, embedded_web_contents_, | 1553 chrome::ShowWebsiteSettings(browser, embedder_web_contents_, |
| 1554 nav_entry->GetURL(), nav_entry->GetSSL()); | 1554 nav_entry->GetURL(), nav_entry->GetSSL()); |
| 1555 break; | 1555 break; |
| 1556 } | 1556 } |
| 1557 | 1557 |
| 1558 case IDC_CONTENT_CONTEXT_TRANSLATE: { | 1558 case IDC_CONTENT_CONTEXT_TRANSLATE: { |
| 1559 // A translation might have been triggered by the time the menu got | 1559 // A translation might have been triggered by the time the menu got |
| 1560 // selected, do nothing in that case. | 1560 // selected, do nothing in that case. |
| 1561 ChromeTranslateClient* chrome_translate_client = | 1561 ChromeTranslateClient* chrome_translate_client = |
| 1562 ChromeTranslateClient::FromWebContents(embedded_web_contents_); | 1562 ChromeTranslateClient::FromWebContents(embedder_web_contents_); |
| 1563 if (!chrome_translate_client || | 1563 if (!chrome_translate_client || |
| 1564 chrome_translate_client->GetLanguageState().IsPageTranslated() || | 1564 chrome_translate_client->GetLanguageState().IsPageTranslated() || |
| 1565 chrome_translate_client->GetLanguageState().translation_pending()) { | 1565 chrome_translate_client->GetLanguageState().translation_pending()) { |
| 1566 return; | 1566 return; |
| 1567 } | 1567 } |
| 1568 std::string original_lang = | 1568 std::string original_lang = |
| 1569 chrome_translate_client->GetLanguageState().original_language(); | 1569 chrome_translate_client->GetLanguageState().original_language(); |
| 1570 std::string target_lang = g_browser_process->GetApplicationLocale(); | 1570 std::string target_lang = g_browser_process->GetApplicationLocale(); |
| 1571 target_lang = | 1571 target_lang = |
| 1572 translate::TranslateDownloadManager::GetLanguageCode(target_lang); | 1572 translate::TranslateDownloadManager::GetLanguageCode(target_lang); |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1785 source_web_contents_->GetRenderViewHost()-> | 1785 source_web_contents_->GetRenderViewHost()-> |
| 1786 ExecuteMediaPlayerActionAtLocation(location, action); | 1786 ExecuteMediaPlayerActionAtLocation(location, action); |
| 1787 } | 1787 } |
| 1788 | 1788 |
| 1789 void RenderViewContextMenu::PluginActionAt( | 1789 void RenderViewContextMenu::PluginActionAt( |
| 1790 const gfx::Point& location, | 1790 const gfx::Point& location, |
| 1791 const WebPluginAction& action) { | 1791 const WebPluginAction& action) { |
| 1792 source_web_contents_->GetRenderViewHost()-> | 1792 source_web_contents_->GetRenderViewHost()-> |
| 1793 ExecutePluginActionAtLocation(location, action); | 1793 ExecutePluginActionAtLocation(location, action); |
| 1794 } | 1794 } |
| OLD | NEW |