Commit 622c02f9 authored by Alexandre Frechette's avatar Alexandre Frechette Committed by Commit Bot

Check source language to determine if page can be manually translated.

Bug: 907134, 902803
Change-Id: Ifb63346572e90a191918bcfe30d24f4362c10b45
Reviewed-on: https://chromium-review.googlesource.com/c/1344256Reviewed-by: default avataranthonyvd <anthonyvd@chromium.org>
Commit-Queue: anthonyvd <anthonyvd@chromium.org>
Cr-Commit-Position: refs/heads/master@{#609789}
parent 68aafc3c
......@@ -321,23 +321,33 @@ std::string TranslateManager::GetManualTargetLanguage(
}
bool TranslateManager::CanManuallyTranslate() {
if (!base::FeatureList::IsEnabled(translate::kTranslateUI) ||
net::NetworkChangeNotifier::IsOffline() ||
(!ignore_missing_key_for_testing_ &&
!::google_apis::HasAPIKeyConfigured()))
return false;
// MHTML pages currently cannot be translated (crbug.com/217945).
if (translate_driver_->GetContentsMimeType() == "multipart/related" ||
!translate_client_->IsTranslatableURL(
translate_driver_->GetVisibleURL()) ||
!language_state_.page_needs_translation())
return false;
const std::string source_language = language_state_.original_language();
if (source_language.empty() ||
source_language == translate::kUnknownLanguageCode)
return false;
std::unique_ptr<TranslatePrefs> translate_prefs(
translate_client_->GetTranslatePrefs());
const std::string source_code = TranslateDownloadManager::GetLanguageCode(
language_state_.original_language());
const std::string target_lang = GetManualTargetLanguage(
source_code, language_state_, translate_prefs.get(), language_model_);
TranslateDownloadManager::GetLanguageCode(source_language),
language_state_, translate_prefs.get(), language_model_);
if (target_lang.empty())
return false;
return language_state_.page_needs_translation() &&
base::FeatureList::IsEnabled(translate::kTranslateUI) &&
!net::NetworkChangeNotifier::IsOffline() &&
(ignore_missing_key_for_testing_ ||
::google_apis::HasAPIKeyConfigured()) &&
// MHTML pages currently cannot be translated (crbug.com/217945).
translate_driver_->GetContentsMimeType() != "multipart/related" &&
translate_client_->IsTranslatableURL(
translate_driver_->GetVisibleURL()) &&
!target_lang.empty();
return true;
}
void TranslateManager::InitiateManualTranslation() {
......
......@@ -26,6 +26,7 @@
#include "components/translate/core/browser/translate_download_manager.h"
#include "components/translate/core/browser/translate_pref_names.h"
#include "components/translate/core/browser/translate_prefs.h"
#include "components/translate/core/common/translate_constants.h"
#include "components/variations/variations_associated_data.h"
#include "net/base/network_change_notifier.h"
#include "testing/gmock/include/gmock/gmock.h"
......@@ -920,6 +921,37 @@ TEST_F(TranslateManagerTest, CanManuallyTranslate_TranslatableURL) {
EXPECT_TRUE(translate_manager_->CanManuallyTranslate());
}
TEST_F(TranslateManagerTest, CanManuallyTranslate_EmptySourceLanguage) {
TranslateManager::SetIgnoreMissingKeyForTesting(true);
translate_manager_.reset(new translate::TranslateManager(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_));
prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true);
network_notifier_.SimulateOnline();
ON_CALL(mock_translate_client_, IsTranslatableURL(GURL::EmptyGURL()))
.WillByDefault(Return(true));
translate_manager_->GetLanguageState().LanguageDetermined("", true);
EXPECT_FALSE(translate_manager_->CanManuallyTranslate());
}
TEST_F(TranslateManagerTest, CanManuallyTranslate_UndefinedSourceLanguage) {
TranslateManager::SetIgnoreMissingKeyForTesting(true);
translate_manager_.reset(new translate::TranslateManager(
&mock_translate_client_, &mock_translate_ranker_, &mock_language_model_));
prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true);
network_notifier_.SimulateOnline();
ON_CALL(mock_translate_client_, IsTranslatableURL(GURL::EmptyGURL()))
.WillByDefault(Return(true));
translate_manager_->GetLanguageState().LanguageDetermined(
translate::kUnknownLanguageCode, true);
EXPECT_FALSE(translate_manager_->CanManuallyTranslate());
}
} // namespace testing
} // namespace translate
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