// Copyright (c) 2012 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 "chrome/browser/chromeos/contacts/fake_contact_database.h" #include "chrome/browser/chromeos/contacts/contact.pb.h" #include "content/public/browser/browser_thread.h" using content::BrowserThread; namespace contacts { FakeContactDatabase::FakeContactDatabase() : init_success_(true), save_success_(true), load_success_(true), num_saved_contacts_(0) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); } void FakeContactDatabase::Init(const FilePath& database_dir, InitCallback callback) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); callback.Run(init_success_); } void FakeContactDatabase::SetContacts(const ContactPointers& contacts, const UpdateMetadata& metadata) { contacts_.Clear(); MergeContacts(contacts, ContactIds()); metadata_ = metadata; } void FakeContactDatabase::DestroyOnUIThread() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); delete this; } void FakeContactDatabase::SaveContacts( scoped_ptr contacts_to_save, scoped_ptr contact_ids_to_delete, scoped_ptr metadata, bool is_full_update, SaveCallback callback) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (save_success_) { num_saved_contacts_ += contacts_to_save->size(); if (is_full_update) contacts_.Clear(); MergeContacts(*contacts_to_save, *contact_ids_to_delete); metadata_ = *metadata; } callback.Run(save_success_); } void FakeContactDatabase::LoadContacts(LoadCallback callback) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); scoped_ptr > contacts(new ScopedVector()); scoped_ptr metadata(new UpdateMetadata); if (load_success_) { for (ContactMap::const_iterator it = contacts_.begin(); it != contacts_.end(); ++it) { contacts->push_back(new Contact(*it->second)); } *metadata = metadata_; } callback.Run(load_success_, contacts.Pass(), metadata.Pass()); } FakeContactDatabase::~FakeContactDatabase() { } void FakeContactDatabase::MergeContacts( const ContactPointers& updated_contacts, const ContactIds& contact_ids_to_delete) { scoped_ptr > copied_contacts(new ScopedVector); for (size_t i = 0; i < updated_contacts.size(); ++i) copied_contacts->push_back(new Contact(*updated_contacts[i])); contacts_.Merge(copied_contacts.Pass(), ContactMap::KEEP_DELETED_CONTACTS); for (ContactIds::const_iterator it = contact_ids_to_delete.begin(); it != contact_ids_to_delete.end(); ++it) { contacts_.Erase(*it); } } } // namespace contacts