blob: b67f594cc5ad2cd5a348502692cc25c03bcbcacb [file] [log] [blame]
// Copyright 2019 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.
module mojom;
import "mojo/public/mojom/base/time.mojom";
import "services/network/public/mojom/http_request_headers.mojom";
import "url/mojom/url.mojom";
// Used by the browser to push URL rewrite rules to renderers. There will be
// one receiver per web frame.
// TODO(https://crbug.com/976975): Support URL rewriting for service workers.
interface UrlRequestRulesReceiver {
// Receives a set of rules to apply to URL requests.
OnRulesUpdated(array<UrlRequestRule> rules);
};
// A URL request modification rule.
struct UrlRequestRule {
// Set of hosts to apply the rewrites to. If empty, the rule will apply to
// every request, independent of host.
array<string>? hosts_filter;
// Set of schemes to apply the rewrites to. If empty, the rule will apply to
// every request, independent of scheme.
array<string>? schemes_filter;
// URL request rewrites to apply.
array<UrlRequestAction> actions;
};
union UrlRequestAction {
// Adds a set of headers to a URL request.
UrlRequestRewriteAddHeaders add_headers;
// Removes a header based on the presence of a pattern in the URL query.
UrlRequestRewriteRemoveHeader remove_header;
// Substitutes a pattern in the URL query.
UrlRequestRewriteSubstituteQueryPattern substitute_query_pattern;
// Replaces a URL if the original URL ends with a pattern.
UrlRequestRewriteReplaceUrl replace_url;
// Appends to the URL query.
UrlRequestRewriteAppendToQuery append_to_query;
// Specifies whether the request should be allowed or blocked.
// Cannot be combined with other UrlRequestActions.
UrlRequestAccessPolicy policy;
};
// Adds |headers| to the URL request. If a header is already present in the
// original URL request, it will be overwritten.
struct UrlRequestRewriteAddHeaders {
// The headers to add.
network.mojom.HttpRequestHeaders headers;
};
// If |query_pattern| in the URL query, removes |header_name| from the list of
// headers. If |query_pattern| is empty, removes |header_name| from the list
// of headers unconditionally
struct UrlRequestRewriteRemoveHeader {
// The pattern to look for in the URL request.
string? query_pattern;
// The header to remove.
string header_name;
};
// If |pattern| is found in the URL request query, replaces it with
// |substitution|.
struct UrlRequestRewriteSubstituteQueryPattern {
// The pattern to look for in the URL request.
string pattern;
// The string to repalce |pattern| with.
string substitution;
};
// If the URL in the URL request ends with |url_ends_with|, rewrites the URL to
// |new_url|.
struct UrlRequestRewriteReplaceUrl {
// The pattern to look for in the URL.
string url_ends_with;
// The replacement URL.
url.mojom.Url new_url;
};
// Appends |query| to the URL request query. If the URL request already has a
// non-empty query, appends |query| to it, preceded by "&". Otherwise, sets the
// URL request query to |query|.
struct UrlRequestRewriteAppendToQuery {
// The query to be added or set to the URL.
string query;
};
enum UrlRequestAccessPolicy {
kAllow,
kDeny,
};