browser_thread_model_worker.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
1748fdef626d1dda2a0a727ea35d85d04363f5307Nick Kralevich// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2748fdef626d1dda2a0a727ea35d85d04363f5307Nick Kralevich// Use of this source code is governed by a BSD-style license that can be 3748fdef626d1dda2a0a727ea35d85d04363f5307Nick Kralevich// found in the LICENSE file. 4748fdef626d1dda2a0a727ea35d85d04363f5307Nick Kralevich 5748fdef626d1dda2a0a727ea35d85d04363f5307Nick Kralevich#ifndef CHROME_BROWSER_SYNC_GLUE_BROWSER_THREAD_MODEL_WORKER_H_ 6748fdef626d1dda2a0a727ea35d85d04363f5307Nick Kralevich#define CHROME_BROWSER_SYNC_GLUE_BROWSER_THREAD_MODEL_WORKER_H_ 7748fdef626d1dda2a0a727ea35d85d04363f5307Nick Kralevich 8748fdef626d1dda2a0a727ea35d85d04363f5307Nick Kralevich#include "base/basictypes.h" 9748fdef626d1dda2a0a727ea35d85d04363f5307Nick Kralevich#include "base/callback_forward.h" 10ad7df7bb76ce00cdef711ad1f96a9a7243981f4eStephen Smalley#include "base/compiler_specific.h" 11ad7df7bb76ce00cdef711ad1f96a9a7243981f4eStephen Smalley#include "content/public/browser/browser_thread.h" 12e7ec2f5258550a2cc0cb8c76ef24fc100a6b2cf1Stephen Smalley#include "sync/internal_api/public/engine/model_safe_worker.h" 13ad7df7bb76ce00cdef711ad1f96a9a7243981f4eStephen Smalley#include "sync/internal_api/public/util/syncer_error.h" 146634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich 156634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevichnamespace base { 166634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevichclass WaitableEvent; 1748759ca2054fa742724cd81debed51208b69e758Stephen Smalley} 184fce0ef97c2a4cb6e0ce2adf17c012c8be6252bfNick Kralevich 194fce0ef97c2a4cb6e0ce2adf17c012c8be6252bfNick Kralevichnamespace browser_sync { 2048759ca2054fa742724cd81debed51208b69e758Stephen Smalley 2148759ca2054fa742724cd81debed51208b69e758Stephen Smalley// A syncer::ModelSafeWorker for models that accept requests from the 2248759ca2054fa742724cd81debed51208b69e758Stephen Smalley// syncapi that need to be fulfilled on a browser thread, for example 2348759ca2054fa742724cd81debed51208b69e758Stephen Smalley// autofill on the DB thread. TODO(sync): Try to generalize other 246634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich// ModelWorkers (e.g. history, etc). 256634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevichclass BrowserThreadModelWorker : public syncer::ModelSafeWorker { 266634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich public: 276634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich BrowserThreadModelWorker(content::BrowserThread::ID thread, 286634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich syncer::ModelSafeGroup group); 296634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich 3048759ca2054fa742724cd81debed51208b69e758Stephen Smalley // syncer::ModelSafeWorker implementation. Called on the sync thread. 3148759ca2054fa742724cd81debed51208b69e758Stephen Smalley virtual syncer::SyncerError DoWorkAndWaitUntilDone( 3248759ca2054fa742724cd81debed51208b69e758Stephen Smalley const syncer::WorkCallback& work) OVERRIDE; 3348759ca2054fa742724cd81debed51208b69e758Stephen Smalley virtual syncer::ModelSafeGroup GetModelSafeGroup() OVERRIDE; 3448759ca2054fa742724cd81debed51208b69e758Stephen Smalley 3548759ca2054fa742724cd81debed51208b69e758Stephen Smalley protected: 3648759ca2054fa742724cd81debed51208b69e758Stephen Smalley virtual ~BrowserThreadModelWorker(); 373dad7b611a448fa43a678ff760c23a00f387947eStephen Smalley 381fdee11df2552e29da0c48e3432f26f7a93e3bffAlex Klyubin // Marked pure virtual so subclasses have to override, but there is 393dad7b611a448fa43a678ff760c23a00f387947eStephen Smalley // an implementation that subclasses should use. This is so that 403dad7b611a448fa43a678ff760c23a00f387947eStephen Smalley // (subclass)::CallDoWorkAndSignalTask shows up in callstacks. 416634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich virtual void CallDoWorkAndSignalTask( 4282fc3b524164588388aa3595bd2158020d93d28aNick Kralevich const syncer::WorkCallback& work, 4382fc3b524164588388aa3595bd2158020d93d28aNick Kralevich base::WaitableEvent* done, 4482fc3b524164588388aa3595bd2158020d93d28aNick Kralevich syncer::SyncerError* error) = 0; 456634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich 46b0db712bf048dc634363b658a647b1f1897d8433Stephen Smalley private: 476634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich content::BrowserThread::ID thread_; 486634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich syncer::ModelSafeGroup group_; 496634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich 5065317124a0bb7db4829f78e74c7bfe18e27f1c43Stephen Smalley DISALLOW_COPY_AND_ASSIGN(BrowserThreadModelWorker); 516634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich}; 526634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich 536634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich// Subclass BrowserThreadModelWorker so that we can distinguish them 5478706f9ef6d917fe2ec85ecb6b0f47fbc5efde57Nick Kralevich// from stack traces alone. 556634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich 566736bac21870bdc8bb6098ddffdb70103f7bc2a3Jeff Sharkeyclass DatabaseModelWorker : public BrowserThreadModelWorker { 576736bac21870bdc8bb6098ddffdb70103f7bc2a3Jeff Sharkey public: 586736bac21870bdc8bb6098ddffdb70103f7bc2a3Jeff Sharkey DatabaseModelWorker(); 596736bac21870bdc8bb6098ddffdb70103f7bc2a3Jeff Sharkey 606634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich protected: 616634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich virtual void CallDoWorkAndSignalTask( 626634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich const syncer::WorkCallback& work, 636634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich base::WaitableEvent* done, 646634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich syncer::SyncerError* error) OVERRIDE; 65fc4c6b798a0c8ff38b4b943209ba1653a0276dfaRobert Craig 666634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich private: 676634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich virtual ~DatabaseModelWorker(); 686634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich}; 696634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich 706634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevichclass FileModelWorker : public BrowserThreadModelWorker { 7109e6abd91b3aaaa11a44d032e095360c64a97b3aNick Kralevich public: 7209e6abd91b3aaaa11a44d032e095360c64a97b3aNick Kralevich FileModelWorker(); 73b0db712bf048dc634363b658a647b1f1897d8433Stephen Smalley 742e7a301fad5b6065e2d364170a80bc58bc41aab0Nick Kralevich protected: 7509e6abd91b3aaaa11a44d032e095360c64a97b3aNick Kralevich virtual void CallDoWorkAndSignalTask( 766634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich const syncer::WorkCallback& work, 776634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich base::WaitableEvent* done, 786634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich syncer::SyncerError* error) OVERRIDE; 796634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich 806634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich private: 816634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich virtual ~FileModelWorker(); 823ba9012535d8412d94db4ae9a5ce928b806e26d8Stephen Smalley}; 833ba9012535d8412d94db4ae9a5ce928b806e26d8Stephen Smalley 843ba9012535d8412d94db4ae9a5ce928b806e26d8Stephen Smalley} // namespace browser_sync 853ba9012535d8412d94db4ae9a5ce928b806e26d8Stephen Smalley 866634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich#endif // CHROME_BROWSER_SYNC_GLUE_BROWSER_THREAD_MODEL_WORKER_H_ 876634a1080e6617854d0b29bc65bb1c852ad3d5b6Nick Kralevich