/* Copyright (c) 2011 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. */ #ifndef PPAPI_C_PPB_URL_REQUEST_INFO_H_ #define PPAPI_C_PPB_URL_REQUEST_INFO_H_ #include "ppapi/c/pp_bool.h" #include "ppapi/c/pp_instance.h" #include "ppapi/c/pp_macros.h" #include "ppapi/c/pp_resource.h" #include "ppapi/c/pp_stdint.h" #include "ppapi/c/pp_time.h" struct PP_Var; /** * @file * This file defines the PPB_URLRequestInfo API for creating and manipulating * URL requests. This API is used in conjunction with PPB_URLLoader. */ /** * @addtogroup Enums * @{ */ /** * This enumeration contains properties that can be set on a URL request. */ typedef enum { /** This corresponds to a string (PP_VARTYPE_STRING). */ PP_URLREQUESTPROPERTY_URL, /** * This corresponds to a string (PP_VARTYPE_STRING); either POST or GET. * Refer to the * HTTP * Methods documentation for further information. * */ PP_URLREQUESTPROPERTY_METHOD, /** * This corresponds to a string (PP_VARTYPE_STRING); \n delimited. * Refer to the * documentaiton for further information. */ PP_URLREQUESTPROPERTY_HEADERS, /** * This corresponds to a PP_Bool (PP_VARTYPE_BOOL; default=PP_FALSE). * Set this value to PP_TRUE if you want to download the data to a file. Use * PPB_URLLoader.FinishStreamingToFile() to complete the download. */ PP_URLREQUESTPROPERTY_STREAMTOFILE, /** * This corresponds to a PP_Bool (PP_VARTYPE_BOOL; default=PP_TRUE). * Set this value to PP_FALSE if you want to use * PPB_URLLoader.FollowRedirects() to follow the redirects only after * examining redirect headers. */ PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, /** * This corresponds to a PP_Bool (PP_VARTYPE_BOOL; default=PP_FALSE). * Set this value to PP_TRUE if you want to be able to poll the download * progress using PPB_URLLoader.GetDownloadProgress(). */ PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, /** * This corresponds to a PP_Bool (default=PP_FALSE). * Set this value to PP_TRUE if you want to be able to poll the upload * progress using PPB_URLLoader.GetUplaodProgress(). */ PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, /** * This corresponds to a string (PP_VARTYPE_STRING) or may be undefined * (PP_VARTYPE_UNDEFINED; default). * Set it to a string to set a custom referrer (if empty, the referrer header * will be omitted), or to undefined to use the default referrer. Only loaders * with universal access (only available on trusted implementations) will * accept URLRequestInfo objects that try to set a custom referrer; if given * to a loader without universal access, PP_ERROR_BADARGUMENT will result. */ PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL, /** * This corresponds to a PP_Bool (PP_VARTYPE_BOOL; default=PP_FALSE). * Whether cross-origin requests are allowed. Cross-origin requests are made * using the CORS (Cross-Origin Resource Sharing) algorithm to check whether * the request should be allowed. For the complete CORS algorithm, refer to * the Cross-Origin Resource * Sharing documentation. */ PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS, /** * This corresponds to a PP_Bool (PP_VARTYPE_BOOL; default=PP_FALSE). * Whether HTTP credentials are sent with cross-origin requests. If false, * no credentials are sent with the request and cookies are ignored in the * response. If the request is not cross-origin, this property is ignored. */ PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS, /** * This corresponds to a string (PP_VARTYPE_STRING) or may be undefined * (PP_VARTYPE_UNDEFINED; default). * Set it to a string to set a custom content-transfer-encoding header (if * empty, that header will be omitted), or to undefined to use the default (if * any). Only loaders with universal access (only available on trusted * implementations) will accept URLRequestInfo objects that try to set a * custom content transfer encoding; if given to a loader without universal * access, PP_ERROR_BADARGUMENT will result. */ PP_URLREQUESTPROPERTY_CUSTOMCONTENTTRANSFERENCODING, /** * This corresponds to an integer (PP_VARTYPE_INT32); default is not defined * and is set by the browser, possibly depending on system capabilities. * Set it to an integer to set an upper threshold for the prefetched buffer * of an asynchronous load. When exceeded, the browser will defer loading * until PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERERTHRESHOLD is hit, at which * time it will begin prefetching again. * When setting this property, * PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERERTHRESHOLD must also be set. * Behavior is undefined if the former is <= the latter. */ PP_URLREQUESTPROPERTY_PREFETCHBUFFERUPPERTHRESHOLD, /** * This corresponds to an integer (PP_VARTYPE_INT32); default is not defined * and is set by the browser to a value appropriate for the default * PP_URLREQUESTPROPERTY_PREFETCHBUFFERUPPERTHRESHOLD. * Set it to an integer to set a lower threshold for the prefetched buffer * of an asynchronous load. When reached, the browser will resume loading if * If PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERERTHRESHOLD had previously been * reached. * When setting this property, * PP_URLREQUESTPROPERTY_PREFETCHBUFFERUPPERTHRESHOLD must also be set. * Behavior is undefined if the former is >= the latter. */ PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERTHRESHOLD } PP_URLRequestProperty; PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_URLRequestProperty, 4); /** * @} */ #define PPB_URLREQUESTINFO_INTERFACE_0_2 "PPB_URLRequestInfo;0.2" #define PPB_URLREQUESTINFO_INTERFACE PPB_URLREQUESTINFO_INTERFACE_0_2 /** * * @addtogroup Interfaces * @{ */ /** * The PPB_URLRequestInfo interface contains pointers to functions for creating * and handling URL requests. Refer to PPB_URLLoader for further information. */ struct PPB_URLRequestInfo { /** * Create is a pointer to a function that creates a new URLRequestInfo * object. * * @param[in] instance A PP_Instance indentifying one instance of a module. * @return A PP_Resource identifying the URLRequestInfo if successful, 0 if * the instance is invalid. */ PP_Resource (*Create)(PP_Instance instance); /** * IsURLRequestInfo is a pointer to a function that determines if a resource * is a URLRequestInfo. * * @param[in] resource A PP_Resource corresponding to a URLRequestInfo. * @return PP_TRUE if the resource is a URLRequestInfo, * PP_FALSE if the resource is invalid or some type other than * URLRequestInfo. */ PP_Bool (*IsURLRequestInfo)(PP_Resource resource); /** * SetProperty is a pointer to a function that sets a request property. The * value of the property must be the correct type according to the property * being set. * * @param[in] request A PP_Resource corresponding to a URLRequestInfo. * @param[in] property A PP_URLRequestProperty identifying the * property to set. * @param[in] value A PP_Var containing the property value. * @return PP_TRUE if successful, PP_FALSE if any of the * parameters are invalid. */ PP_Bool (*SetProperty)(PP_Resource request, PP_URLRequestProperty property, struct PP_Var value); /** * AppendDataToBody is a pointer to a function that appends data to the * request body. A Content-Length request header will be automatically * generated. * * @param[in] request A PP_Resource corresponding to a URLRequestInfo. * @param[in] data A pointer to a buffer holding the data. * @param[in] len The length, in bytes, of the data. * @return PP_TRUE if successful, PP_FALSE if any of the * parameters are invalid. * * */ PP_Bool (*AppendDataToBody)(PP_Resource request, const void* data, uint32_t len); /** * AppendFileToBody is a pointer to a function used to append a file, to be * uploaded, to the request body. A content-length request header will be * automatically generated. * * @param[in] request A PP_Resource corresponding to a URLRequestInfo. * @param[in] file_ref A PP_Resource containing the file reference. * @param[in] start_offset An optional starting point offset within the * file. * @param[in] number_of_bytes An optional number of bytes of the file to * be included. If number_of_bytes is -1, then the sub-range to upload * extends to the end of the file. * @param[in] expected_last_modified_time An optional (non-zero) last * modified time stamp used to validate that the file was not modified since * the given time before it was uploaded. The upload will fail with an error * code of PP_ERROR_FILECHANGED if the file has been modified since the given * time. If expected_last_modified_time is 0, then no validation is * performed. * @return PP_TRUE if successful, PP_FALSE if any of the * parameters are invalid. */ PP_Bool (*AppendFileToBody)(PP_Resource request, PP_Resource file_ref, int64_t start_offset, int64_t number_of_bytes, PP_Time expected_last_modified_time); }; /** * @} */ #endif /* PPAPI_C_PPB_URL_REQUEST_INFO_H_ */