bluetooth_advertisement_mac.mm 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright 2018 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. #include "device/bluetooth/bluetooth_advertisement_mac.h"
  5. #include "base/bind.h"
  6. #include "device/bluetooth/bluetooth_adapter_mac.h"
  7. namespace device {
  8. BluetoothAdvertisementMac::BluetoothAdvertisementMac(
  9. std::unique_ptr<BluetoothAdvertisement::UUIDList> service_uuids,
  10. BluetoothAdapter::CreateAdvertisementCallback success_callback,
  11. BluetoothAdapter::AdvertisementErrorCallback error_callback,
  12. BluetoothLowEnergyAdvertisementManagerMac* advertisement_manager)
  13. : service_uuids_(std::move(service_uuids)),
  14. success_callback_(std::move(success_callback)),
  15. error_callback_(std::move(error_callback)),
  16. advertisement_manager_(advertisement_manager),
  17. status_(BluetoothAdvertisementMac::WAITING_FOR_ADAPTER) {}
  18. void BluetoothAdvertisementMac::Unregister(SuccessCallback success_callback,
  19. ErrorCallback error_callback) {
  20. if (status_ == Status::UNREGISTERED) {
  21. std::move(success_callback).Run();
  22. return;
  23. }
  24. status_ = Status::UNREGISTERED;
  25. advertisement_manager_->UnregisterAdvertisement(
  26. this, std::move(success_callback), std::move(error_callback));
  27. }
  28. BluetoothAdvertisementMac::~BluetoothAdvertisementMac() {
  29. // This object should be owned by BluetoothLowEnergyAdvertisementManagerMac,
  30. // and will be cleaned up there.
  31. }
  32. void BluetoothAdvertisementMac::OnAdvertisementPending() {
  33. status_ = Status::ADVERTISEMENT_PENDING;
  34. }
  35. void BluetoothAdvertisementMac::OnAdvertisementError(
  36. base::SingleThreadTaskRunner* task_runner,
  37. BluetoothAdvertisement::ErrorCode error_code) {
  38. status_ = Status::ERROR_ADVERTISING;
  39. task_runner->PostTask(FROM_HERE,
  40. base::BindOnce(std::move(error_callback_), error_code));
  41. }
  42. void BluetoothAdvertisementMac::OnAdvertisementSuccess(
  43. base::SingleThreadTaskRunner* task_runner) {
  44. status_ = Status::ADVERTISING;
  45. task_runner->PostTask(
  46. FROM_HERE,
  47. base::BindOnce(&BluetoothAdvertisementMac::InvokeSuccessCallback, this));
  48. }
  49. void BluetoothAdvertisementMac::OnAdapterReset() {
  50. status_ = Status::UNREGISTERED;
  51. }
  52. void BluetoothAdvertisementMac::InvokeSuccessCallback() {
  53. std::move(success_callback_).Run(this);
  54. }
  55. } // namespace device