Home | History | Annotate | Download | only in variations
      1 // Copyright (c) 2013 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 #ifndef CHROME_BROWSER_METRICS_VARIATIONS_VARIATIONS_REGISTRY_SYNCER_WIN_H_
      6 #define CHROME_BROWSER_METRICS_VARIATIONS_VARIATIONS_REGISTRY_SYNCER_WIN_H_
      7 
      8 #include "base/timer/timer.h"
      9 
     10 namespace chrome_variations {
     11 
     12 // This class manages synchronizing active VariationIDs with the Google Update
     13 // experiment_labels value in the registry.
     14 class VariationsRegistrySyncer {
     15  public:
     16   VariationsRegistrySyncer();
     17   ~VariationsRegistrySyncer();
     18 
     19   // Starts a timer that, when it expires, updates the registry with the current
     20   // Variations associated with Google Update. If the timer is already running,
     21   // calling this just resets the timer.
     22   void RequestRegistrySync();
     23 
     24  private:
     25   // Perform the actual synchronization process with the registry.
     26   void SyncWithRegistry();
     27 
     28   // A timer used to delay the writes to the registry. This is done to optimize
     29   // the case where lazy-loaded features start their field trials some time
     30   // after initial batch of field trials are created, and also to avoid blocking
     31   // the UI thread. The timer effectively allows this class to batch together
     32   // update requests, to avoid reading and writing from the registry too much.
     33   base::OneShotTimer<VariationsRegistrySyncer> timer_;
     34 
     35   DISALLOW_COPY_AND_ASSIGN(VariationsRegistrySyncer);
     36 };
     37 
     38 }  // namespace chrome_variations
     39 
     40 #endif  // CHROME_BROWSER_METRICS_VARIATIONS_VARIATIONS_REGISTRY_SYNCER_WIN_H_
     41