Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2015 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 "android_webview/browser/aw_metrics_service_client.h" | |
| 6 | |
| 7 #include "android_webview/common/aw_version_info_values.h" | |
| 8 #include "base/bind.h" | |
| 9 #include "base/i18n/rtl.h" | |
| 10 #include "base/prefs/pref_service.h" | |
| 11 #include "components/metrics/metrics_service.h" | |
| 12 #include "components/metrics/metrics_state_manager.h" | |
| 13 #include "components/metrics/net/net_metrics_log_uploader.h" | |
| 14 #include "components/metrics/ui/screen_info_metrics_provider.h" | |
| 15 #include "components/metrics/url_constants.h" | |
| 16 | |
| 17 namespace android_webview { | |
| 18 | |
| 19 base::LazyInstance<AwMetricsServiceClient>::Leaky g_lazy_instance_; | |
| 20 | |
| 21 namespace { | |
| 22 const int kUploadIntervalMinutes = 30; | |
| 23 } | |
|
sgurun-gerrit only
2015/12/21 21:47:25
nit: add // namespace to indicate the end of names
paulmiller
2015/12/22 19:42:04
done
| |
| 24 | |
| 25 // static | |
| 26 AwMetricsServiceClient* AwMetricsServiceClient::GetInstance() { | |
| 27 return g_lazy_instance_.Pointer(); | |
| 28 } | |
| 29 | |
| 30 // static | |
| 31 void AwMetricsServiceClient::Initialize( | |
| 32 PrefService* pref_service, | |
| 33 net::URLRequestContextGetter* request_context) { | |
| 34 DCHECK(!is_initialized_); | |
| 35 | |
| 36 pref_service_ = pref_service; | |
| 37 request_context_ = request_context; | |
| 38 | |
| 39 metrics_state_manager_ = metrics::MetricsStateManager::Create( | |
| 40 pref_service_, base::Bind(&AwMetricsServiceClient::IsReportingEnabled, | |
| 41 base::Unretained(this)), | |
| 42 base::Bind(&AwMetricsServiceClient::StoreClientInfo, | |
| 43 base::Unretained(this)), | |
| 44 base::Bind(&AwMetricsServiceClient::LoadClientInfo, | |
| 45 base::Unretained(this))); | |
| 46 metrics_service_.reset(new ::metrics::MetricsService( | |
| 47 metrics_state_manager_.get(), this, pref_service_)); | |
| 48 | |
|
sgurun-gerrit only
2015/12/21 21:47:25
please file a bug that blocks main UMA bug to add
paulmiller
2015/12/22 19:42:04
I'll just copy all the relevant-looking ones from
| |
| 49 metrics_service_->RegisterMetricsProvider( | |
| 50 scoped_ptr<metrics::MetricsProvider>( | |
| 51 new metrics::ScreenInfoMetricsProvider)); | |
| 52 metrics_service_->InitializeMetricsRecordingState(); | |
| 53 | |
| 54 is_initialized_ = true; | |
| 55 | |
| 56 if (IsReportingEnabled()) | |
| 57 metrics_service_->Start(); | |
| 58 } | |
| 59 | |
| 60 void AwMetricsServiceClient::Finalize() { | |
| 61 DCHECK(is_initialized_); | |
| 62 metrics_service_->Stop(); | |
| 63 } | |
| 64 | |
| 65 void AwMetricsServiceClient::SetMetricsEnabled(bool enabled) { | |
| 66 // If the client is already initialized, apply the setting immediately. | |
| 67 // Otherwise, it will be applied on initialization. | |
| 68 if (is_initialized_ && is_enabled_ != enabled) { | |
| 69 if (enabled) { | |
|
sgurun-gerrit only
2015/12/21 21:47:26
nit: no brackets when if block is oneliner.
paulmiller
2015/12/22 19:42:04
done
| |
| 70 metrics_service_->Start(); | |
| 71 } else { | |
| 72 metrics_service_->Stop(); | |
| 73 } | |
| 74 } | |
| 75 is_enabled_ = enabled; | |
| 76 } | |
| 77 | |
| 78 metrics::MetricsService* AwMetricsServiceClient::GetMetricsService() { | |
| 79 return metrics_service_.get(); | |
| 80 } | |
| 81 | |
| 82 // In Chrome, UMA and Breakpad are enabled/disabled together by the same | |
| 83 // checkbox and they share the same client ID (a.k.a. GUID). SetMetricsClientId | |
| 84 // and OnRecordingDisabled are intended to provide the ID to Breakpad. In | |
| 85 // WebView, UMA and Breakpad are independent, so these are no-ops. | |
| 86 | |
| 87 void AwMetricsServiceClient::SetMetricsClientId(const std::string& client_id) {} | |
| 88 | |
| 89 void AwMetricsServiceClient::OnRecordingDisabled() {} | |
| 90 | |
| 91 bool AwMetricsServiceClient::IsOffTheRecordSessionActive() { | |
| 92 // WebView has no incognito mode. | |
| 93 return false; | |
| 94 } | |
| 95 | |
| 96 int32_t AwMetricsServiceClient::GetProduct() { | |
| 97 // TODO(paulmiller) Switch this to a WebView product once we have a log source | |
| 98 // for WebView. | |
|
sgurun-gerrit only
2015/12/21 21:47:26
this seems to need its own bug (or 564962 is satis
paulmiller
2015/12/22 19:42:04
The purpose of 564962 is to get the log source, so
| |
| 99 return ::metrics::ChromeUserMetricsExtension::CHROME; | |
| 100 } | |
| 101 | |
| 102 std::string AwMetricsServiceClient::GetApplicationLocale() { | |
| 103 return base::i18n::GetConfiguredLocale(); | |
| 104 } | |
| 105 | |
| 106 bool AwMetricsServiceClient::GetBrand(std::string* brand_code) { | |
| 107 // WebView doesn't use brand codes. | |
| 108 return false; | |
| 109 } | |
| 110 | |
| 111 metrics::SystemProfileProto::Channel AwMetricsServiceClient::GetChannel() { | |
| 112 // "Channel" means stable, beta, etc. WebView doesn't have channel info yet. | |
| 113 // TODO(paulmiller) Update this once we have channel info. | |
| 114 return metrics::SystemProfileProto::CHANNEL_UNKNOWN; | |
| 115 } | |
| 116 | |
| 117 std::string AwMetricsServiceClient::GetVersionString() { | |
| 118 return PRODUCT_VERSION; | |
| 119 } | |
| 120 | |
| 121 void AwMetricsServiceClient::OnLogUploadComplete() {} | |
| 122 | |
| 123 void AwMetricsServiceClient::InitializeSystemProfileMetrics( | |
| 124 const base::Closure& done_callback) { | |
| 125 done_callback.Run(); | |
| 126 } | |
| 127 | |
| 128 void AwMetricsServiceClient::CollectFinalMetricsForLog( | |
| 129 const base::Closure& done_callback) { | |
| 130 done_callback.Run(); | |
| 131 } | |
| 132 | |
| 133 scoped_ptr<metrics::MetricsLogUploader> AwMetricsServiceClient::CreateUploader( | |
| 134 const base::Callback<void(int)>& on_upload_complete) { | |
| 135 return scoped_ptr<::metrics::MetricsLogUploader>( | |
| 136 new metrics::NetMetricsLogUploader( | |
| 137 request_context_, | |
| 138 // TODO(paulmiller): Switch this to metrics::kDefaultMetricsServerUrl | |
| 139 // once we have a log source for WebView. | |
| 140 "http://localhost:10000/uma/v2", | |
| 141 metrics::kDefaultMetricsMimeType, | |
| 142 on_upload_complete)); | |
| 143 } | |
| 144 | |
| 145 base::TimeDelta AwMetricsServiceClient::GetStandardUploadInterval() { | |
| 146 return base::TimeDelta::FromMinutes(kUploadIntervalMinutes); | |
| 147 } | |
| 148 | |
| 149 AwMetricsServiceClient::AwMetricsServiceClient() | |
| 150 : is_initialized_(false), | |
| 151 is_enabled_(false), | |
| 152 pref_service_(nullptr), | |
| 153 request_context_(nullptr) {} | |
| 154 | |
| 155 AwMetricsServiceClient::~AwMetricsServiceClient() {} | |
| 156 | |
| 157 bool AwMetricsServiceClient::IsReportingEnabled() { | |
| 158 return is_enabled_; | |
|
sgurun-gerrit only
2015/12/21 21:47:25
this is called as a callback from metrics service.
paulmiller
2015/12/22 19:42:04
done
| |
| 159 } | |
| 160 | |
| 161 // Store/LoadClientInfo allow Windows Chrome to back up ClientInfo. They're | |
| 162 // no-ops for WebView. | |
| 163 | |
| 164 void AwMetricsServiceClient::StoreClientInfo( | |
| 165 const metrics::ClientInfo& client_info) {} | |
| 166 | |
| 167 scoped_ptr<metrics::ClientInfo> AwMetricsServiceClient::LoadClientInfo() { | |
| 168 scoped_ptr<metrics::ClientInfo> client_info; | |
| 169 return client_info.Pass(); | |
| 170 } | |
| 171 | |
| 172 } // namespace android_webview | |
| OLD | NEW |