Revert 168224 - Update V8 to version 3.15.4.
[chromium-blink-merge.git] / chrome / browser / sync / glue / browser_thread_model_worker.cc
blobf92b6885f7e905cf6aef42f359bbfbea901c1b54
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.
5 #include "chrome/browser/sync/glue/browser_thread_model_worker.h"
7 #include "base/bind.h"
8 #include "base/synchronization/waitable_event.h"
9 #include "content/public/browser/browser_thread.h"
11 using base::WaitableEvent;
12 using content::BrowserThread;
14 namespace browser_sync {
16 BrowserThreadModelWorker::BrowserThreadModelWorker(
17 BrowserThread::ID thread, syncer::ModelSafeGroup group)
18 : thread_(thread), group_(group) {
21 syncer::SyncerError BrowserThreadModelWorker::DoWorkAndWaitUntilDone(
22 const syncer::WorkCallback& work) {
23 syncer::SyncerError error = syncer::UNSET;
24 if (BrowserThread::CurrentlyOn(thread_)) {
25 DLOG(WARNING) << "Already on thread " << thread_;
26 return work.Run();
28 WaitableEvent done(false, false);
29 if (!BrowserThread::PostTask(
30 thread_,
31 FROM_HERE,
32 base::Bind(&BrowserThreadModelWorker::CallDoWorkAndSignalTask, this,
33 work, &done, &error))) {
34 DLOG(WARNING) << "Failed to post task to thread " << thread_;
35 error = syncer::CANNOT_DO_WORK;
36 return error;
38 done.Wait();
39 return error;
42 syncer::ModelSafeGroup BrowserThreadModelWorker::GetModelSafeGroup() {
43 return group_;
46 BrowserThreadModelWorker::~BrowserThreadModelWorker() {}
48 void BrowserThreadModelWorker::CallDoWorkAndSignalTask(
49 const syncer::WorkCallback& work,
50 WaitableEvent* done,
51 syncer::SyncerError* error) {
52 DCHECK(BrowserThread::CurrentlyOn(thread_));
53 *error = work.Run();
54 done->Signal();
57 DatabaseModelWorker::DatabaseModelWorker()
58 : BrowserThreadModelWorker(BrowserThread::DB, syncer::GROUP_DB) {
61 void DatabaseModelWorker::CallDoWorkAndSignalTask(
62 const syncer::WorkCallback& work,
63 WaitableEvent* done,
64 syncer::SyncerError* error) {
65 BrowserThreadModelWorker::CallDoWorkAndSignalTask(work, done, error);
68 DatabaseModelWorker::~DatabaseModelWorker() {}
70 FileModelWorker::FileModelWorker()
71 : BrowserThreadModelWorker(BrowserThread::FILE, syncer::GROUP_FILE) {
74 void FileModelWorker::CallDoWorkAndSignalTask(
75 const syncer::WorkCallback& work,
76 WaitableEvent* done,
77 syncer::SyncerError* error) {
78 BrowserThreadModelWorker::CallDoWorkAndSignalTask(work, done, error);
81 FileModelWorker::~FileModelWorker() {}
83 } // namespace browser_sync