• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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_SIGNALING_FAKE_SIGNAL_STRATEGY_H_
6 #define REMOTING_SIGNALING_FAKE_SIGNAL_STRATEGY_H_
7 
8 #include <list>
9 #include <queue>
10 #include <string>
11 
12 #include "base/memory/weak_ptr.h"
13 #include "base/observer_list.h"
14 #include "base/threading/non_thread_safe.h"
15 #include "remoting/signaling/iq_sender.h"
16 #include "remoting/signaling/signal_strategy.h"
17 
18 namespace base {
19 class SingleThreadTaskRunner;
20 }  // namespace base
21 
22 namespace remoting {
23 
24 class FakeSignalStrategy : public SignalStrategy,
25                            public base::NonThreadSafe {
26  public:
27   // Calls ConenctTo() to connect |peer1| and |peer2|. Both |peer1| and |peer2|
28   // must belong to the current thread.
29   static void Connect(FakeSignalStrategy* peer1, FakeSignalStrategy* peer2);
30 
31   FakeSignalStrategy(const std::string& jid);
32   virtual ~FakeSignalStrategy();
33 
received_messages()34   const std::list<buzz::XmlElement*>& received_messages() {
35     return received_messages_;
36   }
37 
38   // Connects current FakeSignalStrategy to receive messages from |peer|.
39   void ConnectTo(FakeSignalStrategy* peer);
40 
41   // SignalStrategy interface.
42   virtual void Connect() OVERRIDE;
43   virtual void Disconnect() OVERRIDE;
44   virtual State GetState() const OVERRIDE;
45   virtual Error GetError() const OVERRIDE;
46   virtual std::string GetLocalJid() const OVERRIDE;
47   virtual void AddListener(Listener* listener) OVERRIDE;
48   virtual void RemoveListener(Listener* listener) OVERRIDE;
49   virtual bool SendStanza(scoped_ptr<buzz::XmlElement> stanza) OVERRIDE;
50   virtual std::string GetNextId() OVERRIDE;
51 
52  private:
53   typedef base::Callback<void(scoped_ptr<buzz::XmlElement> message)>
54       PeerCallback;
55 
56   static void DeliverMessageOnThread(
57       scoped_refptr<base::SingleThreadTaskRunner> thread,
58       base::WeakPtr<FakeSignalStrategy> target,
59       scoped_ptr<buzz::XmlElement> stanza);
60 
61   // Called by the |peer_|. Takes ownership of |stanza|.
62   void OnIncomingMessage(scoped_ptr<buzz::XmlElement> stanza);
63   void SetPeerCallback(const PeerCallback& peer_callback);
64 
65   scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
66 
67   std::string jid_;
68   PeerCallback peer_callback_;
69   ObserverList<Listener, true> listeners_;
70 
71   int last_id_;
72 
73   // All received messages, includes thouse still in |pending_messages_|.
74   std::list<buzz::XmlElement*> received_messages_;
75 
76   base::WeakPtrFactory<FakeSignalStrategy> weak_factory_;
77 
78   DISALLOW_COPY_AND_ASSIGN(FakeSignalStrategy);
79 };
80 
81 }  // namespace remoting
82 
83 #endif  // REMOTING_SIGNALING_FAKE_SIGNAL_STRATEGY_H_
84