Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1389)

Unified Diff: mojo/services/public/interfaces/network/url_loader.mojom

Issue 373373002: Mojo: Refactor URLLoader interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixes per review Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/services/public/interfaces/navigation/navigation.mojom ('k') | mojo/shell/dynamic_service_loader.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/services/public/interfaces/network/url_loader.mojom
diff --git a/mojo/services/public/interfaces/network/url_loader.mojom b/mojo/services/public/interfaces/network/url_loader.mojom
index 22d5fdb5c7a3decf1cf54c96c75a3dd2de82b359..da340c4cf0226b75c0dd095300385c5f2de7f8f5 100644
--- a/mojo/services/public/interfaces/network/url_loader.mojom
+++ b/mojo/services/public/interfaces/network/url_loader.mojom
@@ -16,15 +16,20 @@ struct URLRequest {
// Additional HTTP request headers.
string[] headers;
- // The payload for the request body. For HTTP requests, the method must be
- // set to "POST" or "PUT".
- handle<data_pipe_consumer> body;
+ // The payload for the request body, represented as a concatenation of data
+ // streams. For HTTP requests, the method must be set to "POST" or "PUT".
+ handle<data_pipe_consumer>[] body;
// The number of bytes to be read from |body|. A Content-Length header of
// this value will be sent. Set to -1 if length is unknown, which will cause
// |body| to be uploaded using a chunked encoding.
int64 body_length = 0;
+ // The buffer size of the data pipe returned in URLResponse's |body| member.
+ // A value of 0 indicates that the default buffer size should be used. This
+ // value is just a suggestion. The URLLoader may choose to ignore this value.
+ uint32 response_body_buffer_size = 0;
+
// If set to true, then redirects will be automatically followed. Otherwise,
// when a redirect is encounterd, FollowRedirect must be called to proceed.
bool auto_follow_redirects = false;
@@ -37,6 +42,13 @@ struct URLRequest {
};
struct URLResponse {
+ // If the response resulted in a network level error, this field will be set.
+ NetworkError error;
+
+ // The response body stream. Read from this data pipe to receive the bytes of
+ // response body.
+ handle<data_pipe_consumer> body;
+
// The final URL of the response, after redirects have been followed.
string url;
@@ -54,47 +66,41 @@ struct URLResponse {
// The character set of the response body.
string charset;
+
+ // These fields are set to non-NULL if this response corresponds to a
+ // redirect. Call the |FollowRedirect| method on the URLLoader instance to
+ // follow this redirect.
+ string redirect_method;
+ string redirect_url;
+};
+
+struct URLLoaderStatus {
+ // If the loader has failed due to a network level error, this field will be
+ // set.
+ NetworkError error;
+
+ // Set to true if the URLLoader is still working. Set to false once an error
+ // is encountered or the response body is completely copied to the response
+ // body stream.
+ bool is_loading;
+
+ // TODO(darin): Add further details about the stages of loading (e.g.,
+ // "resolving host") that happen prior to receiving bytes.
};
-[Client=URLLoaderClient]
interface URLLoader {
- // Start loading the given |request|. When available, the response body will
- // be copied to |response_body_stream|.
- //
- // The client's |OnReceivedResponse| method will run when response meta data
- // becomes available, or if a redirect response is encountered and
- // |auto_follow_redirects| is false, the client's |OnRecievedRedirect| method
- // will called instead.
- //
- // NOTE: You may observe data being pushed to |response_body_stream| before
- // you receive |OnReceivedResponse|.
- Start(URLRequest request, handle<data_pipe_producer> response_body_stream);
+ // Loads the given |request|, asynchronously producing |response|. Consult
+ // |response| to determine if the request resulted in an error, was
+ // redirected, or has a response body to be consumed.
+ Start(URLRequest request) => (URLResponse response);
// If the request passed to |Start| had |auto_follow_redirects| set to false,
- // then upon receiving a redirect, |OnReceivedRedirect| will be called. To
- // follow the indicated redirect, call the |FollowRedirect| method.
- FollowRedirect();
-};
+ // then upon receiving an URLResponse with a non-NULL |redirect_url| field,
+ // |FollowRedirect| may be called to load the URL indicated by the redirect.
+ FollowRedirect() => (URLResponse response);
-interface URLLoaderClient {
- // This method is called when a redirect is encountered, provided the
- // request's |auto_follow_redirects| attribute was set to false.
- OnReceivedRedirect(URLResponse response, string new_url, string new_method);
-
- // This method is called when response meta data becomes available.
- OnReceivedResponse(URLResponse response);
-
- // This method is called when a network level error is encountered. This can
- // happen before or after OnReceivedResponse, but cannot happen after
- // OnReceivedEndOfResponseBody.
- OnReceivedError(NetworkError error);
-
- // This method is called when the response body has been successfully
- // downloaded and copied in its entirety to |response_body_stream|.
- //
- // NOTE: Because |response_body_stream| is limited in size, this event may be
- // delayed until |response_body_stream| is consumed.
- OnReceivedEndOfResponseBody();
+ // Query status about the URLLoader.
+ QueryStatus() => (URLLoaderStatus status);
};
}
« no previous file with comments | « mojo/services/public/interfaces/navigation/navigation.mojom ('k') | mojo/shell/dynamic_service_loader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698