• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 // A notifier that uses p2p notifications based on XMPP push
6 // notifications.  Used only for sync integration tests.
7 
8 #ifndef CHROME_BROWSER_SYNC_NOTIFIER_P2P_NOTIFIER_H_
9 #define CHROME_BROWSER_SYNC_NOTIFIER_P2P_NOTIFIER_H_
10 
11 #include <string>
12 
13 #include "base/memory/ref_counted.h"
14 #include "base/memory/scoped_ptr.h"
15 #include "base/observer_list.h"
16 #include "chrome/browser/sync/notifier/sync_notifier.h"
17 #include "chrome/browser/sync/syncable/model_type.h"
18 #include "jingle/notifier/listener/talk_mediator.h"
19 
20 namespace base {
21 class MessageLoopProxy;
22 }
23 
24 
25 namespace notifier {
26 struct NotifierOptions;
27 }  // namespace
28 
29 namespace sync_notifier {
30 
31 class P2PNotifier
32     : public SyncNotifier,
33       public notifier::TalkMediator::Delegate {
34  public:
35   explicit P2PNotifier(const notifier::NotifierOptions& notifier_options);
36 
37   virtual ~P2PNotifier();
38 
39   // SyncNotifier implementation
40   virtual void AddObserver(SyncNotifierObserver* observer);
41   virtual void RemoveObserver(SyncNotifierObserver* observer);
42   virtual void SetState(const std::string& state);
43   virtual void UpdateCredentials(
44       const std::string& email, const std::string& token);
45   virtual void UpdateEnabledTypes(const syncable::ModelTypeSet& types);
46   virtual void SendNotification();
47 
48   // TalkMediator::Delegate implementation.
49   virtual void OnNotificationStateChange(bool notifications_enabled);
50   virtual void OnIncomingNotification(
51       const notifier::Notification& notification);
52   virtual void OnOutgoingNotification();
53 
54  private:
55   // Call OnIncomingNotification() on observers if we have a non-empty
56   // set of enabled types.
57   void MaybeEmitNotification();
58   void CheckOrSetValidThread();
59 
60   ObserverList<SyncNotifierObserver> observer_list_;
61 
62   // The actual notification listener.
63   scoped_ptr<notifier::TalkMediator> talk_mediator_;
64   // Whether we called Login() on |talk_mediator_| yet.
65   bool logged_in_;
66   // Whether |talk_mediator_| has notified us that notifications are
67   // enabled.
68   bool notifications_enabled_;
69 
70   syncable::ModelTypeSet enabled_types_;
71   scoped_refptr<base::MessageLoopProxy> construction_message_loop_proxy_;
72   scoped_refptr<base::MessageLoopProxy> method_message_loop_proxy_;
73 };
74 
75 }  // namespace sync_notifier
76 #endif  // CHROME_BROWSER_SYNC_NOTIFIER_P2P_NOTIFIER_H_
77