| Index: mojo/services/network/public/interfaces/url_loader_interceptor.mojom
|
| diff --git a/mojo/services/network/public/interfaces/url_loader_interceptor.mojom b/mojo/services/network/public/interfaces/url_loader_interceptor.mojom
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bd3eb04db4c80100ff48a04540b5d2ab9e68d4fe
|
| --- /dev/null
|
| +++ b/mojo/services/network/public/interfaces/url_loader_interceptor.mojom
|
| @@ -0,0 +1,53 @@
|
| +// Copyright 2015 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 mojo;
|
| +
|
| +import "mojo/public/interfaces/network/url_request.mojom";
|
| +import "mojo/public/interfaces/network/url_response.mojom";
|
| +
|
| +// Factory for |URLLoaderInterceptor|. The factory is called once per URLLoader
|
| +// and will be associated to it.
|
| +interface URLLoaderInterceptorFactory {
|
| + Create(URLLoaderInterceptor& interceptor);
|
| +};
|
| +
|
| +// An |URLLoaderInterceptor| is associated to a single URLLoader. It will be
|
| +// able to intercept requests sent to the URLLoader and transform these or
|
| +// directly respond to it. It will also intercept responses and transform them
|
| +// or ask the network to continue with another request instead.
|
| +// In case of redirect, the behavior is the following:
|
| +// - If in the request |auto_follow_redirects| is true, the interceptor doesn't
|
| +// have access to any of the intermediate request(s) or response(s).
|
| +// Otherwise, it has access to intermediate responses as they are sent to the
|
| +// client and it is also notified when the client asks to follow a redirect.
|
| +interface URLLoaderInterceptor {
|
| + // Intercept a request before it is sent to the network. This method can
|
| + // transform the request by returning the new requests to consider, or
|
| + // respond to the request itself by returning a response.
|
| + InterceptRequest(URLRequest request) =>
|
| + (URLLoaderInterceptorResponse response);
|
| +
|
| + // Intercept |URLLoader.FollowRedirect()| calls. This method can either
|
| + // return null to let the call through, return a request to change the
|
| + // redirect, or respond to the redirect itself by returning a response.
|
| + InterceptFollowRedirect() => (URLLoaderInterceptorResponse? response);
|
| +
|
| + // Intercept a response before it is sent to the loader client. This method
|
| + // can transform the response by returning the new response to send, ask
|
| + // the loader to load a new request instead by returning the request to load,
|
| + // or if the response is a redirect, follow it by returning null.
|
| + InterceptResponse(URLResponse response) =>
|
| + (URLLoaderInterceptorResponse? response);
|
| +};
|
| +
|
| +// Response for the intercept methods. One and only one of the two fields
|
| +// must be set. If |request| is set, the url loader will execute the request.
|
| +// If |response| is set, the url loader will send it to its client. It is the
|
| +// responsibility of the interceptor not to create infinite loops.
|
| +// TODO(qsr): Change this to an union.
|
| +struct URLLoaderInterceptorResponse {
|
| + URLRequest? request;
|
| + URLResponse? response;
|
| +};
|
|
|