// Copyright 2018 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 user consents.

// If you change or add any fields in this file, update proto_visitors.h and
// potentially proto_enum_conversions.{h, cc}.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package sync_pb;

import "sync_enums.proto";
import "user_consent_types.proto";

// Next id: 14
message UserConsentSpecifics {
  // ===========================================================================
  // Fields common to all Chrome User Consents.
  // ===========================================================================

  // The UI language Chrome is using, represented as the IETF language tag
  // defined in BCP 47. The region subtag is not included when it adds no
  // distinguishing information to the language tag (e.g. both "en-US"
  // and "fr" are correct here).
  optional string locale = 4;

  // The local time on the client when the user consent was recorded. The time
  // as measured by client is given in microseconds since Windows epoch. This
  // is needed since user consent recording may happen when a client is
  // offline.
  optional int64 client_consent_time_usec = 12;

  // ===========================================================================
  // The specific consent type. Add new User Consent types to
  // user_consent_types.proto.
  // ===========================================================================

  oneof consent {
    UserConsentTypes.SyncConsent sync_consent = 7;

    UserConsentTypes.ArcBackupAndRestoreConsent arc_backup_and_restore_consent =
        8;

    UserConsentTypes.ArcGoogleLocationServiceConsent
        arc_location_service_consent = 9;

    UserConsentTypes.ArcPlayTermsOfServiceConsent
        arc_play_terms_of_service_consent = 10;

    UserConsentTypes.ArcMetricsAndUsageConsent arc_metrics_and_usage_consent =
        11;

    UserConsentTypes.UnifiedConsent unified_consent = 13;
  }

  // ===========================================================================
  // Client only fields.
  // ===========================================================================
  // TODO(markusheintz): Refactor the code so that these fields can be moved out
  // of this message.

  // The account ID of the user who gave the consent. This field is used
  // by UserEventService to distinguish consents from different users,
  // as UserConsent does not get deleted when a user signs out. However,
  // it should be cleared before being sent over the wire, as the UserEvent
  // is sent over an authenticated channel, so this information would be
  // redundant.
  //
  // For semantics and usage of the |account_id| in the signin codebase,
  // see SigninManagerBase::GetAuthenticatedAccountId()
  // or AccountInfo::account_id.
  optional string account_id = 6;

  // ===========================================================================
  // Deprecated fields. Please do not use them !
  // ===========================================================================
  // TODO(vitaliii): Deprecate them completely once the USER_CONSENTS bridge
  // uses the fields above instead.

  // Which feature does the consent apply to?
  enum Feature {
    FEATURE_UNSPECIFIED = 0;
    CHROME_SYNC = 1;
    PLAY_STORE = 2;
    BACKUP_AND_RESTORE = 3;
    GOOGLE_LOCATION_SERVICE = 4;
    CHROME_UNIFIED_CONSENT = 5;
  }
  optional Feature feature = 1 [deprecated = true];
  // Ids of the strings of the consent text presented to the user.
  repeated int32 description_grd_ids = 2 [deprecated = true];
  // Id of the string of the UI element the user clicked when consenting.
  optional int32 confirmation_grd_id = 3 [deprecated = true];
  // Was the consent for |feature| given or not given (denied/revoked)?
  optional UserConsentTypes.ConsentStatus status = 5 [deprecated = true];
}
