chromium/ash/webui/eche_app_ui/eche_connection_scheduler.h

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_WEBUI_ECHE_APP_UI_ECHE_CONNECTION_SCHEDULER_H_
#define ASH_WEBUI_ECHE_APP_UI_ECHE_CONNECTION_SCHEDULER_H_

namespace ash {
namespace eche_app {

// Responsible for requesting connection from the local device
// (e.g. this chromebook) to the user's phone. Will also attempt to connect
// whenever possible and retries upon error with exponential backoff.
class EcheConnectionScheduler {
 public:
  EcheConnectionScheduler(const EcheConnectionScheduler&) = delete;
  EcheConnectionScheduler& operator=(const EcheConnectionScheduler&) = delete;
  virtual ~EcheConnectionScheduler() = default;

  // Attempts a connection immediately, will be exponentially backed-off upon
  // failing to establish a connection.
  virtual void ScheduleConnectionNow() = 0;

  // Invalidate all pending backoff attempts and disconnects the current
  // connection attempt.
  virtual void DisconnectAndClearBackoffAttempts() = 0;

 protected:
  EcheConnectionScheduler() = default;
};

}  // namespace eche_app
}  // namespace ash

#endif  // ASH_WEBUI_ECHE_APP_UI_ECHE_CONNECTION_SCHEDULER_H_