diff options
Diffstat (limited to 'chrome')
53 files changed, 366 insertions, 5583 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 6ee27c8..2e854a6 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -14417,48 +14417,45 @@ Some features may be unavailable. Please check that the profile exists and you Expand </message> - <!-- Bluetooth device class strings --> - <if expr="pp_ifdef('chromeos')"> - <message name="IDS_BLUETOOTH_DEVICE_UNKNOWN" desc="Text to identify bluetooth devices of unknown or unsupported class."> - Unknown or Unsupported Device (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_COMPUTER" desc="Text to identify bluetooth devices of the computer class."> - Computer (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_PHONE" desc="Text to identify bluetooth devices of the phone class."> - Phone (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_MODEM" desc="Text to identify bluetooth devices of the modem class."> - Modem (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_AUDIO" desc="Text to identify bluetooth devices of the audio class."> - Audio (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_CAR_AUDIO" desc="Text to identify bluetooth devices of the car audio class."> - Car audio (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_VIDEO" desc="Text to identify bluetooth devices of the video class."> - Video (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_JOYSTICK" desc="Text to identify bluetooth devices of the joystick class."> - Joystick (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_GAMEPAD" desc="Text to identify bluetooth devices of the gamepad class."> - Gamepad (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_KEYBOARD" desc="Text to identify bluetooth devices of the keyboard class."> - Keyboard (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_TABLET" desc="Text to identify bluetooth devices of the tablet class."> - Tablet (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_MOUSE" desc="Text to identify bluetooth devices of the mouse class."> - Mouse (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - <message name="IDS_BLUETOOTH_DEVICE_KEYBOARD_MOUSE_COMBO" desc="Text to identify bluetooth devices of both keyboard and mouse class."> - Keyboard/Mouse (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) - </message> - </if> + <message name="IDS_BLUETOOTH_DEVICE_UNKNOWN" desc="Text to identify bluetooth devices of unknown or unsupported class."> + Unknown or Unsupported Device (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_COMPUTER" desc="Text to identify bluetooth devices of the computer class."> + Computer (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_PHONE" desc="Text to identify bluetooth devices of the phone class."> + Phone (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_MODEM" desc="Text to identify bluetooth devices of the modem class."> + Modem (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_AUDIO" desc="Text to identify bluetooth devices of the audio class."> + Audio (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_CAR_AUDIO" desc="Text to identify bluetooth devices of the car audio class."> + Car audio (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_VIDEO" desc="Text to identify bluetooth devices of the video class."> + Video (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_JOYSTICK" desc="Text to identify bluetooth devices of the joystick class."> + Joystick (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_GAMEPAD" desc="Text to identify bluetooth devices of the gamepad class."> + Gamepad (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_KEYBOARD" desc="Text to identify bluetooth devices of the keyboard class."> + Keyboard (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_TABLET" desc="Text to identify bluetooth devices of the tablet class."> + Tablet (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_MOUSE" desc="Text to identify bluetooth devices of the mouse class."> + Mouse (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> + <message name="IDS_BLUETOOTH_DEVICE_KEYBOARD_MOUSE_COMBO" desc="Text to identify bluetooth devices of both keyboard and mouse class."> + Keyboard/Mouse (<ph name="ADDRESS">$1<ex>12:34:56:78:9A:BC</ex></ph>) + </message> <!-- High-constrast mode. --> <message name="IDS_HIGH_CONTRAST_NOTIFICATION" diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS index 50aefc2..3b6c334 100644 --- a/chrome/browser/DEPS +++ b/chrome/browser/DEPS @@ -5,6 +5,7 @@ include_rules = [ "+chrome/tools/profiles", # For history unit tests. "+chromeos", "+content/public/browser", + "+device", "+google/cacheinvalidation", # Sync invalidation API protobuf files. "+google_apis", "+google_update", diff --git a/chrome/browser/chromeos/DEPS b/chrome/browser/chromeos/DEPS index 770f46e..59bd733 100644 --- a/chrome/browser/chromeos/DEPS +++ b/chrome/browser/chromeos/DEPS @@ -1,6 +1,7 @@ include_rules = [ "+cros", "+dbus", + "+device/bluetooth", "+media/base/media_switches.h", # For media command line switches. "+third_party/mozc", "+webkit/chromeos/fileapi", diff --git a/chrome/browser/chromeos/bluetooth/OWNERS b/chrome/browser/chromeos/bluetooth/OWNERS deleted file mode 100644 index 47f6cfa..0000000 --- a/chrome/browser/chromeos/bluetooth/OWNERS +++ /dev/null @@ -1,2 +0,0 @@ -keybuk@chromium.org -bryeung@chromium.org diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_adapter.cc b/chrome/browser/chromeos/bluetooth/bluetooth_adapter.cc deleted file mode 100644 index 7108b41..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_adapter.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012 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/chromeos/bluetooth/bluetooth_adapter.h" - -#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" - -namespace chromeos { - -BluetoothAdapter::~BluetoothAdapter() { -} - -const std::string& BluetoothAdapter::address() const { - return address_; -} - -const std::string& BluetoothAdapter::name() const { - return name_; -} - -BluetoothAdapter::DeviceList BluetoothAdapter::GetDevices() { - ConstDeviceList const_devices = - const_cast<const BluetoothAdapter *>(this)->GetDevices(); - - DeviceList devices; - for (ConstDeviceList::const_iterator i = const_devices.begin(); - i != const_devices.end(); ++i) - devices.push_back(const_cast<BluetoothDevice *>(*i)); - - return devices; -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_adapter.h b/chrome/browser/chromeos/bluetooth/bluetooth_adapter.h deleted file mode 100644 index 14a94a1..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_adapter.h +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_H_ -#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_H_ - -#include <string> -#include <vector> - -#include "base/callback.h" -#include "base/memory/ref_counted.h" - -namespace chromeos { - -class BluetoothDevice; - -struct BluetoothOutOfBandPairingData; - -// BluetoothAdapter represents a local Bluetooth adapter which may be used to -// interact with remote Bluetooth devices. As well as providing support for -// determining whether an adapter is present, and whether the radio is powered, -// this class also provides support for obtaining the list of remote devices -// known to the adapter, discovering new devices, and providing notification of -// updates to device information. -class BluetoothAdapter : public base::RefCounted<BluetoothAdapter> { - public: - // Interface for observing changes from bluetooth adapters. - class Observer { - public: - virtual ~Observer() {} - - // Called when the presence of the adapter |adapter| changes, when - // |present| is true the adapter is now present, false means the adapter - // has been removed from the system. - virtual void AdapterPresentChanged(BluetoothAdapter* adapter, - bool present) {} - - // Called when the radio power state of the adapter |adapter| changes, - // when |powered| is true the adapter radio is powered, false means the - // adapter radio is off. - virtual void AdapterPoweredChanged(BluetoothAdapter* adapter, - bool powered) {} - - // Called when the discovering state of the adapter |adapter| changes, - // when |discovering| is true the adapter is seeking new devices, false - // means it is not. Note that device discovery involves both states when - // the adapter is seeking new devices and states when it is not because - // it is interrogating the devices it found. - virtual void AdapterDiscoveringChanged(BluetoothAdapter* adapter, - bool discovering) {} - - // Called when a new device |device| is added to the adapter |adapter|, - // either because it has been discovered or a connection made. |device| - // should not be cached, instead copy its address. - virtual void DeviceAdded(BluetoothAdapter* adapter, - BluetoothDevice* device) {} - - // Called when properties of the device |device| known to the adapter - // |adapter| change. |device| should not be cached, instead copy its - // address. - virtual void DeviceChanged(BluetoothAdapter* adapter, - BluetoothDevice* device) {} - - // Called when the device |device| is removed from the adapter |adapter|, - // either as a result of a discovered device being lost between discovering - // phases or pairing information deleted. |device| should not be cached. - virtual void DeviceRemoved(BluetoothAdapter* adapter, - BluetoothDevice* device) {} - }; - - // The ErrorCallback is used for methods that can fail in which case it - // is called, in the success case the callback is simply not called. - typedef base::Callback<void()> ErrorCallback; - - // The BluetoothOutOfBandPairingDataCallback is used to return - // BluetoothOutOfBandPairingData to the caller. - typedef base::Callback<void(const BluetoothOutOfBandPairingData& data)> - BluetoothOutOfBandPairingDataCallback; - - // Adds and removes observers for events on this bluetooth adapter, - // if monitoring multiple adapters check the |adapter| parameter of - // observer methods to determine which adapter is issuing the event. - virtual void AddObserver(BluetoothAdapter::Observer* observer) = 0; - virtual void RemoveObserver( - BluetoothAdapter::Observer* observer) = 0; - - // The address of this adapter. The address format is "XX:XX:XX:XX:XX:XX", - // where each XX is a hexadecimal number. - virtual const std::string& address() const; - - // The name of the adapter. - virtual const std::string& name() const; - - // Indicates whether the adapter is actually present on the system, for - // the default adapter this indicates whether any adapter is present. An - // adapter is only considered present if the address has been obtained. - virtual bool IsPresent() const = 0; - - // Indicates whether the adapter radio is powered. - virtual bool IsPowered() const = 0; - - // Requests a change to the adapter radio power, setting |powered| to true - // will turn on the radio and false will turn it off. On success, callback - // will be called. On failure, |error_callback| will be called. - virtual void SetPowered(bool powered, - const base::Closure& callback, - const ErrorCallback& error_callback) = 0; - - // Indicates whether the adapter is currently discovering new devices, - // note that a typical discovery process has phases of this being true - // followed by phases of being false when the adapter interrogates the - // devices found. - virtual bool IsDiscovering() const = 0; - - // Requests that the adapter either begin discovering new devices when - // |discovering| is true, or cease any discovery when false. On success, - // callback will be called. On failure, |error_callback| will be called. - virtual void SetDiscovering(bool discovering, - const base::Closure& callback, - const ErrorCallback& error_callback) = 0; - - // Requests the list of devices from the adapter, all are returned - // including those currently connected and those paired. Use the - // returned device pointers to determine which they are. - typedef std::vector<BluetoothDevice*> DeviceList; - virtual DeviceList GetDevices(); - typedef std::vector<const BluetoothDevice*> ConstDeviceList; - virtual ConstDeviceList GetDevices() const = 0; - - // Returns a pointer to the device with the given address |address| or - // NULL if no such device is known. - virtual BluetoothDevice* GetDevice(const std::string& address) = 0; - virtual const BluetoothDevice* GetDevice( - const std::string& address) const = 0; - - // Requests the local Out Of Band pairing data. - virtual void ReadLocalOutOfBandPairingData( - const BluetoothOutOfBandPairingDataCallback& callback, - const ErrorCallback& error_callback) = 0; - - protected: - friend class base::RefCounted<BluetoothAdapter>; - virtual ~BluetoothAdapter(); - - // Address of the adapter. - std::string address_; - - // Name of the adapter. - std::string name_; -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_H_ diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.cc b/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.cc deleted file mode 100644 index d71dae4..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.cc +++ /dev/null @@ -1,535 +0,0 @@ -// Copyright (c) 2012 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/chromeos/bluetooth/bluetooth_adapter_chromeos.h" - -#include <string> - -#include "base/bind.h" -#include "base/logging.h" -#include "base/stl_util.h" -#include "base/values.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device_chromeos.h" -#include "chromeos/dbus/bluetooth_adapter_client.h" -#include "chromeos/dbus/bluetooth_device_client.h" -#include "chromeos/dbus/bluetooth_manager_client.h" -#include "chromeos/dbus/bluetooth_out_of_band_client.h" -#include "chromeos/dbus/bluetooth_out_of_band_pairing_data.h" -#include "chromeos/dbus/dbus_thread_manager.h" -#include "dbus/object_path.h" - -namespace chromeos { - -BluetoothAdapterChromeOs::BluetoothAdapterChromeOs() : track_default_(false), - powered_(false), - discovering_(false), - weak_ptr_factory_(this) { - DBusThreadManager::Get()->GetBluetoothManagerClient()-> - AddObserver(this); - DBusThreadManager::Get()->GetBluetoothAdapterClient()-> - AddObserver(this); - DBusThreadManager::Get()->GetBluetoothDeviceClient()-> - AddObserver(this); -} - -BluetoothAdapterChromeOs::~BluetoothAdapterChromeOs() { - DBusThreadManager::Get()->GetBluetoothDeviceClient()-> - RemoveObserver(this); - DBusThreadManager::Get()->GetBluetoothAdapterClient()-> - RemoveObserver(this); - DBusThreadManager::Get()->GetBluetoothManagerClient()-> - RemoveObserver(this); - - STLDeleteValues(&devices_); -} - -void BluetoothAdapterChromeOs::AddObserver( - BluetoothAdapter::Observer* observer) { - DCHECK(observer); - observers_.AddObserver(observer); -} - -void BluetoothAdapterChromeOs::RemoveObserver( - BluetoothAdapter::Observer* observer) { - DCHECK(observer); - observers_.RemoveObserver(observer); -} - -bool BluetoothAdapterChromeOs::IsPresent() const { - return !object_path_.value().empty() && !address_.empty(); -} - -bool BluetoothAdapterChromeOs::IsPowered() const { - return powered_; -} - -void BluetoothAdapterChromeOs::SetPowered(bool powered, - const base::Closure& callback, - const ErrorCallback& error_callback) { - DBusThreadManager::Get()->GetBluetoothAdapterClient()-> - GetProperties(object_path_)->powered.Set( - powered, - base::Bind(&BluetoothAdapterChromeOs::OnSetPowered, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback)); -} - -bool BluetoothAdapterChromeOs::IsDiscovering() const { - return discovering_; -} - -void BluetoothAdapterChromeOs::SetDiscovering( - bool discovering, - const base::Closure& callback, - const ErrorCallback& error_callback) { - if (discovering) { - DBusThreadManager::Get()->GetBluetoothAdapterClient()-> - StartDiscovery(object_path_, - base::Bind(&BluetoothAdapterChromeOs::OnStartDiscovery, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback)); - } else { - DBusThreadManager::Get()->GetBluetoothAdapterClient()-> - StopDiscovery(object_path_, - base::Bind(&BluetoothAdapterChromeOs::OnStopDiscovery, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback)); - } -} - -BluetoothAdapter::ConstDeviceList BluetoothAdapterChromeOs::GetDevices() const { - ConstDeviceList devices; - for (DevicesMap::const_iterator iter = devices_.begin(); - iter != devices_.end(); - ++iter) - devices.push_back(iter->second); - - return devices; -} - -BluetoothDevice* BluetoothAdapterChromeOs::GetDevice( - const std::string& address) { - return const_cast<BluetoothDevice *>( - const_cast<const BluetoothAdapterChromeOs *>(this)->GetDevice(address)); -} - -const BluetoothDevice* BluetoothAdapterChromeOs::GetDevice( - const std::string& address) const { - DevicesMap::const_iterator iter = devices_.find(address); - if (iter != devices_.end()) - return iter->second; - - return NULL; -} - -void BluetoothAdapterChromeOs::ReadLocalOutOfBandPairingData( - const BluetoothOutOfBandPairingDataCallback& callback, - const ErrorCallback& error_callback) { - DBusThreadManager::Get()->GetBluetoothOutOfBandClient()-> - ReadLocalData(object_path_, - base::Bind(&BluetoothAdapterChromeOs::OnReadLocalData, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback)); -} - -void BluetoothAdapterChromeOs::TrackDefaultAdapter() { - DVLOG(1) << "Tracking default adapter"; - track_default_ = true; - DBusThreadManager::Get()->GetBluetoothManagerClient()-> - DefaultAdapter(base::Bind(&BluetoothAdapterChromeOs::AdapterCallback, - weak_ptr_factory_.GetWeakPtr())); -} - -void BluetoothAdapterChromeOs::FindAdapter(const std::string& address) { - DVLOG(1) << "Using adapter " << address; - track_default_ = false; - DBusThreadManager::Get()->GetBluetoothManagerClient()-> - FindAdapter(address, - base::Bind(&BluetoothAdapterChromeOs::AdapterCallback, - weak_ptr_factory_.GetWeakPtr())); -} - -void BluetoothAdapterChromeOs::AdapterCallback( - const dbus::ObjectPath& adapter_path, - bool success) { - if (success) { - ChangeAdapter(adapter_path); - } else if (!object_path_.value().empty()) { - RemoveAdapter(); - } -} - -void BluetoothAdapterChromeOs::DefaultAdapterChanged( - const dbus::ObjectPath& adapter_path) { - if (track_default_) - ChangeAdapter(adapter_path); -} - -void BluetoothAdapterChromeOs::AdapterRemoved( - const dbus::ObjectPath& adapter_path) { - if (adapter_path == object_path_) - RemoveAdapter(); -} - -void BluetoothAdapterChromeOs::ChangeAdapter( - const dbus::ObjectPath& adapter_path) { - if (object_path_.value().empty()) { - DVLOG(1) << "Adapter path initialized to " << adapter_path.value(); - } else if (object_path_.value() != adapter_path.value()) { - DVLOG(1) << "Adapter path changed from " << object_path_.value() - << " to " << adapter_path.value(); - - RemoveAdapter(); - } else { - DVLOG(1) << "Adapter address updated"; - } - - object_path_ = adapter_path; - - // Update properties to their new values. - BluetoothAdapterClient::Properties* properties = - DBusThreadManager::Get()->GetBluetoothAdapterClient()-> - GetProperties(object_path_); - - address_ = properties->address.value(); - name_ = properties->name.value(); - - // Delay announcing a new adapter until we have an address. - if (address_.empty()) { - DVLOG(1) << "Adapter address not yet known"; - return; - } - - PoweredChanged(properties->powered.value()); - DiscoveringChanged(properties->discovering.value()); - DevicesChanged(properties->devices.value()); - - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - AdapterPresentChanged(this, true)); -} - -void BluetoothAdapterChromeOs::RemoveAdapter() { - const bool adapter_was_present = IsPresent(); - - DVLOG(1) << "Adapter lost."; - PoweredChanged(false); - DiscoveringChanged(false); - ClearDevices(); - - object_path_ = dbus::ObjectPath(""); - address_.clear(); - name_.clear(); - - if (adapter_was_present) - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - AdapterPresentChanged(this, false)); -} - -void BluetoothAdapterChromeOs::OnSetPowered(const base::Closure& callback, - const ErrorCallback& error_callback, - bool success) { - if (success) - callback.Run(); - else - error_callback.Run(); -} - -void BluetoothAdapterChromeOs::PoweredChanged(bool powered) { - if (powered == powered_) - return; - - powered_ = powered; - - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - AdapterPoweredChanged(this, powered_)); -} - -void BluetoothAdapterChromeOs::OnStartDiscovery( - const base::Closure& callback, - const ErrorCallback& error_callback, - const dbus::ObjectPath& adapter_path, - bool success) { - if (success) { - DVLOG(1) << object_path_.value() << ": started discovery."; - - // Clear devices found in previous discovery attempts - ClearDiscoveredDevices(); - callback.Run(); - } else { - // TODO(keybuk): in future, don't run the callback if the error was just - // that we were already discovering. - error_callback.Run(); - } -} - -void BluetoothAdapterChromeOs::OnStopDiscovery( - const base::Closure& callback, - const ErrorCallback& error_callback, - const dbus::ObjectPath& adapter_path, - bool success) { - if (success) { - DVLOG(1) << object_path_.value() << ": stopped discovery."; - callback.Run(); - // Leave found devices available for perusing. - } else { - // TODO(keybuk): in future, don't run the callback if the error was just - // that we weren't discovering. - error_callback.Run(); - } -} - -void BluetoothAdapterChromeOs::DiscoveringChanged(bool discovering) { - if (discovering == discovering_) - return; - - discovering_ = discovering; - - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - AdapterDiscoveringChanged(this, discovering_)); -} - -void BluetoothAdapterChromeOs::OnReadLocalData( - const BluetoothOutOfBandPairingDataCallback& callback, - const ErrorCallback& error_callback, - const BluetoothOutOfBandPairingData& data, - bool success) { - if (success) - callback.Run(data); - else - error_callback.Run(); -} - -void BluetoothAdapterChromeOs::AdapterPropertyChanged( - const dbus::ObjectPath& adapter_path, - const std::string& property_name) { - if (adapter_path != object_path_) - return; - - BluetoothAdapterClient::Properties* properties = - DBusThreadManager::Get()->GetBluetoothAdapterClient()-> - GetProperties(object_path_); - - if (property_name == properties->address.name()) { - ChangeAdapter(object_path_); - - } else if (!address_.empty()) { - if (property_name == properties->powered.name()) { - PoweredChanged(properties->powered.value()); - - } else if (property_name == properties->discovering.name()) { - DiscoveringChanged(properties->discovering.value()); - - } else if (property_name == properties->devices.name()) { - DevicesChanged(properties->devices.value()); - - } else if (property_name == properties->name.name()) { - name_ = properties->name.value(); - - } - } -} - -void BluetoothAdapterChromeOs::DevicePropertyChanged( - const dbus::ObjectPath& device_path, - const std::string& property_name) { - UpdateDevice(device_path); -} - -void BluetoothAdapterChromeOs::UpdateDevice( - const dbus::ObjectPath& device_path) { - BluetoothDeviceClient::Properties* properties = - DBusThreadManager::Get()->GetBluetoothDeviceClient()-> - GetProperties(device_path); - - // When we first see a device, we may not know the address yet and need to - // wait for the DevicePropertyChanged signal before adding the device. - const std::string address = properties->address.value(); - if (address.empty()) - return; - - // The device may be already known to us, either because this is an update - // to properties, or the device going from discovered to connected and - // pairing gaining an object path in the process. In any case, we want - // to update the existing object, not create a new one. - DevicesMap::iterator iter = devices_.find(address); - BluetoothDeviceChromeOs* device; - const bool update_device = (iter != devices_.end()); - if (update_device) { - device = iter->second; - } else { - device = BluetoothDeviceChromeOs::Create(this); - devices_[address] = device; - } - - const bool was_paired = device->IsPaired(); - if (!was_paired) { - DVLOG(1) << "Assigned object path " << device_path.value() << " to device " - << address; - device->SetObjectPath(device_path); - } - device->Update(properties, true); - - if (update_device) { - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - DeviceChanged(this, device)); - } else { - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - DeviceAdded(this, device)); - } -} - -void BluetoothAdapterChromeOs::ClearDevices() { - DevicesMap replace; - devices_.swap(replace); - for (DevicesMap::iterator iter = replace.begin(); - iter != replace.end(); ++iter) { - BluetoothDeviceChromeOs* device = iter->second; - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - DeviceRemoved(this, device)); - - delete device; - } -} - -void BluetoothAdapterChromeOs::DeviceCreated( - const dbus::ObjectPath& adapter_path, - const dbus::ObjectPath& device_path) { - if (adapter_path != object_path_) - return; - - UpdateDevice(device_path); -} - -void BluetoothAdapterChromeOs::DeviceRemoved( - const dbus::ObjectPath& adapter_path, - const dbus::ObjectPath& device_path) { - if (adapter_path != object_path_) - return; - - DevicesMap::iterator iter = devices_.begin(); - while (iter != devices_.end()) { - BluetoothDeviceChromeOs* device = iter->second; - DevicesMap::iterator temp = iter; - ++iter; - - if (device->object_path_ != device_path) - continue; - - // DeviceRemoved can also be called to indicate a device that is visible - // during discovery has disconnected, but it is still visible to the - // adapter, so don't remove in that case and only clear the object path. - if (!device->IsVisible()) { - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - DeviceRemoved(this, device)); - - DVLOG(1) << "Removed device " << device->address(); - - delete device; - devices_.erase(temp); - } else { - DVLOG(1) << "Removed object path from device " << device->address(); - device->RemoveObjectPath(); - - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - DeviceChanged(this, device)); - } - } -} - -void BluetoothAdapterChromeOs::DevicesChanged( - const std::vector<dbus::ObjectPath>& devices) { - for (std::vector<dbus::ObjectPath>::const_iterator iter = - devices.begin(); iter != devices.end(); ++iter) - UpdateDevice(*iter); -} - -void BluetoothAdapterChromeOs::ClearDiscoveredDevices() { - DevicesMap::iterator iter = devices_.begin(); - while (iter != devices_.end()) { - BluetoothDeviceChromeOs* device = iter->second; - DevicesMap::iterator temp = iter; - ++iter; - - if (!device->IsPaired()) { - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - DeviceRemoved(this, device)); - - delete device; - devices_.erase(temp); - } - } -} - -void BluetoothAdapterChromeOs::DeviceFound( - const dbus::ObjectPath& adapter_path, - const std::string& address, - const BluetoothDeviceClient::Properties& properties) { - if (adapter_path != object_path_) - return; - - // DeviceFound can also be called to indicate that a device we've - // paired with is now visible to the adapter during discovery, in which - // case we want to update the existing object, not create a new one. - BluetoothDeviceChromeOs* device; - DevicesMap::iterator iter = devices_.find(address); - const bool update_device = (iter != devices_.end()); - if (update_device) { - device = iter->second; - } else { - device = BluetoothDeviceChromeOs::Create(this); - devices_[address] = device; - } - - DVLOG(1) << "Device " << address << " is visible to the adapter"; - device->SetVisible(true); - device->Update(&properties, false); - - if (update_device) { - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - DeviceChanged(this, device)); - } else { - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - DeviceAdded(this, device)); - } -} - -void BluetoothAdapterChromeOs::DeviceDisappeared( - const dbus::ObjectPath& adapter_path, - const std::string& address) { - if (adapter_path != object_path_) - return; - - DevicesMap::iterator iter = devices_.find(address); - if (iter == devices_.end()) - return; - - BluetoothDeviceChromeOs* device = iter->second; - - // DeviceDisappeared can also be called to indicate that a device we've - // paired with is no longer visible to the adapter, so don't remove - // in that case and only clear the visible flag. - if (!device->IsPaired()) { - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - DeviceRemoved(this, device)); - - DVLOG(1) << "Discovered device " << device->address() - << " is no longer visible to the adapter"; - - delete device; - devices_.erase(iter); - } else { - DVLOG(1) << "Paired device " << device->address() - << " is no longer visible to the adapter"; - device->SetVisible(false); - - FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, - DeviceChanged(this, device)); - } -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h b/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h deleted file mode 100644 index 2a0db65..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_ -#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_ - -#include <map> -#include <string> -#include <vector> - -#include "base/basictypes.h" -#include "base/callback.h" -#include "base/observer_list.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" -#include "chromeos/dbus/bluetooth_adapter_client.h" -#include "chromeos/dbus/bluetooth_device_client.h" -#include "chromeos/dbus/bluetooth_manager_client.h" -#include "dbus/object_path.h" - -namespace chromeos { - -class BluetoothDeviceChromeOs; - -struct BluetoothOutOfBandPairingData; - -// The BluetoothAdapterChromeOs class is an implementation of BluetoothAdapter -// for Chrome OS platform. -class BluetoothAdapterChromeOs : public BluetoothAdapter, - public BluetoothManagerClient::Observer, - public BluetoothAdapterClient::Observer, - public BluetoothDeviceClient::Observer { - public: - // BluetoothAdapter override - virtual void AddObserver(BluetoothAdapter::Observer* observer) OVERRIDE; - virtual void RemoveObserver(BluetoothAdapter::Observer* observer) OVERRIDE; - virtual bool IsPresent() const OVERRIDE; - virtual bool IsPowered() const OVERRIDE; - virtual void SetPowered( - bool powered, - const base::Closure& callback, - const ErrorCallback& error_callback) OVERRIDE; - virtual bool IsDiscovering() const OVERRIDE; - virtual void SetDiscovering( - bool discovering, - const base::Closure& callback, - const ErrorCallback& error_callback) OVERRIDE; - virtual ConstDeviceList GetDevices() const OVERRIDE; - virtual BluetoothDevice* GetDevice(const std::string& address) OVERRIDE; - virtual const BluetoothDevice* GetDevice( - const std::string& address) const OVERRIDE; - virtual void ReadLocalOutOfBandPairingData( - const BluetoothOutOfBandPairingDataCallback& callback, - const ErrorCallback& error_callback) OVERRIDE; - - private: - friend class BluetoothAdapterFactory; - friend class BluetoothDeviceChromeOs; - friend class MockBluetoothAdapter; - - BluetoothAdapterChromeOs(); - virtual ~BluetoothAdapterChromeOs(); - - // Obtains the default adapter object path from the Bluetooth Daemon - // and tracks future changes to it. - void TrackDefaultAdapter(); - - // Obtains the object paht for the adapter named by |address| from the - // Bluetooth Daemon. - void FindAdapter(const std::string& address); - - // Called by dbus:: in response to the method call sent by both - // DefaultAdapter() and FindAdapter(), |object_path| will contain the - // dbus object path of the requested adapter when |success| is true. - void AdapterCallback(const dbus::ObjectPath& adapter_path, bool success); - - // BluetoothManagerClient::Observer override. - // - // Called when the default local bluetooth adapter changes. - // |object_path| is the dbus object path of the new default adapter. - // Not called if all adapters are removed. - virtual void DefaultAdapterChanged(const dbus::ObjectPath& adapter_path) - OVERRIDE; - - // BluetoothManagerClient::Observer override. - // - // Called when a local bluetooth adapter is removed. - // |object_path| is the dbus object path of the adapter. - virtual void AdapterRemoved(const dbus::ObjectPath& adapter_path) OVERRIDE; - - // Changes the tracked adapter to the dbus object path |adapter_path|, - // clearing information from the previously tracked adapter and updating - // to the new adapter. - void ChangeAdapter(const dbus::ObjectPath& adapter_path); - - // Clears the tracked adapter information. - void RemoveAdapter(); - - // Called by dbus:: in response to the method call send by SetPowered(). - // |callback| and |error_callback| are the callbacks passed to SetPowered(). - void OnSetPowered(const base::Closure& callback, - const ErrorCallback& error_callback, - bool success); - - // Updates the tracked state of the adapter's radio power to |powered| - // and notifies observers. Called on receipt of a property changed signal, - // and directly using values obtained from properties. - void PoweredChanged(bool powered); - - // Called by dbus:: in response to the method calls send by SetDiscovering(). - // |callback| and |error_callback| are the callbacks passed to - // SetDiscovering(). - void OnStartDiscovery(const base::Closure& callback, - const ErrorCallback& error_callback, - const dbus::ObjectPath& adapter_path, - bool success); - void OnStopDiscovery(const base::Closure& callback, - const ErrorCallback& error_callback, - const dbus::ObjectPath& adapter_path, - bool success); - - // Updates the tracked state of the adapter's discovering state to - // |discovering| and notifies observers. Called on receipt of a property - // changed signal, and directly using values obtained from properties. - void DiscoveringChanged(bool discovering); - - // Called by dbus:: in response to the ReadLocalData method call. - void OnReadLocalData(const BluetoothOutOfBandPairingDataCallback& callback, - const ErrorCallback& error_callback, - const BluetoothOutOfBandPairingData& data, - bool success); - - // BluetoothAdapterClient::Observer override. - // - // Called when the adapter with object path |adapter_path| has a - // change in value of the property named |property_name|. - virtual void AdapterPropertyChanged(const dbus::ObjectPath& adapter_path, - const std::string& property_name) - OVERRIDE; - - // BluetoothDeviceClient::Observer override. - // - // Called when the device with object path |device_path| has a - // change in value of the property named |property_name|. - virtual void DevicePropertyChanged(const dbus::ObjectPath& device_path, - const std::string& property_name) - OVERRIDE; - - // Updates information on the device with object path |device_path|, - // adding it to the |devices_| map if not already present. - void UpdateDevice(const dbus::ObjectPath& device_path); - - // Clears the |devices_| list, notifying obsevers of the device removal. - void ClearDevices(); - - // BluetoothAdapterClient::Observer override. - // - // Called when the adapter with object path |object_path| has a - // new known device with object path |object_path|. - virtual void DeviceCreated(const dbus::ObjectPath& adapter_path, - const dbus::ObjectPath& device_path) OVERRIDE; - - // BluetoothAdapterClient::Observer override. - // - // Called when the adapter with object path |object_path| removes - // the known device with object path |object_path|. - virtual void DeviceRemoved(const dbus::ObjectPath& adapter_path, - const dbus::ObjectPath& device_path) OVERRIDE; - - // Updates the adapter |devices_| list, adding or updating devices using - // the object paths in the|devices| list. This doesn't remove devices, - // relying instead on the DeviceRemoved() signal for that. Called on - // receipt of a property changed signal, and directly using values obtained - // from properties. - void DevicesChanged(const std::vector<dbus::ObjectPath>& devices); - - // Clears discovered devices from the |devices_| list, notifying - // observers, and leaving only those devices with a dbus object path. - void ClearDiscoveredDevices(); - - // BluetoothAdapterClient::Observer override. - // - // Called when the adapter with object path |object_path| discovers - // a new remote device with address |address| and properties - // |properties|, there is no device object path until connected. - // - // |properties| supports only value() calls, not Get() or Set(), and - // should be copied if needed. - virtual void DeviceFound( - const dbus::ObjectPath& adapter_path, - const std::string& address, - const BluetoothDeviceClient::Properties& properties) OVERRIDE; - - // BluetoothAdapterClient::Observer override. - // - // Called when the adapter with object path |object_path| can no - // longer communicate with the discovered removed device with - // address |address|. - virtual void DeviceDisappeared(const dbus::ObjectPath& object_path, - const std::string& address) OVERRIDE; - - // List of observers interested in event notifications from us. - ObserverList<BluetoothAdapter::Observer> observers_; - - // Object path of adapter for this instance, this is fixed at creation time - // unless |track_default_| is true in which case we update it to always - // point at the default adapter. - bool track_default_; - dbus::ObjectPath object_path_; - - // Tracked adapter state, cached locally so we only send change notifications - // to observers on a genuine change. - bool powered_; - bool discovering_; - - // Devices paired with, connected to, discovered by, or visible to the - // adapter. The key is the Bluetooth address of the device and the value - // is the BluetoothDeviceChromeOs object whose lifetime is managed by the - // adapter instance. - typedef std::map<const std::string, BluetoothDeviceChromeOs*> DevicesMap; - DevicesMap devices_; - - // Note: This should remain the last member so it'll be destroyed and - // invalidate its weak pointers before any other members are destroyed. - base::WeakPtrFactory<BluetoothAdapterChromeOs> weak_ptr_factory_; - - DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterChromeOs); -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_ diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos_unittest.cc b/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos_unittest.cc deleted file mode 100644 index d909559..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos_unittest.cc +++ /dev/null @@ -1,1553 +0,0 @@ -// Copyright (c) 2012 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/chromeos/bluetooth/bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.h" -#include "chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h" -#include "chromeos/dbus/mock_bluetooth_adapter_client.h" -#include "chromeos/dbus/mock_bluetooth_manager_client.h" -#include "chromeos/dbus/mock_dbus_thread_manager.h" -#include "dbus/object_path.h" -#include "testing/gtest/include/gtest/gtest.h" - -using ::testing::_; -using ::testing::InSequence; -using ::testing::Return; -using ::testing::SaveArg; - -namespace chromeos { - -class BluetoothAdapterChromeOsTest : public testing::Test { - public: - virtual void SetUp() { - MockDBusThreadManager* mock_dbus_thread_manager = new MockDBusThreadManager; - - EXPECT_CALL(*mock_dbus_thread_manager, GetSystemBus()) - .WillRepeatedly(Return(reinterpret_cast<dbus::Bus*>(NULL))); - DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager); - - mock_manager_client_ = - mock_dbus_thread_manager->mock_bluetooth_manager_client(); - mock_adapter_client_ = - mock_dbus_thread_manager->mock_bluetooth_adapter_client(); - - set_callback_called_ = false; - error_callback_called_ = false; - } - - virtual void TearDown() { - DBusThreadManager::Shutdown(); - } - - void SetCallback() { - set_callback_called_ = true; - } - - void ErrorCallback() { - error_callback_called_ = true; - } - - protected: - MockBluetoothManagerClient* mock_manager_client_; - MockBluetoothAdapterClient* mock_adapter_client_; - - bool set_callback_called_; - bool error_callback_called_; -}; - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterNotPresent) { - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; make out it failed. - // BluetoothAdapter::Observer::AdapterPresentChanged must not be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), _)) - .Times(0); - - adapter_callback.Run(dbus::ObjectPath(""), false); - - // Adapter should not be present. - EXPECT_FALSE(adapter->IsPresent()); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterWithAddress) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - // BluetoothAdapter::Observer::AdapterPresentChanged will be called to - // indicate the adapter is now present. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - adapter_callback.Run(adapter_path, true); - - // Adapter should be present with the given address. - EXPECT_TRUE(adapter->IsPresent()); - EXPECT_EQ(adapter_address, adapter->address()); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterWithoutAddress) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - // BluetoothAdapter::Observer::AdapterPresentChanged must not be called - // yet. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), _)) - .Times(0); - - adapter_callback.Run(adapter_path, true); - - // Adapter should not be present yet. - EXPECT_FALSE(adapter->IsPresent()); - - // Tell the adapter the address now; - // BluetoothAdapter::Observer::AdapterPresentChanged now must be called. - adapter_properties.address.ReplaceValue(adapter_address); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.address.name()); - - // Adapter should be present with the given address. - EXPECT_TRUE(adapter->IsPresent()); - EXPECT_EQ(adapter_address, adapter->address()); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterBecomesPresentWithAddress) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; make out it failed. - adapter_callback.Run(dbus::ObjectPath(""), false); - - // Tell the adapter the default adapter changed; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - // BluetoothAdapter::Observer::AdapterPresentChanged must be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->DefaultAdapterChanged(adapter_path); - - // Adapter should be present with the new address. - EXPECT_TRUE(adapter->IsPresent()); - EXPECT_EQ(adapter_address, adapter->address()); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterReplacedWithAddress) { - const dbus::ObjectPath initial_adapter_path("/fake/hci0"); - const dbus::ObjectPath new_adapter_path("/fake/hci1"); - const std::string initial_adapter_address = "CA:FE:4A:C0:FE:FE"; - const std::string new_adapter_address = "BA:C0:11:CO:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties initial_adapter_properties; - initial_adapter_properties.address.ReplaceValue(initial_adapter_address); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(initial_adapter_path)) - .WillRepeatedly(Return(&initial_adapter_properties)); - - adapter_callback.Run(initial_adapter_path, true); - - // Tell the adapter the default adapter changed; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties new_adapter_properties; - new_adapter_properties.address.ReplaceValue(new_adapter_address); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(new_adapter_path)) - .WillRepeatedly(Return(&new_adapter_properties)); - - // BluetoothAdapter::Observer::AdapterPresentChanged must be called once - // with false to indicate the old adapter being removed and once with true - // to announce the new adapter. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) - .Times(1); - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->DefaultAdapterChanged(new_adapter_path); - - // Adapter should be present with the new address. - EXPECT_TRUE(adapter->IsPresent()); - EXPECT_EQ(new_adapter_address, adapter->address()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterBecomesPresentWithoutAddress) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; make out it failed. - adapter_callback.Run(dbus::ObjectPath(""), false); - - // Tell the adapter the default adapter changed; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - // BluetoothAdapter::Observer::AdapterPresentChanged must not be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), _)) - .Times(0); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->DefaultAdapterChanged(adapter_path); - - // Adapter should not be present yet. - EXPECT_FALSE(adapter->IsPresent()); - - // Tell the adapter the address now; - // BluetoothAdapter::Observer::AdapterPresentChanged now must be called. - adapter_properties.address.ReplaceValue(adapter_address); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.address.name()); - - // Adapter should be present with the new address. - EXPECT_TRUE(adapter->IsPresent()); - EXPECT_EQ(adapter_address, adapter->address()); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterReplacedWithoutAddress) { - const dbus::ObjectPath initial_adapter_path("/fake/hci0"); - const dbus::ObjectPath new_adapter_path("/fake/hci1"); - const std::string initial_adapter_address = "CA:FE:4A:C0:FE:FE"; - const std::string new_adapter_address = "BA:C0:11:CO:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties initial_adapter_properties; - initial_adapter_properties.address.ReplaceValue(initial_adapter_address); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(initial_adapter_path)) - .WillRepeatedly(Return(&initial_adapter_properties)); - - adapter_callback.Run(initial_adapter_path, true); - - // Tell the adapter the default adapter changed; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties new_adapter_properties; - - EXPECT_CALL(*mock_adapter_client_, GetProperties(new_adapter_path)) - .WillRepeatedly(Return(&new_adapter_properties)); - - // BluetoothAdapter::Observer::AdapterPresentChanged must be called to - // indicate the adapter has gone away. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) - .Times(1); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->DefaultAdapterChanged(new_adapter_path); - - // Adapter should be now marked not present. - EXPECT_FALSE(adapter->IsPresent()); - - // Tell the adapter the address now; - // BluetoothAdapter::Observer::AdapterPresentChanged now must be called. - new_adapter_properties.address.ReplaceValue(new_adapter_address); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(new_adapter_path, - new_adapter_properties.address.name()); - - // Adapter should be present with the new address. - EXPECT_TRUE(adapter->IsPresent()); - EXPECT_EQ(new_adapter_address, adapter->address()); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterRemoved) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Report that the adapter has been removed; - // BluetoothAdapter::Observer::AdapterPresentChanged will be called to - // indicate the adapter is no longer present. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) - .Times(1); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->AdapterRemoved(adapter_path); - - // Adapter should be no longer present. - EXPECT_FALSE(adapter->IsPresent()); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterWithoutAddressRemoved) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Report that the adapter has been removed; - // BluetoothAdapter::Observer::AdapterPresentChanged must not be called - // since we never should have announced it in the first place. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), _)) - .Times(0); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->AdapterRemoved(adapter_path); - - // Adapter should be still no longer present. - EXPECT_FALSE(adapter->IsPresent()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterPoweredPropertyInitiallyFalse) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - adapter_properties.powered.ReplaceValue(false); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Adapter should have the correct property value. - EXPECT_FALSE(adapter->IsPowered()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterPoweredPropertyInitiallyTrue) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - adapter_properties.powered.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - // BluetoothAdapter::Observer::AdapterPoweredChanged will be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), true)) - .Times(1); - - adapter_callback.Run(adapter_path, true); - - // Adapter should have the correct property value. - EXPECT_TRUE(adapter->IsPowered()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterPoweredPropertyInitiallyTrueWithoutAddress) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set but BluetoothAdapter::Observer::AdapterPoweredChanged - // should not yet be called. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.powered.ReplaceValue(true); - - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), _)) - .Times(0); - - adapter_callback.Run(adapter_path, true); - - // Adapter should not yet have the property value. - EXPECT_FALSE(adapter->IsPowered()); - - // Tell the adapter the address now, - // BluetoothAdapter::Observer::AdapterPresentChanged and - // BluetoothAdapter::Observer::AdapterPoweredChanged now must be called. - adapter_properties.address.ReplaceValue(adapter_address); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), true)) - .Times(1); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.address.name()); - - // Adapter should have the correct property value. - EXPECT_TRUE(adapter->IsPowered()); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterPoweredPropertyChanged) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - adapter_properties.powered.ReplaceValue(false); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Adapter should have the correct property value. - EXPECT_FALSE(adapter->IsPowered()); - - // Report that the property has been changed; - // BluetoothAdapter::Observer::AdapterPoweredChanged will be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), true)) - .Times(1); - - adapter_properties.powered.ReplaceValue(true); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.powered.name()); - - // Adapter should have the new property values. - EXPECT_TRUE(adapter->IsPowered()); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterPoweredPropertyUnchanged) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - adapter_properties.powered.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Adapter should have the correct property value. - EXPECT_TRUE(adapter->IsPowered()); - - // Report that the property has been changed, but don't change the value; - // BluetoothAdapter::Observer::AdapterPoweredChanged should not be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), _)) - .Times(0); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.powered.name()); - - // Adapter should still have the same property values. - EXPECT_TRUE(adapter->IsPowered()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterPoweredPropertyChangedWithoutAddress) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set but BluetoothAdapter::Observer::AdapterPoweredChanged - // should not yet be called. - MockBluetoothAdapterClient::Properties adapter_properties; - - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), _)) - .Times(0); - - adapter_callback.Run(adapter_path, true); - - // Tell the adapter that its powered property changed, the observer - // method should still not be called because there is no address for - // the adapter so it is not present. - adapter_properties.powered.ReplaceValue(true); - - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), _)) - .Times(0); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.powered.name()); - - // Adapter should not yet have the property value. - EXPECT_FALSE(adapter->IsPowered()); - - // Tell the adapter the address now, - // BluetoothAdapter::Observer::AdapterPresentChanged and - // BluetoothAdapter::Observer::AdapterPoweredChanged now must be called. - adapter_properties.address.ReplaceValue(adapter_address); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), true)) - .Times(1); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.address.name()); - - // Adapter should now have the correct property value. - EXPECT_TRUE(adapter->IsPowered()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterPoweredPropertyResetOnReplace) { - const dbus::ObjectPath initial_adapter_path("/fake/hci0"); - const dbus::ObjectPath new_adapter_path("/fake/hci1"); - const std::string initial_adapter_address = "CA:FE:4A:C0:FE:FE"; - const std::string new_adapter_address = "00:C0:11:CO:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties initial_adapter_properties; - initial_adapter_properties.address.ReplaceValue(initial_adapter_address); - initial_adapter_properties.powered.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(initial_adapter_path)) - .WillRepeatedly(Return(&initial_adapter_properties)); - - adapter_callback.Run(initial_adapter_path, true); - - // Tell the adapter the default adapter changed; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties new_adapter_properties; - new_adapter_properties.address.ReplaceValue(new_adapter_address); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(new_adapter_path)) - .WillRepeatedly(Return(&new_adapter_properties)); - - // BluetoothAdapter::Observer::AdapterPoweredChanged will be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - { - InSequence s; - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) - .Times(1); - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - } - - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), false)) - .Times(1); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->DefaultAdapterChanged(new_adapter_path); - - // Adapter should have the new property value. - EXPECT_FALSE(adapter->IsPowered()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterPoweredPropertyResetOnReplaceWhenTrue) { - const dbus::ObjectPath initial_adapter_path("/fake/hci0"); - const dbus::ObjectPath new_adapter_path("/fake/hci1"); - const std::string initial_adapter_address = "CA:FE:4A:C0:FE:FE"; - const std::string new_adapter_address = "BA:C0:11:CO:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties initial_adapter_properties; - initial_adapter_properties.address.ReplaceValue(initial_adapter_address); - initial_adapter_properties.powered.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(initial_adapter_path)) - .WillRepeatedly(Return(&initial_adapter_properties)); - - adapter_callback.Run(initial_adapter_path, true); - - // Tell the adapter the default adapter changed; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties new_adapter_properties; - new_adapter_properties.address.ReplaceValue(new_adapter_address); - new_adapter_properties.powered.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(new_adapter_path)) - .WillRepeatedly(Return(&new_adapter_properties)); - - // BluetoothAdapter::Observer::AdapterPoweredChanged will be called once - // to set the value to false for the previous adapter and once to set the - // value to true for the new adapter. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - { - InSequence s; - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) - .Times(1); - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - } - - { - InSequence s; - - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), false)) - .Times(1); - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), true)) - .Times(1); - } - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->DefaultAdapterChanged(new_adapter_path); - - // Adapter should have the new property value. - EXPECT_TRUE(adapter->IsPowered()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterPoweredPropertyResetOnRemove) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - adapter_properties.powered.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Report that the adapter has been removed; - // BluetoothAdapter::Observer::AdapterPoweredChanged will be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) - .Times(1); - EXPECT_CALL(adapter_observer, AdapterPoweredChanged(adapter.get(), false)) - .Times(1); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->AdapterRemoved(adapter_path); - - // Adapter should have the new property value. - EXPECT_FALSE(adapter->IsPowered()); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterSetPowered) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Request that the powered property be changed; - // MockBluetoothAdapterClient::Set should be called, passing the address - // of the powered property and a callback to receive the response. - dbus::PropertySet::SetCallback set_callback; - EXPECT_CALL(adapter_properties, Set(&adapter_properties.powered, _)) - .WillOnce(SaveArg<1>(&set_callback)); - - adapter->SetPowered(true, - base::Bind(&BluetoothAdapterChromeOsTest::SetCallback, - base::Unretained(this)), - base::Bind(&BluetoothAdapterChromeOsTest::ErrorCallback, - base::Unretained(this))); - - // Reply to the callback to indicate success, the set callback we provided - // should be called but the properties should not be refetched. - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .Times(0); - - set_callback.Run(true); - - EXPECT_TRUE(set_callback_called_); - EXPECT_FALSE(error_callback_called_); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterSetPoweredError) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Request that the powered property be changed; - // MockBluetoothAdapterClient::Set should be called, passing the address - // of the powered property and a callback to receive the response. - dbus::PropertySet::SetCallback set_callback; - EXPECT_CALL(adapter_properties, Set(&adapter_properties.powered, _)) - .WillOnce(SaveArg<1>(&set_callback)); - - adapter->SetPowered(true, - base::Bind(&BluetoothAdapterChromeOsTest::SetCallback, - base::Unretained(this)), - base::Bind(&BluetoothAdapterChromeOsTest::ErrorCallback, - base::Unretained(this))); - - // Reply to the callback to indicate failure, the error callback we provided - // should be called but the properties should not be refetched. - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .Times(0); - - set_callback.Run(false); - - EXPECT_FALSE(set_callback_called_); - EXPECT_TRUE(error_callback_called_); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterDiscoveringPropertyInitiallyFalse) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - adapter_properties.discovering.ReplaceValue(false); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Adapter should have the correct property value. - EXPECT_FALSE(adapter->IsDiscovering()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterDiscoveringPropertyInitiallyTrue) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - adapter_properties.discovering.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - // BluetoothAdapter::Observer::AdapterDiscoveringChanged will be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), true)) - .Times(1); - - adapter_callback.Run(adapter_path, true); - - // Adapter should have the correct property value. - EXPECT_TRUE(adapter->IsDiscovering()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterDiscoveringPropertyInitiallyTrueWithoutAddress) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set but BluetoothAdapter::Observer::AdapterDiscoveringChanged - // should not yet be called. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.discovering.ReplaceValue(true); - - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), _)) - .Times(0); - - adapter_callback.Run(adapter_path, true); - - // Adapter should not yet have the property value. - EXPECT_FALSE(adapter->IsDiscovering()); - - // Tell the adapter the address now, - // BluetoothAdapter::Observer::AdapterPresentChanged and - // BluetoothAdapter::Observer::AdapterDiscoveringChanged now must be called. - adapter_properties.address.ReplaceValue(adapter_address); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), true)) - .Times(1); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.address.name()); - - // Adapter should have the correct property value. - EXPECT_TRUE(adapter->IsDiscovering()); -} - -TEST_F(BluetoothAdapterChromeOsTest, DefaultAdapterDiscoveringPropertyChanged) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - adapter_properties.discovering.ReplaceValue(false); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Adapter should have the correct property value. - EXPECT_FALSE(adapter->IsDiscovering()); - - // Report that the property has been changed; - // BluetoothAdapter::Observer::AdapterDiscoveringChanged will be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), true)) - .Times(1); - - adapter_properties.discovering.ReplaceValue(true); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.discovering.name()); - - // Adapter should have the new property values. - EXPECT_TRUE(adapter->IsDiscovering()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterDiscoveringPropertyUnchanged) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - adapter_properties.discovering.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Adapter should have the correct property value. - EXPECT_TRUE(adapter->IsDiscovering()); - - // Report that the property has been changed, but don't change the value; - // BluetoothAdapter::Observer::AdapterDiscoveringChanged should not be - // called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), _)) - .Times(0); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.discovering.name()); - - // Adapter should still have the same property values. - EXPECT_TRUE(adapter->IsDiscovering()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterDiscoveringPropertyChangedWithoutAddress) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set but BluetoothAdapter::Observer::AdapterDiscoveringChanged - // should not yet be called. - MockBluetoothAdapterClient::Properties adapter_properties; - - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), _)) - .Times(0); - - adapter_callback.Run(adapter_path, true); - - // Tell the adapter that its discovering property changed, the observer - // method should still not be called because there is no address for - // the adapter so it is not present. - adapter_properties.discovering.ReplaceValue(true); - - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), _)) - .Times(0); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.discovering.name()); - - // Adapter should not yet have the property value. - EXPECT_FALSE(adapter->IsDiscovering()); - - // Tell the adapter the address now, - // BluetoothAdapter::Observer::AdapterPresentChanged and - // BluetoothAdapter::Observer::AdapterDiscoveringChanged now must be called. - adapter_properties.address.ReplaceValue(adapter_address); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), true)) - .Times(1); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->AdapterPropertyChanged(adapter_path, - adapter_properties.address.name()); - - // Adapter should now have the correct property value. - EXPECT_TRUE(adapter->IsDiscovering()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterDiscoveringPropertyResetOnReplace) { - const dbus::ObjectPath initial_adapter_path("/fake/hci0"); - const dbus::ObjectPath new_adapter_path("/fake/hci1"); - const std::string initial_adapter_address = "CA:FE:4A:C0:FE:FE"; - const std::string new_adapter_address = "BA:C0:11:CO:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties initial_adapter_properties; - initial_adapter_properties.address.ReplaceValue(initial_adapter_address); - initial_adapter_properties.discovering.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(initial_adapter_path)) - .WillRepeatedly(Return(&initial_adapter_properties)); - - adapter_callback.Run(initial_adapter_path, true); - - // Tell the adapter the default adapter changed; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties new_adapter_properties; - new_adapter_properties.address.ReplaceValue(new_adapter_address); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(new_adapter_path)) - .WillRepeatedly(Return(&new_adapter_properties)); - - // BluetoothAdapter::Observer::AdapterDiscoveringChanged will be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - { - InSequence s; - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) - .Times(1); - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - } - - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), false)) - .Times(1); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->DefaultAdapterChanged(new_adapter_path); - - // Adapter should have the new property value. - EXPECT_FALSE(adapter->IsDiscovering()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterDiscoveringPropertyResetOnReplaceWhenTrue) { - const dbus::ObjectPath initial_adapter_path("/fake/hci0"); - const dbus::ObjectPath new_adapter_path("/fake/hci1"); - const std::string initial_adapter_address = "CA:FE:4A:C0:FE:FE"; - const std::string new_adapter_address = "BA:C0:11:CO:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties initial_adapter_properties; - initial_adapter_properties.address.ReplaceValue(initial_adapter_address); - initial_adapter_properties.discovering.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(initial_adapter_path)) - .WillRepeatedly(Return(&initial_adapter_properties)); - - adapter_callback.Run(initial_adapter_path, true); - - // Tell the adapter the default adapter changed; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties new_adapter_properties; - new_adapter_properties.address.ReplaceValue(new_adapter_address); - new_adapter_properties.discovering.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(new_adapter_path)) - .WillRepeatedly(Return(&new_adapter_properties)); - - // BluetoothAdapter::Observer::AdapterDiscoveringChanged will be called once - // to set the value to false for the previous adapter and once to set the - // value to true for the new adapter. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - { - InSequence s; - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) - .Times(1); - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), true)) - .Times(1); - } - - { - InSequence s; - - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), - false)) - .Times(1); - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), - true)) - .Times(1); - } - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->DefaultAdapterChanged(new_adapter_path); - - // Adapter should have the new property value. - EXPECT_TRUE(adapter->IsDiscovering()); -} - -TEST_F(BluetoothAdapterChromeOsTest, - DefaultAdapterDiscoveringPropertyResetOnRemove) { - const dbus::ObjectPath adapter_path("/fake/hci0"); - const std::string adapter_address = "CA:FE:4A:C0:FE:FE"; - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - scoped_refptr<BluetoothAdapter> adapter = - BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address); - adapter_properties.discovering.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path)) - .WillRepeatedly(Return(&adapter_properties)); - - adapter_callback.Run(adapter_path, true); - - // Report that the adapter has been removed; - // BluetoothAdapter::Observer::AdapterDiscoveringChanged will be called. - MockBluetoothAdapter::Observer adapter_observer; - adapter->AddObserver(&adapter_observer); - - EXPECT_CALL(adapter_observer, AdapterPresentChanged(adapter.get(), false)) - .Times(1); - EXPECT_CALL(adapter_observer, AdapterDiscoveringChanged(adapter.get(), false)) - .Times(1); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter.get()); - - static_cast<BluetoothManagerClient::Observer*>(adapter_chromeos) - ->AdapterRemoved(adapter_path); - - // Adapter should have the new property value. - EXPECT_FALSE(adapter->IsDiscovering()); -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_devices_chromeos_unittest.cc b/chrome/browser/chromeos/bluetooth/bluetooth_adapter_devices_chromeos_unittest.cc deleted file mode 100644 index d1c1805..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_devices_chromeos_unittest.cc +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (c) 2012 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/chromeos/bluetooth/bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.h" -#include "chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h" -#include "chromeos/dbus/mock_bluetooth_adapter_client.h" -#include "chromeos/dbus/mock_bluetooth_device_client.h" -#include "chromeos/dbus/mock_bluetooth_manager_client.h" -#include "chromeos/dbus/mock_dbus_thread_manager.h" -#include "dbus/object_path.h" -#include "testing/gtest/include/gtest/gtest.h" - -using ::testing::_; -using ::testing::Mock; -using ::testing::Return; -using ::testing::SaveArg; - -namespace chromeos { - -class BluetoothAdapterDevicesChromeOsTest : public testing::Test { - public: - virtual void SetUp() { - MockDBusThreadManager* mock_dbus_thread_manager = new MockDBusThreadManager; - - EXPECT_CALL(*mock_dbus_thread_manager, GetSystemBus()) - .WillRepeatedly(Return(reinterpret_cast<dbus::Bus*>(NULL))); - DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager); - - mock_manager_client_ = - mock_dbus_thread_manager->mock_bluetooth_manager_client(); - mock_adapter_client_ = - mock_dbus_thread_manager->mock_bluetooth_adapter_client(); - mock_device_client_ = - mock_dbus_thread_manager->mock_bluetooth_device_client(); - - // Create the default adapter instance; - // BluetoothManagerClient::DefaultAdapter will be called once, passing - // a callback to obtain the adapter path. - BluetoothManagerClient::AdapterCallback adapter_callback; - EXPECT_CALL(*mock_manager_client_, DefaultAdapter(_)) - .WillOnce(SaveArg<0>(&adapter_callback)); - - EXPECT_CALL(*mock_manager_client_, AddObserver(_)) - .Times(1); - EXPECT_CALL(*mock_adapter_client_, AddObserver(_)) - .Times(1); - - adapter_ = BluetoothAdapterFactory::DefaultAdapter(); - - // Call the adapter callback; - // BluetoothAdapterClient::GetProperties will be called once to obtain - // the property set. - MockBluetoothAdapterClient::Properties adapter_properties; - adapter_properties.address.ReplaceValue(adapter_address_); - adapter_properties.powered.ReplaceValue(true); - - EXPECT_CALL(*mock_adapter_client_, GetProperties(adapter_path_)) - .WillRepeatedly(Return(&adapter_properties)); - - // Add an observer to the adapter; expect the usual set of changes to - // an adapter becoming present and then clear to clean up for the test. - adapter_->AddObserver(&adapter_observer_); - - EXPECT_CALL(adapter_observer_, AdapterPresentChanged(adapter_.get(), true)) - .Times(1); - EXPECT_CALL(adapter_observer_, AdapterPoweredChanged(adapter_.get(), true)) - .Times(1); - - adapter_callback.Run(adapter_path_, true); - - Mock::VerifyAndClearExpectations(mock_manager_client_); - Mock::VerifyAndClearExpectations(mock_adapter_client_); - Mock::VerifyAndClearExpectations(mock_device_client_); - Mock::VerifyAndClearExpectations(&adapter_observer_); - } - - virtual void TearDown() { - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter_.get()); - EXPECT_CALL(*mock_device_client_, RemoveObserver(adapter_chromeos)) - .Times(1); - EXPECT_CALL(*mock_adapter_client_, RemoveObserver(adapter_chromeos)) - .Times(1); - EXPECT_CALL(*mock_manager_client_, RemoveObserver(adapter_chromeos)) - .Times(1); - - adapter_ = NULL; - DBusThreadManager::Shutdown(); - } - - protected: - MockBluetoothManagerClient* mock_manager_client_; - MockBluetoothAdapterClient* mock_adapter_client_; - MockBluetoothDeviceClient* mock_device_client_; - - static const dbus::ObjectPath adapter_path_; - static const std::string adapter_address_; - scoped_refptr<BluetoothAdapter> adapter_; - - MockBluetoothAdapter::Observer adapter_observer_; -}; - -const dbus::ObjectPath BluetoothAdapterDevicesChromeOsTest::adapter_path_( - "/fake/hci0"); -const std::string BluetoothAdapterDevicesChromeOsTest::adapter_address_ = - "CA:FE:4A:C0:FE:FE"; - -TEST_F(BluetoothAdapterDevicesChromeOsTest, DeviceRemovedAfterFound) { - const dbus::ObjectPath device_path("/fake/hci0/dev_ba_c0_11_00_00_01"); - const std::string device_address = "BA:C0:11:00:00:01"; - - MockBluetoothDeviceClient::Properties device_properties; - device_properties.address.ReplaceValue(device_address); - device_properties.name.ReplaceValue("Fake Keyboard"); - device_properties.bluetooth_class.ReplaceValue(0x2540); - - // Inform the adapter that the device has been found; - // BluetoothAdapterClient::Observer::DeviceAdded will be called, passing - // the device object. - BluetoothDevice* device; - EXPECT_CALL(adapter_observer_, DeviceAdded(adapter_.get(), _)) - .Times(1) - .WillOnce(SaveArg<1>(&device)); - - BluetoothAdapterChromeOs* adapter_chromeos = - static_cast<BluetoothAdapterChromeOs*>(adapter_.get()); - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->DeviceFound(adapter_path_, device_address, device_properties); - - // Now inform the adapter that the device has been added and assigned an - // object path; BluetoothDeviceClient::GetProperties will be called to - // obtain the property set; and - // BluetoothAdapterClient::Observer::DeviceChanged will be called passing - // the same device object as before. - EXPECT_CALL(*mock_device_client_, GetProperties(device_path)) - .WillRepeatedly(Return(&device_properties)); - - EXPECT_CALL(adapter_observer_, DeviceChanged(adapter_chromeos, device)) - .Times(1); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->DeviceCreated(adapter_path_, device_path); - - // Finally remove the adapter again; - // BluetoothAdapterClient::Observer::DeviceRemoved should be not called, - // instead BluetoothAdapterClient::Observer::DeviceChanged will be called. - EXPECT_CALL(adapter_observer_, DeviceRemoved(adapter_.get(), device)) - .Times(0); - EXPECT_CALL(adapter_observer_, DeviceChanged(adapter_.get(), device)) - .Times(1); - - static_cast<BluetoothAdapterClient::Observer*>(adapter_chromeos) - ->DeviceRemoved(adapter_path_, device_path); - - // Verify that the device is still visible, just no longer paired. - EXPECT_TRUE(device->IsVisible()); - EXPECT_FALSE(device->IsPaired()); -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.cc b/chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.cc deleted file mode 100644 index eb62622..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.cc +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2012 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. -// -// TODO(youngki): Guard the ChromeOS specific part with "#ifdef CHROME_OS" block -// once we move this code into common directory. - -#include "base/lazy_instance.h" -#include "base/memory/ref_counted.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.h" - -namespace { - -// Shared default adapter instance, we don't want to keep this class around -// if nobody is using it so use a WeakPtr and create the object when needed; -// since Google C++ Style (and clang's static analyzer) forbids us having -// exit-time destructors we use a leaky lazy instance for it. -base::LazyInstance<base::WeakPtr<chromeos::BluetoothAdapter> >::Leaky - default_adapter = LAZY_INSTANCE_INITIALIZER; - -} // namespace - -namespace chromeos { - -// static -scoped_refptr<BluetoothAdapter> BluetoothAdapterFactory::DefaultAdapter() { - if (!default_adapter.Get().get()) { - BluetoothAdapterChromeOs* new_adapter = new BluetoothAdapterChromeOs; - new_adapter->TrackDefaultAdapter(); - default_adapter.Get() = new_adapter->weak_ptr_factory_.GetWeakPtr(); - } - - return scoped_refptr<BluetoothAdapter>(default_adapter.Get()); -} - -// static -BluetoothAdapter* BluetoothAdapterFactory::Create(const std::string& address) { - BluetoothAdapterChromeOs* adapter = new BluetoothAdapterChromeOs; - adapter->FindAdapter(address); - return adapter; -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.h b/chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.h deleted file mode 100644 index 0cd4b24..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_FACTORY_H_ -#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_FACTORY_H_ - -#include <string> - -#include "base/memory/ref_counted.h" - -namespace chromeos { - -class BluetoothAdapter; - -// BluetoothAdapterFactory is a class that contains static methods, which -// instantiate either a specific bluetooth adapter, or the generic "default -// adapter" which may change depending on availability. -class BluetoothAdapterFactory { - public: - // Returns the shared instance for the default adapter, whichever that may - // be at the time. Use IsPresent() and the AdapterPresentChanged() observer - // method to determine whether an adapter is actually available or not. - static scoped_refptr<BluetoothAdapter> DefaultAdapter(); - - // Creates an instance for a specific adapter at address |address|. - static BluetoothAdapter* Create(const std::string& address); -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_FACTORY_H_ diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_device.cc b/chrome/browser/chromeos/bluetooth/bluetooth_device.cc deleted file mode 100644 index f91189a..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_device.cc +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright (c) 2012 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/chromeos/bluetooth/bluetooth_device.h" - -#include "base/utf_string_conversions.h" -#include "grit/generated_resources.h" -#include "ui/base/l10n/l10n_util.h" - -namespace chromeos { - -BluetoothDevice::BluetoothDevice() - : bluetooth_class_(0), - visible_(false), - bonded_(false), - connected_(false) { -} - -BluetoothDevice::~BluetoothDevice() { -} - -const std::string& BluetoothDevice::address() const { - return address_; -} - -string16 BluetoothDevice::GetName() const { - if (!name_.empty()) { - return UTF8ToUTF16(name_); - } else { - return GetAddressWithLocalizedDeviceTypeName(); - } -} - -string16 BluetoothDevice::GetAddressWithLocalizedDeviceTypeName() const { - string16 address = UTF8ToUTF16(address_); - BluetoothDevice::DeviceType device_type = GetDeviceType(); - switch (device_type) { - case DEVICE_COMPUTER: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_COMPUTER, - address); - case DEVICE_PHONE: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_PHONE, - address); - case DEVICE_MODEM: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_MODEM, - address); - case DEVICE_AUDIO: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_AUDIO, - address); - case DEVICE_CAR_AUDIO: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_CAR_AUDIO, - address); - case DEVICE_VIDEO: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_VIDEO, - address); - case DEVICE_JOYSTICK: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_JOYSTICK, - address); - case DEVICE_GAMEPAD: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_GAMEPAD, - address); - case DEVICE_KEYBOARD: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_KEYBOARD, - address); - case DEVICE_MOUSE: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_MOUSE, - address); - case DEVICE_TABLET: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_TABLET, - address); - case DEVICE_KEYBOARD_MOUSE_COMBO: - return l10n_util::GetStringFUTF16( - IDS_BLUETOOTH_DEVICE_KEYBOARD_MOUSE_COMBO, address); - default: - return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_UNKNOWN, address); - } -} - -BluetoothDevice::DeviceType BluetoothDevice::GetDeviceType() const { - // https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm - switch ((bluetooth_class_ & 0x1f00) >> 8) { - case 0x01: - // Computer major device class. - return DEVICE_COMPUTER; - case 0x02: - // Phone major device class. - switch ((bluetooth_class_ & 0xfc) >> 2) { - case 0x01: - case 0x02: - case 0x03: - // Cellular, cordless and smart phones. - return DEVICE_PHONE; - case 0x04: - case 0x05: - // Modems: wired or voice gateway and common ISDN access. - return DEVICE_MODEM; - } - break; - case 0x04: - // Audio major device class. - switch ((bluetooth_class_ & 0xfc) >> 2) { - case 0x08: - // Car audio. - return DEVICE_CAR_AUDIO; - case 0x0b: - case 0x0c: - case 0x0d: - case 0x0e: - case 0x0f: - case 0x010: - // Video devices. - return DEVICE_VIDEO; - default: - return DEVICE_AUDIO; - } - break; - case 0x05: - // Peripheral major device class. - switch ((bluetooth_class_ & 0xc0) >> 6) { - case 0x00: - // "Not a keyboard or pointing device." - switch ((bluetooth_class_ & 0x01e) >> 2) { - case 0x01: - // Joystick. - return DEVICE_JOYSTICK; - case 0x02: - // Gamepad. - return DEVICE_GAMEPAD; - default: - return DEVICE_PERIPHERAL; - } - break; - case 0x01: - // Keyboard. - return DEVICE_KEYBOARD; - case 0x02: - // Pointing device. - switch ((bluetooth_class_ & 0x01e) >> 2) { - case 0x05: - // Digitizer tablet. - return DEVICE_TABLET; - default: - // Mouse. - return DEVICE_MOUSE; - } - break; - case 0x03: - // Combo device. - return DEVICE_KEYBOARD_MOUSE_COMBO; - } - break; - } - - return DEVICE_UNKNOWN; -} - -bool BluetoothDevice::IsVisible() const { - return visible_; -} - -bool BluetoothDevice::IsBonded() const { - return bonded_; -} - -bool BluetoothDevice::IsConnected() const { - return connected_; -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_device.h b/chrome/browser/chromeos/bluetooth/bluetooth_device.h deleted file mode 100644 index ddd4f80..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_device.h +++ /dev/null @@ -1,318 +0,0 @@ -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_DEVICE_H_ -#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_DEVICE_H_ - -#include <string> -#include <vector> - -#include "base/callback.h" -#include "base/string16.h" -#include "base/memory/ref_counted.h" - -namespace chromeos { - -class BluetoothServiceRecord; -class BluetoothSocket; - -struct BluetoothOutOfBandPairingData; - -// BluetoothDevice represents a remote Bluetooth device, both its properties and -// capabilities as discovered by a local adapter and actions that may be -// performed on the remove device such as pairing, connection and disconnection. -// -// The class is instantiated and managed by the BluetoothAdapter class -// and pointers should only be obtained from that class and not cached, -// instead use the address() method as a unique key for a device. -// -// Since the lifecycle of BluetoothDevice instances is managed by -// BluetoothAdapter, that class rather than this provides observer methods -// for devices coming and going, as well as properties being updated. -class BluetoothDevice { - public: - // Possible values that may be returned by GetDeviceType(), representing - // different types of bluetooth device that we support or are aware of - // decoded from the bluetooth class information. - enum DeviceType { - DEVICE_UNKNOWN, - DEVICE_COMPUTER, - DEVICE_PHONE, - DEVICE_MODEM, - DEVICE_AUDIO, - DEVICE_CAR_AUDIO, - DEVICE_VIDEO, - DEVICE_PERIPHERAL, - DEVICE_JOYSTICK, - DEVICE_GAMEPAD, - DEVICE_KEYBOARD, - DEVICE_MOUSE, - DEVICE_TABLET, - DEVICE_KEYBOARD_MOUSE_COMBO - }; - - // Interface for observing changes from bluetooth devices. - class Observer { - public: - virtual ~Observer() {} - - // TODO(keybuk): add observers for pairing and connection. - }; - - // Interface for negotiating pairing of bluetooth devices. - class PairingDelegate { - public: - virtual ~PairingDelegate() {} - - // This method will be called when the Bluetooth daemon requires a - // PIN Code for authentication of the device |device|, the delegate should - // obtain the code from the user and call SetPinCode() on the device to - // provide it, or RejectPairing() or CancelPairing() to reject or cancel - // the request. - // - // PIN Codes are generally required for Bluetooth 2.0 and earlier devices - // for which there is no automatic pairing or special handling. - virtual void RequestPinCode(BluetoothDevice* device) = 0; - - // This method will be called when the Bluetooth daemon requires a - // Passkey for authentication of the device |device|, the delegate should - // obtain the passkey from the user (a numeric in the range 0-999999) and - // call SetPasskey() on the device to provide it, or RejectPairing() or - // CancelPairing() to reject or cancel the request. - // - // Passkeys are generally required for Bluetooth 2.1 and later devices - // which cannot provide input or display on their own, and don't accept - // passkey-less pairing. - virtual void RequestPasskey(BluetoothDevice* device) = 0; - - // This method will be called when the Bluetooth daemon requires that the - // user enter the PIN code |pincode| into the device |device| so that it - // may be authenticated. The DismissDisplayOrConfirm() method - // will be called to dismiss the display once pairing is complete or - // cancelled. - // - // This is used for Bluetooth 2.0 and earlier keyboard devices, the - // |pincode| will always be a six-digit numeric in the range 000000-999999 - // for compatibilty with later specifications. - virtual void DisplayPinCode(BluetoothDevice* device, - const std::string& pincode) = 0; - - // This method will be called when the Bluetooth daemon requires that the - // user enter the Passkey |passkey| into the device |device| so that it - // may be authenticated. The DismissDisplayOrConfirm() method will be - // called to dismiss the display once pairing is complete or cancelled. - // - // This is used for Bluetooth 2.1 and later devices that support input - // but not display, such as keyboards. The Passkey is a numeric in the - // range 0-999999 and should be always presented zero-padded to six - // digits. - virtual void DisplayPasskey(BluetoothDevice* device, - uint32 passkey) = 0; - - // This method will be called when the Bluetooth daemon requires that the - // user confirm that the Passkey |passkey| is displayed on the screen - // of the device |device| so that it may be authenticated. The delegate - // should display to the user and ask for confirmation, then call - // ConfirmPairing() on the device to confirm, RejectPairing() on the device - // to reject or CancelPairing() on the device to cancel authentication - // for any other reason. - // - // This is used for Bluetooth 2.1 and later devices that support display, - // such as other computers or phones. The Passkey is a numeric in the - // range 0-999999 and should be always present zero-padded to six - // digits. - virtual void ConfirmPasskey(BluetoothDevice* device, - uint32 passkey) = 0; - - // This method will be called when any previous DisplayPinCode(), - // DisplayPasskey() or ConfirmPasskey() request should be concluded - // and removed from the user. - virtual void DismissDisplayOrConfirm() = 0; - }; - - virtual ~BluetoothDevice(); - - // Returns the Bluetooth of address the device. This should be used as - // a unique key to identify the device and copied where needed. - virtual const std::string& address() const; - - // Returns the name of the device suitable for displaying, this may - // be a synthesied string containing the address and localized type name - // if the device has no obtained name. - virtual string16 GetName() const; - - // Returns the type of the device, limited to those we support or are - // aware of, by decoding the bluetooth class information. The returned - // values are unique, and do not overlap, so DEVICE_KEYBOARD is not also - // DEVICE_PERIPHERAL. - DeviceType GetDeviceType() const; - - // Indicates whether the device is paired to the adapter, whether or not - // that pairing is permanent or temporary. - virtual bool IsPaired() const = 0; - - // Indicates whether the device is visible to the adapter, this is not - // mutually exclusive to being paired. - virtual bool IsVisible() const; - - // Indicates whether the device is bonded to the adapter, bonding is - // formed by pairing and exchanging high-security link keys so that - // connections may be encrypted. - virtual bool IsBonded() const; - - // Indicates whether the device is currently connected to the adapter - // and at least one service available for use. - virtual bool IsConnected() const; - - // Returns the services (as UUID strings) that this device provides. - typedef std::vector<std::string> ServiceList; - virtual const ServiceList& GetServices() const = 0; - - // The ErrorCallback is used for methods that can fail in which case it - // is called, in the success case the callback is simply not called. - typedef base::Callback<void()> ErrorCallback; - - // Returns the services (as BluetoothServiceRecord objects) that this device - // provides. - typedef ScopedVector<BluetoothServiceRecord> ServiceRecordList; - typedef base::Callback<void(const ServiceRecordList&)> ServiceRecordsCallback; - virtual void GetServiceRecords(const ServiceRecordsCallback& callback, - const ErrorCallback& error_callback) = 0; - - // Indicates whether this device provides the given service. |uuid| should - // be in canonical form (see bluetooth_utils::CanonicalUuid). - virtual bool ProvidesServiceWithUUID(const std::string& uuid) const = 0; - - // The ProvidesServiceCallback is used by ProvidesServiceWithName to indicate - // whether or not a matching service was found. - typedef base::Callback<void(bool)> ProvidesServiceCallback; - - // Indicates whether this device provides the given service. - virtual void ProvidesServiceWithName( - const std::string& name, - const ProvidesServiceCallback& callback) = 0; - - // Indicates whether the device is currently pairing and expecting a - // PIN Code to be returned. - virtual bool ExpectingPinCode() const = 0; - - // Indicates whether the device is currently pairing and expecting a - // Passkey to be returned. - virtual bool ExpectingPasskey() const = 0; - - // Indicates whether the device is currently pairing and expecting - // confirmation of a displayed passkey. - virtual bool ExpectingConfirmation() const = 0; - - // SocketCallback is used by ConnectToService to return a BluetoothSocket to - // the caller, or NULL if there was an error. The socket will remain open - // until the last reference to the returned BluetoothSocket is released. - typedef base::Callback<void(scoped_refptr<BluetoothSocket>)> - SocketCallback; - - // Initiates a connection to the device, pairing first if necessary. - // - // Method calls will be made on the supplied object |pairing_delegate| - // to indicate what display, and in response should make method calls - // back to the device object. Not all devices require user responses - // during pairing, so it is normal for |pairing_delegate| to receive no - // calls. To explicitly force a low-security connection without bonding, - // pass NULL, though this is ignored if the device is already paired. - // - // If the request fails, |error_callback| will be called; otherwise, - // |callback| is called when the request is complete. - virtual void Connect(PairingDelegate* pairing_delegate, - const base::Closure& callback, - const ErrorCallback& error_callback) = 0; - - // Sends the PIN code |pincode| to the remote device during pairing. - // - // PIN Codes are generally required for Bluetooth 2.0 and earlier devices - // for which there is no automatic pairing or special handling. - virtual void SetPinCode(const std::string& pincode) = 0; - - // Sends the Passkey |passkey| to the remote device during pairing. - // - // Passkeys are generally required for Bluetooth 2.1 and later devices - // which cannot provide input or display on their own, and don't accept - // passkey-less pairing, and are a numeric in the range 0-999999. - virtual void SetPasskey(uint32 passkey) = 0; - - // Confirms to the remote device during pairing that a passkey provided by - // the ConfirmPasskey() delegate call is displayed on both devices. - virtual void ConfirmPairing() = 0; - - // Rejects a pairing or connection request from a remote device. - virtual void RejectPairing() = 0; - - // Cancels a pairing or connection attempt to a remote device. - virtual void CancelPairing() = 0; - - // Disconnects the device, terminating the low-level ACL connection - // and any application connections using it. Link keys and other pairing - // information are not discarded, and the device object is not deleted. - // If the request fails, |error_callback| will be called; otherwise, - // |callback| is called when the request is complete. - virtual void Disconnect(const base::Closure& callback, - const ErrorCallback& error_callback) = 0; - - // Disconnects the device, terminating the low-level ACL connection - // and any application connections using it, and then discards link keys - // and other pairing information. The device object remainds valid until - // returing from the calling function, after which it should be assumed to - // have been deleted. If the request fails, |error_callback| will be called. - // There is no callback for success beause this object is often deleted - // before that callback would be called. - virtual void Forget(const ErrorCallback& error_callback) = 0; - - // Attempts to open a socket to a service matching |uuid| on this device. If - // the connection is successful, |callback| is called with a BluetoothSocket. - // Otherwise |callback| is called with NULL. The socket is closed as soon as - // all references to the BluetoothSocket are released. Note that the - // BluetoothSocket object can outlive both this BluetoothDevice and the - // BluetoothAdapter for this device. - virtual void ConnectToService(const std::string& service_uuid, - const SocketCallback& callback) = 0; - - // Sets the Out Of Band pairing data for this device to |data|. Exactly one - // of |callback| or |error_callback| will be run. - virtual void SetOutOfBandPairingData( - const BluetoothOutOfBandPairingData& data, - const base::Closure& callback, - const ErrorCallback& error_callback) = 0; - - // Clears the Out Of Band pairing data for this device. Exactly one of - // |callback| or |error_callback| will be run. - virtual void ClearOutOfBandPairingData( - const base::Closure& callback, - const ErrorCallback& error_callback) = 0; - - protected: - BluetoothDevice(); - - // The Bluetooth class of the device, a bitmask that may be decoded using - // https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm - uint32 bluetooth_class_; - - // The name of the device, as supplied by the remote device. - std::string name_; - - // The Bluetooth address of the device. - std::string address_; - - // Tracked device state, updated by the adapter managing the lifecyle of - // the device. - bool visible_; - bool bonded_; - bool connected_; - - private: - // Returns a localized string containing the device's bluetooth address and - // a device type for display when |name_| is empty. - string16 GetAddressWithLocalizedDeviceTypeName() const; -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_DEVICE_H_ diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_device_chromeos.cc b/chrome/browser/chromeos/bluetooth/bluetooth_device_chromeos.cc deleted file mode 100644 index aa060d5..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_device_chromeos.cc +++ /dev/null @@ -1,685 +0,0 @@ -// Copyright (c) 2012 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/chromeos/bluetooth/bluetooth_device_chromeos.h" - -#include <map> -#include <string> -#include <vector> - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/logging.h" -#include "base/memory/scoped_vector.h" -#include "base/memory/weak_ptr.h" -#include "base/string16.h" -#include "base/string_util.h" -#include "base/values.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_service_record.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_socket_chromeos.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_utils.h" -#include "chromeos/dbus/bluetooth_adapter_client.h" -#include "chromeos/dbus/bluetooth_agent_service_provider.h" -#include "chromeos/dbus/bluetooth_device_client.h" -#include "chromeos/dbus/bluetooth_input_client.h" -#include "chromeos/dbus/bluetooth_out_of_band_client.h" -#include "chromeos/dbus/bluetooth_out_of_band_pairing_data.h" -#include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/dbus/introspectable_client.h" -#include "dbus/bus.h" -#include "dbus/object_path.h" -#include "third_party/cros_system_api/dbus/service_constants.h" - -namespace chromeos { - -BluetoothDeviceChromeOs::BluetoothDeviceChromeOs( - BluetoothAdapterChromeOs* adapter) - : BluetoothDevice(), - adapter_(adapter), - pairing_delegate_(NULL), - connecting_applications_counter_(0), - weak_ptr_factory_(this) { -} - -BluetoothDeviceChromeOs::~BluetoothDeviceChromeOs() { -} - -bool BluetoothDeviceChromeOs::IsPaired() const { - return !object_path_.value().empty(); -} - -const BluetoothDevice::ServiceList& -BluetoothDeviceChromeOs::GetServices() const { - return service_uuids_; -} - -void BluetoothDeviceChromeOs::GetServiceRecords( - const ServiceRecordsCallback& callback, - const ErrorCallback& error_callback) { - DBusThreadManager::Get()->GetBluetoothDeviceClient()-> - DiscoverServices( - object_path_, - "", // empty pattern to browse all services - base::Bind(&BluetoothDeviceChromeOs::CollectServiceRecordsCallback, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback)); -} - -bool BluetoothDeviceChromeOs::ProvidesServiceWithUUID( - const std::string& uuid) const { - const BluetoothDevice::ServiceList& services = GetServices(); - for (BluetoothDevice::ServiceList::const_iterator iter = services.begin(); - iter != services.end(); - ++iter) { - if (bluetooth_utils::CanonicalUuid(*iter) == uuid) - return true; - } - return false; -} - -void BluetoothDeviceChromeOs::ProvidesServiceWithName( - const std::string& name, - const ProvidesServiceCallback& callback) { - GetServiceRecords( - base::Bind(&BluetoothDeviceChromeOs::SearchServicesForNameCallback, - weak_ptr_factory_.GetWeakPtr(), - name, - callback), - base::Bind(&BluetoothDeviceChromeOs::SearchServicesForNameErrorCallback, - weak_ptr_factory_.GetWeakPtr(), - callback)); -} - -bool BluetoothDeviceChromeOs::ExpectingPinCode() const { - return !pincode_callback_.is_null(); -} - -bool BluetoothDeviceChromeOs::ExpectingPasskey() const { - return !passkey_callback_.is_null(); -} - -bool BluetoothDeviceChromeOs::ExpectingConfirmation() const { - return !confirmation_callback_.is_null(); -} - -void BluetoothDeviceChromeOs::Connect(PairingDelegate* pairing_delegate, - const base::Closure& callback, - const ErrorCallback& error_callback) { - if (IsPaired() || IsBonded() || IsConnected()) { - // Connection to already paired or connected device. - ConnectApplications(callback, error_callback); - - } else if (!pairing_delegate) { - // No pairing delegate supplied, initiate low-security connection only. - DBusThreadManager::Get()->GetBluetoothAdapterClient()-> - CreateDevice(adapter_->object_path_, - address_, - base::Bind(&BluetoothDeviceChromeOs::ConnectCallback, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback), - base::Bind(&BluetoothDeviceChromeOs::ConnectErrorCallback, - weak_ptr_factory_.GetWeakPtr(), - error_callback)); - } else { - // Initiate high-security connection with pairing. - DCHECK(!pairing_delegate_); - pairing_delegate_ = pairing_delegate; - - // The agent path is relatively meaningless, we use the device address - // to generate it as we only support one pairing attempt at a time for - // a given bluetooth device. - DCHECK(agent_.get() == NULL); - - std::string agent_path_basename; - ReplaceChars(address_, ":", "_", &agent_path_basename); - dbus::ObjectPath agent_path("/org/chromium/bluetooth_agent/" + - agent_path_basename); - - dbus::Bus* system_bus = DBusThreadManager::Get()->GetSystemBus(); - if (system_bus) { - agent_.reset(BluetoothAgentServiceProvider::Create(system_bus, - agent_path, - this)); - } else { - agent_.reset(NULL); - } - - DVLOG(1) << "Pairing: " << address_; - DBusThreadManager::Get()->GetBluetoothAdapterClient()-> - CreatePairedDevice( - adapter_->object_path_, - address_, - agent_path, - bluetooth_agent::kDisplayYesNoCapability, - base::Bind(&BluetoothDeviceChromeOs::ConnectCallback, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback), - base::Bind(&BluetoothDeviceChromeOs::ConnectErrorCallback, - weak_ptr_factory_.GetWeakPtr(), - error_callback)); - } -} - -void BluetoothDeviceChromeOs::SetPinCode(const std::string& pincode) { - if (!agent_.get() || pincode_callback_.is_null()) - return; - - pincode_callback_.Run(SUCCESS, pincode); - pincode_callback_.Reset(); -} - -void BluetoothDeviceChromeOs::SetPasskey(uint32 passkey) { - if (!agent_.get() || passkey_callback_.is_null()) - return; - - passkey_callback_.Run(SUCCESS, passkey); - passkey_callback_.Reset(); -} - -void BluetoothDeviceChromeOs::ConfirmPairing() { - if (!agent_.get() || confirmation_callback_.is_null()) - return; - - confirmation_callback_.Run(SUCCESS); - confirmation_callback_.Reset(); -} - -void BluetoothDeviceChromeOs::RejectPairing() { - if (!agent_.get()) - return; - - if (!pincode_callback_.is_null()) { - pincode_callback_.Run(REJECTED, ""); - pincode_callback_.Reset(); - } - if (!passkey_callback_.is_null()) { - passkey_callback_.Run(REJECTED, 0); - passkey_callback_.Reset(); - } - if (!confirmation_callback_.is_null()) { - confirmation_callback_.Run(REJECTED); - confirmation_callback_.Reset(); - } -} - -void BluetoothDeviceChromeOs::CancelPairing() { - if (!agent_.get()) - return; - - if (!pincode_callback_.is_null()) { - pincode_callback_.Run(CANCELLED, ""); - pincode_callback_.Reset(); - } - if (!passkey_callback_.is_null()) { - passkey_callback_.Run(CANCELLED, 0); - passkey_callback_.Reset(); - } - if (!confirmation_callback_.is_null()) { - confirmation_callback_.Run(CANCELLED); - confirmation_callback_.Reset(); - } -} - -void BluetoothDeviceChromeOs::Disconnect(const base::Closure& callback, - const ErrorCallback& error_callback) { - DBusThreadManager::Get()->GetBluetoothDeviceClient()-> - Disconnect(object_path_, - base::Bind(&BluetoothDeviceChromeOs::DisconnectCallback, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback)); - -} - -void BluetoothDeviceChromeOs::Forget(const ErrorCallback& error_callback) { - DBusThreadManager::Get()->GetBluetoothAdapterClient()-> - RemoveDevice(adapter_->object_path_, - object_path_, - base::Bind(&BluetoothDeviceChromeOs::ForgetCallback, - weak_ptr_factory_.GetWeakPtr(), - error_callback)); -} - -void BluetoothDeviceChromeOs::ConnectToService(const std::string& service_uuid, - const SocketCallback& callback) { - GetServiceRecords( - base::Bind(&BluetoothDeviceChromeOs::GetServiceRecordsForConnectCallback, - weak_ptr_factory_.GetWeakPtr(), - service_uuid, - callback), - base::Bind( - &BluetoothDeviceChromeOs::GetServiceRecordsForConnectErrorCallback, - weak_ptr_factory_.GetWeakPtr(), - callback)); -} - -void BluetoothDeviceChromeOs::SetOutOfBandPairingData( - const chromeos::BluetoothOutOfBandPairingData& data, - const base::Closure& callback, - const ErrorCallback& error_callback) { - DBusThreadManager::Get()->GetBluetoothOutOfBandClient()-> - AddRemoteData( - object_path_, - address(), - data, - base::Bind(&BluetoothDeviceChromeOs::OnRemoteDataCallback, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback)); -} - -void BluetoothDeviceChromeOs::ClearOutOfBandPairingData( - const base::Closure& callback, - const ErrorCallback& error_callback) { - DBusThreadManager::Get()->GetBluetoothOutOfBandClient()-> - RemoveRemoteData( - object_path_, - address(), - base::Bind(&BluetoothDeviceChromeOs::OnRemoteDataCallback, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback)); -} - -void BluetoothDeviceChromeOs::SetObjectPath( - const dbus::ObjectPath& object_path) { - DCHECK(object_path_ == dbus::ObjectPath("")); - object_path_ = object_path; -} - -void BluetoothDeviceChromeOs::RemoveObjectPath() { - DCHECK(object_path_ != dbus::ObjectPath("")); - object_path_ = dbus::ObjectPath(""); -} - -void BluetoothDeviceChromeOs::Update( - const BluetoothDeviceClient::Properties* properties, - bool update_state) { - std::string address = properties->address.value(); - std::string name = properties->name.value(); - uint32 bluetooth_class = properties->bluetooth_class.value(); - const std::vector<std::string>& uuids = properties->uuids.value(); - - if (!address.empty()) - address_ = address; - if (!name.empty()) - name_ = name; - if (bluetooth_class) - bluetooth_class_ = bluetooth_class; - if (!uuids.empty()) { - service_uuids_.clear(); - service_uuids_.assign(uuids.begin(), uuids.end()); - } - - if (update_state) { - // BlueZ uses paired to mean link keys exchanged, whereas the Bluetooth - // spec refers to this as bonded. Use the spec name for our interface. - bonded_ = properties->paired.value(); - connected_ = properties->connected.value(); - } -} - -void BluetoothDeviceChromeOs::ConnectCallback( - const base::Closure& callback, - const ErrorCallback& error_callback, - const dbus::ObjectPath& device_path) { - DVLOG(1) << "Connection successful: " << device_path.value(); - if (object_path_.value().empty()) { - object_path_ = device_path; - } else { - LOG_IF(WARNING, object_path_ != device_path) - << "Conflicting device paths for objects, result gave: " - << device_path.value() << " but signal gave: " - << object_path_.value(); - } - - // Mark the device trusted so it can connect to us automatically, and - // we can connect after rebooting. This information is part of the - // pairing information of the device, and is unique to the combination - // of our bluetooth address and the device's bluetooth address. A - // different host needs a new pairing, so it's not useful to sync. - DBusThreadManager::Get()->GetBluetoothDeviceClient()-> - GetProperties(object_path_)->trusted.Set( - true, - base::Bind(&BluetoothDeviceChromeOs::OnSetTrusted, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback)); - - // Connect application-layer protocols. - ConnectApplications(callback, error_callback); -} - -void BluetoothDeviceChromeOs::ConnectErrorCallback( - const ErrorCallback& error_callback, - const std::string& error_name, - const std::string& error_message) { - LOG(WARNING) << "Connection failed: " << address_ - << ": " << error_name << ": " << error_message; - error_callback.Run(); -} - -void BluetoothDeviceChromeOs::CollectServiceRecordsCallback( - const ServiceRecordsCallback& callback, - const ErrorCallback& error_callback, - const dbus::ObjectPath& device_path, - const BluetoothDeviceClient::ServiceMap& service_map, - bool success) { - if (!success) { - error_callback.Run(); - return; - } - - ScopedVector<BluetoothServiceRecord> records; - for (BluetoothDeviceClient::ServiceMap::const_iterator i = - service_map.begin(); i != service_map.end(); ++i) { - records.push_back( - new BluetoothServiceRecord(address(), i->second)); - } - callback.Run(records); -} - -void BluetoothDeviceChromeOs::OnSetTrusted(const base::Closure& callback, - const ErrorCallback& error_callback, - bool success) { - if (success) { - callback.Run(); - } else { - LOG(WARNING) << "Failed to set device as trusted: " << address_; - error_callback.Run(); - } -} - -void BluetoothDeviceChromeOs::ConnectApplications( - const base::Closure& callback, - const ErrorCallback& error_callback) { - // Introspect the device object to determine supported applications. - DBusThreadManager::Get()->GetIntrospectableClient()-> - Introspect(bluetooth_device::kBluetoothDeviceServiceName, - object_path_, - base::Bind(&BluetoothDeviceChromeOs::OnIntrospect, - weak_ptr_factory_.GetWeakPtr(), - callback, - error_callback)); -} - -void BluetoothDeviceChromeOs::OnIntrospect(const base::Closure& callback, - const ErrorCallback& error_callback, - const std::string& service_name, - const dbus::ObjectPath& device_path, - const std::string& xml_data, - bool success) { - if (!success) { - LOG(WARNING) << "Failed to determine supported applications: " << address_; - error_callback.Run(); - return; - } - - // The introspection data for the device object may list one or more - // additional D-Bus interfaces that BlueZ supports for this particular - // device. Send appropraite Connect calls for each of those interfaces - // to connect all of the application protocols for this device. - std::vector<std::string> interfaces = - IntrospectableClient::GetInterfacesFromIntrospectResult(xml_data); - - DCHECK_EQ(0, connecting_applications_counter_); - connecting_applications_counter_ = 0; - for (std::vector<std::string>::iterator iter = interfaces.begin(); - iter != interfaces.end(); ++iter) { - if (*iter == bluetooth_input::kBluetoothInputInterface) { - connecting_applications_counter_++; - // Supports Input interface. - DBusThreadManager::Get()->GetBluetoothInputClient()-> - Connect(object_path_, - base::Bind(&BluetoothDeviceChromeOs::OnConnect, - weak_ptr_factory_.GetWeakPtr(), - callback, - *iter), - base::Bind(&BluetoothDeviceChromeOs::OnConnectError, - weak_ptr_factory_.GetWeakPtr(), - error_callback, *iter)); - } - } - - // If OnConnect has been called for every call to Connect above, then this - // will decrement the counter to -1. In that case, call the callback - // directly as it has not been called by any of the OnConnect callbacks. - // This is safe because OnIntrospect and OnConnect run on the same thread. - connecting_applications_counter_--; - if (connecting_applications_counter_ == -1) - callback.Run(); -} - -void BluetoothDeviceChromeOs::OnConnect(const base::Closure& callback, - const std::string& interface_name, - const dbus::ObjectPath& device_path) { - DVLOG(1) << "Application connection successful: " << device_path.value() - << ": " << interface_name; - - connecting_applications_counter_--; - // |callback| should only be called once, meaning it cannot be called before - // all requests have been started. The extra decrement after all requests - // have been started, and the check for -1 instead of 0 below, insure only a - // single call to |callback| will occur (provided OnConnect and OnIntrospect - // run on the same thread, which is true). - if (connecting_applications_counter_ == -1) { - connecting_applications_counter_ = 0; - callback.Run(); - } -} - -void BluetoothDeviceChromeOs::OnConnectError( - const ErrorCallback& error_callback, - const std::string& interface_name, - const dbus::ObjectPath& device_path, - const std::string& error_name, - const std::string& error_message) { - LOG(WARNING) << "Connection failed: " << address_ << ": " << interface_name - << ": " << error_name << ": " << error_message; - error_callback.Run(); -} - -void BluetoothDeviceChromeOs::DisconnectCallback( - const base::Closure& callback, - const ErrorCallback& error_callback, - const dbus::ObjectPath& device_path, - bool success) { - DCHECK(device_path == object_path_); - if (success) { - DVLOG(1) << "Disconnection successful: " << address_; - callback.Run(); - } else { - LOG(WARNING) << "Disconnection failed: " << address_; - error_callback.Run(); - } -} - -void BluetoothDeviceChromeOs::ForgetCallback( - const ErrorCallback& error_callback, - const dbus::ObjectPath& adapter_path, - bool success) { - // It's quite normal that this path never gets called on success; we use a - // weak pointer, and bluetoothd might send the DeviceRemoved signal before - // the method reply, in which case this object is deleted and the - // callback never takes place. Therefore don't do anything here for the - // success case. - if (!success) { - LOG(WARNING) << "Forget failed: " << address_; - error_callback.Run(); - } -} - -void BluetoothDeviceChromeOs::SearchServicesForNameErrorCallback( - const ProvidesServiceCallback& callback) { - callback.Run(false); -} - -void BluetoothDeviceChromeOs::SearchServicesForNameCallback( - const std::string& name, - const ProvidesServiceCallback& callback, - const ServiceRecordList& list) { - for (ServiceRecordList::const_iterator i = list.begin(); - i != list.end(); ++i) { - if ((*i)->name() == name) { - callback.Run(true); - return; - } - } - callback.Run(false); -} - -void BluetoothDeviceChromeOs::GetServiceRecordsForConnectErrorCallback( - const SocketCallback& callback) { - callback.Run(NULL); -} - -void BluetoothDeviceChromeOs::GetServiceRecordsForConnectCallback( - const std::string& service_uuid, - const SocketCallback& callback, - const ServiceRecordList& list) { - for (ServiceRecordList::const_iterator i = list.begin(); - i != list.end(); ++i) { - if ((*i)->uuid() == service_uuid) { - // If multiple service records are found, use the first one that works. - scoped_refptr<BluetoothSocket> socket( - BluetoothSocketChromeOs::CreateBluetoothSocket(**i)); - if (socket.get() != NULL) { - callback.Run(socket); - return; - } - } - } - callback.Run(NULL); -} - -void BluetoothDeviceChromeOs::OnRemoteDataCallback( - const base::Closure& callback, - const ErrorCallback& error_callback, - bool success) { - if (success) - callback.Run(); - else - error_callback.Run(); -} - -void BluetoothDeviceChromeOs::DisconnectRequested( - const dbus::ObjectPath& object_path) { - DCHECK(object_path == object_path_); -} - -void BluetoothDeviceChromeOs::Release() { - DCHECK(agent_.get()); - DVLOG(1) << "Release: " << address_; - - DCHECK(pairing_delegate_); - pairing_delegate_->DismissDisplayOrConfirm(); - pairing_delegate_ = NULL; - - pincode_callback_.Reset(); - passkey_callback_.Reset(); - confirmation_callback_.Reset(); - - agent_.reset(); -} - -void BluetoothDeviceChromeOs::RequestPinCode( - const dbus::ObjectPath& device_path, - const PinCodeCallback& callback) { - DCHECK(agent_.get()); - DVLOG(1) << "RequestPinCode: " << device_path.value(); - - DCHECK(pairing_delegate_); - DCHECK(pincode_callback_.is_null()); - pincode_callback_ = callback; - pairing_delegate_->RequestPinCode(this); -} - -void BluetoothDeviceChromeOs::RequestPasskey( - const dbus::ObjectPath& device_path, - const PasskeyCallback& callback) { - DCHECK(agent_.get()); - DCHECK(device_path == object_path_); - DVLOG(1) << "RequestPasskey: " << device_path.value(); - - DCHECK(pairing_delegate_); - DCHECK(passkey_callback_.is_null()); - passkey_callback_ = callback; - pairing_delegate_->RequestPasskey(this); -} - -void BluetoothDeviceChromeOs::DisplayPinCode( - const dbus::ObjectPath& device_path, - const std::string& pincode) { - DCHECK(agent_.get()); - DCHECK(device_path == object_path_); - DVLOG(1) << "DisplayPinCode: " << device_path.value() << " " << pincode; - - DCHECK(pairing_delegate_); - pairing_delegate_->DisplayPinCode(this, pincode); -} - -void BluetoothDeviceChromeOs::DisplayPasskey( - const dbus::ObjectPath& device_path, - uint32 passkey) { - DCHECK(agent_.get()); - DCHECK(device_path == object_path_); - DVLOG(1) << "DisplayPasskey: " << device_path.value() << " " << passkey; - - DCHECK(pairing_delegate_); - pairing_delegate_->DisplayPasskey(this, passkey); -} - -void BluetoothDeviceChromeOs::RequestConfirmation( - const dbus::ObjectPath& device_path, - uint32 passkey, - const ConfirmationCallback& callback) { - DCHECK(agent_.get()); - DCHECK(device_path == object_path_); - DVLOG(1) << "RequestConfirmation: " << device_path.value() << " " << passkey; - - DCHECK(pairing_delegate_); - DCHECK(confirmation_callback_.is_null()); - confirmation_callback_ = callback; - pairing_delegate_->ConfirmPasskey(this, passkey); -} - -void BluetoothDeviceChromeOs::Authorize(const dbus::ObjectPath& device_path, - const std::string& uuid, - const ConfirmationCallback& callback) { - DCHECK(agent_.get()); - DCHECK(device_path == object_path_); - LOG(WARNING) << "Rejected authorization for service: " << uuid - << " requested from device: " << device_path.value(); - callback.Run(REJECTED); -} - -void BluetoothDeviceChromeOs::ConfirmModeChange( - Mode mode, - const ConfirmationCallback& callback) { - DCHECK(agent_.get()); - LOG(WARNING) << "Rejected adapter-level mode change: " << mode - << " made on agent for device: " << address_; - callback.Run(REJECTED); -} - -void BluetoothDeviceChromeOs::Cancel() { - DCHECK(agent_.get()); - DVLOG(1) << "Cancel: " << address_; - - DCHECK(pairing_delegate_); - pairing_delegate_->DismissDisplayOrConfirm(); -} - - -// static -BluetoothDeviceChromeOs* BluetoothDeviceChromeOs::Create( - BluetoothAdapterChromeOs* adapter) { - return new BluetoothDeviceChromeOs(adapter); -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_device_chromeos.h b/chrome/browser/chromeos/bluetooth/bluetooth_device_chromeos.h deleted file mode 100644 index a4202c5..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_device_chromeos.h +++ /dev/null @@ -1,369 +0,0 @@ -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_DEVICE_CHROMEOS_H_ -#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_DEVICE_CHROMEOS_H_ - -#include <string> -#include <vector> - -#include "base/basictypes.h" -#include "base/memory/scoped_ptr.h" -#include "base/memory/scoped_vector.h" -#include "base/memory/weak_ptr.h" -#include "base/string16.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" -#include "chromeos/dbus/bluetooth_agent_service_provider.h" -#include "chromeos/dbus/bluetooth_device_client.h" -#include "dbus/object_path.h" - -namespace chromeos { - -class BluetoothAdapterChromeOs; -class BluetoothServiceRecord; - -struct BluetoothOutOfBandPairingData; - -// The BluetoothDeviceChromeOs class is an implementation of BluetoothDevice -// for Chrome OS platform. -class BluetoothDeviceChromeOs : public BluetoothDevice, - public BluetoothDeviceClient::Observer, - public BluetoothAgentServiceProvider::Delegate { - public: - virtual ~BluetoothDeviceChromeOs(); - - // BluetoothDevice override - virtual bool IsPaired() const OVERRIDE; - virtual const ServiceList& GetServices() const OVERRIDE; - virtual void GetServiceRecords( - const ServiceRecordsCallback& callback, - const ErrorCallback& error_callback) OVERRIDE; - virtual bool ProvidesServiceWithUUID(const std::string& uuid) const OVERRIDE; - virtual void ProvidesServiceWithName( - const std::string& name, - const ProvidesServiceCallback& callback) OVERRIDE; - virtual bool ExpectingPinCode() const OVERRIDE; - virtual bool ExpectingPasskey() const OVERRIDE; - virtual bool ExpectingConfirmation() const OVERRIDE; - virtual void Connect( - BluetoothDevice::PairingDelegate* pairing_delegate, - const base::Closure& callback, - const ErrorCallback& error_callback) OVERRIDE; - virtual void SetPinCode(const std::string& pincode) OVERRIDE; - virtual void SetPasskey(uint32 passkey) OVERRIDE; - virtual void ConfirmPairing() OVERRIDE; - virtual void RejectPairing() OVERRIDE; - virtual void CancelPairing() OVERRIDE; - virtual void Disconnect( - const base::Closure& callback, - const ErrorCallback& error_callback) OVERRIDE; - virtual void Forget(const ErrorCallback& error_callback) OVERRIDE; - virtual void ConnectToService( - const std::string& service_uuid, - const SocketCallback& callback) OVERRIDE; - virtual void SetOutOfBandPairingData( - const chromeos::BluetoothOutOfBandPairingData& data, - const base::Closure& callback, - const ErrorCallback& error_callback) OVERRIDE; - virtual void ClearOutOfBandPairingData( - const base::Closure& callback, - const ErrorCallback& error_callback) OVERRIDE; - - private: - friend class BluetoothAdapterChromeOs; - friend class MockBluetoothDevice; - - explicit BluetoothDeviceChromeOs(BluetoothAdapterChromeOs* adapter); - - // Sets the dbus object path for the device to |object_path|, indicating - // that the device has gone from being discovered to paired or bonded. - void SetObjectPath(const dbus::ObjectPath& object_path); - - // Removes the dbus object path from the device, indicating that the - // device is no longer paired or bonded, but perhaps still visible. - void RemoveObjectPath(); - - // Sets whether the device is visible to the owning adapter to |visible|. - void SetVisible(bool visible) { visible_ = visible; } - - // Updates device information from the properties in |properties|, device - // state properties such as |paired_| and |connected_| are ignored unless - // |update_state| is true. - void Update(const BluetoothDeviceClient::Properties* properties, - bool update_state); - - // Called by BluetoothAdapterClient when a call to CreateDevice() or - // CreatePairedDevice() succeeds, provides the new object path for the remote - // device in |device_path|. |callback| and |error_callback| are the callbacks - // provided to Connect(). - void ConnectCallback(const base::Closure& callback, - const ErrorCallback& error_callback, - const dbus::ObjectPath& device_path); - - // Called by BluetoothAdapterClient when a call to CreateDevice() or - // CreatePairedDevice() fails with the error named |error_name| and - // optional message |error_message|, |error_callback| is the callback - // provided to Connect(). - void ConnectErrorCallback(const ErrorCallback& error_callback, - const std::string& error_name, - const std::string& error_message); - - // Called by BluetoothAdapterClient when a call to DiscoverServices() - // completes. |callback| and |error_callback| are the callbacks provided to - // GetServiceRecords. - void CollectServiceRecordsCallback( - const ServiceRecordsCallback& callback, - const ErrorCallback& error_callback, - const dbus::ObjectPath& device_path, - const BluetoothDeviceClient::ServiceMap& service_map, - bool success); - - // Called by BluetoothProperty when the call to Set() for the Trusted - // property completes. |success| indicates whether or not the request - // succeeded, |callback| and |error_callback| are the callbacks provided to - // Connect(). - void OnSetTrusted(const base::Closure& callback, - const ErrorCallback& error_callback, - bool success); - - // Connect application-level protocols of the device to the system, called - // on a successful connection or to reconnect to a device that is already - // paired or previously connected. |error_callback| is called on failure. - // Otherwise, |callback| is called when the request is complete. - void ConnectApplications(const base::Closure& callback, - const ErrorCallback& error_callback); - - // Called by IntrospectableClient when a call to Introspect() completes. - // |success| indicates whether or not the request succeeded, |callback| and - // |error_callback| are the callbacks provided to ConnectApplications(), - // |service_name| and |device_path| specify the remote object being - // introspected and |xml_data| contains the XML-formatted protocol data. - void OnIntrospect(const base::Closure& callback, - const ErrorCallback& error_callback, - const std::string& service_name, - const dbus::ObjectPath& device_path, - const std::string& xml_data, bool success); - - // Called by BluetoothInputClient when the call to Connect() succeeds. - // |error_callback| is the callback provided to ConnectApplications(), - // |interface_name| specifies the interface being connected and - // |device_path| the remote object path. - void OnConnect(const base::Closure& callback, - const std::string& interface_name, - const dbus::ObjectPath& device_path); - - // Called by BluetoothInputClient when the call to Connect() fails. - // |error_callback| is the callback provided to ConnectApplications(), - // |interface_name| specifies the interface being connected, - // |device_path| the remote object path, - // |error_name| the error name and |error_message| the optional message. - void OnConnectError(const ErrorCallback& error_callback, - const std::string& interface_name, - const dbus::ObjectPath& device_path, - const std::string& error_name, - const std::string& error_message); - - // Called by BluetoothDeviceClient when a call to Disconnect() completes, - // |success| indicates whether or not the request succeeded, |callback| and - // |error_callback| are the callbacks provided to Disconnect() and - // |device_path| is the device disconnected. - void DisconnectCallback(const base::Closure& callback, - const ErrorCallback& error_callback, - const dbus::ObjectPath& device_path, bool success); - - // Called by BluetoothAdapterClient when a call to RemoveDevice() - // completes, |success| indicates whether or not the request succeeded, - // |error_callback| is the callback provided to Forget() and |adapter_path| is - // the d-bus object path of the adapter that performed the removal. - void ForgetCallback(const ErrorCallback& error_callback, - const dbus::ObjectPath& adapter_path, bool success); - - // Called if the call to GetServiceRecords from ProvidesServiceWithName fails. - void SearchServicesForNameErrorCallback( - const ProvidesServiceCallback& callback); - - // Called by GetServiceRecords with the list of BluetoothServiceRecords to - // search for |name|. |callback| is the callback from - // ProvidesServiceWithName. - void SearchServicesForNameCallback( - const std::string& name, - const ProvidesServiceCallback& callback, - const ServiceRecordList& list); - - // Called if the call to GetServiceRecords from Connect fails. - void GetServiceRecordsForConnectErrorCallback( - const SocketCallback& callback); - - // Called by GetServiceRecords with the list of BluetoothServiceRecords. - // Connections are attempted to each service in the list matching - // |service_uuid|, and the socket from the first successful connection is - // passed to |callback|. - void GetServiceRecordsForConnectCallback( - const std::string& service_uuid, - const SocketCallback& callback, - const ServiceRecordList& list); - - // Called by BlueoothDeviceClient in response to the AddRemoteData and - // RemoveRemoteData method calls. - void OnRemoteDataCallback(const base::Closure& callback, - const ErrorCallback& error_callback, - bool success); - - // BluetoothDeviceClient::Observer override. - // - // Called when the device with object path |object_path| is about - // to be disconnected, giving a chance for application layers to - // shut down cleanly. - virtual void DisconnectRequested( - const dbus::ObjectPath& object_path) OVERRIDE; - - // BluetoothAgentServiceProvider::Delegate override. - // - // This method will be called when the agent is unregistered from the - // Bluetooth daemon, generally at the end of a pairing request. It may be - // used to perform cleanup tasks. - virtual void Release() OVERRIDE; - - // BluetoothAgentServiceProvider::Delegate override. - // - // This method will be called when the Bluetooth daemon requires a - // PIN Code for authentication of the device with object path |device_path|, - // the agent should obtain the code from the user and call |callback| - // to provide it, or indicate rejection or cancellation of the request. - // - // PIN Codes are generally required for Bluetooth 2.0 and earlier devices - // for which there is no automatic pairing or special handling. - virtual void RequestPinCode(const dbus::ObjectPath& device_path, - const PinCodeCallback& callback) OVERRIDE; - - // BluetoothAgentServiceProvider::Delegate override. - // - // This method will be called when the Bluetooth daemon requires a - // Passkey for authentication of the device with object path |device_path|, - // the agent should obtain the passkey from the user (a numeric in the - // range 0-999999) and call |callback| to provide it, or indicate - // rejection or cancellation of the request. - // - // Passkeys are generally required for Bluetooth 2.1 and later devices - // which cannot provide input or display on their own, and don't accept - // passkey-less pairing. - virtual void RequestPasskey(const dbus::ObjectPath& device_path, - const PasskeyCallback& callback) OVERRIDE; - - // BluetoothAgentServiceProvider::Delegate override. - // - // This method will be called when the Bluetooth daemon requires that the - // user enter the PIN code |pincode| into the device with object path - // |device_path| so that it may be authenticated. The Cancel() method - // will be called to dismiss the display once pairing is complete or - // cancelled. - // - // This is used for Bluetooth 2.0 and earlier keyboard devices, the - // |pincode| will always be a six-digit numeric in the range 000000-999999 - // for compatibilty with later specifications. - virtual void DisplayPinCode(const dbus::ObjectPath& device_path, - const std::string& pincode) OVERRIDE; - - // BluetoothAgentServiceProvider::Delegate override. - // - // This method will be called when the Bluetooth daemon requires that the - // user enter the Passkey |passkey| into the device with object path - // |device_path| so that it may be authenticated. The Cancel() method - // will be called to dismiss the display once pairing is complete or - // cancelled. - // - // This is used for Bluetooth 2.1 and later devices that support input - // but not display, such as keyboards. The Passkey is a numeric in the - // range 0-999999 and should be always presented zero-padded to six - // digits. - virtual void DisplayPasskey(const dbus::ObjectPath& device_path, - uint32 passkey) OVERRIDE; - - // BluetoothAgentServiceProvider::Delegate override. - // - // This method will be called when the Bluetooth daemon requires that the - // user confirm that the Passkey |passkey| is displayed on the screen - // of the device with object path |object_path| so that it may be - // authentication. The agent should display to the user and ask for - // confirmation, then call |callback| to provide their response (success, - // rejected or cancelled). - // - // This is used for Bluetooth 2.1 and later devices that support display, - // such as other computers or phones. The Passkey is a numeric in the - // range 0-999999 and should be always present zero-padded to six - // digits. - virtual void RequestConfirmation( - const dbus::ObjectPath& device_path, - uint32 passkey, - const ConfirmationCallback& callback) OVERRIDE; - - // BluetoothAgentServiceProvider::Delegate override. - // - // This method will be called when the Bluetooth daemon requires that the - // user confirm that the device with object path |object_path| is - // authorized to connect to the service with UUID |uuid|. The agent should - // confirm with the user and call |callback| to provide their response - // (success, rejected or cancelled). - virtual void Authorize(const dbus::ObjectPath& device_path, - const std::string& uuid, - const ConfirmationCallback& callback) OVERRIDE; - - // BluetoothAgentServiceProvider::Delegate override. - // - // This method will be called when the Bluetooth daemon requires that the - // user confirm that the device adapter may switch to mode |mode|. The - // agent should confirm with the user and call |callback| to provide - // their response (success, rejected or cancelled). - virtual void ConfirmModeChange(Mode mode, - const ConfirmationCallback& callback) OVERRIDE; - - // BluetoothAgentServiceProvider::Delegate override. - // - // This method will be called by the Bluetooth daemon to indicate that - // the request failed before a reply was returned from the device. - virtual void Cancel() OVERRIDE; - - // Creates a new BluetoothDeviceChromeOs object bound to the adapter - // |adapter|. - static BluetoothDeviceChromeOs* Create(BluetoothAdapterChromeOs* adapter); - - // The adapter that owns this device instance. - BluetoothAdapterChromeOs* adapter_; - - // The dbus object path of the device, will be empty if the device has only - // been discovered and not yet paired with. - dbus::ObjectPath object_path_; - - // The services (identified by UUIDs) that this device provides. - std::vector<std::string> service_uuids_; - - // During pairing this is set to an object that we don't own, but on which - // we can make method calls to request, display or confirm PIN Codes and - // Passkeys. Generally it is the object that owns this one. - BluetoothDevice::PairingDelegate* pairing_delegate_; - - // During pairing this is set to an instance of a D-Bus agent object - // intialized with our own class as its delegate. - scoped_ptr<BluetoothAgentServiceProvider> agent_; - - // During pairing these callbacks are set to those provided by method calls - // made on us by |agent_| and are called by our own method calls such as - // SetPinCode() and SetPasskey(). - PinCodeCallback pincode_callback_; - PasskeyCallback passkey_callback_; - ConfirmationCallback confirmation_callback_; - - // Used to keep track of pending application connection requests. - int connecting_applications_counter_; - - // Note: This should remain the last member so it'll be destroyed and - // invalidate its weak pointers before any other members are destroyed. - base::WeakPtrFactory<BluetoothDeviceChromeOs> weak_ptr_factory_; - - DISALLOW_COPY_AND_ASSIGN(BluetoothDeviceChromeOs); -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_DEVICE_CHROMEOS_H_ diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_service_record.cc b/chrome/browser/chromeos/bluetooth/bluetooth_service_record.cc deleted file mode 100644 index b80ce29..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_service_record.cc +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (c) 2012 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/chromeos/bluetooth/bluetooth_service_record.h" - -#include <string> -#include <vector> - -#include "base/logging.h" -#include "base/string_number_conversions.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_utils.h" -#include "third_party/libxml/chromium/libxml_utils.h" - -namespace { - -static const char* kAttributeNode = "attribute"; -static const char* kIdAttribute = "id"; -static const char* kProtocolDescriptorListId = "0x0004"; -static const char* kRfcommUuid = "0x0003"; -static const char* kSdpNameId = "0x0100"; -static const char* kSequenceNode = "sequence"; -static const char* kTextNode = "text"; -static const char* kUint8Node = "uint8"; -static const char* kUuidId = "0x0001"; -static const char* kUuidNode = "uuid"; -static const char* kValueAttribute = "value"; - -bool AdvanceToTag(XmlReader* reader, const char* node_type) { - do { - if (!reader->Read()) - return false; - } while (reader->NodeName() != node_type); - return true; -} - -bool ExtractTextValue(XmlReader* reader, std::string* value_out) { - if (AdvanceToTag(reader, kTextNode)) { - reader->NodeAttribute(kValueAttribute, value_out); - return true; - } - return false; -} - -} // namespace - -namespace chromeos { - -BluetoothServiceRecord::BluetoothServiceRecord( - const std::string& address, - const std::string& xml_data) - : address_(address), - supports_rfcomm_(false) { - - XmlReader reader; - if (!reader.Load(xml_data)) - return; - - while (AdvanceToTag(&reader, kAttributeNode)) { - std::string id; - if (reader.NodeAttribute(kIdAttribute, &id)) { - if (id == kSdpNameId) { - ExtractTextValue(&reader, &name_); - } else if (id == kProtocolDescriptorListId) { - if (AdvanceToTag(&reader, kSequenceNode)) { - ExtractChannels(&reader); - } - } else if (id == kUuidId) { - if (AdvanceToTag(&reader, kSequenceNode)) { - ExtractUuid(&reader); - } - } - } - // We don't care about anything else here, so find the closing tag - AdvanceToTag(&reader, kAttributeNode); - } -} - -void BluetoothServiceRecord::ExtractChannels(XmlReader* reader) { - const int start_depth = reader->Depth(); - do { - if (reader->NodeName() == kSequenceNode) { - if (AdvanceToTag(reader, kUuidNode)) { - std::string type; - if (reader->NodeAttribute(kValueAttribute, &type) && - type == kRfcommUuid) { - if (AdvanceToTag(reader, kUint8Node)) { - std::string channel_string; - if (reader->NodeAttribute(kValueAttribute, &channel_string)) { - std::vector<uint8> channel_bytes; - if (base::HexStringToBytes(channel_string.substr(2), - &channel_bytes)) { - if (channel_bytes.size() == 1) { - rfcomm_channel_ = channel_bytes[0]; - supports_rfcomm_ = true; - } - } - } - } - } - } - } - } while (AdvanceToTag(reader, kSequenceNode) && - reader->Depth() != start_depth); -} - -void BluetoothServiceRecord::ExtractUuid(XmlReader* reader) { - const int start_depth = reader->Depth(); - do { - if (reader->NodeName() == kSequenceNode) { - if (AdvanceToTag(reader, kUuidNode)) { - if (!reader->NodeAttribute(kValueAttribute, &uuid_)) - uuid_.clear(); - } - } - } while (AdvanceToTag(reader, kSequenceNode) && - reader->Depth() != start_depth); - - uuid_ = bluetooth_utils::CanonicalUuid(uuid_); -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_service_record.h b/chrome/browser/chromeos/bluetooth/bluetooth_service_record.h deleted file mode 100644 index 2e43d72..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_service_record.h +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_SERVICE_RECORD_H_ -#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_SERVICE_RECORD_H_ - -#include <string> - -#include "base/basictypes.h" - -class XmlReader; - -namespace chromeos { - -// BluetoothServiceRecord represents an SDP service record. -// -// This implementation is currently incomplete: it only supports those fields -// that have been necessary so far. -class BluetoothServiceRecord { - public: - BluetoothServiceRecord( - const std::string& address, - const std::string& xml_data); - - // The human-readable name of this service. - const std::string& name() const { return name_; } - - // The address of the BluetoothDevice providing this service. - const std::string& address() const { return address_; } - - // The UUID of the service. This field may be empty if no UUID was - // specified in the service record. - const std::string& uuid() const { return uuid_; } - - // Indicates if this service supports RFCOMM communication. - bool SupportsRfcomm() const { return supports_rfcomm_; } - - // The RFCOMM channel to use, if this service supports RFCOMM communication. - // The return value is undefined if SupportsRfcomm() returns false. - uint8_t rfcomm_channel() const { return rfcomm_channel_; } - - private: - void ExtractChannels(XmlReader* reader); - void ExtractUuid(XmlReader* reader); - - std::string address_; - std::string name_; - std::string uuid_; - - bool supports_rfcomm_; - uint8_t rfcomm_channel_; - - DISALLOW_COPY_AND_ASSIGN(BluetoothServiceRecord); -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_SERVICE_RECORD_H_ diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_service_record_unittest.cc b/chrome/browser/chromeos/bluetooth/bluetooth_service_record_unittest.cc deleted file mode 100644 index 11bcd98..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_service_record_unittest.cc +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2012 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 <string> - -#include "base/file_path.h" -#include "base/file_util.h" -#include "base/path_service.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_service_record.h" -#include "chrome/common/chrome_paths.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace { - -static const char* kAddress = "01:02:03:04:05:06"; -static const char* kCustomUuid = "01234567-89ab-cdef-0123-456789abcdef"; -static const char* kSerialUuid = "00001101-0000-1000-8000-00805f9b34fb"; - -} // namespace - -namespace chromeos { - -class BluetoothServiceRecordTest : public testing::Test { - public: - FilePath GetTestDataFilePath(const char* file) { - FilePath path; - PathService::Get(chrome::DIR_TEST_DATA, &path); - path = path.AppendASCII("chromeos"); - path = path.AppendASCII("bluetooth"); - path = path.AppendASCII(file); - return path; - } -}; - -TEST_F(BluetoothServiceRecordTest, RfcommService) { - std::string xml_data; - file_util::ReadFileToString(GetTestDataFilePath("rfcomm.xml"), &xml_data); - - BluetoothServiceRecord service_record(kAddress, xml_data); - EXPECT_EQ(kAddress, service_record.address()); - EXPECT_EQ("Headset Audio Gateway", service_record.name()); - EXPECT_TRUE(service_record.SupportsRfcomm()); - EXPECT_EQ((uint8_t)12, service_record.rfcomm_channel()); - EXPECT_EQ(kCustomUuid, service_record.uuid()); -} - -TEST_F(BluetoothServiceRecordTest, ShortUuid) { - std::string xml_data; - file_util::ReadFileToString(GetTestDataFilePath("short_uuid.xml"), &xml_data); - BluetoothServiceRecord short_uuid_service_record(kAddress, xml_data); - EXPECT_EQ(kSerialUuid, short_uuid_service_record.uuid()); - - xml_data.clear(); - file_util::ReadFileToString( - GetTestDataFilePath("medium_uuid.xml"), &xml_data); - BluetoothServiceRecord medium_uuid_service_record(kAddress, xml_data); - EXPECT_EQ(kSerialUuid, medium_uuid_service_record.uuid()); -} - -TEST_F(BluetoothServiceRecordTest, CleanUuid) { - std::string xml_data; - file_util::ReadFileToString(GetTestDataFilePath("uppercase_uuid.xml"), - &xml_data); - BluetoothServiceRecord service_record(kAddress, xml_data); - EXPECT_EQ(kCustomUuid, service_record.uuid()); - - xml_data.clear(); - file_util::ReadFileToString(GetTestDataFilePath("invalid_uuid.xml"), - &xml_data); - BluetoothServiceRecord invalid_service_record(kAddress, xml_data); - EXPECT_EQ("", invalid_service_record.uuid()); -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_socket.h b/chrome/browser/chromeos/bluetooth/bluetooth_socket.h deleted file mode 100644 index 326c0f7..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_socket.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_SOCKET_H_ -#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_SOCKET_H_ - -#include "base/memory/ref_counted.h" - -namespace chromeos { - -// BluetoothSocket represents a socket to a specific service on a -// BluetoothDevice. BluetoothSocket objects are ref counted and may outlive -// both the BluetoothDevice and BluetoothAdapter that were involved in their -// creation. -class BluetoothSocket : public base::RefCounted<BluetoothSocket> { - public: - // TODO(youngki): Replace this with an opaque id when read/write calls are - // added. This interface is platform-independent and file descriptor is - // linux-specific hence this method has to be renamed. - virtual int fd() const = 0; - - protected: - friend class base::RefCounted<BluetoothSocket>; - virtual ~BluetoothSocket() {} -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_SOCKET_H_ diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_socket_chromeos.cc b/chrome/browser/chromeos/bluetooth/bluetooth_socket_chromeos.cc deleted file mode 100644 index f86f9c5..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_socket_chromeos.cc +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2012 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/chromeos/bluetooth/bluetooth_socket_chromeos.h" - -#include <vector> - -#include <bluetooth/bluetooth.h> -#include <bluetooth/rfcomm.h> -#include <errno.h> -#include <sys/socket.h> -#include <sys/types.h> -#include <string.h> -#include <unistd.h> - -#include "base/logging.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_service_record.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_utils.h" - -namespace chromeos { - -BluetoothSocketChromeOs::BluetoothSocketChromeOs( - const std::string& address, int fd) - : address_(address), - fd_(fd) { -} - -BluetoothSocketChromeOs::~BluetoothSocketChromeOs() { - close(fd_); -} - -// static -scoped_refptr<BluetoothSocket> BluetoothSocketChromeOs::CreateBluetoothSocket( - const BluetoothServiceRecord& service_record) { - BluetoothSocketChromeOs* bluetooth_socket = NULL; - if (service_record.SupportsRfcomm()) { - int socket_fd = socket( - AF_BLUETOOTH, SOCK_STREAM | SOCK_NONBLOCK, BTPROTO_RFCOMM); - struct sockaddr_rc socket_address = { 0 }; - socket_address.rc_family = AF_BLUETOOTH; - socket_address.rc_channel = service_record.rfcomm_channel(); - bluetooth_utils::str2ba(service_record.address(), - &socket_address.rc_bdaddr); - - int status = connect(socket_fd, (struct sockaddr *)&socket_address, - sizeof(socket_address)); - int errsv = errno; - if (status == 0 || errno == EINPROGRESS) { - bluetooth_socket = new BluetoothSocketChromeOs(service_record.address(), - socket_fd); - } else { - LOG(ERROR) << "Failed to connect bluetooth socket " - << "(" << service_record.address() << "): " - << "(" << errsv << ") " << strerror(errsv); - close(socket_fd); - } - } - // TODO(bryeung): add support for L2CAP sockets as well. - - return scoped_refptr<BluetoothSocketChromeOs>(bluetooth_socket); -} - -int BluetoothSocketChromeOs::fd() const { - return fd_; -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_socket_chromeos.h b/chrome/browser/chromeos/bluetooth/bluetooth_socket_chromeos.h deleted file mode 100644 index 7d0328c..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_socket_chromeos.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_SOCKET_CHROMEOS_H_ -#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_SOCKET_CHROMEOS_H_ - -#include <string> - -#include "base/memory/ref_counted.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_service_record.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_socket.h" - -namespace chromeos { - -// This class is an implementation of BluetoothSocket class for Chrome OS -// platform. -class BluetoothSocketChromeOs : public BluetoothSocket { - public: - static scoped_refptr<BluetoothSocket> CreateBluetoothSocket( - const BluetoothServiceRecord& service_record); - - // BluetoothSocket override - virtual int fd() const OVERRIDE; - - protected: - virtual ~BluetoothSocketChromeOs(); - - private: - BluetoothSocketChromeOs(const std::string& address, int fd); - - const std::string address_; - const int fd_; - - DISALLOW_COPY_AND_ASSIGN(BluetoothSocketChromeOs); -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_SOCKET_CHROMEOS_H_ diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_utils.cc b/chrome/browser/chromeos/bluetooth/bluetooth_utils.cc deleted file mode 100644 index 02643c6..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_utils.cc +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2012 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/chromeos/bluetooth/bluetooth_utils.h" - -#include <vector> - -#include <bluetooth/bluetooth.h> - -#include "base/logging.h" -#include "base/string_number_conversions.h" -#include "base/string_util.h" - -namespace { -static const char* kCommonUuidPostfix = "-0000-1000-8000-00805f9b34fb"; -static const char* kCommonUuidPrefix = "0000"; -static const int kUuidSize = 36; -} // namespace - -namespace chromeos { -namespace bluetooth_utils { - -bool str2ba(const std::string& in_address, bdaddr_t* out_address) { - if (!out_address) - return false; - - memset(out_address, 0, sizeof(*out_address)); - - if (in_address.size() != 17) - return false; - - std::string numbers_only; - for (int i = 0; i < 6; ++i) { - numbers_only += in_address.substr(i * 3, 2); - } - - std::vector<uint8> address_bytes; - if (base::HexStringToBytes(numbers_only, &address_bytes)) { - if (address_bytes.size() == 6) { - for (int i = 0; i < 6; ++i) { - out_address->b[5 - i] = address_bytes[i]; - } - return true; - } - } - - return false; -} - -std::string CanonicalUuid(std::string uuid) { - if (uuid.empty()) - return ""; - - if (uuid.size() < 11 && uuid.find("0x") == 0) - uuid = uuid.substr(2); - - if (!(uuid.size() == 4 || uuid.size() == 8 || uuid.size() == 36)) - return ""; - - if (uuid.size() == 4 || uuid.size() == 8) { - for (size_t i = 0; i < uuid.size(); ++i) { - if (!IsHexDigit(uuid[i])) - return ""; - } - - if (uuid.size() == 4) - return kCommonUuidPrefix + uuid + kCommonUuidPostfix; - - return uuid + kCommonUuidPostfix; - } - - std::string uuid_result(uuid); - for (int i = 0; i < kUuidSize; ++i) { - if (i == 8 || i == 13 || i == 18 || i == 23) { - if (uuid[i] != '-') - return ""; - } else { - if (!IsHexDigit(uuid[i])) - return ""; - uuid_result[i] = tolower(uuid[i]); - } - } - return uuid_result; -} - -} // namespace bluetooth_utils -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_utils.h b/chrome/browser/chromeos/bluetooth/bluetooth_utils.h deleted file mode 100644 index 78f8ff5..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_utils.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_UTILS_H_ -#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_UTILS_H_ - -#include <string> - -#include <bluetooth/bluetooth.h> - -namespace chromeos { -namespace bluetooth_utils { - -// Converts a bluetooth address in the format "B0:D0:9C:0F:3A:2D" into a -// bdaddr_t struct. Returns true on success, false on failure. The contents -// of |out_address| are zeroed on failure. -// Note that the order is reversed upon conversion. For example, -// "B0:D0:9C:0F:3A:2D" -> {"0x2d", "0x3a", "0x0f", "0x9c", "0xd0", "0xb0"} -bool str2ba(const std::string& in_address, bdaddr_t* out_address); - -// Takes a 4, 8 or 36 character UUID, validates it and returns it in 36 -// character format with all hex digits lower case. If |uuid| is invalid, the -// empty string is returned. -// -// Valid inputs are: -// XXXX -// 0xXXXX -// XXXXXXXX -// 0xXXXXXXXX -// XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -std::string CanonicalUuid(std::string uuid); - -} // namespace bluetooth_utils -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_UTILS_H_ - diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_utils_unittest.cc b/chrome/browser/chromeos/bluetooth/bluetooth_utils_unittest.cc deleted file mode 100644 index 6dad3a0..0000000 --- a/chrome/browser/chromeos/bluetooth/bluetooth_utils_unittest.cc +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2012 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 <bluetooth/bluetooth.h> - -#include "chrome/browser/chromeos/bluetooth/bluetooth_utils.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace chromeos { - -TEST(BluetoothUtilsTest, str2ba) { - bdaddr_t bluetooth_address; - - EXPECT_TRUE(bluetooth_utils::str2ba("01:02:03:0A:10:A0", &bluetooth_address)); - EXPECT_EQ(1, bluetooth_address.b[5]); - EXPECT_EQ(2, bluetooth_address.b[4]); - EXPECT_EQ(3, bluetooth_address.b[3]); - EXPECT_EQ(10, bluetooth_address.b[2]); - EXPECT_EQ(16, bluetooth_address.b[1]); - EXPECT_EQ(160, bluetooth_address.b[0]); - - EXPECT_FALSE(bluetooth_utils::str2ba("obviously wrong", &bluetooth_address)); - EXPECT_FALSE(bluetooth_utils::str2ba("00:00", &bluetooth_address)); - EXPECT_FALSE(bluetooth_utils::str2ba("00:00:00:00:00:00:00", - &bluetooth_address)); - EXPECT_FALSE(bluetooth_utils::str2ba("01:02:03:0A:10:A0", NULL)); -} - -TEST(BluetoothUtilsTest, CanonicalUuid) { - // Does nothing for an already canonical UUID - EXPECT_EQ("00001101-0000-1000-8000-00805f9b34fb", - bluetooth_utils::CanonicalUuid("00001101-0000-1000-8000-00805f9b34fb")); - - // Rejects misformatted - EXPECT_EQ("", bluetooth_utils::CanonicalUuid("1101a")); - EXPECT_EQ("", bluetooth_utils::CanonicalUuid("Z101")); - EXPECT_EQ("", bluetooth_utils::CanonicalUuid("0000-1101")); - EXPECT_EQ("", bluetooth_utils::CanonicalUuid("0000Z101")); - EXPECT_EQ("", - bluetooth_utils::CanonicalUuid("0001101-0000-1000-8000-00805f9b34fb")); - EXPECT_EQ("", - bluetooth_utils::CanonicalUuid("Z0001101-0000-1000-8000-00805f9b34fb")); - EXPECT_EQ("", - bluetooth_utils::CanonicalUuid("00001101 0000-1000-8000-00805f9b34fb")); - EXPECT_EQ("", - bluetooth_utils::CanonicalUuid("00001101-0000:1000-8000-00805f9b34fb")); - EXPECT_EQ("", - bluetooth_utils::CanonicalUuid("00001101-0000-1000;8000-00805f9b34fb")); - EXPECT_EQ("", - bluetooth_utils::CanonicalUuid("00001101-0000-1000-8000000805f9b34fb")); - - // Lower case - EXPECT_EQ("00001101-0000-1000-8000-00805f9b34fb", - bluetooth_utils::CanonicalUuid("00001101-0000-1000-8000-00805F9B34FB")); - - // Short to full - EXPECT_EQ("00001101-0000-1000-8000-00805f9b34fb", - bluetooth_utils::CanonicalUuid("1101")); - EXPECT_EQ("00001101-0000-1000-8000-00805f9b34fb", - bluetooth_utils::CanonicalUuid("0x1101")); - EXPECT_EQ("00001101-0000-1000-8000-00805f9b34fb", - bluetooth_utils::CanonicalUuid("00001101")); - EXPECT_EQ("00001101-0000-1000-8000-00805f9b34fb", - bluetooth_utils::CanonicalUuid("0x00001101")); - - // No 0x prefix on 36 character - EXPECT_EQ("", - bluetooth_utils::CanonicalUuid("0x00001101-0000-1000-8000-00805f9b34fb")); -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.cc b/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.cc deleted file mode 100644 index b3e6375..0000000 --- a/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.cc +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) 2012 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/chromeos/bluetooth/test/mock_bluetooth_adapter.h" - -namespace chromeos { - -MockBluetoothAdapter::Observer::Observer() {} -MockBluetoothAdapter::Observer::~Observer() {} - -MockBluetoothAdapter::MockBluetoothAdapter(const std::string& address, - const std::string& name) { - address_ = address; - name_ = name; -} - -MockBluetoothAdapter::~MockBluetoothAdapter() {} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h b/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h deleted file mode 100644 index ba94c20..0000000 --- a/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_BLUETOOTH_TEST_MOCK_BLUETOOTH_ADAPTER_H_ -#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_TEST_MOCK_BLUETOOTH_ADAPTER_H_ - -#include <string> - -#include "base/callback.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" -#include "chromeos/dbus/bluetooth_out_of_band_client.h" -#include "testing/gmock/include/gmock/gmock.h" - -namespace chromeos { - -class MockBluetoothAdapter : public BluetoothAdapter { - public: - class Observer : public BluetoothAdapter::Observer { - public: - Observer(); - virtual ~Observer(); - - MOCK_METHOD2(AdapterPresentChanged, void(BluetoothAdapter*, bool)); - MOCK_METHOD2(AdapterPoweredChanged, void(BluetoothAdapter*, bool)); - MOCK_METHOD2(AdapterDiscoveringChanged, void(BluetoothAdapter*, bool)); - MOCK_METHOD2(DeviceAdded, void(BluetoothAdapter*, BluetoothDevice*)); - MOCK_METHOD2(DeviceChanged, void(BluetoothAdapter*, BluetoothDevice*)); - MOCK_METHOD2(DeviceRemoved, void(BluetoothAdapter*, BluetoothDevice*)); - }; - - MockBluetoothAdapter(const std::string& address, const std::string& name); - - MOCK_METHOD1(AddObserver, void(BluetoothAdapter::Observer*)); - MOCK_METHOD1(RemoveObserver, void(BluetoothAdapter::Observer*)); - MOCK_CONST_METHOD0(IsPresent, bool()); - MOCK_CONST_METHOD0(IsPowered, bool()); - MOCK_METHOD3(SetPowered, - void(bool discovering, - const base::Closure& callback, - const ErrorCallback& error_callback)); - MOCK_CONST_METHOD0(IsDiscovering, bool()); - MOCK_METHOD3(SetDiscovering, - void(bool discovering, - const base::Closure& callback, - const ErrorCallback& error_callback)); - MOCK_CONST_METHOD0(GetDevices, BluetoothAdapter::ConstDeviceList()); - MOCK_METHOD1(GetDevice, BluetoothDevice*(const std::string& address)); - MOCK_CONST_METHOD1(GetDevice, - const BluetoothDevice*(const std::string& address)); - MOCK_METHOD2( - ReadLocalOutOfBandPairingData, - void(const BluetoothOutOfBandPairingDataCallback& callback, - const ErrorCallback& error_callback)); - protected: - virtual ~MockBluetoothAdapter(); -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_TEST_MOCK_BLUETOOTH_ADAPTER_H_ diff --git a/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_device.cc b/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_device.cc deleted file mode 100644 index 1387fd2..0000000 --- a/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_device.cc +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2012 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 "base/utf_string_conversions.h" -#include "chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/test/mock_bluetooth_device.h" - -namespace chromeos { - -MockBluetoothDevice::MockBluetoothDevice(MockBluetoothAdapter* adapter, - const std::string& name, - const std::string& address, - bool paired, - bool bonded, - bool connected) - : name_(UTF8ToUTF16(name)), - address_(address) { - ON_CALL(*this, GetName()) - .WillByDefault(testing::Return(name_)); - ON_CALL(*this, address()) - .WillByDefault(testing::ReturnRef(address_)); - ON_CALL(*this, IsPaired()) - .WillByDefault(testing::Return(paired)); - ON_CALL(*this, IsBonded()) - .WillByDefault(testing::Return(bonded)); - ON_CALL(*this, IsConnected()) - .WillByDefault(testing::Return(connected)); - ON_CALL(*this, ExpectingPinCode()) - .WillByDefault(testing::Return(false)); - ON_CALL(*this, ExpectingPasskey()) - .WillByDefault(testing::Return(false)); - ON_CALL(*this, ExpectingConfirmation()) - .WillByDefault(testing::Return(false)); - ON_CALL(*this, GetServices()) - .WillByDefault(testing::ReturnRef(service_list_)); -} - -MockBluetoothDevice::~MockBluetoothDevice() {} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_device.h b/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_device.h deleted file mode 100644 index 650928c..0000000 --- a/chrome/browser/chromeos/bluetooth/test/mock_bluetooth_device.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_BLUETOOTH_TEST_MOCK_BLUETOOTH_DEVICE_H_ -#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_TEST_MOCK_BLUETOOTH_DEVICE_H_ - -#include <string> - -#include "base/string16.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" -#include "chromeos/dbus/bluetooth_out_of_band_pairing_data.h" -#include "testing/gmock/include/gmock/gmock.h" - -namespace chromeos { - -class MockBluetoothDevice : public BluetoothDevice { - public: - MockBluetoothDevice(MockBluetoothAdapter* adapter, - const std::string& name, - const std::string& address, - bool paired, - bool bonded, - bool connected); - virtual ~MockBluetoothDevice(); - - MOCK_CONST_METHOD0(address, const std::string&()); - MOCK_CONST_METHOD0(GetName, string16()); - MOCK_CONST_METHOD0(GetDeviceType, BluetoothDevice::DeviceType()); - MOCK_CONST_METHOD0(IsPaired, bool()); - MOCK_CONST_METHOD0(IsBonded, bool()); - MOCK_CONST_METHOD0(IsConnected, bool()); - MOCK_CONST_METHOD0(GetServices, const ServiceList&()); - MOCK_METHOD2(GetServiceRecords, - void(const BluetoothDevice::ServiceRecordsCallback&, - const BluetoothDevice::ErrorCallback&)); - MOCK_CONST_METHOD1(ProvidesServiceWithUUID, bool(const std::string&)); - MOCK_METHOD2(ProvidesServiceWithName, - void(const std::string&, - const BluetoothDevice::ProvidesServiceCallback&)); - MOCK_CONST_METHOD0(ExpectingPinCode, bool()); - MOCK_CONST_METHOD0(ExpectingPasskey, bool()); - MOCK_CONST_METHOD0(ExpectingConfirmation, bool()); - MOCK_METHOD3(Connect, - void(BluetoothDevice::PairingDelegate* pairnig_delegate, - const base::Closure& callback, - const BluetoothDevice::ErrorCallback& error_callback)); - MOCK_METHOD1(SetPinCode, void(const std::string&)); - MOCK_METHOD1(SetPasskey, void(uint32)); - MOCK_METHOD0(ConfirmPairing, void()); - MOCK_METHOD0(RejectPairing, void()); - MOCK_METHOD0(CancelPairing, void()); - MOCK_METHOD2(Disconnect, - void(const base::Closure& callback, - const BluetoothDevice::ErrorCallback& error_callback)); - MOCK_METHOD1(Forget, void(const BluetoothDevice::ErrorCallback&)); - MOCK_METHOD2(ConnectToService, - void(const std::string&, - const BluetoothDevice::SocketCallback&)); - - MOCK_METHOD3(SetOutOfBandPairingData, - void(const chromeos::BluetoothOutOfBandPairingData& data, - const base::Closure& callback, - const BluetoothDevice::ErrorCallback& error_callback)); - MOCK_METHOD2(ClearOutOfBandPairingData, - void(const base::Closure& callback, - const BluetoothDevice::ErrorCallback& error_callback)); - - private: - string16 name_; - std::string address_; - BluetoothDevice::ServiceList service_list_; -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_TEST_MOCK_BLUETOOTH_DEVICE_H_ diff --git a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc index 6221139..eb000b1 100644 --- a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc +++ b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc @@ -30,9 +30,6 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/accessibility/accessibility_util.h" #include "chrome/browser/chromeos/audio/audio_handler.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" #include "chrome/browser/chromeos/cros/cros_library.h" #include "chrome/browser/chromeos/cros/network_library.h" #include "chrome/browser/chromeos/drive/drive_system_service.h" @@ -72,6 +69,9 @@ #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/user_metrics.h" +#include "device/bluetooth/bluetooth_adapter.h" +#include "device/bluetooth/bluetooth_adapter_factory.h" +#include "device/bluetooth/bluetooth_device.h" #include "grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" @@ -154,7 +154,7 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, public content::NotificationObserver, public input_method::InputMethodManager::Observer, public system::TimezoneSettings::Observer, - public BluetoothAdapter::Observer, + public device::BluetoothAdapter::Observer, public SystemKeyEventListener::CapsLockObserver, public ash::NetworkTrayDelegate { public: @@ -216,7 +216,7 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, network_icon_->SetResourceColorTheme(NetworkMenuIcon::COLOR_LIGHT); network_icon_dark_->SetResourceColorTheme(NetworkMenuIcon::COLOR_DARK); - bluetooth_adapter_ = BluetoothAdapterFactory::DefaultAdapter(); + bluetooth_adapter_ = device::BluetoothAdapterFactory::DefaultAdapter(); bluetooth_adapter_->AddObserver(this); } @@ -362,9 +362,10 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, virtual void GetAvailableBluetoothDevices( ash::BluetoothDeviceList* list) OVERRIDE { - BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices(); + device::BluetoothAdapter::DeviceList devices = + bluetooth_adapter_->GetDevices(); for (size_t i = 0; i < devices.size(); ++i) { - BluetoothDevice* device = devices[i]; + device::BluetoothDevice* device = devices[i]; if (!device->IsPaired()) continue; ash::BluetoothDeviceInfo info; @@ -376,7 +377,7 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, } virtual void ToggleBluetoothConnection(const std::string& address) OVERRIDE { - BluetoothDevice* device = bluetooth_adapter_->GetDevice(address); + device::BluetoothDevice* device = bluetooth_adapter_->GetDevice(address); if (!device) return; if (device->IsConnected()) { @@ -1155,34 +1156,34 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, } // Overridden from BluetoothAdapter::Observer. - virtual void AdapterPresentChanged(BluetoothAdapter* adapter, + virtual void AdapterPresentChanged(device::BluetoothAdapter* adapter, bool present) OVERRIDE { NotifyRefreshBluetooth(); } - virtual void AdapterPoweredChanged(BluetoothAdapter* adapter, + virtual void AdapterPoweredChanged(device::BluetoothAdapter* adapter, bool powered) OVERRIDE { NotifyRefreshBluetooth(); } - virtual void AdapterDiscoveringChanged(BluetoothAdapter* adapter, + virtual void AdapterDiscoveringChanged(device::BluetoothAdapter* adapter, bool discovering) OVERRIDE { // TODO: Perhaps start/stop throbbing the icon, or some other visual // effects? } - virtual void DeviceAdded(BluetoothAdapter* adapter, - BluetoothDevice* device) OVERRIDE { + virtual void DeviceAdded(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) OVERRIDE { NotifyRefreshBluetooth(); } - virtual void DeviceChanged(BluetoothAdapter* adapter, - BluetoothDevice* device) OVERRIDE { + virtual void DeviceChanged(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) OVERRIDE { NotifyRefreshBluetooth(); } - virtual void DeviceRemoved(BluetoothAdapter* adapter, - BluetoothDevice* device) OVERRIDE { + virtual void DeviceRemoved(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) OVERRIDE { NotifyRefreshBluetooth(); } @@ -1251,7 +1252,7 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, std::string last_connection_string_; - scoped_refptr<BluetoothAdapter> bluetooth_adapter_; + scoped_refptr<device::BluetoothAdapter> bluetooth_adapter_; BooleanPrefMember accessibility_enabled_; diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc index 12b4350..6e425a4 100644 --- a/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc +++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc @@ -10,45 +10,51 @@ #include <string> +#include "base/memory/ref_counted.h" #include "chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h" +#include "chrome/browser/extensions/bluetooth_event_router.h" #include "chrome/browser/extensions/event_names.h" #include "chrome/browser/extensions/event_router.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/api/experimental_bluetooth.h" #include "content/public/browser/browser_thread.h" +#include "device/bluetooth/bluetooth_adapter.h" +#include "device/bluetooth/bluetooth_device.h" +#include "device/bluetooth/bluetooth_out_of_band_pairing_data.h" +#include "device/bluetooth/bluetooth_service_record.h" +#include "device/bluetooth/bluetooth_socket.h" +#include "device/bluetooth/bluetooth_utils.h" #if defined(OS_CHROMEOS) -#include "base/memory/ref_counted.h" #include "base/safe_strerror_posix.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_service_record.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_socket.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_utils.h" -#include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" -#include "chromeos/dbus/bluetooth_out_of_band_client.h" -#include "chromeos/dbus/bluetooth_out_of_band_pairing_data.h" +#endif + +using device::BluetoothAdapter; +using device::BluetoothDevice; +using device::BluetoothServiceRecord; +using device::BluetoothSocket; namespace { -chromeos::ExtensionBluetoothEventRouter* GetEventRouter(Profile* profile) { +extensions::ExtensionBluetoothEventRouter* GetEventRouter(Profile* profile) { return profile->GetExtensionService()->bluetooth_event_router(); } -const chromeos::BluetoothAdapter& GetAdapter(Profile* profile) { +const BluetoothAdapter* GetAdapter(Profile* profile) { return GetEventRouter(profile)->adapter(); } -chromeos::BluetoothAdapter* GetMutableAdapter(Profile* profile) { - chromeos::BluetoothAdapter* adapter = - GetEventRouter(profile)->GetMutableAdapter(); - CHECK(adapter); +BluetoothAdapter* GetMutableAdapter(Profile* profile) { + BluetoothAdapter* adapter = GetEventRouter(profile)->GetMutableAdapter(); return adapter; } +bool IsBluetoothSupported(Profile* profile) { + return GetAdapter(profile) != NULL; +} + } // namespace -#endif namespace { @@ -59,6 +65,8 @@ const char kCouldNotSetOutOfBandPairingData[] = const char kFailedToConnect[] = "Connection failed"; const char kInvalidDevice[] = "Invalid device"; const char kInvalidUuid[] = "Invalid UUID"; +const char kPlatformNotSupported[] = + "This operation is not supported on your platform"; const char kServiceDiscoveryFailed[] = "Service discovery failed"; const char kSocketNotFoundError[] = "Socket not found: invalid socket id"; const char kStartDiscoveryFailed[] = "Starting discovery failed"; @@ -78,25 +86,43 @@ namespace Write = extensions::api::experimental_bluetooth::Write; namespace extensions { namespace api { -#if defined(OS_CHROMEOS) - bool BluetoothIsAvailableFunction::RunImpl() { - SetResult(Value::CreateBooleanValue(GetAdapter(profile()).IsPresent())); + if (!IsBluetoothSupported(profile())) { + SetError(kPlatformNotSupported); + return false; + } + + SetResult(Value::CreateBooleanValue(GetAdapter(profile())->IsPresent())); return true; } bool BluetoothIsPoweredFunction::RunImpl() { - SetResult(Value::CreateBooleanValue(GetAdapter(profile()).IsPowered())); + if (!IsBluetoothSupported(profile())) { + SetError(kPlatformNotSupported); + return false; + } + + SetResult(Value::CreateBooleanValue(GetAdapter(profile())->IsPowered())); return true; } bool BluetoothGetAddressFunction::RunImpl() { - SetResult(Value::CreateStringValue(GetAdapter(profile()).address())); + if (!IsBluetoothSupported(profile())) { + SetError(kPlatformNotSupported); + return false; + } + + SetResult(Value::CreateStringValue(GetAdapter(profile())->address())); return true; } bool BluetoothGetNameFunction::RunImpl() { - SetResult(Value::CreateStringValue(GetAdapter(profile()).name())); + if (!IsBluetoothSupported(profile())) { + SetError(kPlatformNotSupported); + return false; + } + + SetResult(Value::CreateStringValue(GetAdapter(profile())->name())); return true; } @@ -105,7 +131,7 @@ BluetoothGetDevicesFunction::BluetoothGetDevicesFunction() device_events_sent_(0) {} void BluetoothGetDevicesFunction::DispatchDeviceSearchResult( - const chromeos::BluetoothDevice& device) { + const BluetoothDevice& device) { experimental_bluetooth::Device extension_device; experimental_bluetooth::BluetoothDeviceToApiDevice(device, &extension_device); GetEventRouter(profile())->DispatchDeviceEvent( @@ -116,8 +142,7 @@ void BluetoothGetDevicesFunction::DispatchDeviceSearchResult( } void BluetoothGetDevicesFunction::ProvidesServiceCallback( - const chromeos::BluetoothDevice* device, - bool providesService) { + const BluetoothDevice* device, bool providesService) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); CHECK(device); @@ -145,6 +170,11 @@ void BluetoothGetDevicesFunction::FinishDeviceSearch() { } bool BluetoothGetDevicesFunction::RunImpl() { + if (!IsBluetoothSupported(profile())) { + SetError(kPlatformNotSupported); + return false; + } + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); scoped_ptr<GetDevices::Params> params(GetDevices::Params::Create(*args_)); @@ -153,7 +183,7 @@ bool BluetoothGetDevicesFunction::RunImpl() { std::string uuid; if (options.uuid.get() != NULL) { - uuid = chromeos::bluetooth_utils::CanonicalUuid(*options.uuid.get()); + uuid = device::bluetooth_utils::CanonicalUuid(*options.uuid.get()); if (uuid.empty()) { SetError(kInvalidUuid); return false; @@ -162,11 +192,11 @@ bool BluetoothGetDevicesFunction::RunImpl() { CHECK_EQ(0, callbacks_pending_); - chromeos::BluetoothAdapter::DeviceList devices = + BluetoothAdapter::DeviceList devices = GetMutableAdapter(profile())->GetDevices(); - for (chromeos::BluetoothAdapter::DeviceList::iterator i = devices.begin(); + for (BluetoothAdapter::DeviceList::iterator i = devices.begin(); i != devices.end(); ++i) { - chromeos::BluetoothDevice* device = *i; + BluetoothDevice* device = *i; CHECK(device); if (!uuid.empty() && !(device->ProvidesServiceWithUUID(uuid))) @@ -197,10 +227,10 @@ bool BluetoothGetDevicesFunction::RunImpl() { void BluetoothGetServicesFunction::GetServiceRecordsCallback( base::ListValue* services, - const chromeos::BluetoothDevice::ServiceRecordList& records) { - for (chromeos::BluetoothDevice::ServiceRecordList::const_iterator i = - records.begin(); i != records.end(); ++i) { - const chromeos::BluetoothServiceRecord& record = **i; + const BluetoothDevice::ServiceRecordList& records) { + for (BluetoothDevice::ServiceRecordList::const_iterator i = records.begin(); + i != records.end(); ++i) { + const BluetoothServiceRecord& record = **i; experimental_bluetooth::ServiceRecord api_record; api_record.name = record.name(); if (!record.uuid().empty()) @@ -217,11 +247,16 @@ void BluetoothGetServicesFunction::OnErrorCallback() { } bool BluetoothGetServicesFunction::RunImpl() { + if (!IsBluetoothSupported(profile())) { + SetError(kPlatformNotSupported); + return false; + } + scoped_ptr<GetServices::Params> params(GetServices::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); const experimental_bluetooth::GetServicesOptions& options = params->options; - chromeos::BluetoothDevice* device = + BluetoothDevice* device = GetMutableAdapter(profile())->GetDevice(options.device_address); if (!device) { SetError(kInvalidDevice); @@ -242,9 +277,9 @@ bool BluetoothGetServicesFunction::RunImpl() { } void BluetoothConnectFunction::ConnectToServiceCallback( - const chromeos::BluetoothDevice* device, + const BluetoothDevice* device, const std::string& service_uuid, - scoped_refptr<chromeos::BluetoothSocket> socket) { + scoped_refptr<BluetoothSocket> socket) { if (socket.get()) { int socket_id = GetEventRouter(profile())->RegisterSocket(socket); @@ -262,18 +297,23 @@ void BluetoothConnectFunction::ConnectToServiceCallback( } bool BluetoothConnectFunction::RunImpl() { + if (!IsBluetoothSupported(profile())) { + SetError(kPlatformNotSupported); + return false; + } + scoped_ptr<Connect::Params> params(Connect::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); const experimental_bluetooth::ConnectOptions& options = params->options; - std::string uuid = chromeos::bluetooth_utils::CanonicalUuid( + std::string uuid = device::bluetooth_utils::CanonicalUuid( options.service_uuid); if (uuid.empty()) { SetError(kInvalidUuid); return false; } - chromeos::BluetoothDevice* device = + BluetoothDevice* device = GetMutableAdapter(profile())->GetDevice(options.device_address); if (!device) { SetError(kInvalidDevice); @@ -295,6 +335,9 @@ bool BluetoothDisconnectFunction::RunImpl() { return GetEventRouter(profile())->ReleaseSocket(options.socket_id); } +BluetoothReadFunction::BluetoothReadFunction() {} +BluetoothReadFunction::~BluetoothReadFunction() {} + bool BluetoothReadFunction::Prepare() { scoped_ptr<Read::Params> params(Read::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); @@ -311,8 +354,11 @@ bool BluetoothReadFunction::Prepare() { } void BluetoothReadFunction::Work() { + if (!socket_.get()) + return; + +#if defined(OS_CHROMEOS) DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); - CHECK(socket_.get() != NULL); char* all_bytes = NULL; ssize_t buffer_size = 0; @@ -343,12 +389,16 @@ void BluetoothReadFunction::Work() { if (!success_) SetError(safe_strerror(errsv)); +#endif } bool BluetoothReadFunction::Respond() { return success_; } +BluetoothWriteFunction::BluetoothWriteFunction() {} +BluetoothWriteFunction::~BluetoothWriteFunction() {} + bool BluetoothWriteFunction::Prepare() { // TODO(bryeung): update to new-style parameter passing when ArrayBuffer // support is added @@ -377,6 +427,7 @@ void BluetoothWriteFunction::Work() { if (socket_.get() == NULL) return; +#if defined(OS_CHROMEOS) ssize_t bytes_written = write(socket_->fd(), data_to_write_->GetBuffer(), data_to_write_->GetSize()); int errsv = errno; @@ -391,6 +442,7 @@ void BluetoothWriteFunction::Work() { if (!success_) SetError(safe_strerror(errsv)); +#endif } bool BluetoothWriteFunction::Respond() { @@ -407,6 +459,11 @@ void BluetoothSetOutOfBandPairingDataFunction::OnErrorCallback() { } bool BluetoothSetOutOfBandPairingDataFunction::RunImpl() { + if (!IsBluetoothSupported(profile())) { + SetError(kPlatformNotSupported); + return false; + } + // TODO(bryeung): update to new-style parameter passing when ArrayBuffer // support is added DictionaryValue* options; @@ -414,8 +471,7 @@ bool BluetoothSetOutOfBandPairingDataFunction::RunImpl() { std::string address; EXTENSION_FUNCTION_VALIDATE(options->GetString("deviceAddress", &address)); - chromeos::BluetoothDevice* device = - GetMutableAdapter(profile())->GetDevice(address); + BluetoothDevice* device = GetMutableAdapter(profile())->GetDevice(address); if (!device) { SetError(kInvalidDevice); return false; @@ -425,22 +481,22 @@ bool BluetoothSetOutOfBandPairingDataFunction::RunImpl() { DictionaryValue* data_in; EXTENSION_FUNCTION_VALIDATE(options->GetDictionary("data", &data_in)); - chromeos::BluetoothOutOfBandPairingData data_out; + device::BluetoothOutOfBandPairingData data_out; base::BinaryValue* tmp_data; EXTENSION_FUNCTION_VALIDATE(data_in->GetBinary("hash", &tmp_data)); EXTENSION_FUNCTION_VALIDATE( - tmp_data->GetSize() == chromeos::kBluetoothOutOfBandPairingDataSize); + tmp_data->GetSize() == device::kBluetoothOutOfBandPairingDataSize); memcpy(data_out.hash, reinterpret_cast<uint8_t*>(tmp_data->GetBuffer()), - chromeos::kBluetoothOutOfBandPairingDataSize); + device::kBluetoothOutOfBandPairingDataSize); EXTENSION_FUNCTION_VALIDATE(data_in->GetBinary("randomizer", &tmp_data)); EXTENSION_FUNCTION_VALIDATE( - tmp_data->GetSize() == chromeos::kBluetoothOutOfBandPairingDataSize); + tmp_data->GetSize() == device::kBluetoothOutOfBandPairingDataSize); memcpy(data_out.randomizer, reinterpret_cast<uint8_t*>(tmp_data->GetBuffer()), - chromeos::kBluetoothOutOfBandPairingDataSize); + device::kBluetoothOutOfBandPairingDataSize); device->SetOutOfBandPairingData( data_out, @@ -460,13 +516,13 @@ bool BluetoothSetOutOfBandPairingDataFunction::RunImpl() { } void BluetoothGetLocalOutOfBandPairingDataFunction::ReadCallback( - const chromeos::BluetoothOutOfBandPairingData& data) { + const device::BluetoothOutOfBandPairingData& data) { base::BinaryValue* hash = base::BinaryValue::CreateWithCopiedBuffer( reinterpret_cast<const char*>(data.hash), - chromeos::kBluetoothOutOfBandPairingDataSize); + device::kBluetoothOutOfBandPairingDataSize); base::BinaryValue* randomizer = base::BinaryValue::CreateWithCopiedBuffer( reinterpret_cast<const char*>(data.randomizer), - chromeos::kBluetoothOutOfBandPairingDataSize); + device::kBluetoothOutOfBandPairingDataSize); // TODO(bryeung): convert to experimental_bluetooth::OutOfBandPairingData // when ArrayBuffer support within objects is completed. @@ -485,6 +541,11 @@ void BluetoothGetLocalOutOfBandPairingDataFunction::ErrorCallback() { } bool BluetoothGetLocalOutOfBandPairingDataFunction::RunImpl() { + if (!IsBluetoothSupported(profile())) { + SetError(kPlatformNotSupported); + return false; + } + GetMutableAdapter(profile())->ReadLocalOutOfBandPairingData( base::Bind(&BluetoothGetLocalOutOfBandPairingDataFunction::ReadCallback, this), @@ -504,6 +565,11 @@ void BluetoothStartDiscoveryFunction::OnErrorCallback() { } bool BluetoothStartDiscoveryFunction::RunImpl() { + if (!IsBluetoothSupported(profile())) { + SetError(kPlatformNotSupported); + return false; + } + GetEventRouter(profile())->SetSendDiscoveryEvents(true); // If the adapter is already discovering, there is nothing else to do. @@ -528,6 +594,11 @@ void BluetoothStopDiscoveryFunction::OnErrorCallback() { } bool BluetoothStopDiscoveryFunction::RunImpl() { + if (!IsBluetoothSupported(profile())) { + SetError(kPlatformNotSupported); + return false; + } + GetEventRouter(profile())->SetSendDiscoveryEvents(false); if (GetEventRouter(profile())->IsResponsibleForDiscovery()) { GetMutableAdapter(profile())->SetDiscovering(false, @@ -537,102 +608,5 @@ bool BluetoothStopDiscoveryFunction::RunImpl() { return true; } -#else - -// ----------------------------------------------------------------------------- -// NIY stubs -// ----------------------------------------------------------------------------- -bool BluetoothIsAvailableFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothIsPoweredFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothGetAddressFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothGetNameFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothGetDevicesFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothGetServicesFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothConnectFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothDisconnectFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothReadFunction::Prepare() { - return true; -} - -void BluetoothReadFunction::Work() { -} - -bool BluetoothReadFunction::Respond() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothWriteFunction::Prepare() { - return true; -} - -void BluetoothWriteFunction::Work() { -} - -bool BluetoothWriteFunction::Respond() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothStartDiscoveryFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothStopDiscoveryFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothSetOutOfBandPairingDataFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -bool BluetoothGetLocalOutOfBandPairingDataFunction::RunImpl() { - NOTREACHED() << "Not implemented yet"; - return false; -} - -#endif - -BluetoothReadFunction::BluetoothReadFunction() {} -BluetoothReadFunction::~BluetoothReadFunction() {} - -BluetoothWriteFunction::BluetoothWriteFunction() {} -BluetoothWriteFunction::~BluetoothWriteFunction() {} - } // namespace api } // namespace extensions diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api.h b/chrome/browser/extensions/api/bluetooth/bluetooth_api.h index 4db078a..3ae23b1 100644 --- a/chrome/browser/extensions/api/bluetooth/bluetooth_api.h +++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api.h @@ -7,21 +7,17 @@ #include <string> +#include "base/memory/ref_counted.h" #include "chrome/browser/extensions/api/api_function.h" #include "chrome/browser/extensions/extension_function.h" +#include "device/bluetooth/bluetooth_device.h" -#if defined(OS_CHROMEOS) -#include "base/memory/ref_counted.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_socket.h" - -namespace chromeos { +namespace device { class BluetoothSocket; struct BluetoothOutOfBandPairingData; -} // namespace chromeos -#endif +} // namespace device namespace extensions { namespace api { @@ -74,9 +70,7 @@ class BluetoothGetDevicesFunction : public AsyncExtensionFunction { public: DECLARE_EXTENSION_FUNCTION_NAME("experimental.bluetooth.getDevices") -#if defined(OS_CHROMEOS) BluetoothGetDevicesFunction(); -#endif protected: virtual ~BluetoothGetDevicesFunction() {} @@ -85,15 +79,13 @@ class BluetoothGetDevicesFunction : public AsyncExtensionFunction { virtual bool RunImpl() OVERRIDE; private: -#if defined(OS_CHROMEOS) - void DispatchDeviceSearchResult(const chromeos::BluetoothDevice& device); - void ProvidesServiceCallback(const chromeos::BluetoothDevice* device, + void DispatchDeviceSearchResult(const device::BluetoothDevice& device); + void ProvidesServiceCallback(const device::BluetoothDevice* device, bool providesService); void FinishDeviceSearch(); int callbacks_pending_; int device_events_sent_; -#endif }; class BluetoothGetServicesFunction : public AsyncExtensionFunction { @@ -106,13 +98,11 @@ class BluetoothGetServicesFunction : public AsyncExtensionFunction { // ExtensionFunction: virtual bool RunImpl() OVERRIDE; -#if defined(OS_CHROMEOS) private: void GetServiceRecordsCallback( base::ListValue* services, - const chromeos::BluetoothDevice::ServiceRecordList& records); + const device::BluetoothDevice::ServiceRecordList& records); void OnErrorCallback(); -#endif }; class BluetoothConnectFunction : public AsyncExtensionFunction { @@ -125,12 +115,10 @@ class BluetoothConnectFunction : public AsyncExtensionFunction { virtual bool RunImpl() OVERRIDE; private: -#if defined(OS_CHROMEOS) void ConnectToServiceCallback( - const chromeos::BluetoothDevice* device, + const device::BluetoothDevice* device, const std::string& service_uuid, - scoped_refptr<chromeos::BluetoothSocket> socket); -#endif + scoped_refptr<device::BluetoothSocket> socket); }; class BluetoothDisconnectFunction : public SyncExtensionFunction { @@ -158,10 +146,8 @@ class BluetoothReadFunction : public AsyncApiFunction { virtual void Work() OVERRIDE; private: -#if defined(OS_CHROMEOS) bool success_; - scoped_refptr<chromeos::BluetoothSocket> socket_; -#endif + scoped_refptr<device::BluetoothSocket> socket_; }; class BluetoothWriteFunction : public AsyncApiFunction { @@ -178,11 +164,9 @@ class BluetoothWriteFunction : public AsyncApiFunction { virtual void Work() OVERRIDE; private: -#if defined(OS_CHROMEOS) bool success_; const base::BinaryValue* data_to_write_; // memory is owned by args_ - scoped_refptr<chromeos::BluetoothSocket> socket_; -#endif + scoped_refptr<device::BluetoothSocket> socket_; }; class BluetoothSetOutOfBandPairingDataFunction @@ -194,10 +178,8 @@ class BluetoothSetOutOfBandPairingDataFunction protected: virtual ~BluetoothSetOutOfBandPairingDataFunction() {} -#if defined(OS_CHROMEOS) void OnSuccessCallback(); void OnErrorCallback(); -#endif // ExtensionFunction: virtual bool RunImpl() OVERRIDE; @@ -212,10 +194,9 @@ class BluetoothGetLocalOutOfBandPairingDataFunction protected: virtual ~BluetoothGetLocalOutOfBandPairingDataFunction() {} -#if defined(OS_CHROMEOS) - void ReadCallback(const chromeos::BluetoothOutOfBandPairingData& data); + void ReadCallback( + const device::BluetoothOutOfBandPairingData& data); void ErrorCallback(); -#endif // ExtensionFunction: virtual bool RunImpl() OVERRIDE; @@ -231,11 +212,9 @@ class BluetoothStartDiscoveryFunction : public AsyncExtensionFunction { // ExtensionFunction: virtual bool RunImpl() OVERRIDE; -#if defined(OS_CHROMEOS) private: void OnSuccessCallback(); void OnErrorCallback(); -#endif }; class BluetoothStopDiscoveryFunction : public AsyncExtensionFunction { @@ -248,11 +227,9 @@ class BluetoothStopDiscoveryFunction : public AsyncExtensionFunction { // ExtensionFunction: virtual bool RunImpl() OVERRIDE; -#if defined(OS_CHROMEOS) private: void OnSuccessCallback(); void OnErrorCallback(); -#endif }; } // namespace api diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.cc index 5503434..d7e25bc 100644 --- a/chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.cc +++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.cc @@ -4,21 +4,18 @@ #include "chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h" -#if defined(OS_CHROMEOS) - #include "base/utf_string_conversions.h" #include "base/values.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" #include "chrome/common/extensions/api/experimental_bluetooth.h" +#include "device/bluetooth/bluetooth_device.h" namespace extensions { namespace api { namespace experimental_bluetooth { -// Fill in a Device object from a chromeos::BluetoothDevice. -void BluetoothDeviceToApiDevice( - const chromeos::BluetoothDevice& device, - Device* out) { +// Fill in a Device object from a BluetoothDevice. +void BluetoothDeviceToApiDevice(const device::BluetoothDevice& device, + Device* out) { out->name = UTF16ToUTF8(device.GetName()); out->address = device.address(); out->paired = device.IsPaired(); @@ -27,7 +24,7 @@ void BluetoothDeviceToApiDevice( } // The caller takes ownership of the returned pointer. -base::Value* BluetoothDeviceToValue(const chromeos::BluetoothDevice& device) { +base::Value* BluetoothDeviceToValue(const device::BluetoothDevice& device) { extensions::api::experimental_bluetooth::Device api_device; BluetoothDeviceToApiDevice(device, &api_device); return api_device.ToValue().release(); @@ -36,5 +33,3 @@ base::Value* BluetoothDeviceToValue(const chromeos::BluetoothDevice& device) { } // namespace experimental_bluetooth } // namespace api } // namespace extensions - -#endif diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h b/chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h index cb8d089..364a5d2 100644 --- a/chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h +++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h @@ -5,28 +5,25 @@ #ifndef CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_BLUETOOTH_API_UTILS_H_ #define CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_BLUETOOTH_API_UTILS_H_ -#if defined(OS_CHROMEOS) - #include "base/values.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" #include "chrome/common/extensions/api/experimental_bluetooth.h" +#include "device/bluetooth/bluetooth_device.h" namespace extensions { namespace api { namespace experimental_bluetooth { -// Fill in a Device object from a chromeos::BluetoothDevice. +// Fill in a Device object from a BluetoothDevice. void BluetoothDeviceToApiDevice( - const chromeos::BluetoothDevice& device, + const device::BluetoothDevice& device, Device* out); // The caller takes ownership of the returned pointer. -base::Value* BluetoothDeviceToValue(const chromeos::BluetoothDevice& device); +base::Value* BluetoothDeviceToValue( + const device::BluetoothDevice& device); } // namespace experimental_bluetooth } // namespace api } // namespace extensions -#endif - #endif // CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_BLUETOOTH_API_UTILS_H_ diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_apitest_chromeos.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_apitest_chromeos.cc index 29922d0..562e6c0 100644 --- a/chrome/browser/extensions/api/bluetooth/bluetooth_apitest_chromeos.cc +++ b/chrome/browser/extensions/api/bluetooth/bluetooth_apitest_chromeos.cc @@ -4,11 +4,8 @@ #include <string.h> -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/test/mock_bluetooth_device.h" -#include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" #include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h" +#include "chrome/browser/extensions/bluetooth_event_router.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_function_test_utils.h" #include "chrome/browser/extensions/extension_service.h" @@ -17,9 +14,17 @@ #include "chrome/common/chrome_switches.h" #include "chrome/test/base/ui_test_utils.h" #include "chromeos/dbus/bluetooth_out_of_band_client.h" -#include "chromeos/dbus/bluetooth_out_of_band_pairing_data.h" +#include "device/bluetooth/bluetooth_adapter.h" +#include "device/bluetooth/bluetooth_out_of_band_pairing_data.h" +#include "device/bluetooth/test/mock_bluetooth_adapter.h" +#include "device/bluetooth/test/mock_bluetooth_device.h" #include "testing/gmock/include/gmock/gmock.h" +using device::BluetoothAdapter; +using device::BluetoothDevice; +using device::BluetoothOutOfBandPairingData; +using device::MockBluetoothAdapter; +using device::MockBluetoothDevice; using extensions::Extension; namespace utils = extension_function_test_utils; @@ -41,14 +46,14 @@ class BluetoothApiTest : public ExtensionApiTest { virtual void SetUpOnMainThread() OVERRIDE { // The browser will clean this up when it is torn down - mock_adapter_ = new testing::StrictMock<chromeos::MockBluetoothAdapter>( + mock_adapter_ = new testing::StrictMock<MockBluetoothAdapter>( kAdapterAddress, kName); event_router()->SetAdapterForTest(mock_adapter_); - device1_.reset(new testing::NiceMock<chromeos::MockBluetoothDevice>( + device1_.reset(new testing::NiceMock<MockBluetoothDevice>( mock_adapter_, "d1", "11:12:13:14:15:16", true /* paired */, false /* bonded */, true /* connected */)); - device2_.reset(new testing::NiceMock<chromeos::MockBluetoothDevice>( + device2_.reset(new testing::NiceMock<MockBluetoothDevice>( mock_adapter_, "d2", "21:22:23:24:25:26", false /* paired */, true /* bonded */, false /* connected */)); } @@ -87,11 +92,11 @@ class BluetoothApiTest : public ExtensionApiTest { } protected: - testing::StrictMock<chromeos::MockBluetoothAdapter>* mock_adapter_; - scoped_ptr<testing::NiceMock<chromeos::MockBluetoothDevice> > device1_; - scoped_ptr<testing::NiceMock<chromeos::MockBluetoothDevice> > device2_; + testing::StrictMock<MockBluetoothAdapter>* mock_adapter_; + scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device1_; + scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device2_; - chromeos::ExtensionBluetoothEventRouter* event_router() { + extensions::ExtensionBluetoothEventRouter* event_router() { return browser()->profile()->GetExtensionService()-> bluetooth_event_router(); } @@ -104,12 +109,12 @@ class BluetoothApiTest : public ExtensionApiTest { static const char kOutOfBandPairingDataHash[] = "0123456789ABCDEh"; static const char kOutOfBandPairingDataRandomizer[] = "0123456789ABCDEr"; -static chromeos::BluetoothOutOfBandPairingData GetOutOfBandPairingData() { - chromeos::BluetoothOutOfBandPairingData data; +static BluetoothOutOfBandPairingData GetOutOfBandPairingData() { + BluetoothOutOfBandPairingData data; memcpy(&(data.hash), kOutOfBandPairingDataHash, - chromeos::kBluetoothOutOfBandPairingDataSize); + device::kBluetoothOutOfBandPairingDataSize); memcpy(&(data.randomizer), kOutOfBandPairingDataRandomizer, - chromeos::kBluetoothOutOfBandPairingDataSize); + device::kBluetoothOutOfBandPairingDataSize); return data; } @@ -119,16 +124,15 @@ static bool CallClosure(const base::Closure& callback) { } static void CallOutOfBandPairingDataCallback( - const chromeos::BluetoothAdapter::BluetoothOutOfBandPairingDataCallback& - callback, - const chromeos::BluetoothAdapter::ErrorCallback& error_callback) { + const BluetoothAdapter::BluetoothOutOfBandPairingDataCallback& callback, + const BluetoothAdapter::ErrorCallback& error_callback) { callback.Run(GetOutOfBandPairingData()); } template <bool Value> static void CallProvidesServiceCallback( - const std::string& name, - const chromeos::BluetoothDevice::ProvidesServiceCallback& callback) { + const std::string& name, + const BluetoothDevice::ProvidesServiceCallback& callback) { callback.Run(Value); } @@ -365,7 +369,7 @@ IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Events) { // Load and wait for setup ExtensionTestMessageListener listener("ready", true); - const extensions::Extension* extension = + const Extension* extension = LoadExtension(test_data_dir_.AppendASCII("bluetooth")); GURL page_url = extension->GetResourceURL("test_events.html"); ui_test_utils::NavigateToURL(browser(), page_url); @@ -387,7 +391,7 @@ IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetDevices) { ResultCatcher catcher; catcher.RestrictToProfile(browser()->profile()); - chromeos::BluetoothAdapter::ConstDeviceList devices; + BluetoothAdapter::ConstDeviceList devices; devices.push_back(device1_.get()); devices.push_back(device2_.get()); @@ -420,12 +424,12 @@ IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetDevicesConcurrently) { ResultCatcher catcher; catcher.RestrictToProfile(browser()->profile()); - chromeos::BluetoothAdapter::ConstDeviceList devices; + BluetoothAdapter::ConstDeviceList devices; devices.push_back(device1_.get()); // Save the callback to delay execution so that we can force the calls to // happen concurrently. This will be called after the listener is satisfied. - chromeos::BluetoothDevice::ProvidesServiceCallback callback; + BluetoothDevice::ProvidesServiceCallback callback; EXPECT_CALL(*device1_, ProvidesServiceWithName(testing::_, testing::_)) .WillOnce(testing::SaveArg<1>(&callback)); diff --git a/chrome/browser/chromeos/extensions/bluetooth_event_router.cc b/chrome/browser/extensions/bluetooth_event_router.cc index 64331bf..90dfefe 100644 --- a/chrome/browser/chromeos/extensions/bluetooth_event_router.cc +++ b/chrome/browser/extensions/bluetooth_event_router.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" +#include "chrome/browser/extensions/bluetooth_event_router.h" #include <map> @@ -10,35 +10,37 @@ #include "base/memory/ref_counted.h" #include "base/memory/scoped_vector.h" #include "base/utf_string_conversions.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device_chromeos.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_socket.h" #include "chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h" #include "chrome/browser/extensions/event_names.h" #include "chrome/browser/extensions/event_router.h" #include "chrome/common/extensions/api/experimental_bluetooth.h" +#include "device/bluetooth/bluetooth_adapter.h" +#include "device/bluetooth/bluetooth_adapter_factory.h" +#include "device/bluetooth/bluetooth_device.h" +#include "device/bluetooth/bluetooth_socket.h" namespace experimental_bluetooth = extensions::api::experimental_bluetooth; -namespace chromeos { +namespace extensions { ExtensionBluetoothEventRouter::ExtensionBluetoothEventRouter(Profile* profile) : profile_(profile), - adapter_(chromeos::BluetoothAdapterFactory::DefaultAdapter()), + adapter_(device::BluetoothAdapterFactory::DefaultAdapter()), next_socket_id_(1) { DCHECK(profile_); - DCHECK(adapter_.get()); - adapter_->AddObserver(this); + if (adapter_.get()) + adapter_->AddObserver(this); } ExtensionBluetoothEventRouter::~ExtensionBluetoothEventRouter() { - adapter_->RemoveObserver(this); + if (adapter_.get()) + adapter_->RemoveObserver(this); + socket_map_.clear(); } int ExtensionBluetoothEventRouter::RegisterSocket( - scoped_refptr<BluetoothSocket> socket) { + scoped_refptr<device::BluetoothSocket> socket) { // If there is a socket registered with the same fd, just return it's id for (SocketMap::const_iterator i = socket_map_.begin(); i != socket_map_.end(); ++i) { @@ -59,8 +61,8 @@ bool ExtensionBluetoothEventRouter::ReleaseSocket(int id) { return true; } -scoped_refptr<BluetoothSocket> ExtensionBluetoothEventRouter::GetSocket( - int id) { +scoped_refptr<device::BluetoothSocket> +ExtensionBluetoothEventRouter::GetSocket(int id) { SocketMap::iterator socket_entry = socket_map_.find(id); if (socket_entry == socket_map_.end()) return NULL; @@ -102,7 +104,7 @@ void ExtensionBluetoothEventRouter::DispatchDeviceEvent( } void ExtensionBluetoothEventRouter::AdapterPresentChanged( - chromeos::BluetoothAdapter* adapter, bool present) { + device::BluetoothAdapter* adapter, bool present) { if (adapter != adapter_.get()) { DVLOG(1) << "Ignoring event for adapter " << adapter->address(); return; @@ -114,7 +116,7 @@ void ExtensionBluetoothEventRouter::AdapterPresentChanged( } void ExtensionBluetoothEventRouter::AdapterPoweredChanged( - chromeos::BluetoothAdapter* adapter, bool has_power) { + device::BluetoothAdapter* adapter, bool has_power) { if (adapter != adapter_.get()) { DVLOG(1) << "Ignoring event for adapter " << adapter->address(); return; @@ -126,7 +128,7 @@ void ExtensionBluetoothEventRouter::AdapterPoweredChanged( } void ExtensionBluetoothEventRouter::AdapterDiscoveringChanged( - chromeos::BluetoothAdapter* adapter, bool discovering) { + device::BluetoothAdapter* adapter, bool discovering) { if (adapter != adapter_.get()) { DVLOG(1) << "Ignoring event for adapter " << adapter->address(); return; @@ -144,7 +146,8 @@ void ExtensionBluetoothEventRouter::AdapterDiscoveringChanged( } void ExtensionBluetoothEventRouter::DeviceAdded( - chromeos::BluetoothAdapter* adapter, chromeos::BluetoothDevice* device) { + device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) { if (adapter != adapter_.get()) { DVLOG(1) << "Ignoring event for adapter " << adapter->address(); return; @@ -170,4 +173,4 @@ void ExtensionBluetoothEventRouter::DispatchBooleanValueEvent( event_name, args.Pass(), NULL, GURL()); } -} // namespace chromeos +} // namespace extensions diff --git a/chrome/browser/chromeos/extensions/bluetooth_event_router.h b/chrome/browser/extensions/bluetooth_event_router.h index 6715c4e..36df64b 100644 --- a/chrome/browser/chromeos/extensions/bluetooth_event_router.h +++ b/chrome/browser/extensions/bluetooth_event_router.h @@ -2,42 +2,49 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_BLUETOOTH_EVENT_ROUTER_H_ -#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_BLUETOOTH_EVENT_ROUTER_H_ +#ifndef CHROME_BROWSER_EXTENSIONS_BLUETOOTH_EVENT_ROUTER_H_ +#define CHROME_BROWSER_EXTENSIONS_BLUETOOTH_EVENT_ROUTER_H_ #include <map> #include "base/memory/ref_counted.h" #include "base/memory/scoped_vector.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_socket.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/api/experimental_bluetooth.h" +#include "device/bluetooth/bluetooth_adapter.h" +#include "device/bluetooth/bluetooth_socket.h" -namespace chromeos { +namespace extensions { class ExtensionBluetoothEventRouter - : public chromeos::BluetoothAdapter::Observer { + : public device::BluetoothAdapter::Observer { public: explicit ExtensionBluetoothEventRouter(Profile* profile); virtual ~ExtensionBluetoothEventRouter(); - const chromeos::BluetoothAdapter& adapter() const { return *adapter_.get(); } + // adapter() will return NULL if the bluetooth adapter is not supported in the + // current platform. + const device::BluetoothAdapter* adapter() const { + return adapter_.get(); + } - // GetMutableAdapter will never return NULL. - chromeos::BluetoothAdapter* GetMutableAdapter() { return adapter_.get(); } + // GetMutableAdapter will return NULL if the bluetooth adapter is not + // supported in the current platform. + device::BluetoothAdapter* GetMutableAdapter() { + return adapter_.get(); + } // Register the BluetoothSocket |socket| for use by the extensions system. // This class will hold onto the socket for its lifetime, or until // ReleaseSocket is called for the socket. Returns an id for the socket. - int RegisterSocket(scoped_refptr<BluetoothSocket> socket); + int RegisterSocket(scoped_refptr<device::BluetoothSocket> socket); // Release the BluetoothSocket corresponding to |id|. Returns true if // the socket was found and released, false otherwise. bool ReleaseSocket(int id); // Get the BluetoothSocket corresponding to |id|. - scoped_refptr<BluetoothSocket> GetSocket(int id); + scoped_refptr<device::BluetoothSocket> GetSocket(int id); // Sets whether this Profile is responsible for the discovering state of the // adapter. @@ -52,18 +59,18 @@ class ExtensionBluetoothEventRouter const char* event_name, const extensions::api::experimental_bluetooth::Device& device); - // Override from chromeos::BluetoothAdapter::Observer - virtual void AdapterPresentChanged(chromeos::BluetoothAdapter* adapter, + // Override from device::BluetoothAdapter::Observer + virtual void AdapterPresentChanged(device::BluetoothAdapter* adapter, bool present) OVERRIDE; - virtual void AdapterPoweredChanged(chromeos::BluetoothAdapter* adapter, + virtual void AdapterPoweredChanged(device::BluetoothAdapter* adapter, bool has_power) OVERRIDE; - virtual void AdapterDiscoveringChanged(chromeos::BluetoothAdapter* adapter, + virtual void AdapterDiscoveringChanged(device::BluetoothAdapter* adapter, bool discovering) OVERRIDE; - virtual void DeviceAdded(chromeos::BluetoothAdapter* adapter, - chromeos::BluetoothDevice* device) OVERRIDE; + virtual void DeviceAdded(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) OVERRIDE; // Exposed for testing. - void SetAdapterForTest(chromeos::BluetoothAdapter* adapter) { + void SetAdapterForTest(device::BluetoothAdapter* adapter) { adapter_ = adapter; } private: @@ -73,14 +80,14 @@ class ExtensionBluetoothEventRouter bool responsible_for_discovery_; Profile* profile_; - scoped_refptr<chromeos::BluetoothAdapter> adapter_; + scoped_refptr<device::BluetoothAdapter> adapter_; // The next id to use for referring to a BluetoothSocket. We avoid using // the fd of the socket because we don't want to leak that information to // the extension javascript. int next_socket_id_; - typedef std::map<int, scoped_refptr<BluetoothSocket> > SocketMap; + typedef std::map<int, scoped_refptr<device::BluetoothSocket> > SocketMap; SocketMap socket_map_; typedef ScopedVector<extensions::api::experimental_bluetooth::Device> @@ -90,6 +97,6 @@ class ExtensionBluetoothEventRouter DISALLOW_COPY_AND_ASSIGN(ExtensionBluetoothEventRouter); }; -} // namespace chromeos +} // namespace extensions -#endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_BLUETOOTH_EVENT_ROUTER_H_ +#endif // CHROME_BROWSER_EXTENSIONS_BLUETOOTH_EVENT_ROUTER_H_ diff --git a/chrome/browser/extensions/event_names.cc b/chrome/browser/extensions/event_names.cc index 9171dd0..83d60a3 100644 --- a/chrome/browser/extensions/event_names.cc +++ b/chrome/browser/extensions/event_names.cc @@ -57,7 +57,6 @@ const char kOnTerminalProcessOutput[] = "terminalPrivate.onProcessOutput"; const char kOnOffscreenTabUpdated[] = "experimental.offscreenTabs.onUpdated"; -#if defined(OS_CHROMEOS) const char kBluetoothOnAvailabilityChanged[] = "experimental.bluetooth.onAvailabilityChanged"; const char kBluetoothOnDeviceDiscovered[] = @@ -70,7 +69,6 @@ const char kBluetoothOnDiscoveringChanged[] = "experimental.bluetooth.onDiscoveringChanged"; const char kBluetoothOnPowerChanged[] = "experimental.bluetooth.onPowerChanged"; -#endif const char kOnPushMessage[] = "experimental.pushMessaging.onMessage"; diff --git a/chrome/browser/extensions/event_names.h b/chrome/browser/extensions/event_names.h index 823c478..8a7e88d 100644 --- a/chrome/browser/extensions/event_names.h +++ b/chrome/browser/extensions/event_names.h @@ -65,7 +65,6 @@ extern const char kOnTerminalProcessOutput[]; // OffscreenTabs. extern const char kOnOffscreenTabUpdated[]; -#if defined(OS_CHROMEOS) // Bluetooth. extern const char kBluetoothOnAvailabilityChanged[]; extern const char kBluetoothOnDeviceDiscovered[]; @@ -73,7 +72,6 @@ extern const char kBluetoothOnDeviceSearchFinished[]; extern const char kBluetoothOnDeviceSearchResult[]; extern const char kBluetoothOnDiscoveringChanged[]; extern const char kBluetoothOnPowerChanged[]; -#endif // Push messaging. extern const char kOnPushMessage[]; diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 18a4fd5..7446508 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -44,6 +44,7 @@ #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" #include "chrome/browser/extensions/app_notification_manager.h" #include "chrome/browser/extensions/app_sync_data.h" +#include "chrome/browser/extensions/bluetooth_event_router.h" #include "chrome/browser/extensions/browser_event_router.h" #include "chrome/browser/extensions/component_loader.h" #include "chrome/browser/extensions/crx_installer.h" @@ -118,7 +119,6 @@ #include "webkit/database/database_util.h" #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/cros/cros_library.h" -#include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" #include "chrome/browser/chromeos/extensions/file_browser_event_router.h" #include "chrome/browser/chromeos/extensions/input_method_event_router.h" #include "chrome/browser/chromeos/extensions/media_player_event_router.h" @@ -517,14 +517,13 @@ void ExtensionService::InitEventRouters() { push_messaging_event_router_->Init(); media_galleries_private_event_router_.reset( new extensions::MediaGalleriesPrivateEventRouter(profile_)); + bluetooth_event_router_.reset( + new extensions::ExtensionBluetoothEventRouter(profile_)); #if defined(OS_CHROMEOS) FileBrowserEventRouterFactory::GetForProfile( profile_)->ObserveFileSystemEvents(); - bluetooth_event_router_.reset( - new chromeos::ExtensionBluetoothEventRouter(profile_)); - input_method_event_router_.reset( new chromeos::ExtensionInputMethodEventRouter); diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h index 29693d3..9bc1664 100644 --- a/chrome/browser/extensions/extension_service.h +++ b/chrome/browser/extensions/extension_service.h @@ -56,7 +56,6 @@ class Profile; class Version; namespace chromeos { -class ExtensionBluetoothEventRouter; class ExtensionInputMethodEventRouter; } @@ -69,6 +68,7 @@ class ContentSettingsStore; class CrxInstaller; class Extension; class ExtensionActionStorageManager; +class ExtensionBluetoothEventRouter; class ExtensionCookiesEventRouter; class ExtensionManagedModeEventRouter; class ExtensionSyncData; @@ -519,10 +519,11 @@ class ExtensionService return window_event_router_.get(); } -#if defined(OS_CHROMEOS) - chromeos::ExtensionBluetoothEventRouter* bluetooth_event_router() { + extensions::ExtensionBluetoothEventRouter* bluetooth_event_router() { return bluetooth_event_router_.get(); } + +#if defined(OS_CHROMEOS) chromeos::ExtensionInputMethodEventRouter* input_method_event_router() { return input_method_event_router_.get(); } @@ -861,8 +862,9 @@ class ExtensionService scoped_ptr<extensions::ExtensionManagedModeEventRouter> managed_mode_event_router_; + scoped_ptr<extensions::ExtensionBluetoothEventRouter> bluetooth_event_router_; + #if defined(OS_CHROMEOS) - scoped_ptr<chromeos::ExtensionBluetoothEventRouter> bluetooth_event_router_; scoped_ptr<chromeos::ExtensionInputMethodEventRouter> input_method_event_router_; #endif diff --git a/chrome/browser/ui/webui/DEPS b/chrome/browser/ui/webui/DEPS index 189f541..6461fcc 100644 --- a/chrome/browser/ui/webui/DEPS +++ b/chrome/browser/ui/webui/DEPS @@ -6,6 +6,7 @@ include_rules = [ "+sync/internal_api/public/util/weak_handle.h", # Other libraries. + "+device/bluetooth", "+third_party/angle", # For ANGLE version. "+third_party/zlib/zlib.h", # For compression level constants. ] diff --git a/chrome/browser/ui/webui/options/chromeos/bluetooth_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/bluetooth_options_handler.cc index f69fc34..e40533f 100644 --- a/chrome/browser/ui/webui/options/chromeos/bluetooth_options_handler.cc +++ b/chrome/browser/ui/webui/options/chromeos/bluetooth_options_handler.cc @@ -11,10 +11,10 @@ #include "base/string_number_conversions.h" #include "base/utf_string_conversions.h" #include "base/values.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter_factory.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" #include "content/public/browser/web_ui.h" +#include "device/bluetooth/bluetooth_adapter.h" +#include "device/bluetooth/bluetooth_adapter_factory.h" +#include "device/bluetooth/bluetooth_device.h" #include "grit/chromium_strings.h" #include "grit/generated_resources.h" #include "third_party/cros_system_api/dbus/service_constants.h" @@ -124,8 +124,9 @@ void BluetoothOptionsHandler::GetLocalizedValues( // TODO(kevers): Reorder methods to match ordering in the header file. -void BluetoothOptionsHandler::AdapterPresentChanged(BluetoothAdapter* adapter, - bool present) { +void BluetoothOptionsHandler::AdapterPresentChanged( + device::BluetoothAdapter* adapter, + bool present) { DCHECK(adapter == adapter_.get()); if (present) { web_ui()->CallJavascriptFunction( @@ -140,8 +141,9 @@ void BluetoothOptionsHandler::AdapterPresentChanged(BluetoothAdapter* adapter, } } -void BluetoothOptionsHandler::AdapterPoweredChanged(BluetoothAdapter* adapter, - bool powered) { +void BluetoothOptionsHandler::AdapterPoweredChanged( + device::BluetoothAdapter* adapter, + bool powered) { DCHECK(adapter == adapter_.get()); base::FundamentalValue checked(powered); web_ui()->CallJavascriptFunction( @@ -167,7 +169,8 @@ void BluetoothOptionsHandler::RegisterMessages() { } void BluetoothOptionsHandler::InitializeHandler() { - adapter_ = BluetoothAdapterFactory::DefaultAdapter(); + adapter_ = device::BluetoothAdapterFactory::DefaultAdapter(); + DCHECK(adapter_.get()); adapter_->AddObserver(this); } @@ -216,7 +219,7 @@ void BluetoothOptionsHandler::UpdateDeviceCallback( std::string address; args->GetString(kUpdateDeviceAddressIndex, &address); - BluetoothDevice* device = adapter_->GetDevice(address); + device::BluetoothDevice* device = adapter_->GetDevice(address); if (!device) return; @@ -324,15 +327,15 @@ void BluetoothOptionsHandler::StopDiscoveryError() { void BluetoothOptionsHandler::GetPairedDevicesCallback( const ListValue* args) { - BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); + device::BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); - for (BluetoothAdapter::DeviceList::iterator iter = devices.begin(); + for (device::BluetoothAdapter::DeviceList::iterator iter = devices.begin(); iter != devices.end(); ++iter) SendDeviceNotification(*iter, NULL); } void BluetoothOptionsHandler::SendDeviceNotification( - const BluetoothDevice* device, + const device::BluetoothDevice* device, base::DictionaryValue* params) { base::DictionaryValue js_properties; js_properties.SetString("name", device->GetName()); @@ -348,19 +351,19 @@ void BluetoothOptionsHandler::SendDeviceNotification( js_properties); } -void BluetoothOptionsHandler::RequestPinCode(BluetoothDevice* device) { +void BluetoothOptionsHandler::RequestPinCode(device::BluetoothDevice* device) { DictionaryValue params; params.SetString("pairing", kEnterPinCode); SendDeviceNotification(device, ¶ms); } -void BluetoothOptionsHandler::RequestPasskey(BluetoothDevice* device) { +void BluetoothOptionsHandler::RequestPasskey(device::BluetoothDevice* device) { DictionaryValue params; params.SetString("pairing", kEnterPasskey); SendDeviceNotification(device, ¶ms); } -void BluetoothOptionsHandler::DisplayPinCode(BluetoothDevice* device, +void BluetoothOptionsHandler::DisplayPinCode(device::BluetoothDevice* device, const std::string& pincode) { DictionaryValue params; params.SetString("pairing", kRemotePinCode); @@ -368,7 +371,7 @@ void BluetoothOptionsHandler::DisplayPinCode(BluetoothDevice* device, SendDeviceNotification(device, ¶ms); } -void BluetoothOptionsHandler::DisplayPasskey(BluetoothDevice* device, +void BluetoothOptionsHandler::DisplayPasskey(device::BluetoothDevice* device, uint32 passkey) { DictionaryValue params; params.SetString("pairing", kRemotePasskey); @@ -376,7 +379,7 @@ void BluetoothOptionsHandler::DisplayPasskey(BluetoothDevice* device, SendDeviceNotification(device, ¶ms); } -void BluetoothOptionsHandler::ConfirmPasskey(BluetoothDevice* device, +void BluetoothOptionsHandler::ConfirmPasskey(device::BluetoothDevice* device, uint32 passkey) { DictionaryValue params; params.SetString("pairing", kConfirmPasskey); @@ -400,22 +403,22 @@ void BluetoothOptionsHandler::ReportError( properties); } -void BluetoothOptionsHandler::DeviceAdded(BluetoothAdapter* adapter, - BluetoothDevice* device) { +void BluetoothOptionsHandler::DeviceAdded(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) { DCHECK(adapter == adapter_.get()); DCHECK(device); SendDeviceNotification(device, NULL); } -void BluetoothOptionsHandler::DeviceChanged(BluetoothAdapter* adapter, - BluetoothDevice* device) { +void BluetoothOptionsHandler::DeviceChanged(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) { DCHECK(adapter == adapter_.get()); DCHECK(device); SendDeviceNotification(device, NULL); } -void BluetoothOptionsHandler::DeviceRemoved(BluetoothAdapter* adapter, - BluetoothDevice* device) { +void BluetoothOptionsHandler::DeviceRemoved(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) { DCHECK(adapter == adapter_.get()); DCHECK(device); diff --git a/chrome/browser/ui/webui/options/chromeos/bluetooth_options_handler.h b/chrome/browser/ui/webui/options/chromeos/bluetooth_options_handler.h index b98763a..80d2d75 100644 --- a/chrome/browser/ui/webui/options/chromeos/bluetooth_options_handler.h +++ b/chrome/browser/ui/webui/options/chromeos/bluetooth_options_handler.h @@ -11,9 +11,9 @@ #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" -#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" #include "chrome/browser/ui/webui/options/options_ui.h" +#include "device/bluetooth/bluetooth_adapter.h" +#include "device/bluetooth/bluetooth_device.h" namespace base { class DictionaryValue; @@ -23,9 +23,10 @@ namespace chromeos { namespace options { // Handler for Bluetooth options on the system options page. -class BluetoothOptionsHandler : public ::options::OptionsPageUIHandler, - public chromeos::BluetoothAdapter::Observer, - public BluetoothDevice::PairingDelegate { +class BluetoothOptionsHandler + : public ::options::OptionsPageUIHandler, + public device::BluetoothAdapter::Observer, + public device::BluetoothDevice::PairingDelegate { public: BluetoothOptionsHandler(); virtual ~BluetoothOptionsHandler(); @@ -40,10 +41,10 @@ class BluetoothOptionsHandler : public ::options::OptionsPageUIHandler, // Sends a notification to the Web UI of the status of a Bluetooth device. // |device| is the Bluetooth device. // |params| is an optional set of parameters. - void SendDeviceNotification(const BluetoothDevice* device, + void SendDeviceNotification(const device::BluetoothDevice* device, base::DictionaryValue* params); - // BluetoothDevice::PairingDelegate override. + // device::BluetoothDevice::PairingDelegate override. // // This method will be called when the Bluetooth daemon requires a // PIN Code for authentication of the device |device|, the UI will display @@ -51,9 +52,9 @@ class BluetoothOptionsHandler : public ::options::OptionsPageUIHandler, // // PIN Codes are generally required for Bluetooth 2.0 and earlier devices // for which there is no automatic pairing or special handling. - virtual void RequestPinCode(BluetoothDevice* device) OVERRIDE; + virtual void RequestPinCode(device::BluetoothDevice* device) OVERRIDE; - // BluetoothDevice::PairingDelegate override. + // device::BluetoothDevice::PairingDelegate override. // // This method will be called when the Bluetooth daemon requires a // Passkey for authentication of the device |device|, the UI will display @@ -63,9 +64,9 @@ class BluetoothOptionsHandler : public ::options::OptionsPageUIHandler, // Passkeys are generally required for Bluetooth 2.1 and later devices // which cannot provide input or display on their own, and don't accept // passkey-less pairing. - virtual void RequestPasskey(BluetoothDevice* device) OVERRIDE; + virtual void RequestPasskey(device::BluetoothDevice* device) OVERRIDE; - // BluetoothDevice::PairingDelegate override. + // device::BluetoothDevice::PairingDelegate override. // // This method will be called when the Bluetooth daemon requires that the // user enter the PIN code |pincode| into the device |device| so that it @@ -75,10 +76,10 @@ class BluetoothOptionsHandler : public ::options::OptionsPageUIHandler, // This is used for Bluetooth 2.0 and earlier keyboard devices, the // |pincode| will always be a six-digit numeric in the range 000000-999999 // for compatibilty with later specifications. - virtual void DisplayPinCode(BluetoothDevice* device, + virtual void DisplayPinCode(device::BluetoothDevice* device, const std::string& pincode) OVERRIDE; - // BluetoothDevice::PairingDelegate override. + // device::BluetoothDevice::PairingDelegate override. // // This method will be called when the Bluetooth daemon requires that the // user enter the Passkey |passkey| into the device |device| so that it @@ -89,9 +90,10 @@ class BluetoothOptionsHandler : public ::options::OptionsPageUIHandler, // but not display, such as keyboards. The Passkey is a numeric in the // range 0-999999 and should be always presented zero-padded to six // digits. - virtual void DisplayPasskey(BluetoothDevice* device, uint32 passkey) OVERRIDE; + virtual void DisplayPasskey( + device::BluetoothDevice* device, uint32 passkey) OVERRIDE; - // BluetoothDevice::PairingDelegate override. + // device::BluetoothDevice::PairingDelegate override. // // This method will be called when the Bluetooth daemon requires that the // user confirm that the Passkey |passkey| is displayed on the screen @@ -102,9 +104,10 @@ class BluetoothOptionsHandler : public ::options::OptionsPageUIHandler, // such as other computers or phones. The Passkey is a numeric in the // range 0-999999 and should be always present zero-padded to six // digits. - virtual void ConfirmPasskey(BluetoothDevice* device, uint32 passkey) OVERRIDE; + virtual void ConfirmPasskey( + device::BluetoothDevice* device, uint32 passkey) OVERRIDE; - // BluetoothDevice::PairingDelegate override. + // device::BluetoothDevice::PairingDelegate override. // // This method will be called when any previous DisplayPinCode(), // DisplayPasskey() or ConfirmPasskey() request should be concluded @@ -117,41 +120,41 @@ class BluetoothOptionsHandler : public ::options::OptionsPageUIHandler, // string if the error is not specific to a single device. void ReportError(const std::string& error, const std::string& address); - // BluetoothAdapter::Observer implementation. - virtual void AdapterPresentChanged(BluetoothAdapter* adapter, + // device::BluetoothAdapter::Observer implementation. + virtual void AdapterPresentChanged(device::BluetoothAdapter* adapter, bool present) OVERRIDE; - virtual void AdapterPoweredChanged(BluetoothAdapter* adapter, + virtual void AdapterPoweredChanged(device::BluetoothAdapter* adapter, bool powered) OVERRIDE; - virtual void DeviceAdded(BluetoothAdapter* adapter, - BluetoothDevice* device) OVERRIDE; - virtual void DeviceChanged(BluetoothAdapter* adapter, - BluetoothDevice* device) OVERRIDE; - virtual void DeviceRemoved(BluetoothAdapter* adapter, - BluetoothDevice* device) OVERRIDE; + virtual void DeviceAdded(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) OVERRIDE; + virtual void DeviceChanged(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) OVERRIDE; + virtual void DeviceRemoved(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) OVERRIDE; private: - // Called by BluetoothAdapter in response to a failure to change the power - // status of the adapter. + // Called by device::BluetoothAdapter in response to a failure to + // change the power status of the adapter. void EnableChangeError(); - // Called by BluetoothAdapter in response to a failure to set the adapter into - // discovery mode. + // Called by device::BluetoothAdapter in response to a failure to + // set the adapter into discovery mode. void FindDevicesError(); - // Called by BluetoothAdapter in response to a failure to remove the adapter - // from discovery mode. + // Called by device::BluetoothAdapter in response to a failure to + // remove the adapter from discovery mode. void StopDiscoveryError(); - // Called by BluetoothDevice in response to a failure to connect to the device - // with bluetooth address |address|. + // Called by device::BluetoothDevice in response to a failure to + // connect to the device with bluetooth address |address|. void ConnectError(const std::string& address); - // Called by BluetoothDevice in response to a failure to disconnect the device - // with bluetooth address |address|. + // Called by device::BluetoothDevice in response to a failure to + // disconnect the device with bluetooth address |address|. void DisconnectError(const std::string& address); - // Called by BluetoothDevice in response to a failure to disconnect and unpair - // the device with bluetooth address |address|. + // Called by device::BluetoothDevice in response to a failure to + // disconnect and unpair the device with bluetooth address |address|. void ForgetError(const std::string& address); // Called when the 'Enable bluetooth' checkbox value is changed. @@ -182,7 +185,7 @@ class BluetoothOptionsHandler : public ::options::OptionsPageUIHandler, void GetPairedDevicesCallback(const base::ListValue* args); // Default bluetooth adapter, used for all operations. - scoped_refptr<BluetoothAdapter> adapter_; + scoped_refptr<device::BluetoothAdapter> adapter_; // Weak pointer factory for generating 'this' pointers that might live longer // than this object does. diff --git a/chrome/chrome_browser_chromeos.gypi b/chrome/chrome_browser_chromeos.gypi index 78ea081..731e22e 100644 --- a/chrome/chrome_browser_chromeos.gypi +++ b/chrome/chrome_browser_chromeos.gypi @@ -51,6 +51,7 @@ '../content/content.gyp:content_common', '../crypto/crypto.gyp:crypto', '../dbus/dbus.gyp:dbus', + '../device/device.gyp:device_bluetooth', '../media/media.gyp:media', '../net/net.gyp:net', '../ppapi/ppapi_internal.gyp:ppapi_ipc', # For PpapiMsg_LoadPlugin @@ -123,23 +124,6 @@ 'browser/chromeos/audio/audio_mixer_cras.h', 'browser/chromeos/background/ash_user_wallpaper_delegate.cc', 'browser/chromeos/background/ash_user_wallpaper_delegate.h', - 'browser/chromeos/bluetooth/bluetooth_adapter.cc', - 'browser/chromeos/bluetooth/bluetooth_adapter.h', - 'browser/chromeos/bluetooth/bluetooth_adapter_chromeos.cc', - 'browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h', - 'browser/chromeos/bluetooth/bluetooth_adapter_factory.h', - 'browser/chromeos/bluetooth/bluetooth_adapter_factory.cc', - 'browser/chromeos/bluetooth/bluetooth_device.cc', - 'browser/chromeos/bluetooth/bluetooth_device.h', - 'browser/chromeos/bluetooth/bluetooth_device_chromeos.cc', - 'browser/chromeos/bluetooth/bluetooth_device_chromeos.h', - 'browser/chromeos/bluetooth/bluetooth_service_record.cc', - 'browser/chromeos/bluetooth/bluetooth_service_record.h', - 'browser/chromeos/bluetooth/bluetooth_socket.h', - 'browser/chromeos/bluetooth/bluetooth_socket_chromeos.cc', - 'browser/chromeos/bluetooth/bluetooth_socket_chromeos.h', - 'browser/chromeos/bluetooth/bluetooth_utils.cc', - 'browser/chromeos/bluetooth/bluetooth_utils.h', 'browser/chromeos/boot_times_loader.cc', 'browser/chromeos/boot_times_loader.h', 'browser/chromeos/choose_mobile_network_dialog.cc', @@ -274,8 +258,6 @@ 'browser/chromeos/enrollment_dialog_view.h', 'browser/chromeos/enterprise_extension_observer.cc', 'browser/chromeos/enterprise_extension_observer.h', - 'browser/chromeos/extensions/bluetooth_event_router.cc', - 'browser/chromeos/extensions/bluetooth_event_router.h', 'browser/chromeos/extensions/echo_private_api.cc', 'browser/chromeos/extensions/echo_private_api.h', 'browser/chromeos/extensions/file_browser_event_router.cc', diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi index cc8d5e6..b951223 100644 --- a/chrome/chrome_browser_extensions.gypi +++ b/chrome/chrome_browser_extensions.gypi @@ -31,6 +31,7 @@ '../build/temp_gyp/googleurl.gyp:googleurl', '../content/content.gyp:content_browser', '../crypto/crypto.gyp:crypto', + '../device/device.gyp:device_bluetooth', '../net/net.gyp:net', '../skia/skia.gyp:skia', '../sync/sync.gyp:sync_notifier', @@ -355,6 +356,8 @@ 'browser/extensions/app_sync_bundle.h', 'browser/extensions/app_sync_data.cc', 'browser/extensions/app_sync_data.h', + 'browser/extensions/bluetooth_event_router.cc', + 'browser/extensions/bluetooth_event_router.h', 'browser/extensions/browser_action_test_util.h', 'browser/extensions/browser_action_test_util_gtk.cc', 'browser/extensions/browser_action_test_util_mac.mm', diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi index 63db09f..c2bb5ef 100644 --- a/chrome/chrome_browser_ui.gypi +++ b/chrome/chrome_browser_ui.gypi @@ -39,6 +39,7 @@ '../content/content.gyp:content_browser', '../content/content.gyp:content_common', '../crypto/crypto.gyp:crypto', + '../device/device.gyp:device_bluetooth', '../media/media.gyp:media', '../net/net.gyp:net_with_v8', '../ppapi/ppapi_internal.gyp:ppapi_ipc', # For PpapiMsg_LoadPlugin diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index ad41928..3589aa2 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1098,12 +1098,6 @@ 'browser/chrome_browser_application_mac_unittest.mm', 'browser/chrome_browser_main_unittest.cc', 'browser/chrome_page_zoom_unittest.cc', - 'browser/chromeos/bluetooth/bluetooth_service_record_unittest.cc', - 'browser/chromeos/bluetooth/bluetooth_utils_unittest.cc', - 'browser/chromeos/bluetooth/bluetooth_adapter_chromeos_unittest.cc', - 'browser/chromeos/bluetooth/bluetooth_adapter_devices_chromeos_unittest.cc', - 'browser/chromeos/bluetooth/test/mock_bluetooth_adapter.cc', - 'browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h', 'browser/chromeos/contacts/contact_database_unittest.cc', 'browser/chromeos/contacts/contact_manager_stub.cc', 'browser/chromeos/contacts/contact_manager_stub.h', @@ -2746,6 +2740,7 @@ '../base/base.gyp:base', '../base/base.gyp:base_i18n', '../base/base.gyp:test_support_base', + '../device/device.gyp:device_bluetooth_mocks', '../net/net.gyp:net', '../net/net.gyp:net_test_support', '../skia/skia.gyp:skia', @@ -2796,10 +2791,6 @@ 'browser/chrome_main_browsertest.cc', 'browser/chrome_plugin_browsertest.cc', 'browser/chrome_switches_browsertest.cc', - 'browser/chromeos/bluetooth/test/mock_bluetooth_adapter.cc', - 'browser/chromeos/bluetooth/test/mock_bluetooth_adapter.h', - 'browser/chromeos/bluetooth/test/mock_bluetooth_device.cc', - 'browser/chromeos/bluetooth/test/mock_bluetooth_device.h', 'browser/chromeos/contacts/contact_test_util.cc', 'browser/chromeos/contacts/gdata_contacts_service_browsertest.cc', 'browser/chromeos/cros/cros_in_process_browser_test.cc', diff --git a/chrome/test/data/chromeos/bluetooth/invalid_uuid.xml b/chrome/test/data/chromeos/bluetooth/invalid_uuid.xml deleted file mode 100644 index 2b33304..0000000 --- a/chrome/test/data/chromeos/bluetooth/invalid_uuid.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<record> - <attribute id="0x0001"> - <sequence> - <uuid value="01234567:89AB-CDEF-0123-456789ABCDEF" /> - </sequence> - </attribute> -</record> diff --git a/chrome/test/data/chromeos/bluetooth/medium_uuid.xml b/chrome/test/data/chromeos/bluetooth/medium_uuid.xml deleted file mode 100644 index 432d7fe..0000000 --- a/chrome/test/data/chromeos/bluetooth/medium_uuid.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<record> - <attribute id="0x0001"> - <sequence> - <uuid value="0x00001101" /> - </sequence> - </attribute> -</record> diff --git a/chrome/test/data/chromeos/bluetooth/rfcomm.xml b/chrome/test/data/chromeos/bluetooth/rfcomm.xml deleted file mode 100644 index ec3bdec..0000000 --- a/chrome/test/data/chromeos/bluetooth/rfcomm.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<record> - <attribute id="0x0000"> - <uint32 value="0x00010003" /> - </attribute> - <attribute id="0x0001"> - <sequence> - <uuid value="01234567-89ab-cdef-0123-456789abcdef" /> - </sequence> - </attribute> - <attribute id="0x0004"> - <sequence> - <sequence> - <uuid value="0x0100" /> - </sequence> - <sequence> - <uuid value="0x0003" /> - <uint8 value="0x0c" /> - </sequence> - </sequence> - </attribute> - <attribute id="0x0005"> - <sequence> - <uuid value="0x1002" /> - </sequence> - </attribute> - <attribute id="0x0009"> - <sequence> - <sequence> - <uuid value="0x1108" /> - <uint16 value="0x0102" /> - </sequence> - </sequence> - </attribute> - <attribute id="0x0100"> - <text value="Headset Audio Gateway" /> - </attribute> -</record> diff --git a/chrome/test/data/chromeos/bluetooth/short_uuid.xml b/chrome/test/data/chromeos/bluetooth/short_uuid.xml deleted file mode 100644 index 9ad3c9f..0000000 --- a/chrome/test/data/chromeos/bluetooth/short_uuid.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<record> - <attribute id="0x0001"> - <sequence> - <uuid value="0x1101" /> - </sequence> - </attribute> -</record> diff --git a/chrome/test/data/chromeos/bluetooth/uppercase_uuid.xml b/chrome/test/data/chromeos/bluetooth/uppercase_uuid.xml deleted file mode 100644 index 4e0574f..0000000 --- a/chrome/test/data/chromeos/bluetooth/uppercase_uuid.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<record> - <attribute id="0x0001"> - <sequence> - <uuid value="01234567-89AB-CDEF-0123-456789ABCDEF" /> - </sequence> - </attribute> -</record> |