summaryrefslogtreecommitdiffstats
path: root/components/proximity_auth/bluetooth_throttler.h
blob: 1e428fe23eb06e4ec9517421dd4f26d4d2658bea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 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_PROXIMITY_AUTH_BLUETOOTH_THROTTLER_H
#define COMPONENTS_PROXIMITY_AUTH_BLUETOOTH_THROTTLER_H

namespace base {
class TimeDelta;
}

namespace proximity_auth {

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 proximity_auth

#endif  // COMPONENTS_PROXIMITY_AUTH_BLUETOOTH_THROTTLER_H