Chromium Code Reviews| Index: extensions/browser/api/hid/hid_api.cc |
| diff --git a/extensions/browser/api/hid/hid_api.cc b/extensions/browser/api/hid/hid_api.cc |
| index d67f56499d88346f99b184179e09d220e31e4776..c428b65efedfccff6dd830902885c79df2c2b6c7 100644 |
| --- a/extensions/browser/api/hid/hid_api.cc |
| +++ b/extensions/browser/api/hid/hid_api.cc |
| @@ -14,6 +14,8 @@ |
| #include "device/hid/hid_device_info.h" |
| #include "device/hid/hid_service.h" |
| #include "extensions/browser/api/api_resource_manager.h" |
| +#include "extensions/browser/api/device_permissions_prompt.h" |
| +#include "extensions/browser/api/extensions_api_client.h" |
| #include "extensions/common/api/hid.h" |
| #include "net/base/io_buffer.h" |
| @@ -67,7 +69,7 @@ HidGetDevicesFunction::~HidGetDevicesFunction() {} |
| ExtensionFunction::ResponseAction HidGetDevicesFunction::Run() { |
| scoped_ptr<core_api::hid::GetDevices::Params> parameters = |
| hid::GetDevices::Params::Create(*args_); |
| - EXTENSION_FUNCTION_VALIDATE(parameters.get()); |
| + EXTENSION_FUNCTION_VALIDATE(parameters); |
| HidDeviceManager* device_manager = HidDeviceManager::Get(browser_context()); |
| if (!device_manager) { |
| @@ -101,6 +103,56 @@ void HidGetDevicesFunction::OnEnumerationComplete( |
| Respond(OneArgument(devices.release())); |
| } |
| +HidGetUserSelectedDevicesFunction::HidGetUserSelectedDevicesFunction() { |
| +} |
| + |
| +HidGetUserSelectedDevicesFunction::~HidGetUserSelectedDevicesFunction() { |
| +} |
| + |
| +ExtensionFunction::ResponseAction HidGetUserSelectedDevicesFunction::Run() { |
| + scoped_ptr<core_api::hid::GetUserSelectedDevices::Params> parameters = |
| + hid::GetUserSelectedDevices::Params::Create(*args_); |
| + EXTENSION_FUNCTION_VALIDATE(parameters); |
| + |
| + device_manager_ = HidDeviceManager::Get(browser_context()); |
| + if (!device_manager_) { |
| + return RespondNow(Error(kErrorServiceUnavailable)); |
| + } |
| + |
| + if (!user_gesture()) { |
| + return RespondNow(OneArgument(new base::ListValue())); |
|
Devlin
2015/05/06 23:04:28
This looks like it should be an error, not an empt
Reilly Grant (use Gerrit)
2015/05/06 23:48:52
The documented behavior is that this returns an em
Devlin
2015/05/07 20:43:55
Oh, odd. In other places (e.g., the management ap
|
| + } |
| + |
| + bool multiple = false; |
| + std::vector<HidDeviceFilter> filters; |
| + if (parameters->options) { |
| + multiple = parameters->options->multiple && *parameters->options->multiple; |
| + if (parameters->options->filters) { |
| + const auto& api_filters = *parameters->options->filters; |
| + filters.resize(api_filters.size()); |
| + for (size_t i = 0; i < api_filters.size(); ++i) { |
| + ConvertHidDeviceFilter(api_filters[i], &filters[i]); |
| + } |
| + } |
| + } |
| + |
| + prompt_ = ExtensionsAPIClient::Get()->CreateDevicePermissionsPrompt( |
| + GetSenderWebContents()); |
| + if (!prompt_) { |
| + return RespondNow(Error(kErrorServiceUnavailable)); |
| + } |
| + |
| + prompt_->AskForHidDevices( |
| + extension(), browser_context(), multiple, filters, |
| + base::Bind(&HidGetUserSelectedDevicesFunction::OnDevicesChosen, this)); |
| + return RespondLater(); |
| +} |
| + |
| +void HidGetUserSelectedDevicesFunction::OnDevicesChosen( |
| + const std::vector<scoped_refptr<HidDeviceInfo>>& devices) { |
| + Respond(OneArgument(device_manager_->GetApiDevicesFromList(devices).Pass())); |
| +} |
| + |
| HidConnectFunction::HidConnectFunction() : connection_manager_(nullptr) { |
| } |
| @@ -109,7 +161,7 @@ HidConnectFunction::~HidConnectFunction() {} |
| ExtensionFunction::ResponseAction HidConnectFunction::Run() { |
| scoped_ptr<core_api::hid::Connect::Params> parameters = |
| hid::Connect::Params::Create(*args_); |
| - EXTENSION_FUNCTION_VALIDATE(parameters.get()); |
| + EXTENSION_FUNCTION_VALIDATE(parameters); |
| HidDeviceManager* device_manager = HidDeviceManager::Get(browser_context()); |
| if (!device_manager) { |
| @@ -128,7 +180,7 @@ ExtensionFunction::ResponseAction HidConnectFunction::Run() { |
| return RespondNow(Error(kErrorInvalidDeviceId)); |
| } |
| - if (!HidDeviceManager::HasPermission(extension(), device_info)) { |
| + if (!device_manager->HasPermission(extension(), device_info, true)) { |
| return RespondNow(Error(kErrorPermissionDenied)); |
| } |
| @@ -145,7 +197,7 @@ ExtensionFunction::ResponseAction HidConnectFunction::Run() { |
| void HidConnectFunction::OnConnectComplete( |
| scoped_refptr<HidConnection> connection) { |
| - if (!connection.get()) { |
| + if (!connection) { |
| Respond(Error(kErrorFailedToOpenDevice)); |
| return; |
| } |
| @@ -163,7 +215,7 @@ HidDisconnectFunction::~HidDisconnectFunction() {} |
| ExtensionFunction::ResponseAction HidDisconnectFunction::Run() { |
| scoped_ptr<core_api::hid::Disconnect::Params> parameters = |
| hid::Disconnect::Params::Create(*args_); |
| - EXTENSION_FUNCTION_VALIDATE(parameters.get()); |
| + EXTENSION_FUNCTION_VALIDATE(parameters); |
| ApiResourceManager<HidConnectionResource>* connection_manager = |
| ApiResourceManager<HidConnectionResource>::Get(browser_context()); |
| @@ -215,7 +267,7 @@ HidReceiveFunction::~HidReceiveFunction() {} |
| bool HidReceiveFunction::ValidateParameters() { |
| parameters_ = hid::Receive::Params::Create(*args_); |
| - EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
| + EXTENSION_FUNCTION_VALIDATE(parameters_); |
| set_connection_id(parameters_->connection_id); |
| return true; |
| } |
| @@ -245,7 +297,7 @@ HidSendFunction::~HidSendFunction() {} |
| bool HidSendFunction::ValidateParameters() { |
| parameters_ = hid::Send::Params::Create(*args_); |
| - EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
| + EXTENSION_FUNCTION_VALIDATE(parameters_); |
| set_connection_id(parameters_->connection_id); |
| return true; |
| } |
| @@ -274,7 +326,7 @@ HidReceiveFeatureReportFunction::~HidReceiveFeatureReportFunction() {} |
| bool HidReceiveFeatureReportFunction::ValidateParameters() { |
| parameters_ = hid::ReceiveFeatureReport::Params::Create(*args_); |
| - EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
| + EXTENSION_FUNCTION_VALIDATE(parameters_); |
| set_connection_id(parameters_->connection_id); |
| return true; |
| } |
| @@ -303,7 +355,7 @@ HidSendFeatureReportFunction::~HidSendFeatureReportFunction() {} |
| bool HidSendFeatureReportFunction::ValidateParameters() { |
| parameters_ = hid::SendFeatureReport::Params::Create(*args_); |
| - EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
| + EXTENSION_FUNCTION_VALIDATE(parameters_); |
| set_connection_id(parameters_->connection_id); |
| return true; |
| } |