| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // A notifier that uses p2p notifications based on XMPP push |
| // notifications. Used only for sync integration tests. |
| |
| #ifndef CHROME_BROWSER_SYNC_NOTIFIER_P2P_NOTIFIER_H_ |
| #define CHROME_BROWSER_SYNC_NOTIFIER_P2P_NOTIFIER_H_ |
| |
| #include <string> |
| |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/observer_list.h" |
| #include "chrome/browser/sync/notifier/sync_notifier.h" |
| #include "chrome/browser/sync/syncable/model_type.h" |
| #include "jingle/notifier/listener/talk_mediator.h" |
| |
| namespace base { |
| class MessageLoopProxy; |
| } |
| |
| |
| namespace notifier { |
| struct NotifierOptions; |
| } // namespace |
| |
| namespace sync_notifier { |
| |
| class P2PNotifier |
| : public SyncNotifier, |
| public notifier::TalkMediator::Delegate { |
| public: |
| explicit P2PNotifier(const notifier::NotifierOptions& notifier_options); |
| |
| virtual ~P2PNotifier(); |
| |
| // SyncNotifier implementation |
| virtual void AddObserver(SyncNotifierObserver* observer); |
| virtual void RemoveObserver(SyncNotifierObserver* observer); |
| virtual void SetState(const std::string& state); |
| virtual void UpdateCredentials( |
| const std::string& email, const std::string& token); |
| virtual void UpdateEnabledTypes(const syncable::ModelTypeSet& types); |
| virtual void SendNotification(); |
| |
| // TalkMediator::Delegate implementation. |
| virtual void OnNotificationStateChange(bool notifications_enabled); |
| virtual void OnIncomingNotification( |
| const notifier::Notification& notification); |
| virtual void OnOutgoingNotification(); |
| |
| private: |
| // Call OnIncomingNotification() on observers if we have a non-empty |
| // set of enabled types. |
| void MaybeEmitNotification(); |
| void CheckOrSetValidThread(); |
| |
| ObserverList<SyncNotifierObserver> observer_list_; |
| |
| // The actual notification listener. |
| scoped_ptr<notifier::TalkMediator> talk_mediator_; |
| // Whether we called Login() on |talk_mediator_| yet. |
| bool logged_in_; |
| // Whether |talk_mediator_| has notified us that notifications are |
| // enabled. |
| bool notifications_enabled_; |
| |
| syncable::ModelTypeSet enabled_types_; |
| scoped_refptr<base::MessageLoopProxy> construction_message_loop_proxy_; |
| scoped_refptr<base::MessageLoopProxy> method_message_loop_proxy_; |
| }; |
| |
| } // namespace sync_notifier |
| #endif // CHROME_BROWSER_SYNC_NOTIFIER_P2P_NOTIFIER_H_ |