| OLD | NEW | 
|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/translate/core/browser/translate_manager.h" | 5 #include "components/translate/core/browser/translate_manager.h" | 
| 6 | 6 | 
| 7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" | 
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" | 
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" | 
| 10 #include "base/test/histogram_tester.h" | 10 #include "base/test/histogram_tester.h" | 
| 11 #include "base/test/scoped_feature_list.h" | 11 #include "base/test/scoped_feature_list.h" | 
| 12 #include "build/build_config.h" | 12 #include "build/build_config.h" | 
| 13 #include "components/infobars/core/infobar.h" | 13 #include "components/infobars/core/infobar.h" | 
| 14 #include "components/pref_registry/pref_registry_syncable.h" | 14 #include "components/pref_registry/pref_registry_syncable.h" | 
| 15 #include "components/sync_preferences/testing_pref_service_syncable.h" | 15 #include "components/sync_preferences/testing_pref_service_syncable.h" | 
| 16 #include "components/translate/core/browser/mock_translate_driver.h" | 16 #include "components/translate/core/browser/mock_translate_driver.h" | 
|  | 17 #include "components/translate/core/browser/mock_translate_ranker.h" | 
| 17 #include "components/translate/core/browser/translate_browser_metrics.h" | 18 #include "components/translate/core/browser/translate_browser_metrics.h" | 
| 18 #include "components/translate/core/browser/translate_client.h" | 19 #include "components/translate/core/browser/translate_client.h" | 
| 19 #include "components/translate/core/browser/translate_download_manager.h" | 20 #include "components/translate/core/browser/translate_download_manager.h" | 
| 20 #include "components/translate/core/browser/translate_prefs.h" | 21 #include "components/translate/core/browser/translate_prefs.h" | 
| 21 #include "components/translate/core/common/translate_pref_names.h" | 22 #include "components/translate/core/common/translate_pref_names.h" | 
| 22 #include "components/variations/variations_associated_data.h" | 23 #include "components/variations/variations_associated_data.h" | 
| 23 #include "net/base/network_change_notifier.h" | 24 #include "net/base/network_change_notifier.h" | 
| 24 #include "testing/gmock/include/gmock/gmock.h" | 25 #include "testing/gmock/include/gmock/gmock.h" | 
| 25 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" | 
| 26 | 27 | 
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 157 | 158 | 
| 158   void TearDown() override { | 159   void TearDown() override { | 
| 159     manager_->ResetForTesting(); | 160     manager_->ResetForTesting(); | 
| 160     variations::testing::ClearAllVariationParams(); | 161     variations::testing::ClearAllVariationParams(); | 
| 161   } | 162   } | 
| 162 | 163 | 
| 163   // Utility function to prepare translate_manager_ for testing. | 164   // Utility function to prepare translate_manager_ for testing. | 
| 164   void PrepareTranslateManager() { | 165   void PrepareTranslateManager() { | 
| 165     TranslateManager::SetIgnoreMissingKeyForTesting(true); | 166     TranslateManager::SetIgnoreMissingKeyForTesting(true); | 
| 166     translate_manager_.reset(new translate::TranslateManager( | 167     translate_manager_.reset(new translate::TranslateManager( | 
| 167         &mock_translate_client_, kAcceptLanguages)); | 168         &mock_translate_client_, &mock_translate_ranker_, kAcceptLanguages)); | 
| 168   } | 169   } | 
| 169 | 170 | 
| 170   // Prepare the test for ULP related tests. | 171   // Prepare the test for ULP related tests. | 
| 171   // Put the ulp json into profile. | 172   // Put the ulp json into profile. | 
| 172   void PrepareULPTest(const char* ulp_json, bool turn_on_feature) { | 173   void PrepareULPTest(const char* ulp_json, bool turn_on_feature) { | 
| 173     PrepareTranslateManager(); | 174     PrepareTranslateManager(); | 
| 174     std::unique_ptr<base::Value> profile(CreateProfileFromJSON(ulp_json)); | 175     std::unique_ptr<base::Value> profile(CreateProfileFromJSON(ulp_json)); | 
| 175     prefs_.SetUserPref(TranslatePrefs::kPrefLanguageProfile, profile.release()); | 176     prefs_.SetUserPref(TranslatePrefs::kPrefLanguageProfile, profile.release()); | 
| 176     if (turn_on_feature) | 177     if (turn_on_feature) | 
| 177       TurnOnTranslateByULP(); | 178       TurnOnTranslateByULP(); | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 223   } | 224   } | 
| 224 | 225 | 
| 225   sync_preferences::TestingPrefServiceSyncable prefs_; | 226   sync_preferences::TestingPrefServiceSyncable prefs_; | 
| 226 | 227 | 
| 227   // TODO(groby): request TranslatePrefs from |mock_translate_client_| instead. | 228   // TODO(groby): request TranslatePrefs from |mock_translate_client_| instead. | 
| 228   TranslatePrefs translate_prefs_; | 229   TranslatePrefs translate_prefs_; | 
| 229   TranslateDownloadManager* manager_; | 230   TranslateDownloadManager* manager_; | 
| 230 | 231 | 
| 231   TestNetworkChangeNotifier network_notifier_; | 232   TestNetworkChangeNotifier network_notifier_; | 
| 232   translate::testing::MockTranslateDriver driver_; | 233   translate::testing::MockTranslateDriver driver_; | 
|  | 234   translate::testing::MockTranslateRanker mock_translate_ranker_; | 
| 233   ::testing::NiceMock<MockTranslateClient> mock_translate_client_; | 235   ::testing::NiceMock<MockTranslateClient> mock_translate_client_; | 
| 234   std::unique_ptr<TranslateManager> translate_manager_; | 236   std::unique_ptr<TranslateManager> translate_manager_; | 
| 235   std::unique_ptr<base::FieldTrialList> field_trial_list_; | 237   std::unique_ptr<base::FieldTrialList> field_trial_list_; | 
| 236   base::test::ScopedFeatureList scoped_feature_list_; | 238   base::test::ScopedFeatureList scoped_feature_list_; | 
| 237 }; | 239 }; | 
| 238 | 240 | 
| 239 | 241 | 
| 240 // Target language comes from application locale if the locale's language | 242 // Target language comes from application locale if the locale's language | 
| 241 // is supported. | 243 // is supported. | 
| 242 TEST_F(TranslateManagerTest, GetTargetLanguageDefaultsToAppLocale) { | 244 TEST_F(TranslateManagerTest, GetTargetLanguageDefaultsToAppLocale) { | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 274   // First supported language is the fallback language. | 276   // First supported language is the fallback language. | 
| 275   ASSERT_TRUE(TranslateDownloadManager::IsSupportedLanguage("en")); | 277   ASSERT_TRUE(TranslateDownloadManager::IsSupportedLanguage("en")); | 
| 276   accept_language_list.push_back("en"); | 278   accept_language_list.push_back("en"); | 
| 277   translate_prefs_.UpdateLanguageList(accept_language_list); | 279   translate_prefs_.UpdateLanguageList(accept_language_list); | 
| 278   EXPECT_EQ("en", TranslateManager::GetTargetLanguage(&translate_prefs_)); | 280   EXPECT_EQ("en", TranslateManager::GetTargetLanguage(&translate_prefs_)); | 
| 279 } | 281 } | 
| 280 | 282 | 
| 281 TEST_F(TranslateManagerTest, DontTranslateOffline) { | 283 TEST_F(TranslateManagerTest, DontTranslateOffline) { | 
| 282   TranslateManager::SetIgnoreMissingKeyForTesting(true); | 284   TranslateManager::SetIgnoreMissingKeyForTesting(true); | 
| 283   translate_manager_.reset(new translate::TranslateManager( | 285   translate_manager_.reset(new translate::TranslateManager( | 
| 284       &mock_translate_client_, kAcceptLanguages)); | 286       &mock_translate_client_, &mock_translate_ranker_, kAcceptLanguages)); | 
| 285 | 287 | 
| 286   // The test measures that the "Translate was disabled" exit can only be | 288   // The test measures that the "Translate was disabled" exit can only be | 
| 287   // reached after the early-out tests including IsOffline() passed. | 289   // reached after the early-out tests including IsOffline() passed. | 
| 288   const char kMetricName[] = "Translate.InitiationStatus.v2"; | 290   const char kMetricName[] = "Translate.InitiationStatus.v2"; | 
| 289   base::HistogramTester histogram_tester; | 291   base::HistogramTester histogram_tester; | 
| 290 | 292 | 
| 291   prefs_.SetBoolean(prefs::kEnableTranslate, false); | 293   prefs_.SetBoolean(prefs::kEnableTranslate, false); | 
| 292 | 294 | 
| 293   translate_manager_->GetLanguageState().LanguageDetermined("de", true); | 295   translate_manager_->GetLanguageState().LanguageDetermined("de", true); | 
| 294 | 296 | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 306       translate::TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS, | 308       translate::TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS, | 
| 307       1); | 309       1); | 
| 308 } | 310 } | 
| 309 | 311 | 
| 310 // The test measures that Translate is not triggered for a zh-TW page for a | 312 // The test measures that Translate is not triggered for a zh-TW page for a | 
| 311 // zh-CN user. | 313 // zh-CN user. | 
| 312 TEST_F(TranslateManagerTest, | 314 TEST_F(TranslateManagerTest, | 
| 313        DontTranslateZhTraditionalPageForZhSimplifiedLocale) { | 315        DontTranslateZhTraditionalPageForZhSimplifiedLocale) { | 
| 314   TranslateManager::SetIgnoreMissingKeyForTesting(true); | 316   TranslateManager::SetIgnoreMissingKeyForTesting(true); | 
| 315   translate_manager_.reset(new translate::TranslateManager( | 317   translate_manager_.reset(new translate::TranslateManager( | 
| 316       &mock_translate_client_, kAcceptLanguages)); | 318       &mock_translate_client_, &mock_translate_ranker_, kAcceptLanguages)); | 
| 317 | 319 | 
| 318   const char kMetricName[] = "Translate.InitiationStatus.v2"; | 320   const char kMetricName[] = "Translate.InitiationStatus.v2"; | 
| 319   base::HistogramTester histogram_tester; | 321   base::HistogramTester histogram_tester; | 
| 320 | 322 | 
| 321   const std::string locale = "zh-TW"; | 323   const std::string locale = "zh-TW"; | 
| 322   const std::string page_lang = "zh-CN"; | 324   const std::string page_lang = "zh-CN"; | 
| 323 | 325 | 
| 324   network_notifier_.SimulateOnline(); | 326   network_notifier_.SimulateOnline(); | 
| 325   manager_->set_application_locale(locale); | 327   manager_->set_application_locale(locale); | 
| 326   ON_CALL(mock_translate_client_, IsTranslatableURL(_)) | 328   ON_CALL(mock_translate_client_, IsTranslatableURL(_)) | 
| 327       .WillByDefault(Return(true)); | 329       .WillByDefault(Return(true)); | 
| 328 | 330 | 
| 329   EXPECT_EQ("zh-TW", translate_manager_->GetTargetLanguage(&translate_prefs_)); | 331   EXPECT_EQ("zh-TW", translate_manager_->GetTargetLanguage(&translate_prefs_)); | 
| 330   translate_manager_->GetLanguageState().LanguageDetermined(page_lang, true); | 332   translate_manager_->GetLanguageState().LanguageDetermined(page_lang, true); | 
| 331   translate_manager_->InitiateTranslation(page_lang); | 333   translate_manager_->InitiateTranslation(page_lang); | 
| 332 | 334 | 
| 333   histogram_tester.ExpectUniqueSample( | 335   histogram_tester.ExpectUniqueSample( | 
| 334       kMetricName, | 336       kMetricName, | 
| 335       translate::TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES, | 337       translate::TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES, | 
| 336       1); | 338       1); | 
| 337 } | 339 } | 
| 338 | 340 | 
| 339 // The test measures that Translate is not triggered for a zh-CN page for a | 341 // The test measures that Translate is not triggered for a zh-CN page for a | 
| 340 // zh-TW user. | 342 // zh-TW user. | 
| 341 TEST_F(TranslateManagerTest, | 343 TEST_F(TranslateManagerTest, | 
| 342        DontTranslateZhSimplifiedPageForZhTraditionalLocale) { | 344        DontTranslateZhSimplifiedPageForZhTraditionalLocale) { | 
| 343   TranslateManager::SetIgnoreMissingKeyForTesting(true); | 345   TranslateManager::SetIgnoreMissingKeyForTesting(true); | 
| 344   translate_manager_.reset(new translate::TranslateManager( | 346   translate_manager_.reset(new translate::TranslateManager( | 
| 345       &mock_translate_client_, kAcceptLanguages)); | 347       &mock_translate_client_, &mock_translate_ranker_, kAcceptLanguages)); | 
| 346 | 348 | 
| 347   const char kMetricName[] = "Translate.InitiationStatus.v2"; | 349   const char kMetricName[] = "Translate.InitiationStatus.v2"; | 
| 348   base::HistogramTester histogram_tester; | 350   base::HistogramTester histogram_tester; | 
| 349 | 351 | 
| 350   const std::string locale = "zh-CN"; | 352   const std::string locale = "zh-CN"; | 
| 351   const std::string page_lang = "zh-TW"; | 353   const std::string page_lang = "zh-TW"; | 
| 352 | 354 | 
| 353   network_notifier_.SimulateOnline(); | 355   network_notifier_.SimulateOnline(); | 
| 354   manager_->set_application_locale(locale); | 356   manager_->set_application_locale(locale); | 
| 355   ON_CALL(mock_translate_client_, IsTranslatableURL(_)) | 357   ON_CALL(mock_translate_client_, IsTranslatableURL(_)) | 
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 503   // 0.79 and lower than 0.8 and the probability threshold is lower than both | 505   // 0.79 and lower than 0.8 and the probability threshold is lower than both | 
| 504   // the one with "fr" (0.6) and "pt-PT" (0.4). | 506   // the one with "fr" (0.6) and "pt-PT" (0.4). | 
| 505   EXPECT_TRUE(CallLanguageInULP("fr")); | 507   EXPECT_TRUE(CallLanguageInULP("fr")); | 
| 506   EXPECT_TRUE(CallLanguageInULP("pt")); | 508   EXPECT_TRUE(CallLanguageInULP("pt")); | 
| 507   EXPECT_FALSE(CallLanguageInULP("zh-TW")); | 509   EXPECT_FALSE(CallLanguageInULP("zh-TW")); | 
| 508 } | 510 } | 
| 509 | 511 | 
| 510 }  // namespace testing | 512 }  // namespace testing | 
| 511 | 513 | 
| 512 }  // namespace translate | 514 }  // namespace translate | 
| OLD | NEW | 
|---|