| Index: chromeos/components/tether/tether_connector.cc
|
| diff --git a/chromeos/components/tether/tether_connector.cc b/chromeos/components/tether/tether_connector.cc
|
| index ee34c45041305f63f17e5e79e9226f1312daf6b7..fe64790865dc7e95ad81a2fd7aa0c54ed86e0d35 100644
|
| --- a/chromeos/components/tether/tether_connector.cc
|
| +++ b/chromeos/components/tether/tether_connector.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/bind.h"
|
| #include "chromeos/components/tether/active_host.h"
|
| #include "chromeos/components/tether/device_id_tether_network_guid_map.h"
|
| +#include "chromeos/components/tether/host_connection_metrics_logger.h"
|
| #include "chromeos/components/tether/host_scan_cache.h"
|
| #include "chromeos/components/tether/notification_presenter.h"
|
| #include "chromeos/components/tether/tether_host_fetcher.h"
|
| @@ -29,7 +30,8 @@ TetherConnector::TetherConnector(
|
| TetherHostResponseRecorder* tether_host_response_recorder,
|
| DeviceIdTetherNetworkGuidMap* device_id_tether_network_guid_map,
|
| HostScanCache* host_scan_cache,
|
| - NotificationPresenter* notification_presenter)
|
| + NotificationPresenter* notification_presenter,
|
| + HostConnectionMetricsLogger* host_connection_metrics_logger)
|
| : network_state_handler_(network_state_handler),
|
| wifi_hotspot_connector_(wifi_hotspot_connector),
|
| active_host_(active_host),
|
| @@ -39,6 +41,7 @@ TetherConnector::TetherConnector(
|
| device_id_tether_network_guid_map_(device_id_tether_network_guid_map),
|
| host_scan_cache_(host_scan_cache),
|
| notification_presenter_(notification_presenter),
|
| + host_connection_metrics_logger_(host_connection_metrics_logger),
|
| weak_ptr_factory_(this) {}
|
|
|
| TetherConnector::~TetherConnector() {
|
| @@ -119,7 +122,10 @@ bool TetherConnector::CancelConnectionAttempt(
|
| connect_tethering_operation_.reset();
|
| }
|
|
|
| - SetConnectionFailed(NetworkConnectionHandler::kErrorConnectCanceled);
|
| + SetConnectionFailed(
|
| + NetworkConnectionHandler::kErrorConnectCanceled,
|
| + HostConnectionMetricsLogger::ConnectionToHostResult::
|
| + CONNECTION_RESULT_FAILURE_CLIENT_CONNECTION_CANCELED_BY_USER);
|
| return true;
|
| }
|
|
|
| @@ -161,7 +167,8 @@ void TetherConnector::OnSuccessfulConnectTetheringResponse(
|
| void TetherConnector::OnConnectTetheringFailure(
|
| const cryptauth::RemoteDevice& remote_device,
|
| ConnectTetheringResponse_ResponseCode error_code) {
|
| - if (device_id_pending_connection_ != remote_device.GetDeviceId()) {
|
| + std::string device_id_copy = remote_device.GetDeviceId();
|
| + if (device_id_pending_connection_ != device_id_copy) {
|
| // If the failure was part of a previous attempt for a different device,
|
| // ignore it.
|
| PA_LOG(INFO) << "Received failed ConnectTetheringResponse from device with "
|
| @@ -176,7 +183,9 @@ void TetherConnector::OnConnectTetheringFailure(
|
|
|
| connect_tethering_operation_->RemoveObserver(this);
|
| connect_tethering_operation_.reset();
|
| - SetConnectionFailed(NetworkConnectionHandler::kErrorConnectFailed);
|
| + SetConnectionFailed(
|
| + NetworkConnectionHandler::kErrorConnectFailed,
|
| + GetConnectionToHostResultFromErrorCode(device_id_copy, error_code));
|
| }
|
|
|
| void TetherConnector::OnTetherHostToConnectFetched(
|
| @@ -193,13 +202,16 @@ void TetherConnector::OnTetherHostToConnectFetched(
|
| PA_LOG(ERROR) << "Could not fetch tether host with device ID "
|
| << cryptauth::RemoteDevice::TruncateDeviceIdForLogs(device_id)
|
| << ". Cannot connect.";
|
| - SetConnectionFailed(NetworkConnectionHandler::kErrorConnectFailed);
|
| + SetConnectionFailed(
|
| + NetworkConnectionHandler::kErrorConnectFailed,
|
| + HostConnectionMetricsLogger::ConnectionToHostResult::
|
| + CONNECTION_RESULT_FAILURE_CLIENT_CONNECTION_INTERNAL_ERROR);
|
| return;
|
| }
|
|
|
| DCHECK(device_id == tether_host_to_connect->GetDeviceId());
|
|
|
| - const std::string& tether_network_guid =
|
| + const std::string tether_network_guid =
|
| device_id_tether_network_guid_map_->GetTetherNetworkGuidForDeviceId(
|
| device_id);
|
| connect_tethering_operation_ =
|
| @@ -211,7 +223,10 @@ void TetherConnector::OnTetherHostToConnectFetched(
|
| connect_tethering_operation_->Initialize();
|
| }
|
|
|
| -void TetherConnector::SetConnectionFailed(const std::string& error_name) {
|
| +void TetherConnector::SetConnectionFailed(
|
| + const std::string& error_name,
|
| + HostConnectionMetricsLogger::ConnectionToHostResult
|
| + connection_to_host_result) {
|
| DCHECK(!device_id_pending_connection_.empty());
|
| DCHECK(!error_callback_.is_null());
|
|
|
| @@ -226,6 +241,9 @@ void TetherConnector::SetConnectionFailed(const std::string& error_name) {
|
|
|
| error_callback.Run(error_name);
|
| active_host_->SetActiveHostDisconnected();
|
| +
|
| + host_connection_metrics_logger_->RecordConnectionToHostResult(
|
| + connection_to_host_result);
|
| }
|
|
|
| void TetherConnector::SetConnectionSucceeded(
|
| @@ -235,6 +253,10 @@ void TetherConnector::SetConnectionSucceeded(
|
| DCHECK(device_id_pending_connection_ == device_id);
|
| DCHECK(!success_callback_.is_null());
|
|
|
| + host_connection_metrics_logger_->RecordConnectionToHostResult(
|
| + HostConnectionMetricsLogger::ConnectionToHostResult::
|
| + CONNECTION_RESULT_SUCCESS);
|
| +
|
| notification_presenter_->RemoveSetupRequiredNotification();
|
|
|
| // Save a copy of the callback before resetting it below.
|
| @@ -273,13 +295,46 @@ void TetherConnector::OnWifiConnection(const std::string& device_id,
|
| << cryptauth::RemoteDevice::TruncateDeviceIdForLogs(device_id)
|
| << ".";
|
|
|
| - SetConnectionFailed(NetworkConnectionHandler::kErrorConnectFailed);
|
| + SetConnectionFailed(
|
| + NetworkConnectionHandler::kErrorConnectFailed,
|
| + HostConnectionMetricsLogger::ConnectionToHostResult::
|
| + CONNECTION_RESULT_FAILURE_CLIENT_CONNECTION_TIMEOUT);
|
| return;
|
| }
|
|
|
| SetConnectionSucceeded(device_id, wifi_network_guid);
|
| }
|
|
|
| +HostConnectionMetricsLogger::ConnectionToHostResult
|
| +TetherConnector::GetConnectionToHostResultFromErrorCode(
|
| + const std::string& device_id,
|
| + ConnectTetheringResponse_ResponseCode error_code) {
|
| + if (error_code ==
|
| + ConnectTetheringResponse_ResponseCode::
|
| + ConnectTetheringResponse_ResponseCode_PROVISIONING_FAILED) {
|
| + return HostConnectionMetricsLogger::ConnectionToHostResult::
|
| + CONNECTION_RESULT_PROVISIONING_FAILED;
|
| + }
|
| +
|
| + if (error_code ==
|
| + ConnectTetheringResponse_ResponseCode::
|
| + ConnectTetheringResponse_ResponseCode_TETHERING_TIMEOUT) {
|
| + const std::string tether_network_guid =
|
| + device_id_tether_network_guid_map_->GetTetherNetworkGuidForDeviceId(
|
| + device_id);
|
| + if (host_scan_cache_->DoesHostRequireSetup(tether_network_guid)) {
|
| + return HostConnectionMetricsLogger::ConnectionToHostResult::
|
| + CONNECTION_RESULT_FAILURE_TETHERING_TIMED_OUT_FIRST_TIME_SETUP_WAS_REQUIRED;
|
| + }
|
| +
|
| + return HostConnectionMetricsLogger::ConnectionToHostResult::
|
| + CONNECTION_RESULT_FAILURE_TETHERING_TIMED_OUT_FIRST_TIME_SETUP_WAS_NOT_REQUIRED;
|
| + }
|
| +
|
| + return HostConnectionMetricsLogger::ConnectionToHostResult::
|
| + CONNECTION_RESULT_FAILURE_UNKNOWN_ERROR;
|
| +}
|
| +
|
| } // namespace tether
|
|
|
| } // namespace chromeos
|
|
|