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

Unified Diff: chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.cc

Issue 297003004: chrome.bluetoothLowEnergy: Implement readDescriptorValue. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: git cl format Created 6 years, 7 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/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.cc
diff --git a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.cc b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.cc
index 8cdbd2f133196358c09d30b7b425986868f9e31c..fe71360fc3761c100db36a3e9445375165ac2e85 100644
--- a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.cc
+++ b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.cc
@@ -30,6 +30,8 @@ const char kErrorDeviceNotFoundFormat[] =
"Device with address \"%s\" not found.";
const char kErrorReadCharacteristicValueFailedFormat[] =
"Failed to read value of characteristic with ID \"%s\".";
+const char kErrorReadDescriptorValueFailedFormat[] =
+ "Failed to read value of descriptor with ID \"%s\".";
const char kErrorServiceNotFoundFormat[] = "Service with ID \"%s\" not found.";
const char kErrorPlatformNotSupported[] =
"This operation is not supported on the current platform";
@@ -486,10 +488,65 @@ void BluetoothLowEnergyWriteCharacteristicValueFunction::ErrorCallback() {
}
bool BluetoothLowEnergyReadDescriptorValueFunction::DoWork() {
- // TODO(armansito): Implement.
- SetError("Call not supported.");
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ BluetoothLowEnergyEventRouter* event_router =
+ GetEventRouter(browser_context());
+
+ // The adapter must be initialized at this point, but return an error instead
+ // of asserting.
+ if (!event_router->HasAdapter()) {
+ SetError(kErrorAdapterNotInitialized);
+ SendResponse(false);
+ return false;
+ }
+
+ scoped_ptr<apibtle::ReadDescriptorValue::Params> params(
+ apibtle::ReadDescriptorValue::Params::Create(*args_));
+ EXTENSION_FUNCTION_VALIDATE(params.get() != NULL);
+
+ instance_id_ = params->descriptor_id;
+
+ if (!event_router->ReadDescriptorValue(
+ instance_id_,
+ base::Bind(
+ &BluetoothLowEnergyReadDescriptorValueFunction::SuccessCallback,
+ this),
+ base::Bind(
+ &BluetoothLowEnergyReadDescriptorValueFunction::ErrorCallback,
+ this))) {
+ SetError(base::StringPrintf(kErrorDescriptorNotFoundFormat,
+ instance_id_.c_str()));
+ SendResponse(false);
+ return false;
+ }
+
+ return true;
+}
+
+void BluetoothLowEnergyReadDescriptorValueFunction::SuccessCallback() {
+ // Obtain info on the descriptor and see whether or not the descriptor is
+ // still around.
+ apibtle::Descriptor descriptor;
+ if (!GetEventRouter(browser_context())
+ ->GetDescriptor(instance_id_, &descriptor)) {
+ SetError(base::StringPrintf(kErrorDescriptorNotFoundFormat,
+ instance_id_.c_str()));
+ SendResponse(false);
+ return;
+ }
+
+ // Manually construct the result instead of using
+ // apibtle::GetDescriptor::Results::Create as it doesn't convert lists of
+ // enums correctly.
+ SetResult(apibtle::DescriptorToValue(&descriptor).release());
+ SendResponse(true);
+}
+
+void BluetoothLowEnergyReadDescriptorValueFunction::ErrorCallback() {
+ SetError(base::StringPrintf(kErrorReadDescriptorValueFailedFormat,
+ instance_id_.c_str()));
SendResponse(false);
- return false;
}
bool BluetoothLowEnergyWriteDescriptorValueFunction::DoWork() {

Powered by Google App Engine
This is Rietveld 408576698