Home | History | Annotate | Download | only in glue
      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.
      4 
      5 #include "chrome/browser/sync/glue/password_model_worker.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/memory/ref_counted.h"
      9 #include "base/synchronization/waitable_event.h"
     10 #include "chrome/browser/password_manager/password_store.h"
     11 
     12 using base::WaitableEvent;
     13 
     14 namespace browser_sync {
     15 
     16 PasswordModelWorker::PasswordModelWorker(
     17     const scoped_refptr<PasswordStore>& password_store,
     18     syncer::WorkerLoopDestructionObserver* observer)
     19   : syncer::ModelSafeWorker(observer),
     20     password_store_(password_store) {
     21   DCHECK(password_store.get());
     22 }
     23 
     24 void PasswordModelWorker::RegisterForLoopDestruction() {
     25   password_store_->ScheduleTask(
     26       base::Bind(&PasswordModelWorker::RegisterForPasswordLoopDestruction,
     27                  this));
     28 }
     29 
     30 syncer::SyncerError PasswordModelWorker::DoWorkAndWaitUntilDoneImpl(
     31     const syncer::WorkCallback& work) {
     32   syncer::SyncerError error = syncer::UNSET;
     33   if (password_store_->ScheduleTask(
     34           base::Bind(&PasswordModelWorker::CallDoWorkAndSignalTask,
     35                      this, work, work_done_or_stopped(), &error))) {
     36     work_done_or_stopped()->Wait();
     37   } else {
     38     error = syncer::CANNOT_DO_WORK;
     39   }
     40   return error;
     41 }
     42 
     43 syncer::ModelSafeGroup PasswordModelWorker::GetModelSafeGroup() {
     44   return syncer::GROUP_PASSWORD;
     45 }
     46 
     47 PasswordModelWorker::~PasswordModelWorker() {}
     48 
     49 void PasswordModelWorker::CallDoWorkAndSignalTask(
     50     const syncer::WorkCallback& work,
     51     WaitableEvent* done,
     52     syncer::SyncerError *error) {
     53   *error = work.Run();
     54   done->Signal();
     55 }
     56 
     57 void PasswordModelWorker::RegisterForPasswordLoopDestruction() {
     58   base::MessageLoop::current()->AddDestructionObserver(this);
     59   SetWorkingLoopToCurrent();
     60 }
     61 
     62 }  // namespace browser_sync
     63