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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_SYNC_GLUE_PASSWORD_MODEL_WORKER_H_ 6 #define CHROME_BROWSER_SYNC_GLUE_PASSWORD_MODEL_WORKER_H_ 7 8 #include "sync/internal_api/public/engine/model_safe_worker.h" 9 10 #include "base/basictypes.h" 11 #include "base/callback_forward.h" 12 #include "base/compiler_specific.h" 13 #include "base/memory/ref_counted.h" 14 15 class PasswordStore; 16 17 namespace base { 18 class WaitableEvent; 19 } 20 21 namespace browser_sync { 22 23 // A syncer::ModelSafeWorker for password models that accepts requests 24 // from the syncapi that need to be fulfilled on the password thread, 25 // which is the DB thread on Linux and Windows. 26 class PasswordModelWorker : public syncer::ModelSafeWorker { 27 public: 28 PasswordModelWorker(const scoped_refptr<PasswordStore>& password_store, 29 syncer::WorkerLoopDestructionObserver* observer); 30 31 // syncer::ModelSafeWorker implementation. Called on syncapi SyncerThread. 32 virtual void RegisterForLoopDestruction() OVERRIDE; 33 virtual syncer::ModelSafeGroup GetModelSafeGroup() OVERRIDE; 34 35 protected: 36 virtual syncer::SyncerError DoWorkAndWaitUntilDoneImpl( 37 const syncer::WorkCallback& work) OVERRIDE; 38 39 private: 40 virtual ~PasswordModelWorker(); 41 42 void CallDoWorkAndSignalTask( 43 const syncer::WorkCallback& work, 44 base::WaitableEvent* done, 45 syncer::SyncerError* error); 46 47 // Called on password thread to add PasswordModelWorker as destruction 48 // observer. 49 void RegisterForPasswordLoopDestruction(); 50 51 scoped_refptr<PasswordStore> password_store_; 52 DISALLOW_COPY_AND_ASSIGN(PasswordModelWorker); 53 }; 54 55 } // namespace browser_sync 56 57 #endif // CHROME_BROWSER_SYNC_GLUE_PASSWORD_MODEL_WORKER_H_ 58