Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2111)

Unified Diff: chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.h

Issue 252503002: Base version of HID detection OOBE screen. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Passkey support added. Improved BT-connection logic. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
};

Powered by Google App Engine
This is Rietveld 408576698