Chromium Code Reviews| Index: chrome/browser/metrics/variations/chrome_variations_service_client.cc |
| diff --git a/chrome/browser/metrics/variations/chrome_variations_service_client.cc b/chrome/browser/metrics/variations/chrome_variations_service_client.cc |
| index 72608016ec6f6efbe11f2143bc6248fa9584e880..3adb256d403243064869f4f6dc1137d86a46895c 100644 |
| --- a/chrome/browser/metrics/variations/chrome_variations_service_client.cc |
| +++ b/chrome/browser/metrics/variations/chrome_variations_service_client.cc |
| @@ -11,6 +11,17 @@ |
| #include "components/version_info/version_info.h" |
| #include "content/public/browser/browser_thread.h" |
| +#if defined(OS_WIN) |
| +#include "base/files/file_path.h" |
| +#include "base/metrics/histogram_macros.h" |
| +#include "base/path_service.h" |
| +#include "base/strings/string16.h" |
| +#include "base/threading/thread_restrictions.h" |
| +#include "chrome/installer/util/google_update_settings.h" |
| +#include "chrome/installer/util/install_util.h" |
| +#include "components/variations/experiment_labels.h" |
| +#endif |
| + |
| #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS) |
| #include "chrome/browser/upgrade_detector_impl.h" |
| #endif |
| @@ -36,6 +47,51 @@ base::Version GetVersionForSimulation() { |
| return base::Version(version_info::GetVersionNumber()); |
| } |
| +#if defined(OS_WIN) |
| +// Clear all Variations experiment labels from Google Update Registry Labels. |
| +// TODO(jwd): Remove this once we're confident most clients no longer have these |
| +// labels (M57-M58 timeframe). |
| +void ClearGoogleUpdateRegistryLabels() { |
| + base::ThreadRestrictions::AssertIOAllowed(); |
| + |
| + // Note that all registry operations are done here on the UI thread as there |
| + // are no threading restrictions on them. |
| + base::FilePath chrome_exe; |
| + if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { |
| + NOTREACHED() << "Failed to get chrome exe path"; |
| + return; |
| + } |
| + const bool is_system_install = !InstallUtil::IsPerUserInstall(chrome_exe); |
| + |
| + // Read the current bits from the registry. |
| + base::string16 registry_labels; |
| + bool success = GoogleUpdateSettings::ReadExperimentLabels(is_system_install, |
| + ®istry_labels); |
| + |
| + if (!success) { |
| + DVLOG(1) << "Error reading Variation labels from the registry."; |
| + return; |
| + } |
| + |
| + // Only keep the non-Variations contents of experiment_labels. |
| + const base::string16 labels_to_keep = |
| + variations::ExtractNonVariationLabels(registry_labels); |
| + |
| + // This is a weak check, which can give false positives if the implementation |
| + // of variations::ExtractNonVariationLabels changes, but should be fine for |
| + // temporary code. |
| + bool needs_clearing = labels_to_keep != registry_labels; |
| + |
| + UMA_HISTOGRAM_BOOLEAN("Variations.GoogleUpdateRegistryLabelsNeedClearing", |
| + needs_clearing); |
| + |
| + if (!needs_clearing) |
| + return; |
| + |
| + GoogleUpdateSettings::SetExperimentLabels(is_system_install, labels_to_keep); |
| +} |
| +#endif // defined(OS_WIN) |
| + |
| } // namespace |
| ChromeVariationsServiceClient::ChromeVariationsServiceClient() {} |
| @@ -82,12 +138,11 @@ bool ChromeVariationsServiceClient::OverridesRestrictParameter( |
| void ChromeVariationsServiceClient::OnInitialStartup() { |
| #if defined(OS_WIN) |
| - StartGoogleUpdateRegistrySync(); |
| + // TODO(jwd): Remove this once we're confident most clients no longer have |
| + // these labels (M57-M58 timeframe). |
| + // Do the work on a blocking pool thread, as chrome://profiler has shown that |
| + // it can cause jank if done on the UI thrread. |
| + content::BrowserThread::GetBlockingPool()->PostTask( |
| + FROM_HERE, base::Bind(&ClearGoogleUpdateRegistryLabels)); |
|
Alexei Svitkine (slow)
2016/11/03 17:09:36
Previously, it would be started with a delay. Can
jwd
2016/11/04 15:05:15
Done.
|
| #endif |
| } |
| - |
| -#if defined(OS_WIN) |
| -void ChromeVariationsServiceClient::StartGoogleUpdateRegistrySync() { |
| - registry_syncer_.RequestRegistrySync(); |
| -} |
| -#endif |