summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/schema
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--toolkit/components/search/schema/Readme.txt7
-rw-r--r--toolkit/components/search/schema/search-default-override-allowlist-schema.json49
-rw-r--r--toolkit/components/search/schema/search-default-override-allowlist-ui-schema.json3
-rw-r--r--toolkit/components/search/schema/search-engine-config-schema.json400
-rw-r--r--toolkit/components/search/schema/search-engine-config-ui-schema.json14
5 files changed, 473 insertions, 0 deletions
diff --git a/toolkit/components/search/schema/Readme.txt b/toolkit/components/search/schema/Readme.txt
new file mode 100644
index 0000000000..14fffb5c10
--- /dev/null
+++ b/toolkit/components/search/schema/Readme.txt
@@ -0,0 +1,7 @@
+The schemas in this directory are the primary source for the schemas they represent.
+
+They are uploaded to the RemoteSettings server to validate new configurations.
+
+Any changes should be validated by the Search team.
+
+See the documentation for more information: https://firefox-source-docs.mozilla.org/
diff --git a/toolkit/components/search/schema/search-default-override-allowlist-schema.json b/toolkit/components/search/schema/search-default-override-allowlist-schema.json
new file mode 100644
index 0000000000..43ff8e50c2
--- /dev/null
+++ b/toolkit/components/search/schema/search-default-override-allowlist-schema.json
@@ -0,0 +1,49 @@
+{
+ "type": "object",
+ "required": ["thirdPartyId", "overridesId", "urls"],
+ "properties": {
+ "thirdPartyId": {
+ "type": "string",
+ "title": "Third-party Add-on Id",
+ "description": "The identifier of the third party add-on which will override the app provided one. Should be of the format example@foo",
+ "pattern": "^[a-zA-Z0-9-._]*@[a-zA-Z0-9-._]*$"
+ },
+ "overridesId": {
+ "type": "string",
+ "title": "Add-on Id to Override",
+ "description": "The identifier of the app-provided add-on to be overriden. Should be of the format example@search.mozilla.org",
+ "pattern": "^[a-zA-Z0-9-._]*@search.mozilla.org$"
+ },
+ "urls": {
+ "type": "array",
+ "title": "URLs",
+ "description": "An array of URL sets which must be matched (with the add-on's manifest settings) to allow the override",
+ "items": {
+ "type": "object",
+ "required": ["search_url"],
+ "properties": {
+ "search_url": {
+ "type": "string",
+ "title": "search_url",
+ "description": "The main search url"
+ },
+ "search_url_get_params": {
+ "type": "string",
+ "title": "search_url_get_params",
+ "description": "Any get parameters"
+ },
+ "search_url_post_params": {
+ "type": "string",
+ "title": "search_url_post_params",
+ "description": "Any post parameters"
+ },
+ "search_form": {
+ "type": "string",
+ "title": "search_form",
+ "description": "The search form url"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/toolkit/components/search/schema/search-default-override-allowlist-ui-schema.json b/toolkit/components/search/schema/search-default-override-allowlist-ui-schema.json
new file mode 100644
index 0000000000..1b85489c13
--- /dev/null
+++ b/toolkit/components/search/schema/search-default-override-allowlist-ui-schema.json
@@ -0,0 +1,3 @@
+{
+ "ui:order": ["thirdPartyId", "overridesId", "urls"]
+}
diff --git a/toolkit/components/search/schema/search-engine-config-schema.json b/toolkit/components/search/schema/search-engine-config-schema.json
new file mode 100644
index 0000000000..838ccbf340
--- /dev/null
+++ b/toolkit/components/search/schema/search-engine-config-schema.json
@@ -0,0 +1,400 @@
+{
+ "type": "object",
+ "required": ["webExtension"],
+ "properties": {
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "defaultPrivate": {
+ "$ref": "#/definitions/defaultPrivate"
+ },
+ "orderHint": {
+ "$ref": "#/definitions/orderHint"
+ },
+ "appliesTo": {
+ "type": "array",
+ "title": "Applies To",
+ "description": "This section defines the region/locales/application information for where a search engine is available, and any specifics for that region/locale/application. If there are no entries in the list, it is considered to be included everywhere",
+ "items": {
+ "$ref": "#/definitions/appliesToSection"
+ }
+ },
+ "sendAttributionRequest": {
+ "$ref": "#/definitions/sendAttributionRequest"
+ },
+ "telemetryId": {
+ "type": "string",
+ "title": "Telemetry Id",
+ "description": "The telemetry Id as used for search telemetry."
+ },
+ "webExtension": {
+ "$ref": "#/definitions/webExtension"
+ },
+ "urls": {
+ "$ref": "#/definitions/urls"
+ },
+ "params": {
+ "$ref": "#/definitions/params"
+ },
+ "extraParams": {
+ "$ref": "#/definitions/extraParams"
+ },
+ "suggestExtraParams": {
+ "$ref": "#/definitions/extraParams"
+ }
+ },
+ "definitions": {
+ "application": {
+ "type": "object",
+ "title": "Application Details",
+ "properties": {
+ "name": {
+ "type": "array",
+ "title": "Name",
+ "description": "The application(s) this applies to (default/not specified is everywhere)",
+ "items": {
+ "type": "string",
+ "pattern": "^[a-z]{0,100}$",
+ "enum": ["", "firefox"]
+ },
+ "uniqueItems": true
+ },
+ "channel": {
+ "type": "array",
+ "title": "Channel",
+ "description": "Which channel this belongs to (not set = everywhere). For ESR this is also keyed from the display version.",
+ "items": {
+ "type": "string",
+ "pattern": "^[a-z]{0,100}$",
+ "enum": ["default", "nightly", "aurora", "beta", "release", "esr"]
+ },
+ "uniqueItems": true
+ },
+ "distributions": {
+ "type": "array",
+ "title": "Distributions",
+ "description": "Which distributions this applies to.",
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9.-]{0,100}$"
+ },
+ "uniqueItems": true
+ },
+ "excludedDistributions": {
+ "type": "array",
+ "title": "Excluded Distributions",
+ "description": "Which distributions this does not apply to.",
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9.-]{0,100}$"
+ },
+ "uniqueItems": true
+ },
+ "minVersion": {
+ "type": "string",
+ "title": "Minimum Version",
+ "pattern": "^[0-9a-z.]{0,20}$",
+ "description": "The minimum version this applies to"
+ },
+ "maxVersion": {
+ "type": "string",
+ "title": "Maxium Version",
+ "pattern": "^[0-9a-z.]{0,20}$",
+ "description": "The maximum version this applies to (less-than comparison)"
+ }
+ }
+ },
+ "default": {
+ "type": "string",
+ "title": "Default Status",
+ "pattern": "^[a-z-]{0,20}$",
+ "description": "Whether or not this engine should be default.",
+ "enum": ["yes", "yes-if-no-other", "no"]
+ },
+ "defaultPrivate": {
+ "type": "string",
+ "title": "Default Status (PBM)",
+ "pattern": "^[a-z-]{0,20}$",
+ "description": "Whether or not this engine should be default in private browsing mode.",
+ "enum": ["yes", "yes-if-no-other", "no"]
+ },
+ "extraParams": {
+ "type": "array",
+ "title": "Extra Parameters",
+ "description": "Extra parameters for the search engine (aka MozParams)",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "pattern": "^[a-z]{0,20}$",
+ "description": "Name of the parameter that will be used in the search query"
+ },
+ "condition": {
+ "type": "string",
+ "title": "Condition",
+ "pattern": "^[a-z]{0,10}$",
+ "description": "The type of parameter (pref or purpose)",
+ "enum": ["pref", "purpose"]
+ },
+ "purpose": {
+ "type": "string",
+ "title": "Purpose",
+ "pattern": "^[a-z{}]{0,100}$",
+ "description": "The search purpose that triggers this parameter being appended.",
+ "enum": [
+ "searchbar",
+ "keyword",
+ "contextmenu",
+ "homepage",
+ "newtab"
+ ]
+ },
+ "value": {
+ "type": "string",
+ "title": "Value",
+ "pattern": "^[a-zA-Z0-9_]{0,100}$",
+ "description": "If this is a purpose type, the value is used as the value of the parameter in the query"
+ },
+ "pref": {
+ "type": "string",
+ "title": "Preference name",
+ "pattern": "^[a-z0-9_]{0,100}$",
+ "description": "The preference name to get the value from (i.e. browser.search.param.<preference name>)."
+ }
+ }
+ }
+ },
+ "orderHint": {
+ "type": "number",
+ "title": "Order Hint",
+ "description": "A hint to the display order (higher is a higer rank)"
+ },
+ "searchUrlCodes": {
+ "type": "array",
+ "title": "Codes",
+ "description": "A array of objects - map of parameter name to the parameter value.",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "pattern": "^[a-zA-Z0-9.-]{0,100}$",
+ "description": "Name of the parameter that will be used in the query"
+ },
+ "value": {
+ "type": "string",
+ "title": "Value",
+ "pattern": "^[a-zA-Z0-9_{}:/.-]{0,100}$",
+ "description": "The value of parameter (pref or purpose)"
+ }
+ }
+ }
+ },
+ "params": {
+ "type": "object",
+ "title": "Parameters",
+ "description": "Various parameters for the search engines",
+ "properties": {
+ "searchUrlGetParams": {
+ "title": "Search URL GET Parameters",
+ "description": "Extra parameters for search URLs (e.g. 'pc=foo').",
+ "$ref": "#/definitions/searchUrlCodes"
+ },
+ "suggestUrlGetParams": {
+ "title": "Suggestion URL GET Parameters",
+ "description": "Extra parameters for search suggestion URLs (e.g. 'pc=foo').",
+ "$ref": "#/definitions/searchUrlCodes"
+ },
+ "searchUrlPostParams": {
+ "title": "Search URL POST Parameters",
+ "description": "Extra parameters for search URLs (e.g. 'pc=foo').",
+ "$ref": "#/definitions/searchUrlCodes"
+ },
+ "suggestUrlPostParams": {
+ "title": "Suggestion URL POST Parameters",
+ "description": "Extra parameters for search suggestion URLs (e.g. 'pc=foo').",
+ "$ref": "#/definitions/searchUrlCodes"
+ }
+ }
+ },
+ "sendAttributionRequest": {
+ "type": "boolean",
+ "title": "Send Attribution Request",
+ "description": "Indicates if we should send an attribution request to Mozilla's server."
+ },
+ "telemetryId": {
+ "type": "string",
+ "title": "Telemetry Id",
+ "pattern": "^[a-zA-Z0-9-$_]{0,100}$",
+ "description": "The telemetry Id as used for search telemetry."
+ },
+ "webExtension": {
+ "type": "object",
+ "title": "WebExtension",
+ "properties": {
+ "id": {
+ "type": "string",
+ "title": "WebExtension Id",
+ "description": "The identifier (local part) of the associated WebExtension should be of the format example@search.mozilla.org",
+ "pattern": "^[a-zA-Z0-9-._]*@search.mozilla.org$"
+ },
+ "locales": {
+ "type": "array",
+ "title": "WebExtension Locales",
+ "description": "Overrides the WebExtension locales and specifies to use a particular one. Ideally this should only be used when really necessary, otherwise considered deprecated.",
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9-$_]{0,100}$"
+ }
+ }
+ }
+ },
+ "urls": {
+ "type": "object",
+ "description": "Urls pertaining to this engine",
+ "properties": {
+ "trending": {
+ "type": "object",
+ "description": "Details of the url used to fetch trending suggestions",
+ "properties": {
+ "fullPath": {
+ "type": "string",
+ "title": "fullPath",
+ "format": "uri",
+ "description": "The url used to retrieve trending suggestions"
+ },
+ "query": {
+ "type": "string",
+ "title": "query",
+ "description": "The query parameters to send in a trending suggestions request",
+ "pattern": "^[a-zA-Z0-9.={}&-]{0,100}$"
+ }
+ }
+ }
+ }
+ },
+ "regionDetails": {
+ "type": "array",
+ "title": "Regions",
+ "description": "Two-letter region codes.",
+ "items": {
+ "type": "string",
+ "pattern": "^([a-z][a-z]|default)$",
+ "minLength": 2,
+ "maxLength": 7
+ }
+ },
+ "localeDetails": {
+ "type": "object",
+ "title": "Locales",
+ "description": "Locale codes.",
+ "properties": {
+ "matches": {
+ "type": "array",
+ "title": "Matches exactly the codes",
+ "items": {
+ "type": "string",
+ "pattern": "^([a-z]{2,3}(-[a-zA-Z]{2,})?(-macos)?|default)$",
+ "minLength": 2
+ }
+ },
+ "startsWith": {
+ "type": "array",
+ "title": "Matches any code starting with",
+ "items": {
+ "type": "string",
+ "pattern": "^[a-z]{2,3}$",
+ "minLength": 2,
+ "maxLength": 3
+ }
+ }
+ }
+ },
+ "included": {
+ "type": "object",
+ "title": "Included Locations",
+ "description": "The locations to which this section applies. Note: Regions and Locales are 'and'ed together.",
+ "properties": {
+ "everywhere": {
+ "type": "boolean",
+ "title": "Everywhere",
+ "description": "Set to true to signify that this is included everywhere."
+ },
+ "regions": {
+ "$ref": "#/definitions/regionDetails"
+ },
+ "locales": {
+ "$ref": "#/definitions/localeDetails"
+ }
+ }
+ },
+ "excluded": {
+ "type": "object",
+ "title": "Excluded Locations",
+ "description": "The locations to which this section applies. Note: Regions and Locales are 'and'ed together.",
+ "properties": {
+ "regions": {
+ "$ref": "#/definitions/regionDetails"
+ },
+ "locales": {
+ "$ref": "#/definitions/localeDetails"
+ }
+ }
+ },
+ "appliesToSection": {
+ "type": "object",
+ "properties": {
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "defaultPrivate": {
+ "$ref": "#/definitions/defaultPrivate"
+ },
+ "orderHint": {
+ "$ref": "#/definitions/orderHint"
+ },
+ "included": {
+ "$ref": "#/definitions/included"
+ },
+ "excluded": {
+ "$ref": "#/definitions/excluded"
+ },
+ "application": {
+ "$ref": "#/definitions/application"
+ },
+ "webExtension": {
+ "$ref": "#/definitions/webExtension"
+ },
+ "urls": {
+ "$ref": "#/definitions/urls"
+ },
+ "sendAttributionRequest": {
+ "$ref": "#/definitions/sendAttributionRequest"
+ },
+ "telemetryId": {
+ "$ref": "#/definitions/telemetryId"
+ },
+ "params": {
+ "$ref": "#/definitions/params"
+ },
+ "extraParams": {
+ "$ref": "#/definitions/extraParams"
+ },
+ "experiment": {
+ "type": "string",
+ "title": "Experiment",
+ "pattern": "^[a-zA-Z0-9-]{0,100}$",
+ "description": "The experiment this section is associated with, if blank it is associated with any configuration."
+ },
+ "override": {
+ "type": "boolean",
+ "title": "Override",
+ "description": "This section will override previous appliesTo sections, but not add new locations where this engine is deployed to."
+ }
+ }
+ }
+ }
+}
diff --git a/toolkit/components/search/schema/search-engine-config-ui-schema.json b/toolkit/components/search/schema/search-engine-config-ui-schema.json
new file mode 100644
index 0000000000..0b8b8d0dd6
--- /dev/null
+++ b/toolkit/components/search/schema/search-engine-config-ui-schema.json
@@ -0,0 +1,14 @@
+{
+ "ui:order": [
+ "webExtension",
+ "default",
+ "defaultPrivate",
+ "orderHint",
+ "sendAttributionRequest",
+ "telemetryId",
+ "params",
+ "extraParams",
+ "suggestExtraParams",
+ "appliesTo"
+ ]
+}