Commit 5897626f authored by Swapnil's avatar Swapnil Committed by Commit Bot

Add failure reason to INSTALLATION_FAILED event

We have several failure reasons that specify why the extension failed
to install. We want to add failure reason to the existing event type
INSTALLATION_FAILED for the event based reporting for force
installed extensions.

Bug: 1106343
Change-Id: I7c0e8a098c468904189b47c101036fd59279bca9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2302033
Commit-Queue: Swapnil Gupta <swapnilgupta@google.com>
Reviewed-by: default avatarSergey Poromov <poromov@chromium.org>
Reviewed-by: default avatarOleg Davydov <burunduk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#791519}
parent f48a33c5
......@@ -45,6 +45,85 @@ bool GetOnlineState() {
return false;
}
// Helper method to convert InstallStageTracker::FailureReason to the failure
// reason proto.
em::ExtensionInstallReportLogEvent_FailureReason ConvertFailureReasonToProto(
extensions::InstallStageTracker::FailureReason failure_reason) {
switch (failure_reason) {
case extensions::InstallStageTracker::FailureReason::UNKNOWN:
return em::ExtensionInstallReportLogEvent::UNKNOWN;
case extensions::InstallStageTracker::FailureReason::INVALID_ID:
return em::ExtensionInstallReportLogEvent::INVALID_ID;
case extensions::InstallStageTracker::FailureReason::
MALFORMED_EXTENSION_SETTINGS:
return em::ExtensionInstallReportLogEvent::MALFORMED_EXTENSION_SETTINGS;
case extensions::InstallStageTracker::FailureReason::REPLACED_BY_ARC_APP:
return em::ExtensionInstallReportLogEvent::REPLACED_BY_ARC_APP;
case extensions::InstallStageTracker::FailureReason::
MALFORMED_EXTENSION_DICT:
return em::ExtensionInstallReportLogEvent::MALFORMED_EXTENSION_DICT;
case extensions::InstallStageTracker::FailureReason::
NOT_SUPPORTED_EXTENSION_DICT:
return em::ExtensionInstallReportLogEvent::NOT_SUPPORTED_EXTENSION_DICT;
case extensions::InstallStageTracker::FailureReason::
MALFORMED_EXTENSION_DICT_FILE_PATH:
return em::ExtensionInstallReportLogEvent::
MALFORMED_EXTENSION_DICT_FILE_PATH;
case extensions::InstallStageTracker::FailureReason::
MALFORMED_EXTENSION_DICT_VERSION:
return em::ExtensionInstallReportLogEvent::
MALFORMED_EXTENSION_DICT_VERSION;
case extensions::InstallStageTracker::FailureReason::
MALFORMED_EXTENSION_DICT_UPDATE_URL:
return em::ExtensionInstallReportLogEvent::
MALFORMED_EXTENSION_DICT_UPDATE_URL;
case extensions::InstallStageTracker::FailureReason::LOCALE_NOT_SUPPORTED:
return em::ExtensionInstallReportLogEvent::LOCALE_NOT_SUPPORTED;
case extensions::InstallStageTracker::FailureReason::
NOT_PERFORMING_NEW_INSTALL:
return em::ExtensionInstallReportLogEvent::NOT_PERFORMING_NEW_INSTALL;
case extensions::InstallStageTracker::FailureReason::TOO_OLD_PROFILE:
return em::ExtensionInstallReportLogEvent::TOO_OLD_PROFILE;
case extensions::InstallStageTracker::FailureReason::
DO_NOT_INSTALL_FOR_ENTERPRISE:
return em::ExtensionInstallReportLogEvent::DO_NOT_INSTALL_FOR_ENTERPRISE;
case extensions::InstallStageTracker::FailureReason::ALREADY_INSTALLED:
return em::ExtensionInstallReportLogEvent::ALREADY_INSTALLED;
case extensions::InstallStageTracker::FailureReason::CRX_FETCH_FAILED:
return em::ExtensionInstallReportLogEvent::CRX_FETCH_FAILED;
case extensions::InstallStageTracker::FailureReason::MANIFEST_FETCH_FAILED:
return em::ExtensionInstallReportLogEvent::MANIFEST_FETCH_FAILED;
case extensions::InstallStageTracker::FailureReason::MANIFEST_INVALID:
return em::ExtensionInstallReportLogEvent::MANIFEST_INVALID;
case extensions::InstallStageTracker::FailureReason::NO_UPDATE:
return em::ExtensionInstallReportLogEvent::NO_UPDATE;
case extensions::InstallStageTracker::FailureReason::
CRX_INSTALL_ERROR_DECLINED:
return em::ExtensionInstallReportLogEvent::CRX_INSTALL_ERROR_DECLINED;
case extensions::InstallStageTracker::FailureReason::
CRX_INSTALL_ERROR_SANDBOXED_UNPACKER_FAILURE:
return em::ExtensionInstallReportLogEvent::
CRX_INSTALL_ERROR_SANDBOXED_UNPACKER_FAILURE;
case extensions::InstallStageTracker::FailureReason::
CRX_INSTALL_ERROR_OTHER:
return em::ExtensionInstallReportLogEvent::CRX_INSTALL_ERROR_OTHER;
case extensions::InstallStageTracker::FailureReason::NO_UPDATE_URL:
return em::ExtensionInstallReportLogEvent::NO_UPDATE_URL;
case extensions::InstallStageTracker::FailureReason::PENDING_ADD_FAILED:
return em::ExtensionInstallReportLogEvent::PENDING_ADD_FAILED;
case extensions::InstallStageTracker::FailureReason::DOWNLOADER_ADD_FAILED:
return em::ExtensionInstallReportLogEvent::DOWNLOADER_ADD_FAILED;
case extensions::InstallStageTracker::FailureReason::IN_PROGRESS:
return em::ExtensionInstallReportLogEvent::IN_PROGRESS;
case extensions::InstallStageTracker::FailureReason::CRX_FETCH_URL_EMPTY:
return em::ExtensionInstallReportLogEvent::CRX_FETCH_URL_EMPTY;
case extensions::InstallStageTracker::FailureReason::CRX_FETCH_URL_INVALID:
return em::ExtensionInstallReportLogEvent::CRX_FETCH_URL_INVALID;
default:
NOTREACHED();
}
}
} // namespace
ExtensionInstallEventLogCollector::ExtensionInstallEventLogCollector(
......@@ -124,6 +203,7 @@ void ExtensionInstallEventLogCollector::OnExtensionInstallationFailed(
auto event = std::make_unique<em::ExtensionInstallReportLogEvent>();
event->set_event_type(
em::ExtensionInstallReportLogEvent::INSTALLATION_FAILED);
event->set_failure_reason(ConvertFailureReasonToProto(reason));
delegate_->Add(extension_id, true /* gather_disk_space_info */,
std::move(event));
delegate_->OnExtensionInstallationFinished(extension_id);
......
......@@ -352,6 +352,8 @@ TEST_F(ExtensionInstallEventLogCollectorTest, ExtensionInstallFailed) {
EXPECT_EQ(kExtensionId1, delegate()->last_request().extension_id);
EXPECT_EQ(em::ExtensionInstallReportLogEvent::INSTALLATION_FAILED,
delegate()->last_request().event.event_type());
EXPECT_EQ(em::ExtensionInstallReportLogEvent::CRX_FETCH_URL_EMPTY,
delegate()->last_request().event.failure_reason());
}
TEST_F(ExtensionInstallEventLogCollectorTest, InstallExtension) {
......
......@@ -80,7 +80,10 @@ class InstallStageTracker : public KeyedService {
// Enum used for UMA. Do NOT reorder or remove entries. Don't forget to
// update enums.xml (name: ExtensionInstallationFailureReason) when adding new
// entries.
// entries. Don't forget to update device_management_backend.proto (name:
// ExtensionInstallReportLogEvent::FailureReason) when adding new entries.
// Don't forget to update ConvertFailureReasonToProto method in
// ExtensionInstallEventLogCollector.
enum class FailureReason {
// Reason for the failure is not reported. Typically this should not happen,
// because if we know that we need to install an extension, it should
......
......@@ -2787,6 +2787,65 @@ message ExtensionInstallReportLogEvent {
RESUME = 4;
}
// Possible failure reasons. See InstallStageTracker::FailureReason for more
// details. InstallStageTracker::FailureReason is the main enum and this is
// a copy used for reporting purposes.
enum FailureReason {
UNKNOWN = 0;
INVALID_ID = 1;
MALFORMED_EXTENSION_SETTINGS = 2;
REPLACED_BY_ARC_APP = 3;
MALFORMED_EXTENSION_DICT = 4;
NOT_SUPPORTED_EXTENSION_DICT = 5;
MALFORMED_EXTENSION_DICT_FILE_PATH = 6;
MALFORMED_EXTENSION_DICT_VERSION = 7;
MALFORMED_EXTENSION_DICT_UPDATE_URL = 8;
LOCALE_NOT_SUPPORTED = 9;
NOT_PERFORMING_NEW_INSTALL = 10;
TOO_OLD_PROFILE = 11;
DO_NOT_INSTALL_FOR_ENTERPRISE = 12;
ALREADY_INSTALLED = 13;
CRX_FETCH_FAILED = 14;
MANIFEST_FETCH_FAILED = 15;
MANIFEST_INVALID = 16;
NO_UPDATE = 17;
CRX_INSTALL_ERROR_DECLINED = 18;
CRX_INSTALL_ERROR_SANDBOXED_UNPACKER_FAILURE = 19;
CRX_INSTALL_ERROR_OTHER = 20;
NO_UPDATE_URL = 21;
PENDING_ADD_FAILED = 22;
DOWNLOADER_ADD_FAILED = 23;
IN_PROGRESS = 24;
CRX_FETCH_URL_EMPTY = 25;
CRX_FETCH_URL_INVALID = 26;
};
// Timestamp, in microseconds since epoch. Set for all log
// events.
optional int64 timestamp = 1;
......@@ -2805,6 +2864,9 @@ message ExtensionInstallReportLogEvent {
// Type of session state change. Set for event type SESSION_STATE_CHANGE.
optional SessionStateChangeType session_state_change_type = 6;
// Type of failure reason. Set for event type INSTALLATION_FAILED.
optional FailureReason failure_reason = 7;
}
// A single entry in the push-install log for an app.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment