1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 * Use of this source code is governed by a BSD-style license that can be 3 * found in the LICENSE file. 4 */ 5 6 /* From ppb_url_loader.idl modified Thu Mar 28 10:07:37 2013. */ 7 8 #ifndef PPAPI_C_PPB_URL_LOADER_H_ 9 #define PPAPI_C_PPB_URL_LOADER_H_ 10 11 #include "ppapi/c/pp_bool.h" 12 #include "ppapi/c/pp_completion_callback.h" 13 #include "ppapi/c/pp_instance.h" 14 #include "ppapi/c/pp_macros.h" 15 #include "ppapi/c/pp_resource.h" 16 #include "ppapi/c/pp_stdint.h" 17 18 #define PPB_URLLOADER_INTERFACE_1_0 "PPB_URLLoader;1.0" 19 #define PPB_URLLOADER_INTERFACE PPB_URLLOADER_INTERFACE_1_0 20 21 /** 22 * @file 23 * This file defines the <strong>PPB_URLLoader</strong> interface for loading 24 * URLs. 25 */ 26 27 28 /** 29 * @addtogroup Interfaces 30 * @{ 31 */ 32 /** 33 * The <strong>PPB_URLLoader</strong> interface contains pointers to functions 34 * for loading URLs. The typical steps for loading a URL are: 35 * 36 * -# Call Create() to create a URLLoader object. 37 * -# Create a <code>URLRequestInfo</code> object and set properties on it. 38 * Refer to <code>PPB_URLRequestInfo</code> for further information. 39 * -# Call Open() with the <code>URLRequestInfo</code> as an argument. 40 * -# When Open() completes, call GetResponseInfo() to examine the response 41 * headers. Refer to <code>PPB_URLResponseInfo</code> for further information. 42 * -# Call ReadResponseBody() to stream the data for the response. 43 * 44 * Alternatively, if <code>PP_URLREQUESTPROPERTY_STREAMTOFILE</code> was set on 45 * the <code>URLRequestInfo</code> in step #2: 46 * - Call FinishStreamingToFile(), after examining the response headers 47 * (step #4), to wait for the downloaded file to be complete. 48 * - Then, access the downloaded file using the GetBodyAsFileRef() function of 49 * the <code>URLResponseInfo</code> returned in step #4. 50 */ 51 struct PPB_URLLoader_1_0 { 52 /** 53 * Create() creates a new <code>URLLoader</code> object. The 54 * <code>URLLoader</code> is associated with a particular instance, so that 55 * any UI dialogs that need to be shown to the user can be positioned 56 * relative to the window containing the instance. 57 * 58 * @param[in] instance A <code>PP_Instance</code> identifying one instance 59 * of a module. 60 * 61 * @return A <code>PP_Resource</code> corresponding to a URLLoader if 62 * successful, 0 if the instance is invalid. 63 */ 64 PP_Resource (*Create)(PP_Instance instance); 65 /** 66 * IsURLLoader() determines if a resource is an <code>URLLoader</code>. 67 * 68 * @param[in] resource A <code>PP_Resource</code> corresponding to a 69 * <code>URLLoader</code>. 70 * 71 * @return <code>PP_TRUE</code> if the resource is a <code>URLLoader</code>, 72 * <code>PP_FALSE</code> if the resource is invalid or some type other 73 * than <code>URLLoader</code>. 74 */ 75 PP_Bool (*IsURLLoader)(PP_Resource resource); 76 /** 77 * Open() begins loading the <code>URLRequestInfo</code>. The operation 78 * completes when response headers are received or when an error occurs. Use 79 * GetResponseInfo() to access the response headers. 80 * 81 * @param[in] loader A <code>PP_Resource</code> corresponding to a 82 * <code>URLLoader</code>. 83 * @param[in] resource A <code>PP_Resource</code> corresponding to a 84 * <code>URLRequestInfo</code>. 85 * @param[in] callback A <code>PP_CompletionCallback</code> to run on 86 * asynchronous completion of Open(). This callback will run when response 87 * headers for the url are received or error occurred. This callback 88 * will only run if Open() returns <code>PP_OK_COMPLETIONPENDING</code>. 89 * 90 * @return An int32_t containing an error code from <code>pp_errors.h</code>. 91 */ 92 int32_t (*Open)(PP_Resource loader, 93 PP_Resource request_info, 94 struct PP_CompletionCallback callback); 95 /** 96 * FollowRedirect() can be invoked to follow a redirect after Open() 97 * completed on receiving redirect headers. 98 * 99 * @param[in] loader A <code>PP_Resource</code> corresponding to a 100 * <code>URLLoader</code>. 101 * @param[in] callback A <code>PP_CompletionCallback</code> to run on 102 * asynchronous completion of FollowRedirect(). This callback will run when 103 * response headers for the redirect url are received or error occurred. This 104 * callback will only run if FollowRedirect() returns 105 * <code>PP_OK_COMPLETIONPENDING</code>. 106 * 107 * @return An int32_t containing an error code from <code>pp_errors.h</code>. 108 */ 109 int32_t (*FollowRedirect)(PP_Resource loader, 110 struct PP_CompletionCallback callback); 111 /** 112 * GetUploadProgress() returns the current upload progress (which is 113 * meaningful after Open() has been called). Progress only refers to the 114 * request body and does not include the headers. 115 * 116 * This data is only available if the <code>URLRequestInfo</code> passed 117 * to Open() had the <code>PP_URLREQUESTPROPERTY_REPORTUPLOADPROGRESS</code> 118 * property set to PP_TRUE. 119 * 120 * @param[in] loader A <code>PP_Resource</code> corresponding to a 121 * <code>URLLoader</code>. 122 * @param[in] bytes_sent The number of bytes sent thus far. 123 * @param[in] total_bytes_to_be_sent The total number of bytes to be sent. 124 * 125 * @return <code>PP_TRUE</code> if the upload progress is available, 126 * <code>PP_FALSE</code> if it is not available. 127 */ 128 PP_Bool (*GetUploadProgress)(PP_Resource loader, 129 int64_t* bytes_sent, 130 int64_t* total_bytes_to_be_sent); 131 /** 132 * GetDownloadProgress() returns the current download progress, which is 133 * meaningful after Open() has been called. Progress only refers to the 134 * response body and does not include the headers. 135 * 136 * This data is only available if the <code>URLRequestInfo</code> passed to 137 * Open() had the <code>PP_URLREQUESTPROPERTY_REPORTDOWNLOADPROGRESS</code> 138 * property set to <code>PP_TRUE</code>. 139 * 140 * @param[in] loader A <code>PP_Resource</code> corresponding to a 141 * <code>URLLoader</code>. 142 * @param[in] bytes_received The number of bytes received thus far. 143 * @param[in] total_bytes_to_be_received The total number of bytes to be 144 * received. The total bytes to be received may be unknown, in which case 145 * <code>total_bytes_to_be_received</code> will be set to -1. 146 * 147 * @return <code>PP_TRUE</code> if the download progress is available, 148 * <code>PP_FALSE</code> if it is not available. 149 */ 150 PP_Bool (*GetDownloadProgress)(PP_Resource loader, 151 int64_t* bytes_received, 152 int64_t* total_bytes_to_be_received); 153 /** 154 * GetResponseInfo() returns the current <code>URLResponseInfo</code> object. 155 * 156 * @param[in] instance A <code>PP_Resource</code> corresponding to a 157 * <code>URLLoader</code>. 158 * 159 * @return A <code>PP_Resource</code> corresponding to the 160 * <code>URLResponseInfo</code> if successful, 0 if the loader is not a valid 161 * resource or if Open() has not been called. 162 */ 163 PP_Resource (*GetResponseInfo)(PP_Resource loader); 164 /** 165 * ReadResponseBody() is used to read the response body. The size of the 166 * buffer must be large enough to hold the specified number of bytes to read. 167 * This function might perform a partial read. 168 * 169 * @param[in] loader A <code>PP_Resource</code> corresponding to a 170 * <code>URLLoader</code>. 171 * @param[in,out] buffer A pointer to the buffer for the response body. 172 * @param[in] bytes_to_read The number of bytes to read. 173 * @param[in] callback A <code>PP_CompletionCallback</code> to run on 174 * asynchronous completion. The callback will run if the bytes (full or 175 * partial) are read or an error occurs asynchronously. This callback will 176 * run only if this function returns <code>PP_OK_COMPLETIONPENDING</code>. 177 * 178 * @return An int32_t containing the number of bytes read or an error code 179 * from <code>pp_errors.h</code>. 180 */ 181 int32_t (*ReadResponseBody)(PP_Resource loader, 182 void* buffer, 183 int32_t bytes_to_read, 184 struct PP_CompletionCallback callback); 185 /** 186 * FinishStreamingToFile() is used to wait for the response body to be 187 * completely downloaded to the file provided by the GetBodyAsFileRef() 188 * in the current <code>URLResponseInfo</code>. This function is only used if 189 * <code>PP_URLREQUESTPROPERTY_STREAMTOFILE</code> was set on the 190 * <code>URLRequestInfo</code> passed to Open(). 191 * 192 * @param[in] loader A <code>PP_Resource</code> corresponding to a 193 * <code>URLLoader</code>. 194 * @param[in] callback A <code>PP_CompletionCallback</code> to run on 195 * asynchronous completion. This callback will run when body is downloaded 196 * or an error occurs after FinishStreamingToFile() returns 197 * <code>PP_OK_COMPLETIONPENDING</code>. 198 * 199 * @return An int32_t containing the number of bytes read or an error code 200 * from <code>pp_errors.h</code>. 201 */ 202 int32_t (*FinishStreamingToFile)(PP_Resource loader, 203 struct PP_CompletionCallback callback); 204 /** 205 * Close is a pointer to a function used to cancel any pending IO and close 206 * the <code>URLLoader</code> object. Any pending callbacks will still run, 207 * reporting <code>PP_ERROR_ABORTED</code> if pending IO was interrupted. 208 * It is NOT valid to call Open() again after a call to this function. 209 * 210 * <strong>Note:</strong> If the <code>URLLoader</code> object is destroyed 211 * while it is still open, then it will be implicitly closed so you are not 212 * required to call Close(). 213 * 214 * @param[in] loader A <code>PP_Resource</code> corresponding to a 215 * <code>URLLoader</code>. 216 */ 217 void (*Close)(PP_Resource loader); 218 }; 219 220 typedef struct PPB_URLLoader_1_0 PPB_URLLoader; 221 /** 222 * @} 223 */ 224 225 #endif /* PPAPI_C_PPB_URL_LOADER_H_ */ 226 227