// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Sync protocol datatype extension for password data. // Update proto_value_conversions{.h,.cc,_unittest.cc} if you change // any fields in this file. syntax = "proto2"; option optimize_for = LITE_RUNTIME; option retain_unknown_fields = true; package sync_pb; import "encryption.proto"; // These are the properties that get serialized into the |encrypted| field of // PasswordSpecifics. They correspond to fields in autofill::PasswordForm. // // Sync unique tag is calculated as // EscapePath(origin) + "|" + // EscapePath(username_element) + "|" + // EscapePath(username_value) + "|" + // EscapePath(password_element) + "|" + // EscapePath(signon_realm) // where '+' is the string concatenation operation. EscapePath escapes a partial // or complete file/pathname. This includes non-printable, non-7bit, and // (including space) the following characters ' "#%:<>?[\]^`{|}'. The space // character is encoded as '%20'. // All the strings are encoded with UTF-8. URLs are encoded in Punycode. message PasswordSpecificsData { // SCHEME_HTML(0), the credential represents either a parsed HTML form, or an // android credential or a password saved through Credential Manager API // (https://w3c.github.io/webappsec/specs/credentialmanagement/). // SCHEME_BASIC(1), basic access http authentication. // SCHEME_DIGEST(2), digest access authentication. // SCHEME_OTHER(3), another access authentication. optional int32 scheme = 1; // For parsed web forms and normal passwords saved through Credential Manager // API: url-scheme://url-host[:url-port]/ // For Android apps (local + federated): // "android://@" // where the hash is base64 encoded SHA512 of the app's public certificate. // For federated credentials: // "federation://" + origin_host + "/" + federation_host // For proxy auth: proxy-host/auth-realm // For HTTP auth: url-scheme://url-host[:url-port]/auth-realm optional string signon_realm = 2; // For parsed web forms and Credential Manager API: // url-scheme://url-host[:url-port]/path // For Android: . // For proxy/HTTP auth: url-scheme://url-host[:url-port]/path optional string origin = 3; // Only for web-parsed forms - the action target of the form: // url-scheme://url-host[:url-port]/path optional string action = 4; // Only for web-parsed forms - the name of the element containing username. optional string username_element = 5; // For all: the username. // For blacklisted forms: . optional string username_value = 6; // Only for web-parsed forms - the name of the element containing password. optional string password_element = 7; // For all: the password. // For federated logins and blacklisted forms: optional string password_value = 8; // True if the credential was saved for a HTTPS session with a valid SSL cert. // Ignored for Android apps. // Note: likely getting deprecated: http://crbug.com/413020 optional bool ssl_valid = 9; // True for the last credential used for logging in on a given site. optional bool preferred = 10; // Time when the credential was created. Amount of microseconds since 1601. optional int64 date_created = 11; // True, if user chose permanently not to save the credentials for the form. optional bool blacklisted = 12; // TYPE_MANUAL(0), user manually filled the username and the password. // TYPE_GENERATED(1), the credential was auto generated. optional int32 type = 13; // Number of times this login was used for logging in. Chrome uses this field // to distinguish log-in and sign-up forms. optional int32 times_used = 14; // A human readable name of the account holder. Set by CredentialManager API // and Android. optional string display_name = 15; // A URL of the avatar for the credential. Set by CredentialManager API and // Android. optional string avatar_url = 16; // A URL of the IdP used to verify the credential. Set by Credential Manager // API and Android. optional string federation_url = 17; } // Properties of password sync objects. message PasswordSpecifics { // The actual password data. Contains an encrypted PasswordSpecificsData // message. optional EncryptedData encrypted = 1; // An unsynced field for use internally on the client. This field should // never be set in any network-based communications. optional PasswordSpecificsData client_only_encrypted_data = 2; }