| Index: chrome/browser/translate/chrome_translate_client.cc
|
| diff --git a/chrome/browser/translate/chrome_translate_client.cc b/chrome/browser/translate/chrome_translate_client.cc
|
| index c29d82fc79b9440dc06d7cac05cc956683739d89..7aadf49de88c89b3242c5f0ffe42c9e159389d1c 100644
|
| --- a/chrome/browser/translate/chrome_translate_client.cc
|
| +++ b/chrome/browser/translate/chrome_translate_client.cc
|
| @@ -43,6 +43,7 @@
|
| #include "components/translate/core/browser/translate_prefs.h"
|
| #include "components/translate/core/common/language_detection_details.h"
|
| #include "components/translate/core/common/language_detection_logging_helper.h"
|
| +#include "components/translate/core/common/translation_logging_helper.h"
|
| #include "components/variations/service/variations_service.h"
|
| #include "content/public/browser/navigation_entry.h"
|
| #include "content/public/browser/notification_service.h"
|
| @@ -51,26 +52,29 @@
|
| #include "url/gurl.h"
|
|
|
| namespace {
|
| +using metrics::TranslateEventProto;
|
|
|
| -metrics::TranslateEventProto::EventType BubbleResultToTranslateEvent(
|
| +TranslateEventProto::EventType BubbleResultToTranslateEvent(
|
| ShowTranslateBubbleResult result) {
|
| switch (result) {
|
| case ShowTranslateBubbleResult::BROWSER_WINDOW_NOT_VALID:
|
| - return metrics::TranslateEventProto::BROWSER_WINDOW_IS_INVALID;
|
| + return TranslateEventProto::BROWSER_WINDOW_IS_INVALID;
|
| case ShowTranslateBubbleResult::BROWSER_WINDOW_MINIMIZED:
|
| - return metrics::TranslateEventProto::BROWSER_WINDOW_IS_MINIMIZED;
|
| + return TranslateEventProto::BROWSER_WINDOW_IS_MINIMIZED;
|
| case ShowTranslateBubbleResult::BROWSER_WINDOW_NOT_ACTIVE:
|
| - return metrics::TranslateEventProto::BROWSER_WINDOW_NOT_ACTIVE;
|
| + return TranslateEventProto::BROWSER_WINDOW_NOT_ACTIVE;
|
| case ShowTranslateBubbleResult::WEB_CONTENTS_NOT_ACTIVE:
|
| - return metrics::TranslateEventProto::WEB_CONTENTS_NOT_ACTIVE;
|
| + return TranslateEventProto::WEB_CONTENTS_NOT_ACTIVE;
|
| case ShowTranslateBubbleResult::EDITABLE_FIELD_IS_ACTIVE:
|
| - return metrics::TranslateEventProto::EDITABLE_FIELD_IS_ACTIVE;
|
| + return TranslateEventProto::EDITABLE_FIELD_IS_ACTIVE;
|
| default:
|
| NOTREACHED();
|
| return metrics::TranslateEventProto::UNKNOWN;
|
| }
|
| }
|
|
|
| +// ========== LOG LANGUAGE DETECTION EVENT ==============
|
| +
|
| void LogLanguageDetectionEvent(
|
| const content::WebContents* const web_contents,
|
| const translate::LanguageDetectionDetails& details) {
|
| @@ -92,6 +96,36 @@ void LogLanguageDetectionEvent(
|
| }
|
| }
|
|
|
| +// ========== LOG TRANSLATE EVENT ==============
|
| +
|
| +void LogTranslateEvent(const content::WebContents* const web_contents,
|
| + const metrics::TranslateEventProto& translate_event) {
|
| + DCHECK(web_contents);
|
| + auto* const profile =
|
| + Profile::FromBrowserContext(web_contents->GetBrowserContext());
|
| +
|
| + syncer::UserEventService* const user_event_service =
|
| + browser_sync::UserEventServiceFactory::GetForProfile(profile);
|
| +
|
| + const auto* const entry =
|
| + web_contents->GetController().GetLastCommittedEntry();
|
| +
|
| + // If entry is null, we don't record the page.
|
| + // The navigation entry can be null in situations like download or initial
|
| + // blank page.
|
| + if (entry == nullptr)
|
| + return;
|
| +
|
| + auto specifics = base::MakeUnique<sync_pb::UserEventSpecifics>();
|
| + // We only log the event we care about.
|
| + const bool needs_logging = translate::ConstructTranslateEvent(
|
| + entry->GetTimestamp().ToInternalValue(), translate_event,
|
| + specifics.get());
|
| + if (needs_logging) {
|
| + user_event_service->RecordUserEvent(std::move(specifics));
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| DEFINE_WEB_CONTENTS_USER_DATA_KEY(ChromeTranslateClient);
|
| @@ -196,6 +230,11 @@ void ChromeTranslateClient::GetTranslateLanguages(
|
| translate::TranslateManager::GetTargetLanguage(translate_prefs.get());
|
| }
|
|
|
| +void ChromeTranslateClient::RecordTranslateEvent(
|
| + const TranslateEventProto& translate_event) {
|
| + LogTranslateEvent(web_contents(), translate_event);
|
| +}
|
| +
|
| // static
|
| void ChromeTranslateClient::BindContentTranslateDriver(
|
| content::RenderFrameHost* render_frame_host,
|
|
|