// Copyright (c) 2010 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 "chrome/browser/sync/glue/database_model_worker.h" #include "base/synchronization/waitable_event.h" #include "content/browser/browser_thread.h" using base::WaitableEvent; namespace browser_sync { void DatabaseModelWorker::DoWorkAndWaitUntilDone(Callback0::Type* work) { if (BrowserThread::CurrentlyOn(BrowserThread::DB)) { DLOG(WARNING) << "DoWorkAndWaitUntilDone called from the DB thread."; work->Run(); return; } WaitableEvent done(false, false); if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, NewRunnableMethod(this, &DatabaseModelWorker::CallDoWorkAndSignalTask, work, &done))) { NOTREACHED() << "Failed to post task to the db thread."; return; } done.Wait(); } void DatabaseModelWorker::CallDoWorkAndSignalTask(Callback0::Type* work, WaitableEvent* done) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); work->Run(); done->Signal(); } ModelSafeGroup DatabaseModelWorker::GetModelSafeGroup() { return GROUP_DB; } bool DatabaseModelWorker::CurrentThreadIsWorkThread() { return BrowserThread::CurrentlyOn(BrowserThread::DB); } } // namespace browser_sync