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

Unified Diff: remoting/host/register_support_host_request.cc

Issue 9004050: Move signaling connection creation out of ChromotingHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 8 years, 12 months 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 side-by-side diff with in-line comments
Download patch
Index: remoting/host/register_support_host_request.cc
diff --git a/remoting/host/register_support_host_request.cc b/remoting/host/register_support_host_request.cc
index 5668f278d793c88711a7b6107aa3e736be191cd0..b24b903186534dce87653323a5b765c646232700 100644
--- a/remoting/host/register_support_host_request.cc
+++ b/remoting/host/register_support_host_request.cc
@@ -36,58 +36,49 @@ const char kSupportIdLifetimeTag[] = "support-id-lifetime";
}
RegisterSupportHostRequest::RegisterSupportHostRequest()
- : message_loop_(NULL) {
+ : signal_strategy_(NULL) {
}
RegisterSupportHostRequest::~RegisterSupportHostRequest() {
+ if (signal_strategy_)
+ signal_strategy_->RemoveListener(this);
}
-bool RegisterSupportHostRequest::Init(HostConfig* config,
+bool RegisterSupportHostRequest::Init(SignalStrategy* signal_strategy,
+ HostConfig* config,
const RegisterCallback& callback) {
- callback_ = callback;
-
if (!key_pair_.Load(config)) {
return false;
}
- return true;
-}
-void RegisterSupportHostRequest::OnSignallingConnected(
- SignalStrategy* signal_strategy) {
- DCHECK(!callback_.is_null());
-
- message_loop_ = MessageLoop::current();
+ callback_ = callback;
+ signal_strategy_ = signal_strategy;
+ signal_strategy_->AddListener(this);
+ iq_sender_.reset(new IqSender(signal_strategy_));
- iq_sender_.reset(new IqSender(signal_strategy));
- request_.reset(iq_sender_->SendIq(
- buzz::STR_SET, kChromotingBotJid,
- CreateRegistrationRequest(signal_strategy->GetLocalJid()),
- base::Bind(&RegisterSupportHostRequest::ProcessResponse,
- base::Unretained(this))));
+ return true;
}
-void RegisterSupportHostRequest::OnSignallingDisconnected() {
- if (!message_loop_) {
- // We will reach here with |message_loop_| NULL if the Host's
- // XMPP connection attempt fails.
- CHECK(!callback_.is_null());
- DCHECK(!request_.get());
- callback_.Run(false, std::string(), base::TimeDelta());
- return;
+void RegisterSupportHostRequest::OnSignalStrategyStateChange(
+ SignalStrategy::State state) {
+ if (state == SignalStrategy::CONNECTED) {
+ DCHECK(!callback_.is_null());
+
+ request_.reset(iq_sender_->SendIq(
+ buzz::STR_SET, kChromotingBotJid,
+ CreateRegistrationRequest(signal_strategy_->GetLocalJid()),
+ base::Bind(&RegisterSupportHostRequest::ProcessResponse,
+ base::Unretained(this))));
+ } else if (state == SignalStrategy::DISCONNECTED) {
+ // We will reach here if signaling fails to connect.
+ CallCallback(false, std::string(), base::TimeDelta());
}
- DCHECK_EQ(message_loop_, MessageLoop::current());
- request_.reset();
- iq_sender_.reset();
}
-// Ignore any notifications other than signalling
-// connected/disconnected events.
-void RegisterSupportHostRequest::OnAccessDenied() { }
-void RegisterSupportHostRequest::OnClientAuthenticated(
- const std::string& jid) { }
-void RegisterSupportHostRequest::OnClientDisconnected(
- const std::string& jid) { }
-void RegisterSupportHostRequest::OnShutdown() { }
+bool RegisterSupportHostRequest::OnSignalStrategyIncomingStanza(
+ const buzz::XmlElement* stanza) {
+ return false;
+}
XmlElement* RegisterSupportHostRequest::CreateRegistrationRequest(
const std::string& jid) {
@@ -176,13 +167,24 @@ bool RegisterSupportHostRequest::ParseResponse(const XmlElement* response,
return true;
}
-
void RegisterSupportHostRequest::ProcessResponse(const XmlElement* response) {
- DCHECK_EQ(message_loop_, MessageLoop::current());
std::string support_id;
base::TimeDelta lifetime;
bool success = ParseResponse(response, &support_id, &lifetime);
- callback_.Run(success, support_id, lifetime);
+ CallCallback(success, support_id, lifetime);
+}
+
+void RegisterSupportHostRequest::CallCallback(
+ bool success, const std::string& support_id, base::TimeDelta lifetime) {
+ // Cleanup state before calling the callback.
+ request_.reset();
+ iq_sender_.reset();
+ signal_strategy_->RemoveListener(this);
+ signal_strategy_ = NULL;
+
+ RegisterCallback callback = callback_;
+ callback_.Reset();
+ callback.Run(success, support_id, lifetime);
}
} // namespace remoting
« no previous file with comments | « remoting/host/register_support_host_request.h ('k') | remoting/host/register_support_host_request_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698