Commit 163dcc7f authored by Anthony Vallee-Dubois's avatar Anthony Vallee-Dubois Committed by Commit Bot

Only trigger hrefTranslate if language is supported

Bug: 901864
Change-Id: I5d86a6017d4d3fd45169af7daf58899158d7a1a7
Reviewed-on: https://chromium-review.googlesource.com/c/1351384
Commit-Queue: anthonyvd <anthonyvd@chromium.org>
Reviewed-by: default avatarMichael Martis <martis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#611163}
parent 7453a788
......@@ -441,6 +441,51 @@ IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, HrefTranslateSuccess) {
chrome_translate_client->GetLanguageState().current_language());
}
// Test that hrefTranslate with an unsupported language doesn't trigger.
IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, HrefTranslateUnsupported) {
ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient();
chrome_translate_client->GetTranslateManager()->SetIgnoreMissingKeyForTesting(
true);
SetTranslateScript(kTestValidScript);
// There is a possible race condition, when the language is not yet detected,
// so we check for that and wait if necessary.
if (chrome_translate_client->GetLanguageState().original_language().empty())
WaitUntilLanguageDetected();
EXPECT_EQ("und",
chrome_translate_client->GetLanguageState().original_language());
ResetObserver();
// Load a German page and detect it's language
AddTabAtIndex(
0, GURL(embedded_test_server()->GetURL("/href_translate_test.html")),
ui::PAGE_TRANSITION_TYPED);
chrome_translate_client = GetChromeTranslateClient();
WaitUntilLanguageDetected();
EXPECT_EQ("de",
chrome_translate_client->GetLanguageState().original_language());
// Navigate to the French page by way of a link on the original page. This
// link has the hrefTranslate attribute set to "unsupported", so it shouldn't
// trigger translate.
ResetObserver();
content::WebContents* web_contents =
browser()->tab_strip_model()->GetWebContentsAt(0);
const std::string click_link_js =
"(function() { "
"document.getElementById('test-unsupported-language').click(); })();";
ASSERT_TRUE(content::ExecuteScript(web_contents, click_link_js));
// Detect language on the new page
WaitUntilLanguageDetected();
EXPECT_EQ("fr",
chrome_translate_client->GetLanguageState().original_language());
EXPECT_EQ("", chrome_translate_client->GetLanguageState().AutoTranslateTo());
}
// Test an href translate link to a conflicted page
IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, HrefTranslateConflict) {
ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient();
......
......@@ -22,5 +22,8 @@ found in the LICENSE file.
<a href="french_page.html" hrefTranslate="en" id="test-no-hrefLang">
Ich kenne die Sprache der Seite nicht, auf die ich hinweise, aber ich möchte, dass sie ins Englische übersetzt wird.
</a>
<a href="french_page.html" hrefTranslate="unsupported" id="test-unsupported-language">
Ich kenne die Sprache der Seite nicht, auf die ich hinweise, aber ich möchte, dass sie ins Englische übersetzt wird.
</a>
</body>
</html>
......@@ -218,9 +218,18 @@ void ContentTranslateDriver::DidFinishNavigation(
const bool reload =
navigation_handle->GetReloadType() != content::ReloadType::NONE ||
navigation_handle->IsSameDocument();
translate::TranslateLanguageList* language_list =
translate::TranslateDownloadManager::GetInstance()->language_list();
std::string href_translate;
if (language_list->IsSupportedLanguage(
navigation_handle->GetHrefTranslate())) {
href_translate = navigation_handle->GetHrefTranslate();
}
translate_manager_->GetLanguageState().DidNavigate(
navigation_handle->IsSameDocument(), navigation_handle->IsInMainFrame(),
reload, navigation_handle->GetHrefTranslate());
reload, href_translate);
}
void ContentTranslateDriver::OnPageAway(int page_seq_no) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment