| Index: components/proximity_auth/throttled_bluetooth_connection_finder.cc
|
| diff --git a/components/proximity_auth/throttled_bluetooth_connection_finder.cc b/components/proximity_auth/throttled_bluetooth_connection_finder.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..252a47f9ec03f37b4ad9994617ccfd0664ed55be
|
| --- /dev/null
|
| +++ b/components/proximity_auth/throttled_bluetooth_connection_finder.cc
|
| @@ -0,0 +1,55 @@
|
| +// 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.
|
| +
|
| +#include "components/proximity_auth/throttled_bluetooth_connection_finder.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/location.h"
|
| +#include "base/task_runner.h"
|
| +#include "base/time/time.h"
|
| +#include "components/proximity_auth/bluetooth_connection_finder.h"
|
| +#include "components/proximity_auth/bluetooth_throttler.h"
|
| +
|
| +namespace proximity_auth {
|
| +
|
| +ThrottledBluetoothConnectionFinder::ThrottledBluetoothConnectionFinder(
|
| + scoped_ptr<BluetoothConnectionFinder> connection_finder,
|
| + scoped_refptr<base::TaskRunner> task_runner,
|
| + BluetoothThrottler* throttler)
|
| + : connection_finder_(connection_finder.Pass()),
|
| + task_runner_(task_runner),
|
| + throttler_(throttler),
|
| + weak_ptr_factory_(this) {
|
| +}
|
| +
|
| +ThrottledBluetoothConnectionFinder::~ThrottledBluetoothConnectionFinder() {
|
| +}
|
| +
|
| +void ThrottledBluetoothConnectionFinder::Find(
|
| + const ConnectionCallback& connection_callback) {
|
| + const base::TimeDelta delay = throttler_->GetDelay();
|
| +
|
| + // Wait, if needed.
|
| + if (delay != base::TimeDelta()) {
|
| + task_runner_->PostDelayedTask(
|
| + FROM_HERE,
|
| + base::Bind(&ThrottledBluetoothConnectionFinder::Find,
|
| + weak_ptr_factory_.GetWeakPtr(), connection_callback),
|
| + delay);
|
| + return;
|
| + }
|
| +
|
| + connection_finder_->Find(
|
| + base::Bind(&ThrottledBluetoothConnectionFinder::OnConnection,
|
| + weak_ptr_factory_.GetWeakPtr(), connection_callback));
|
| +}
|
| +
|
| +void ThrottledBluetoothConnectionFinder::OnConnection(
|
| + const ConnectionCallback& connection_callback,
|
| + scoped_ptr<Connection> connection) {
|
| + throttler_->OnConnection(connection.get());
|
| + connection_callback.Run(connection.Pass());
|
| +}
|
| +
|
| +} // namespace proximity_auth
|
|
|