Index: chrome/browser/ui/webui/options2/chromeos/bluetooth_options_handler.cc |
=================================================================== |
--- chrome/browser/ui/webui/options2/chromeos/bluetooth_options_handler.cc (revision 114238) |
+++ chrome/browser/ui/webui/options2/chromeos/bluetooth_options_handler.cc (working copy) |
@@ -1,411 +0,0 @@ |
-// Copyright (c) 2011 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/ui/webui/options2/chromeos/bluetooth_options_handler.h" |
- |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/utf_string_conversions.h" |
-#include "base/values.h" |
-#include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" |
-#include "chrome/browser/chromeos/system/runtime_environment.h" |
-#include "chrome/browser/ui/webui/options2/chromeos/system_settings_provider.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "grit/chromium_strings.h" |
-#include "grit/generated_resources.h" |
-#include "third_party/cros_system_api/dbus/service_constants.h" |
-#include "ui/base/l10n/l10n_util.h" |
- |
-namespace { |
- |
-// |UpdateDeviceCallback| takes a variable length list as an argument. The |
-// value stored in each list element is indicated by the following constants. |
-const int kUpdateDeviceAddressIndex = 0; |
-const int kUpdateDeviceCommandIndex = 1; |
-const int kUpdateDevicePasskeyIndex = 2; |
- |
-} // namespace |
- |
-namespace chromeos { |
- |
-BluetoothOptionsHandler::BluetoothOptionsHandler() { |
-} |
- |
-BluetoothOptionsHandler::~BluetoothOptionsHandler() { |
- if (!CommandLine::ForCurrentProcess() |
- ->HasSwitch(switches::kEnableBluetooth)) { |
- return; |
- } |
- |
- chromeos::BluetoothManager* bluetooth_manager = |
- chromeos::BluetoothManager::GetInstance(); |
- DCHECK(bluetooth_manager); |
- |
- chromeos::BluetoothAdapter* default_adapter = |
- bluetooth_manager->DefaultAdapter(); |
- |
- if (default_adapter != NULL) { |
- default_adapter->RemoveObserver(this); |
- } |
- |
- bluetooth_manager->RemoveObserver(this); |
-} |
- |
-void BluetoothOptionsHandler::GetLocalizedValues( |
- DictionaryValue* localized_strings) { |
- DCHECK(localized_strings); |
- |
- localized_strings->SetString("bluetooth", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_SECTION_TITLE_BLUETOOTH)); |
- localized_strings->SetString("disableBluetooth", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_DISABLE)); |
- localized_strings->SetString("enableBluetooth", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_ENABLE)); |
- localized_strings->SetString("noBluetoothDevicesFound", |
- l10n_util::GetStringUTF16( |
- IDS_OPTIONS_SETTINGS_NO_BLUETOOTH_DEVICES_FOUND)); |
- localized_strings->SetString("findBluetoothDevices", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_FIND_BLUETOOTH_DEVICES)); |
- localized_strings->SetString("bluetoothScanning", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_SCANNING)); |
- localized_strings->SetString("bluetoothDeviceConnected", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_CONNECTED)); |
- localized_strings->SetString("bluetoothDeviceConnecting", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_CONNECTING)); |
- localized_strings->SetString("bluetoothDeviceNotPaired", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_NOT_PAIRED)); |
- localized_strings->SetString("bluetoothDevicePaired", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_PAIRED)); |
- localized_strings->SetString("bluetoothDeviceFailedPairing", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_FAILED_PAIRING)); |
- localized_strings->SetString("bluetoothConnectDevice", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_CONNECT)); |
- localized_strings->SetString("bluetoothDisconnectDevice", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_DISCONNECT)); |
- localized_strings->SetString("bluetoothForgetDevice", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_FORGET)); |
- localized_strings->SetString("bluetoothCancel", |
- l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_BLUETOOTH_CANCEL)); |
- localized_strings->SetString("bluetoothAcceptPasskey", |
- l10n_util::GetStringUTF16( |
- IDS_OPTIONS_SETTINGS_BLUETOOTH_ACCEPT_PASSKEY)); |
- localized_strings->SetString("bluetoothRejectPasskey", |
- l10n_util::GetStringUTF16( |
- IDS_OPTIONS_SETTINGS_BLUETOOTH_REJECT_PASSKEY)); |
- localized_strings->SetString("bluetoothConfirmPasskey", |
- l10n_util::GetStringUTF16( |
- IDS_OPTIONS_SETTINGS_BLUETOOTH_CONFIRM_PASSKEY_REQUEST)); |
- localized_strings->SetString("bluetoothEnterPasskey", |
- l10n_util::GetStringUTF16( |
- IDS_OPTIONS_SETTINGS_BLUETOOTH_ENTER_PASSKEY_REQUEST)); |
- localized_strings->SetString("bluetoothRemotePasskey", |
- l10n_util::GetStringUTF16( |
- IDS_OPTIONS_SETTINGS_BLUETOOTH_REMOTE_PASSKEY_REQUEST)); |
- localized_strings->SetString("bluetoothFailedPairingInstructions", |
- l10n_util::GetStringUTF16( |
- IDS_OPTIONS_SETTINGS_BLUETOOTH_FAILED_PAIRING_INSTRUCTIONS)); |
-} |
- |
-void BluetoothOptionsHandler::Initialize() { |
- DCHECK(web_ui_); |
- // Bluetooth support is a work in progress. Supress the feature unless |
- // explicitly enabled via a command line flag. |
- if (!CommandLine::ForCurrentProcess() |
- ->HasSwitch(switches::kEnableBluetooth)) { |
- return; |
- } |
- |
- web_ui_->CallJavascriptFunction( |
- "options.SystemOptions.showBluetoothSettings"); |
- |
- // TODO(kevers): Determine whether bluetooth adapter is powered. |
- bool bluetooth_on = false; |
- base::FundamentalValue checked(bluetooth_on); |
- web_ui_->CallJavascriptFunction( |
- "options.SystemOptions.setBluetoothState", checked); |
- |
- chromeos::BluetoothManager* bluetooth_manager = |
- chromeos::BluetoothManager::GetInstance(); |
- DCHECK(bluetooth_manager); |
- bluetooth_manager->AddObserver(this); |
- |
- chromeos::BluetoothAdapter* default_adapter = |
- bluetooth_manager->DefaultAdapter(); |
- DefaultAdapterChanged(default_adapter); |
-} |
- |
-void BluetoothOptionsHandler::RegisterMessages() { |
- DCHECK(web_ui_); |
- web_ui_->RegisterMessageCallback("bluetoothEnableChange", |
- base::Bind(&BluetoothOptionsHandler::EnableChangeCallback, |
- base::Unretained(this))); |
- web_ui_->RegisterMessageCallback("findBluetoothDevices", |
- base::Bind(&BluetoothOptionsHandler::FindDevicesCallback, |
- base::Unretained(this))); |
- web_ui_->RegisterMessageCallback("updateBluetoothDevice", |
- base::Bind(&BluetoothOptionsHandler::UpdateDeviceCallback, |
- base::Unretained(this))); |
-} |
- |
-void BluetoothOptionsHandler::EnableChangeCallback( |
- const ListValue* args) { |
- bool bluetooth_enabled; |
- args->GetBoolean(0, &bluetooth_enabled); |
- // TODO(kevers): Call Bluetooth API to enable or disable. |
- base::FundamentalValue checked(bluetooth_enabled); |
- web_ui_->CallJavascriptFunction( |
- "options.SystemOptions.setBluetoothState", checked); |
-} |
- |
-void BluetoothOptionsHandler::FindDevicesCallback( |
- const ListValue* args) { |
- // We only initiate a scan if we're running on Chrome OS. Otherwise, we |
- // generate a fake device list. |
- if (!chromeos::system::runtime_environment::IsRunningOnChromeOS()) { |
- GenerateFakeDeviceList(); |
- return; |
- } |
- |
- chromeos::BluetoothManager* bluetooth_manager = |
- chromeos::BluetoothManager::GetInstance(); |
- DCHECK(bluetooth_manager); |
- |
- chromeos::BluetoothAdapter* default_adapter = |
- bluetooth_manager->DefaultAdapter(); |
- |
- ValidateDefaultAdapter(default_adapter); |
- |
- if (default_adapter == NULL) { |
- VLOG(1) << "FindDevicesCallback: no default adapter"; |
- return; |
- } |
- |
- default_adapter->StartDiscovery(); |
-} |
- |
-void BluetoothOptionsHandler::UpdateDeviceCallback( |
- const ListValue* args) { |
- // TODO(kevers): Trigger connect/disconnect. |
- int size = args->GetSize(); |
- std::string address; |
- std::string command; |
- args->GetString(kUpdateDeviceAddressIndex, &address); |
- args->GetString(kUpdateDeviceCommandIndex, &command); |
- if (size > kUpdateDevicePasskeyIndex) { |
- // Passkey confirmation as part of the pairing process. |
- std::string passkey; |
- args->GetString(kUpdateDevicePasskeyIndex, &passkey); |
- DVLOG(1) << "UpdateDeviceCallback: " << address << ": " << command |
- << " [" << passkey << "]"; |
- } else { |
- // Initiating a device connection or disconnecting |
- DVLOG(1) << "UpdateDeviceCallback: " << address << ": " << command; |
- } |
-} |
- |
-void BluetoothOptionsHandler::SendDeviceNotification( |
- chromeos::BluetoothDevice* device, |
- base::DictionaryValue* params) { |
- // Retrieve properties of the bluetooth device. The properties names are |
- // in title case. Convert to camel case in accordance with our Javascript |
- // naming convention. |
- const DictionaryValue& properties = device->AsDictionary(); |
- base::DictionaryValue js_properties; |
- for (DictionaryValue::key_iterator it = properties.begin_keys(); |
- it != properties.end_keys(); ++it) { |
- base::Value* child = NULL; |
- properties.GetWithoutPathExpansion(*it, &child); |
- if (child) { |
- std::string js_key = *it; |
- js_key[0] = tolower(js_key[0]); |
- js_properties.SetWithoutPathExpansion(js_key, child->DeepCopy()); |
- } |
- } |
- if (params) { |
- js_properties.MergeDictionary(params); |
- } |
- web_ui_->CallJavascriptFunction( |
- "options.SystemOptions.addBluetoothDevice", |
- js_properties); |
-} |
- |
-void BluetoothOptionsHandler::RequestConfirmation( |
- chromeos::BluetoothDevice* device, |
- int passkey) { |
- DictionaryValue params; |
- params.SetString("pairing", "bluetoothConfirmPasskey"); |
- params.SetInteger("passkey", passkey); |
- SendDeviceNotification(device, ¶ms); |
-} |
- |
-void BluetoothOptionsHandler::DisplayPasskey( |
- chromeos::BluetoothDevice* device, |
- int passkey, |
- int entered) { |
- DictionaryValue params; |
- params.SetString("pairing", "bluetoothRemotePasskey"); |
- params.SetInteger("passkey", passkey); |
- params.SetInteger("entered", entered); |
- SendDeviceNotification(device, ¶ms); |
-} |
- |
-void BluetoothOptionsHandler::RequestPasskey( |
- chromeos::BluetoothDevice* device) { |
- DictionaryValue params; |
- params.SetString("pairing", "bluetoothEnterPasskey"); |
- SendDeviceNotification(device, ¶ms); |
-} |
- |
-void BluetoothOptionsHandler::ValidatePasskeyCallback( |
- const base::ListValue* args) { |
- // TODO(kevers): Implement me. |
-} |
- |
-void BluetoothOptionsHandler::DefaultAdapterChanged( |
- chromeos::BluetoothAdapter* adapter) { |
- std::string old_default_adapter_id = default_adapter_id_; |
- |
- if (adapter == NULL) { |
- default_adapter_id_.clear(); |
- VLOG(2) << "DefaultAdapterChanged: no default bluetooth adapter"; |
- } else { |
- default_adapter_id_ = adapter->Id(); |
- VLOG(2) << "DefaultAdapterChanged: " << default_adapter_id_; |
- } |
- |
- if (default_adapter_id_ == old_default_adapter_id) { |
- return; |
- } |
- |
- if (adapter != NULL) { |
- adapter->AddObserver(this); |
- } |
- |
- // TODO(vlaviano): Respond to adapter change. |
-} |
- |
-void BluetoothOptionsHandler::DiscoveryStarted(const std::string& adapter_id) { |
- VLOG(2) << "Discovery started on " << adapter_id; |
-} |
- |
-void BluetoothOptionsHandler::DiscoveryEnded(const std::string& adapter_id) { |
- VLOG(2) << "Discovery ended on " << adapter_id; |
- web_ui_->CallJavascriptFunction( |
- "options.SystemOptions.notifyBluetoothSearchComplete"); |
- |
- // Stop the discovery session. |
- // TODO(vlaviano): We may want to expose DeviceDisappeared, remove the |
- // "Find devices" button, and let the discovery session continue throughout |
- // the time that the page is visible rather than just doing a single discovery |
- // cycle in response to a button click. |
- chromeos::BluetoothManager* bluetooth_manager = |
- chromeos::BluetoothManager::GetInstance(); |
- DCHECK(bluetooth_manager); |
- |
- chromeos::BluetoothAdapter* default_adapter = |
- bluetooth_manager->DefaultAdapter(); |
- |
- ValidateDefaultAdapter(default_adapter); |
- |
- if (default_adapter == NULL) { |
- VLOG(1) << "DiscoveryEnded: no default adapter"; |
- return; |
- } |
- |
- default_adapter->StopDiscovery(); |
-} |
- |
-void BluetoothOptionsHandler::DeviceFound(const std::string& adapter_id, |
- chromeos::BluetoothDevice* device) { |
- VLOG(2) << "Device found on " << adapter_id; |
- DCHECK(device); |
- SendDeviceNotification(device, NULL); |
-} |
- |
-void BluetoothOptionsHandler::ValidateDefaultAdapter( |
- chromeos::BluetoothAdapter* adapter) { |
- if ((adapter == NULL && !default_adapter_id_.empty()) || |
- (adapter != NULL && default_adapter_id_ != adapter->Id())) { |
- VLOG(1) << "unexpected default adapter change from \"" |
- << default_adapter_id_ << "\" to \"" << adapter->Id() << "\""; |
- DefaultAdapterChanged(adapter); |
- } |
-} |
- |
-void BluetoothOptionsHandler::GenerateFakeDeviceList() { |
- GenerateFakeDevice( |
- "Fake Wireless Keyboard", |
- "01-02-03-04-05-06", |
- "input-keyboard", |
- true, |
- true, |
- ""); |
- GenerateFakeDevice( |
- "Fake Wireless Mouse", |
- "02-03-04-05-06-01", |
- "input-mouse", |
- true, |
- false, |
- ""); |
- GenerateFakeDevice( |
- "Fake Wireless Headset", |
- "03-04-05-06-01-02", |
- "headset", |
- false, |
- false, |
- ""); |
- GenerateFakeDevice( |
- "Fake Connecting Keyboard", |
- "04-05-06-01-02-03", |
- "input-keyboard", |
- false, |
- false, |
- "bluetoothRemotePasskey"); |
- GenerateFakeDevice( |
- "Fake Connecting Phone", |
- "05-06-01-02-03-04", |
- "phone", |
- false, |
- false, |
- "bluetoothConfirmPasskey"); |
- GenerateFakeDevice( |
- "Fake Connecting Headset", |
- "06-01-02-03-04-05", |
- "headset", |
- false, |
- false, |
- "bluetoothEnterPasskey"); |
- web_ui_->CallJavascriptFunction( |
- "options.SystemOptions.notifyBluetoothSearchComplete"); |
-} |
- |
-void BluetoothOptionsHandler::GenerateFakeDevice( |
- const std::string& name, |
- const std::string& address, |
- const std::string& icon, |
- bool paired, |
- bool connected, |
- const std::string& pairing) { |
- DictionaryValue properties; |
- properties.SetString(bluetooth_device::kNameProperty, name); |
- properties.SetString(bluetooth_device::kAddressProperty, address); |
- properties.SetString(bluetooth_device::kIconProperty, icon); |
- properties.SetBoolean(bluetooth_device::kPairedProperty, paired); |
- properties.SetBoolean(bluetooth_device::kConnectedProperty, connected); |
- properties.SetInteger(bluetooth_device::kClassProperty, 0); |
- chromeos::BluetoothDevice* device = |
- chromeos::BluetoothDevice::Create(properties); |
- DeviceFound("FakeAdapter", device); |
- if (pairing.compare("bluetoothRemotePasskey") == 0) { |
- DisplayPasskey(device, 12345, 2); |
- } else if (pairing.compare("bluetoothConfirmPasskey") == 0) { |
- RequestConfirmation(device, 12345); |
- } else if (pairing.compare("bluetoothEnterPasskey") == 0) { |
- RequestPasskey(device); |
- } |
- delete device; |
-} |
- |
-} // namespace chromeos |
- |