1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file.
4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen//
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Definition of ModelTypePayloadMap and various utility functions.
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CHROME_BROWSER_SYNC_SYNCABLE_MODEL_TYPE_PAYLOAD_MAP_H_
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CHROME_BROWSER_SYNC_SYNCABLE_MODEL_TYPE_PAYLOAD_MAP_H_
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#pragma once
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <map>
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <string>
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/sync/engine/model_safe_worker.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/sync/syncable/model_type.h"
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass DictionaryValue;
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace syncable {
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// A container that contains a set of datatypes with possible string
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// payloads.
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsentypedef std::map<ModelType, std::string> ModelTypePayloadMap;
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Helper functions for building ModelTypePayloadMaps.
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Make a TypePayloadMap from all the types in a ModelTypeBitSet using
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// a default payload.
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenModelTypePayloadMap ModelTypePayloadMapFromBitSet(
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const ModelTypeBitSet& model_types,
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const std::string& payload);
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Make a TypePayloadMap for all the enabled types in a
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// ModelSafeRoutingInfo using a default payload.
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenModelTypePayloadMap ModelTypePayloadMapFromRoutingInfo(
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const browser_sync::ModelSafeRoutingInfo& routes,
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const std::string& payload);
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Caller takes ownership of the returned dictionary.
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenDictionaryValue* ModelTypePayloadMapToValue(
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const ModelTypePayloadMap& model_type_payloads);
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Coalesce |update| into |original|, overwriting only when |update| has
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// a non-empty payload.
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid CoalescePayloads(ModelTypePayloadMap* original,
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                      const ModelTypePayloadMap& update);
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}  // namespace syncable
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif  // CHROME_BROWSER_SYNC_SYNCABLE_MODEL_TYPE_PAYLOAD_MAP_H_
51