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> | |
| 8 | 9 |
| 9 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 10 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 11 #include "base/run_loop.h" | 12 #include "base/run_loop.h" |
| 12 #include "base/test/scoped_feature_list.h" | 13 #include "base/test/scoped_feature_list.h" |
| 13 #include "chrome/browser/sync/profile_sync_service_factory.h" | 14 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 14 #include "chrome/browser/sync/user_event_service_factory.h" | 15 #include "chrome/browser/sync/user_event_service_factory.h" |
| 15 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 16 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 17 #include "components/metrics/proto/translate_event.pb.h" | |
| 16 #include "components/sync/driver/sync_driver_switches.h" | 18 #include "components/sync/driver/sync_driver_switches.h" |
| 17 #include "components/sync/user_events/fake_user_event_service.h" | 19 #include "components/sync/user_events/fake_user_event_service.h" |
| 18 #include "components/translate/core/common/language_detection_details.h" | 20 #include "components/translate/core/common/language_detection_details.h" |
| 19 #include "content/public/browser/web_contents.h" | 21 #include "content/public/browser/web_contents.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 21 #include "url/gurl.h" | 23 #include "url/gurl.h" |
| 22 | 24 |
| 25 using ::metrics::TranslateEventProto; | |
| 26 | |
| 23 std::unique_ptr<KeyedService> BuildFakeUserEventService( | 27 std::unique_ptr<KeyedService> BuildFakeUserEventService( |
| 24 content::BrowserContext* context) { | 28 content::BrowserContext* context) { |
| 25 return base::MakeUnique<syncer::FakeUserEventService>(); | 29 return base::MakeUnique<syncer::FakeUserEventService>(); |
| 26 } | 30 } |
| 27 | 31 |
| 32 TranslateEventProto BuildTranslateEventProto( | |
| 33 const std::string& from, | |
| 34 const std::string& to, | |
| 35 const TranslateEventProto::EventType type) { | |
| 36 TranslateEventProto event; | |
| 37 event.set_source_language(from); | |
| 38 event.set_target_language(to); | |
| 39 event.set_event_type(type); | |
| 40 return event; | |
| 41 } | |
| 42 | |
| 28 class ChromeTranslateClientTest : public ChromeRenderViewHostTestHarness { | 43 class ChromeTranslateClientTest : public ChromeRenderViewHostTestHarness { |
| 29 public: | 44 public: |
| 30 void SetUp() override { | 45 void SetUp() override { |
| 31 ChromeRenderViewHostTestHarness::SetUp(); | 46 ChromeRenderViewHostTestHarness::SetUp(); |
| 32 fake_user_event_service_ = static_cast<syncer::FakeUserEventService*>( | 47 fake_user_event_service_ = static_cast<syncer::FakeUserEventService*>( |
| 33 browser_sync::UserEventServiceFactory::GetInstance() | 48 browser_sync::UserEventServiceFactory::GetInstance() |
| 34 ->SetTestingFactoryAndUse(browser_context(), | 49 ->SetTestingFactoryAndUse(browser_context(), |
| 35 &BuildFakeUserEventService)); | 50 &BuildFakeUserEventService)); |
| 36 scoped_feature_list_ = base::MakeUnique<base::test::ScopedFeatureList>(); | 51 scoped_feature_list_ = base::MakeUnique<base::test::ScopedFeatureList>(); |
| 37 scoped_feature_list_->InitAndEnableFeature( | |
| 38 switches::kSyncUserLanguageDetectionEvents); | |
| 39 } | 52 } |
| 40 | 53 |
| 41 void TearDown() override { ChromeRenderViewHostTestHarness::TearDown(); } | 54 void TearDown() override { ChromeRenderViewHostTestHarness::TearDown(); } |
| 42 | 55 |
| 43 protected: | 56 protected: |
| 44 syncer::FakeUserEventService* GetUserEventService() { | 57 syncer::FakeUserEventService* GetUserEventService() { |
| 45 return fake_user_event_service_; | 58 return fake_user_event_service_; |
| 46 } | 59 } |
| 47 | 60 |
| 61 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_; | |
| 62 | |
| 48 private: | 63 private: |
| 49 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_; | |
| 50 syncer::FakeUserEventService* fake_user_event_service_; | 64 syncer::FakeUserEventService* fake_user_event_service_; |
| 51 }; | 65 }; |
| 52 | 66 |
| 53 TEST_F(ChromeTranslateClientTest, LanguageEventShouldRecord) { | 67 TEST_F(ChromeTranslateClientTest, LanguageEventShouldRecord) { |
| 68 scoped_feature_list_->InitAndEnableFeature( | |
| 69 switches::kSyncUserLanguageDetectionEvents); | |
| 54 GURL url("http://yahoo.com"); | 70 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) { |
| 82 scoped_feature_list_->InitAndEnableFeature( | |
| 83 switches::kSyncUserLanguageDetectionEvents); | |
| 66 GURL url("about://blank"); | 84 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 scoped_feature_list_->InitAndEnableFeature( | |
|
napper
2017/06/26 00:32:04
Can't you just do this once in SetUp()?
renjieliu1
2017/06/26 01:04:42
Done.
| |
| 97 switches::kSyncUserTranslationEvents); | |
| 98 GURL url("http://yahoo.com"); | |
|
napper
2017/06/26 00:32:04
const?
renjieliu1
2017/06/26 01:04:42
Done.
| |
| 99 NavigateAndCommit(url); | |
| 100 ChromeTranslateClient client(web_contents()); | |
| 101 // Event we care. | |
| 102 const TranslateEventProto& event_proto = | |
| 103 BuildTranslateEventProto("ja", "en", TranslateEventProto::USER_ACCEPT); | |
| 104 client.RecordTranslateEvent(event_proto); | |
| 105 EXPECT_EQ(1ul, GetUserEventService()->GetRecordedUserEvents().size()); | |
|
napper
2017/06/26 00:32:04
I think 1 instead of 1ul
renjieliu1
2017/06/26 01:04:42
.size() returns a unsigned long and it seems EXPEC
| |
| 106 } | |
|
napper
2017/06/26 00:32:04
Can you also test the content of the event?
renjieliu1
2017/06/26 01:04:42
Done.
| |
| 107 | |
| 108 TEST_F(ChromeTranslateClientTest, TranslationEventShouldNotRecord) { | |
| 109 scoped_feature_list_->InitAndEnableFeature( | |
| 110 switches::kSyncUserTranslationEvents); | |
| 111 GURL url("http://yahoo.com"); | |
| 112 NavigateAndCommit(url); | |
| 113 ChromeTranslateClient client(web_contents()); | |
| 114 // Event we don't care. | |
| 115 const TranslateEventProto& event_proto = BuildTranslateEventProto( | |
| 116 "ja", "en", TranslateEventProto::UNSUPPORTED_URL); | |
| 117 client.RecordTranslateEvent(event_proto); | |
| 118 EXPECT_EQ(0u, GetUserEventService()->GetRecordedUserEvents().size()); | |
| 119 } | |
| OLD | NEW |