// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_SYNC_GLUE_EXTENSION_DATA_H_
#define CHROME_BROWSER_SYNC_GLUE_EXTENSION_DATA_H_
#pragma once
// ExtensionData is the class used to manage the client and server
// versions of the data for a particular extension.
#include <map>
#include "chrome/browser/sync/protocol/extension_specifics.pb.h"
namespace browser_sync {
class ExtensionData {
public:
enum Source {
CLIENT,
SERVER,
};
// Returns an ExtensionData constructed from the given data from the
// given source. merged_data() will be equal to |data| and
// NeedsUpdate(source) will return false.
static ExtensionData FromData(
Source source, const sync_pb::ExtensionSpecifics& data);
~ExtensionData();
// Implicit copy constructor and assignment operator welcome.
// Returns the version of the data that all sources should
// eventually have.
const sync_pb::ExtensionSpecifics& merged_data() const;
// Returns whether or not the data from the given source needs to be
// updated from merged_data().
bool NeedsUpdate(Source source) const;
// Stores the given data as being from the given source, merging it
// into merged_data(). May change what NeedsUpdate() returns for
// any source.
void SetData(
Source source, bool merge_user_properties,
const sync_pb::ExtensionSpecifics& data);
// Marks the data from the given data as updated,
// i.e. NeedsUpdate(source) will return false.
void ResolveData(Source source);
private:
typedef std::map<Source, sync_pb::ExtensionSpecifics> SourceDataMap;
SourceDataMap source_data_;
sync_pb::ExtensionSpecifics merged_data_;
// This is private; clients must use FromData().
ExtensionData();
};
} // namespace
#endif // CHROME_BROWSER_SYNC_GLUE_EXTENSION_DATA_H_