OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/metrics/variations/variations_service.h" | 5 #include "chrome/browser/metrics/variations/variations_service.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/build_time.h" | 10 #include "base/build_time.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 case Study_Channel_BETA: | 53 case Study_Channel_BETA: |
54 return chrome::VersionInfo::CHANNEL_BETA; | 54 return chrome::VersionInfo::CHANNEL_BETA; |
55 case Study_Channel_STABLE: | 55 case Study_Channel_STABLE: |
56 return chrome::VersionInfo::CHANNEL_STABLE; | 56 return chrome::VersionInfo::CHANNEL_STABLE; |
57 } | 57 } |
58 // All enum values of |study_channel| were handled above. | 58 // All enum values of |study_channel| were handled above. |
59 NOTREACHED(); | 59 NOTREACHED(); |
60 return chrome::VersionInfo::CHANNEL_UNKNOWN; | 60 return chrome::VersionInfo::CHANNEL_UNKNOWN; |
61 } | 61 } |
62 | 62 |
| 63 // Wrapper around channel checking, used to enable channel mocking for |
| 64 // testing. If the current browser channel is not UNKNOWN, this will return |
| 65 // that channel value. Otherwise, if the fake channel flag is provided, this |
| 66 // will return the fake channel. Failing that, this will return the UNKNOWN |
| 67 // channel. |
| 68 chrome::VersionInfo::Channel GetChannelForVariations() { |
| 69 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); |
| 70 if (channel != chrome::VersionInfo::CHANNEL_UNKNOWN) |
| 71 return channel; |
| 72 std::string forced_channel = |
| 73 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
| 74 switches::kFakeVariationsChannel); |
| 75 if (forced_channel == "stable") |
| 76 channel = chrome::VersionInfo::CHANNEL_STABLE; |
| 77 else if (forced_channel == "beta") |
| 78 channel = chrome::VersionInfo::CHANNEL_BETA; |
| 79 else if (forced_channel == "dev") |
| 80 channel = chrome::VersionInfo::CHANNEL_DEV; |
| 81 else if (forced_channel == "canary") |
| 82 channel = chrome::VersionInfo::CHANNEL_CANARY; |
| 83 else |
| 84 DVLOG(1) << "Invalid channel provided: " << forced_channel; |
| 85 return channel; |
| 86 } |
| 87 |
63 Study_Platform GetCurrentPlatform() { | 88 Study_Platform GetCurrentPlatform() { |
64 #if defined(OS_WIN) | 89 #if defined(OS_WIN) |
65 return Study_Platform_PLATFORM_WINDOWS; | 90 return Study_Platform_PLATFORM_WINDOWS; |
66 #elif defined(OS_MACOSX) | 91 #elif defined(OS_MACOSX) |
67 return Study_Platform_PLATFORM_MAC; | 92 return Study_Platform_PLATFORM_MAC; |
68 #elif defined(OS_CHROMEOS) | 93 #elif defined(OS_CHROMEOS) |
69 return Study_Platform_PLATFORM_CHROMEOS; | 94 return Study_Platform_PLATFORM_CHROMEOS; |
70 #elif defined(OS_ANDROID) | 95 #elif defined(OS_ANDROID) |
71 return Study_Platform_PLATFORM_ANDROID; | 96 return Study_Platform_PLATFORM_ANDROID; |
72 #elif defined(OS_IOS) | 97 #elif defined(OS_IOS) |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 // Use the build time for date checks if either the seed date is invalid or | 154 // Use the build time for date checks if either the seed date is invalid or |
130 // the build time is newer than the seed date. | 155 // the build time is newer than the seed date. |
131 base::Time reference_date = seed_date; | 156 base::Time reference_date = seed_date; |
132 if (seed_date.is_null() || seed_date < build_time) | 157 if (seed_date.is_null() || seed_date < build_time) |
133 reference_date = build_time; | 158 reference_date = build_time; |
134 | 159 |
135 const chrome::VersionInfo current_version_info; | 160 const chrome::VersionInfo current_version_info; |
136 if (!current_version_info.is_valid()) | 161 if (!current_version_info.is_valid()) |
137 return false; | 162 return false; |
138 | 163 |
| 164 chrome::VersionInfo::Channel channel = GetChannelForVariations(); |
139 for (int i = 0; i < seed.study_size(); ++i) { | 165 for (int i = 0; i < seed.study_size(); ++i) { |
140 if (ShouldAddStudy(seed.study(i), current_version_info, reference_date)) | 166 if (ShouldAddStudy(seed.study(i), current_version_info, reference_date, |
| 167 channel)) { |
141 CreateTrialFromStudy(seed.study(i), reference_date); | 168 CreateTrialFromStudy(seed.study(i), reference_date); |
| 169 } |
142 } | 170 } |
143 | 171 |
144 return true; | 172 return true; |
145 } | 173 } |
146 | 174 |
147 void VariationsService::StartRepeatedVariationsSeedFetch() { | 175 void VariationsService::StartRepeatedVariationsSeedFetch() { |
148 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 176 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
149 | 177 |
150 // Check that |CreateTrialsFromSeed| was called, which is necessary to | 178 // Check that |CreateTrialsFromSeed| was called, which is necessary to |
151 // retrieve the serial number that will be sent to the server. | 179 // retrieve the serial number that will be sent to the server. |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 local_prefs->SetInt64(prefs::kVariationsSeedDate, | 314 local_prefs->SetInt64(prefs::kVariationsSeedDate, |
287 seed_date.ToInternalValue()); | 315 seed_date.ToInternalValue()); |
288 variations_serial_number_ = seed.serial_number(); | 316 variations_serial_number_ = seed.serial_number(); |
289 return true; | 317 return true; |
290 } | 318 } |
291 | 319 |
292 // static | 320 // static |
293 bool VariationsService::ShouldAddStudy( | 321 bool VariationsService::ShouldAddStudy( |
294 const Study& study, | 322 const Study& study, |
295 const chrome::VersionInfo& version_info, | 323 const chrome::VersionInfo& version_info, |
296 const base::Time& reference_date) { | 324 const base::Time& reference_date, |
| 325 const chrome::VersionInfo::Channel channel) { |
297 if (study.has_filter()) { | 326 if (study.has_filter()) { |
298 if (!CheckStudyChannel(study.filter(), chrome::VersionInfo::GetChannel())) { | 327 if (!CheckStudyChannel(study.filter(), channel)) { |
299 DVLOG(1) << "Filtered out study " << study.name() << " due to channel."; | 328 DVLOG(1) << "Filtered out study " << study.name() << " due to channel."; |
300 return false; | 329 return false; |
301 } | 330 } |
302 | 331 |
303 if (!CheckStudyLocale(study.filter(), | 332 if (!CheckStudyLocale(study.filter(), |
304 g_browser_process->GetApplicationLocale())) { | 333 g_browser_process->GetApplicationLocale())) { |
305 DVLOG(1) << "Filtered out study " << study.name() << " due to locale."; | 334 DVLOG(1) << "Filtered out study " << study.name() << " due to locale."; |
306 return false; | 335 return false; |
307 } | 336 } |
308 | 337 |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 variation_id); | 553 variation_id); |
525 } | 554 } |
526 } | 555 } |
527 | 556 |
528 trial->SetForced(); | 557 trial->SetForced(); |
529 if (IsStudyExpired(study, reference_date)) | 558 if (IsStudyExpired(study, reference_date)) |
530 trial->Disable(); | 559 trial->Disable(); |
531 } | 560 } |
532 | 561 |
533 } // namespace chrome_variations | 562 } // namespace chrome_variations |
OLD | NEW |