Index: chrome/browser/sync/glue/password_model_worker.cc |
diff --git a/chrome/browser/sync/glue/password_model_worker.cc b/chrome/browser/sync/glue/password_model_worker.cc |
index d4d71b89e8b1470d14c22f9734e211682bbb1d7a..7ee1ea4c5e61a00c328bb2605762193fc78a64ca 100644 |
--- a/chrome/browser/sync/glue/password_model_worker.cc |
+++ b/chrome/browser/sync/glue/password_model_worker.cc |
@@ -14,19 +14,26 @@ using base::WaitableEvent; |
namespace browser_sync { |
PasswordModelWorker::PasswordModelWorker( |
- const scoped_refptr<PasswordStore>& password_store) |
- : password_store_(password_store) { |
+ const scoped_refptr<PasswordStore>& password_store, |
+ syncer::WorkerLoopDestructionObserver* observer) |
+ : syncer::ModelSafeWorker(observer), |
+ password_store_(password_store) { |
DCHECK(password_store); |
} |
-syncer::SyncerError PasswordModelWorker::DoWorkAndWaitUntilDone( |
+void PasswordModelWorker::RegisterForLoopDestruction() { |
+ password_store_->ScheduleTask( |
+ base::Bind(&PasswordModelWorker::RegisterForPasswordLoopDestruction, |
+ this)); |
+} |
+ |
+syncer::SyncerError PasswordModelWorker::DoWorkAndWaitUntilDoneImpl( |
const syncer::WorkCallback& work) { |
- WaitableEvent done(false, false); |
syncer::SyncerError error = syncer::UNSET; |
if (password_store_->ScheduleTask( |
base::Bind(&PasswordModelWorker::CallDoWorkAndSignalTask, |
- this, work, &done, &error))) { |
- done.Wait(); |
+ this, work, work_done_or_stopped(), &error))) { |
+ work_done_or_stopped()->Wait(); |
} else { |
error = syncer::CANNOT_DO_WORK; |
} |
@@ -47,4 +54,8 @@ void PasswordModelWorker::CallDoWorkAndSignalTask( |
done->Signal(); |
} |
+void PasswordModelWorker::RegisterForPasswordLoopDestruction() { |
+ MessageLoop::current()->AddDestructionObserver(this); |
+} |
+ |
} // namespace browser_sync |