OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/signaling/fake_signal_strategy.h" | 5 #include "remoting/signaling/fake_signal_strategy.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 base::Unretained(peer), | 56 base::Unretained(peer), |
57 peer_callback)); | 57 peer_callback)); |
58 } | 58 } |
59 } | 59 } |
60 | 60 |
61 void FakeSignalStrategy::SetLocalJid(const std::string& jid) { | 61 void FakeSignalStrategy::SetLocalJid(const std::string& jid) { |
62 DCHECK(CalledOnValidThread()); | 62 DCHECK(CalledOnValidThread()); |
63 jid_ = jid; | 63 jid_ = jid; |
64 } | 64 } |
65 | 65 |
| 66 void FakeSignalStrategy::SimulatePackgeReordering() { |
| 67 DCHECK(CalledOnValidThread()); |
| 68 simulate_reorder_ = true; |
| 69 } |
| 70 |
66 void FakeSignalStrategy::Connect() { | 71 void FakeSignalStrategy::Connect() { |
67 DCHECK(CalledOnValidThread()); | 72 DCHECK(CalledOnValidThread()); |
68 for (auto& observer : listeners_) | 73 for (auto& observer : listeners_) |
69 observer.OnSignalStrategyStateChange(CONNECTED); | 74 observer.OnSignalStrategyStateChange(CONNECTED); |
70 } | 75 } |
71 | 76 |
72 void FakeSignalStrategy::Disconnect() { | 77 void FakeSignalStrategy::Disconnect() { |
73 DCHECK(CalledOnValidThread()); | 78 DCHECK(CalledOnValidThread()); |
74 for (auto& observer : listeners_) | 79 for (auto& observer : listeners_) |
75 observer.OnSignalStrategyStateChange(DISCONNECTED); | 80 observer.OnSignalStrategyStateChange(DISCONNECTED); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 std::unique_ptr<buzz::XmlElement> stanza) { | 133 std::unique_ptr<buzz::XmlElement> stanza) { |
129 thread->PostTask(FROM_HERE, | 134 thread->PostTask(FROM_HERE, |
130 base::Bind(&FakeSignalStrategy::OnIncomingMessage, | 135 base::Bind(&FakeSignalStrategy::OnIncomingMessage, |
131 target, base::Passed(&stanza))); | 136 target, base::Passed(&stanza))); |
132 } | 137 } |
133 | 138 |
134 void FakeSignalStrategy::OnIncomingMessage( | 139 void FakeSignalStrategy::OnIncomingMessage( |
135 std::unique_ptr<buzz::XmlElement> stanza) { | 140 std::unique_ptr<buzz::XmlElement> stanza) { |
136 DCHECK(CalledOnValidThread()); | 141 DCHECK(CalledOnValidThread()); |
137 | 142 |
| 143 if (!simulate_reorder_) { |
| 144 NotifyListeners(std::move(stanza)); |
| 145 return; |
| 146 } |
| 147 |
| 148 // Simulate IQ messages re-ordering by swapping the delivery order of |
| 149 // next pair of messages. |
| 150 if (pending_stanza_) { |
| 151 NotifyListeners(std::move(stanza)); |
| 152 NotifyListeners(std::move(pending_stanza_)); |
| 153 pending_stanza_.reset(); |
| 154 } else { |
| 155 pending_stanza_ = std::move(stanza); |
| 156 } |
| 157 } |
| 158 |
| 159 void FakeSignalStrategy::NotifyListeners( |
| 160 std::unique_ptr<buzz::XmlElement> stanza) { |
| 161 DCHECK(CalledOnValidThread()); |
| 162 |
138 buzz::XmlElement* stanza_ptr = stanza.get(); | 163 buzz::XmlElement* stanza_ptr = stanza.get(); |
139 received_messages_.push_back(stanza.release()); | 164 received_messages_.push_back(stanza.release()); |
140 | 165 |
141 const std::string& to_field = stanza_ptr->Attr(buzz::QN_TO); | 166 const std::string& to_field = stanza_ptr->Attr(buzz::QN_TO); |
142 if (to_field != jid_) { | 167 if (to_field != jid_) { |
143 LOG(WARNING) << "Dropping stanza that is addressed to " << to_field | 168 LOG(WARNING) << "Dropping stanza that is addressed to " << to_field |
144 << ". Local jid: " << jid_ | 169 << ". Local jid: " << jid_ |
145 << ". Message content: " << stanza_ptr->Str(); | 170 << ". Message content: " << stanza_ptr->Str(); |
146 return; | 171 return; |
147 } | 172 } |
148 | 173 |
149 for (auto& listener : listeners_) { | 174 for (auto& listener : listeners_) { |
150 if (listener.OnSignalStrategyIncomingStanza(stanza_ptr)) | 175 if (listener.OnSignalStrategyIncomingStanza(stanza_ptr)) |
151 break; | 176 break; |
152 } | 177 } |
153 } | 178 } |
154 | 179 |
155 void FakeSignalStrategy::SetPeerCallback(const PeerCallback& peer_callback) { | 180 void FakeSignalStrategy::SetPeerCallback(const PeerCallback& peer_callback) { |
156 peer_callback_ = peer_callback; | 181 peer_callback_ = peer_callback; |
157 } | 182 } |
158 | 183 |
159 } // namespace remoting | 184 } // namespace remoting |
OLD | NEW |