OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "ios/chrome/browser/ios_chrome_main_parts.h" | 5 #include "ios/chrome/browser/ios_chrome_main_parts.h" |
6 | 6 |
7 #include "base/base_switches.h" | 7 #include "base/base_switches.h" |
8 #include "base/feature_list.h" | 8 #include "base/feature_list.h" |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 base::CommandLine::ForCurrentProcess()); | 107 base::CommandLine::ForCurrentProcess()); |
108 | 108 |
109 // Initialize tracking synchronizer system. | 109 // Initialize tracking synchronizer system. |
110 tracking_synchronizer_ = new metrics::TrackingSynchronizer( | 110 tracking_synchronizer_ = new metrics::TrackingSynchronizer( |
111 base::MakeUnique<base::DefaultTickClock>(), | 111 base::MakeUnique<base::DefaultTickClock>(), |
112 base::Bind(&metrics::IOSTrackingSynchronizerDelegate::Create)); | 112 base::Bind(&metrics::IOSTrackingSynchronizerDelegate::Create)); |
113 | 113 |
114 // Now the command line has been mutated based on about:flags, we can setup | 114 // Now the command line has been mutated based on about:flags, we can setup |
115 // metrics and initialize field trials that are needed by IOSChromeIOThread's | 115 // metrics and initialize field trials that are needed by IOSChromeIOThread's |
116 // initialization which happens in ApplicationContext:PreCreateThreads. | 116 // initialization which happens in ApplicationContext:PreCreateThreads. |
117 SetUpMetricsAndFieldTrials(); | 117 SetupFieldTrials(); |
| 118 SetupMetrics(); |
118 | 119 |
119 // Initialize FieldTrialSynchronizer system. | 120 // Initialize FieldTrialSynchronizer system. |
120 field_trial_synchronizer_.reset(new ios::FieldTrialSynchronizer); | 121 field_trial_synchronizer_.reset(new ios::FieldTrialSynchronizer); |
121 | 122 |
122 application_context_->PreCreateThreads(); | 123 application_context_->PreCreateThreads(); |
123 } | 124 } |
124 | 125 |
125 void IOSChromeMainParts::PreMainMessageLoopRun() { | 126 void IOSChromeMainParts::PreMainMessageLoopRun() { |
126 // Now that the file thread has been started, start recording. | 127 // Now that the file thread has been started, start recording. |
127 StartMetricsRecording(); | 128 StartMetricsRecording(); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 void IOSChromeMainParts::PostMainMessageLoopRun() { | 186 void IOSChromeMainParts::PostMainMessageLoopRun() { |
186 TranslateServiceIOS::Shutdown(); | 187 TranslateServiceIOS::Shutdown(); |
187 application_context_->StartTearDown(); | 188 application_context_->StartTearDown(); |
188 } | 189 } |
189 | 190 |
190 void IOSChromeMainParts::PostDestroyThreads() { | 191 void IOSChromeMainParts::PostDestroyThreads() { |
191 application_context_->PostDestroyThreads(); | 192 application_context_->PostDestroyThreads(); |
192 } | 193 } |
193 | 194 |
194 // This will be called after the command-line has been mutated by about:flags | 195 // This will be called after the command-line has been mutated by about:flags |
195 void IOSChromeMainParts::SetUpMetricsAndFieldTrials() { | 196 void IOSChromeMainParts::SetupFieldTrials() { |
196 base::SetRecordActionTaskRunner( | 197 base::SetRecordActionTaskRunner( |
197 web::WebThread::GetTaskRunnerForThread(web::WebThread::UI)); | 198 web::WebThread::GetTaskRunnerForThread(web::WebThread::UI)); |
198 | 199 |
199 // Initialize FieldTrialList to support FieldTrials that use one-time | 200 // Initialize FieldTrialList to support FieldTrials that use one-time |
200 // randomization. | 201 // randomization. |
201 DCHECK(!field_trial_list_); | 202 DCHECK(!field_trial_list_); |
202 field_trial_list_.reset( | 203 field_trial_list_.reset( |
203 new base::FieldTrialList(application_context_->GetMetricsServicesManager() | 204 new base::FieldTrialList(application_context_->GetMetricsServicesManager() |
204 ->CreateEntropyProvider())); | 205 ->CreateEntropyProvider())); |
205 | 206 |
(...skipping 12 matching lines...) Expand all Loading... |
218 } | 219 } |
219 | 220 |
220 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); | 221 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); |
221 | 222 |
222 // Associate parameters chosen in about:flags and create trial/group for them. | 223 // Associate parameters chosen in about:flags and create trial/group for them. |
223 flags_ui::PrefServiceFlagsStorage flags_storage( | 224 flags_ui::PrefServiceFlagsStorage flags_storage( |
224 application_context_->GetLocalState()); | 225 application_context_->GetLocalState()); |
225 std::vector<std::string> variation_ids = | 226 std::vector<std::string> variation_ids = |
226 RegisterAllFeatureVariationParameters(&flags_storage, feature_list.get()); | 227 RegisterAllFeatureVariationParameters(&flags_storage, feature_list.get()); |
227 | 228 |
228 // Must initialize metrics after about:flags have been converted into | |
229 // switches, but before field trials are set up (so that client ID is | |
230 // available for one-time randomized field trials). | |
231 metrics::MetricsService* metrics = application_context_->GetMetricsService(); | |
232 | |
233 variations::VariationsHttpHeaderProvider* http_header_provider = | 229 variations::VariationsHttpHeaderProvider* http_header_provider = |
234 variations::VariationsHttpHeaderProvider::GetInstance(); | 230 variations::VariationsHttpHeaderProvider::GetInstance(); |
235 // Force the variation ids selected in chrome://flags and/or specified using | 231 // Force the variation ids selected in chrome://flags and/or specified using |
236 // the command-line flag. | 232 // the command-line flag. |
237 bool result = http_header_provider->ForceVariationIds( | 233 bool result = http_header_provider->ForceVariationIds( |
238 command_line->GetSwitchValueASCII(switches::kIOSForceVariationIds), | 234 command_line->GetSwitchValueASCII(switches::kIOSForceVariationIds), |
239 &variation_ids); | 235 &variation_ids); |
240 CHECK(result) << "Invalid list of variation ids specified (either in --" | 236 CHECK(result) << "Invalid list of variation ids specified (either in --" |
241 << switches::kIOSForceVariationIds << " or in chrome://flags)"; | 237 << switches::kIOSForceVariationIds << " or in chrome://flags)"; |
242 metrics->AddSyntheticTrialObserver(http_header_provider); | |
243 | 238 |
244 feature_list->InitializeFromCommandLine( | 239 feature_list->InitializeFromCommandLine( |
245 command_line->GetSwitchValueASCII(switches::kEnableIOSFeatures), | 240 command_line->GetSwitchValueASCII(switches::kEnableIOSFeatures), |
246 command_line->GetSwitchValueASCII(switches::kDisableIOSFeatures)); | 241 command_line->GetSwitchValueASCII(switches::kDisableIOSFeatures)); |
247 | 242 |
248 variations::VariationsService* variations_service = | 243 variations::VariationsService* variations_service = |
249 application_context_->GetVariationsService(); | 244 application_context_->GetVariationsService(); |
250 if (variations_service) | 245 if (variations_service) |
251 variations_service->CreateTrialsFromSeed(feature_list.get()); | 246 variations_service->CreateTrialsFromSeed(feature_list.get()); |
252 | 247 |
253 base::FeatureList::SetInstance(std::move(feature_list)); | 248 base::FeatureList::SetInstance(std::move(feature_list)); |
254 | 249 |
255 SetupFieldTrials(parsed_command_line_, | 250 SetupIOSFieldTrials(); |
256 base::Time::FromTimeT(metrics->GetInstallDate())); | 251 } |
257 | 252 |
| 253 void IOSChromeMainParts::SetupMetrics() { |
| 254 metrics::MetricsService* metrics = application_context_->GetMetricsService(); |
| 255 metrics->AddSyntheticTrialObserver( |
| 256 variations::VariationsHttpHeaderProvider::GetInstance()); |
258 // Now that field trials have been created, initializes metrics recording. | 257 // Now that field trials have been created, initializes metrics recording. |
259 metrics->InitializeMetricsRecordingState(); | 258 metrics->InitializeMetricsRecordingState(); |
260 } | 259 } |
261 | 260 |
262 void IOSChromeMainParts::StartMetricsRecording() { | 261 void IOSChromeMainParts::StartMetricsRecording() { |
263 bool wifiOnly = local_state_->GetBoolean(prefs::kMetricsReportingWifiOnly); | 262 bool wifiOnly = local_state_->GetBoolean(prefs::kMetricsReportingWifiOnly); |
264 bool isConnectionCellular = net::NetworkChangeNotifier::IsConnectionCellular( | 263 bool isConnectionCellular = net::NetworkChangeNotifier::IsConnectionCellular( |
265 net::NetworkChangeNotifier::GetConnectionType()); | 264 net::NetworkChangeNotifier::GetConnectionType()); |
266 bool mayUpload = !wifiOnly || !isConnectionCellular; | 265 bool mayUpload = !wifiOnly || !isConnectionCellular; |
267 | 266 |
268 application_context_->GetMetricsServicesManager()->UpdateUploadPermissions( | 267 application_context_->GetMetricsServicesManager()->UpdateUploadPermissions( |
269 mayUpload); | 268 mayUpload); |
270 } | 269 } |
OLD | NEW |