bfcc59f8a0c0fe2b9071af5288fb7d7a791cfe29
[platform/framework/web/crosswalk.git] / src / device / bluetooth / bluetooth_discovery_session.cc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "device/bluetooth/bluetooth_discovery_session.h"
6
7 #include "base/bind.h"
8 #include "device/bluetooth/bluetooth_adapter.h"
9
10 namespace device {
11
12 BluetoothDiscoverySession::BluetoothDiscoverySession(
13     scoped_refptr<BluetoothAdapter> adapter)
14     : active_(true), adapter_(adapter), weak_ptr_factory_(this) {
15   DCHECK(adapter_.get());
16 }
17
18 BluetoothDiscoverySession::~BluetoothDiscoverySession() {
19   if (active_) {
20     Stop(base::Bind(&base::DoNothing), base::Bind(&base::DoNothing));
21     MarkAsInactive();
22   }
23 }
24
25 bool BluetoothDiscoverySession::IsActive() const {
26   return active_;
27 }
28
29 void BluetoothDiscoverySession::Stop(
30     const base::Closure& callback,
31     const ErrorCallback& error_callback) {
32   if (!active_) {
33     LOG(WARNING) << "Discovery session not active. Cannot stop.";
34     error_callback.Run();
35     return;
36   }
37   VLOG(1) << "Stopping device discovery session.";
38   adapter_->RemoveDiscoverySession(
39       base::Bind(&BluetoothDiscoverySession::OnStop,
40                  weak_ptr_factory_.GetWeakPtr(),
41                  callback),
42       error_callback);
43 }
44
45 void BluetoothDiscoverySession::OnStop(const base::Closure& callback) {
46   MarkAsInactive();
47   callback.Run();
48 }
49
50 void BluetoothDiscoverySession::MarkAsInactive() {
51   if (!active_)
52     return;
53   active_ = false;
54   adapter_->DiscoverySessionBecameInactive(this);
55 }
56
57 }  // namespace device