1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/glue/database_model_worker.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/synchronization/waitable_event.h" 8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing base::WaitableEvent; 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser_sync { 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid DatabaseModelWorker::DoWorkAndWaitUntilDone(Callback0::Type* work) { 15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (BrowserThread::CurrentlyOn(BrowserThread::DB)) { 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DLOG(WARNING) << "DoWorkAndWaitUntilDone called from the DB thread."; 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch work->Run(); 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WaitableEvent done(false, false); 21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NewRunnableMethod(this, &DatabaseModelWorker::CallDoWorkAndSignalTask, 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch work, &done))) { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED() << "Failed to post task to the db thread."; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch done.Wait(); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid DatabaseModelWorker::CallDoWorkAndSignalTask(Callback0::Type* work, 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WaitableEvent* done) { 32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch work->Run(); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch done->Signal(); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenModelSafeGroup DatabaseModelWorker::GetModelSafeGroup() { 3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return GROUP_DB; 3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool DatabaseModelWorker::CurrentThreadIsWorkThread() { 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return BrowserThread::CurrentlyOn(BrowserThread::DB); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace browser_sync 46