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/password_model_worker.h"
8 #include "base/memory/ref_counted.h"
9 #include "base/synchronization/waitable_event.h"
10 #include "chrome/browser/password_manager/password_store.h"
12 using base::WaitableEvent;
14 namespace browser_sync {
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());
24 void PasswordModelWorker::RegisterForLoopDestruction() {
25 base::AutoLock lock(password_store_lock_);
26 password_store_->ScheduleTask(
27 base::Bind(&PasswordModelWorker::RegisterForPasswordLoopDestruction,
31 syncer::SyncerError PasswordModelWorker::DoWorkAndWaitUntilDoneImpl(
32 const syncer::WorkCallback& work) {
33 syncer::SyncerError error = syncer::UNSET;
35 bool scheduled = false;
37 base::AutoLock lock(password_store_lock_);
38 if (!password_store_.get())
39 return syncer::CANNOT_DO_WORK;
41 scheduled = password_store_->ScheduleTask(
42 base::Bind(&PasswordModelWorker::CallDoWorkAndSignalTask,
43 this, work, work_done_or_stopped(), &error));
47 work_done_or_stopped()->Wait();
49 error = syncer::CANNOT_DO_WORK;
53 syncer::ModelSafeGroup PasswordModelWorker::GetModelSafeGroup() {
54 return syncer::GROUP_PASSWORD;
57 PasswordModelWorker::~PasswordModelWorker() {}
59 void PasswordModelWorker::CallDoWorkAndSignalTask(
60 const syncer::WorkCallback& work,
62 syncer::SyncerError *error) {
67 void PasswordModelWorker::RegisterForPasswordLoopDestruction() {
68 base::MessageLoop::current()->AddDestructionObserver(this);
69 SetWorkingLoopToCurrent();
72 void PasswordModelWorker::RequestStop() {
73 ModelSafeWorker::RequestStop();
75 base::AutoLock lock(password_store_lock_);
76 password_store_ = NULL;
79 } // namespace browser_sync