// 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 the favicon image specifics.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;
option retain_unknown_fields = true;

package sync_pb;

message FaviconData {
  // The image data for the favicon (PNG encoded).
  optional bytes favicon = 1;
  // The favicon dimensions.
  optional int32 width = 2;
  optional int32 height = 3;
}

// Image data for favicons. Multiple resolutions are supported.
message FaviconImageSpecifics {
  // The url of the favicon image.
  optional string favicon_url = 1;

  // The favicons associated with this source, one per scale type.
  // Favicons images should be stored into the field that best corresponds to
  // their scale. If multiple favicons are appropriate, the highest resolution
  // that doesn't violate the maximum should be stored.

  // A normal low-resolution web favicon (max resolution 16x16).
  optional FaviconData favicon_web = 2;
  // A slightly higher-resolution web favicon (max resolution 32x32).
  optional FaviconData favicon_web_32 = 3;
  // A high-resolution touch favicon (not precomposed, max resolution 64x64).
  optional FaviconData favicon_touch_64 = 4;
  // A high-resolution touch favicon (precomposed, max resolution 64x64).
  optional FaviconData favicon_touch_precomposed_64 = 5;
}
