Index: remoting/signaling/delegating_signal_strategy.cc |
diff --git a/remoting/client/plugin/delegating_signal_strategy.cc b/remoting/signaling/delegating_signal_strategy.cc |
similarity index 55% |
rename from remoting/client/plugin/delegating_signal_strategy.cc |
rename to remoting/signaling/delegating_signal_strategy.cc |
index bc86f41b0d38faddf42816735e5312d80899d654..e329a2047df589480932740d32bee2b02dbd8c9a 100644 |
--- a/remoting/client/plugin/delegating_signal_strategy.cc |
+++ b/remoting/signaling/delegating_signal_strategy.cc |
@@ -2,25 +2,36 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "remoting/client/plugin/delegating_signal_strategy.h" |
+#include "remoting/signaling/delegating_signal_strategy.h" |
+#include "base/bind.h" |
#include "base/rand_util.h" |
#include "base/strings/string_number_conversions.h" |
#include "third_party/webrtc/libjingle/xmllite/xmlelement.h" |
+#include "third_party/webrtc/libjingle/xmpp/constants.h" |
namespace remoting { |
DelegatingSignalStrategy::DelegatingSignalStrategy( |
std::string local_jid, |
+ scoped_refptr<base::SingleThreadTaskRunner> client_task_runner, |
const SendIqCallback& send_iq_callback) |
: local_jid_(local_jid), |
- send_iq_callback_(send_iq_callback) { |
-} |
+ delegate_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
+ client_task_runner_(client_task_runner), |
+ send_iq_callback_(send_iq_callback), |
+ weak_factory_(this) {} |
-DelegatingSignalStrategy::~DelegatingSignalStrategy() { |
-} |
+DelegatingSignalStrategy::~DelegatingSignalStrategy() {} |
void DelegatingSignalStrategy::OnIncomingMessage(const std::string& message) { |
+ if (!client_task_runner_->BelongsToCurrentThread()) { |
+ client_task_runner_->PostTask( |
+ FROM_HERE, base::Bind(&DelegatingSignalStrategy::OnIncomingMessage, |
+ weak_factory_.GetWeakPtr(), message)); |
+ return; |
+ } |
+ |
std::unique_ptr<buzz::XmlElement> stanza(buzz::XmlElement::ForStr(message)); |
if (!stanza.get()) { |
LOG(WARNING) << "Malformed XMPP stanza received: " << message; |
@@ -36,34 +47,46 @@ void DelegatingSignalStrategy::OnIncomingMessage(const std::string& message) { |
} |
void DelegatingSignalStrategy::Connect() { |
+ DCHECK(client_task_runner_->BelongsToCurrentThread()); |
+ FOR_EACH_OBSERVER(Listener, listeners_, |
+ OnSignalStrategyStateChange(CONNECTED)); |
} |
void DelegatingSignalStrategy::Disconnect() { |
+ DCHECK(client_task_runner_->BelongsToCurrentThread()); |
} |
SignalStrategy::State DelegatingSignalStrategy::GetState() const { |
+ DCHECK(client_task_runner_->BelongsToCurrentThread()); |
return CONNECTED; |
} |
SignalStrategy::Error DelegatingSignalStrategy::GetError() const { |
+ DCHECK(client_task_runner_->BelongsToCurrentThread()); |
return OK; |
} |
std::string DelegatingSignalStrategy::GetLocalJid() const { |
+ DCHECK(client_task_runner_->BelongsToCurrentThread()); |
return local_jid_; |
} |
void DelegatingSignalStrategy::AddListener(Listener* listener) { |
+ DCHECK(client_task_runner_->BelongsToCurrentThread()); |
listeners_.AddObserver(listener); |
} |
void DelegatingSignalStrategy::RemoveListener(Listener* listener) { |
+ DCHECK(client_task_runner_->BelongsToCurrentThread()); |
listeners_.RemoveObserver(listener); |
} |
bool DelegatingSignalStrategy::SendStanza( |
std::unique_ptr<buzz::XmlElement> stanza) { |
- send_iq_callback_.Run(stanza->Str()); |
+ DCHECK(client_task_runner_->BelongsToCurrentThread()); |
+ stanza->SetAttr(buzz::QN_FROM, GetLocalJid()); |
+ delegate_task_runner_->PostTask(FROM_HERE, |
+ base::Bind(send_iq_callback_, stanza->Str())); |
return true; |
} |