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

Side by Side Diff: chrome/browser/chromeos/contacts/fake_contact_database.cc

Issue 10933127: contacts: Don't save deleted contacts to disk. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 8 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/contacts/fake_contact_database.h" 5 #include "chrome/browser/chromeos/contacts/fake_contact_database.h"
6 6
7 #include "chrome/browser/chromeos/contacts/contact.pb.h" 7 #include "chrome/browser/chromeos/contacts/contact.pb.h"
8 #include "content/public/browser/browser_thread.h" 8 #include "content/public/browser/browser_thread.h"
9 9
10 using content::BrowserThread; 10 using content::BrowserThread;
(...skipping 10 matching lines...) Expand all
21 21
22 void FakeContactDatabase::Init(const FilePath& database_dir, 22 void FakeContactDatabase::Init(const FilePath& database_dir,
23 InitCallback callback) { 23 InitCallback callback) {
24 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 24 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
25 callback.Run(init_success_); 25 callback.Run(init_success_);
26 } 26 }
27 27
28 void FakeContactDatabase::SetContacts(const ContactPointers& contacts, 28 void FakeContactDatabase::SetContacts(const ContactPointers& contacts,
29 const UpdateMetadata& metadata) { 29 const UpdateMetadata& metadata) {
30 contacts_.Clear(); 30 contacts_.Clear();
31 MergeContacts(contacts); 31 MergeContacts(contacts, ContactIds());
32 metadata_ = metadata; 32 metadata_ = metadata;
33 } 33 }
34 34
35 void FakeContactDatabase::DestroyOnUIThread() { 35 void FakeContactDatabase::DestroyOnUIThread() {
36 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 36 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
37 delete this; 37 delete this;
38 } 38 }
39 39
40 void FakeContactDatabase::SaveContacts(scoped_ptr<ContactPointers> contacts, 40 void FakeContactDatabase::SaveContacts(
41 scoped_ptr<UpdateMetadata> metadata, 41 scoped_ptr<ContactPointers> contacts_to_save,
42 bool is_full_update, 42 scoped_ptr<ContactIds> contact_ids_to_delete,
43 SaveCallback callback) { 43 scoped_ptr<UpdateMetadata> metadata,
44 bool is_full_update,
45 SaveCallback callback) {
44 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 46 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
45 if (save_success_) { 47 if (save_success_) {
46 num_saved_contacts_ += contacts->size(); 48 num_saved_contacts_ += contacts_to_save->size();
47 if (is_full_update) 49 if (is_full_update)
48 contacts_.Clear(); 50 contacts_.Clear();
49 MergeContacts(*contacts); 51 MergeContacts(*contacts_to_save, *contact_ids_to_delete);
50 metadata_ = *metadata; 52 metadata_ = *metadata;
51 } 53 }
52 callback.Run(save_success_); 54 callback.Run(save_success_);
53 } 55 }
54 56
55 void FakeContactDatabase::LoadContacts(LoadCallback callback) { 57 void FakeContactDatabase::LoadContacts(LoadCallback callback) {
56 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 58 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
57 scoped_ptr<ScopedVector<Contact> > contacts(new ScopedVector<Contact>()); 59 scoped_ptr<ScopedVector<Contact> > contacts(new ScopedVector<Contact>());
58 scoped_ptr<UpdateMetadata> metadata(new UpdateMetadata); 60 scoped_ptr<UpdateMetadata> metadata(new UpdateMetadata);
59 if (load_success_) { 61 if (load_success_) {
60 for (ContactMap::const_iterator it = contacts_.begin(); 62 for (ContactMap::const_iterator it = contacts_.begin();
61 it != contacts_.end(); ++it) { 63 it != contacts_.end(); ++it) {
62 contacts->push_back(new Contact(*it->second)); 64 contacts->push_back(new Contact(*it->second));
63 } 65 }
64 *metadata = metadata_; 66 *metadata = metadata_;
65 } 67 }
66 callback.Run(load_success_, contacts.Pass(), metadata.Pass()); 68 callback.Run(load_success_, contacts.Pass(), metadata.Pass());
67 } 69 }
68 70
69 FakeContactDatabase::~FakeContactDatabase() { 71 FakeContactDatabase::~FakeContactDatabase() {
70 } 72 }
71 73
72 void FakeContactDatabase::MergeContacts( 74 void FakeContactDatabase::MergeContacts(
73 const ContactPointers& updated_contacts) { 75 const ContactPointers& updated_contacts,
76 const ContactIds& contact_ids_to_delete) {
74 scoped_ptr<ScopedVector<Contact> > copied_contacts(new ScopedVector<Contact>); 77 scoped_ptr<ScopedVector<Contact> > copied_contacts(new ScopedVector<Contact>);
75 for (size_t i = 0; i < updated_contacts.size(); ++i) 78 for (size_t i = 0; i < updated_contacts.size(); ++i)
76 copied_contacts->push_back(new Contact(*updated_contacts[i])); 79 copied_contacts->push_back(new Contact(*updated_contacts[i]));
77 contacts_.Merge(copied_contacts.Pass(), ContactMap::KEEP_DELETED_CONTACTS); 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) {
83 contacts_.Erase(*it);
84 }
78 } 85 }
79 86
80 } // namespace contacts 87 } // namespace contacts
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698