Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(270)

Unified Diff: sync/test/fake_server/fake_server.cc

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sync/test/fake_server/fake_server.h ('k') | sync/test/fake_server/fake_server_entity.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sync/test/fake_server/fake_server.cc
diff --git a/sync/test/fake_server/fake_server.cc b/sync/test/fake_server/fake_server.cc
deleted file mode 100644
index 969906682690210da9ac0050ee9da2253aee6adf..0000000000000000000000000000000000000000
--- a/sync/test/fake_server/fake_server.cc
+++ /dev/null
@@ -1,736 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "sync/test/fake_server/fake_server.h"
-
-#include <stdint.h>
-
-#include <algorithm>
-#include <limits>
-#include <memory>
-#include <set>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/guid.h"
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/synchronization/lock.h"
-#include "net/base/net_errors.h"
-#include "net/http/http_status_code.h"
-#include "sync/internal_api/public/base/model_type.h"
-#include "sync/protocol/sync.pb.h"
-#include "sync/test/fake_server/bookmark_entity.h"
-#include "sync/test/fake_server/permanent_entity.h"
-#include "sync/test/fake_server/tombstone_entity.h"
-#include "sync/test/fake_server/unique_client_entity.h"
-
-using std::string;
-using std::vector;
-
-using syncer::GetModelType;
-using syncer::GetModelTypeFromSpecifics;
-using syncer::ModelType;
-using syncer::ModelTypeSet;
-
-namespace fake_server {
-
-class FakeServerEntity;
-
-namespace {
-
-// The default keystore key.
-static const char kDefaultKeystoreKey[] = "1111111111111111";
-
-// Properties of the bookmark bar permanent folder.
-static const char kBookmarkBarFolderServerTag[] = "bookmark_bar";
-static const char kBookmarkBarFolderName[] = "Bookmark Bar";
-
-// Properties of the other bookmarks permanent folder.
-static const char kOtherBookmarksFolderServerTag[] = "other_bookmarks";
-static const char kOtherBookmarksFolderName[] = "Other Bookmarks";
-
-// Properties of the synced bookmarks permanent folder.
-static const char kSyncedBookmarksFolderServerTag[] = "synced_bookmarks";
-static const char kSyncedBookmarksFolderName[] = "Synced Bookmarks";
-
-// A filter used during GetUpdates calls to determine what information to
-// send back to the client. There is a 1:1 correspondence between any given
-// GetUpdates call and an UpdateSieve instance.
-class UpdateSieve {
- public:
- ~UpdateSieve() { }
-
- // Factory method for creating an UpdateSieve.
- static std::unique_ptr<UpdateSieve> Create(
- const sync_pb::GetUpdatesMessage& get_updates_message);
-
- // Sets the progress markers in |get_updates_response| given the progress
- // markers from the original GetUpdatesMessage and |new_version| (the latest
- // version in the entries sent back).
- void UpdateProgressMarkers(
- int64_t new_version,
- sync_pb::GetUpdatesResponse* get_updates_response) const {
- ModelTypeToVersionMap::const_iterator it;
- for (it = request_from_version_.begin(); it != request_from_version_.end();
- ++it) {
- sync_pb::DataTypeProgressMarker* new_marker =
- get_updates_response->add_new_progress_marker();
- new_marker->set_data_type_id(
- GetSpecificsFieldNumberFromModelType(it->first));
-
- int64_t version = std::max(new_version, it->second);
- new_marker->set_token(base::Int64ToString(version));
- }
- }
-
- // Determines whether the server should send an |entity| to the client as
- // part of a GetUpdatesResponse.
- bool ClientWantsItem(const FakeServerEntity& entity) const {
- int64_t version = entity.GetVersion();
- if (version <= min_version_) {
- return false;
- } else if (entity.IsDeleted()) {
- return true;
- }
-
- ModelTypeToVersionMap::const_iterator it =
- request_from_version_.find(entity.GetModelType());
-
- return it == request_from_version_.end() ? false : it->second < version;
- }
-
- // Returns the minimum version seen across all types.
- int64_t GetMinVersion() const { return min_version_; }
-
- private:
- typedef std::map<ModelType, int64_t> ModelTypeToVersionMap;
-
- // Creates an UpdateSieve.
- UpdateSieve(const ModelTypeToVersionMap request_from_version,
- const int64_t min_version)
- : request_from_version_(request_from_version),
- min_version_(min_version) {}
-
- // Maps data type IDs to the latest version seen for that type.
- const ModelTypeToVersionMap request_from_version_;
-
- // The minimum version seen among all data types.
- const int min_version_;
-};
-
-std::unique_ptr<UpdateSieve> UpdateSieve::Create(
- const sync_pb::GetUpdatesMessage& get_updates_message) {
- CHECK_GT(get_updates_message.from_progress_marker_size(), 0)
- << "A GetUpdates request must have at least one progress marker.";
-
- UpdateSieve::ModelTypeToVersionMap request_from_version;
- int64_t min_version = std::numeric_limits<int64_t>::max();
- for (int i = 0; i < get_updates_message.from_progress_marker_size(); i++) {
- sync_pb::DataTypeProgressMarker marker =
- get_updates_message.from_progress_marker(i);
-
- int64_t version = 0;
- // Let the version remain zero if there is no token or an empty token (the
- // first request for this type).
- if (marker.has_token() && !marker.token().empty()) {
- bool parsed = base::StringToInt64(marker.token(), &version);
- CHECK(parsed) << "Unable to parse progress marker token.";
- }
-
- ModelType model_type = syncer::GetModelTypeFromSpecificsFieldNumber(
- marker.data_type_id());
- request_from_version[model_type] = version;
-
- if (version < min_version)
- min_version = version;
- }
-
- return std::unique_ptr<UpdateSieve>(
- new UpdateSieve(request_from_version, min_version));
-}
-
-// Returns whether |entity| is deleted or permanent.
-bool IsDeletedOrPermanent(const FakeServerEntity& entity) {
- return entity.IsDeleted() || entity.IsPermanent();
-}
-
-} // namespace
-
-FakeServer::FakeServer() : version_(0),
- store_birthday_(0),
- authenticated_(true),
- error_type_(sync_pb::SyncEnums::SUCCESS),
- alternate_triggered_errors_(false),
- request_counter_(0),
- network_enabled_(true),
- weak_ptr_factory_(this) {
- Init();
-}
-
-FakeServer::~FakeServer() {}
-
-void FakeServer::Init() {
- keystore_keys_.push_back(kDefaultKeystoreKey);
-
- const bool create_result = CreateDefaultPermanentItems();
- DCHECK(create_result) << "Permanent items were not created successfully.";
-}
-
-bool FakeServer::CreatePermanentBookmarkFolder(const std::string& server_tag,
- const std::string& name) {
- DCHECK(thread_checker_.CalledOnValidThread());
- std::unique_ptr<FakeServerEntity> entity =
- PermanentEntity::Create(syncer::BOOKMARKS, server_tag, name,
- ModelTypeToRootTag(syncer::BOOKMARKS));
- if (!entity)
- return false;
-
- SaveEntity(std::move(entity));
- return true;
-}
-
-bool FakeServer::CreateDefaultPermanentItems() {
- // Permanent folders are always required for Bookmarks (hierarchical
- // structure) and Nigori (data stored in permanent root folder).
- ModelTypeSet permanent_folder_types =
- ModelTypeSet(syncer::BOOKMARKS, syncer::NIGORI);
-
- for (ModelTypeSet::Iterator it = permanent_folder_types.First(); it.Good();
- it.Inc()) {
- ModelType model_type = it.Get();
-
- std::unique_ptr<FakeServerEntity> top_level_entity =
- PermanentEntity::CreateTopLevel(model_type);
- if (!top_level_entity) {
- return false;
- }
- SaveEntity(std::move(top_level_entity));
-
- if (model_type == syncer::BOOKMARKS) {
- if (!CreatePermanentBookmarkFolder(kBookmarkBarFolderServerTag,
- kBookmarkBarFolderName))
- return false;
- if (!CreatePermanentBookmarkFolder(kOtherBookmarksFolderServerTag,
- kOtherBookmarksFolderName))
- return false;
- }
- }
-
- return true;
-}
-
-void FakeServer::UpdateEntityVersion(FakeServerEntity* entity) {
- entity->SetVersion(++version_);
-}
-
-void FakeServer::SaveEntity(std::unique_ptr<FakeServerEntity> entity) {
- UpdateEntityVersion(entity.get());
- entities_[entity->GetId()] = std::move(entity);
-}
-
-void FakeServer::HandleCommand(const string& request,
- const base::Closure& completion_closure,
- int* error_code,
- int* response_code,
- std::string* response) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (!network_enabled_) {
- *error_code = net::ERR_FAILED;
- *response_code = net::ERR_FAILED;
- *response = string();
- completion_closure.Run();
- return;
- }
- request_counter_++;
-
- if (!authenticated_) {
- *error_code = 0;
- *response_code = net::HTTP_UNAUTHORIZED;
- *response = string();
- completion_closure.Run();
- return;
- }
-
- sync_pb::ClientToServerMessage message;
- bool parsed = message.ParseFromString(request);
- CHECK(parsed) << "Unable to parse the ClientToServerMessage.";
-
- sync_pb::ClientToServerResponse response_proto;
-
- if (message.has_store_birthday() &&
- message.store_birthday() != GetStoreBirthday()) {
- response_proto.set_error_code(sync_pb::SyncEnums::NOT_MY_BIRTHDAY);
- } else if (error_type_ != sync_pb::SyncEnums::SUCCESS &&
- ShouldSendTriggeredError()) {
- response_proto.set_error_code(error_type_);
- } else if (triggered_actionable_error_.get() && ShouldSendTriggeredError()) {
- sync_pb::ClientToServerResponse_Error* error =
- response_proto.mutable_error();
- error->CopyFrom(*(triggered_actionable_error_.get()));
- } else {
- bool success = false;
- switch (message.message_contents()) {
- case sync_pb::ClientToServerMessage::GET_UPDATES:
- last_getupdates_message_ = message;
- success = HandleGetUpdatesRequest(message.get_updates(),
- response_proto.mutable_get_updates());
- break;
- case sync_pb::ClientToServerMessage::COMMIT:
- last_commit_message_ = message;
- success = HandleCommitRequest(message.commit(),
- message.invalidator_client_id(),
- response_proto.mutable_commit());
- break;
- case sync_pb::ClientToServerMessage::CLEAR_SERVER_DATA:
- ClearServerData();
- response_proto.mutable_clear_server_data();
- success = true;
- break;
- default:
- *error_code = net::ERR_NOT_IMPLEMENTED;
- *response_code = 0;
- *response = string();
- completion_closure.Run();
- return;
- }
-
- if (!success) {
- // TODO(pvalenzuela): Add logging here so that tests have more info about
- // the failure.
- *error_code = net::ERR_FAILED;
- *response_code = 0;
- *response = string();
- completion_closure.Run();
- return;
- }
-
- response_proto.set_error_code(sync_pb::SyncEnums::SUCCESS);
- }
-
- response_proto.set_store_birthday(GetStoreBirthday());
-
- *error_code = 0;
- *response_code = net::HTTP_OK;
- *response = response_proto.SerializeAsString();
- completion_closure.Run();
-}
-
-bool FakeServer::GetLastCommitMessage(
- sync_pb::ClientToServerMessage* message) {
- if (!last_commit_message_.has_commit())
- return false;
-
- message->CopyFrom(last_commit_message_);
- return true;
-}
-
-bool FakeServer::GetLastGetUpdatesMessage(
- sync_pb::ClientToServerMessage* message) {
- if (!last_getupdates_message_.has_get_updates())
- return false;
-
- message->CopyFrom(last_getupdates_message_);
- return true;
-}
-
-bool FakeServer::HandleGetUpdatesRequest(
- const sync_pb::GetUpdatesMessage& get_updates,
- sync_pb::GetUpdatesResponse* response) {
- // TODO(pvalenzuela): Implement batching instead of sending all information
- // at once.
- response->set_changes_remaining(0);
-
- std::unique_ptr<UpdateSieve> sieve = UpdateSieve::Create(get_updates);
-
- // This folder is called "Synced Bookmarks" by sync and is renamed
- // "Mobile Bookmarks" by the mobile client UIs.
- if (get_updates.create_mobile_bookmarks_folder() &&
- !CreatePermanentBookmarkFolder(kSyncedBookmarksFolderServerTag,
- kSyncedBookmarksFolderName)) {
- return false;
- }
-
- bool send_encryption_keys_based_on_nigori = false;
- int64_t max_response_version = 0;
- for (EntityMap::const_iterator it = entities_.begin(); it != entities_.end();
- ++it) {
- const FakeServerEntity& entity = *it->second;
- if (sieve->ClientWantsItem(entity)) {
- sync_pb::SyncEntity* response_entity = response->add_entries();
- entity.SerializeAsProto(response_entity);
-
- max_response_version = std::max(max_response_version,
- response_entity->version());
-
- if (entity.GetModelType() == syncer::NIGORI) {
- send_encryption_keys_based_on_nigori =
- response_entity->specifics().nigori().passphrase_type() ==
- sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE;
- }
- }
- }
-
- if (send_encryption_keys_based_on_nigori ||
- get_updates.need_encryption_key()) {
- for (vector<string>::iterator it = keystore_keys_.begin();
- it != keystore_keys_.end(); ++it) {
- response->add_encryption_keys(*it);
- }
- }
-
- sieve->UpdateProgressMarkers(max_response_version, response);
- return true;
-}
-
-string FakeServer::CommitEntity(
- const sync_pb::SyncEntity& client_entity,
- sync_pb::CommitResponse_EntryResponse* entry_response,
- const string& client_guid,
- const string& parent_id) {
- if (client_entity.version() == 0 && client_entity.deleted()) {
- return string();
- }
-
- std::unique_ptr<FakeServerEntity> entity;
- if (client_entity.deleted()) {
- entity = TombstoneEntity::Create(client_entity.id_string());
- DeleteChildren(client_entity.id_string());
- } else if (GetModelType(client_entity) == syncer::NIGORI) {
- // NIGORI is the only permanent item type that should be updated by the
- // client.
- EntityMap::const_iterator iter = entities_.find(client_entity.id_string());
- CHECK(iter != entities_.end());
- entity = PermanentEntity::CreateUpdatedNigoriEntity(client_entity,
- *iter->second);
- } else if (client_entity.has_client_defined_unique_tag()) {
- entity = UniqueClientEntity::Create(client_entity);
- } else {
- // TODO(pvalenzuela): Validate entity's parent ID.
- EntityMap::const_iterator iter = entities_.find(client_entity.id_string());
- if (iter != entities_.end()) {
- entity = BookmarkEntity::CreateUpdatedVersion(client_entity,
- *iter->second, parent_id);
- } else {
- entity = BookmarkEntity::CreateNew(client_entity, parent_id, client_guid);
- }
- }
-
- if (!entity) {
- // TODO(pvalenzuela): Add logging so that it is easier to determine why
- // creation failed.
- return string();
- }
-
- const std::string id = entity->GetId();
- SaveEntity(std::move(entity));
- BuildEntryResponseForSuccessfulCommit(id, entry_response);
- return id;
-}
-
-void FakeServer::BuildEntryResponseForSuccessfulCommit(
- const std::string& entity_id,
- sync_pb::CommitResponse_EntryResponse* entry_response) {
- EntityMap::const_iterator iter = entities_.find(entity_id);
- CHECK(iter != entities_.end());
- const FakeServerEntity& entity = *iter->second;
- entry_response->set_response_type(sync_pb::CommitResponse::SUCCESS);
- entry_response->set_id_string(entity.GetId());
-
- if (entity.IsDeleted()) {
- entry_response->set_version(entity.GetVersion() + 1);
- } else {
- entry_response->set_version(entity.GetVersion());
- entry_response->set_name(entity.GetName());
- }
-}
-
-bool FakeServer::IsChild(const string& id, const string& potential_parent_id) {
- EntityMap::const_iterator iter = entities_.find(id);
- if (iter == entities_.end()) {
- // We've hit an ID (probably the imaginary root entity) that isn't stored
- // by the server, so it can't be a child.
- return false;
- }
-
- const FakeServerEntity& entity = *iter->second;
- if (entity.GetParentId() == potential_parent_id)
- return true;
-
- // Recursively look up the tree.
- return IsChild(entity.GetParentId(), potential_parent_id);
-}
-
-void FakeServer::DeleteChildren(const string& id) {
- std::set<string> tombstones_ids;
- // Find all the children of id.
- for (auto& entity : entities_) {
- if (IsChild(entity.first, id)) {
- tombstones_ids.insert(entity.first);
- }
- }
-
- for (auto& tombstone_id : tombstones_ids) {
- SaveEntity(TombstoneEntity::Create(tombstone_id));
- }
-}
-
-bool FakeServer::HandleCommitRequest(const sync_pb::CommitMessage& commit,
- const std::string& invalidator_client_id,
- sync_pb::CommitResponse* response) {
- std::map<string, string> client_to_server_ids;
- string guid = commit.cache_guid();
- ModelTypeSet committed_model_types;
-
- // TODO(pvalenzuela): Add validation of CommitMessage.entries.
- ::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>::const_iterator it;
- for (it = commit.entries().begin(); it != commit.entries().end(); ++it) {
- sync_pb::CommitResponse_EntryResponse* entry_response =
- response->add_entryresponse();
-
- sync_pb::SyncEntity client_entity = *it;
- string parent_id = client_entity.parent_id_string();
- if (client_to_server_ids.find(parent_id) !=
- client_to_server_ids.end()) {
- parent_id = client_to_server_ids[parent_id];
- }
-
- const string entity_id =
- CommitEntity(client_entity, entry_response, guid, parent_id);
- if (entity_id.empty()) {
- return false;
- }
-
- // Record the ID if it was renamed.
- if (entity_id != client_entity.id_string()) {
- client_to_server_ids[client_entity.id_string()] = entity_id;
- }
-
- EntityMap::const_iterator iter = entities_.find(entity_id);
- CHECK(iter != entities_.end());
- committed_model_types.Put(iter->second->GetModelType());
- }
-
- FOR_EACH_OBSERVER(Observer, observers_,
- OnCommit(invalidator_client_id, committed_model_types));
- return true;
-}
-
-std::unique_ptr<base::DictionaryValue>
-FakeServer::GetEntitiesAsDictionaryValue() {
- DCHECK(thread_checker_.CalledOnValidThread());
- std::unique_ptr<base::DictionaryValue> dictionary(
- new base::DictionaryValue());
-
- // Initialize an empty ListValue for all ModelTypes.
- ModelTypeSet all_types = ModelTypeSet::All();
- for (ModelTypeSet::Iterator it = all_types.First(); it.Good(); it.Inc()) {
- dictionary->Set(ModelTypeToString(it.Get()), new base::ListValue());
- }
-
- for (EntityMap::const_iterator it = entities_.begin(); it != entities_.end();
- ++it) {
- const FakeServerEntity& entity = *it->second;
- if (IsDeletedOrPermanent(entity)) {
- // Tombstones are ignored as they don't represent current data. Folders
- // are also ignored as current verification infrastructure does not
- // consider them.
- continue;
- }
- base::ListValue* list_value;
- if (!dictionary->GetList(ModelTypeToString(entity.GetModelType()),
- &list_value)) {
- return std::unique_ptr<base::DictionaryValue>();
- }
- // TODO(pvalenzuela): Store more data for each entity so additional
- // verification can be performed. One example of additional verification
- // is checking the correctness of the bookmark hierarchy.
- list_value->AppendString(entity.GetName());
- }
-
- return dictionary;
-}
-
-std::vector<sync_pb::SyncEntity> FakeServer::GetSyncEntitiesByModelType(
- ModelType model_type) {
- std::vector<sync_pb::SyncEntity> sync_entities;
- DCHECK(thread_checker_.CalledOnValidThread());
- for (EntityMap::const_iterator it = entities_.begin(); it != entities_.end();
- ++it) {
- const FakeServerEntity& entity = *it->second;
- if (!IsDeletedOrPermanent(entity) && entity.GetModelType() == model_type) {
- sync_pb::SyncEntity sync_entity;
- entity.SerializeAsProto(&sync_entity);
- sync_entities.push_back(sync_entity);
- }
- }
- return sync_entities;
-}
-
-void FakeServer::InjectEntity(std::unique_ptr<FakeServerEntity> entity) {
- DCHECK(thread_checker_.CalledOnValidThread());
- SaveEntity(std::move(entity));
-}
-
-bool FakeServer::ModifyEntitySpecifics(
- const std::string& id,
- const sync_pb::EntitySpecifics& updated_specifics) {
- EntityMap::const_iterator iter = entities_.find(id);
- if (iter == entities_.end() ||
- iter->second->GetModelType() !=
- GetModelTypeFromSpecifics(updated_specifics)) {
- return false;
- }
-
- FakeServerEntity* entity = iter->second.get();
- entity->SetSpecifics(updated_specifics);
- UpdateEntityVersion(entity);
- return true;
-}
-
-bool FakeServer::ModifyBookmarkEntity(
- const std::string& id,
- const std::string& parent_id,
- const sync_pb::EntitySpecifics& updated_specifics) {
- EntityMap::const_iterator iter = entities_.find(id);
- if (iter == entities_.end() ||
- iter->second->GetModelType() != syncer::BOOKMARKS ||
- GetModelTypeFromSpecifics(updated_specifics) != syncer::BOOKMARKS) {
- return false;
- }
-
- BookmarkEntity* entity = static_cast<BookmarkEntity*>(iter->second.get());
-
- entity->SetParentId(parent_id);
- entity->SetSpecifics(updated_specifics);
- if (updated_specifics.has_bookmark()) {
- entity->SetName(updated_specifics.bookmark().title());
- }
- UpdateEntityVersion(entity);
- return true;
-}
-
-void FakeServer::ClearServerData() {
- DCHECK(thread_checker_.CalledOnValidThread());
- entities_.clear();
- keystore_keys_.clear();
- ++store_birthday_;
- Init();
-}
-
-void FakeServer::SetAuthenticated() {
- DCHECK(thread_checker_.CalledOnValidThread());
- authenticated_ = true;
-}
-
-void FakeServer::SetUnauthenticated() {
- DCHECK(thread_checker_.CalledOnValidThread());
- authenticated_ = false;
-}
-
-bool FakeServer::TriggerError(const sync_pb::SyncEnums::ErrorType& error_type) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (triggered_actionable_error_.get()) {
- DVLOG(1) << "Only one type of error can be triggered at any given time.";
- return false;
- }
-
- error_type_ = error_type;
- return true;
-}
-
-bool FakeServer::TriggerActionableError(
- const sync_pb::SyncEnums::ErrorType& error_type,
- const string& description,
- const string& url,
- const sync_pb::SyncEnums::Action& action) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (error_type_ != sync_pb::SyncEnums::SUCCESS) {
- DVLOG(1) << "Only one type of error can be triggered at any given time.";
- return false;
- }
-
- sync_pb::ClientToServerResponse_Error* error =
- new sync_pb::ClientToServerResponse_Error();
- error->set_error_type(error_type);
- error->set_error_description(description);
- error->set_url(url);
- error->set_action(action);
- triggered_actionable_error_.reset(error);
- return true;
-}
-
-bool FakeServer::EnableAlternatingTriggeredErrors() {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (error_type_ == sync_pb::SyncEnums::SUCCESS &&
- !triggered_actionable_error_.get()) {
- DVLOG(1) << "No triggered error set. Alternating can't be enabled.";
- return false;
- }
-
- alternate_triggered_errors_ = true;
- // Reset the counter so that the the first request yields a triggered error.
- request_counter_ = 0;
- return true;
-}
-
-bool FakeServer::ShouldSendTriggeredError() const {
- if (!alternate_triggered_errors_)
- return true;
-
- // Check that the counter is odd so that we trigger an error on the first
- // request after alternating is enabled.
- return request_counter_ % 2 != 0;
-}
-
-void FakeServer::AddObserver(Observer* observer) {
- DCHECK(thread_checker_.CalledOnValidThread());
- observers_.AddObserver(observer);
-}
-
-void FakeServer::RemoveObserver(Observer* observer) {
- DCHECK(thread_checker_.CalledOnValidThread());
- observers_.RemoveObserver(observer);
-}
-
-void FakeServer::EnableNetwork() {
- DCHECK(thread_checker_.CalledOnValidThread());
- network_enabled_ = true;
-}
-
-void FakeServer::DisableNetwork() {
- DCHECK(thread_checker_.CalledOnValidThread());
- network_enabled_ = false;
-}
-
-std::string FakeServer::GetBookmarkBarFolderId() const {
- DCHECK(thread_checker_.CalledOnValidThread());
- for (EntityMap::const_iterator it = entities_.begin(); it != entities_.end();
- ++it) {
- FakeServerEntity* entity = it->second.get();
- if (entity->GetName() == kBookmarkBarFolderName &&
- entity->IsFolder() &&
- entity->GetModelType() == syncer::BOOKMARKS) {
- return entity->GetId();
- }
- }
- NOTREACHED() << "Bookmark Bar entity not found.";
- return "";
-}
-
-base::WeakPtr<FakeServer> FakeServer::AsWeakPtr() {
- DCHECK(thread_checker_.CalledOnValidThread());
- return weak_ptr_factory_.GetWeakPtr();
-}
-
-std::string FakeServer::GetStoreBirthday() const {
- DCHECK(thread_checker_.CalledOnValidThread());
- return base::Int64ToString(store_birthday_);
-}
-
-} // namespace fake_server
« no previous file with comments | « sync/test/fake_server/fake_server.h ('k') | sync/test/fake_server/fake_server_entity.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698