OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sync/glue/password_model_worker.h" | 5 #include "chrome/browser/sync/glue/password_model_worker.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
9 #include "base/synchronization/waitable_event.h" | 9 #include "base/synchronization/waitable_event.h" |
10 #include "chrome/browser/password_manager/password_store.h" | 10 #include "chrome/browser/password_manager/password_store.h" |
11 | 11 |
12 using base::WaitableEvent; | 12 using base::WaitableEvent; |
13 | 13 |
14 namespace browser_sync { | 14 namespace browser_sync { |
15 | 15 |
16 PasswordModelWorker::PasswordModelWorker( | 16 PasswordModelWorker::PasswordModelWorker( |
17 const scoped_refptr<PasswordStore>& password_store) | 17 const scoped_refptr<PasswordStore>& password_store, |
18 : password_store_(password_store) { | 18 syncer::WorkerObserver* observer) |
| 19 : syncer::ModelSafeWorker(observer), |
| 20 password_store_(password_store) { |
19 DCHECK(password_store); | 21 DCHECK(password_store); |
20 } | 22 } |
21 | 23 |
| 24 void PasswordModelWorker::RegisterForLoopDestruction() { |
| 25 password_store_->ScheduleTask( |
| 26 base::Bind(&PasswordModelWorker::RegisterForPasswordLoopDestruction, |
| 27 this)); |
| 28 } |
| 29 |
22 syncer::SyncerError PasswordModelWorker::DoWorkAndWaitUntilDone( | 30 syncer::SyncerError PasswordModelWorker::DoWorkAndWaitUntilDone( |
23 const syncer::WorkCallback& work) { | 31 const syncer::WorkCallback& work, WaitableEvent* done) { |
24 WaitableEvent done(false, false); | |
25 syncer::SyncerError error = syncer::UNSET; | 32 syncer::SyncerError error = syncer::UNSET; |
26 if (password_store_->ScheduleTask( | 33 if (password_store_->ScheduleTask( |
27 base::Bind(&PasswordModelWorker::CallDoWorkAndSignalTask, | 34 base::Bind(&PasswordModelWorker::CallDoWorkAndSignalTask, |
28 this, work, &done, &error))) { | 35 this, work, done, &error))) { |
29 done.Wait(); | 36 done->Wait(); |
30 } else { | 37 } else { |
31 error = syncer::CANNOT_DO_WORK; | 38 error = syncer::CANNOT_DO_WORK; |
32 } | 39 } |
33 return error; | 40 return error; |
34 } | 41 } |
35 | 42 |
36 syncer::ModelSafeGroup PasswordModelWorker::GetModelSafeGroup() { | 43 syncer::ModelSafeGroup PasswordModelWorker::GetModelSafeGroup() { |
37 return syncer::GROUP_PASSWORD; | 44 return syncer::GROUP_PASSWORD; |
38 } | 45 } |
39 | 46 |
40 PasswordModelWorker::~PasswordModelWorker() {} | 47 PasswordModelWorker::~PasswordModelWorker() {} |
41 | 48 |
42 void PasswordModelWorker::CallDoWorkAndSignalTask( | 49 void PasswordModelWorker::CallDoWorkAndSignalTask( |
43 const syncer::WorkCallback& work, | 50 const syncer::WorkCallback& work, |
44 WaitableEvent* done, | 51 WaitableEvent* done, |
45 syncer::SyncerError *error) { | 52 syncer::SyncerError *error) { |
46 *error = work.Run(); | 53 *error = work.Run(); |
47 done->Signal(); | 54 done->Signal(); |
48 } | 55 } |
49 | 56 |
| 57 void PasswordModelWorker::RegisterForPasswordLoopDestruction() { |
| 58 MessageLoop::current()->AddDestructionObserver(this); |
| 59 } |
| 60 |
50 } // namespace browser_sync | 61 } // namespace browser_sync |
OLD | NEW |