Chromium Code Reviews| 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 57% |
| rename from remoting/client/plugin/delegating_signal_strategy.cc |
| rename to remoting/signaling/delegating_signal_strategy.cc |
| index bc86f41b0d38faddf42816735e5312d80899d654..8a212a337c97d283a12101f4fe030c9d155f4eb6 100644 |
| --- a/remoting/client/plugin/delegating_signal_strategy.cc |
| +++ b/remoting/signaling/delegating_signal_strategy.cc |
| @@ -2,25 +2,38 @@ |
| // 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> delegate_task_runner, |
| + scoped_refptr<base::SingleThreadTaskRunner> client_task_runner, |
| const SendIqCallback& send_iq_callback) |
| : local_jid_(local_jid), |
| + delegate_task_runner_(delegate_task_runner), |
| + client_task_runner_(client_task_runner), |
| send_iq_callback_(send_iq_callback) { |
| } |
| -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, |
| + base::Unretained(this), message)); |
|
Sergey Ulanov
2016/10/05 21:49:07
base::Unretained() is not safe here.
Use a weak pt
kelvinp
2016/10/06 00:43:05
Done.
|
| + return; |
| + } |
| + |
| std::unique_ptr<buzz::XmlElement> stanza(buzz::XmlElement::ForStr(message)); |
| if (!stanza.get()) { |
| LOG(WARNING) << "Malformed XMPP stanza received: " << message; |
| @@ -36,34 +49,46 @@ void DelegatingSignalStrategy::OnIncomingMessage(const std::string& message) { |
| } |
| void DelegatingSignalStrategy::Connect() { |
| + CHECK(client_task_runner_->BelongsToCurrentThread()); |
|
Sergey Ulanov
2016/10/05 21:49:07
Here and below, please use DCHECK instead of CHECK
kelvinp
2016/10/06 00:43:05
Done.
|
| + FOR_EACH_OBSERVER( |
| + Listener, listeners_, OnSignalStrategyStateChange(CONNECTED)); |
| } |
| void DelegatingSignalStrategy::Disconnect() { |
| + CHECK(client_task_runner_->BelongsToCurrentThread()); |
| } |
| SignalStrategy::State DelegatingSignalStrategy::GetState() const { |
| + CHECK(client_task_runner_->BelongsToCurrentThread()); |
| return CONNECTED; |
| } |
| SignalStrategy::Error DelegatingSignalStrategy::GetError() const { |
| + CHECK(client_task_runner_->BelongsToCurrentThread()); |
| return OK; |
| } |
| std::string DelegatingSignalStrategy::GetLocalJid() const { |
| + CHECK(client_task_runner_->BelongsToCurrentThread()); |
| return local_jid_; |
| } |
| void DelegatingSignalStrategy::AddListener(Listener* listener) { |
| + CHECK(client_task_runner_->BelongsToCurrentThread()); |
| listeners_.AddObserver(listener); |
| } |
| void DelegatingSignalStrategy::RemoveListener(Listener* listener) { |
| + CHECK(client_task_runner_->BelongsToCurrentThread()); |
| listeners_.RemoveObserver(listener); |
| } |
| bool DelegatingSignalStrategy::SendStanza( |
| std::unique_ptr<buzz::XmlElement> stanza) { |
| - send_iq_callback_.Run(stanza->Str()); |
| + CHECK(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; |
| } |