Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include "content/browser/bluetooth/bluetooth_device_chooser_controller.h" | 5 #include "content/browser/bluetooth/bluetooth_device_chooser_controller.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <unordered_set> | 9 #include <unordered_set> |
| 10 | 10 |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 191 } | 191 } |
| 192 NOTREACHED(); | 192 NOTREACHED(); |
| 193 return UMARequestDeviceOutcome::SUCCESS; | 193 return UMARequestDeviceOutcome::SUCCESS; |
| 194 } | 194 } |
| 195 | 195 |
| 196 } // namespace | 196 } // namespace |
| 197 | 197 |
| 198 BluetoothDeviceChooserController::BluetoothDeviceChooserController( | 198 BluetoothDeviceChooserController::BluetoothDeviceChooserController( |
| 199 WebBluetoothServiceImpl* web_bluetooth_service, | 199 WebBluetoothServiceImpl* web_bluetooth_service, |
| 200 RenderFrameHost* render_frame_host, | 200 RenderFrameHost* render_frame_host, |
| 201 device::BluetoothAdapter* adapter) | 201 device::BluetoothAdapter* adapter, |
| 202 const BluetoothAllowedDevicesMap& bluetooth_allowed_devices_map, | |
| 203 const url::Origin& origin) | |
| 202 : adapter_(adapter), | 204 : adapter_(adapter), |
| 203 web_bluetooth_service_(web_bluetooth_service), | 205 web_bluetooth_service_(web_bluetooth_service), |
| 204 render_frame_host_(render_frame_host), | 206 render_frame_host_(render_frame_host), |
| 205 web_contents_(WebContents::FromRenderFrameHost(render_frame_host_)), | 207 web_contents_(WebContents::FromRenderFrameHost(render_frame_host_)), |
| 206 discovery_session_timer_( | 208 discovery_session_timer_( |
| 207 FROM_HERE, | 209 FROM_HERE, |
| 208 // TODO(jyasskin): Add a way for tests to control the dialog | 210 // TODO(jyasskin): Add a way for tests to control the dialog |
| 209 // directly, and change this to a reasonable discovery timeout. | 211 // directly, and change this to a reasonable discovery timeout. |
| 210 base::TimeDelta::FromSeconds( | 212 base::TimeDelta::FromSeconds( |
| 211 use_test_scan_duration_ ? kTestScanDuration : kScanDuration), | 213 use_test_scan_duration_ ? kTestScanDuration : kScanDuration), |
| 212 base::Bind(&BluetoothDeviceChooserController::StopDeviceDiscovery, | 214 base::Bind(&BluetoothDeviceChooserController::StopDeviceDiscovery, |
| 213 // base::Timer guarantees it won't call back after its | 215 // base::Timer guarantees it won't call back after its |
| 214 // destructor starts. | 216 // destructor starts. |
| 215 base::Unretained(this)), | 217 base::Unretained(this)), |
| 216 /*is_repeating=*/false), | 218 /*is_repeating=*/false), |
| 219 bluetooth_allowed_devices_map_(bluetooth_allowed_devices_map), | |
| 220 origin_(origin), | |
| 217 weak_ptr_factory_(this) { | 221 weak_ptr_factory_(this) { |
| 218 CHECK(adapter_); | 222 CHECK(adapter_); |
| 219 } | 223 } |
| 220 | 224 |
| 221 BluetoothDeviceChooserController::~BluetoothDeviceChooserController() { | 225 BluetoothDeviceChooserController::~BluetoothDeviceChooserController() { |
| 222 if (chooser_) { | 226 if (chooser_) { |
| 223 DCHECK(!error_callback_.is_null()); | 227 DCHECK(!error_callback_.is_null()); |
| 224 error_callback_.Run(blink::mojom::WebBluetoothError::CHOOSER_CANCELLED); | 228 error_callback_.Run(blink::mojom::WebBluetoothError::CHOOSER_CANCELLED); |
| 225 } | 229 } |
| 226 } | 230 } |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 250 // Check blacklist to reject invalid filters and adjust optional_services. | 254 // Check blacklist to reject invalid filters and adjust optional_services. |
| 251 if (BluetoothBlacklist::Get().IsExcluded(options_->filters)) { | 255 if (BluetoothBlacklist::Get().IsExcluded(options_->filters)) { |
| 252 RecordRequestDeviceOutcome( | 256 RecordRequestDeviceOutcome( |
| 253 UMARequestDeviceOutcome::BLACKLISTED_SERVICE_IN_FILTER); | 257 UMARequestDeviceOutcome::BLACKLISTED_SERVICE_IN_FILTER); |
| 254 PostErrorCallback( | 258 PostErrorCallback( |
| 255 blink::mojom::WebBluetoothError::REQUEST_DEVICE_WITH_BLACKLISTED_UUID); | 259 blink::mojom::WebBluetoothError::REQUEST_DEVICE_WITH_BLACKLISTED_UUID); |
| 256 return; | 260 return; |
| 257 } | 261 } |
| 258 BluetoothBlacklist::Get().RemoveExcludedUUIDs(options_.get()); | 262 BluetoothBlacklist::Get().RemoveExcludedUUIDs(options_.get()); |
| 259 | 263 |
| 260 const url::Origin requesting_origin = | 264 const url::Origin requesting_origin = |
|
Jeffrey Yasskin
2016/09/14 20:08:36
I think we're assuming that this origin matches th
juncai
2016/09/14 23:13:07
Added WebBluetoothServiceImpl::IsDevicePaired(), s
Jeffrey Yasskin
2016/09/14 23:52:03
Great.
| |
| 261 render_frame_host_->GetLastCommittedOrigin(); | 265 render_frame_host_->GetLastCommittedOrigin(); |
| 262 const url::Origin embedding_origin = | 266 const url::Origin embedding_origin = |
| 263 web_contents_->GetMainFrame()->GetLastCommittedOrigin(); | 267 web_contents_->GetMainFrame()->GetLastCommittedOrigin(); |
| 264 | 268 |
| 265 // TODO(crbug.com/518042): Enforce correctly-delegated permissions instead of | 269 // TODO(crbug.com/518042): Enforce correctly-delegated permissions instead of |
| 266 // matching origins. When relaxing this, take care to handle non-sandboxed | 270 // matching origins. When relaxing this, take care to handle non-sandboxed |
| 267 // unique origins. | 271 // unique origins. |
| 268 if (!embedding_origin.IsSameOriginWith(requesting_origin)) { | 272 if (!embedding_origin.IsSameOriginWith(requesting_origin)) { |
| 269 PostErrorCallback(blink::mojom::WebBluetoothError:: | 273 PostErrorCallback(blink::mojom::WebBluetoothError:: |
| 270 REQUEST_DEVICE_FROM_CROSS_ORIGIN_IFRAME); | 274 REQUEST_DEVICE_FROM_CROSS_ORIGIN_IFRAME); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 343 return; | 347 return; |
| 344 } | 348 } |
| 345 | 349 |
| 346 StartDeviceDiscovery(); | 350 StartDeviceDiscovery(); |
| 347 } | 351 } |
| 348 | 352 |
| 349 void BluetoothDeviceChooserController::AddFilteredDevice( | 353 void BluetoothDeviceChooserController::AddFilteredDevice( |
| 350 const device::BluetoothDevice& device) { | 354 const device::BluetoothDevice& device) { |
| 351 if (chooser_.get() && MatchesFilters(device, options_->filters)) { | 355 if (chooser_.get() && MatchesFilters(device, options_->filters)) { |
| 352 base::Optional<int8_t> rssi = device.GetInquiryRSSI(); | 356 base::Optional<int8_t> rssi = device.GetInquiryRSSI(); |
| 357 bool is_paired = bluetooth_allowed_devices_map_.GetDeviceId( | |
| 358 origin_, device.GetAddress()) != nullptr; | |
| 353 chooser_->AddOrUpdateDevice( | 359 chooser_->AddOrUpdateDevice( |
| 354 device.GetAddress(), !!device.GetName() /* should_update_name */, | 360 device.GetAddress(), !!device.GetName() /* should_update_name */, |
| 355 device.GetNameForDisplay(), | 361 device.GetNameForDisplay(), device.IsGattConnected(), is_paired, |
| 356 // TODO(http://crbug.com/543466): Show connection and paired status. | |
| 357 false /* is_gatt_connected */, false /* is_paired */, | |
| 358 rssi ? CalculateSignalStrengthLevel(rssi.value()) : -1); | 362 rssi ? CalculateSignalStrengthLevel(rssi.value()) : -1); |
| 359 } | 363 } |
| 360 } | 364 } |
| 361 | 365 |
| 362 void BluetoothDeviceChooserController::AdapterPoweredChanged(bool powered) { | 366 void BluetoothDeviceChooserController::AdapterPoweredChanged(bool powered) { |
| 363 if (!powered && discovery_session_.get()) { | 367 if (!powered && discovery_session_.get()) { |
| 364 StopDiscoverySession(std::move(discovery_session_)); | 368 StopDiscoverySession(std::move(discovery_session_)); |
| 365 } | 369 } |
| 366 | 370 |
| 367 if (chooser_.get()) { | 371 if (chooser_.get()) { |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 509 | 513 |
| 510 void BluetoothDeviceChooserController::PostErrorCallback( | 514 void BluetoothDeviceChooserController::PostErrorCallback( |
| 511 blink::mojom::WebBluetoothError error) { | 515 blink::mojom::WebBluetoothError error) { |
| 512 if (!base::ThreadTaskRunnerHandle::Get()->PostTask( | 516 if (!base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 513 FROM_HERE, base::Bind(error_callback_, error))) { | 517 FROM_HERE, base::Bind(error_callback_, error))) { |
| 514 LOG(WARNING) << "No TaskRunner."; | 518 LOG(WARNING) << "No TaskRunner."; |
| 515 } | 519 } |
| 516 } | 520 } |
| 517 | 521 |
| 518 } // namespace content | 522 } // namespace content |
| OLD | NEW |