diff options
author | jcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-18 16:19:53 +0000 |
---|---|---|
committer | jcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-18 16:19:53 +0000 |
commit | 05672cafff847dc3beb0e29e1506bee6a5a7447e (patch) | |
tree | 7d1383798d0a5d0b67615f82510be87f8d2f984e | |
parent | 81415229bc291e102450807f4a1fb868f7c0413a (diff) | |
download | chromium_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.cc | 6 | ||||
-rw-r--r-- | chrome/browser/translate/translate_manager.cc | 7 | ||||
-rw-r--r-- | chrome/browser/translate/translate_manager_unittest.cc | 10 |
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 |