summaryrefslogtreecommitdiffstats
path: root/sync/internal_api/sync_db_util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sync/internal_api/sync_db_util.cc')
-rw-r--r--sync/internal_api/sync_db_util.cc38
1 files changed, 38 insertions, 0 deletions
diff --git a/sync/internal_api/sync_db_util.cc b/sync/internal_api/sync_db_util.cc
new file mode 100644
index 0000000..c12889d
--- /dev/null
+++ b/sync/internal_api/sync_db_util.cc
@@ -0,0 +1,38 @@
+// Copyright 2014 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.
+
+#include "sync/internal_api/public/util/sync_db_util.h"
+
+#include "base/files/file_path.h"
+#include "base/single_thread_task_runner.h"
+#include "sql/connection.h"
+#include "sync/syncable/directory.h"
+
+namespace syncer {
+
+void CheckSyncDbLastModifiedTime(
+ const base::FilePath& sync_dir,
+ scoped_refptr<base::SingleThreadTaskRunner> callback_runner,
+ base::Callback<void(base::Time)> callback) {
+ const base::FilePath sync_db =
+ sync_dir.Append(syncable::Directory::kSyncDatabaseFilename);
+
+ base::File f(sync_db, base::File::FLAG_OPEN | base::File::FLAG_READ);
+ base::File::Info info;
+ if (!f.IsValid() || !f.GetInfo(&info)) {
+ callback_runner->PostTask(FROM_HERE, base::Bind(callback, base::Time()));
+ return;
+ }
+ f.Close();
+
+ sql::Connection db;
+ if (!db.Open(sync_db) || !db.QuickIntegrityCheck()) {
+ callback_runner->PostTask(FROM_HERE, base::Bind(callback, base::Time()));
+ } else {
+ callback_runner->PostTask(FROM_HERE,
+ base::Bind(callback, info.last_modified));
+ }
+}
+
+} // namespace syncer