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 20namespace base { 21class MessageLoopProxy; 22} 23 24 25namespace notifier { 26struct NotifierOptions; 27} // namespace 28 29namespace sync_notifier { 30 31class 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