Index: remoting/jingle_glue/fake_signal_strategy.cc |
diff --git a/remoting/jingle_glue/fake_signal_strategy.cc b/remoting/jingle_glue/fake_signal_strategy.cc |
index 0f7fb77cbd443f6da4e254072d3ecb9c38714f49..7c219a79372bf7a230a50007af43abaf574c55e7 100644 |
--- a/remoting/jingle_glue/fake_signal_strategy.cc |
+++ b/remoting/jingle_glue/fake_signal_strategy.cc |
@@ -24,7 +24,6 @@ void FakeSignalStrategy::Connect(FakeSignalStrategy* peer1, |
FakeSignalStrategy::FakeSignalStrategy(const std::string& jid) |
: jid_(jid), |
peer_(NULL), |
- listener_(NULL), |
last_id_(0), |
ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) { |
@@ -35,6 +34,7 @@ FakeSignalStrategy::~FakeSignalStrategy() { |
delete pending_messages_.front(); |
pending_messages_.pop(); |
} |
+ DCHECK(listeners_.empty()); |
} |
void FakeSignalStrategy::Init(StatusObserver* observer) { |
@@ -46,27 +46,34 @@ void FakeSignalStrategy::Init(StatusObserver* observer) { |
void FakeSignalStrategy::Close() { |
DCHECK(CalledOnValidThread()); |
- listener_ = NULL; |
} |
-void FakeSignalStrategy::SetListener(Listener* listener) { |
+void FakeSignalStrategy::AddListener(Listener* listener) { |
DCHECK(CalledOnValidThread()); |
+ DCHECK(std::find(listeners_.begin(), listeners_.end(), listener) == |
+ listeners_.end()); |
+ listeners_.push_back(listener); |
+} |
- // Don't overwrite an listener without explicitly going |
- // through "NULL" first. |
- DCHECK(listener_ == NULL || listener == NULL); |
- listener_ = listener; |
+void FakeSignalStrategy::RemoveListener(Listener* listener) { |
+ DCHECK(CalledOnValidThread()); |
+ std::vector<Listener*>::iterator it = |
+ std::find(listeners_.begin(), listeners_.end(), listener); |
+ CHECK(it != listeners_.end()); |
+ listeners_.erase(it); |
} |
-void FakeSignalStrategy::SendStanza(buzz::XmlElement* stanza) { |
+bool FakeSignalStrategy::SendStanza(buzz::XmlElement* stanza) { |
DCHECK(CalledOnValidThread()); |
stanza->SetAttr(buzz::QN_FROM, jid_); |
if (peer_) { |
peer_->OnIncomingMessage(stanza); |
+ return true; |
} else { |
delete stanza; |
+ return false; |
} |
} |
@@ -75,12 +82,6 @@ std::string FakeSignalStrategy::GetNextId() { |
return base::IntToString(last_id_); |
} |
-IqRequest* FakeSignalStrategy::CreateIqRequest() { |
- DCHECK(CalledOnValidThread()); |
- |
- return new IqRequest(this, &iq_registry_); |
-} |
- |
void FakeSignalStrategy::OnIncomingMessage(buzz::XmlElement* stanza) { |
pending_messages_.push(stanza); |
MessageLoop::current()->PostTask( |
@@ -99,9 +100,11 @@ void FakeSignalStrategy::DeliverIncomingMessages() { |
return; |
} |
- if (listener_) |
- listener_->OnIncomingStanza(stanza); |
- iq_registry_.OnIncomingStanza(stanza); |
+ for (std::vector<Listener*>::iterator it = listeners_.begin(); |
+ it != listeners_.end(); ++it) { |
+ if ((*it)->OnIncomingStanza(stanza)) |
+ break; |
+ } |
pending_messages_.pop(); |
delete stanza; |