| OLD | NEW | 
|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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_ranker_impl.h" | 5 #include "components/translate/core/browser/translate_ranker_impl.h" | 
| 6 | 6 | 
| 7 #include <initializer_list> | 7 #include <initializer_list> | 
| 8 #include <memory> | 8 #include <memory> | 
| 9 | 9 | 
| 10 #include "base/feature_list.h" | 10 #include "base/feature_list.h" | 
| 11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" | 
| 12 #include "base/run_loop.h" | 12 #include "base/run_loop.h" | 
| 13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" | 
| 14 #include "base/task_scheduler/post_task.h" | 14 #include "base/task_scheduler/post_task.h" | 
| 15 #include "base/test/scoped_feature_list.h" | 15 #include "base/test/scoped_feature_list.h" | 
| 16 #include "base/test/scoped_task_environment.h" | 16 #include "base/test/scoped_task_environment.h" | 
| 17 #include "components/metrics/proto/translate_event.pb.h" | 17 #include "components/metrics/proto/translate_event.pb.h" | 
| 18 #include "components/metrics/proto/ukm/source.pb.h" | 18 #include "components/metrics/proto/ukm/source.pb.h" | 
| 19 #include "components/prefs/scoped_user_pref_update.h" | 19 #include "components/prefs/scoped_user_pref_update.h" | 
| 20 #include "components/sync_preferences/testing_pref_service_syncable.h" | 20 #include "components/sync_preferences/testing_pref_service_syncable.h" | 
| 21 #include "components/translate/core/browser/proto/ranker_model.pb.h" | 21 #include "components/translate/core/browser/proto/ranker_model.pb.h" | 
| 22 #include "components/translate/core/browser/proto/translate_ranker_model.pb.h" | 22 #include "components/translate/core/browser/proto/translate_ranker_model.pb.h" | 
| 23 #include "components/translate/core/browser/ranker_model.h" | 23 #include "components/translate/core/browser/ranker_model.h" | 
| 24 #include "components/translate/core/browser/translate_download_manager.h" | 24 #include "components/translate/core/browser/translate_download_manager.h" | 
| 25 #include "components/translate/core/browser/translate_prefs.h" | 25 #include "components/translate/core/browser/translate_prefs.h" | 
| 26 #include "components/ukm/test_ukm_service.h" | 26 #include "components/ukm/test_ukm_recorder.h" | 
| 27 #include "components/ukm/ukm_source.h" | 27 #include "components/ukm/ukm_source.h" | 
| 28 #include "net/url_request/test_url_fetcher_factory.h" | 28 #include "net/url_request/test_url_fetcher_factory.h" | 
| 29 #include "net/url_request/url_request_test_util.h" | 29 #include "net/url_request/url_request_test_util.h" | 
| 30 #include "testing/gtest/include/gtest/gtest.h" | 30 #include "testing/gtest/include/gtest/gtest.h" | 
| 31 #include "url/gurl.h" | 31 #include "url/gurl.h" | 
| 32 | 32 | 
| 33 namespace { | 33 namespace { | 
| 34 | 34 | 
| 35 using translate::kTranslateRankerEnforcement; | 35 using translate::kTranslateRankerEnforcement; | 
| 36 using translate::kTranslateRankerQuery; | 36 using translate::kTranslateRankerQuery; | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 68       int decline_count, | 68       int decline_count, | 
| 69       int ignore_count); | 69       int ignore_count); | 
| 70 | 70 | 
| 71   // The platform-specific name of the preferred language pref. | 71   // The platform-specific name of the preferred language pref. | 
| 72   static const char* const kPreferredLanguagePref; | 72   static const char* const kPreferredLanguagePref; | 
| 73 | 73 | 
| 74   // Prefs. | 74   // Prefs. | 
| 75   std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> prefs_; | 75   std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> prefs_; | 
| 76   std::unique_ptr<translate::TranslatePrefs> translate_prefs_; | 76   std::unique_ptr<translate::TranslatePrefs> translate_prefs_; | 
| 77 | 77 | 
| 78   ukm::TestUkmService* GetTestUkmService() { | 78   ukm::TestUkmRecorder* GetTestUkmRecorder() { return &test_ukm_recorder_; } | 
| 79     return ukm_service_test_harness_.test_ukm_service(); |  | 
| 80   } |  | 
| 81   metrics::TranslateEventProto tep1_ = | 79   metrics::TranslateEventProto tep1_ = | 
| 82       CreateTranslateEvent("fr", "en", 1, 0, 3); | 80       CreateTranslateEvent("fr", "en", 1, 0, 3); | 
| 83   metrics::TranslateEventProto tep2_ = | 81   metrics::TranslateEventProto tep2_ = | 
| 84       CreateTranslateEvent("jp", "en", 2, 0, 3); | 82       CreateTranslateEvent("jp", "en", 2, 0, 3); | 
| 85   metrics::TranslateEventProto tep3_ = | 83   metrics::TranslateEventProto tep3_ = | 
| 86       CreateTranslateEvent("es", "de", 4, 5, 6); | 84       CreateTranslateEvent("es", "de", 4, 5, 6); | 
| 87 | 85 | 
| 88  private: | 86  private: | 
| 89   ukm::UkmServiceTestingHarness ukm_service_test_harness_; | 87   ukm::TestUkmRecorder test_ukm_recorder_; | 
| 90 | 88 | 
| 91   // Override the default URL fetcher to return custom responses for tests. | 89   // Override the default URL fetcher to return custom responses for tests. | 
| 92   net::TestURLFetcherFactory url_fetcher_factory_; | 90   net::TestURLFetcherFactory url_fetcher_factory_; | 
| 93 | 91 | 
| 94   // Used to initialize the translate download manager. | 92   // Used to initialize the translate download manager. | 
| 95   scoped_refptr<net::TestURLRequestContextGetter> request_context_; | 93   scoped_refptr<net::TestURLRequestContextGetter> request_context_; | 
| 96 | 94 | 
| 97   // Sets up the task scheduling/task-runner environment for each test. | 95   // Sets up the task scheduling/task-runner environment for each test. | 
| 98   base::test::ScopedTaskEnvironment scoped_task_environment_; | 96   base::test::ScopedTaskEnvironment scoped_task_environment_; | 
| 99 | 97 | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 177   country_weight["de"] = 0.07f; | 175   country_weight["de"] = 0.07f; | 
| 178   country_weight["ca"] = 0.08f; | 176   country_weight["ca"] = 0.08f; | 
| 179   country_weight["cn"] = 0.09f; | 177   country_weight["cn"] = 0.09f; | 
| 180 | 178 | 
| 181   auto& locale_weight = *details->mutable_locale_weight(); | 179   auto& locale_weight = *details->mutable_locale_weight(); | 
| 182   locale_weight["en-us"] = 0.10f; | 180   locale_weight["en-us"] = 0.10f; | 
| 183   locale_weight["en-ca"] = 0.11f; | 181   locale_weight["en-ca"] = 0.11f; | 
| 184   locale_weight["zh-cn"] = 0.12f;  // Normalized to lowercase. | 182   locale_weight["zh-cn"] = 0.12f;  // Normalized to lowercase. | 
| 185 | 183 | 
| 186   auto impl = base::MakeUnique<TranslateRankerImpl>(base::FilePath(), GURL(), | 184   auto impl = base::MakeUnique<TranslateRankerImpl>(base::FilePath(), GURL(), | 
| 187                                                     GetTestUkmService()); | 185                                                     GetTestUkmRecorder()); | 
| 188   impl->OnModelAvailable(std::move(model)); | 186   impl->OnModelAvailable(std::move(model)); | 
| 189   base::RunLoop().RunUntilIdle(); | 187   base::RunLoop().RunUntilIdle(); | 
| 190   return impl; | 188   return impl; | 
| 191 } | 189 } | 
| 192 | 190 | 
| 193 // static | 191 // static | 
| 194 double TranslateRankerImplTest::Sigmoid(double x) { | 192 double TranslateRankerImplTest::Sigmoid(double x) { | 
| 195   return 1.0 / (1.0 + exp(-x)); | 193   return 1.0 / (1.0 + exp(-x)); | 
| 196 } | 194 } | 
| 197 | 195 | 
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 364   ASSERT_EQ(0, flushed_events[0].event_type()); | 362   ASSERT_EQ(0, flushed_events[0].event_type()); | 
| 365   ASSERT_EQ(tep2_.source_language(), flushed_events[1].source_language()); | 363   ASSERT_EQ(tep2_.source_language(), flushed_events[1].source_language()); | 
| 366   ASSERT_EQ(1, flushed_events[1].event_type()); | 364   ASSERT_EQ(1, flushed_events[1].event_type()); | 
| 367   ASSERT_EQ(tep3_.source_language(), flushed_events[2].source_language()); | 365   ASSERT_EQ(tep3_.source_language(), flushed_events[2].source_language()); | 
| 368   ASSERT_EQ(2, flushed_events[2].event_type()); | 366   ASSERT_EQ(2, flushed_events[2].event_type()); | 
| 369 | 367 | 
| 370   // Check that the cache has been cleared. | 368   // Check that the cache has been cleared. | 
| 371   ranker->FlushTranslateEvents(&flushed_events); | 369   ranker->FlushTranslateEvents(&flushed_events); | 
| 372   EXPECT_EQ(0U, flushed_events.size()); | 370   EXPECT_EQ(0U, flushed_events.size()); | 
| 373 | 371 | 
| 374   ASSERT_EQ(2U, GetTestUkmService()->sources_count()); | 372   ASSERT_EQ(2U, GetTestUkmRecorder()->sources_count()); | 
| 375   EXPECT_EQ( | 373   EXPECT_EQ( | 
| 376       url0.spec(), | 374       url0.spec(), | 
| 377       GetTestUkmService()->GetSourceForUrl(url0.spec().c_str())->url().spec()); | 375       GetTestUkmRecorder()->GetSourceForUrl(url0.spec().c_str())->url().spec()); | 
| 378   EXPECT_EQ( | 376   EXPECT_EQ( | 
| 379       url1.spec(), | 377       url1.spec(), | 
| 380       GetTestUkmService()->GetSourceForUrl(url1.spec().c_str())->url().spec()); | 378       GetTestUkmRecorder()->GetSourceForUrl(url1.spec().c_str())->url().spec()); | 
| 381 } | 379 } | 
| 382 | 380 | 
| 383 TEST_F(TranslateRankerImplTest, LoggingDisabledViaOverride) { | 381 TEST_F(TranslateRankerImplTest, LoggingDisabledViaOverride) { | 
| 384   std::unique_ptr<translate::TranslateRankerImpl> ranker = | 382   std::unique_ptr<translate::TranslateRankerImpl> ranker = | 
| 385       GetRankerForTest(0.0f); | 383       GetRankerForTest(0.0f); | 
| 386   std::vector<metrics::TranslateEventProto> flushed_events; | 384   std::vector<metrics::TranslateEventProto> flushed_events; | 
| 387 | 385 | 
| 388   ranker->FlushTranslateEvents(&flushed_events); | 386   ranker->FlushTranslateEvents(&flushed_events); | 
| 389   EXPECT_EQ(0U, flushed_events.size()); | 387   EXPECT_EQ(0U, flushed_events.size()); | 
| 390 | 388 | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 434   EXPECT_TRUE(ranker->ShouldOverrideDecision(2, GURL(), &tep)); | 432   EXPECT_TRUE(ranker->ShouldOverrideDecision(2, GURL(), &tep)); | 
| 435 | 433 | 
| 436   std::vector<metrics::TranslateEventProto> flushed_events; | 434   std::vector<metrics::TranslateEventProto> flushed_events; | 
| 437   ranker->FlushTranslateEvents(&flushed_events); | 435   ranker->FlushTranslateEvents(&flushed_events); | 
| 438   EXPECT_EQ(0U, flushed_events.size()); | 436   EXPECT_EQ(0U, flushed_events.size()); | 
| 439   ASSERT_EQ(2, tep.decision_overrides_size()); | 437   ASSERT_EQ(2, tep.decision_overrides_size()); | 
| 440   ASSERT_EQ(1, tep.decision_overrides(0)); | 438   ASSERT_EQ(1, tep.decision_overrides(0)); | 
| 441   ASSERT_EQ(2, tep.decision_overrides(1)); | 439   ASSERT_EQ(2, tep.decision_overrides(1)); | 
| 442   ASSERT_EQ(0, tep.event_type()); | 440   ASSERT_EQ(0, tep.event_type()); | 
| 443 } | 441 } | 
| OLD | NEW | 
|---|