chromium/services/device/public/mojom/fingerprint.mojom

// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module device.mojom;

// Note: this needs to stay in sync with
// src/platform2/system_api/dbus/biod/constants.proto in the ChromeOS repo.
// Please modify tools/metrics/histograms/enums.xml when changing this.
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused (See FingerprintScanResult metrics
// enum).
enum ScanResult {
  SUCCESS = 0,
  PARTIAL = 1,
  INSUFFICIENT = 2,
  SENSOR_DIRTY = 3,
  TOO_SLOW = 4,
  TOO_FAST = 5,
  IMMOBILE = 6,
  NO_MATCH = 7,
};

// Note: this needs to stay in sync with
// src/platform2/system_api/dbus/biod/constants.proto in the ChromeOS repo.
// Protobuf enum starts with 1 (0 is not used for compatibility with android),
// but in this enum we add 'catch all' field at 0. It is required by enum
// histogram guidelines.
// Please modify tools/metrics/histograms/enums.xml when changing this.
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
enum FingerprintError {
  UNKNOWN = 0,
  HW_UNAVAILABLE = 1,
  UNABLE_TO_PROCESS = 2,
  TIMEOUT = 3,
  NO_SPACE = 4,
  CANCELED = 5,
  UNABLE_TO_REMOVE = 6,
  LOCKOUT = 7,
  NO_TEMPLATES = 8,
};

// Note: this needs to stay in sync with
// src/platform2/system_api/dbus/biod/dbus-constants.proto in the ChromeOS
// repro.
enum BiometricType {
  UNKNOWN = 0,
  FINGERPRINT = 1,
};

// Note: this needs to stay in sync with
// src/platform2/system_api/dbus/biod/messages.proto in the ChromeOS repo.
union FingerprintMessage {
  FingerprintError fingerprint_error;
  ScanResult scan_result;
};

// Note: this needs to stay in sync with
// src/platform2/system_api/dbus/biod/constants.proto in the ChromeOS repo.
enum BiometricsManagerStatus {
  UNKNOWN = 0,
  INITIALIZED = 1,
};

// This interface is ChromeOS-specific. If it is ever desired to support a more
// general fingerprint service across more platforms, the interface would need
// to be generalized. Interface for observing fingerprint daemon signals.
interface FingerprintObserver {
  // Called when biometrics device powers up or is restarted.
  OnRestarted();

  // Called when BiometricsManager Status changed.
  // e.g Primary profile initialized.
  OnStatusChanged(BiometricsManagerStatus status);

  // Called whenever a user attempts a scan. |scan_result| tells whether the
  // scan was successful. |is_complete| tells whether record is complete and now
  // over.
  //
  // |percent_complete| within [0, 100] represents the percent of enrollment
  // completion and -1 means unknown percentage.
  OnEnrollScanDone(ScanResult scan_result,
                   bool is_complete,
                   int32 percent_complete);

  // Called to indicate a bad scan of any kind, or a successful scan. If scan is
  // successful, |matches| is a map of user id keys to a vector of object path
  // values.
  OnAuthScanDone(FingerprintMessage msg, map<string, array<string>> matches);

  // Called during either mode to indicate a failure. Any EnrollSession record
  // that was underway is thrown away and AuthSession will no longer be
  // happening.
  OnSessionFailed();
};

// Interface for communicating with fingerprint deamon through dbus.
interface Fingerprint {
  // Gets all the records of this user registered with this biometric manager.
  // |records| is a map of record path keys to record label values.
  GetRecordsForUser(string user_id) => (map<string, string> records, bool success);

  // Starts the biometric enroll session.
  StartEnrollSession(string user_id, string label);

  // Ends the current enroll session.
  CancelCurrentEnrollSession() => (bool success);

  // Requests the label of the record at |record_path|.
  RequestRecordLabel(string record_path) => (string label);

  // Changes the label of the record at |record_path| to |new_label|.
  SetRecordLabel(string record_path, string new_label) => (bool success);

  // Removes the record. This record will no longer
  // be able to used for authentication.
  RemoveRecord(string record_path) => (bool success);

  // Starts the biometric authentication session.
  StartAuthSession();

  // Ends the current authentication session.
  EndCurrentAuthSession() => (bool success);

  // Irreversibly destroys all records registered with this biometric manager.
  DestroyAllRecords() => (bool success);

  // Adds fingerprint observers and notifies them when receiving signals.
  AddFingerprintObserver(pending_remote<FingerprintObserver> observer);

  // Requests the type of biometric.
  RequestType() => (BiometricType type);
};