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