Home | History | Annotate | Download | only in glue
      1 // Copyright (c) 2010 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_SYNC_GLUE_EXTENSION_DATA_H_
      6 #define CHROME_BROWSER_SYNC_GLUE_EXTENSION_DATA_H_
      7 #pragma once
      8 
      9 // ExtensionData is the class used to manage the client and server
     10 // versions of the data for a particular extension.
     11 
     12 #include <map>
     13 
     14 #include "chrome/browser/sync/protocol/extension_specifics.pb.h"
     15 
     16 namespace browser_sync {
     17 
     18 class ExtensionData {
     19  public:
     20   enum Source {
     21     CLIENT,
     22     SERVER,
     23   };
     24 
     25   // Returns an ExtensionData constructed from the given data from the
     26   // given source.  merged_data() will be equal to |data| and
     27   // NeedsUpdate(source) will return false.
     28   static ExtensionData FromData(
     29       Source source, const sync_pb::ExtensionSpecifics& data);
     30 
     31   ~ExtensionData();
     32 
     33   // Implicit copy constructor and assignment operator welcome.
     34 
     35   // Returns the version of the data that all sources should
     36   // eventually have.
     37   const sync_pb::ExtensionSpecifics& merged_data() const;
     38 
     39   // Returns whether or not the data from the given source needs to be
     40   // updated from merged_data().
     41   bool NeedsUpdate(Source source) const;
     42 
     43   // Stores the given data as being from the given source, merging it
     44   // into merged_data().  May change what NeedsUpdate() returns for
     45   // any source.
     46   void SetData(
     47       Source source, bool merge_user_properties,
     48       const sync_pb::ExtensionSpecifics& data);
     49 
     50   // Marks the data from the given data as updated,
     51   // i.e. NeedsUpdate(source) will return false.
     52   void ResolveData(Source source);
     53 
     54  private:
     55   typedef std::map<Source, sync_pb::ExtensionSpecifics> SourceDataMap;
     56   SourceDataMap source_data_;
     57   sync_pb::ExtensionSpecifics merged_data_;
     58 
     59   // This is private; clients must use FromData().
     60   ExtensionData();
     61 };
     62 
     63 }  // namespace
     64 
     65 #endif  // CHROME_BROWSER_SYNC_GLUE_EXTENSION_DATA_H_
     66