blob: fda54c2b4ec24bfe2d27323a231c773b36a8798a [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <memory>
#include <string>
#include "base/callback.h"
#include "base/macros.h"
#include "base/threading/thread_checker.h"
#include "remoting/host/backoff_timer.h"
#include "remoting/host/gcd_rest_client.h"
#include "remoting/signaling/signal_strategy.h"
namespace base {
class TimeDelta;
} // namespace base
namespace buzz {
class XmlElement;
} // namespace buzz
namespace remoting {
// An object that uses GcdRestClient to send status updates to GCD
// when the XMPP connection state changes.
class GcdStateUpdater : public SignalStrategy::Listener {
// |signal_strategy| must outlive this object. Updates will start
// when the supplied SignalStrategy enters the CONNECTED state.
// |on_update_successful_callback| is invoked after the first successful
// update.
GcdStateUpdater(const base::Closure& on_update_successful_callback,
const base::Closure& on_unknown_host_id_error,
SignalStrategy* signal_strategy,
std::unique_ptr<GcdRestClient> gcd_client);
~GcdStateUpdater() override;
// See HeartbeatSender::SetHostOfflineReason.
void SetHostOfflineReason(
const std::string& host_offline_reason,
const base::TimeDelta& timeout,
const base::Callback<void(bool success)>& ack_callback);
// SignalStrategy::Listener interface.
void OnSignalStrategyStateChange(SignalStrategy::State state) override;
bool OnSignalStrategyIncomingStanza(const buzz::XmlElement* stanza) override;
void OnPatchStateResult(GcdRestClient::Result result);
void MaybeSendStateUpdate();
base::Closure on_update_successful_callback_;
base::Closure on_unknown_host_id_error_;
SignalStrategy* signal_strategy_;
std::unique_ptr<GcdRestClient> gcd_rest_client_;
BackoffTimer timer_;
base::ThreadChecker thread_checker_;
std::string pending_request_jid_;
} // namespace remoting