blob: 90eed11795159095b2beff2a3ee57fa6f654e257 [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.
#ifndef COMPONENTS_CRYPTAUTH_BLUETOOTH_THROTTLER_H_
#define COMPONENTS_CRYPTAUTH_BLUETOOTH_THROTTLER_H_
namespace base {
class TimeDelta;
}
namespace cryptauth {
class Connection;
// An interface for throttling repeated connection attempts to the same device.
// This throttling is necessary to prevent a kernel race condition when
// connecting before the previous connection fully closes, putting the
// connection in a corrupted, and unrecoverable state. http://crbug.com/345232
class BluetoothThrottler {
public:
virtual ~BluetoothThrottler() {}
// Returns the current delay that must be respected prior to reattempting to
// establish a connection with the remote device. The returned value is 0 if
// no delay is needed.
virtual base::TimeDelta GetDelay() const = 0;
// Should be called when a connection to the remote device is established.
// Note that the |connection| is passed as a weak reference. The throttler
// will ensure, by registering as an observer, that it never attempts to use
// the connection after it has been destroyed.
virtual void OnConnection(Connection* connection) = 0;
};
} // namespace cryptauth
#endif // COMPONENTS_CRYPTAUTH_BLUETOOTH_THROTTLER_H_