1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file. 4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/test/fake_server/bookmark_entity_builder.h" 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <string> 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/guid.h" 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/time/time.h" 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/internal_api/public/base/model_type.h" 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/internal_api/public/base/unique_position.h" 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/protocol/sync.pb.h" 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/syncable/syncable_util.h" 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/test/fake_server/bookmark_entity.h" 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/test/fake_server/fake_server_entity.h" 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "sync/util/time.h" 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "url/gurl.h" 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using std::string; 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using syncer::syncable::GenerateSyncableBookmarkHash; 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// A version must be passed when creating a FakeServerEntity, but this value 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// is overrideen immediately when saving the entity in FakeServer. 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const int64 kUnusedVersion = 0L; 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Default time (creation and last modified) used when creating entities. 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const int64 kDefaultTime = 1234L; 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace fake_server { 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)BookmarkEntityBuilder::BookmarkEntityBuilder( 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const string& title, 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const GURL& url, 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const string& originator_cache_guid, 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const string& originator_client_item_id) 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : EntityBuilder(syncer::BOOKMARKS, title), 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) url_(url), 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) originator_cache_guid_(originator_cache_guid), 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) originator_client_item_id_(originator_client_item_id) { 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)BookmarkEntityBuilder::~BookmarkEntityBuilder() { 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)scoped_ptr<FakeServerEntity> BookmarkEntityBuilder::Build() { 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!url_.is_valid()) { 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return make_scoped_ptr<FakeServerEntity>(NULL); 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) sync_pb::EntitySpecifics entity_specifics; 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) sync_pb::BookmarkSpecifics* bookmark_specifics = 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) entity_specifics.mutable_bookmark(); 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bookmark_specifics->set_title(name_); 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bookmark_specifics->set_url(url_.spec()); 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) sync_pb::UniquePosition unique_position; 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // TODO(pvalenzuela): Allow caller customization of the position integer. 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) string suffix = GenerateSyncableBookmarkHash(originator_cache_guid_, 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) originator_client_item_id_); 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) syncer::UniquePosition::FromInt64(0, suffix).ToProto(&unique_position); 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return make_scoped_ptr<FakeServerEntity>( 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) new BookmarkEntity(id_, 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kUnusedVersion, 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) name_, 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) originator_cache_guid_, 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) originator_client_item_id_, 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unique_position, 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) entity_specifics, 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // TODO(pvalenzuela): Support bookmark folders. 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // TODO(pvalenzuela): Support caller specification of 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // the parent bookmark folder. 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) FakeServerEntity::CreateId(syncer::BOOKMARKS, 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "bookmark_bar"), 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kDefaultTime, 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kDefaultTime)); 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} // namespace fake_server 84