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

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

Issue 915133002: Revert of HID-detection screen moved to screenContext. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 d9aea379f4a94b33bbbf3f4d03f03b471d941933..5c779abb99ca69fae0b422052f6479d39e878e4d 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,13 +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/prefs/pref_registry_simple.h"
#include "base/values.h"
-#include "chrome/browser/chromeos/login/screens/hid_detection_view.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"
namespace base {
class DictionaryValue;
@@ -21,44 +29,194 @@
class CoreOobeActor;
-// WebUI implementation of HIDDetectionScreenView.
+// WebUI implementation of HIDDetectionScreenActor.
class HIDDetectionScreenHandler
- : public HIDDetectionView,
- public BaseScreenHandler {
+ : public HIDDetectionScreenActor,
+ public BaseScreenHandler,
+ public device::BluetoothAdapter::Observer,
+ public device::BluetoothDevice::PairingDelegate,
+ public InputServiceProxy::Observer {
public:
+ typedef device::InputServiceLinux::InputDeviceInfo InputDeviceInfo;
explicit HIDDetectionScreenHandler(CoreOobeActor* core_oobe_actor);
~HIDDetectionScreenHandler() override;
- // HIDDetectionView implementation:
- void PrepareToShow() override;
+ // HIDDetectionScreenActor implementation:
void Show() override;
void Hide() override;
- void Bind(HIDDetectionModel& model) override;
- void Unbind() override;
+ void SetDelegate(Delegate* delegate) override;
void CheckIsScreenRequired(
const base::Callback<void(bool)>& on_check_done) override;
// BaseScreenHandler implementation:
void DeclareLocalizedValues(
::login::LocalizedValuesBuilder* builder) override;
- void DeclareJSCallbacks() override;
void Initialize() override;
+
+ // WebUIMessageHandler implementation:
+ void RegisterMessages() override;
+
+ // device::BluetoothDevice::PairingDelegate implementation:
+ void RequestPinCode(device::BluetoothDevice* device) override;
+ void RequestPasskey(device::BluetoothDevice* device) override;
+ void DisplayPinCode(device::BluetoothDevice* device,
+ const std::string& pincode) override;
+ void DisplayPasskey(device::BluetoothDevice* device, uint32 passkey) override;
+ void KeysEntered(device::BluetoothDevice* device, uint32 entered) override;
+ void ConfirmPasskey(device::BluetoothDevice* device, uint32 passkey) override;
+ void AuthorizePairing(device::BluetoothDevice* device) override;
+
+ // device::BluetoothAdapter::Observer implementation.
+ void AdapterPresentChanged(device::BluetoothAdapter* adapter,
+ bool present) override;
+ void DeviceAdded(device::BluetoothAdapter* adapter,
+ device::BluetoothDevice* device) override;
+ void DeviceChanged(device::BluetoothAdapter* adapter,
+ device::BluetoothDevice* device) override;
+ void DeviceRemoved(device::BluetoothAdapter* adapter,
+ device::BluetoothDevice* device) override;
+
+ // InputServiceProxy::Observer implementation.
+ void OnInputDeviceAdded(const InputDeviceInfo& info) override;
+ void OnInputDeviceRemoved(const std::string& id) override;
// Registers the preference for derelict state.
static void RegisterPrefs(PrefRegistrySimple* registry);
private:
+ // Types of dialog leaving scenarios for UMA metric.
+ enum ContinueScenarioType {
+ // Only pointing device detected, user pressed 'Continue'.
+ POINTING_DEVICE_ONLY_DETECTED,
+
+ // Only keyboard detected, user pressed 'Continue'.
+ KEYBOARD_DEVICE_ONLY_DETECTED,
+
+ // All devices detected.
+ All_DEVICES_DETECTED,
+
+ // Must be last enum element.
+ CONTINUE_SCENARIO_TYPE_SIZE
+ };
+
+ 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);
+
+ // Updates internal state and UI (if ready) using list of connected devices.
+ void ProcessConnectedDevicesList(const std::vector<InputDeviceInfo>& devices);
+
+ // Checks for lack of mouse or keyboard. If found starts BT devices update.
+ // Initiates BTAdapter if it's not active and BT devices update required.
+ void TryInitiateBTDevicesUpdate();
+
+ // Processes list of input devices returned by InputServiceProxy on the check
+ // request. Calls the callback that expects true if screen is required.
+ void OnGetInputDevicesListForCheck(
+ const base::Callback<void(bool)>& on_check_done,
+ const std::vector<InputDeviceInfo>& devices);
+
+ // Processes list of input devices returned by InputServiceProxy on regular
+ // request.
+ void OnGetInputDevicesList(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();
- HIDDetectionModel* model_;
+ Delegate* delegate_;
CoreOobeActor* core_oobe_actor_;
// 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 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
+ // power off BT adapter.
+ void SetPoweredOffError();
+
+ // 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();
+
+ // 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 TryPairingAsPointingDevice(device::BluetoothDevice* device);
+
+ // Tries to connect given BT device as keyboard.
+ void TryPairingAsKeyboardDevice(device::BluetoothDevice* device);
+
+ // Default bluetooth adapter, used for all operations.
+ scoped_refptr<device::BluetoothAdapter> adapter_;
+
+ InputServiceProxy input_service_proxy_;
+
+ // 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_;
+
+ // 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_;
+
+ // State of BT adapter before screen-initiated changes.
+ scoped_ptr<bool> adapter_initially_powered_;
+
+ base::WeakPtrFactory<HIDDetectionScreenHandler> weak_ptr_factory_;
+
DISALLOW_COPY_AND_ASSIGN(HIDDetectionScreenHandler);
};

Powered by Google App Engine
This is Rietveld 408576698