Chromium Code Reviews| Index: remoting/jingle_glue/javascript_signal_strategy.cc |
| diff --git a/remoting/jingle_glue/javascript_signal_strategy.cc b/remoting/jingle_glue/javascript_signal_strategy.cc |
| index a26a385bc8fa1013ecf72b9f222b3758c49a5705..75f350df1f289bef080a543a2d463b87dc5a0c2d 100644 |
| --- a/remoting/jingle_glue/javascript_signal_strategy.cc |
| +++ b/remoting/jingle_glue/javascript_signal_strategy.cc |
| @@ -13,59 +13,55 @@ |
| namespace remoting { |
| -JavascriptSignalStrategy::JavascriptSignalStrategy(const std::string& your_jid) |
| - : your_jid_(your_jid), |
| +JavascriptSignalStrategy::JavascriptSignalStrategy(const std::string& local_jid) |
| + : local_jid_(local_jid), |
| last_id_(0) { |
| } |
| JavascriptSignalStrategy::~JavascriptSignalStrategy() { |
| - DCHECK(listeners_.empty()); |
| - Close(); |
| + DCHECK_EQ(listeners_.size(), 0U); |
| + Disconnect(); |
| } |
| void JavascriptSignalStrategy::AttachXmppProxy( |
| scoped_refptr<XmppProxy> xmpp_proxy) { |
| DCHECK(CalledOnValidThread()); |
| xmpp_proxy_ = xmpp_proxy; |
| - xmpp_proxy_->AttachCallback(AsWeakPtr()); |
| } |
| -void JavascriptSignalStrategy::Init(StatusObserver* observer) { |
| +void JavascriptSignalStrategy::Connect() { |
| DCHECK(CalledOnValidThread()); |
| - // Blast through each state since for a JavascriptSignalStrategy, we're |
| - // already connected. |
| - // |
| - // TODO(ajwong): Clarify the status API contract to see if we have to actually |
| - // walk through each state. |
| - observer->OnStateChange(StatusObserver::START); |
| - observer->OnStateChange(StatusObserver::CONNECTING); |
| - observer->OnJidChange(your_jid_); |
| - observer->OnStateChange(StatusObserver::CONNECTED); |
| + xmpp_proxy_->AttachCallback(AsWeakPtr()); |
| + FOR_EACH_OBSERVER(Listener, listeners_, |
| + OnSignalStrategyStateChange(CONNECTED)); |
| } |
| -void JavascriptSignalStrategy::Close() { |
| +void JavascriptSignalStrategy::Disconnect() { |
| DCHECK(CalledOnValidThread()); |
| - if (xmpp_proxy_) { |
| + if (xmpp_proxy_) |
| xmpp_proxy_->DetachCallback(); |
| - xmpp_proxy_ = NULL; |
| - } |
| + FOR_EACH_OBSERVER(Listener, listeners_, |
| + OnSignalStrategyStateChange(CLOSED)); |
| +} |
| + |
| +SignalStrategy::State JavascriptSignalStrategy::GetState() const { |
| + return CONNECTED; |
|
Wez
2011/12/21 23:35:30
Shouldn't this be based upon the state of |xmpp_pr
Sergey Ulanov
2011/12/22 21:45:10
Ideally yes, but XmppProxy doesn't provide any inf
|
| +} |
| + |
| +std::string JavascriptSignalStrategy::GetLocalJid() const { |
| + return local_jid_; |
| } |
| void JavascriptSignalStrategy::AddListener(Listener* listener) { |
| DCHECK(CalledOnValidThread()); |
| - DCHECK(std::find(listeners_.begin(), listeners_.end(), listener) == |
| - listeners_.end()); |
| - listeners_.push_back(listener); |
| + listeners_.AddObserver(listener); |
| } |
| void JavascriptSignalStrategy::RemoveListener(Listener* listener) { |
| DCHECK(CalledOnValidThread()); |
| - std::vector<Listener*>::iterator it = |
| - std::find(listeners_.begin(), listeners_.end(), listener); |
| - CHECK(it != listeners_.end()); |
| - listeners_.erase(it); |
| + listeners_.RemoveObserver(listener); |
| } |
| bool JavascriptSignalStrategy::SendStanza(buzz::XmlElement* stanza) { |
| @@ -89,9 +85,10 @@ void JavascriptSignalStrategy::OnIq(const std::string& stanza_str) { |
| return; |
| } |
| - for (std::vector<Listener*>::iterator it = listeners_.begin(); |
| - it != listeners_.end(); ++it) { |
| - if ((*it)->OnIncomingStanza(stanza.get())) |
| + ObserverListBase<Listener>::Iterator it(listeners_); |
| + Listener* listener; |
| + while ((listener = it.GetNext()) != NULL) { |
| + if (listener->OnSignalStrategyIncomingStanza(stanza.get())) |
| break; |
| } |
| } |