| Index: remoting/host/minimum_heartbeat_supporter.h
|
| diff --git a/remoting/host/minimum_heartbeat_supporter.h b/remoting/host/minimum_heartbeat_supporter.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..99cb241de7fc10ab8b0136d38eacc4fd0bcbe3bb
|
| --- /dev/null
|
| +++ b/remoting/host/minimum_heartbeat_supporter.h
|
| @@ -0,0 +1,113 @@
|
| +// Copyright 2014 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_MINIMUM_HEARTBEAT_SUPPORTER_H_
|
| +#define REMOTING_HOST_MINIMUM_HEARTBEAT_SUPPORTER_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/time/time.h"
|
| +#include "remoting/base/auto_thread_task_runner.h"
|
| +#include "remoting/base/rsa_key_pair.h"
|
| +#include "remoting/host/ack_or_timeout_reporter.h"
|
| +#include "remoting/signaling/xmpp_signal_strategy.h"
|
| +
|
| +namespace base {
|
| + class TimeDelta;
|
| +}
|
| +
|
| +namespace net {
|
| + class NetworkChangeNotifier;
|
| +}
|
| +
|
| +namespace remoting {
|
| +
|
| +class ChromotingHostContext;
|
| +class DnsBlackholeChecker;
|
| +class HeartbeatSender;
|
| +class OAuthTokenGetter;
|
| +class SignalStrategy;
|
| +class SignalingConnector;
|
| +
|
| +// Keeping an instance of MinimumHeartbeatSupporter alive
|
| +// ensures that we keep trying to send heartbeats (which among other
|
| +// things means that it ensures that we don't exit the host process).
|
| +//
|
| +// Primary scenario where this class is useful is extending host process
|
| +// lifetime after |SendHostOfflineReason| is called.
|
| +//
|
| +// Secondary benefit of this class is hiding/encapsulating heartbeat
|
| +// and xmpp related things inside.
|
| +class MinimumHeartbeatSupporter
|
| + : public base::RefCounted<MinimumHeartbeatSupporter> {
|
| + public:
|
| + // TODO(lukasza): Refactor to limit the number of parameters below.
|
| + // Probably necessitates refactoring HostProcess to extract a new
|
| + // class to read and store config/policy/cmdline values.
|
| + static scoped_refptr<MinimumHeartbeatSupporter> Create(
|
| + const base::Closure& on_heartbeat_successful_callback,
|
| + const base::Closure& on_unknown_host_id_error_callback,
|
| + const base::Closure& on_auth_failed_callback,
|
| + const ChromotingHostContext& host_context,
|
| + const XmppSignalStrategy::XmppServerConfig& xmpp_server_config,
|
| + const std::string& talkgadget_prefix,
|
| + const std::string& host_id,
|
| + const scoped_refptr<const RsaKeyPair>& key_pair,
|
| + const std::string& directory_bot_jid,
|
| + const std::string& oauth_refresh_token,
|
| + bool use_service_account);
|
| +
|
| + // Gets signal strategy used for talking to the Chromoting bot.
|
| + // Return value is valid until |this| gets deleted.
|
| + SignalStrategy* signal_strategy() {
|
| + return signal_strategy_.get();
|
| + }
|
| +
|
| +
|
| + // Kicks off sending a heartbeat containing a host-offline-reason attribute.
|
| + //
|
| + // Ensures that |this| (and transitively the whole process) is kept alive
|
| + // while waiting for an ack from the bot (this is subject to |timeout|).
|
| + void SendHostOfflineReason(
|
| + const std::string& host_offline_reason,
|
| + const base::TimeDelta& timeout);
|
| +
|
| + private:
|
| + // Ref-counting helpers.
|
| + friend class base::RefCounted<MinimumHeartbeatSupporter>;
|
| + ~MinimumHeartbeatSupporter();
|
| +
|
| + MinimumHeartbeatSupporter(
|
| + scoped_refptr<AutoThreadTaskRunner> network_task_runner,
|
| + scoped_ptr<net::NetworkChangeNotifier> network_change_notifier,
|
| + scoped_ptr<XmppSignalStrategy> signal_strategy,
|
| + scoped_ptr<SignalingConnector> signaling_connector,
|
| + scoped_ptr<HeartbeatSender> heartbeat_sender);
|
| +
|
| + void OnAckOrTimeout(AckOrTimeout ack_or_timeout);
|
| +
|
| + // Order fields below is important for destructing them in the right oder.
|
| + // - |heartbeat_sender_| and |signaling_connector_| have to be destructed
|
| + // before |signal_strategy_| because their destructors need to call
|
| + // signal_strategy_->RemoveListener(this)
|
| + // - |signaling_connector_| has to be destructed before
|
| + // |network_change_notifier_| because its destructor needs to deregister
|
| + // network change notifications
|
| + // - |network_task_runner_| is used by all the other fields and has to be
|
| + // destructed last.
|
| + scoped_refptr<AutoThreadTaskRunner> network_task_runner_;
|
| + scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
|
| + scoped_ptr<XmppSignalStrategy> signal_strategy_;
|
| + scoped_ptr<SignalingConnector> signaling_connector_;
|
| + scoped_ptr<HeartbeatSender> heartbeat_sender_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MinimumHeartbeatSupporter);
|
| +};
|
| +
|
| +} // namespace remoting
|
| +
|
| +#endif // REMOTING_HOST_MINIMUM_HEARTBEAT_SUPPORTER_H_
|
|
|