12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SYNC_SYNCABLE_SYNCABLE_UTIL_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SYNC_SYNCABLE_SYNCABLE_UTIL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/base/sync_export.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/internal_api/public/base/model_type.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace tracked_objects {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Location;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncable {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BaseTransaction;
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class BaseWriteTransaction;
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class ModelNeutralMutableEntry;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Id;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)SYNC_EXPORT_PRIVATE void ChangeEntryIDAndUpdateChildren(
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    BaseWriteTransaction* trans,
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    ModelNeutralMutableEntry* entry,
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const Id& new_id);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SYNC_EXPORT_PRIVATE bool IsLegalNewParent(BaseTransaction* trans,
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                          const Id& id,
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                          const Id& parentid);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncAssert(bool condition,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const tracked_objects::Location& location,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const char* msg,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                BaseTransaction* trans);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SYNC_EXPORT_PRIVATE int GetUnsyncedEntries(BaseTransaction* trans,
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                           std::vector<int64> *handles);
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Generates a fixed-length tag for the given string under the given model_type.
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SYNC_EXPORT_PRIVATE std::string GenerateSyncableHash(
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ModelType model_type, const std::string& client_tag);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// A helper for generating the bookmark type's tag.  This is required in more
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// than one place, so we define the algorithm here to make sure the
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// implementation is consistent.
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SYNC_EXPORT_PRIVATE std::string GenerateSyncableBookmarkHash(
523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& originator_cache_guid,
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& originator_client_item_id);
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncable
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncer
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // SYNC_SYNCABLE_SYNCABLE_UTIL_H_
59