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

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

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