| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "chrome/browser/translate/chrome_translate_client.h" | 5 #include "chrome/browser/translate/chrome_translate_client.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> |
| 9 #include <vector> |
| 8 | 10 |
| 9 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 10 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 11 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
| 12 #include "base/test/scoped_feature_list.h" | 14 #include "base/test/scoped_feature_list.h" |
| 13 #include "chrome/browser/sync/profile_sync_service_factory.h" | 15 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 14 #include "chrome/browser/sync/user_event_service_factory.h" | 16 #include "chrome/browser/sync/user_event_service_factory.h" |
| 15 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 17 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 18 #include "components/metrics/proto/translate_event.pb.h" |
| 16 #include "components/sync/driver/sync_driver_switches.h" | 19 #include "components/sync/driver/sync_driver_switches.h" |
| 17 #include "components/sync/user_events/fake_user_event_service.h" | 20 #include "components/sync/user_events/fake_user_event_service.h" |
| 18 #include "components/translate/core/common/language_detection_details.h" | 21 #include "components/translate/core/common/language_detection_details.h" |
| 19 #include "content/public/browser/web_contents.h" | 22 #include "content/public/browser/web_contents.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 21 #include "url/gurl.h" | 24 #include "url/gurl.h" |
| 22 | 25 |
| 23 std::unique_ptr<KeyedService> BuildFakeUserEventService( | 26 std::unique_ptr<KeyedService> BuildFakeUserEventService( |
| 24 content::BrowserContext* context) { | 27 content::BrowserContext* context) { |
| 25 return base::MakeUnique<syncer::FakeUserEventService>(); | 28 return base::MakeUnique<syncer::FakeUserEventService>(); |
| 26 } | 29 } |
| 27 | 30 |
| 31 metrics::TranslateEventProto BuildTranslateEventProto( |
| 32 const std::string& from, |
| 33 const std::string& to, |
| 34 const metrics::TranslateEventProto::EventType type) { |
| 35 metrics::TranslateEventProto event; |
| 36 event.set_source_language(from); |
| 37 event.set_target_language(to); |
| 38 event.set_event_type(type); |
| 39 return event; |
| 40 } |
| 41 |
| 28 class ChromeTranslateClientTest : public ChromeRenderViewHostTestHarness { | 42 class ChromeTranslateClientTest : public ChromeRenderViewHostTestHarness { |
| 29 public: | 43 public: |
| 30 void SetUp() override { | 44 void SetUp() override { |
| 31 ChromeRenderViewHostTestHarness::SetUp(); | 45 ChromeRenderViewHostTestHarness::SetUp(); |
| 32 fake_user_event_service_ = static_cast<syncer::FakeUserEventService*>( | 46 fake_user_event_service_ = static_cast<syncer::FakeUserEventService*>( |
| 33 browser_sync::UserEventServiceFactory::GetInstance() | 47 browser_sync::UserEventServiceFactory::GetInstance() |
| 34 ->SetTestingFactoryAndUse(browser_context(), | 48 ->SetTestingFactoryAndUse(browser_context(), |
| 35 &BuildFakeUserEventService)); | 49 &BuildFakeUserEventService)); |
| 36 scoped_feature_list_ = base::MakeUnique<base::test::ScopedFeatureList>(); | 50 scoped_feature_list_ = base::MakeUnique<base::test::ScopedFeatureList>(); |
| 37 scoped_feature_list_->InitAndEnableFeature( | 51 scoped_feature_list_->InitWithFeatures( |
| 38 switches::kSyncUserLanguageDetectionEvents); | 52 {switches::kSyncUserLanguageDetectionEvents, |
| 53 switches::kSyncUserTranslationEvents}, |
| 54 {}); |
| 39 } | 55 } |
| 40 | 56 |
| 41 void TearDown() override { ChromeRenderViewHostTestHarness::TearDown(); } | 57 void TearDown() override { ChromeRenderViewHostTestHarness::TearDown(); } |
| 42 | 58 |
| 43 protected: | 59 protected: |
| 44 syncer::FakeUserEventService* GetUserEventService() { | 60 syncer::FakeUserEventService* GetUserEventService() { |
| 45 return fake_user_event_service_; | 61 return fake_user_event_service_; |
| 46 } | 62 } |
| 47 | 63 |
| 48 private: | 64 private: |
| 49 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_; | 65 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_; |
| 50 syncer::FakeUserEventService* fake_user_event_service_; | 66 syncer::FakeUserEventService* fake_user_event_service_; |
| 51 }; | 67 }; |
| 52 | 68 |
| 53 TEST_F(ChromeTranslateClientTest, LanguageEventShouldRecord) { | 69 TEST_F(ChromeTranslateClientTest, LanguageEventShouldRecord) { |
| 54 GURL url("http://yahoo.com"); | 70 const GURL url("http://yahoo.com"); |
| 55 NavigateAndCommit(url); | 71 NavigateAndCommit(url); |
| 56 ChromeTranslateClient client(web_contents()); | 72 ChromeTranslateClient client(web_contents()); |
| 57 translate::LanguageDetectionDetails details; | 73 translate::LanguageDetectionDetails details; |
| 58 details.cld_language = "en"; | 74 details.cld_language = "en"; |
| 59 details.is_cld_reliable = true; | 75 details.is_cld_reliable = true; |
| 60 details.adopted_language = "en"; | 76 details.adopted_language = "en"; |
| 61 client.OnLanguageDetermined(details); | 77 client.OnLanguageDetermined(details); |
| 62 EXPECT_EQ(1ul, GetUserEventService()->GetRecordedUserEvents().size()); | 78 EXPECT_EQ(1ul, GetUserEventService()->GetRecordedUserEvents().size()); |
| 63 } | 79 } |
| 64 | 80 |
| 65 TEST_F(ChromeTranslateClientTest, LanguageEventShouldNotRecord) { | 81 TEST_F(ChromeTranslateClientTest, LanguageEventShouldNotRecord) { |
| 66 GURL url("about://blank"); | 82 const GURL url("about://blank"); |
| 67 NavigateAndCommit(url); | 83 NavigateAndCommit(url); |
| 68 ChromeTranslateClient client(web_contents()); | 84 ChromeTranslateClient client(web_contents()); |
| 69 translate::LanguageDetectionDetails details; | 85 translate::LanguageDetectionDetails details; |
| 70 details.cld_language = "en"; | 86 details.cld_language = "en"; |
| 71 details.is_cld_reliable = true; | 87 details.is_cld_reliable = true; |
| 72 details.adopted_language = "en"; | 88 details.adopted_language = "en"; |
| 73 client.OnLanguageDetermined(details); | 89 client.OnLanguageDetermined(details); |
| 74 EXPECT_EQ(0u, GetUserEventService()->GetRecordedUserEvents().size()); | 90 EXPECT_EQ(0u, GetUserEventService()->GetRecordedUserEvents().size()); |
| 75 } | 91 } |
| 92 |
| 93 TEST_F(ChromeTranslateClientTest, TranslationEventShouldRecord) { |
| 94 const GURL url("http://yahoo.com"); |
| 95 NavigateAndCommit(url); |
| 96 ChromeTranslateClient client(web_contents()); |
| 97 // An event we care about. |
| 98 const metrics::TranslateEventProto& event_proto = BuildTranslateEventProto( |
| 99 "ja", "en", metrics::TranslateEventProto::USER_ACCEPT); |
| 100 client.RecordTranslateEvent(event_proto); |
| 101 EXPECT_EQ(1ul, GetUserEventService()->GetRecordedUserEvents().size()); |
| 102 |
| 103 sync_pb::UserEventSpecifics::Translation expected_translation_event; |
| 104 expected_translation_event.set_from_language_code("ja"); |
| 105 expected_translation_event.set_to_language_code("en"); |
| 106 expected_translation_event.set_interaction( |
| 107 sync_pb::UserEventSpecifics::Translation::ACCEPT); |
| 108 const auto& result_translation_event = |
| 109 GetUserEventService()->GetRecordedUserEvents()[0].translation_event(); |
| 110 EXPECT_EQ(expected_translation_event.SerializeAsString(), |
| 111 result_translation_event.SerializeAsString()); |
| 112 } |
| 113 |
| 114 TEST_F(ChromeTranslateClientTest, TranslationEventShouldNotRecord) { |
| 115 const GURL url("http://yahoo.com"); |
| 116 NavigateAndCommit(url); |
| 117 ChromeTranslateClient client(web_contents()); |
| 118 // An event we don't care about. |
| 119 const metrics::TranslateEventProto& event_proto = BuildTranslateEventProto( |
| 120 "ja", "en", metrics::TranslateEventProto::UNSUPPORTED_URL); |
| 121 client.RecordTranslateEvent(event_proto); |
| 122 EXPECT_EQ(0u, GetUserEventService()->GetRecordedUserEvents().size()); |
| 123 } |
| OLD | NEW |