• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 #ifndef REMOTING_JINGLE_GLUE_FAKE_SIGNAL_STRATEGY_H_
6 #define REMOTING_JINGLE_GLUE_FAKE_SIGNAL_STRATEGY_H_
7 
8 #include <list>
9 #include <queue>
10 #include <string>
11 
12 #include "base/observer_list.h"
13 #include "base/memory/weak_ptr.h"
14 #include "base/threading/non_thread_safe.h"
15 #include "remoting/jingle_glue/iq_sender.h"
16 #include "remoting/jingle_glue/signal_strategy.h"
17 
18 namespace remoting {
19 
20 class FakeSignalStrategy : public SignalStrategy,
21                            public base::NonThreadSafe {
22  public:
23   static void Connect(FakeSignalStrategy* peer1, FakeSignalStrategy* peer2);
24 
25   FakeSignalStrategy(const std::string& jid);
26   virtual ~FakeSignalStrategy();
27 
received_messages()28   const std::list<buzz::XmlElement*>& received_messages() {
29     return received_messages_;
30   }
31 
32   // SignalStrategy interface.
33   virtual void Connect() OVERRIDE;
34   virtual void Disconnect() OVERRIDE;
35   virtual State GetState() const OVERRIDE;
36   virtual Error GetError() const OVERRIDE;
37   virtual std::string GetLocalJid() const OVERRIDE;
38   virtual void AddListener(Listener* listener) OVERRIDE;
39   virtual void RemoveListener(Listener* listener) OVERRIDE;
40   virtual bool SendStanza(scoped_ptr<buzz::XmlElement> stanza) OVERRIDE;
41   virtual std::string GetNextId() OVERRIDE;
42 
43  private:
44   // Called by the |peer_|. Takes ownership of |stanza|.
45   void OnIncomingMessage(scoped_ptr<buzz::XmlElement> stanza);
46 
47   void DeliverIncomingMessages();
48 
49   std::string jid_;
50   FakeSignalStrategy* peer_;
51   ObserverList<Listener, true> listeners_;
52 
53   int last_id_;
54 
55   // All received messages, includes thouse still in |pending_messages_|.
56   std::list<buzz::XmlElement*> received_messages_;
57 
58   // Queue of messages that have yet to be delivered to observers.
59   std::queue<buzz::XmlElement*> pending_messages_;
60 
61   base::WeakPtrFactory<FakeSignalStrategy> weak_factory_;
62 
63   DISALLOW_COPY_AND_ASSIGN(FakeSignalStrategy);
64 };
65 
66 }  // namespace remoting
67 
68 #endif  // REMOTING_JINGLE_GLUE_FAKE_SIGNAL_STRATEGY_H_
69