| Index: chrome/browser/extensions/api/bluetooth/bluetooth_private_api.cc
|
| diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_private_api.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_private_api.cc
|
| deleted file mode 100644
|
| index 861197df9b3a59e9056dbd62150b2134978865fe..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/api/bluetooth/bluetooth_private_api.cc
|
| +++ /dev/null
|
| @@ -1,290 +0,0 @@
|
| -// Copyright 2014 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 "chrome/browser/extensions/api/bluetooth/bluetooth_private_api.h"
|
| -
|
| -#include "base/callback.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h"
|
| -#include "chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h"
|
| -#include "chrome/common/extensions/api/bluetooth_private.h"
|
| -#include "device/bluetooth/bluetooth_adapter.h"
|
| -#include "device/bluetooth/bluetooth_adapter_factory.h"
|
| -
|
| -namespace bt_private = extensions::api::bluetooth_private;
|
| -
|
| -namespace extensions {
|
| -
|
| -static base::LazyInstance<BrowserContextKeyedAPIFactory<BluetoothPrivateAPI> >
|
| - g_factory = LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -// static
|
| -BrowserContextKeyedAPIFactory<BluetoothPrivateAPI>*
|
| -BluetoothPrivateAPI::GetFactoryInstance() {
|
| - return g_factory.Pointer();
|
| -}
|
| -
|
| -BluetoothPrivateAPI::BluetoothPrivateAPI(content::BrowserContext* context)
|
| - : browser_context_(context) {
|
| - EventRouter::Get(browser_context_)
|
| - ->RegisterObserver(this, bt_private::OnPairing::kEventName);
|
| -}
|
| -
|
| -BluetoothPrivateAPI::~BluetoothPrivateAPI() {}
|
| -
|
| -void BluetoothPrivateAPI::Shutdown() {
|
| - EventRouter::Get(browser_context_)->UnregisterObserver(this);
|
| -}
|
| -
|
| -void BluetoothPrivateAPI::OnListenerAdded(const EventListenerInfo& details) {
|
| - // This function can be called multiple times for the same JS listener, for
|
| - // example, once for the addListener call and again if it is a lazy listener.
|
| - if (!details.browser_context)
|
| - return;
|
| -
|
| - BluetoothAPI::Get(browser_context_)->event_router()->AddPairingDelegate(
|
| - details.extension_id);
|
| -}
|
| -
|
| -void BluetoothPrivateAPI::OnListenerRemoved(const EventListenerInfo& details) {
|
| - // This function can be called multiple times for the same JS listener, for
|
| - // example, once for the addListener call and again if it is a lazy listener.
|
| - if (!details.browser_context)
|
| - return;
|
| -
|
| - BluetoothAPI::Get(browser_context_)->event_router()->RemovePairingDelegate(
|
| - details.extension_id);
|
| -}
|
| -
|
| -namespace api {
|
| -
|
| -namespace {
|
| -
|
| -const char kNameProperty[] = "name";
|
| -const char kPoweredProperty[] = "powered";
|
| -const char kDiscoverableProperty[] = "discoverable";
|
| -
|
| -const char kSetAdapterPropertyError[] = "Error setting adapter properties: $1";
|
| -
|
| -const char kDeviceNotFoundError[] =
|
| - "Given address is not a valid Bluetooth device.";
|
| -
|
| -const char kPairingNotEnabled[] =
|
| - "Pairing must be enabled to set a pairing response.";
|
| -
|
| -const char kInvalidPairingResponseOptions[] =
|
| - "Invalid pairing response options";
|
| -
|
| -const char kAdapterNotPresent[] =
|
| - "Could not find a Bluetooth adapter.";
|
| -
|
| -// Returns true if the pairing response options passed into the
|
| -// setPairingResponse function are valid.
|
| -bool ValidatePairingResponseOptions(
|
| - const device::BluetoothDevice* device,
|
| - const bt_private::SetPairingResponseOptions& options) {
|
| - bool response = options.response != bt_private::PAIRING_RESPONSE_NONE;
|
| - bool pincode = options.pincode.get() != NULL;
|
| - bool passkey = options.passkey.get() != NULL;
|
| -
|
| - if (!response && !pincode && !passkey)
|
| - return false;
|
| - if (pincode && passkey)
|
| - return false;
|
| - if (options.response != bt_private::PAIRING_RESPONSE_CONFIRM &&
|
| - (pincode || passkey))
|
| - return false;
|
| -
|
| - // Check the BluetoothDevice is in expecting the correct response.
|
| - if (!device->ExpectingConfirmation() && !device->ExpectingPinCode() &&
|
| - !device->ExpectingPasskey())
|
| - return false;
|
| - if (pincode && !device->ExpectingPinCode())
|
| - return false;
|
| - if (passkey && !device->ExpectingPasskey())
|
| - return false;
|
| - if (options.response == bt_private::PAIRING_RESPONSE_CONFIRM && !pincode &&
|
| - !passkey && !device->ExpectingConfirmation())
|
| - return false;
|
| -
|
| - return true;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -BluetoothPrivateSetAdapterStateFunction::
|
| - BluetoothPrivateSetAdapterStateFunction() {}
|
| -
|
| -BluetoothPrivateSetAdapterStateFunction::
|
| - ~BluetoothPrivateSetAdapterStateFunction() {}
|
| -
|
| -bool BluetoothPrivateSetAdapterStateFunction::DoWork(
|
| - scoped_refptr<device::BluetoothAdapter> adapter) {
|
| - scoped_ptr<bt_private::SetAdapterState::Params> params(
|
| - bt_private::SetAdapterState::Params::Create(*args_));
|
| - EXTENSION_FUNCTION_VALIDATE(params.get());
|
| -
|
| - if (!adapter->IsPresent()) {
|
| - SetError(kAdapterNotPresent);
|
| - SendResponse(false);
|
| - return true;
|
| - }
|
| -
|
| - const bt_private::NewAdapterState& new_state = params->adapter_state;
|
| -
|
| - // These properties are not owned.
|
| - std::string* name = new_state.name.get();
|
| - bool* powered = new_state.powered.get();
|
| - bool* discoverable = new_state.discoverable.get();
|
| -
|
| - if (name && adapter->GetName() != *name) {
|
| - pending_properties_.insert(kNameProperty);
|
| - adapter->SetName(*name,
|
| - CreatePropertySetCallback(kNameProperty),
|
| - CreatePropertyErrorCallback(kNameProperty));
|
| - }
|
| -
|
| - if (powered && adapter->IsPowered() != *powered) {
|
| - pending_properties_.insert(kPoweredProperty);
|
| - adapter->SetPowered(*powered,
|
| - CreatePropertySetCallback(kPoweredProperty),
|
| - CreatePropertyErrorCallback(kPoweredProperty));
|
| - }
|
| -
|
| - if (discoverable && adapter->IsDiscoverable() != *discoverable) {
|
| - pending_properties_.insert(kDiscoverableProperty);
|
| - adapter->SetDiscoverable(
|
| - *discoverable,
|
| - CreatePropertySetCallback(kDiscoverableProperty),
|
| - CreatePropertyErrorCallback(kDiscoverableProperty));
|
| - }
|
| -
|
| - if (pending_properties_.empty())
|
| - SendResponse(true);
|
| - return true;
|
| -}
|
| -
|
| -base::Closure
|
| -BluetoothPrivateSetAdapterStateFunction::CreatePropertySetCallback(
|
| - const std::string& property_name) {
|
| - return base::Bind(
|
| - &BluetoothPrivateSetAdapterStateFunction::OnAdapterPropertySet,
|
| - this,
|
| - property_name);
|
| -}
|
| -
|
| -base::Closure
|
| -BluetoothPrivateSetAdapterStateFunction::CreatePropertyErrorCallback(
|
| - const std::string& property_name) {
|
| - return base::Bind(
|
| - &BluetoothPrivateSetAdapterStateFunction::OnAdapterPropertyError,
|
| - this,
|
| - property_name);
|
| -}
|
| -
|
| -void BluetoothPrivateSetAdapterStateFunction::OnAdapterPropertySet(
|
| - const std::string& property) {
|
| - DCHECK(pending_properties_.find(property) != pending_properties_.end());
|
| - DCHECK(failed_properties_.find(property) == failed_properties_.end());
|
| -
|
| - pending_properties_.erase(property);
|
| - if (pending_properties_.empty()) {
|
| - if (failed_properties_.empty())
|
| - SendResponse(true);
|
| - else
|
| - SendError();
|
| - }
|
| -}
|
| -
|
| -void BluetoothPrivateSetAdapterStateFunction::OnAdapterPropertyError(
|
| - const std::string& property) {
|
| - DCHECK(pending_properties_.find(property) != pending_properties_.end());
|
| - DCHECK(failed_properties_.find(property) == failed_properties_.end());
|
| -
|
| - pending_properties_.erase(property);
|
| - failed_properties_.insert(property);
|
| - if (pending_properties_.empty())
|
| - SendError();
|
| -}
|
| -
|
| -void BluetoothPrivateSetAdapterStateFunction::SendError() {
|
| - DCHECK(pending_properties_.empty());
|
| - DCHECK(!failed_properties_.empty());
|
| -
|
| - std::vector<std::string> failed_vector;
|
| - std::copy(failed_properties_.begin(),
|
| - failed_properties_.end(),
|
| - std::back_inserter(failed_vector));
|
| -
|
| - std::vector<std::string> replacements(1);
|
| - replacements[0] = JoinString(failed_vector, ", ");
|
| - std::string error =
|
| - ReplaceStringPlaceholders(kSetAdapterPropertyError, replacements, NULL);
|
| - SetError(error);
|
| - SendResponse(false);
|
| -}
|
| -
|
| -BluetoothPrivateSetPairingResponseFunction::
|
| - BluetoothPrivateSetPairingResponseFunction() {}
|
| -
|
| -BluetoothPrivateSetPairingResponseFunction::
|
| - ~BluetoothPrivateSetPairingResponseFunction() {}
|
| -
|
| -bool BluetoothPrivateSetPairingResponseFunction::DoWork(
|
| - scoped_refptr<device::BluetoothAdapter> adapter) {
|
| - scoped_ptr<bt_private::SetPairingResponse::Params> params(
|
| - bt_private::SetPairingResponse::Params::Create(*args_));
|
| - EXTENSION_FUNCTION_VALIDATE(params.get());
|
| - const bt_private::SetPairingResponseOptions& options = params->options;
|
| -
|
| - BluetoothEventRouter* router =
|
| - BluetoothAPI::Get(browser_context())->event_router();
|
| - if (!router->GetPairingDelegate(extension_id())) {
|
| - SetError(kPairingNotEnabled);
|
| - SendResponse(false);
|
| - return true;
|
| - }
|
| -
|
| - const std::string& device_address = options.device.address;
|
| - device::BluetoothDevice* device = adapter->GetDevice(device_address);
|
| - if (!device) {
|
| - SetError(kDeviceNotFoundError);
|
| - SendResponse(false);
|
| - return true;
|
| - }
|
| -
|
| - if (!ValidatePairingResponseOptions(device, options)) {
|
| - SetError(kInvalidPairingResponseOptions);
|
| - SendResponse(false);
|
| - return true;
|
| - }
|
| -
|
| - if (options.pincode.get()) {
|
| - device->SetPinCode(*options.pincode.get());
|
| - } else if (options.passkey.get()) {
|
| - device->SetPasskey(*options.passkey.get());
|
| - } else {
|
| - switch (options.response) {
|
| - case bt_private::PAIRING_RESPONSE_CONFIRM:
|
| - device->ConfirmPairing();
|
| - break;
|
| - case bt_private::PAIRING_RESPONSE_REJECT:
|
| - device->RejectPairing();
|
| - break;
|
| - case bt_private::PAIRING_RESPONSE_CANCEL:
|
| - device->CancelPairing();
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| - }
|
| -
|
| - SendResponse(true);
|
| - return true;
|
| -}
|
| -
|
| -} // namespace api
|
| -
|
| -} // namespace extensions
|
|
|