database_model_worker.cc revision 3f50c38dc070f4bb515c1b64450dae14f316474e
1// Copyright (c) 2010 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#include "chrome/browser/sync/glue/database_model_worker.h"
6
7#include "base/synchronization/waitable_event.h"
8#include "chrome/browser/browser_thread.h"
9
10using base::WaitableEvent;
11
12namespace browser_sync {
13
14void DatabaseModelWorker::DoWorkAndWaitUntilDone(Callback0::Type* work) {
15  if (BrowserThread::CurrentlyOn(BrowserThread::DB)) {
16    DLOG(WARNING) << "DoWorkAndWaitUntilDone called from the DB thread.";
17    work->Run();
18    return;
19  }
20  WaitableEvent done(false, false);
21  if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
22      NewRunnableMethod(this, &DatabaseModelWorker::CallDoWorkAndSignalTask,
23                        work, &done))) {
24    NOTREACHED() << "Failed to post task to the db thread.";
25    return;
26  }
27  done.Wait();
28}
29
30void DatabaseModelWorker::CallDoWorkAndSignalTask(Callback0::Type* work,
31                                                  WaitableEvent* done) {
32  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
33  work->Run();
34  done->Signal();
35}
36
37ModelSafeGroup DatabaseModelWorker::GetModelSafeGroup() {
38  return GROUP_DB;
39}
40
41bool DatabaseModelWorker::CurrentThreadIsWorkThread() {
42  return BrowserThread::CurrentlyOn(BrowserThread::DB);
43}
44
45}  // namespace browser_sync
46