// 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. #ifndef REMOTING_HOST_GCD_STATE_UPDATER_H_ #define REMOTING_HOST_GCD_STATE_UPDATER_H_ #include #include "base/callback.h" #include "base/macros.h" #include "base/memory/scoped_ptr.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 { public: // |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, scoped_ptr gcd_client); ~GcdStateUpdater() override; // See HeartbeatSender::SetHostOfflineReason. void SetHostOfflineReason( const std::string& host_offline_reason, const base::TimeDelta& timeout, const base::Callback& ack_callback); private: // 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_; scoped_ptr gcd_rest_client_; BackoffTimer timer_; base::ThreadChecker thread_checker_; std::string pending_request_jid_; DISALLOW_COPY_AND_ASSIGN(GcdStateUpdater); }; } // namespace remoting #endif // REMOTING_HOST_GCD_STATE_UPDATER_H_