1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "sync/test/fake_server/bookmark_entity_builder.h"
6
7#include <string>
8
9#include "base/guid.h"
10#include "base/memory/scoped_ptr.h"
11#include "base/time/time.h"
12#include "sync/internal_api/public/base/model_type.h"
13#include "sync/internal_api/public/base/unique_position.h"
14#include "sync/protocol/sync.pb.h"
15#include "sync/syncable/syncable_util.h"
16#include "sync/test/fake_server/bookmark_entity.h"
17#include "sync/test/fake_server/fake_server_entity.h"
18#include "sync/util/time.h"
19#include "url/gurl.h"
20
21using std::string;
22
23using syncer::syncable::GenerateSyncableBookmarkHash;
24
25// A version must be passed when creating a FakeServerEntity, but this value
26// is overrideen immediately when saving the entity in FakeServer.
27const int64 kUnusedVersion = 0L;
28
29// Default time (creation and last modified) used when creating entities.
30const int64 kDefaultTime = 1234L;
31
32namespace fake_server {
33
34BookmarkEntityBuilder::BookmarkEntityBuilder(
35    const string& title,
36    const GURL& url,
37    const string& originator_cache_guid,
38    const string& originator_client_item_id)
39    : EntityBuilder(syncer::BOOKMARKS, title),
40      url_(url),
41      originator_cache_guid_(originator_cache_guid),
42      originator_client_item_id_(originator_client_item_id) {
43}
44
45BookmarkEntityBuilder::~BookmarkEntityBuilder() {
46}
47
48scoped_ptr<FakeServerEntity> BookmarkEntityBuilder::Build() {
49  if (!url_.is_valid()) {
50    return make_scoped_ptr<FakeServerEntity>(NULL);
51  }
52
53  sync_pb::EntitySpecifics entity_specifics;
54  sync_pb::BookmarkSpecifics* bookmark_specifics =
55      entity_specifics.mutable_bookmark();
56  bookmark_specifics->set_title(name_);
57  bookmark_specifics->set_url(url_.spec());
58
59  sync_pb::UniquePosition unique_position;
60  // TODO(pvalenzuela): Allow caller customization of the position integer.
61  string suffix = GenerateSyncableBookmarkHash(originator_cache_guid_,
62                                               originator_client_item_id_);
63  syncer::UniquePosition::FromInt64(0, suffix).ToProto(&unique_position);
64
65  return make_scoped_ptr<FakeServerEntity>(
66      new BookmarkEntity(id_,
67                         kUnusedVersion,
68                         name_,
69                         originator_cache_guid_,
70                         originator_client_item_id_,
71                         unique_position,
72                         entity_specifics,
73                         // TODO(pvalenzuela): Support bookmark folders.
74                         false,
75                         // TODO(pvalenzuela): Support caller specification of
76                         // the parent bookmark folder.
77                         FakeServerEntity::CreateId(syncer::BOOKMARKS,
78                                                    "bookmark_bar"),
79                         kDefaultTime,
80                         kDefaultTime));
81}
82
83}  // namespace fake_server
84