1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_SYNC_GLUE_EXTENSION_DATA_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_SYNC_GLUE_EXTENSION_DATA_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ExtensionData is the class used to manage the client and server 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// versions of the data for a particular extension. 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <map> 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/extension_specifics.pb.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser_sync { 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionData { 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch enum Source { 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CLIENT, 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SERVER, 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns an ExtensionData constructed from the given data from the 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // given source. merged_data() will be equal to |data| and 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NeedsUpdate(source) will return false. 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static ExtensionData FromData( 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source source, const sync_pb::ExtensionSpecifics& data); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ~ExtensionData(); 32513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Implicit copy constructor and assignment operator welcome. 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the version of the data that all sources should 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // eventually have. 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const sync_pb::ExtensionSpecifics& merged_data() const; 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns whether or not the data from the given source needs to be 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // updated from merged_data(). 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool NeedsUpdate(Source source) const; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Stores the given data as being from the given source, merging it 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // into merged_data(). May change what NeedsUpdate() returns for 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // any source. 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetData( 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source source, bool merge_user_properties, 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const sync_pb::ExtensionSpecifics& data); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Marks the data from the given data as updated, 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // i.e. NeedsUpdate(source) will return false. 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ResolveData(Source source); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::map<Source, sync_pb::ExtensionSpecifics> SourceDataMap; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SourceDataMap source_data_; 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_pb::ExtensionSpecifics merged_data_; 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is private; clients must use FromData(). 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExtensionData(); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_SYNC_GLUE_EXTENSION_DATA_H_ 66