15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* From ppb_url_loader.idl modified Thu Mar 28 10:07:37 2013. */
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_C_PPB_URL_LOADER_H_
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_C_PPB_URL_LOADER_H_
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_bool.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_completion_callback.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_instance.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_macros.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_resource.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_stdint.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPB_URLLOADER_INTERFACE_1_0 "PPB_URLLoader;1.0"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPB_URLLOADER_INTERFACE PPB_URLLOADER_INTERFACE_1_0
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @file
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This file defines the <strong>PPB_URLLoader</strong> interface for loading
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * URLs.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @addtogroup Interfaces
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @{
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The <strong>PPB_URLLoader</strong> interface contains pointers to functions
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * for loading URLs. The typical steps for loading a URL are:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * -# Call Create() to create a URLLoader object.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * -# Create a <code>URLRequestInfo</code> object and set properties on it.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Refer to <code>PPB_URLRequestInfo</code> for further information.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * -# Call Open() with the <code>URLRequestInfo</code> as an argument.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * -# When Open() completes, call GetResponseInfo() to examine the response
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * headers. Refer to <code>PPB_URLResponseInfo</code> for further information.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * -# Call ReadResponseBody() to stream the data for the response.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Alternatively, if <code>PP_URLREQUESTPROPERTY_STREAMTOFILE</code> was set on
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the <code>URLRequestInfo</code> in step #2:
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - Call FinishStreamingToFile(), after examining the response headers
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (step #4),  to wait for the downloaded file to be complete.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - Then, access the downloaded file using the GetBodyAsFileRef() function of
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the <code>URLResponseInfo</code> returned in step #4.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PPB_URLLoader_1_0 {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Create() creates a new <code>URLLoader</code> object. The
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLLoader</code> is associated with a particular instance, so that
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * any UI dialogs that need to be shown to the user can be positioned
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * relative to the window containing the instance.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] instance A <code>PP_Instance</code> identifying one instance
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * of a module.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return A <code>PP_Resource</code> corresponding to a URLLoader if
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * successful, 0 if the instance is invalid.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Resource (*Create)(PP_Instance instance);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * IsURLLoader() determines if a resource is an <code>URLLoader</code>.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLLoader</code>.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return <code>PP_TRUE</code> if the resource is a <code>URLLoader</code>,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>PP_FALSE</code> if the resource is invalid or some type other
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * than <code>URLLoader</code>.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Bool (*IsURLLoader)(PP_Resource resource);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Open() begins loading the <code>URLRequestInfo</code>. The operation
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * completes when response headers are received or when an error occurs.  Use
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * GetResponseInfo() to access the response headers.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] loader A <code>PP_Resource</code> corresponding to a
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLLoader</code>.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] resource A <code>PP_Resource</code> corresponding to a
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLRequestInfo</code>.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to run on
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * asynchronous completion of Open(). This callback will run when response
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)   * headers for the url are received or error occurred. This callback
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * will only run if Open() returns <code>PP_OK_COMPLETIONPENDING</code>.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return An int32_t containing an error code from <code>pp_errors.h</code>.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*Open)(PP_Resource loader,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  PP_Resource request_info,
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  struct PP_CompletionCallback callback);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FollowRedirect() can be invoked to follow a redirect after Open()
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * completed on receiving redirect headers.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] loader A <code>PP_Resource</code> corresponding to a
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLLoader</code>.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to run on
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * asynchronous completion of FollowRedirect(). This callback will run when
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * response headers for the redirect url are received or error occurred. This
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * callback will only run if FollowRedirect() returns
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>PP_OK_COMPLETIONPENDING</code>.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return An int32_t containing an error code from <code>pp_errors.h</code>.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*FollowRedirect)(PP_Resource loader,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            struct PP_CompletionCallback callback);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * GetUploadProgress() returns the current upload progress (which is
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * meaningful after Open() has been called). Progress only refers to the
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * request body and does not include the headers.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * This data is only available if the <code>URLRequestInfo</code> passed
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * to Open() had the <code>PP_URLREQUESTPROPERTY_REPORTUPLOADPROGRESS</code>
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * property set to PP_TRUE.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] loader A <code>PP_Resource</code> corresponding to a
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLLoader</code>.
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] bytes_sent The number of bytes sent thus far.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] total_bytes_to_be_sent The total number of bytes to be sent.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return <code>PP_TRUE</code> if the upload progress is available,
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>PP_FALSE</code> if it is not available.
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Bool (*GetUploadProgress)(PP_Resource loader,
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               int64_t* bytes_sent,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               int64_t* total_bytes_to_be_sent);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * GetDownloadProgress() returns the current download progress, which is
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * meaningful after Open() has been called. Progress only refers to the
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * response body and does not include the headers.
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * This data is only available if the <code>URLRequestInfo</code> passed to
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Open() had the <code>PP_URLREQUESTPROPERTY_REPORTDOWNLOADPROGRESS</code>
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * property set to <code>PP_TRUE</code>.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] loader A <code>PP_Resource</code> corresponding to a
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLLoader</code>.
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] bytes_received The number of bytes received thus far.
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] total_bytes_to_be_received The total number of bytes to be
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * received. The total bytes to be received may be unknown, in which case
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>total_bytes_to_be_received</code> will be set to -1.
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return <code>PP_TRUE</code> if the download progress is available,
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>PP_FALSE</code> if it is not available.
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Bool (*GetDownloadProgress)(PP_Resource loader,
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 int64_t* bytes_received,
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 int64_t* total_bytes_to_be_received);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * GetResponseInfo() returns the current <code>URLResponseInfo</code> object.
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] instance A <code>PP_Resource</code> corresponding to a
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLLoader</code>.
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return A <code>PP_Resource</code> corresponding to the
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLResponseInfo</code> if successful, 0 if the loader is not a valid
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * resource or if Open() has not been called.
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Resource (*GetResponseInfo)(PP_Resource loader);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * ReadResponseBody() is used to read the response body. The size of the
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * buffer must be large enough to hold the specified number of bytes to read.
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * This function might perform a partial read.
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] loader A <code>PP_Resource</code> corresponding to a
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLLoader</code>.
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in,out] buffer A pointer to the buffer for the response body.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] bytes_to_read The number of bytes to read.
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to run on
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * asynchronous completion. The callback will run if the bytes (full or
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * partial) are read or an error occurs asynchronously. This callback will
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * run only if this function returns <code>PP_OK_COMPLETIONPENDING</code>.
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return An int32_t containing the number of bytes read or an error code
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * from <code>pp_errors.h</code>.
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*ReadResponseBody)(PP_Resource loader,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              void* buffer,
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              int32_t bytes_to_read,
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              struct PP_CompletionCallback callback);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * FinishStreamingToFile() is used to wait for the response body to be
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * completely downloaded to the file provided by the GetBodyAsFileRef()
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * in the current <code>URLResponseInfo</code>. This function is only used if
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>PP_URLREQUESTPROPERTY_STREAMTOFILE</code> was set on the
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLRequestInfo</code> passed to Open().
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] loader A <code>PP_Resource</code> corresponding to a
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLLoader</code>.
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] callback A <code>PP_CompletionCallback</code> to run on
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * asynchronous completion. This callback will run when body is downloaded
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * or an error occurs after FinishStreamingToFile() returns
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>PP_OK_COMPLETIONPENDING</code>.
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @return An int32_t containing the number of bytes read or an error code
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * from <code>pp_errors.h</code>.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t (*FinishStreamingToFile)(PP_Resource loader,
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   struct PP_CompletionCallback callback);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Close is a pointer to a function used to cancel any pending IO and close
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * the <code>URLLoader</code> object. Any pending callbacks will still run,
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * reporting <code>PP_ERROR_ABORTED</code> if pending IO was interrupted.
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * It is NOT valid to call Open() again after a call to this function.
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <strong>Note:</strong> If the <code>URLLoader</code> object is destroyed
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * while it is still open, then it will be implicitly closed so you are not
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * required to call Close().
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param[in] loader A <code>PP_Resource</code> corresponding to a
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <code>URLLoader</code>.
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void (*Close)(PP_Resource loader);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct PPB_URLLoader_1_0 PPB_URLLoader;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @}
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  /* PPAPI_C_PPB_URL_LOADER_H_ */
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
227