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

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

// Properties of extension sync objects.
//
// Merge policy: the settings for the higher version number win; in
// the case of a tie, server wins.
message ExtensionSpecifics {
  // Globally unique id for this extension.
  optional string id = 1;
  // The known installed version.
  optional string version = 2;

  // Auto-update URL to use for this extension.  May be blank, in
  // which case the default one (i.e., the one for the Chrome
  // Extensions Gallery) is used.
  optional string update_url = 3;
  // Whether or not this extension is enabled.
  optional bool enabled = 4;
  // Whether or not this extension is enabled in incognito mode.
  optional bool incognito_enabled = 5;

  // The name of the extension. Used for bookmark apps.
  optional string name = 6;

  // Whether this extension was installed remotely, and hasn't been approved by
  // a user in chrome yet.
  optional bool remote_install = 7;

  // Whether this extension was installed by the custodian of a supervised user.
  optional bool installed_by_custodian = 8;

  // Whether this extension has explicit user consent access to all urls.
  // This is a tri-state boolean, so, unlike most fields here, it really *is*
  // optional and may be absent. We need this for the time being because we need
  // to know if a user has not set an explicit preference.
  optional bool all_urls_enabled = 9;
}

