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

Side by Side Diff: chrome/browser/chromeos/contacts/contact_database.h

Issue 10832064: contacts: Add contacts::ContactDatabase. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: try clearing bitmap pixels to see if it fixes some valgrind errors 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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.
4
5 #ifndef CHROME_BROWSER_CHROMEOS_CONTACTS_CONTACT_DATABASE_H_
6 #define CHROME_BROWSER_CHROMEOS_CONTACTS_CONTACT_DATABASE_H_
7
8 #include <vector>
9
10 #include "base/basictypes.h"
11 #include "base/callback.h"
12 #include "base/compiler_specific.h"
13 #include "base/file_path.h"
14 #include "base/memory/ref_counted.h"
satorux1 2012/07/31 07:26:30 is this needed?
Daniel Erat 2012/07/31 16:44:12 Yes, for scoped_refptr. :-)
satorux1 2012/07/31 17:34:26 oh you are right. It's used for the task runner.
15 #include "base/memory/scoped_ptr.h"
16 #include "base/memory/scoped_vector.h"
17
18 namespace base {
19 class SequencedTaskRunner;
20 }
21
22 namespace leveldb {
23 class DB;
24 }
25
26 namespace contacts {
27
28 class Contact;
29 typedef std::vector<const Contact*> ContactPointers;
30
31 // Interface for classes providing persistent storage of Contact objects.
32 class ContactDatabaseInterface {
33 public:
34 typedef base::Callback<void(bool success)> InitCallback;
35 typedef base::Callback<void(bool success)> SaveCallback;
36 typedef base::Callback<void(bool success, scoped_ptr<ScopedVector<Contact> >)>
37 LoadCallback;
38
39 ContactDatabaseInterface() {}
40
41 // Asynchronously destroys the object after all in-progress file operations
42 // have completed.
43 virtual void DestroyOnUIThread() {}
44
45 // Asynchronously initializes the object. |callback| will be invoked on the
46 // UI thread when complete.
47 virtual void Init(const FilePath& database_dir, InitCallback callback) = 0;
48
49 // Asynchronously saves |contacts| to the database. If |is_full_update| is
50 // true, all existing contacts in the database not present in |contacts| will
51 // be removed. |callback| will be invoked on the UI thread when complete.
52 // The caller must not make changes to the underlying passed-in Contact
53 // objects until the callback has been invoked.
54 virtual void SaveContacts(scoped_ptr<ContactPointers> contacts,
55 bool is_full_update,
56 SaveCallback callback) = 0;
57
58 // Asynchronously loads all contacts from the database and invokes |callback|
59 // when complete.
60 virtual void LoadContacts(LoadCallback callback) = 0;
61
62 protected:
63 virtual ~ContactDatabaseInterface() {}
64
65 private:
66 DISALLOW_COPY_AND_ASSIGN(ContactDatabaseInterface);
67 };
68
69 class ContactDatabase : public ContactDatabaseInterface {
70 public:
71 ContactDatabase();
72
73 // ContactDatabaseInterface implementation.
74 virtual void DestroyOnUIThread() OVERRIDE;
75 virtual void Init(const FilePath& database_dir,
76 InitCallback callback) OVERRIDE;
77 virtual void SaveContacts(scoped_ptr<ContactPointers> contacts,
78 bool is_full_update,
79 SaveCallback callback) OVERRIDE;
80 virtual void LoadContacts(LoadCallback callback) OVERRIDE;
81
82 protected:
83 virtual ~ContactDatabase();
84
85 private:
86 // Are we currently being run by |task_runner_|?
87 bool IsRunByTaskRunner() const;
88
89 // Deletes |this|.
90 void DestroyFromTaskRunner();
91
92 // Initializes the database in |database_dir| and posts |callback| on the UI
93 // thread with the result.
94 void InitFromTaskRunner(const FilePath& database_dir, InitCallback callback);
95
96 // Helper method called by InitFromTaskRunner(). Returns true on success.
97 bool InitInternal(const FilePath& database_dir);
98
99 // Saves |contacts| to disk and invokes |callback| on the UI thread when
100 // complete.
101 void SaveContactsFromTaskRunner(scoped_ptr<ContactPointers> contacts,
102 bool is_full_update,
103 SaveCallback callback);
104
105 // Loads contacts from disk and passes them to |callback| on the UI thread
106 // when complete.
107 void LoadContactsFromTaskRunner(LoadCallback callback);
108
109 // Helper method called by LoadContactsFromTaskRunner(). Returns true on
110 // success.
111 bool LoadContactsInternal(ScopedVector<Contact>* contacts);
112
113 // Used to run blocking tasks in-order.
114 scoped_refptr<base::SequencedTaskRunner> task_runner_;
115
116 scoped_ptr<leveldb::DB> db_;
117
118 DISALLOW_COPY_AND_ASSIGN(ContactDatabase);
119 };
120
121 } // namespace contacts
122
123 #endif // CHROME_BROWSER_CHROMEOS_CONTACTS_CONTACT_DATABASE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698