/* Copyright (c) 2012 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. */ /** * This file defines the PPB_URLLoader interface for loading * URLs. */ label Chrome { M14 = 1.0 }; /** * The PPB_URLLoader interface contains pointers to functions * for loading URLs. The typical steps for loading a URL are: * * -# Call Create() to create a URLLoader object. * -# Create a URLRequestInfo object and set properties on it. * Refer to PPB_URLRequestInfo for further information. * -# Call Open() with the URLRequestInfo as an argument. * -# When Open() completes, call GetResponseInfo() to examine the response * headers. Refer to PPB_URLResponseInfo for further information. * -# Call ReadResponseBody() to stream the data for the response. * * Alternatively, if PP_URLREQUESTPROPERTY_STREAMTOFILE was set on * the URLRequestInfo in step #2: * - Call FinishStreamingToFile(), after examining the response headers * (step #4), to wait for the downloaded file to be complete. * - Then, access the downloaded file using the GetBodyAsFileRef() function of * the URLResponseInfo returned in step #4. */ interface PPB_URLLoader { /** * Create() creates a new URLLoader object. The * URLLoader is associated with a particular instance, so that * any UI dialogs that need to be shown to the user can be positioned * relative to the window containing the instance. * * @param[in] instance A PP_Instance identifying one instance * of a module. * * @return A PP_Resource corresponding to a URLLoader if * successful, 0 if the instance is invalid. */ PP_Resource Create( [in] PP_Instance instance); /** * IsURLLoader() determines if a resource is an URLLoader. * * @param[in] resource A PP_Resource corresponding to a * URLLoader. * * @return PP_TRUE if the resource is a URLLoader, * PP_FALSE if the resource is invalid or some type other * than URLLoader. */ PP_Bool IsURLLoader( [in] PP_Resource resource); /** * Open() begins loading the URLRequestInfo. The operation * completes when response headers are received or when an error occurs. Use * GetResponseInfo() to access the response headers. * * @param[in] loader A PP_Resource corresponding to a * URLLoader. * @param[in] resource A PP_Resource corresponding to a * URLRequestInfo. * @param[in] callback A PP_CompletionCallback to run on * asynchronous completion of Open(). This callback will run when response * headers for the url are received or error occurred. This callback * will only run if Open() returns PP_OK_COMPLETIONPENDING. * * @return An int32_t containing an error code from pp_errors.h. */ int32_t Open( [in] PP_Resource loader, [in] PP_Resource request_info, [in] PP_CompletionCallback callback); /** * FollowRedirect() can be invoked to follow a redirect after Open() * completed on receiving redirect headers. * * @param[in] loader A PP_Resource corresponding to a * URLLoader. * @param[in] callback A PP_CompletionCallback to run on * asynchronous completion of FollowRedirect(). This callback will run when * response headers for the redirect url are received or error occurred. This * callback will only run if FollowRedirect() returns * PP_OK_COMPLETIONPENDING. * * @return An int32_t containing an error code from pp_errors.h. */ int32_t FollowRedirect( [in] PP_Resource loader, [in] PP_CompletionCallback callback); /** * GetUploadProgress() returns the current upload progress (which is * meaningful after Open() has been called). Progress only refers to the * request body and does not include the headers. * * This data is only available if the URLRequestInfo passed * to Open() had the PP_URLREQUESTPROPERTY_REPORTUPLOADPROGRESS * property set to PP_TRUE. * * @param[in] loader A PP_Resource corresponding to a * URLLoader. * @param[in] bytes_sent The number of bytes sent thus far. * @param[in] total_bytes_to_be_sent The total number of bytes to be sent. * * @return PP_TRUE if the upload progress is available, * PP_FALSE if it is not available. */ PP_Bool GetUploadProgress( [in] PP_Resource loader, [out] int64_t bytes_sent, [out] int64_t total_bytes_to_be_sent); /** * GetDownloadProgress() returns the current download progress, which is * meaningful after Open() has been called. Progress only refers to the * response body and does not include the headers. * * This data is only available if the URLRequestInfo passed to * Open() had the PP_URLREQUESTPROPERTY_REPORTDOWNLOADPROGRESS * property set to PP_TRUE. * * @param[in] loader A PP_Resource corresponding to a * URLLoader. * @param[in] bytes_received The number of bytes received thus far. * @param[in] total_bytes_to_be_received The total number of bytes to be * received. The total bytes to be received may be unknown, in which case * total_bytes_to_be_received will be set to -1. * * @return PP_TRUE if the download progress is available, * PP_FALSE if it is not available. */ PP_Bool GetDownloadProgress( [in] PP_Resource loader, [out] int64_t bytes_received, [out] int64_t total_bytes_to_be_received); /** * GetResponseInfo() returns the current URLResponseInfo object. * * @param[in] instance A PP_Resource corresponding to a * URLLoader. * * @return A PP_Resource corresponding to the * URLResponseInfo if successful, 0 if the loader is not a valid * resource or if Open() has not been called. */ PP_Resource GetResponseInfo( [in] PP_Resource loader); /** * ReadResponseBody() is used to read the response body. The size of the * buffer must be large enough to hold the specified number of bytes to read. * This function might perform a partial read. * * @param[in] loader A PP_Resource corresponding to a * URLLoader. * @param[in,out] buffer A pointer to the buffer for the response body. * @param[in] bytes_to_read The number of bytes to read. * @param[in] callback A PP_CompletionCallback to run on * asynchronous completion. The callback will run if the bytes (full or * partial) are read or an error occurs asynchronously. This callback will * run only if this function returns PP_OK_COMPLETIONPENDING. * * @return An int32_t containing the number of bytes read or an error code * from pp_errors.h. */ int32_t ReadResponseBody( [in] PP_Resource loader, [out] mem_t buffer, [in] int32_t bytes_to_read, [in] PP_CompletionCallback callback); /** * FinishStreamingToFile() is used to wait for the response body to be * completely downloaded to the file provided by the GetBodyAsFileRef() * in the current URLResponseInfo. This function is only used if * PP_URLREQUESTPROPERTY_STREAMTOFILE was set on the * URLRequestInfo passed to Open(). * * @param[in] loader A PP_Resource corresponding to a * URLLoader. * @param[in] callback A PP_CompletionCallback to run on * asynchronous completion. This callback will run when body is downloaded * or an error occurs after FinishStreamingToFile() returns * PP_OK_COMPLETIONPENDING. * * @return An int32_t containing the number of bytes read or an error code * from pp_errors.h. */ int32_t FinishStreamingToFile( [in] PP_Resource loader, [in] PP_CompletionCallback callback); /** * Close is a pointer to a function used to cancel any pending IO and close * the URLLoader object. Any pending callbacks will still run, * reporting PP_ERROR_ABORTED if pending IO was interrupted. * It is NOT valid to call Open() again after a call to this function. * * Note: If the URLLoader object is destroyed * while it is still open, then it will be implicitly closed so you are not * required to call Close(). * * @param[in] loader A PP_Resource corresponding to a * URLLoader. */ void Close( [in] PP_Resource loader); };