Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(478)

Side by Side Diff: chrome/browser/sync/glue/password_model_worker.cc

Issue 14046031: Worker changes to prepare for lock-free shutdown. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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::WorkerLoopDestructionObserver* observer)
19 : syncer::ModelSafeWorker(observer),
20 password_store_(password_store) {
19 DCHECK(password_store); 21 DCHECK(password_store);
20 } 22 }
21 23
22 syncer::SyncerError PasswordModelWorker::DoWorkAndWaitUntilDone( 24 void PasswordModelWorker::RegisterForLoopDestruction() {
25 password_store_->ScheduleTask(
26 base::Bind(&PasswordModelWorker::RegisterForPasswordLoopDestruction,
27 this));
28 }
29
30 syncer::SyncerError PasswordModelWorker::DoWorkAndWaitUntilDoneImpl(
23 const syncer::WorkCallback& work) { 31 const syncer::WorkCallback& work) {
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, work_done_or_stopped(), &error))) {
29 done.Wait(); 36 work_done_or_stopped()->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
OLDNEW
« no previous file with comments | « chrome/browser/sync/glue/password_model_worker.h ('k') | chrome/browser/sync/glue/sync_backend_registrar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698