1 // Copyright (c) 2012 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.
5 #include "chrome/browser/chromeos/contacts/fake_contact_database.h"
7 #include "chrome/browser/chromeos/contacts/contact.pb.h"
8 #include "content/public/browser/browser_thread.h"
10 using content::BrowserThread;
14 FakeContactDatabase::FakeContactDatabase()
15 : init_success_(true),
18 num_saved_contacts_(0) {
19 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
22 void FakeContactDatabase::Init(const base::FilePath& database_dir,
23 InitCallback callback) {
24 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
25 callback.Run(init_success_);
28 void FakeContactDatabase::SetContacts(const ContactPointers& contacts,
29 const UpdateMetadata& metadata) {
31 MergeContacts(contacts, ContactIds());
35 void FakeContactDatabase::DestroyOnUIThread() {
36 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
40 void FakeContactDatabase::SaveContacts(
41 scoped_ptr<ContactPointers> contacts_to_save,
42 scoped_ptr<ContactIds> contact_ids_to_delete,
43 scoped_ptr<UpdateMetadata> metadata,
45 SaveCallback callback) {
46 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
48 num_saved_contacts_ += contacts_to_save->size();
51 MergeContacts(*contacts_to_save, *contact_ids_to_delete);
52 metadata_ = *metadata;
54 callback.Run(save_success_);
57 void FakeContactDatabase::LoadContacts(LoadCallback callback) {
58 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
59 scoped_ptr<ScopedVector<Contact> > contacts(new ScopedVector<Contact>());
60 scoped_ptr<UpdateMetadata> metadata(new UpdateMetadata);
62 for (ContactMap::const_iterator it = contacts_.begin();
63 it != contacts_.end(); ++it) {
64 contacts->push_back(new Contact(*it->second));
66 *metadata = metadata_;
68 callback.Run(load_success_, contacts.Pass(), metadata.Pass());
71 FakeContactDatabase::~FakeContactDatabase() {
74 void FakeContactDatabase::MergeContacts(
75 const ContactPointers& updated_contacts,
76 const ContactIds& contact_ids_to_delete) {
77 scoped_ptr<ScopedVector<Contact> > copied_contacts(new ScopedVector<Contact>);
78 for (size_t i = 0; i < updated_contacts.size(); ++i)
79 copied_contacts->push_back(new Contact(*updated_contacts[i]));
80 contacts_.Merge(copied_contacts.Pass(), ContactMap::KEEP_DELETED_CONTACTS);
81 for (ContactIds::const_iterator it = contact_ids_to_delete.begin();
82 it != contact_ids_to_delete.end(); ++it) {
87 } // namespace contacts