Chromium Code Reviews| 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 |
| 26 using ::metrics::TranslateEventProto; | |
|
Matt Giuca
2017/06/29 00:26:51
I don't think it's worth using this for just 2 men
renjieliu1
2017/06/29 01:09:06
Done.
| |
| 27 | |
| 23 std::unique_ptr<KeyedService> BuildFakeUserEventService( | 28 std::unique_ptr<KeyedService> BuildFakeUserEventService( |
| 24 content::BrowserContext* context) { | 29 content::BrowserContext* context) { |
| 25 return base::MakeUnique<syncer::FakeUserEventService>(); | 30 return base::MakeUnique<syncer::FakeUserEventService>(); |
| 26 } | 31 } |
| 27 | 32 |
| 33 TranslateEventProto BuildTranslateEventProto( | |
| 34 const std::string& from, | |
| 35 const std::string& to, | |
| 36 const TranslateEventProto::EventType type) { | |
| 37 TranslateEventProto event; | |
| 38 event.set_source_language(from); | |
| 39 event.set_target_language(to); | |
| 40 event.set_event_type(type); | |
| 41 return event; | |
| 42 } | |
| 43 | |
| 28 class ChromeTranslateClientTest : public ChromeRenderViewHostTestHarness { | 44 class ChromeTranslateClientTest : public ChromeRenderViewHostTestHarness { |
| 29 public: | 45 public: |
| 30 void SetUp() override { | 46 void SetUp() override { |
| 31 ChromeRenderViewHostTestHarness::SetUp(); | 47 ChromeRenderViewHostTestHarness::SetUp(); |
| 32 fake_user_event_service_ = static_cast<syncer::FakeUserEventService*>( | 48 fake_user_event_service_ = static_cast<syncer::FakeUserEventService*>( |
| 33 browser_sync::UserEventServiceFactory::GetInstance() | 49 browser_sync::UserEventServiceFactory::GetInstance() |
| 34 ->SetTestingFactoryAndUse(browser_context(), | 50 ->SetTestingFactoryAndUse(browser_context(), |
| 35 &BuildFakeUserEventService)); | 51 &BuildFakeUserEventService)); |
| 36 scoped_feature_list_ = base::MakeUnique<base::test::ScopedFeatureList>(); | 52 scoped_feature_list_ = base::MakeUnique<base::test::ScopedFeatureList>(); |
| 37 scoped_feature_list_->InitAndEnableFeature( | 53 scoped_feature_list_->InitWithFeatures( |
| 38 switches::kSyncUserLanguageDetectionEvents); | 54 {switches::kSyncUserLanguageDetectionEvents, |
| 55 switches::kSyncUserTranslationEvents}, | |
| 56 {}); | |
| 39 } | 57 } |
| 40 | 58 |
| 41 void TearDown() override { ChromeRenderViewHostTestHarness::TearDown(); } | 59 void TearDown() override { ChromeRenderViewHostTestHarness::TearDown(); } |
| 42 | 60 |
| 43 protected: | 61 protected: |
| 44 syncer::FakeUserEventService* GetUserEventService() { | 62 syncer::FakeUserEventService* GetUserEventService() { |
| 45 return fake_user_event_service_; | 63 return fake_user_event_service_; |
| 46 } | 64 } |
| 47 | 65 |
| 48 private: | 66 private: |
| 49 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_; | 67 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_; |
| 50 syncer::FakeUserEventService* fake_user_event_service_; | 68 syncer::FakeUserEventService* fake_user_event_service_; |
| 51 }; | 69 }; |
| 52 | 70 |
| 53 TEST_F(ChromeTranslateClientTest, LanguageEventShouldRecord) { | 71 TEST_F(ChromeTranslateClientTest, LanguageEventShouldRecord) { |
| 54 GURL url("http://yahoo.com"); | 72 const GURL url("http://yahoo.com"); |
| 55 NavigateAndCommit(url); | 73 NavigateAndCommit(url); |
| 56 ChromeTranslateClient client(web_contents()); | 74 ChromeTranslateClient client(web_contents()); |
| 57 translate::LanguageDetectionDetails details; | 75 translate::LanguageDetectionDetails details; |
| 58 details.cld_language = "en"; | 76 details.cld_language = "en"; |
| 59 details.is_cld_reliable = true; | 77 details.is_cld_reliable = true; |
| 60 details.adopted_language = "en"; | 78 details.adopted_language = "en"; |
| 61 client.OnLanguageDetermined(details); | 79 client.OnLanguageDetermined(details); |
| 62 EXPECT_EQ(1ul, GetUserEventService()->GetRecordedUserEvents().size()); | 80 EXPECT_EQ(1ul, GetUserEventService()->GetRecordedUserEvents().size()); |
| 63 } | 81 } |
| 64 | 82 |
| 65 TEST_F(ChromeTranslateClientTest, LanguageEventShouldNotRecord) { | 83 TEST_F(ChromeTranslateClientTest, LanguageEventShouldNotRecord) { |
| 66 GURL url("about://blank"); | 84 const GURL url("about://blank"); |
| 67 NavigateAndCommit(url); | 85 NavigateAndCommit(url); |
| 68 ChromeTranslateClient client(web_contents()); | 86 ChromeTranslateClient client(web_contents()); |
| 69 translate::LanguageDetectionDetails details; | 87 translate::LanguageDetectionDetails details; |
| 70 details.cld_language = "en"; | 88 details.cld_language = "en"; |
| 71 details.is_cld_reliable = true; | 89 details.is_cld_reliable = true; |
| 72 details.adopted_language = "en"; | 90 details.adopted_language = "en"; |
| 73 client.OnLanguageDetermined(details); | 91 client.OnLanguageDetermined(details); |
| 74 EXPECT_EQ(0u, GetUserEventService()->GetRecordedUserEvents().size()); | 92 EXPECT_EQ(0u, GetUserEventService()->GetRecordedUserEvents().size()); |
| 75 } | 93 } |
| 94 | |
| 95 TEST_F(ChromeTranslateClientTest, TranslationEventShouldRecord) { | |
| 96 const GURL url("http://yahoo.com"); | |
| 97 NavigateAndCommit(url); | |
| 98 ChromeTranslateClient client(web_contents()); | |
| 99 // Event we care. | |
|
Matt Giuca
2017/06/29 00:26:51
What does this comment mean? "An event we care abo
renjieliu1
2017/06/29 01:09:06
good suggestion!
| |
| 100 const TranslateEventProto& event_proto = | |
| 101 BuildTranslateEventProto("ja", "en", TranslateEventProto::USER_ACCEPT); | |
| 102 client.RecordTranslateEvent(event_proto); | |
| 103 EXPECT_EQ(1ul, GetUserEventService()->GetRecordedUserEvents().size()); | |
| 104 | |
| 105 sync_pb::Translation expected_translation_event; | |
| 106 expected_translation_event.set_from_language_code("ja"); | |
| 107 expected_translation_event.set_to_language_code("en"); | |
| 108 expected_translation_event.set_interaction(sync_pb::Translation::ACCEPT); | |
| 109 const auto& result_translation_event = | |
| 110 GetUserEventService()->GetRecordedUserEvents()[0].translation(); | |
| 111 EXPECT_EQ(expected_translation_event.SerializeAsString(), | |
| 112 result_translation_event.SerializeAsString()); | |
| 113 } | |
| 114 | |
| 115 TEST_F(ChromeTranslateClientTest, TranslationEventShouldNotRecord) { | |
| 116 const GURL url("http://yahoo.com"); | |
| 117 NavigateAndCommit(url); | |
| 118 ChromeTranslateClient client(web_contents()); | |
| 119 // Event we don't care. | |
|
Matt Giuca
2017/06/29 00:26:51
Same.
renjieliu1
2017/06/29 01:09:06
Done.
| |
| 120 const TranslateEventProto& event_proto = BuildTranslateEventProto( | |
| 121 "ja", "en", TranslateEventProto::UNSUPPORTED_URL); | |
| 122 client.RecordTranslateEvent(event_proto); | |
| 123 EXPECT_EQ(0u, GetUserEventService()->GetRecordedUserEvents().size()); | |
| 124 } | |
| OLD | NEW |