|  | // Copyright 2019 The Fuchsia Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  | library fuchsia.web; | 
|  |  | 
|  | using fuchsia.net.http; | 
|  |  | 
|  | type UrlRequestRewriteRule = table { | 
|  | /// Set of hosts to apply the rules to. If not set, the rule will apply to every request, | 
|  | /// independent of host. | 
|  | 1: hosts_filter vector<UrlHostName>:MAX_RULE_COUNT; | 
|  |  | 
|  | /// Set of schemes to apply the rules to. If not set, the rule will apply to every request, | 
|  | /// independent of scheme. | 
|  | 2: schemes_filter vector<UrlSchemeName>:MAX_RULE_COUNT; | 
|  |  | 
|  | /// URL request rewrites to apply. | 
|  | 3: rewrites vector<UrlRequestRewrite>:MAX_RULE_COUNT; | 
|  |  | 
|  | /// Specifies the action to take for requests matching the filter criteria. | 
|  | /// Requests are allowed by default. | 
|  | 4: action UrlRequestAction; | 
|  | }; | 
|  |  | 
|  | type UrlRequestAction = strict enum : int32 { | 
|  | /// Allow the request to be processed. | 
|  | ALLOW = 1; | 
|  |  | 
|  | /// Block the request. | 
|  | DENY = 2; | 
|  | }; | 
|  |  | 
|  | type UrlRequestRewrite = flexible union { | 
|  | /// Adds a set of headers to a URL request. | 
|  | 1: add_headers UrlRequestRewriteAddHeaders; | 
|  |  | 
|  | /// Removes a header based on the presence of a pattern in the URL query. | 
|  | 2: remove_header UrlRequestRewriteRemoveHeader; | 
|  |  | 
|  | /// Substitutes a pattern in the URL query. | 
|  | 3: substitute_query_pattern UrlRequestRewriteSubstituteQueryPattern; | 
|  |  | 
|  | /// Replaces a URL if the original URL ends with a pattern. | 
|  | 4: replace_url UrlRequestRewriteReplaceUrl; | 
|  |  | 
|  | /// Appends to the URL query. | 
|  | 5: append_to_query UrlRequestRewriteAppendToQuery; | 
|  | }; | 
|  |  | 
|  | /// Adds `headers` to the URL request. If a header is already present in the original URL request, | 
|  | /// it will be overwritten. | 
|  | /// - `headers` must be set. | 
|  | /// - Each [`fuchsia.net.http/Header`] in `headers` must have a valid HTTP header name and value, | 
|  | ///   per [RFC 7230 section  3.2](https://tools.ietf.org/html/rfc7230#section-3.2). | 
|  | type UrlRequestRewriteAddHeaders = table { | 
|  | 1: headers vector<fuchsia.net.http.Header>:MAX_HEADERS_COUNT; | 
|  | }; | 
|  |  | 
|  | /// If `query_pattern` in the URL query, removes `header_name` from the list of headers. If | 
|  | /// `query_pattern` is not set, removes `header_name` from the list of headers unconditionally. | 
|  | /// - `header_name` must be set. | 
|  | /// - `header_name` must be a valid HTTP header name, per | 
|  | ///   [RFC 7230 section 3.2](https://tools.ietf.org/html/rfc7230#section-3.2). | 
|  | type UrlRequestRewriteRemoveHeader = table { | 
|  | 1: query_pattern Url; | 
|  | 2: header_name vector<uint8>:MAX_HEADERS_COUNT; | 
|  | }; | 
|  |  | 
|  | /// If `pattern` is found in the URL request query, replaces it with `substitution`. | 
|  | /// - `pattern` and `substitution` must be set. | 
|  | /// - `substitution` must be a valid | 
|  | ///   [URL-query string](https://url.spec.whatwg.org/#url-query-string). | 
|  | type UrlRequestRewriteSubstituteQueryPattern = table { | 
|  | 1: pattern Url; | 
|  | 2: substitution Url; | 
|  | }; | 
|  |  | 
|  | /// If the URL in the URL request ends with `url_ends_with`, rewrites the URL to `new_url`. | 
|  | /// - `url_ends_with` and `new_url` must be set. | 
|  | /// - `url_ends_with` must be a valid | 
|  | ///   [path-relative-URL string](https://url.spec.whatwg.org/#path-relative-url-string). | 
|  | /// - `new_url` must be a [valid URL string](https://url.spec.whatwg.org/#valid-url-string). | 
|  | type UrlRequestRewriteReplaceUrl = table { | 
|  | 1: url_ends_with Url; | 
|  | 2: new_url Url; | 
|  | }; | 
|  |  | 
|  | /// Appends `query` to the URL query. If the URL request already has a query, `query` will be | 
|  | /// appended to it, preceded by `&`. Otherwise, the URL's query will be set to `query`. | 
|  | /// - `query` must be set. | 
|  | /// - `query` must be a valid [URL-query string](https://url.spec.whatwg.org/#url-query-string). | 
|  | type UrlRequestRewriteAppendToQuery = table { | 
|  | 1: query Url; | 
|  | }; |