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

Unified Diff: chrome/browser/chromeos/contacts/contact_database.h

Issue 10542076: ABANDONED: chromeos: Download contacts (work in progress). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: minor changes Created 8 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 | « chrome/browser/chromeos/contacts/contact.cc ('k') | chrome/browser/chromeos/contacts/contact_database.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/contacts/contact_database.h
diff --git a/chrome/browser/chromeos/contacts/contact_database.h b/chrome/browser/chromeos/contacts/contact_database.h
new file mode 100644
index 0000000000000000000000000000000000000000..d45a53d2cd2bc7b6bc3694bc7e8fd813143bf961
--- /dev/null
+++ b/chrome/browser/chromeos/contacts/contact_database.h
@@ -0,0 +1,147 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_CONTACTS_CONTACT_DATABASE_H_
+#define CHROME_BROWSER_CHROMEOS_CONTACTS_CONTACT_DATABASE_H_
+
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/compiler_specific.h"
+#include "base/file_path.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/scoped_vector.h"
+#include "base/synchronization/condition_variable.h"
+#include "base/synchronization/lock.h"
+#include "sql/connection.h"
+#include "sql/init_status.h"
+
+namespace sql {
+class Connection;
+class MetaTable;
+}
+
+namespace contacts {
+
+struct Contact;
+typedef std::vector<const Contact*> ContactPointers;
+
+// Interface for classes providing persistent storage of Contact objects.
+class ContactDatabaseInterface {
+ public:
+ // The parameter is true on success and false on failure.
+ typedef base::Callback<void(bool)> InitCallback;
+
+ // The parameter is true on success and false on failure.
+ typedef base::Callback<void(bool)> SaveCallback;
+
+ // The first parameter is true on success and false on failure.
+ typedef base::Callback<void(bool, scoped_ptr<ScopedVector<Contact> >)>
+ LoadCallback;
+
+ ContactDatabaseInterface() {}
+ virtual ~ContactDatabaseInterface() {}
+
+ // Asynchronously initializes the object. |callback| will be invoked on the
+ // UI thread when complete with a true parameter if initialization succeeded.
+ virtual void Init(const FilePath& database_path, InitCallback callback) = 0;
+
+ // Asynchronously saves |contacts| to the database. |callback| will be
+ // invoked on the UI thread when complete. The caller must not make changes
+ // to the underlying passed-in contacts until the callback has been invoked.
+ virtual void SaveContacts(scoped_ptr<ContactPointers> contacts,
+ bool is_full_update,
+ SaveCallback callback) = 0;
+
+ // Asynchronously loads all contacts from the database and invokes |callback|
+ // when complete.
+ virtual void LoadContacts(LoadCallback callback) = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ContactDatabaseInterface);
+};
+
+class ContactDatabase : public ContactDatabaseInterface {
+ public:
+ ContactDatabase();
+ virtual ~ContactDatabase();
+
+ // ContactDatabaseInterface implementation.
+ virtual void Init(const FilePath& database_path,
+ InitCallback callback) OVERRIDE;
+ virtual void SaveContacts(scoped_ptr<ContactPointers> contacts,
+ bool is_full_update,
+ SaveCallback callback) OVERRIDE;
+ virtual void LoadContacts(LoadCallback callback) OVERRIDE;
+
+ private:
+ // Initializes the database in |database_dir| and posts |callback| on the UI
+ // thread with the result.
+ void InitOnFileThread(const FilePath& database_path, InitCallback callback);
+
+ // Helper method called by InitOnFileThread().
+ sql::InitStatus InitInternal(const FilePath& database_path);
+
+ // Creates our set of tables in |db| if they don't already exist.
+ // Called by InitInternal(). Returns false on failure.
+ bool CreateTablesIfNeeded();
+
+ // Queries the database to find the |contact_id| field for |contact|.
+ // Returns -1 if it's not present or if an error occurs.
+ int64 GetContactId(const Contact& contact);
+
+ // Saves |contacts| to disk and invokes |callback| on the UI thread when
+ // complete. Ownership of |contacts| remains with the caller (or with the
+ // callback itself, in this case).
+ void SaveContactsOnFileThread(scoped_ptr<ContactPointers> contacts,
+ bool is_full_update,
+ SaveCallback callback);
+
+ // Helper method called by SaveContactsOnFileThread(). Returns true on
+ // success.
+ bool SaveContactsInternal(const ContactPointers& contacts,
+ bool is_full_update);
+
+ // Clears all contact-related information from the database.
+ bool ClearContacts();
+
+ // Saves |contact| to the database, returning true on success. This method
+ // performs multiple queries, so a transaction must be open before it's
+ // called. If |possibly_exists| is false, we don't bother checking to see if
+ // there's an existing row to update (i.e. we're doing a full update and have
+ // already cleared the tables).
+ bool SaveContact(const Contact& contact, bool possibly_exists);
+
+ // Loads contacts from disk and passes them to |callback| on the UI thread
+ // when complete.
+ void LoadContactsOnFileThread(LoadCallback callback);
+
+ // Helper method called by LoadContactsOnFileThread(). Returns true on
+ // success.
+ bool LoadContactsInternal(ScopedVector<Contact>* contacts);
+
+ // Increments or decrements |num_outstanding_file_operations_|.
+ void IncrementOutstandingFileOperations();
+ void DecrementOutstandingFileOperations();
+
+ scoped_ptr<sql::Connection> db_;
+ scoped_ptr<sql::MetaTable> meta_table_;
+
+ // Protects |num_outstanding_file_operations_|.
+ base::Lock lock_;
+
+ // Signals on |lock_| when a file operation completes.
+ base::ConditionVariable condition_variable_;
+
+ // Number of pending or in-progress operations on the file thread.
+ int num_outstanding_file_operations_;
+
+ DISALLOW_COPY_AND_ASSIGN(ContactDatabase);
+};
+
+} // namespace contacts
+
+#endif // CHROME_BROWSER_CHROMEOS_CONTACTS_CONTACT_DATABASE_H_
« no previous file with comments | « chrome/browser/chromeos/contacts/contact.cc ('k') | chrome/browser/chromeos/contacts/contact_database.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698