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

Unified Diff: chromeos/components/tether/tether_connector.cc

Issue 2949343002: Tether: record each type of host connection result. (Closed)
Patch Set: Fix crash. Created 3 years, 5 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: 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
« no previous file with comments | « chromeos/components/tether/tether_connector.h ('k') | chromeos/components/tether/tether_connector_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698