Index: components/proximity_auth/bluetooth_throttler.h |
diff --git a/components/proximity_auth/bluetooth_throttler.h b/components/proximity_auth/bluetooth_throttler.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1e428fe23eb06e4ec9517421dd4f26d4d2658bea |
--- /dev/null |
+++ b/components/proximity_auth/bluetooth_throttler.h |
@@ -0,0 +1,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 |