Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(407)

Side by Side Diff: remoting/jingle_glue/javascript_signal_strategy.cc

Issue 8432009: Refactor IqRequest. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/jingle_glue/javascript_signal_strategy.h" 5 #include "remoting/jingle_glue/javascript_signal_strategy.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
11 #include "remoting/jingle_glue/iq_request.h"
12 #include "remoting/jingle_glue/xmpp_proxy.h" 11 #include "remoting/jingle_glue/xmpp_proxy.h"
13 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h" 12 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h"
14 13
15 namespace remoting { 14 namespace remoting {
16 15
17 JavascriptSignalStrategy::JavascriptSignalStrategy(const std::string& your_jid) 16 JavascriptSignalStrategy::JavascriptSignalStrategy(const std::string& your_jid)
18 : your_jid_(your_jid), 17 : your_jid_(your_jid),
19 listener_(NULL),
20 last_id_(0) { 18 last_id_(0) {
21 } 19 }
22 20
23 JavascriptSignalStrategy::~JavascriptSignalStrategy() { 21 JavascriptSignalStrategy::~JavascriptSignalStrategy() {
24 DCHECK(listener_ == NULL); 22 DCHECK(listeners_.empty());
25 Close(); 23 Close();
26 } 24 }
27 25
28 void JavascriptSignalStrategy::AttachXmppProxy( 26 void JavascriptSignalStrategy::AttachXmppProxy(
29 scoped_refptr<XmppProxy> xmpp_proxy) { 27 scoped_refptr<XmppProxy> xmpp_proxy) {
28 DCHECK(CalledOnValidThread());
30 xmpp_proxy_ = xmpp_proxy; 29 xmpp_proxy_ = xmpp_proxy;
31 xmpp_proxy_->AttachCallback(AsWeakPtr()); 30 xmpp_proxy_->AttachCallback(AsWeakPtr());
32 } 31 }
33 32
34 void JavascriptSignalStrategy::Init(StatusObserver* observer) { 33 void JavascriptSignalStrategy::Init(StatusObserver* observer) {
35 DCHECK(CalledOnValidThread()); 34 DCHECK(CalledOnValidThread());
36 35
37 // Blast through each state since for a JavascriptSignalStrategy, we're 36 // Blast through each state since for a JavascriptSignalStrategy, we're
38 // already connected. 37 // already connected.
39 // 38 //
40 // TODO(ajwong): Clarify the status API contract to see if we have to actually 39 // TODO(ajwong): Clarify the status API contract to see if we have to actually
41 // walk through each state. 40 // walk through each state.
42 observer->OnStateChange(StatusObserver::START); 41 observer->OnStateChange(StatusObserver::START);
43 observer->OnStateChange(StatusObserver::CONNECTING); 42 observer->OnStateChange(StatusObserver::CONNECTING);
44 observer->OnJidChange(your_jid_); 43 observer->OnJidChange(your_jid_);
45 observer->OnStateChange(StatusObserver::CONNECTED); 44 observer->OnStateChange(StatusObserver::CONNECTED);
46 } 45 }
47 46
48 void JavascriptSignalStrategy::Close() { 47 void JavascriptSignalStrategy::Close() {
49 DCHECK(CalledOnValidThread()); 48 DCHECK(CalledOnValidThread());
50 49
51 if (xmpp_proxy_) { 50 if (xmpp_proxy_) {
52 xmpp_proxy_->DetachCallback(); 51 xmpp_proxy_->DetachCallback();
53 xmpp_proxy_ = NULL; 52 xmpp_proxy_ = NULL;
54 } 53 }
55 } 54 }
56 55
57 void JavascriptSignalStrategy::SetListener(Listener* listener) { 56 void JavascriptSignalStrategy::AddListener(Listener* listener) {
58 DCHECK(CalledOnValidThread()); 57 DCHECK(CalledOnValidThread());
59 58 DCHECK(std::find(listeners_.begin(), listeners_.end(), listener) ==
60 // Don't overwrite an listener without explicitly going 59 listeners_.end());
61 // through "NULL" first. 60 listeners_.push_back(listener);
62 DCHECK(listener_ == NULL || listener == NULL);
63 listener_ = listener;
64 } 61 }
65 62
66 void JavascriptSignalStrategy::SendStanza(buzz::XmlElement* stanza) { 63 void JavascriptSignalStrategy::RemoveListener(Listener* listener) {
67 DCHECK(CalledOnValidThread()); 64 DCHECK(CalledOnValidThread());
65 std::vector<Listener*>::iterator it =
66 std::find(listeners_.begin(), listeners_.end(), listener);
67 CHECK(it != listeners_.end());
68 listeners_.erase(it);
69 }
68 70
71 bool JavascriptSignalStrategy::SendStanza(buzz::XmlElement* stanza) {
72 DCHECK(CalledOnValidThread());
69 xmpp_proxy_->SendIq(stanza->Str()); 73 xmpp_proxy_->SendIq(stanza->Str());
70 delete stanza; 74 delete stanza;
75 return true;
71 } 76 }
72 77
73 std::string JavascriptSignalStrategy::GetNextId() { 78 std::string JavascriptSignalStrategy::GetNextId() {
79 DCHECK(CalledOnValidThread());
74 ++last_id_; 80 ++last_id_;
75 return base::IntToString(last_id_); 81 return base::IntToString(last_id_);
76 } 82 }
77 83
78 IqRequest* JavascriptSignalStrategy::CreateIqRequest() { 84 void JavascriptSignalStrategy::OnIq(const std::string& stanza_str) {
79 DCHECK(CalledOnValidThread()); 85 DCHECK(CalledOnValidThread());
80
81 return new IqRequest(this, &iq_registry_);
82 }
83
84 void JavascriptSignalStrategy::OnIq(const std::string& stanza_str) {
85 scoped_ptr<buzz::XmlElement> stanza(buzz::XmlElement::ForStr(stanza_str)); 86 scoped_ptr<buzz::XmlElement> stanza(buzz::XmlElement::ForStr(stanza_str));
86
87 if (!stanza.get()) { 87 if (!stanza.get()) {
88 LOG(WARNING) << "Malformed XMPP stanza received: " << stanza_str; 88 LOG(WARNING) << "Malformed XMPP stanza received: " << stanza_str;
89 return; 89 return;
90 } 90 }
91 91
92 if (listener_ && listener_->OnIncomingStanza(stanza.get())) 92 for (std::vector<Listener*>::iterator it = listeners_.begin();
93 return; 93 it != listeners_.end(); ++it) {
94 94 if ((*it)->OnIncomingStanza(stanza.get()))
95 iq_registry_.OnIncomingStanza(stanza.get()); 95 break;
96 }
96 } 97 }
97 98
98 } // namespace remoting 99 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698