Chromium Code Reviews| Index: components/policy/core/browser/browser_policy_connector.cc |
| diff --git a/components/policy/core/browser/browser_policy_connector.cc b/components/policy/core/browser/browser_policy_connector.cc |
| index ead92324b6ba51131fa46d8aaa7764d45b161251..1ff2197d784d38597bbf2f2170e2735a1ca56111 100644 |
| --- a/components/policy/core/browser/browser_policy_connector.cc |
| +++ b/components/policy/core/browser/browser_policy_connector.cc |
| @@ -11,6 +11,8 @@ |
| #include "base/logging.h" |
| #include "base/message_loop/message_loop.h" |
| #include "base/message_loop/message_loop_proxy.h" |
| +#include "base/metrics/histogram.h" |
| +#include "base/metrics/sparse_histogram.h" |
| #include "base/prefs/pref_registry_simple.h" |
| #include "base/strings/string16.h" |
| #include "base/strings/utf_string_conversions.h" |
| @@ -39,8 +41,30 @@ const char kDefaultDeviceManagementServerUrl[] = |
| bool g_created_policy_service = false; |
| ConfigurationPolicyProvider* g_testing_provider = NULL; |
| +void ReportRegexSuccessMetric(bool success) { |
| + UMA_HISTOGRAM_BOOLEAN("Enterprise.DomainWhitelistRegexSuccess", success); |
| +} |
| + |
| + |
|
Ilya Sherman
2014/07/24 17:29:32
nit: Spurious newline
Andrew T Wilson (Slow)
2014/07/25 07:39:01
Done.
|
| +// Regexes that match many of the larger public email providers as we know |
| +// these users are not from hosted enterprise domains. Keep this list in sync |
| +// with the EnterpriseDomainRegex enum in histograms.xml. |
| +const wchar_t* kNonManagedDomainPatterns[] = { |
|
Ilya Sherman
2014/07/24 17:29:33
nit: Can this be more const?
Andrew T Wilson (Slow)
2014/07/25 07:39:01
Done.
|
| + L"aol\\.com", |
| + L"googlemail\\.com", |
| + L"gmail\\.com", |
| + L"hotmail(\\.co|\\.com|)\\.[^.]+", // hotmail.com, hotmail.it, hotmail.co.uk |
|
Ilya Sherman
2014/07/24 17:29:33
Hmm, this is a slightly strange regex -- why speci
Andrew T Wilson (Slow)
2014/07/24 19:49:53
Agreed, I can fix this in a separate CL (this isn'
|
| + L"live\\.com", |
| + L"mail\\.ru", |
| + L"msn\\.com", |
| + L"qq\\.com", |
| + L"yahoo(\\.co|\\.com|)\\.[^.]+", // yahoo.com, yahoo.co.uk, yahoo.com.tw |
| + L"yandex\\.ru", |
| +}; |
| + |
| // Returns true if |domain| matches the regex |pattern|. |
| -bool MatchDomain(const base::string16& domain, const base::string16& pattern) { |
| +bool MatchDomain(const base::string16& domain, const base::string16& pattern, |
| + size_t index) { |
| UErrorCode status = U_ZERO_ERROR; |
| const icu::UnicodeString icu_pattern(pattern.data(), pattern.length()); |
| icu::RegexMatcher matcher(icu_pattern, UREGEX_CASE_INSENSITIVE, status); |
| @@ -52,8 +76,14 @@ bool MatchDomain(const base::string16& domain, const base::string16& pattern) { |
| // optimization than crash. |
| DLOG(ERROR) << "Possible invalid domain pattern: " << pattern |
| << " - Error: " << status; |
| + ReportRegexSuccessMetric(false); |
| + UMA_HISTOGRAM_ENUMERATION("Enterprise.DomainWhitelistRegexFailureIndex", |
| + index, arraysize(kNonManagedDomainPatterns)); |
|
Ilya Sherman
2014/07/24 17:29:33
Note that as you have this set up, the only valid
Andrew T Wilson (Slow)
2014/07/24 19:49:53
Yes. My goal isn't to have this be a long-term UMA
|
| + UMA_HISTOGRAM_SPARSE_SLOWLY("Enterprise.DomainWhitelistRegexFailureStatus", |
| + status); |
| return false; |
| } |
| + ReportRegexSuccessMetric(true); |
| icu::UnicodeString icu_input(domain.data(), domain.length()); |
| matcher.reset(icu_input); |
| status = U_ZERO_ERROR; |
| @@ -192,26 +222,11 @@ bool BrowserPolicyConnector::IsNonEnterpriseUser(const std::string& username) { |
| // users. |
| return true; |
| } |
| - |
| - // Exclude many of the larger public email providers as we know these users |
| - // are not from hosted enterprise domains. |
| - static const wchar_t* kNonManagedDomainPatterns[] = { |
| - L"aol\\.com", |
| - L"googlemail\\.com", |
| - L"gmail\\.com", |
| - L"hotmail(\\.co|\\.com|)\\.[^.]+", // hotmail.com, hotmail.it, hotmail.co.uk |
| - L"live\\.com", |
| - L"mail\\.ru", |
| - L"msn\\.com", |
| - L"qq\\.com", |
| - L"yahoo(\\.co|\\.com|)\\.[^.]+", // yahoo.com, yahoo.co.uk, yahoo.com.tw |
| - L"yandex\\.ru", |
| - }; |
| const base::string16 domain = base::UTF8ToUTF16( |
| gaia::ExtractDomainName(gaia::CanonicalizeEmail(username))); |
| for (size_t i = 0; i < arraysize(kNonManagedDomainPatterns); i++) { |
| base::string16 pattern = base::WideToUTF16(kNonManagedDomainPatterns[i]); |
| - if (MatchDomain(domain, pattern)) |
| + if (MatchDomain(domain, pattern, i)) |
| return true; |
| } |
| return false; |