| 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..e62accbad86ac73541b747b00e28eeb2145853d4 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,12 @@ 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()->PostDelayedTask(
|
| + FROM_HERE, base::Bind(&ClearGoogleUpdateRegistryLabels),
|
| + base::TimeDelta::FromSeconds(5));
|
| #endif
|
| }
|
| -
|
| -#if defined(OS_WIN)
|
| -void ChromeVariationsServiceClient::StartGoogleUpdateRegistrySync() {
|
| - registry_syncer_.RequestRegistrySync();
|
| -}
|
| -#endif
|
|
|