• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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/history_model_worker.h"
6 
7 #include "base/memory/ref_counted.h"
8 #include "base/message_loop.h"
9 #include "base/task.h"
10 #include "base/synchronization/waitable_event.h"
11 #include "chrome/browser/history/history.h"
12 
13 using base::WaitableEvent;
14 
15 namespace browser_sync {
16 
17 class WorkerTask : public HistoryDBTask {
18  public:
WorkerTask(Callback0::Type * work,WaitableEvent * done)19   WorkerTask(Callback0::Type* work, WaitableEvent* done)
20     : work_(work), done_(done) {}
21 
RunOnDBThread(history::HistoryBackend * backend,history::HistoryDatabase * db)22   virtual bool RunOnDBThread(history::HistoryBackend* backend,
23                              history::HistoryDatabase* db) {
24     work_->Run();
25     done_->Signal();
26     return true;
27   }
28 
29   // Since the DoWorkAndWaitUntilDone() is syncronous, we don't need to run any
30   // code asynchronously on the main thread after completion.
DoneRunOnMainThread()31   virtual void DoneRunOnMainThread() {}
32 
33  protected:
34   Callback0::Type* work_;
35   WaitableEvent* done_;
36 };
37 
38 
HistoryModelWorker(HistoryService * history_service)39 HistoryModelWorker::HistoryModelWorker(HistoryService* history_service)
40   : history_service_(history_service) {
41 }
42 
~HistoryModelWorker()43 HistoryModelWorker::~HistoryModelWorker() {
44 }
45 
DoWorkAndWaitUntilDone(Callback0::Type * work)46 void HistoryModelWorker::DoWorkAndWaitUntilDone(Callback0::Type* work) {
47   WaitableEvent done(false, false);
48   scoped_refptr<WorkerTask> task(new WorkerTask(work, &done));
49   history_service_->ScheduleDBTask(task.get(), this);
50   done.Wait();
51 }
52 
GetModelSafeGroup()53 ModelSafeGroup HistoryModelWorker::GetModelSafeGroup() {
54   return GROUP_HISTORY;
55 }
56 
CurrentThreadIsWorkThread()57 bool HistoryModelWorker::CurrentThreadIsWorkThread() {
58   // TODO(ncarter): How to determine this?
59   return true;
60 }
61 
62 }  // namespace browser_sync
63