Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: components/translate/core/browser/translate_manager_unittest.cc

Issue 2697703004: Allow TranslateRanker to override decisions taken by heuristics. (Closed)
Patch Set: Make ShouldSuppressBubbleUI easier to read. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698