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 <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/json/json_reader.h" | 9 #include "base/json/json_reader.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
12 #include "base/test/histogram_tester.h" | 12 #include "base/test/histogram_tester.h" |
13 #include "base/test/scoped_feature_list.h" | 13 #include "base/test/scoped_feature_list.h" |
14 #include "build/build_config.h" | 14 #include "build/build_config.h" |
15 #include "components/infobars/core/infobar.h" | 15 #include "components/infobars/core/infobar.h" |
| 16 #include "components/metrics/proto/translate_event.pb.h" |
16 #include "components/pref_registry/pref_registry_syncable.h" | 17 #include "components/pref_registry/pref_registry_syncable.h" |
17 #include "components/sync_preferences/testing_pref_service_syncable.h" | 18 #include "components/sync_preferences/testing_pref_service_syncable.h" |
18 #include "components/translate/core/browser/mock_translate_driver.h" | 19 #include "components/translate/core/browser/mock_translate_driver.h" |
19 #include "components/translate/core/browser/mock_translate_ranker.h" | 20 #include "components/translate/core/browser/mock_translate_ranker.h" |
20 #include "components/translate/core/browser/translate_browser_metrics.h" | 21 #include "components/translate/core/browser/translate_browser_metrics.h" |
21 #include "components/translate/core/browser/translate_client.h" | 22 #include "components/translate/core/browser/translate_client.h" |
22 #include "components/translate/core/browser/translate_download_manager.h" | 23 #include "components/translate/core/browser/translate_download_manager.h" |
23 #include "components/translate/core/browser/translate_pref_names.h" | 24 #include "components/translate/core/browser/translate_pref_names.h" |
24 #include "components/translate/core/browser/translate_prefs.h" | 25 #include "components/translate/core/browser/translate_prefs.h" |
25 #include "components/variations/variations_associated_data.h" | 26 #include "components/variations/variations_associated_data.h" |
26 #include "net/base/network_change_notifier.h" | 27 #include "net/base/network_change_notifier.h" |
27 #include "testing/gmock/include/gmock/gmock.h" | 28 #include "testing/gmock/include/gmock/gmock.h" |
28 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
29 | 30 |
30 using testing::_; | 31 using testing::_; |
31 using testing::Return; | 32 using testing::Return; |
32 using testing::SetArgPointee; | 33 using testing::SetArgPointee; |
| 34 using testing::Pointee; |
33 | 35 |
34 namespace translate { | 36 namespace translate { |
35 | 37 |
36 namespace { | 38 namespace { |
37 | 39 |
38 const char kTrialName[] = "MyTrial"; | 40 const char kTrialName[] = "MyTrial"; |
39 | 41 |
40 #if defined(OS_CHROMEOS) | 42 #if defined(OS_CHROMEOS) |
41 const char kLanguagePreferredLanguages[] = | 43 const char kLanguagePreferredLanguages[] = |
42 "settings.language.preferred_languages"; | 44 "settings.language.preferred_languages"; |
43 #else | 45 #else |
44 const char* kLanguagePreferredLanguages = nullptr; | 46 const char* kLanguagePreferredLanguages = nullptr; |
45 #endif | 47 #endif |
46 const char kAcceptLanguages[] = "intl.accept_languages"; | 48 const char kAcceptLanguages[] = "intl.accept_languages"; |
47 | 49 |
48 // Overrides NetworkChangeNotifier, simulatng connection type changes for tests. | 50 // Overrides NetworkChangeNotifier, simulating connection type changes |
| 51 // for tests. |
49 // TODO(groby): Combine with similar code in ResourceRequestAllowedNotifierTest. | 52 // TODO(groby): Combine with similar code in ResourceRequestAllowedNotifierTest. |
50 class TestNetworkChangeNotifier : public net::NetworkChangeNotifier { | 53 class TestNetworkChangeNotifier : public net::NetworkChangeNotifier { |
51 public: | 54 public: |
52 TestNetworkChangeNotifier() | 55 TestNetworkChangeNotifier() |
53 : net::NetworkChangeNotifier(), | 56 : net::NetworkChangeNotifier(), |
54 connection_type_to_return_( | 57 connection_type_to_return_( |
55 net::NetworkChangeNotifier::CONNECTION_UNKNOWN) {} | 58 net::NetworkChangeNotifier::CONNECTION_UNKNOWN) {} |
56 | 59 |
57 // Simulates a change of the connection type to |type|. This will notify any | 60 // Simulates a change of the connection type to |type|. This will notify any |
58 // objects that are NetworkChangeNotifiers. | 61 // objects that are NetworkChangeNotifiers. |
59 void SimulateNetworkConnectionChange( | 62 void SimulateNetworkConnectionChange( |
60 net::NetworkChangeNotifier::ConnectionType type) { | 63 net::NetworkChangeNotifier::ConnectionType type) { |
61 connection_type_to_return_ = type; | 64 connection_type_to_return_ = type; |
62 net::NetworkChangeNotifier::NotifyObserversOfConnectionTypeChangeForTests( | 65 net::NetworkChangeNotifier::NotifyObserversOfConnectionTypeChangeForTests( |
63 connection_type_to_return_); | 66 connection_type_to_return_); |
64 base::RunLoop().RunUntilIdle(); | 67 base::RunLoop().RunUntilIdle(); |
65 } | 68 } |
66 | 69 |
67 void SimulateOffline() { | 70 void SimulateOffline() { |
68 connection_type_to_return_ =net::NetworkChangeNotifier::CONNECTION_NONE; | 71 connection_type_to_return_ = net::NetworkChangeNotifier::CONNECTION_NONE; |
69 } | 72 } |
70 | 73 |
71 void SimulateOnline() { | 74 void SimulateOnline() { |
72 connection_type_to_return_ = net::NetworkChangeNotifier::CONNECTION_UNKNOWN; | 75 connection_type_to_return_ = net::NetworkChangeNotifier::CONNECTION_UNKNOWN; |
73 } | 76 } |
74 | 77 |
75 private: | 78 private: |
76 ConnectionType GetCurrentConnectionType() const override { | 79 ConnectionType GetCurrentConnectionType() const override { |
77 return connection_type_to_return_; | 80 return connection_type_to_return_; |
78 } | 81 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 | 124 |
122 MOCK_METHOD1(IsTranslatableURL, bool(const GURL&)); | 125 MOCK_METHOD1(IsTranslatableURL, bool(const GURL&)); |
123 MOCK_METHOD1(ShowReportLanguageDetectionErrorUI, | 126 MOCK_METHOD1(ShowReportLanguageDetectionErrorUI, |
124 void(const GURL& report_url)); | 127 void(const GURL& report_url)); |
125 | 128 |
126 private: | 129 private: |
127 TranslateDriver* driver_; | 130 TranslateDriver* driver_; |
128 PrefService* prefs_; | 131 PrefService* prefs_; |
129 }; | 132 }; |
130 | 133 |
| 134 // Compares TranslateEventProto on a restricted set of fields. |
| 135 MATCHER_P(EqualsTranslateEventProto, translate_event, "") { |
| 136 const metrics::TranslateEventProto& tep(translate_event); |
| 137 return (arg.source_language() == tep.source_language() && |
| 138 arg.target_language() == tep.target_language() && |
| 139 arg.event_type() == tep.event_type()); |
| 140 } |
| 141 |
131 } // namespace | 142 } // namespace |
132 | 143 |
133 namespace testing { | 144 namespace testing { |
134 | 145 |
135 class TranslateManagerTest : public ::testing::Test { | 146 class TranslateManagerTest : public ::testing::Test { |
136 protected: | 147 protected: |
137 TranslateManagerTest() | 148 TranslateManagerTest() |
138 : translate_prefs_(&prefs_, | 149 : translate_prefs_(&prefs_, |
139 kAcceptLanguages, | 150 kAcceptLanguages, |
140 kLanguagePreferredLanguages), | 151 kLanguagePreferredLanguages), |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 | 194 |
184 std::unique_ptr<base::Value> CreateProfileFromJSON(const char* json) { | 195 std::unique_ptr<base::Value> CreateProfileFromJSON(const char* json) { |
185 int error_code = 0; | 196 int error_code = 0; |
186 std::string error_msg; | 197 std::string error_msg; |
187 int error_line = 0; | 198 int error_line = 0; |
188 int error_column = 0; | 199 int error_column = 0; |
189 | 200 |
190 std::unique_ptr<base::Value> profile(base::JSONReader::ReadAndReturnError( | 201 std::unique_ptr<base::Value> profile(base::JSONReader::ReadAndReturnError( |
191 json, 0, &error_code, &error_msg, &error_line, &error_column)); | 202 json, 0, &error_code, &error_msg, &error_line, &error_column)); |
192 | 203 |
193 EXPECT_EQ(0, error_code) << error_msg << " at " << error_line << ":" | 204 EXPECT_EQ(0, error_code) |
194 << error_column << std::endl | 205 << error_msg << " at " << error_line << ":" << error_column << std::endl |
195 << json; | 206 << json; |
196 return profile; | 207 return profile; |
197 } | 208 } |
198 | 209 |
199 void TurnOnTranslateByULP() { | 210 void TurnOnTranslateByULP() { |
200 scoped_refptr<base::FieldTrial> trial( | 211 scoped_refptr<base::FieldTrial> trial( |
201 CreateFieldTrial(kTrialName, 100, "Enabled", NULL)); | 212 CreateFieldTrial(kTrialName, 100, "Enabled", NULL)); |
202 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); | 213 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); |
203 feature_list->RegisterFieldTrialOverride( | 214 feature_list->RegisterFieldTrialOverride( |
204 translate::kTranslateLanguageByULP.name, | 215 translate::kTranslateLanguageByULP.name, |
205 base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get()); | 216 base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get()); |
206 scoped_feature_list_.InitWithFeatureList(std::move(feature_list)); | 217 scoped_feature_list_.InitWithFeatureList(std::move(feature_list)); |
207 } | 218 } |
208 | 219 |
209 scoped_refptr<base::FieldTrial> CreateFieldTrial( | 220 scoped_refptr<base::FieldTrial> CreateFieldTrial( |
210 const std::string& trial_name, | 221 const std::string& trial_name, |
211 int total_probability, | 222 int total_probability, |
212 const std::string& default_group_name, | 223 const std::string& default_group_name, |
213 int* default_group_number) { | 224 int* default_group_number) { |
214 return base::FieldTrialList::FactoryGetFieldTrial( | 225 return base::FieldTrialList::FactoryGetFieldTrial( |
215 trial_name, total_probability, default_group_name, | 226 trial_name, total_probability, default_group_name, |
216 base::FieldTrialList::kNoExpirationYear, 1, 1, | 227 base::FieldTrialList::kNoExpirationYear, 1, 1, |
217 base::FieldTrial::SESSION_RANDOMIZED, default_group_number); | 228 base::FieldTrial::SESSION_RANDOMIZED, default_group_number); |
218 } | 229 } |
219 | 230 |
| 231 void SetHasLanguageChanged(bool has_language_changed) { |
| 232 translate_manager_->GetLanguageState().LanguageDetermined("de", true); |
| 233 translate_manager_->GetLanguageState().DidNavigate(false, true, false); |
| 234 translate_manager_->GetLanguageState().LanguageDetermined( |
| 235 has_language_changed ? "en" : "de", true); |
| 236 EXPECT_EQ(has_language_changed, |
| 237 translate_manager_->GetLanguageState().HasLanguageChanged()); |
| 238 } |
| 239 |
| 240 void SetLanguageTooOftenDenied(const std::string& language) { |
| 241 if (base::FeatureList::IsEnabled(kTranslateUI2016Q2)) { |
| 242 translate_prefs_.ResetDenialState(); |
| 243 for (int i = 0; i < 4; i++) { |
| 244 translate_prefs_.IncrementTranslationDeniedCount(language); |
| 245 } |
| 246 } else { |
| 247 translate_prefs_.UpdateLastDeniedTime(language); |
| 248 translate_prefs_.UpdateLastDeniedTime(language); |
| 249 } |
| 250 |
| 251 EXPECT_TRUE(translate_prefs_.IsTooOftenDenied(language)); |
| 252 EXPECT_FALSE(translate_prefs_.IsTooOftenDenied("other_language")); |
| 253 } |
| 254 |
220 // Functions to help TEST_F in subclass to access private functions in | 255 // Functions to help TEST_F in subclass to access private functions in |
221 // TranslteManager so we can unit test them. | 256 // TranslateManager so we can unit test them. |
222 std::string CallGetTargetLanguageFromULP() { | 257 std::string CallGetTargetLanguageFromULP() { |
223 return TranslateManager::GetTargetLanguageFromULP(&translate_prefs_); | 258 return TranslateManager::GetTargetLanguageFromULP(&translate_prefs_); |
224 } | 259 } |
225 bool CallLanguageInULP(const std::string& language) { | 260 bool CallLanguageInULP(const std::string& language) { |
226 return translate_manager_->LanguageInULP(language); | 261 return translate_manager_->LanguageInULP(language); |
227 } | 262 } |
| 263 void InitTranslateEvent(const std::string& src_lang, |
| 264 const std::string& dst_lang) { |
| 265 translate_manager_->InitTranslateEvent(src_lang, dst_lang, |
| 266 translate_prefs_); |
| 267 } |
228 | 268 |
229 sync_preferences::TestingPrefServiceSyncable prefs_; | 269 sync_preferences::TestingPrefServiceSyncable prefs_; |
230 | 270 |
231 // TODO(groby): request TranslatePrefs from |mock_translate_client_| instead. | 271 // TODO(groby): request TranslatePrefs from |mock_translate_client_| instead. |
232 TranslatePrefs translate_prefs_; | 272 TranslatePrefs translate_prefs_; |
233 TranslateDownloadManager* manager_; | 273 TranslateDownloadManager* manager_; |
234 | 274 |
235 TestNetworkChangeNotifier network_notifier_; | 275 TestNetworkChangeNotifier network_notifier_; |
236 translate::testing::MockTranslateDriver driver_; | 276 translate::testing::MockTranslateDriver driver_; |
237 translate::testing::MockTranslateRanker mock_translate_ranker_; | 277 translate::testing::MockTranslateRanker mock_translate_ranker_; |
238 ::testing::NiceMock<MockTranslateClient> mock_translate_client_; | 278 ::testing::NiceMock<MockTranslateClient> mock_translate_client_; |
239 std::unique_ptr<TranslateManager> translate_manager_; | 279 std::unique_ptr<TranslateManager> translate_manager_; |
240 std::unique_ptr<base::FieldTrialList> field_trial_list_; | 280 std::unique_ptr<base::FieldTrialList> field_trial_list_; |
241 base::test::ScopedFeatureList scoped_feature_list_; | 281 base::test::ScopedFeatureList scoped_feature_list_; |
242 }; | 282 }; |
243 | 283 |
244 | |
245 // Target language comes from application locale if the locale's language | 284 // Target language comes from application locale if the locale's language |
246 // is supported. | 285 // is supported. |
247 TEST_F(TranslateManagerTest, GetTargetLanguageDefaultsToAppLocale) { | 286 TEST_F(TranslateManagerTest, GetTargetLanguageDefaultsToAppLocale) { |
248 // Ensure the locale is set to a supported language. | 287 // Ensure the locale is set to a supported language. |
249 ASSERT_TRUE(TranslateDownloadManager::IsSupportedLanguage("en")); | 288 ASSERT_TRUE(TranslateDownloadManager::IsSupportedLanguage("en")); |
250 manager_->set_application_locale("en"); | 289 manager_->set_application_locale("en"); |
251 EXPECT_EQ("en", TranslateManager::GetTargetLanguage(&translate_prefs_)); | 290 EXPECT_EQ("en", TranslateManager::GetTargetLanguage(&translate_prefs_)); |
252 | 291 |
253 // Try a second supported language. | 292 // Try a second supported language. |
254 ASSERT_TRUE(TranslateDownloadManager::IsSupportedLanguage("de")); | 293 ASSERT_TRUE(TranslateDownloadManager::IsSupportedLanguage("de")); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 1); | 368 1); |
330 } | 369 } |
331 | 370 |
332 // Utility function to set the threshold params | 371 // Utility function to set the threshold params |
333 void ChangeThresholdInParams( | 372 void ChangeThresholdInParams( |
334 const char* initiate_translation_confidence_threshold, | 373 const char* initiate_translation_confidence_threshold, |
335 const char* initiate_translation_probability_threshold, | 374 const char* initiate_translation_probability_threshold, |
336 const char* target_language_confidence_threshold, | 375 const char* target_language_confidence_threshold, |
337 const char* target_language_probability_threshold) { | 376 const char* target_language_probability_threshold) { |
338 ASSERT_TRUE(variations::AssociateVariationParams( | 377 ASSERT_TRUE(variations::AssociateVariationParams( |
339 kTrialName, "Enabled", {{"initiate_translation_ulp_confidence_threshold", | 378 kTrialName, "Enabled", |
340 initiate_translation_confidence_threshold}, | 379 {{"initiate_translation_ulp_confidence_threshold", |
341 {"initiate_translation_ulp_probability_threshold", | 380 initiate_translation_confidence_threshold}, |
342 initiate_translation_probability_threshold}, | 381 {"initiate_translation_ulp_probability_threshold", |
343 {"target_language_ulp_confidence_threshold", | 382 initiate_translation_probability_threshold}, |
344 target_language_confidence_threshold}, | 383 {"target_language_ulp_confidence_threshold", |
345 {"target_language_ulp_probability_threshold", | 384 target_language_confidence_threshold}, |
346 target_language_probability_threshold}})); | 385 {"target_language_ulp_probability_threshold", |
| 386 target_language_probability_threshold}})); |
347 } | 387 } |
348 | 388 |
349 // Normal ULP in Json | 389 // Normal ULP in Json |
350 const char ulp_1[] = | 390 const char ulp_1[] = |
351 "{\n" | 391 "{\n" |
352 " \"reading\": {\n" | 392 " \"reading\": {\n" |
353 " \"confidence\": 0.8,\n" | 393 " \"confidence\": 0.8,\n" |
354 " \"preference\": [\n" | 394 " \"preference\": [\n" |
355 " {\n" | 395 " {\n" |
356 " \"language\": \"fr\",\n" | 396 " \"language\": \"fr\",\n" |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
456 // to 0.9. | 496 // to 0.9. |
457 EXPECT_FALSE(CallLanguageInULP("fr")); | 497 EXPECT_FALSE(CallLanguageInULP("fr")); |
458 EXPECT_FALSE(CallLanguageInULP("pt")); | 498 EXPECT_FALSE(CallLanguageInULP("pt")); |
459 EXPECT_FALSE(CallLanguageInULP("zh-TW")); | 499 EXPECT_FALSE(CallLanguageInULP("zh-TW")); |
460 } | 500 } |
461 | 501 |
462 TEST_F(TranslateManagerTest, | 502 TEST_F(TranslateManagerTest, |
463 TestLanguageInULPLowConfidenceThresholdFromConfig) { | 503 TestLanguageInULPLowConfidenceThresholdFromConfig) { |
464 PrepareULPTest(ulp_1, true); | 504 PrepareULPTest(ulp_1, true); |
465 ChangeThresholdInParams("0.79", "0.39", "", ""); | 505 ChangeThresholdInParams("0.79", "0.39", "", ""); |
466 // Both "fr" and "pt" should reutrn true because the confidence threshold is | 506 // Both "fr" and "pt" should return true because the confidence threshold is |
467 // 0.79 and lower than 0.8 and the probability threshold is lower than both | 507 // 0.79 and lower than 0.8 and the probability threshold is lower than both |
468 // the one with "fr" (0.6) and "pt-PT" (0.4). | 508 // the one with "fr" (0.6) and "pt-PT" (0.4). |
469 EXPECT_TRUE(CallLanguageInULP("fr")); | 509 EXPECT_TRUE(CallLanguageInULP("fr")); |
470 EXPECT_TRUE(CallLanguageInULP("pt")); | 510 EXPECT_TRUE(CallLanguageInULP("pt")); |
471 EXPECT_FALSE(CallLanguageInULP("zh-TW")); | 511 EXPECT_FALSE(CallLanguageInULP("zh-TW")); |
472 } | 512 } |
473 | 513 |
| 514 TEST_F(TranslateManagerTest, TestRecordTranslateEvent) { |
| 515 PrepareTranslateManager(); |
| 516 const std::string locale = "zh-TW"; |
| 517 const std::string page_lang = "zh-CN"; |
| 518 metrics::TranslateEventProto expected_tep; |
| 519 expected_tep.set_target_language(locale); |
| 520 expected_tep.set_source_language(page_lang); |
| 521 EXPECT_CALL( |
| 522 mock_translate_ranker_, |
| 523 RecordTranslateEvent(metrics::TranslateEventProto::USER_ACCEPT, _, |
| 524 Pointee(EqualsTranslateEventProto(expected_tep)))) |
| 525 .Times(1); |
| 526 |
| 527 InitTranslateEvent(page_lang, locale); |
| 528 translate_manager_->RecordTranslateEvent( |
| 529 metrics::TranslateEventProto::USER_ACCEPT); |
| 530 } |
| 531 |
| 532 TEST_F(TranslateManagerTest, TestShouldOverrideDecision) { |
| 533 PrepareTranslateManager(); |
| 534 const int kEventType = 1; |
| 535 EXPECT_CALL( |
| 536 mock_translate_ranker_, |
| 537 ShouldOverrideDecision( |
| 538 kEventType, _, |
| 539 Pointee(EqualsTranslateEventProto(metrics::TranslateEventProto())))) |
| 540 .WillOnce(Return(false)); |
| 541 EXPECT_FALSE(translate_manager_->ShouldOverrideDecision(kEventType)); |
| 542 |
| 543 EXPECT_CALL( |
| 544 mock_translate_ranker_, |
| 545 ShouldOverrideDecision( |
| 546 kEventType, _, |
| 547 Pointee(EqualsTranslateEventProto(metrics::TranslateEventProto())))) |
| 548 .WillOnce(Return(true)); |
| 549 EXPECT_TRUE(translate_manager_->ShouldOverrideDecision(kEventType)); |
| 550 } |
| 551 |
| 552 TEST_F(TranslateManagerTest, ShouldSuppressBubbleUI_Default) { |
| 553 PrepareTranslateManager(); |
| 554 SetHasLanguageChanged(true); |
| 555 EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(false, "en")); |
| 556 EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(true, "en")); |
| 557 } |
| 558 |
| 559 TEST_F(TranslateManagerTest, ShouldSuppressBubbleUI_HasLanguageChangedFalse) { |
| 560 PrepareTranslateManager(); |
| 561 SetHasLanguageChanged(false); |
| 562 EXPECT_CALL( |
| 563 mock_translate_ranker_, |
| 564 ShouldOverrideDecision( |
| 565 metrics::TranslateEventProto::MATCHES_PREVIOUS_LANGUAGE, _, _)) |
| 566 .WillOnce(Return(false)); |
| 567 EXPECT_TRUE(translate_manager_->ShouldSuppressBubbleUI(false, "en")); |
| 568 |
| 569 EXPECT_CALL(mock_translate_ranker_, ShouldOverrideDecision(_, _, _)) |
| 570 .WillOnce(Return(false)); |
| 571 |
| 572 EXPECT_TRUE(translate_manager_->ShouldSuppressBubbleUI(true, "en")); |
| 573 } |
| 574 |
| 575 TEST_F(TranslateManagerTest, ShouldSuppressBubbleUI_NewUI) { |
| 576 PrepareTranslateManager(); |
| 577 base::test::ScopedFeatureList scoped_feature_list; |
| 578 scoped_feature_list.InitAndEnableFeature(translate::kTranslateUI2016Q2); |
| 579 SetHasLanguageChanged(false); |
| 580 EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(false, "en")); |
| 581 } |
| 582 |
| 583 TEST_F(TranslateManagerTest, ShouldSuppressBubbleUI_IsTooOftenDenied) { |
| 584 PrepareTranslateManager(); |
| 585 SetHasLanguageChanged(true); |
| 586 SetLanguageTooOftenDenied("en"); |
| 587 EXPECT_CALL( |
| 588 mock_translate_ranker_, |
| 589 ShouldOverrideDecision( |
| 590 metrics::TranslateEventProto::LANGUAGE_DISABLED_BY_AUTO_BLACKLIST, _, |
| 591 _)) |
| 592 .WillOnce(Return(false)); |
| 593 EXPECT_TRUE(translate_manager_->ShouldSuppressBubbleUI(false, "en")); |
| 594 EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(false, "de")); |
| 595 EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(true, "en")); |
| 596 } |
| 597 |
| 598 TEST_F(TranslateManagerTest, ShouldSuppressBubbleUI_Override) { |
| 599 PrepareTranslateManager(); |
| 600 EXPECT_CALL( |
| 601 mock_translate_ranker_, |
| 602 ShouldOverrideDecision( |
| 603 metrics::TranslateEventProto::MATCHES_PREVIOUS_LANGUAGE, _, _)) |
| 604 .WillOnce(Return(true)); |
| 605 EXPECT_CALL( |
| 606 mock_translate_ranker_, |
| 607 ShouldOverrideDecision( |
| 608 metrics::TranslateEventProto::LANGUAGE_DISABLED_BY_AUTO_BLACKLIST, _, |
| 609 _)) |
| 610 .WillOnce(Return(true)); |
| 611 SetHasLanguageChanged(false); |
| 612 SetLanguageTooOftenDenied("en"); |
| 613 EXPECT_FALSE(translate_manager_->ShouldSuppressBubbleUI(false, "en")); |
| 614 } |
| 615 |
474 } // namespace testing | 616 } // namespace testing |
475 | 617 |
476 } // namespace translate | 618 } // namespace translate |
OLD | NEW |