Index: chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.h |
diff --git a/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.h |
index e3c8ad882176d3ef1d698fcf18fe5daa61e3a4af..e49b10ef03e5fb4d603ca4b36f5857427671d8ae 100644 |
--- a/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.h |
+++ b/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.h |
@@ -5,9 +5,21 @@ |
#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_HID_DETECTION_SCREEN_HANDLER_H_ |
#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_HID_DETECTION_SCREEN_HANDLER_H_ |
+#include <string> |
+#include <vector> |
+ |
+#include "base/compiler_specific.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/values.h" |
+#include "chrome/browser/chromeos/device/input_service_proxy.h" |
#include "chrome/browser/chromeos/login/screens/hid_detection_screen_actor.h" |
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" |
#include "content/public/browser/web_ui.h" |
+#include "device/bluetooth/bluetooth_adapter.h" |
+#include "device/bluetooth/bluetooth_device.h" |
+#include "device/bluetooth/bluetooth_discovery_session.h" |
+ |
Nikita (slow)
2014/04/28 13:51:57
nit: drop empty line.
merkulova
2014/04/29 10:30:24
Done.
|
namespace base { |
class DictionaryValue; |
@@ -16,9 +28,15 @@ class DictionaryValue; |
namespace chromeos { |
// WebUI implementation of HIDDetectionScreenActor. |
-class HIDDetectionScreenHandler : public HIDDetectionScreenActor, |
- public BaseScreenHandler { |
+class HIDDetectionScreenHandler |
+ : public HIDDetectionScreenActor, |
+ public BaseScreenHandler, |
+ public device::BluetoothAdapter::Observer, |
+ public device::BluetoothDevice::PairingDelegate, |
+ public InputServiceProxy::Observer { |
public: |
+ typedef device::InputServiceLinux::InputDeviceInfo InputDeviceInfo; |
+ |
HIDDetectionScreenHandler(); |
virtual ~HIDDetectionScreenHandler(); |
@@ -35,7 +53,59 @@ class HIDDetectionScreenHandler : public HIDDetectionScreenActor, |
// WebUIMessageHandler implementation: |
virtual void RegisterMessages() OVERRIDE; |
+ // device::BluetoothDevice::PairingDelegate implementation: |
+ virtual void RequestPinCode(device::BluetoothDevice* device) OVERRIDE; |
+ virtual void RequestPasskey(device::BluetoothDevice* device) OVERRIDE; |
+ virtual void DisplayPinCode(device::BluetoothDevice* device, |
+ const std::string& pincode) OVERRIDE; |
+ virtual void DisplayPasskey( |
+ device::BluetoothDevice* device, uint32 passkey) OVERRIDE; |
+ virtual void KeysEntered(device::BluetoothDevice* device, |
+ uint32 entered) OVERRIDE; |
+ virtual void ConfirmPasskey( |
+ device::BluetoothDevice* device, uint32 passkey) OVERRIDE; |
+ virtual void AuthorizePairing(device::BluetoothDevice* device) OVERRIDE; |
+ |
+ // device::BluetoothAdapter::Observer implementation. |
+ virtual void AdapterPresentChanged(device::BluetoothAdapter* adapter, |
+ bool present) 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; |
+ |
+ // InputServiceProxy::Observer implementation. |
+ virtual void OnInputDeviceAdded(const InputDeviceInfo& info) OVERRIDE; |
+ virtual void OnInputDeviceRemoved(const std::string& id) OVERRIDE; |
+ |
private: |
+ void InitializeAdapter(scoped_refptr<device::BluetoothAdapter> adapter); |
+ |
+ // Sends a notification to the Web UI of the status of available Bluetooth/USB |
+ // pointing device. |
+ void SendPointingDeviceNotification(); |
+ |
+ // Sends a notification to the Web UI of the status of available Bluetooth/USB |
+ // keyboard device. |
+ void SendKeyboardDeviceNotification(base::DictionaryValue* params); |
+ void OnGetInputDevicesList(bool skip_screen_if_devices_present, |
+ const std::vector<InputDeviceInfo>& devices); |
+ |
+ void StartBTDiscoverySession(); |
+ |
+ // Called by device::BluetoothDevice on a successful pairing and connection |
+ // to a device. |
+ void BTConnected(device::BluetoothDevice::DeviceType device_type); |
+ |
+ // Called by device::BluetoothDevice in response to a failure to |
+ // connect to the device with bluetooth address |address| due to an error |
+ // encoded in |error_code|. |
+ void BTConnectError(const std::string& address, |
+ device::BluetoothDevice::DeviceType device_type, |
+ device::BluetoothDevice::ConnectErrorCode error_code); |
+ |
// JS messages handlers. |
void HandleOnContinue(); |
@@ -44,6 +114,124 @@ class HIDDetectionScreenHandler : public HIDDetectionScreenActor, |
// Keeps whether screen should be shown right after initialization. |
bool show_on_init_; |
+ // Displays in the UI a connecting to the device |device| message. |
+ void DeviceConnecting(device::BluetoothDevice* device); |
+ |
+ // Called by device::BluetoothAdapter in response to a failure to |
+ // change the power status of the adapter. |
+ void EnableChangeError(); |
dzhioev (left Google)
2014/04/28 12:54:22
This method has no implementation in *.cc files. S
merkulova
2014/04/29 10:30:24
Done.
|
+ |
+ // Called by device::BluetoothAdapter in response to a successful request |
+ // to initiate a discovery session. |
+ void OnStartDiscoverySession( |
+ scoped_ptr<device::BluetoothDiscoverySession> discovery_session); |
+ |
+ // Called by device::BluetoothAdapter in response to a failure to |
+ // initiate a discovery session. |
+ void FindDevicesError(); |
+ |
+ // Called by device::BluetoothAdapter in response to a failure to |
+ // power BT adapter. |
+ void SetPoweredError(); |
+ |
+ // Called by device::BluetoothAdapter in response to a failure to |
+ // terminate a discovery session. |
+ void StopDiscoveryError(); |
+ |
+ // Called by device::BluetoothDevice on a successful pairing and connection |
+ // to a device. |
+ void Connected(); |
+ |
+ // Called by device::BluetoothDevice in response to a failure to |
+ // connect to the device with bluetooth address |address| due to an error |
+ // encoded in |error_code|. |
+ void ConnectError(const std::string& address, |
+ device::BluetoothDevice::ConnectErrorCode error_code); |
+ |
+ // 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 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. |
+ // |args| will contain the checkbox checked state as a string |
+ // ("true" or "false"). |
+ void EnableChangeCallback(const base::ListValue* args); |
+ |
+ // Called when the 'Find Devices' button is pressed from the Bluetooth |
+ // ssettings. |
+ // |args| will be an empty list. |
+ void FindDevicesCallback(const base::ListValue* args); |
+ |
+ // Called when the "Add a device" dialog closes to stop the discovery |
+ // process. |
+ // |args| will be an empty list. |
+ void StopDiscoveryCallback(const base::ListValue* args); |
+ |
+ // Called when the list of paired devices is initialized in order to |
+ // populate the list. |
+ // |args| will be an empty list. |
+ void GetPairedDevicesCallback(const base::ListValue* args); |
+ |
+ // Called for revision of active devices. If current-placement is available |
+ // for mouse or keyboard device, sets one of active devices as current or |
+ // tries to connect some BT device if no appropriate devices are connected. |
+ void UpdateDevices(bool skip_screen_if_devices_present); |
+ |
+ // Tries to connect some BT devices if no type-appropriate devices are |
+ // connected. |
+ void UpdateBTDevices(); |
+ |
+ // Tries to connect given BT device. |
+ void ConnectBTDevice(device::BluetoothDevice* device); |
+ |
+ // Tries to connect given BT device as pointing one. |
+ void PairAsPointingDevice(device::BluetoothDevice* device); |
+ |
+ // Tries to connect given BT device as keyboard. |
+ void PairAsKeyboardDevice(device::BluetoothDevice* device); |
+ |
+ // Default bluetooth adapter, used for all operations. |
+ scoped_refptr<device::BluetoothAdapter> adapter_; |
+ |
+ InputServiceProxy input_service_proxy_; |
+ |
+ // True, if the UI has requested device discovery. False, if either no device |
+ // discovery was requested or the dialog responsible for device discovery was |
+ // dismissed. |
+ bool should_run_device_discovery_; |
+ |
+ // The current device discovery session. Only one active discovery session is |
+ // kept at a time and the instance that |discovery_session_| points to gets |
+ // replaced by a new one when a new discovery session is initiated. |
+ scoped_ptr<device::BluetoothDiscoverySession> discovery_session_; |
+ |
+ // Cached information about the current pairing device, if any. |
+ std::string pairing_device_address_; |
+ std::string pairing_device_pairing_; |
+ std::string pairing_device_pincode_; |
+ int pairing_device_passkey_; |
+ int pairing_device_entered_; |
+ |
+ // Current pointing device, if any. |
+ std::string pointing_device_name_; |
+ std::string pointing_device_id_; |
+ bool mouse_is_pairing_; |
+ InputDeviceInfo::Type pointing_device_connect_type_; |
+ |
+ // Current keyboard device, if any. |
+ std::string keyboard_device_name_; |
+ std::string keyboard_device_id_; |
+ bool keyboard_is_pairing_; |
+ InputDeviceInfo::Type keyboard_device_connect_type_; |
+ |
+ bool switch_on_adapter_when_ready_; |
+ |
+ base::WeakPtrFactory<HIDDetectionScreenHandler> weak_ptr_factory_; |
+ |
DISALLOW_COPY_AND_ASSIGN(HIDDetectionScreenHandler); |
}; |