Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(445)

Side by Side Diff: components/translate/core/browser/translate_manager.cc

Issue 2400503002: [Translate] Integrate TranslateEventProto UMA logging into TranslateManager. (Closed)
Patch Set: review candidate Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_manager.h" 5 #include "components/translate/core/browser/translate_manager.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 return; 211 return;
212 } 212 }
213 213
214 std::unique_ptr<TranslatePrefs> translate_prefs( 214 std::unique_ptr<TranslatePrefs> translate_prefs(
215 translate_client_->GetTranslatePrefs()); 215 translate_client_->GetTranslatePrefs());
216 216
217 std::string target_lang = GetTargetLanguage(translate_prefs.get()); 217 std::string target_lang = GetTargetLanguage(translate_prefs.get());
218 std::string language_code = 218 std::string language_code =
219 TranslateDownloadManager::GetLanguageCode(page_lang); 219 TranslateDownloadManager::GetLanguageCode(page_lang);
220 220
221 InitTranslateEvent(language_code, target_lang, *translate_prefs);
222
221 // Don't translate similar languages (ex: en-US to en). 223 // Don't translate similar languages (ex: en-US to en).
222 if (language_code == target_lang) { 224 if (language_code == target_lang) {
223 TranslateBrowserMetrics::ReportInitiationStatus( 225 TranslateBrowserMetrics::ReportInitiationStatus(
224 TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); 226 TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES);
225 return; 227 return;
226 } 228 }
227 229
228 // Nothing to do if either the language Chrome is in or the language of the 230 // Nothing to do if either the language Chrome is in or the language of the
229 // page is not supported by the translation server. 231 // page is not supported by the translation server.
230 if (target_lang.empty() || 232 if (target_lang.empty() ||
231 !TranslateDownloadManager::IsSupportedLanguage(language_code)) { 233 !TranslateDownloadManager::IsSupportedLanguage(language_code)) {
232 TranslateBrowserMetrics::ReportInitiationStatus( 234 TranslateBrowserMetrics::ReportInitiationStatus(
233 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); 235 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED);
234 TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation( 236 TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation(
235 language_code); 237 language_code);
238 RecordTranslateEvent(metrics::TranslateEventProto::UNSUPPORTED_LANGUAGE);
236 return; 239 return;
237 } 240 }
238 241
239 TranslateAcceptLanguages* accept_languages = 242 TranslateAcceptLanguages* accept_languages =
240 translate_client_->GetTranslateAcceptLanguages(); 243 translate_client_->GetTranslateAcceptLanguages();
241 // Don't translate any user black-listed languages. 244 // Don't translate any user black-listed languages.
242 if (!translate_prefs->CanTranslateLanguage(accept_languages, 245 if (!translate_prefs->CanTranslateLanguage(accept_languages,
243 language_code)) { 246 language_code)) {
244 TranslateBrowserMetrics::ReportInitiationStatus( 247 TranslateBrowserMetrics::ReportInitiationStatus(
245 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); 248 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG);
249 RecordTranslateEvent(
250 metrics::TranslateEventProto::LANGUAGE_DISABLED_BY_USER_CONFIG);
246 return; 251 return;
247 } 252 }
248 253
249 // Don't translate any user black-listed URLs. 254 // Don't translate any user black-listed URLs.
250 if (translate_prefs->IsSiteBlacklisted(page_url.HostNoBrackets())) { 255 if (translate_prefs->IsSiteBlacklisted(page_url.HostNoBrackets())) {
251 TranslateBrowserMetrics::ReportInitiationStatus( 256 TranslateBrowserMetrics::ReportInitiationStatus(
252 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); 257 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG);
258 RecordTranslateEvent(
259 metrics::TranslateEventProto::URL_DISABLED_BY_USER_CONFIG);
253 return; 260 return;
254 } 261 }
255 262
256 // If the user has previously selected "always translate" for this language we 263 // If the user has previously selected "always translate" for this language we
257 // automatically translate. Note that in incognito mode we disable that 264 // automatically translate. Note that in incognito mode we disable that
258 // feature; the user will get an infobar, so they can control whether the 265 // feature; the user will get an infobar, so they can control whether the
259 // page's text is sent to the translate server. 266 // page's text is sent to the translate server.
260 if (!translate_driver_->IsOffTheRecord()) { 267 if (!translate_driver_->IsOffTheRecord()) {
261 std::string auto_target_lang = 268 std::string auto_target_lang =
262 GetAutoTargetLanguage(language_code, translate_prefs.get()); 269 GetAutoTargetLanguage(language_code, translate_prefs.get());
263 if (!auto_target_lang.empty()) { 270 if (!auto_target_lang.empty()) {
264 TranslateBrowserMetrics::ReportInitiationStatus( 271 TranslateBrowserMetrics::ReportInitiationStatus(
265 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); 272 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG);
273 translate_event_.set_modified_target_language(auto_target_lang);
274 RecordTranslateEvent(
275 metrics::TranslateEventProto::AUTOMATICALLY_TRANSLATED);
266 TranslatePage(language_code, auto_target_lang, false); 276 TranslatePage(language_code, auto_target_lang, false);
267 return; 277 return;
268 } 278 }
269 } 279 }
270 280
271 std::string auto_translate_to = language_state_.AutoTranslateTo(); 281 std::string auto_translate_to = language_state_.AutoTranslateTo();
272 if (!auto_translate_to.empty()) { 282 if (!auto_translate_to.empty()) {
273 // This page was navigated through a click from a translated page. 283 // This page was navigated through a click from a translated page.
274 TranslateBrowserMetrics::ReportInitiationStatus( 284 TranslateBrowserMetrics::ReportInitiationStatus(
275 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK); 285 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK);
286 translate_event_.set_modified_target_language(auto_translate_to);
287 RecordTranslateEvent(
288 metrics::TranslateEventProto::AUTOMATICALLY_TRANSLATED);
276 TranslatePage(language_code, auto_translate_to, false); 289 TranslatePage(language_code, auto_translate_to, false);
277 return; 290 return;
278 } 291 }
279 292
280 if (LanguageInULP(language_code)) { 293 if (LanguageInULP(language_code)) {
281 TranslateBrowserMetrics::ReportInitiationStatus( 294 TranslateBrowserMetrics::ReportInitiationStatus(
282 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IN_ULP); 295 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IN_ULP);
296 RecordTranslateEvent(metrics::TranslateEventProto::DISABLED_BY_PREF);
283 return; 297 return;
284 } 298 }
285 299
286 if (TranslateRanker::IsEnabled()) { 300 if (TranslateRanker::IsEnabled()) {
287 if (!TranslateRanker::GetInstance()->ShouldOfferTranslation( 301 TranslateRanker* translate_ranker = TranslateRanker::GetInstance();
288 *translate_client_->GetTranslatePrefs(), language_code, 302 bool should_offer_translation = translate_ranker->ShouldOfferTranslation(
289 target_lang)) { 303 *translate_client_->GetTranslatePrefs(), language_code, target_lang);
304 translate_event_.set_ranker_request_timestamp_sec(
305 (base::TimeTicks::Now() - base::TimeTicks()).InSeconds());
306 translate_event_.set_ranker_version(translate_ranker->GetModelVersion());
307 translate_event_.set_ranker_response(
308 should_offer_translation ? metrics::TranslateEventProto::SHOW
309 : metrics::TranslateEventProto::DONT_SHOW);
310 if (!should_offer_translation && TranslateRanker::IsEnforcementEnabled()) {
290 TranslateBrowserMetrics::ReportInitiationStatus( 311 TranslateBrowserMetrics::ReportInitiationStatus(
291 TranslateBrowserMetrics::INITIATION_STATUS_ABORTED_BY_RANKER); 312 TranslateBrowserMetrics::INITIATION_STATUS_ABORTED_BY_RANKER);
313 RecordTranslateEvent(metrics::TranslateEventProto::DISABLED_BY_RANKER);
292 return; 314 return;
293 } 315 }
294 } 316 }
295 317
296 TranslateBrowserMetrics::ReportInitiationStatus( 318 TranslateBrowserMetrics::ReportInitiationStatus(
297 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); 319 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR);
298 320
299 // Prompts the user if they want the page translated. 321 // Prompts the user if they want the page translated.
300 translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, 322 translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_BEFORE_TRANSLATE,
301 language_code, 323 language_code,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 } 356 }
335 357
336 // Translation can be kicked by context menu against unsupported languages. 358 // Translation can be kicked by context menu against unsupported languages.
337 // Unsupported language strings should be replaced with 359 // Unsupported language strings should be replaced with
338 // kUnknownLanguageCode in order to send a translation request with enabling 360 // kUnknownLanguageCode in order to send a translation request with enabling
339 // server side auto language detection. 361 // server side auto language detection.
340 std::string source_lang(original_source_lang); 362 std::string source_lang(original_source_lang);
341 if (!TranslateDownloadManager::IsSupportedLanguage(source_lang)) 363 if (!TranslateDownloadManager::IsSupportedLanguage(source_lang))
342 source_lang = std::string(translate::kUnknownLanguageCode); 364 source_lang = std::string(translate::kUnknownLanguageCode);
343 365
366 // Capture the translate event if we were triggered from the menu.
367 if (triggered_from_menu) {
368 translate_event_.set_source_language(source_lang);
369 translate_event_.set_target_language(target_lang);
hamelphi 2016/10/07 21:41:26 Why not call InitTranslateEvent here?
Roger McFarlane (Chromium) 2016/10/13 07:45:43 Done.
370 RecordTranslateEvent(
371 metrics::TranslateEventProto::USER_CONTEXT_MENU_TRANSLATE);
372 }
373
374 // Trigger the "translating now" UI.
344 translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_TRANSLATING, 375 translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_TRANSLATING,
345 source_lang, 376 source_lang,
346 target_lang, 377 target_lang,
347 TranslateErrors::NONE, 378 TranslateErrors::NONE,
348 triggered_from_menu); 379 triggered_from_menu);
349 380
350 TranslateScript* script = TranslateDownloadManager::GetInstance()->script(); 381 TranslateScript* script = TranslateDownloadManager::GetInstance()->script();
351 DCHECK(script != NULL); 382 DCHECK(script != NULL);
352 383
353 const std::string& script_data = script->data(); 384 const std::string& script_data = script->data();
354 if (!script_data.empty()) { 385 if (!script_data.empty()) {
355 DoTranslatePage(script_data, source_lang, target_lang); 386 DoTranslatePage(script_data, source_lang, target_lang);
356 return; 387 return;
357 } 388 }
358 389
359 // The script is not available yet. Queue that request and query for the 390 // The script is not available yet. Queue that request and query for the
360 // script. Once it is downloaded we'll do the translate. 391 // script. Once it is downloaded we'll do the translate.
361 TranslateScript::RequestCallback callback = base::Bind( 392 TranslateScript::RequestCallback callback = base::Bind(
362 &TranslateManager::OnTranslateScriptFetchComplete, GetWeakPtr(), 393 &TranslateManager::OnTranslateScriptFetchComplete, GetWeakPtr(),
363 source_lang, target_lang); 394 source_lang, target_lang);
364 395
365 script->Request(callback); 396 script->Request(callback);
366 } 397 }
367 398
368 void TranslateManager::RevertTranslation() { 399 void TranslateManager::RevertTranslation() {
400 // Capture the revert event in the translate metrics
401 RecordTranslateEvent(metrics::TranslateEventProto::USER_REVERT);
402
403 // Revert the translation.
369 translate_driver_->RevertTranslation(page_seq_no_); 404 translate_driver_->RevertTranslation(page_seq_no_);
370 language_state_.SetCurrentLanguage(language_state_.original_language()); 405 language_state_.SetCurrentLanguage(language_state_.original_language());
371 } 406 }
372 407
373 void TranslateManager::ReportLanguageDetectionError() { 408 void TranslateManager::ReportLanguageDetectionError() {
374 TranslateBrowserMetrics::ReportLanguageDetectionError(); 409 TranslateBrowserMetrics::ReportLanguageDetectionError();
375 410
376 GURL report_error_url = GURL(kReportLanguageDetectionErrorURL); 411 GURL report_error_url = GURL(kReportLanguageDetectionErrorURL);
377 412
378 report_error_url = net::AppendQueryParameter( 413 report_error_url = net::AppendQueryParameter(
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 return language_state_; 569 return language_state_;
535 } 570 }
536 571
537 bool TranslateManager::ignore_missing_key_for_testing_ = false; 572 bool TranslateManager::ignore_missing_key_for_testing_ = false;
538 573
539 // static 574 // static
540 void TranslateManager::SetIgnoreMissingKeyForTesting(bool ignore) { 575 void TranslateManager::SetIgnoreMissingKeyForTesting(bool ignore) {
541 ignore_missing_key_for_testing_ = ignore; 576 ignore_missing_key_for_testing_ = ignore;
542 } 577 }
543 578
579 void TranslateManager::InitTranslateEvent(const std::string& src_lang,
580 const std::string& dst_lang,
581 const TranslatePrefs& prefs) {
582 translate_event_.Clear();
583 translate_event_.set_source_language(src_lang);
584 translate_event_.set_target_language(dst_lang);
585 translate_event_.set_accept_count(
586 prefs.GetTranslationAcceptedCount(src_lang));
587 translate_event_.set_decline_count(prefs.GetTranslationDeniedCount(src_lang));
588 translate_event_.set_ignore_count(prefs.GetTranslationIgnoredCount(src_lang));
589 translate_event_.set_ranker_response(
590 metrics::TranslateEventProto::NOT_QUERIED);
591 translate_event_.set_event_type(metrics::TranslateEventProto::UNKNOWN);
592 // TODO(rogerm): Populate the language list.
593 }
594
595 void TranslateManager::RecordTranslateEvent(
596 metrics::TranslateEventProto::EventType event_type) {
597 // TODO(rogerm): early exit for incognito?
598 translate_event_.set_event_type(event_type);
599 translate_event_.set_event_timestamp_sec(
600 (base::TimeTicks::Now() - base::TimeTicks()).InSeconds());
601 // TODO(rogerm): Finish writing me!
602 }
603
544 } // namespace translate 604 } // namespace translate
OLDNEW
« no previous file with comments | « components/translate/core/browser/translate_manager.h ('k') | components/translate/core/browser/translate_ranker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698