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

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

// Properties of theme sync objects.
message ThemeSpecifics {
  // If set, we're using a extension and all custom_* fields should be
  // present.  If not set, and all custom_* fields should be omitted.
  optional bool use_custom_theme = 1;

  // This field is only set (i.e., not cleared) on platforms that have
  // a distinction between the system theme and the default theme, but
  // other platforms must be careful to pass through the set state (not
  // just the value) of this flag.
  //
  // If true, we use the system theme by default (i.e., when we don't use
  // a custom theme) for platforms that make a distinction between the
  // default theme and the system theme.  Has no effect if use_custom_theme
  // is set.
  optional bool use_system_theme_by_default = 2;

  // TODO(gayane): Migrate custom_* fields to a separate message.
  // Extension specific fields. Ignored if |autogenerated_theme| is set.
  optional string custom_theme_name = 3;
  optional string custom_theme_id = 4;
  optional string custom_theme_update_url = 5;

  message AutogeneratedTheme {
    // SkColor used to autogenerate theme.
    optional uint32 color = 1;
  };

  // If set, autogenerated theme is used.
  optional AutogeneratedTheme autogenerated_theme = 6;
}
