| 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
|
|
|