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

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

Issue 1898643002: Refactor device::BluetoothGattXXX classes to split into remote/local. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 unified diff | Download patch
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 // ID Not In Map Note: 5 // ID Not In Map Note:
6 // A service, characteristic, or descriptor ID not in the corresponding 6 // A service, characteristic, or descriptor ID not in the corresponding
7 // BluetoothDispatcherHost map [service_to_device_, characteristic_to_service_, 7 // BluetoothDispatcherHost map [service_to_device_, characteristic_to_service_,
8 // descriptor_to_characteristic_] implies a hostile renderer because a renderer 8 // descriptor_to_characteristic_] implies a hostile renderer because a renderer
9 // obtains the corresponding ID from this class and it will be added to the map 9 // obtains the corresponding ID from this class and it will be added to the map
10 // at that time. 10 // at that time.
(...skipping 13 matching lines...) Expand all
24 #include "content/browser/bluetooth/first_device_bluetooth_chooser.h" 24 #include "content/browser/bluetooth/first_device_bluetooth_chooser.h"
25 #include "content/browser/frame_host/render_frame_host_impl.h" 25 #include "content/browser/frame_host/render_frame_host_impl.h"
26 #include "content/browser/web_contents/web_contents_impl.h" 26 #include "content/browser/web_contents/web_contents_impl.h"
27 #include "content/public/browser/content_browser_client.h" 27 #include "content/public/browser/content_browser_client.h"
28 #include "content/public/browser/web_contents.h" 28 #include "content/public/browser/web_contents.h"
29 #include "content/public/browser/web_contents_delegate.h" 29 #include "content/public/browser/web_contents_delegate.h"
30 #include "device/bluetooth/bluetooth_adapter.h" 30 #include "device/bluetooth/bluetooth_adapter.h"
31 #include "device/bluetooth/bluetooth_adapter_factory.h" 31 #include "device/bluetooth/bluetooth_adapter_factory.h"
32 #include "device/bluetooth/bluetooth_device.h" 32 #include "device/bluetooth/bluetooth_device.h"
33 #include "device/bluetooth/bluetooth_discovery_session.h" 33 #include "device/bluetooth/bluetooth_discovery_session.h"
34 #include "device/bluetooth/bluetooth_gatt_characteristic.h" 34 #include "device/bluetooth/bluetooth_remote_gatt_characteristic.h"
35 #include "device/bluetooth/bluetooth_gatt_service.h" 35 #include "device/bluetooth/bluetooth_remote_gatt_service.h"
36 36
37 using blink::WebBluetoothError; 37 using blink::WebBluetoothError;
38 using device::BluetoothAdapter; 38 using device::BluetoothAdapter;
39 using device::BluetoothAdapterFactory; 39 using device::BluetoothAdapterFactory;
40 using device::BluetoothGattCharacteristic; 40 using device::BluetoothRemoteGattCharacteristic;
41 using device::BluetoothGattService; 41 using device::BluetoothRemoteGattService;
42 using device::BluetoothUUID; 42 using device::BluetoothUUID;
43 43
44 namespace content { 44 namespace content {
45 45
46 namespace { 46 namespace {
47 47
48 // TODO(ortuno): Once we have a chooser for scanning, a way to control that 48 // TODO(ortuno): Once we have a chooser for scanning, a way to control that
49 // chooser from tests, and the right callback for discovered services we should 49 // chooser from tests, and the right callback for discovered services we should
50 // delete these constants. 50 // delete these constants.
51 // https://crbug.com/436280 and https://crbug.com/484504 51 // https://crbug.com/436280 and https://crbug.com/484504
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 std::unique_ptr<device::BluetoothDiscoverySession> discovery_session) { 172 std::unique_ptr<device::BluetoothDiscoverySession> discovery_session) {
173 // Nothing goes wrong if the discovery session fails to stop, and we don't 173 // Nothing goes wrong if the discovery session fails to stop, and we don't
174 // need to wait for it before letting the user's script proceed, so we ignore 174 // need to wait for it before letting the user's script proceed, so we ignore
175 // the results here. 175 // the results here.
176 discovery_session->Stop(base::Bind(&base::DoNothing), 176 discovery_session->Stop(base::Bind(&base::DoNothing),
177 base::Bind(&base::DoNothing)); 177 base::Bind(&base::DoNothing));
178 } 178 }
179 179
180 // TODO(ortuno): This should really be a BluetoothDevice method. 180 // TODO(ortuno): This should really be a BluetoothDevice method.
181 // Replace when implemented. http://crbug.com/552022 181 // Replace when implemented. http://crbug.com/552022
182 std::vector<BluetoothGattService*> GetPrimaryServicesByUUID( 182 std::vector<BluetoothRemoteGattService*> GetPrimaryServicesByUUID(
183 device::BluetoothDevice* device, 183 device::BluetoothDevice* device,
184 const std::string& service_uuid) { 184 const std::string& service_uuid) {
185 std::vector<BluetoothGattService*> services; 185 std::vector<BluetoothRemoteGattService*> services;
186 VLOG(1) << "Looking for service: " << service_uuid; 186 VLOG(1) << "Looking for service: " << service_uuid;
187 for (BluetoothGattService* service : device->GetGattServices()) { 187 for (BluetoothRemoteGattService* service : device->GetGattServices()) {
188 VLOG(1) << "Service in cache: " << service->GetUUID().canonical_value(); 188 VLOG(1) << "Service in cache: " << service->GetUUID().canonical_value();
189 if (service->GetUUID().canonical_value() == service_uuid && 189 if (service->GetUUID().canonical_value() == service_uuid &&
190 service->IsPrimary()) { 190 service->IsPrimary()) {
191 services.push_back(service); 191 services.push_back(service);
192 } 192 }
193 } 193 }
194 return services; 194 return services;
195 } 195 }
196 196
197 UMARequestDeviceOutcome OutcomeFromChooserEvent(BluetoothChooser::Event event) { 197 UMARequestDeviceOutcome OutcomeFromChooserEvent(BluetoothChooser::Event event) {
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 590
591 auto iter = pending_primary_services_requests_.find(device_address); 591 auto iter = pending_primary_services_requests_.find(device_address);
592 if (iter == pending_primary_services_requests_.end()) { 592 if (iter == pending_primary_services_requests_.end()) {
593 return; 593 return;
594 } 594 }
595 std::vector<PrimaryServicesRequest> requests; 595 std::vector<PrimaryServicesRequest> requests;
596 requests.swap(iter->second); 596 requests.swap(iter->second);
597 pending_primary_services_requests_.erase(iter); 597 pending_primary_services_requests_.erase(iter);
598 598
599 for (const PrimaryServicesRequest& request : requests) { 599 for (const PrimaryServicesRequest& request : requests) {
600 std::vector<BluetoothGattService*> services = 600 std::vector<BluetoothRemoteGattService*> services =
601 GetPrimaryServicesByUUID(device, request.service_uuid); 601 GetPrimaryServicesByUUID(device, request.service_uuid);
602 switch (request.func) { 602 switch (request.func) {
603 case PrimaryServicesRequest::GET_PRIMARY_SERVICE: 603 case PrimaryServicesRequest::GET_PRIMARY_SERVICE:
604 if (!services.empty()) { 604 if (!services.empty()) {
605 AddToServicesMapAndSendGetPrimaryServiceSuccess( 605 AddToServicesMapAndSendGetPrimaryServiceSuccess(
606 *services[0], request.thread_id, request.request_id); 606 *services[0], request.thread_id, request.request_id);
607 } else { 607 } else {
608 VLOG(1) << "No service found"; 608 VLOG(1) << "No service found";
609 RecordGetPrimaryServiceOutcome( 609 RecordGetPrimaryServiceOutcome(
610 UMAGetPrimaryServiceOutcome::NOT_FOUND); 610 UMAGetPrimaryServiceOutcome::NOT_FOUND);
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 // There are four possibilities here: 742 // There are four possibilities here:
743 // 1. Services not discovered and service present in |device|: Send back the 743 // 1. Services not discovered and service present in |device|: Send back the
744 // service to the renderer. 744 // service to the renderer.
745 // 2. Services discovered and service present in |device|: Send back the 745 // 2. Services discovered and service present in |device|: Send back the
746 // service to the renderer. 746 // service to the renderer.
747 // 3. Services discovered and service not present in |device|: Send back not 747 // 3. Services discovered and service not present in |device|: Send back not
748 // found error. 748 // found error.
749 // 4. Services not discovered and service not present in |device|: Add request 749 // 4. Services not discovered and service not present in |device|: Add request
750 // to map of pending getPrimaryService requests. 750 // to map of pending getPrimaryService requests.
751 751
752 std::vector<BluetoothGattService*> services = 752 std::vector<BluetoothRemoteGattService*> services =
753 GetPrimaryServicesByUUID(query_result.device, service_uuid); 753 GetPrimaryServicesByUUID(query_result.device, service_uuid);
754 754
755 // 1. & 2. 755 // 1. & 2.
756 if (!services.empty()) { 756 if (!services.empty()) {
757 VLOG(1) << "Service found in device."; 757 VLOG(1) << "Service found in device.";
758 const BluetoothGattService& service = *services[0]; 758 const BluetoothRemoteGattService& service = *services[0];
759 DCHECK(service.IsPrimary()); 759 DCHECK(service.IsPrimary());
760 AddToServicesMapAndSendGetPrimaryServiceSuccess(service, thread_id, 760 AddToServicesMapAndSendGetPrimaryServiceSuccess(service, thread_id,
761 request_id); 761 request_id);
762 return; 762 return;
763 } 763 }
764 764
765 // 3. 765 // 3.
766 if (query_result.device->IsGattServicesDiscoveryComplete()) { 766 if (query_result.device->IsGattServicesDiscoveryComplete()) {
767 VLOG(1) << "Service not found in device."; 767 VLOG(1) << "Service not found in device.";
768 RecordGetPrimaryServiceOutcome(UMAGetPrimaryServiceOutcome::NOT_FOUND); 768 RecordGetPrimaryServiceOutcome(UMAGetPrimaryServiceOutcome::NOT_FOUND);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 return; 806 return;
807 } 807 }
808 808
809 if (query_result.outcome != CacheQueryOutcome::SUCCESS) { 809 if (query_result.outcome != CacheQueryOutcome::SUCCESS) {
810 RecordGetCharacteristicOutcome(query_result.outcome); 810 RecordGetCharacteristicOutcome(query_result.outcome);
811 Send(new BluetoothMsg_GetCharacteristicError(thread_id, request_id, 811 Send(new BluetoothMsg_GetCharacteristicError(thread_id, request_id,
812 query_result.GetWebError())); 812 query_result.GetWebError()));
813 return; 813 return;
814 } 814 }
815 815
816 for (BluetoothGattCharacteristic* characteristic : 816 for (BluetoothRemoteGattCharacteristic* characteristic :
817 query_result.service->GetCharacteristics()) { 817 query_result.service->GetCharacteristics()) {
818 if (characteristic->GetUUID().canonical_value() == characteristic_uuid) { 818 if (characteristic->GetUUID().canonical_value() == characteristic_uuid) {
819 const std::string& characteristic_instance_id = 819 const std::string& characteristic_instance_id =
820 characteristic->GetIdentifier(); 820 characteristic->GetIdentifier();
821 821
822 auto insert_result = characteristic_to_service_.insert( 822 auto insert_result = characteristic_to_service_.insert(
823 make_pair(characteristic_instance_id, service_instance_id)); 823 make_pair(characteristic_instance_id, service_instance_id));
824 824
825 // If value is already in map, DCHECK it's valid. 825 // If value is already in map, DCHECK it's valid.
826 if (!insert_result.second) 826 if (!insert_result.second)
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
873 RecordGetCharacteristicsOutcome(query_result.outcome); 873 RecordGetCharacteristicsOutcome(query_result.outcome);
874 Send(new BluetoothMsg_GetCharacteristicsError(thread_id, request_id, 874 Send(new BluetoothMsg_GetCharacteristicsError(thread_id, request_id,
875 query_result.GetWebError())); 875 query_result.GetWebError()));
876 return; 876 return;
877 } 877 }
878 878
879 std::vector<std::string> characteristics_instance_ids; 879 std::vector<std::string> characteristics_instance_ids;
880 std::vector<std::string> characteristics_uuids; 880 std::vector<std::string> characteristics_uuids;
881 std::vector<uint32_t> characteristics_properties; 881 std::vector<uint32_t> characteristics_properties;
882 882
883 for (BluetoothGattCharacteristic* characteristic : 883 for (BluetoothRemoteGattCharacteristic* characteristic :
884 query_result.service->GetCharacteristics()) { 884 query_result.service->GetCharacteristics()) {
885 if (!BluetoothBlacklist::Get().IsExcluded(characteristic->GetUUID()) && 885 if (!BluetoothBlacklist::Get().IsExcluded(characteristic->GetUUID()) &&
886 (characteristics_uuid.empty() || 886 (characteristics_uuid.empty() ||
887 characteristics_uuid == characteristic->GetUUID().canonical_value())) { 887 characteristics_uuid == characteristic->GetUUID().canonical_value())) {
888 const std::string& characteristic_instance_id = 888 const std::string& characteristic_instance_id =
889 characteristic->GetIdentifier(); 889 characteristic->GetIdentifier();
890 890
891 characteristics_instance_ids.push_back(characteristic_instance_id); 891 characteristics_instance_ids.push_back(characteristic_instance_id);
892 characteristics_uuids.push_back( 892 characteristics_uuids.push_back(
893 characteristic->GetUUID().canonical_value()); 893 characteristic->GetUUID().canonical_value());
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 // There was an error creating the ATT Bearer so we reject with 1279 // There was an error creating the ATT Bearer so we reject with
1280 // NetworkError. 1280 // NetworkError.
1281 // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothdevice-con nectgatt 1281 // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothdevice-con nectgatt
1282 RecordConnectGATTTimeFailed(base::TimeTicks::Now() - start_time); 1282 RecordConnectGATTTimeFailed(base::TimeTicks::Now() - start_time);
1283 // RecordConnectGATTOutcome is called by TranslateConnectError. 1283 // RecordConnectGATTOutcome is called by TranslateConnectError.
1284 Send(new BluetoothMsg_GATTServerConnectError( 1284 Send(new BluetoothMsg_GATTServerConnectError(
1285 thread_id, request_id, TranslateConnectError(error_code))); 1285 thread_id, request_id, TranslateConnectError(error_code)));
1286 } 1286 }
1287 1287
1288 void BluetoothDispatcherHost::AddToServicesMapAndSendGetPrimaryServiceSuccess( 1288 void BluetoothDispatcherHost::AddToServicesMapAndSendGetPrimaryServiceSuccess(
1289 const device::BluetoothGattService& service, 1289 const device::BluetoothRemoteGattService& service,
1290 int thread_id, 1290 int thread_id,
1291 int request_id) { 1291 int request_id) {
1292 const std::string& service_identifier = service.GetIdentifier(); 1292 const std::string& service_identifier = service.GetIdentifier();
1293 const std::string& device_address = service.GetDevice()->GetAddress(); 1293 const std::string& device_address = service.GetDevice()->GetAddress();
1294 auto insert_result = 1294 auto insert_result =
1295 service_to_device_.insert(make_pair(service_identifier, device_address)); 1295 service_to_device_.insert(make_pair(service_identifier, device_address));
1296 1296
1297 // If a value is already in map, DCHECK it's valid. 1297 // If a value is already in map, DCHECK it's valid.
1298 if (!insert_result.second) 1298 if (!insert_result.second)
1299 DCHECK_EQ(insert_result.first->second, device_address); 1299 DCHECK_EQ(insert_result.first->second, device_address);
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1418 const PrimaryServicesRequest& request) { 1418 const PrimaryServicesRequest& request) {
1419 pending_primary_services_requests_[device_address].push_back(request); 1419 pending_primary_services_requests_[device_address].push_back(request);
1420 } 1420 }
1421 1421
1422 url::Origin BluetoothDispatcherHost::GetOrigin(int frame_routing_id) { 1422 url::Origin BluetoothDispatcherHost::GetOrigin(int frame_routing_id) {
1423 return RenderFrameHostImpl::FromID(render_process_id_, frame_routing_id) 1423 return RenderFrameHostImpl::FromID(render_process_id_, frame_routing_id)
1424 ->GetLastCommittedOrigin(); 1424 ->GetLastCommittedOrigin();
1425 } 1425 }
1426 1426
1427 } // namespace content 1427 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/bluetooth/bluetooth_dispatcher_host.h ('k') | content/browser/bluetooth/web_bluetooth_service_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698