1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file.
4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen//
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// An implementation of SyncNotifier that wraps InvalidationNotifier
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// on its own thread.
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CHROME_BROWSER_SYNC_NOTIFIER_NON_BLOCKING_INVALIDATION_NOTIFIER_H_
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CHROME_BROWSER_SYNC_NOTIFIER_NON_BLOCKING_INVALIDATION_NOTIFIER_H_
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#pragma once
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <string>
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/basictypes.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h"
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/sync/notifier/sync_notifier.h"
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "jingle/notifier/base/notifier_options.h"
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace base {
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass MessageLoopProxy;
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace sync_notifier {
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NonBlockingInvalidationNotifier : public SyncNotifier {
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  NonBlockingInvalidationNotifier(
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const notifier::NotifierOptions& notifier_options,
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const std::string& client_info);
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~NonBlockingInvalidationNotifier();
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // SyncNotifier implementation.
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void AddObserver(SyncNotifierObserver* observer);
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void RemoveObserver(SyncNotifierObserver* observer);
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void SetState(const std::string& state);
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void UpdateCredentials(
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const std::string& email, const std::string& token);
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void UpdateEnabledTypes(const syncable::ModelTypeSet& types);
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void SendNotification();
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void CheckOrSetValidThread();
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The real guts of NonBlockingInvalidationNotifier, which allows this class
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // to not be refcounted.
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  class Core;
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_refptr<Core> core_;
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_refptr<base::MessageLoopProxy> construction_message_loop_proxy_;
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_refptr<base::MessageLoopProxy> method_message_loop_proxy_;
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy_;
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(NonBlockingInvalidationNotifier);
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}  // namespace sync_notifier
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif  // CHROME_BROWSER_SYNC_NOTIFIER_NON_BLOCKING_INVALIDATION_NOTIFIER_H_
57