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

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

Issue 2735773002: work in progress
Patch Set: Created 3 years, 9 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 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 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 std::unique_ptr<device::BluetoothDiscoverySession> discovery_session) { 230 std::unique_ptr<device::BluetoothDiscoverySession> discovery_session) {
231 // Nothing goes wrong if the discovery session fails to stop, and we don't 231 // Nothing goes wrong if the discovery session fails to stop, and we don't
232 // need to wait for it before letting the user's script proceed, so we ignore 232 // need to wait for it before letting the user's script proceed, so we ignore
233 // the results here. 233 // the results here.
234 discovery_session->Stop(base::Bind(&base::DoNothing), 234 discovery_session->Stop(base::Bind(&base::DoNothing),
235 base::Bind(&base::DoNothing)); 235 base::Bind(&base::DoNothing));
236 } 236 }
237 237
238 UMARequestDeviceOutcome OutcomeFromChooserEvent(BluetoothChooser::Event event) { 238 UMARequestDeviceOutcome OutcomeFromChooserEvent(BluetoothChooser::Event event) {
239 switch (event) { 239 switch (event) {
240 case BluetoothChooser::Event::ADAPTER_DISCOVERING_CHANGED:
241 return UMARequestDeviceOutcome::BLUETOOTH_CHOOSER_CANCELLED;
240 case BluetoothChooser::Event::DENIED_PERMISSION: 242 case BluetoothChooser::Event::DENIED_PERMISSION:
241 return UMARequestDeviceOutcome::BLUETOOTH_CHOOSER_DENIED_PERMISSION; 243 return UMARequestDeviceOutcome::BLUETOOTH_CHOOSER_DENIED_PERMISSION;
242 case BluetoothChooser::Event::CANCELLED: 244 case BluetoothChooser::Event::CANCELLED:
243 return UMARequestDeviceOutcome::BLUETOOTH_CHOOSER_CANCELLED; 245 return UMARequestDeviceOutcome::BLUETOOTH_CHOOSER_CANCELLED;
244 case BluetoothChooser::Event::SHOW_OVERVIEW_HELP: 246 case BluetoothChooser::Event::SHOW_OVERVIEW_HELP:
245 return UMARequestDeviceOutcome::BLUETOOTH_OVERVIEW_HELP_LINK_PRESSED; 247 return UMARequestDeviceOutcome::BLUETOOTH_OVERVIEW_HELP_LINK_PRESSED;
246 case BluetoothChooser::Event::SHOW_ADAPTER_OFF_HELP: 248 case BluetoothChooser::Event::SHOW_ADAPTER_OFF_HELP:
247 return UMARequestDeviceOutcome::ADAPTER_OFF_HELP_LINK_PRESSED; 249 return UMARequestDeviceOutcome::ADAPTER_OFF_HELP_LINK_PRESSED;
248 case BluetoothChooser::Event::SHOW_NEED_LOCATION_HELP: 250 case BluetoothChooser::Event::SHOW_NEED_LOCATION_HELP:
249 return UMARequestDeviceOutcome::NEED_LOCATION_HELP_LINK_PRESSED; 251 return UMARequestDeviceOutcome::NEED_LOCATION_HELP_LINK_PRESSED;
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 OnBluetoothChooserEvent(BluetoothChooser::Event::RESCAN, 459 OnBluetoothChooserEvent(BluetoothChooser::Event::RESCAN,
458 "" /* device_address */); 460 "" /* device_address */);
459 } 461 }
460 } 462 }
461 463
462 if (!powered) { 464 if (!powered) {
463 discovery_session_timer_.Stop(); 465 discovery_session_timer_.Stop();
464 } 466 }
465 } 467 }
466 468
469 void BluetoothDeviceChooserController::AdapterDiscoveringChanged(
470 bool discovering) {
471 if (!discovering && IsDiscoverySessionActive())
472 StopDeviceDiscovery();
473 }
474
467 int BluetoothDeviceChooserController::CalculateSignalStrengthLevel( 475 int BluetoothDeviceChooserController::CalculateSignalStrengthLevel(
468 int8_t rssi) { 476 int8_t rssi) {
469 RecordRSSISignalStrength(rssi); 477 RecordRSSISignalStrength(rssi);
470 478
471 if (rssi < k20thPercentileRSSI) { 479 if (rssi < k20thPercentileRSSI) {
472 RecordRSSISignalStrengthLevel(content::UMARSSISignalStrengthLevel::LEVEL_0); 480 RecordRSSISignalStrengthLevel(content::UMARSSISignalStrengthLevel::LEVEL_0);
473 return 0; 481 return 0;
474 } else if (rssi < k40thPercentileRSSI) { 482 } else if (rssi < k40thPercentileRSSI) {
475 RecordRSSISignalStrengthLevel(content::UMARSSISignalStrengthLevel::LEVEL_1); 483 RecordRSSISignalStrengthLevel(content::UMARSSISignalStrengthLevel::LEVEL_1);
476 return 1; 484 return 1;
(...skipping 17 matching lines...) Expand all
494 for (const device::BluetoothDevice* device : adapter_->GetDevices()) { 502 for (const device::BluetoothDevice* device : adapter_->GetDevices()) {
495 if (device->IsGattConnected()) { 503 if (device->IsGattConnected()) {
496 AddFilteredDevice(*device); 504 AddFilteredDevice(*device);
497 } 505 }
498 } 506 }
499 } 507 }
500 508
501 void BluetoothDeviceChooserController::StartDeviceDiscovery() { 509 void BluetoothDeviceChooserController::StartDeviceDiscovery() {
502 DCHECK_CURRENTLY_ON(BrowserThread::UI); 510 DCHECK_CURRENTLY_ON(BrowserThread::UI);
503 511
504 if (discovery_session_.get() && discovery_session_->IsActive()) { 512 if (IsDiscoverySessionActive()) {
505 // Already running; just increase the timeout. 513 // Already running; just increase the timeout.
506 discovery_session_timer_.Reset(); 514 discovery_session_timer_.Reset();
507 return; 515 return;
508 } 516 }
509 517
510 scanning_start_time_ = base::TimeTicks::Now(); 518 scanning_start_time_ = base::TimeTicks::Now();
511 519
512 chooser_->ShowDiscoveryState(BluetoothChooser::DiscoveryState::DISCOVERING); 520 chooser_->ShowDiscoveryState(BluetoothChooser::DiscoveryState::DISCOVERING);
513 adapter_->StartDiscoverySessionWithFilter( 521 adapter_->StartDiscoverySessionWithFilter(
514 ComputeScanFilter(options_->filters), 522 ComputeScanFilter(options_->filters),
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 DCHECK(chooser_); 577 DCHECK(chooser_);
570 StartDeviceDiscovery(); 578 StartDeviceDiscovery();
571 // No need to close the chooser so we return. 579 // No need to close the chooser so we return.
572 return; 580 return;
573 case BluetoothChooser::Event::DENIED_PERMISSION: 581 case BluetoothChooser::Event::DENIED_PERMISSION:
574 RecordRequestDeviceOutcome(OutcomeFromChooserEvent(event)); 582 RecordRequestDeviceOutcome(OutcomeFromChooserEvent(event));
575 PostErrorCallback(blink::mojom::WebBluetoothResult:: 583 PostErrorCallback(blink::mojom::WebBluetoothResult::
576 CHOOSER_NOT_SHOWN_USER_DENIED_PERMISSION_TO_SCAN); 584 CHOOSER_NOT_SHOWN_USER_DENIED_PERMISSION_TO_SCAN);
577 break; 585 break;
578 case BluetoothChooser::Event::CANCELLED: 586 case BluetoothChooser::Event::CANCELLED:
587 LOG(ERROR) << "[DJKim] "
588 "BluetoothDeviceChooserController::OnBluetoothChooserEvent "
589 ">> CANCELLED";
579 RecordRequestDeviceOutcome(OutcomeFromChooserEvent(event)); 590 RecordRequestDeviceOutcome(OutcomeFromChooserEvent(event));
580 PostErrorCallback(blink::mojom::WebBluetoothResult::CHOOSER_CANCELLED); 591 PostErrorCallback(blink::mojom::WebBluetoothResult::CHOOSER_CANCELLED);
581 break; 592 break;
582 case BluetoothChooser::Event::SHOW_OVERVIEW_HELP: 593 case BluetoothChooser::Event::SHOW_OVERVIEW_HELP:
583 DVLOG(1) << "Overview Help link pressed."; 594 DVLOG(1) << "Overview Help link pressed.";
584 RecordRequestDeviceOutcome(OutcomeFromChooserEvent(event)); 595 RecordRequestDeviceOutcome(OutcomeFromChooserEvent(event));
585 PostErrorCallback(blink::mojom::WebBluetoothResult::CHOOSER_CANCELLED); 596 PostErrorCallback(blink::mojom::WebBluetoothResult::CHOOSER_CANCELLED);
586 break; 597 break;
587 case BluetoothChooser::Event::SHOW_ADAPTER_OFF_HELP: 598 case BluetoothChooser::Event::SHOW_ADAPTER_OFF_HELP:
588 DVLOG(1) << "Adapter Off Help link pressed."; 599 DVLOG(1) << "Adapter Off Help link pressed.";
589 RecordRequestDeviceOutcome(OutcomeFromChooserEvent(event)); 600 RecordRequestDeviceOutcome(OutcomeFromChooserEvent(event));
590 PostErrorCallback(blink::mojom::WebBluetoothResult::CHOOSER_CANCELLED); 601 PostErrorCallback(blink::mojom::WebBluetoothResult::CHOOSER_CANCELLED);
591 break; 602 break;
592 case BluetoothChooser::Event::SHOW_NEED_LOCATION_HELP: 603 case BluetoothChooser::Event::SHOW_NEED_LOCATION_HELP:
593 DVLOG(1) << "Need Location Help link pressed."; 604 DVLOG(1) << "Need Location Help link pressed.";
594 RecordRequestDeviceOutcome(OutcomeFromChooserEvent(event)); 605 RecordRequestDeviceOutcome(OutcomeFromChooserEvent(event));
595 PostErrorCallback(blink::mojom::WebBluetoothResult::CHOOSER_CANCELLED); 606 PostErrorCallback(blink::mojom::WebBluetoothResult::CHOOSER_CANCELLED);
596 break; 607 break;
597 case BluetoothChooser::Event::SELECTED: 608 case BluetoothChooser::Event::SELECTED:
598 RecordNumOfDevices(options_->accept_all_devices, device_ids_.size()); 609 RecordNumOfDevices(options_->accept_all_devices, device_ids_.size());
599 // RecordRequestDeviceOutcome is called in the callback, because the 610 // RecordRequestDeviceOutcome is called in the callback, because the
600 // device may have vanished. 611 // device may have vanished.
601 PostSuccessCallback(device_address); 612 PostSuccessCallback(device_address);
602 break; 613 break;
614 case BluetoothChooser::Event::ADAPTER_DISCOVERING_CHANGED:
615 RecordRequestDeviceOutcome(OutcomeFromChooserEvent(event));
616 PostErrorCallback(blink::mojom::WebBluetoothResult::CHOOSER_CANCELLED);
617 break;
603 } 618 }
604 // Close chooser. 619 // Close chooser.
605 chooser_.reset(); 620 chooser_.reset();
606 } 621 }
607 622
608 void BluetoothDeviceChooserController::PostSuccessCallback( 623 void BluetoothDeviceChooserController::PostSuccessCallback(
609 const std::string& device_address) { 624 const std::string& device_address) {
610 if (!base::ThreadTaskRunnerHandle::Get()->PostTask( 625 if (!base::ThreadTaskRunnerHandle::Get()->PostTask(
611 FROM_HERE, 626 FROM_HERE,
612 base::Bind(success_callback_, base::Passed(std::move(options_)), 627 base::Bind(success_callback_, base::Passed(std::move(options_)),
613 device_address))) { 628 device_address))) {
614 LOG(WARNING) << "No TaskRunner."; 629 LOG(WARNING) << "No TaskRunner.";
615 } 630 }
616 } 631 }
617 632
618 void BluetoothDeviceChooserController::PostErrorCallback( 633 void BluetoothDeviceChooserController::PostErrorCallback(
619 blink::mojom::WebBluetoothResult error) { 634 blink::mojom::WebBluetoothResult error) {
620 if (!base::ThreadTaskRunnerHandle::Get()->PostTask( 635 if (!base::ThreadTaskRunnerHandle::Get()->PostTask(
621 FROM_HERE, base::Bind(error_callback_, error))) { 636 FROM_HERE, base::Bind(error_callback_, error))) {
622 LOG(WARNING) << "No TaskRunner."; 637 LOG(WARNING) << "No TaskRunner.";
623 } 638 }
624 } 639 }
625 640
641 bool BluetoothDeviceChooserController::IsDiscoverySessionActive() {
642 if (discovery_session_ && discovery_session_->IsActive())
643 return true;
644
645 return false;
646 }
647
626 } // namespace content 648 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698