File: mechanism_sorter.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (45 lines) | stat: -rw-r--r-- 1,739 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_WEBAUTHN_MECHANISM_SORTER_H_
#define CHROME_BROWSER_WEBAUTHN_MECHANISM_SORTER_H_

#include <vector>

#include "chrome/browser/webauthn/authenticator_request_dialog_model.h"

// LINT.IfChange
//
// Represents the type of credential that was selected after deduplication.
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
enum class WebAuthnMechanismDeduplicatedType {
  kEnclavePasskey = 0,
  kPlatformPasskey = 1,
  kPassword = 2,
  kOther = 3,
  kMaxValue = kOther,
};
// LINT.ThenChange(//tools/metrics/histograms/metadata/webauthn/enums.xml)

// Class to handle deduplication and sorting of WebAuthn mechanisms,
// with specific logic for the kModalImmediate UI presentation.
class MechanismSorter {
 public:
  // Processes a list of mechanisms by deduplicating and sorting them.
  // - Deduplication: For mechanisms with the same `mechanism.name`,
  //   selects the "best" one based on rules (e.g., recency).
  // - Sorting: Orders the resulting mechanisms based on preference rules
  //   (e.g. recency, passkeys preferred, alphabetical).
  //
  // This logic is applied when ui_presentation is
  // `UIPresentation::kModalImmediate`. For other presentations, it may apply a
  // default behavior or pass through the mechanisms unmodified.
  static std::vector<AuthenticatorRequestDialogModel::Mechanism>
  ProcessMechanisms(
      std::vector<AuthenticatorRequestDialogModel::Mechanism> mechanisms,
      UIPresentation ui_presentation);
};

#endif  // CHROME_BROWSER_WEBAUTHN_MECHANISM_SORTER_H_