// 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.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;
option retain_unknown_fields = true;

package sync_pb;

message GetUpdatesCallerInfo {
  // This message was deprecated in M28.  The preferred represenation of this
  // information is now the GetUpdatesOrigin enum, which is defined in
  // sync_enums.proto.
  enum GetUpdatesSource {
    UNKNOWN = 0;  // The source was not set by the caller.
    FIRST_UPDATE = 1;  // First request after browser restart.  Not to
                       // be confused with "NEW_CLIENT".
    LOCAL = 2;  // The source of the update was a local change.
    NOTIFICATION = 3;  // The source of the update was a p2p notification.
    PERIODIC = 4;  // The source of the update was periodic polling.
    SYNC_CYCLE_CONTINUATION = 5;  // The source of the update was a
                                  // continuation of a previous sync cycle.
                                  // No longer sent as of M24.

    // This value is deprecated and was never used in production.
    // CLEAR_PRIVATE_DATA = 6;

    NEWLY_SUPPORTED_DATATYPE = 7;   // The client is in configuration mode
                                    // because it's syncing all datatypes, and
                                    // support for a new datatype was recently
                                    // released via a software auto-update.
    MIGRATION = 8;         // The client is in configuration mode because a
                           // MIGRATION_DONE error previously returned by the
                           // server necessitated resynchronization.
    NEW_CLIENT = 9;        // The client is in configuration mode because the
                           // user enabled sync for the first time.  Not to be
                           // confused with FIRST_UPDATE.
    RECONFIGURATION = 10;  // The client is in configuration mode because the
                           // user opted to sync a different set of datatypes.
    DATATYPE_REFRESH = 11;    // A datatype has requested a refresh. This is
                              // typically used when datatype's have custom
                              // sync UI, e.g. sessions.
    RETRY = 13;  // A follow-up GU to pick up updates missed by previous GU.
  }

  required GetUpdatesSource source = 1;

  // True only if notifications were enabled for this GetUpdateMessage.
  optional bool notifications_enabled = 2;
};

