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..559f48d58307098cce2356b110c9f64ca0684046 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::WorkerObserver* observer) |
+ : syncer::ModelSafeWorker(observer), |
+ password_store_(password_store) { |
DCHECK(password_store); |
} |
+void PasswordModelWorker::RegisterForLoopDestruction() { |
+ password_store_->ScheduleTask( |
+ base::Bind(&PasswordModelWorker::RegisterForPasswordLoopDestruction, |
+ this)); |
+} |
+ |
syncer::SyncerError PasswordModelWorker::DoWorkAndWaitUntilDone( |
- const syncer::WorkCallback& work) { |
- WaitableEvent done(false, false); |
+ const syncer::WorkCallback& work, WaitableEvent* done) { |
syncer::SyncerError error = syncer::UNSET; |
if (password_store_->ScheduleTask( |
base::Bind(&PasswordModelWorker::CallDoWorkAndSignalTask, |
- this, work, &done, &error))) { |
- done.Wait(); |
+ this, work, done, &error))) { |
+ done->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 |