summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-18 16:19:53 +0000
committerjcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-18 16:19:53 +0000
commit05672cafff847dc3beb0e29e1506bee6a5a7447e (patch)
tree7d1383798d0a5d0b67615f82510be87f8d2f984e
parent81415229bc291e102450807f4a1fb868f7c0413a (diff)
downloadchromium_src-05672cafff847dc3beb0e29e1506bee6a5a7447e.zip
chromium_src-05672cafff847dc3beb0e29e1506bee6a5a7447e.tar.gz
chromium_src-05672cafff847dc3beb0e29e1506bee6a5a7447e.tar.bz2
Ensures we don't let users translate pages that are in an unsupported language by disabling the context menu in such cases.
It is OK to translate pages for which the language is unknown, as we let the server detect the language in such cases. BUG=48635 TEST=Not sure how to repro without hacking the code. You need a page in a language that the CLD detects but that Chrome does not support for translation. Review URL: http://codereview.chromium.org/3142015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@56534 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu.cc6
-rw-r--r--chrome/browser/translate/translate_manager.cc7
-rw-r--r--chrome/browser/translate/translate_manager_unittest.cc10
3 files changed, 22 insertions, 1 deletions
diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc
index c7b3289..3865f40 100644
--- a/chrome/browser/tab_contents/render_view_context_menu.cc
+++ b/chrome/browser/tab_contents/render_view_context_menu.cc
@@ -38,6 +38,7 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/translate/translate_prefs.h"
#include "chrome/browser/translate/translate_manager.h"
+#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
@@ -780,6 +781,11 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const {
source_tab_contents_->language_state().page_translatable() &&
!original_lang.empty() && // Did we receive the page language yet?
original_lang != target_lang &&
+ // Only allow translating languages we explitly support and the
+ // unknown language (in which case the page language is detected on
+ // the server side).
+ (original_lang == chrome::kUnknownLanguageCode ||
+ TranslateManager::IsSupportedLanguage(original_lang)) &&
!source_tab_contents_->language_state().IsPageTranslated() &&
!source_tab_contents_->interstitial_page() &&
TranslateManager::IsTranslatableURL(params_.page_url);
diff --git a/chrome/browser/translate/translate_manager.cc b/chrome/browser/translate/translate_manager.cc
index 64d029e..5f77e40 100644
--- a/chrome/browser/translate/translate_manager.cc
+++ b/chrome/browser/translate/translate_manager.cc
@@ -413,6 +413,13 @@ void TranslateManager::TranslatePage(TabContents* tab_contents,
TranslateInfoBarDelegate* infobar = TranslateInfoBarDelegate::CreateDelegate(
TranslateInfoBarDelegate::TRANSLATING, tab_contents,
source_lang, target_lang);
+ if (!infobar) {
+ // This means the source or target languages are not supported, which should
+ // not happen as we won't show a translate infobar or have the translate
+ // context menu activated in such cases.
+ NOTREACHED();
+ return;
+ }
ShowInfoBar(tab_contents, infobar);
if (!translate_script_.empty()) {
diff --git a/chrome/browser/translate/translate_manager_unittest.cc b/chrome/browser/translate/translate_manager_unittest.cc
index 8771b52..8a72ba5 100644
--- a/chrome/browser/translate/translate_manager_unittest.cc
+++ b/chrome/browser/translate/translate_manager_unittest.cc
@@ -1095,12 +1095,20 @@ TEST_F(TranslateManagerTest, ContextMenu) {
EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
// Test that the translate context menu is enabled when the page is in an
- // unknown language as the UI.
+ // unknown language.
SimulateNavigation(url, 0, "G00g1e", "und", true);
menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
menu->Init();
EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
+
+ // Test that the translate context menu is disabled when the page is in an
+ // unsupported language.
+ SimulateNavigation(url, 0, "G00g1e", "qbz", true);
+ menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
+ menu->Init();
+ EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
+ EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
}
// Tests that an extra always/never translate button is shown on the "before