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

Side by Side Diff: content/browser/bluetooth/bluetooth_dispatcher_host.cc

Issue 1286883002: bluetooth: Add histograms and logging for getCharacteristic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth-uma-refactoring
Patch Set: Fix Typoe Created 5 years, 4 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 unified diff | Download patch
« no previous file with comments | « no previous file | content/browser/bluetooth/bluetooth_metrics.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // NETWORK_ERROR Note: 5 // NETWORK_ERROR Note:
6 // When a device can't be found in the BluetoothAdapter, that generally 6 // When a device can't be found in the BluetoothAdapter, that generally
7 // indicates that it's gone out of range. We reject with a NetworkError in that 7 // indicates that it's gone out of range. We reject with a NetworkError in that
8 // case. 8 // case.
9 // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothdevice-conne ctgatt 9 // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothdevice-conne ctgatt
10 10
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 base::TimeDelta::FromSeconds(current_delay_time_)); 353 base::TimeDelta::FromSeconds(current_delay_time_));
354 } 354 }
355 355
356 void BluetoothDispatcherHost::OnGetCharacteristic( 356 void BluetoothDispatcherHost::OnGetCharacteristic(
357 int thread_id, 357 int thread_id,
358 int request_id, 358 int request_id,
359 const std::string& service_instance_id, 359 const std::string& service_instance_id,
360 const std::string& characteristic_uuid) { 360 const std::string& characteristic_uuid) {
361 DCHECK_CURRENTLY_ON(BrowserThread::UI); 361 DCHECK_CURRENTLY_ON(BrowserThread::UI);
362 RecordWebBluetoothFunctionCall(UMAWebBluetoothFunction::GET_CHARACTERISTIC); 362 RecordWebBluetoothFunctionCall(UMAWebBluetoothFunction::GET_CHARACTERISTIC);
363 RecordGetCharacteristicCharacteristic(characteristic_uuid);
363 364
364 auto device_iter = service_to_device_.find(service_instance_id); 365 auto device_iter = service_to_device_.find(service_instance_id);
365 // A service_instance_id not in the map implies a hostile renderer 366 // A service_instance_id not in the map implies a hostile renderer
366 // because a renderer obtains the service id from this class and 367 // because a renderer obtains the service id from this class and
367 // it will be added to the map at that time. 368 // it will be added to the map at that time.
368 if (device_iter == service_to_device_.end()) { 369 if (device_iter == service_to_device_.end()) {
369 // Kill the renderer 370 // Kill the renderer
370 bad_message::ReceivedBadMessage(this, bad_message::BDH_INVALID_SERVICE_ID); 371 bad_message::ReceivedBadMessage(this, bad_message::BDH_INVALID_SERVICE_ID);
371 return; 372 return;
372 } 373 }
373 374
374 // TODO(ortuno): Check if domain has access to device. 375 // TODO(ortuno): Check if domain has access to device.
375 // https://crbug.com/493459 376 // https://crbug.com/493459
376 device::BluetoothDevice* device = 377 device::BluetoothDevice* device =
377 adapter_->GetDevice(device_iter->second /* device_instance_id */); 378 adapter_->GetDevice(device_iter->second /* device_instance_id */);
378 379
379 if (device == nullptr) { // See "NETWORK_ERROR Note" above. 380 if (device == nullptr) { // See "NETWORK_ERROR Note" above.
381 RecordGetCharacteristicOutcome(UMAGetCharacteristicOutcome::NO_DEVICE);
380 Send(new BluetoothMsg_GetCharacteristicError( 382 Send(new BluetoothMsg_GetCharacteristicError(
381 thread_id, request_id, WebBluetoothError::DeviceNoLongerInRange)); 383 thread_id, request_id, WebBluetoothError::DeviceNoLongerInRange));
382 return; 384 return;
383 } 385 }
384 386
385 // TODO(ortuno): Check if domain has access to service 387 // TODO(ortuno): Check if domain has access to service
386 // http://crbug.com/493460 388 // http://crbug.com/493460
387 device::BluetoothGattService* service = 389 device::BluetoothGattService* service =
388 device->GetGattService(service_instance_id); 390 device->GetGattService(service_instance_id);
389 if (!service) { 391 if (!service) {
392 RecordGetCharacteristicOutcome(UMAGetCharacteristicOutcome::NO_SERVICE);
390 Send(new BluetoothMsg_GetCharacteristicError( 393 Send(new BluetoothMsg_GetCharacteristicError(
391 thread_id, request_id, WebBluetoothError::ServiceNoLongerExists)); 394 thread_id, request_id, WebBluetoothError::ServiceNoLongerExists));
392 return; 395 return;
393 } 396 }
394 397
395 for (BluetoothGattCharacteristic* characteristic : 398 for (BluetoothGattCharacteristic* characteristic :
396 service->GetCharacteristics()) { 399 service->GetCharacteristics()) {
397 if (characteristic->GetUUID().canonical_value() == characteristic_uuid) { 400 if (characteristic->GetUUID().canonical_value() == characteristic_uuid) {
398 const std::string& characteristic_instance_id = 401 const std::string& characteristic_instance_id =
399 characteristic->GetIdentifier(); 402 characteristic->GetIdentifier();
400 403
401 auto insert_result = characteristic_to_service_.insert( 404 auto insert_result = characteristic_to_service_.insert(
402 make_pair(characteristic_instance_id, service_instance_id)); 405 make_pair(characteristic_instance_id, service_instance_id));
403 406
404 // If value is already in map, DCHECK it's valid. 407 // If value is already in map, DCHECK it's valid.
405 if (!insert_result.second) 408 if (!insert_result.second)
406 DCHECK(insert_result.first->second == service_instance_id); 409 DCHECK(insert_result.first->second == service_instance_id);
407 410
411 RecordGetCharacteristicOutcome(UMAGetCharacteristicOutcome::SUCCESS);
408 // TODO(ortuno): Use generated instance ID instead. 412 // TODO(ortuno): Use generated instance ID instead.
409 // https://crbug.com/495379 413 // https://crbug.com/495379
410 Send(new BluetoothMsg_GetCharacteristicSuccess( 414 Send(new BluetoothMsg_GetCharacteristicSuccess(
411 thread_id, request_id, characteristic_instance_id)); 415 thread_id, request_id, characteristic_instance_id));
412 return; 416 return;
413 } 417 }
414 } 418 }
419 RecordGetCharacteristicOutcome(UMAGetCharacteristicOutcome::NOT_FOUND);
415 Send(new BluetoothMsg_GetCharacteristicError( 420 Send(new BluetoothMsg_GetCharacteristicError(
416 thread_id, request_id, WebBluetoothError::CharacteristicNotFound)); 421 thread_id, request_id, WebBluetoothError::CharacteristicNotFound));
417 } 422 }
418 423
419 void BluetoothDispatcherHost::OnReadValue( 424 void BluetoothDispatcherHost::OnReadValue(
420 int thread_id, 425 int thread_id,
421 int request_id, 426 int request_id,
422 const std::string& characteristic_instance_id) { 427 const std::string& characteristic_instance_id) {
423 DCHECK_CURRENTLY_ON(BrowserThread::UI); 428 DCHECK_CURRENTLY_ON(BrowserThread::UI);
424 RecordWebBluetoothFunctionCall( 429 RecordWebBluetoothFunctionCall(
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 715
711 void BluetoothDispatcherHost::OnWriteValueFailed( 716 void BluetoothDispatcherHost::OnWriteValueFailed(
712 int thread_id, 717 int thread_id,
713 int request_id, 718 int request_id,
714 device::BluetoothGattService::GattErrorCode error_code) { 719 device::BluetoothGattService::GattErrorCode error_code) {
715 Send(new BluetoothMsg_WriteCharacteristicValueError( 720 Send(new BluetoothMsg_WriteCharacteristicValueError(
716 thread_id, request_id, TranslateGATTError(error_code))); 721 thread_id, request_id, TranslateGATTError(error_code)));
717 } 722 }
718 723
719 } // namespace content 724 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/bluetooth/bluetooth_metrics.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698