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

Unified Diff: content/browser/bluetooth/bluetooth_dispatcher_host.cc

Issue 1861013005: bluetooth: Move GetCharacteristic(s) over to Mojo (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth-separate-tests-read-value
Patch Set: Address palmer's comments Created 4 years, 8 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: content/browser/bluetooth/bluetooth_dispatcher_host.cc
diff --git a/content/browser/bluetooth/bluetooth_dispatcher_host.cc b/content/browser/bluetooth/bluetooth_dispatcher_host.cc
index c281a2a4b3c4ec40cb3076a93d3a46959eeda3d0..b6b83d664679f58b249b205538c12b4faca59b57 100644
--- a/content/browser/bluetooth/bluetooth_dispatcher_host.cc
+++ b/content/browser/bluetooth/bluetooth_dispatcher_host.cc
@@ -21,6 +21,8 @@
#include "base/thread_task_runner_handle.h"
#include "content/browser/bad_message.h"
#include "content/browser/bluetooth/bluetooth_blacklist.h"
+#include "content/browser/bluetooth/bluetooth_metrics.h"
+#include "content/browser/bluetooth/cache_query_result.h"
#include "content/browser/bluetooth/first_device_bluetooth_chooser.h"
#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
@@ -269,8 +271,6 @@ bool BluetoothDispatcherHost::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(BluetoothHostMsg_GATTServerDisconnect,
OnGATTServerDisconnect)
IPC_MESSAGE_HANDLER(BluetoothHostMsg_GetPrimaryService, OnGetPrimaryService)
- IPC_MESSAGE_HANDLER(BluetoothHostMsg_GetCharacteristic, OnGetCharacteristic)
- IPC_MESSAGE_HANDLER(BluetoothHostMsg_GetCharacteristics, OnGetCharacteristics)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -300,7 +300,6 @@ void BluetoothDispatcherHost::SetBluetoothAdapterForTesting(
// Since this can happen after the test is done and the cleanup function is
// called, we clean them here.
service_to_device_.clear();
- characteristic_to_service_.clear();
connected_devices_map_.reset(new ConnectedDevicesMap(render_process_id_));
allowed_devices_map_ = BluetoothAllowedDevicesMap();
}
@@ -358,32 +357,6 @@ struct BluetoothDispatcherHost::RequestDeviceSession {
std::unique_ptr<device::BluetoothDiscoverySession> discovery_session;
};
-BluetoothDispatcherHost::CacheQueryResult::CacheQueryResult() {}
-
-BluetoothDispatcherHost::CacheQueryResult::CacheQueryResult(
- CacheQueryOutcome outcome)
- : outcome(outcome) {}
-
-BluetoothDispatcherHost::CacheQueryResult::~CacheQueryResult() {}
-
-WebBluetoothError BluetoothDispatcherHost::CacheQueryResult::GetWebError()
- const {
- switch (outcome) {
- case CacheQueryOutcome::SUCCESS:
- case CacheQueryOutcome::BAD_RENDERER:
- NOTREACHED();
- return WebBluetoothError::DEVICE_NO_LONGER_IN_RANGE;
- case CacheQueryOutcome::NO_DEVICE:
- return WebBluetoothError::DEVICE_NO_LONGER_IN_RANGE;
- case CacheQueryOutcome::NO_SERVICE:
- return WebBluetoothError::SERVICE_NO_LONGER_EXISTS;
- case CacheQueryOutcome::NO_CHARACTERISTIC:
- return WebBluetoothError::CHARACTERISTIC_NO_LONGER_EXISTS;
- }
- NOTREACHED();
- return WebBluetoothError::DEVICE_NO_LONGER_IN_RANGE;
-}
-
struct BluetoothDispatcherHost::PrimaryServicesRequest {
enum CallingFunction { GET_PRIMARY_SERVICE, GET_PRIMARY_SERVICES };
@@ -779,148 +752,6 @@ void BluetoothDispatcherHost::OnGetPrimaryService(
PrimaryServicesRequest::GET_PRIMARY_SERVICE));
}
-void BluetoothDispatcherHost::OnGetCharacteristic(
- int thread_id,
- int request_id,
- int frame_routing_id,
- const std::string& service_instance_id,
- const std::string& characteristic_uuid) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- RecordWebBluetoothFunctionCall(UMAWebBluetoothFunction::GET_CHARACTERISTIC);
- RecordGetCharacteristicCharacteristic(characteristic_uuid);
-
- // Check Blacklist for characteristic_uuid.
- if (BluetoothBlacklist::Get().IsExcluded(
- BluetoothUUID(characteristic_uuid))) {
- RecordGetCharacteristicOutcome(UMAGetCharacteristicOutcome::BLACKLISTED);
- Send(new BluetoothMsg_GetCharacteristicError(
- thread_id, request_id,
- WebBluetoothError::BLACKLISTED_CHARACTERISTIC_UUID));
- return;
- }
-
- const CacheQueryResult query_result =
- QueryCacheForService(GetOrigin(frame_routing_id), service_instance_id);
-
- if (query_result.outcome == CacheQueryOutcome::BAD_RENDERER) {
- return;
- }
-
- if (query_result.outcome != CacheQueryOutcome::SUCCESS) {
- RecordGetCharacteristicOutcome(query_result.outcome);
- Send(new BluetoothMsg_GetCharacteristicError(thread_id, request_id,
- query_result.GetWebError()));
- return;
- }
-
- for (BluetoothRemoteGattCharacteristic* characteristic :
- query_result.service->GetCharacteristics()) {
- if (characteristic->GetUUID().canonical_value() == characteristic_uuid) {
- const std::string& characteristic_instance_id =
- characteristic->GetIdentifier();
-
- auto insert_result = characteristic_to_service_.insert(
- make_pair(characteristic_instance_id, service_instance_id));
-
- // If value is already in map, DCHECK it's valid.
- if (!insert_result.second)
- DCHECK(insert_result.first->second == service_instance_id);
-
- RecordGetCharacteristicOutcome(UMAGetCharacteristicOutcome::SUCCESS);
- // TODO(ortuno): Use generated instance ID instead.
- // https://crbug.com/495379
- Send(new BluetoothMsg_GetCharacteristicSuccess(
- thread_id, request_id, characteristic_instance_id,
- static_cast<uint32_t>(characteristic->GetProperties())));
- return;
- }
- }
- RecordGetCharacteristicOutcome(UMAGetCharacteristicOutcome::NOT_FOUND);
- Send(new BluetoothMsg_GetCharacteristicError(
- thread_id, request_id, WebBluetoothError::CHARACTERISTIC_NOT_FOUND));
-}
-
-void BluetoothDispatcherHost::OnGetCharacteristics(
- int thread_id,
- int request_id,
- int frame_routing_id,
- const std::string& service_instance_id,
- const std::string& characteristics_uuid) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- RecordWebBluetoothFunctionCall(
- UMAWebBluetoothFunction::SERVICE_GET_CHARACTERISTICS);
- RecordGetCharacteristicsCharacteristic(characteristics_uuid);
-
- // Check Blacklist for characteristics_uuid.
- if (!characteristics_uuid.empty() &&
- BluetoothBlacklist::Get().IsExcluded(
- BluetoothUUID(characteristics_uuid))) {
- RecordGetCharacteristicsOutcome(UMAGetCharacteristicOutcome::BLACKLISTED);
- Send(new BluetoothMsg_GetCharacteristicsError(
- thread_id, request_id,
- WebBluetoothError::BLACKLISTED_CHARACTERISTIC_UUID));
- return;
- }
-
- const CacheQueryResult query_result =
- QueryCacheForService(GetOrigin(frame_routing_id), service_instance_id);
-
- if (query_result.outcome == CacheQueryOutcome::BAD_RENDERER) {
- return;
- }
-
- if (query_result.outcome != CacheQueryOutcome::SUCCESS) {
- RecordGetCharacteristicsOutcome(query_result.outcome);
- Send(new BluetoothMsg_GetCharacteristicsError(thread_id, request_id,
- query_result.GetWebError()));
- return;
- }
-
- std::vector<std::string> characteristics_instance_ids;
- std::vector<std::string> characteristics_uuids;
- std::vector<uint32_t> characteristics_properties;
-
- for (BluetoothRemoteGattCharacteristic* characteristic :
- query_result.service->GetCharacteristics()) {
- if (!BluetoothBlacklist::Get().IsExcluded(characteristic->GetUUID()) &&
- (characteristics_uuid.empty() ||
- characteristics_uuid == characteristic->GetUUID().canonical_value())) {
- const std::string& characteristic_instance_id =
- characteristic->GetIdentifier();
-
- characteristics_instance_ids.push_back(characteristic_instance_id);
- characteristics_uuids.push_back(
- characteristic->GetUUID().canonical_value());
- characteristics_properties.push_back(
- static_cast<uint32_t>(characteristic->GetProperties()));
-
- auto insert_result = characteristic_to_service_.insert(
- make_pair(characteristic_instance_id, service_instance_id));
-
- // If value is already in map, DCHECK it's valid.
- if (!insert_result.second)
- DCHECK(insert_result.first->second == service_instance_id);
- }
- }
-
- if (!characteristics_instance_ids.empty()) {
- RecordGetCharacteristicsOutcome(UMAGetCharacteristicOutcome::SUCCESS);
- Send(new BluetoothMsg_GetCharacteristicsSuccess(
- thread_id, request_id, characteristics_instance_ids,
- characteristics_uuids, characteristics_properties));
- return;
- }
- RecordGetCharacteristicsOutcome(
- characteristics_uuid.empty()
- ? UMAGetCharacteristicOutcome::NO_CHARACTERISTICS
- : UMAGetCharacteristicOutcome::NOT_FOUND);
- Send(new BluetoothMsg_GetCharacteristicsError(
- thread_id, request_id,
- characteristics_uuid.empty()
- ? WebBluetoothError::NO_CHARACTERISTICS_FOUND
- : WebBluetoothError::CHARACTERISTIC_NOT_FOUND));
-}
-
void BluetoothDispatcherHost::OnGetAdapter(
base::Closure continuation,
scoped_refptr<device::BluetoothAdapter> adapter) {
@@ -1303,9 +1134,9 @@ void BluetoothDispatcherHost::AddToServicesMapAndSendGetPrimaryServiceSuccess(
service_identifier));
}
-BluetoothDispatcherHost::CacheQueryResult
-BluetoothDispatcherHost::QueryCacheForDevice(const url::Origin& origin,
- const std::string& device_id) {
+CacheQueryResult BluetoothDispatcherHost::QueryCacheForDevice(
+ const url::Origin& origin,
+ const std::string& device_id) {
const std::string& device_address =
allowed_devices_map_.GetDeviceAddress(origin, device_id);
if (device_address.empty()) {
@@ -1327,8 +1158,7 @@ BluetoothDispatcherHost::QueryCacheForDevice(const url::Origin& origin,
return result;
}
-BluetoothDispatcherHost::CacheQueryResult
-BluetoothDispatcherHost::QueryCacheForService(
+CacheQueryResult BluetoothDispatcherHost::QueryCacheForService(
const url::Origin& origin,
const std::string& service_instance_id) {
auto device_iter = service_to_device_.find(service_instance_id);
@@ -1367,36 +1197,6 @@ BluetoothDispatcherHost::QueryCacheForService(
return result;
}
-BluetoothDispatcherHost::CacheQueryResult
-BluetoothDispatcherHost::QueryCacheForCharacteristic(
- const url::Origin& origin,
- const std::string& characteristic_instance_id) {
- auto characteristic_iter =
- characteristic_to_service_.find(characteristic_instance_id);
-
- // Kill the renderer, see "ID Not In Map Note" above.
- if (characteristic_iter == characteristic_to_service_.end()) {
- bad_message::ReceivedBadMessage(this,
- bad_message::BDH_INVALID_CHARACTERISTIC_ID);
- return CacheQueryResult(CacheQueryOutcome::BAD_RENDERER);
- }
-
- CacheQueryResult result =
- QueryCacheForService(origin, characteristic_iter->second);
- if (result.outcome != CacheQueryOutcome::SUCCESS) {
- return result;
- }
-
- result.characteristic =
- result.service->GetCharacteristic(characteristic_instance_id);
-
- if (result.characteristic == nullptr) {
- result.outcome = CacheQueryOutcome::NO_CHARACTERISTIC;
- }
-
- return result;
-}
-
void BluetoothDispatcherHost::AddAdapterObserver(
device::BluetoothAdapter::Observer* observer) {
adapter_observers_.insert(observer);
« no previous file with comments | « content/browser/bluetooth/bluetooth_dispatcher_host.h ('k') | content/browser/bluetooth/bluetooth_metrics.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698