OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2011 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 #include "chrome/browser/language_usage_metrics.h" | |
6 | |
7 #include <algorithm> | |
8 | |
9 #include "base/metrics/histogram.h" | |
10 #include "base/string_tokenizer.h" | |
11 #include "base/string_util.h" | |
12 | |
13 namespace { | |
14 void RecordAcceptLanguage(Language language) { | |
15 UMA_HISTOGRAM_ENUMERATION("LanguageUsageMetrics.AcceptLanguage", | |
16 language, NUM_LANGUAGES); | |
17 } | |
18 } // namespace | |
19 | |
20 // static | |
21 void LanguageUsageMetrics::RecordAcceptLanguages( | |
22 const std::string& accept_languages) { | |
23 std::set<Language> languages; | |
24 ParseAcceptLanguages(accept_languages, &languages); | |
25 std::for_each(languages.begin(), languages.end(), RecordAcceptLanguage); | |
26 } | |
27 | |
28 // static | |
29 void LanguageUsageMetrics::RecordApplicationLanguage( | |
30 const std::string& application_locale) { | |
31 Language language = ToLanguage(application_locale); | |
32 if (language != UNKNOWN_LANGUAGE) { | |
33 UMA_HISTOGRAM_ENUMERATION("LanguageUsageMetrics.ApplicationLanguage", | |
34 language, NUM_LANGUAGES); | |
35 } | |
36 } | |
37 | |
38 // static | |
39 void LanguageUsageMetrics::ParseAcceptLanguages( | |
40 const std::string& accept_languages, std::set<Language>* languages) { | |
41 languages->clear(); | |
42 StringTokenizer locales(accept_languages, ","); | |
43 while (locales.GetNext()) { | |
44 Language language = ToLanguage(locales.token()); | |
Yusuke Sato
2011/07/13 06:52:06
nit: add const?
Yuzo
2011/07/13 11:30:20
Done.
Also done at line 31 and 57.
| |
45 if (language != UNKNOWN_LANGUAGE) { | |
46 languages->insert(language); | |
47 } | |
48 } | |
49 } | |
50 | |
51 // static | |
52 Language LanguageUsageMetrics::ToLanguage(const std::string& locale) { | |
53 StringTokenizer parts(locale, "-_"); | |
54 if (!parts.GetNext()) { | |
55 return UNKNOWN_LANGUAGE; | |
56 } | |
57 std::string language_part = parts.token(); | |
Yusuke Sato
2011/07/13 06:52:06
ditto
Yuzo
2011/07/13 11:30:20
Done.
| |
58 Language language; | |
Yusuke Sato
2011/07/13 06:52:06
ditto
Yuzo
2011/07/13 11:30:20
This is non-const because it will be changed on li
| |
59 if (!LanguageFromCode(language_part.c_str(), &language)) { | |
60 return UNKNOWN_LANGUAGE; | |
61 } | |
62 return language; | |
63 } | |
OLD | NEW |