Chromium Code Reviews| Index: remoting/signaling/fake_signal_strategy.cc |
| diff --git a/remoting/signaling/fake_signal_strategy.cc b/remoting/signaling/fake_signal_strategy.cc |
| index 12cd2c12ffdd78aca62cadee1bc5d760894983d5..2a5df524eeaa8d4b92923a059ba795a2d4e23fba 100644 |
| --- a/remoting/signaling/fake_signal_strategy.cc |
| +++ b/remoting/signaling/fake_signal_strategy.cc |
| @@ -63,6 +63,11 @@ void FakeSignalStrategy::SetLocalJid(const std::string& jid) { |
| jid_ = jid; |
| } |
| +void FakeSignalStrategy::SimulatePackgeReordering() { |
| + DCHECK(CalledOnValidThread()); |
| + simulate_reorder_ = true; |
| +} |
| + |
| void FakeSignalStrategy::Connect() { |
| DCHECK(CalledOnValidThread()); |
| FOR_EACH_OBSERVER(Listener, listeners_, |
| @@ -135,6 +140,35 @@ void FakeSignalStrategy::OnIncomingMessage( |
| std::unique_ptr<buzz::XmlElement> stanza) { |
| DCHECK(CalledOnValidThread()); |
| + if (!simulate_reorder_) { |
| + NotifyListeners(std::move(stanza)); |
| + return; |
| + } |
| + |
| + // Simulate IQ messages re-ordering by swapping the delivery order of |
| + // transport-info messages. |
| + const buzz::XmlElement* jingle = |
| + stanza->FirstNamed(buzz::QName("urn:xmpp:jingle:1", "jingle")); |
| + std::string action = jingle->Attr(buzz::QName("", "action")); |
| + |
| + if (action != "transport-info") { |
|
Sergey Ulanov
2016/10/21 19:19:39
Updated the test to reorder messages only after ha
kelvinp
2016/10/21 22:41:27
Done.
|
| + NotifyListeners(std::move(stanza)); |
| + return; |
| + } |
| + |
| + if (pending_transport_info_) { |
| + NotifyListeners(std::move(stanza)); |
| + NotifyListeners(std::move(pending_transport_info_)); |
| + pending_transport_info_.reset(); |
| + } else { |
| + pending_transport_info_ = std::move(stanza); |
| + } |
| +} |
| + |
| +void FakeSignalStrategy::NotifyListeners( |
| + std::unique_ptr<buzz::XmlElement> stanza) { |
| + DCHECK(CalledOnValidThread()); |
| + |
| buzz::XmlElement* stanza_ptr = stanza.get(); |
| received_messages_.push_back(stanza.release()); |