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 15namespace base { 16class WaitableEvent; 17} 18 19namespace password_manager { 20class PasswordStore; 21} 22 23namespace browser_sync { 24 25// A syncer::ModelSafeWorker for password models that accepts requests 26// from the syncapi that need to be fulfilled on the password thread, 27// which is the DB thread on Linux and Windows. 28class PasswordModelWorker : public syncer::ModelSafeWorker { 29 public: 30 PasswordModelWorker( 31 const scoped_refptr<password_manager::PasswordStore>& password_store, 32 syncer::WorkerLoopDestructionObserver* observer); 33 34 // syncer::ModelSafeWorker implementation. Called on syncapi SyncerThread. 35 virtual void RegisterForLoopDestruction() OVERRIDE; 36 virtual syncer::ModelSafeGroup GetModelSafeGroup() OVERRIDE; 37 virtual void RequestStop() OVERRIDE; 38 39 protected: 40 virtual syncer::SyncerError DoWorkAndWaitUntilDoneImpl( 41 const syncer::WorkCallback& work) OVERRIDE; 42 43 private: 44 virtual ~PasswordModelWorker(); 45 46 void CallDoWorkAndSignalTask( 47 const syncer::WorkCallback& work, 48 base::WaitableEvent* done, 49 syncer::SyncerError* error); 50 51 // Called on password thread to add PasswordModelWorker as destruction 52 // observer. 53 void RegisterForPasswordLoopDestruction(); 54 55 // |password_store_| is used on password thread but released on UI thread. 56 // Protected by |password_store_lock_|. 57 base::Lock password_store_lock_; 58 scoped_refptr<password_manager::PasswordStore> password_store_; 59 DISALLOW_COPY_AND_ASSIGN(PasswordModelWorker); 60}; 61 62} // namespace browser_sync 63 64#endif // CHROME_BROWSER_SYNC_GLUE_PASSWORD_MODEL_WORKER_H_ 65