// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_WEBID_FEDCM_METRICS_H_ #define CONTENT_BROWSER_WEBID_FEDCM_METRICS_H_ #include "content/browser/webid/idp_network_request_manager.h" #include "content/common/content_export.h" #include "content/public/browser/identity_request_dialog_controller.h" #include "services/metrics/public/cpp/ukm_builders.h" #include "services/metrics/public/cpp/ukm_source_id.h" #include "third_party/blink/public/mojom/credentialmanagement/credential_manager.mojom.h" #include "third_party/blink/public/mojom/webid/federated_auth_request.mojom.h" namespace base { class TimeDelta; } namespace content { MediationRequirement; RpMode; // This enum describes the status of a request id token call to the FedCM API. // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class FedCmRequestIdTokenStatus { … }; // This enum describes whether user sign-in states between IDP and browser // match. // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class FedCmSignInStateMatchStatus { … }; // This enum describes whether the browser's knowledge of whether the user is // signed into the IDP based on observing signin/signout HTTP headers matches // the information returned by the accounts endpoint. // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class FedCmIdpSigninMatchStatus { … }; // This enum describes the type of frame that invokes a FedCM API. // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class FedCmRequesterFrameType { … }; // This enum describes the status of a disconnect call to the FedCM API. // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class FedCmDisconnectStatus { … }; // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class FedCmSetLoginStatusIgnoredReason { … }; // This enum describes the result of the error dialog. // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class FedCmErrorDialogResult { … }; // Whether we were able to open the continue_on popup and the reason if not. // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class FedCmContinueOnPopupStatus { … }; // The result of the continue_on popup. // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class FedCmContinueOnPopupResult { … }; // This enum is used when we fail a FedCM request due to a bad // lifecycle state. // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class FedCmLifecycleStateFailureReason { … }; // This enum is used when a token request is invoked while there's a pending // one. These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class FedCmMultipleRequestsRpMode { … }; // This enum tracks whether the RP requested additional scopes and/or // parameters. These values are persisted to logs. Entries should not be // renumbered and numeric values should never be reused. enum class FedCmRpParameters { … }; class CONTENT_EXPORT FedCmMetrics { … }; // The following metric is recorded for UMA and UKM, but does not require an // existing FedCM call. Records metrics associated with a preventSilentAccess() // call from the given RenderFrameHost. void RecordPreventSilentAccess(RenderFrameHost& rfh, const url::Origin& requester, const url::Origin& embedder); // The following are UMA-only recordings, hence do not need to be in the // FedCmMetrics class. // Records whether an IDP returns an approved clients list in the response. void RecordApprovedClientsExistence(bool has_approved_clients); // Records the size of the approved clients list if applicable. void RecordApprovedClientsSize(int size); // Records the net::Error received from the accounts list endpoint when the IDP // SignIn status is set to SignedOut due to no accounts received. void RecordIdpSignOutNetError(int response_code); // Records why there's no valid account in the response. void RecordAccountsResponseInvalidReason( IdpNetworkRequestManager::AccountsResponseInvalidReason reason); // Records the reason why we ignored an attempt to set a login status. void RecordSetLoginStatusIgnoredReason(FedCmSetLoginStatusIgnoredReason reason); // Records the lifecycle state if we fail a FedCM request due to a page not // being primary. void RecordLifecycleStateFailureReason(FedCmLifecycleStateFailureReason reason); // Records the number of accounts received before applying login/domain hints // filter. void RecordRawAccountsSize(int size); // Records the number of accounts received after applying login/domain hints // filter. If no account left, nothing will be recorded. void RecordReadyToShowAccountsSize(int size); } // namespace content #endif // CONTENT_BROWSER_WEBID_FEDCM_METRICS_H_