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

Unified Diff: chrome/browser/chromeos/contacts/google_contact_store.cc

Issue 10850033: contacts: Add ContactStoreFactory and FakeContactStore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix GoogleContactStore db-saving bug and FakeContactDatabase partial-update bug and apply review fe… Created 8 years, 4 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
Index: chrome/browser/chromeos/contacts/google_contact_store.cc
diff --git a/chrome/browser/chromeos/contacts/google_contact_store.cc b/chrome/browser/chromeos/contacts/google_contact_store.cc
index e1a99810ad47bff7c7442f2a27e9c01a6fe62e77..b80961836adee00eddf5f35545c1e07da52758ec 100644
--- a/chrome/browser/chromeos/contacts/google_contact_store.cc
+++ b/chrome/browser/chromeos/contacts/google_contact_store.cc
@@ -85,7 +85,8 @@ GoogleContactStore::GoogleContactStore(Profile* profile)
}
GoogleContactStore::~GoogleContactStore() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ // This should also be running on the UI thread but we can't check it; the
+ // message loop is typically already getting torn down at this point.
Daniel Erat 2012/08/03 20:00:23 [9076:9076:952949823645:FATAL:google_contact_store
satorux1 2012/08/03 20:08:14 wow this is subtle... On 2012/08/03 20:00:23, Dan
weak_ptr_factory_.InvalidateWeakPtrs();
DestroyDatabase();
}
@@ -261,27 +262,32 @@ void GoogleContactStore::OnDownloadSuccess(
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
VLOG(1) << "Got " << updated_contacts->size() << " contact(s) for "
<< profile_->GetProfileName();
- size_t num_updated_contacts = updated_contacts->size();
+
+ // Copy the pointers so we can update just these contacts in the database.
+ scoped_ptr<ContactPointers> contacts_to_save_to_db(new ContactPointers);
+ if (db_) {
+ for (size_t i = 0; i < updated_contacts->size(); ++i)
+ contacts_to_save_to_db->push_back((*updated_contacts)[i]);
+ }
+ bool got_updates = !updated_contacts->empty();
+
MergeContacts(is_full_update, updated_contacts.Pass());
last_successful_update_start_time_ = update_start_time;
- if (is_full_update || num_updated_contacts > 0) {
+ if (is_full_update || got_updates > 0) {
FOR_EACH_OBSERVER(ContactStoreObserver,
observers_,
OnContactsUpdated(this));
}
if (db_) {
- scoped_ptr<ContactPointers> contacts_to_save(new ContactPointers);
- for (ContactMap::const_iterator it = contacts_.begin();
- it != contacts_.end(); ++it) {
- contacts_to_save->push_back(it->second);
- }
+ VLOG(1) << "Saving " << contacts_to_save_to_db->size() << " contact(s) to "
+ << "database as " << (is_full_update ? "full" : "partial")
+ << " update";
scoped_ptr<UpdateMetadata> metadata(new UpdateMetadata);
metadata->set_last_update_start_time(update_start_time.ToInternalValue());
-
db_->SaveContacts(
- contacts_to_save.Pass(),
+ contacts_to_save_to_db.Pass(),
metadata.Pass(),
is_full_update,
base::Bind(&GoogleContactStore::OnDatabaseContactsSaved,
@@ -350,4 +356,23 @@ void GoogleContactStore::OnDatabaseContactsSaved(bool success) {
ScheduleUpdate(true);
}
+GoogleContactStoreFactory::GoogleContactStoreFactory() {
+}
+
+GoogleContactStoreFactory::~GoogleContactStoreFactory() {
+}
+
+bool GoogleContactStoreFactory::CanCreateContactStoreForProfile(
+ Profile* profile) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(profile);
+ return gdata::util::IsGDataAvailable(profile);
+}
+
+ContactStore* GoogleContactStoreFactory::CreateContactStore(Profile* profile) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(CanCreateContactStoreForProfile(profile));
+ return new GoogleContactStore(profile);
+}
+
} // namespace contacts

Powered by Google App Engine
This is Rietveld 408576698