1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef COMPONENTS_TRANSLATE_COMMON_TRANSLATE_METRICS_H_
6#define COMPONENTS_TRANSLATE_COMMON_TRANSLATE_METRICS_H_
7
8#include <string>
9
10#include "base/time/time.h"
11
12namespace translate {
13
14// An indexing type to query each UMA entry name via GetMetricsName() function.
15// Note: |kMetricsEntries| should be updated when a new entry is added here.
16enum MetricsNameIndex {
17  UMA_LANGUAGE_DETECTION,
18  UMA_CONTENT_LANGUAGE,
19  UMA_HTML_LANG,
20  UMA_LANGUAGE_VERIFICATION,
21  UMA_TIME_TO_BE_READY,
22  UMA_TIME_TO_LOAD,
23  UMA_TIME_TO_TRANSLATE,
24  UMA_USER_ACTION_DURATION,
25  UMA_PAGE_SCHEME,
26  UMA_SIMILAR_LANGUAGE_MATCH,
27  UMA_MAX,
28};
29
30// A page may provide a Content-Language HTTP header or a META tag.
31// TranslateHelper checks if a server provides a valid Content-Language.
32enum LanguageCheckType {
33  LANGUAGE_NOT_PROVIDED,
34  LANGUAGE_VALID,
35  LANGUAGE_INVALID,
36  LANGUAGE_MAX,
37};
38
39// When a valid Content-Language is provided, TranslateHelper checks if a
40// server provided Content-Language matches to a language CLD determined.
41enum LanguageVerificationType {
42  LANGUAGE_VERIFICATION_CLD_DISABLED,  // obsolete
43  LANGUAGE_VERIFICATION_CLD_ONLY,
44  LANGUAGE_VERIFICATION_UNKNOWN,
45  LANGUAGE_VERIFICATION_CLD_AGREE,
46  LANGUAGE_VERIFICATION_CLD_DISAGREE,
47  LANGUAGE_VERIFICATION_TRUST_CLD,
48  LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE,
49  LANGUAGE_VERIFICATION_MAX,
50};
51
52// Scheme type of pages Chrome is going to translate.
53enum SchemeType {
54  SCHEME_HTTP,
55  SCHEME_HTTPS,
56  SCHEME_OTHERS,
57  SCHEME_MAX,
58};
59
60// Called after TranslateHelper verifies a server providing Content-Language
61// header. |provided_code| contains a Content-Language header value which a
62// server provides. It can be empty string when a server doesn't provide it.
63// |revised_code| is a value modified by format error corrector.
64void ReportContentLanguage(const std::string& provided_code,
65                           const std::string& revised_code);
66
67// Called after TranslateHelper verifies a page providing html lang attribute.
68// |provided_code| contains a html lang attribute which a page provides. It can
69// be empty string when a page doesn't provide it. |revised_code| is a value
70// modified by format error corrector.
71void ReportHtmlLang(const std::string& provided_code,
72                    const std::string& revised_code);
73
74// Called when CLD verifies Content-Language header.
75void ReportLanguageVerification(LanguageVerificationType type);
76
77// Called when the Translate Element library is ready.
78void ReportTimeToBeReady(double time_in_msec);
79
80// Called when the Translate Element library is loaded.
81void ReportTimeToLoad(double time_in_msec);
82
83// Called when a page translation is finished.
84void ReportTimeToTranslate(double time_in_msec);
85
86// Called when a translation is triggered.
87void ReportUserActionDuration(base::TimeTicks begin, base::TimeTicks end);
88
89// Called when a translation is triggered.
90void ReportPageScheme(const std::string& scheme);
91
92// Called when CLD detects page language.
93void ReportLanguageDetectionTime(base::TimeTicks begin, base::TimeTicks end);
94
95// Called when CLD agreed on a language which is different, but in the similar
96// language list.
97void ReportSimilarLanguageMatch(bool match);
98
99// Gets UMA name for an entry specified by |index|.
100const char* GetMetricsName(MetricsNameIndex index);
101
102}  // namespace translate
103
104#endif  // COMPONENTS_TRANSLATE_COMMON_TRANSLATE_METRICS_H_
105