// 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 experimental feature flags.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;
option retain_unknown_fields = true;

package sync_pb;

// A flag to enable support for keystore encryption.
message KeystoreEncryptionFlags {
  optional bool enabled = 1;
}

// Whether history delete directives are enabled.
message HistoryDeleteDirectives {
  optional bool enabled = 1;
}

// Whether this client should cull (delete) expired autofill
// entries when autofill sync is enabled.
message AutofillCullingFlags {
  optional bool enabled = 1;
}

// Whether the favicon sync datatypes are enabled, and what parameters
// they should operate under.
message FaviconSyncFlags {
  optional bool enabled = 1;
  optional int32 favicon_sync_limit = 2 [default = 200];
}

// Flags for enabling the experimental no-precommit GU feature.
message PreCommitUpdateAvoidanceFlags {
  optional bool enabled = 1;
}

// Flags for enabling the GCM feature.
message GcmChannelFlags {
  optional bool enabled = 1;
}

// Flags for enabling the experimental enhanced bookmarks feature.
message EnhancedBookmarksFlags {
  optional bool enabled = 1;
  optional string extension_id = 2;
}

// Flags for enabling GCM channel for invalidations.
message GcmInvalidationsFlags {
  optional bool enabled = 1;
}

// Flags for enabling wallet data syncing.
message WalletSyncFlags {
  optional bool enabled = 1;
}

// Contains one flag or set of related flags.  Each node of the experiments type
// will have a unique_client_tag identifying which flags it contains.  By
// convention, the tag name should match the sub-message name.
message ExperimentsSpecifics {
  optional KeystoreEncryptionFlags keystore_encryption = 1;
  optional HistoryDeleteDirectives history_delete_directives = 2;
  optional AutofillCullingFlags autofill_culling = 3;
  optional FaviconSyncFlags favicon_sync = 4;
  optional PreCommitUpdateAvoidanceFlags pre_commit_update_avoidance = 5;
  optional GcmChannelFlags gcm_channel = 6;
  optional EnhancedBookmarksFlags enhanced_bookmarks = 7;
  optional GcmInvalidationsFlags gcm_invalidations = 8;
  optional WalletSyncFlags wallet_sync = 9;
}
