// 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 custom search engines.

// If you change or add any fields in this file, update proto_visitors.h and
// potentially proto_enum_conversions.{h, cc}.

// Fields that are not used anymore should be marked [deprecated = true].

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package sync_pb;

// Properties of custom search engine sync objects.
message SearchEngineSpecifics {
  // The description of the search engine.
  optional string short_name = 1;
  // The search engine keyword for omnibox access.
  optional string keyword = 2;
  // A URL to the favicon to show in the search engines options page.
  optional string favicon_url = 3;
  // The actual parameterized search engine query URL.
  optional string url = 4;
  // A flag signifying whether it is safe to automatically modify this search
  // engine entry or not.
  optional bool safe_for_autoreplace = 5;
  // The URL to the OSD file this search engine entry came from.
  optional string originating_url = 6;
  // The date this search engine entry was created. A UTC timestamp with units
  // in microseconds.
  optional int64 date_created = 7;
  // A list of supported input encodings.
  optional string input_encodings = 8;
  // Obsolete field. This used to represent whether or not this entry is shown
  // in the list of default search engines.
  optional bool deprecated_show_in_default_list = 9 [deprecated = true];
  // The parameterized URL that provides suggestions as the user types.
  optional string suggestions_url = 10;
  // The ID associated with the prepopulate data this search engine comes from.
  // Set to zero if it was not prepopulated.
  optional int32 prepopulate_id = 11;
  // DEPRECATED: Whether to autogenerate a keyword for the search engine or not.
  // Do not write to this field in the future.  We preserve this for now so we
  // can read the field in order to migrate existing data that sets this bit.
  optional bool autogenerate_keyword = 12;
  // ID 13 reserved - previously used by |logo_id|, now deprecated.
  // Obsolete field. This used to represent whether or not this search engine
  // entry was created automatically by an administrator via group policy. This
  // notion no longer exists amongst synced search engines as we do not want to
  // sync managed search engines.
  // optional bool deprecated_created_by_policy = 14;
  optional string instant_url = 15 [deprecated = true];
  // ID 16 reserved - previously used by |id|, now deprecated.
  // The last time this entry was modified by a user. A UTC timestamp with units
  // in microseconds.
  optional int64 last_modified = 17;
  // The primary identifier of this search engine entry for Sync.
  optional string sync_guid = 18;
  // A list of URL patterns that can be used, in addition to |url|, to extract
  // search terms from a URL.
  repeated string alternate_urls = 19;
  optional string search_terms_replacement_key = 20 [deprecated = true];
  // The parameterized URL that provides image results according to the image
  // content or image URL provided by user.
  optional string image_url = 21;

  // The following post_params are comma-separated lists used to specify the
  // post parameters for the corresponding search URL.
  optional string search_url_post_params = 22;
  optional string suggestions_url_post_params = 23;
  optional string instant_url_post_params = 24 [deprecated = true];
  optional string image_url_post_params = 25;

  // The parameterized URL for a search provider specified new tab page.
  optional string new_tab_url = 26;
}
