blob: d22de1c9ae5e2ac91fa0b77fc59be0a24647be04 [file] [log] [blame]
// Copyright 2018 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 network.mojom;
// Interface that wraps a data stream and allows it to be read via a data pipe.
// Note that unlike DataPipeGetter, the size may not be known in advance.
//
// This is only used for chunked uploads, which send a final empty chunk to
// indicate the end of the response, instead of using a Content-Length header.
// For all web-exposed APIs, the upload body size is known in advance, so it's
// unclear how many servers support chunked uploads. As a result, it's
// recommended this class only be used with servers known to support chunked
// uploads.
//
// Knowing the size in advance also allows servers to know if the upload is
// bigger than they're willing to accept, and cancel the request early, which is
// a more friendly behavior.
interface ChunkedDataPipeGetter {
// Requests the total size of the data that will be provided by the data pipe.
// The Getter may invoke the callback any time, before, during, or after
// providing data through the pipe. On error, |status| should be populated
// with a net::Error value.
//
// Will be called only once, before StartReading() is invoked.
GetSize() => (int32 status, uint64 size);
// Starts reading from the beginning of the wrapped stream and writing it into
// the producer handle |pipe|. Will only be called after GetSize(), but unlike
// GetSize(), may be invoked multiple times. Data should only be written to the
// |pipe| that StartReading() was most recently called with; any previously
// passed pipes can be discarded and no longer need to be be written to.
StartReading(handle<data_pipe_producer> pipe);
};