// 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