// 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.
#ifndef PPAPI_CPP_URL_REQUEST_INFO_H_
#define PPAPI_CPP_URL_REQUEST_INFO_H_
#include "ppapi/c/ppb_url_request_info.h"
#include "ppapi/cpp/resource.h"
#include "ppapi/cpp/var.h"
/// @file
/// This file defines the API for creating and manipulating URL requests.
namespace pp {
class FileRef;
class InstanceHandle;
/// URLRequestInfo provides an API for creating and manipulating URL requests.
class URLRequestInfo : public Resource {
public:
/// Default constructor. This constructor creates an
/// is_null
resource.
URLRequestInfo() {}
/// A constructor used to allocate a new URLLoader
in the
/// browser. The resulting object will be is_null
if the
/// allocation failed.
///
/// @param[in] instance The instance with which this resource will be
/// associated.
explicit URLRequestInfo(const InstanceHandle& instance);
/// The copy constructor for URLRequestInfo
.
///
/// @param[in] other A URLRequestInfo
to be copied.
URLRequestInfo(const URLRequestInfo& other);
/// SetProperty() sets a request property. The value of the property must be
/// the correct type according to the property being set.
///
/// @param[in] property A PP_URLRequestProperty
identifying the
/// property to set.
/// @param[in] value A Var
containing the property value.
///
/// @return true if successful, false if any of the
/// parameters are invalid.
bool SetProperty(PP_URLRequestProperty property, const Var& value);
/// AppendDataToBody() appends data to the request body. A content-length
/// request header will be automatically generated.
///
/// @param[in] data A pointer to a buffer holding the data.
/// @param[in] len The length, in bytes, of the data.
///
/// @return true if successful, false if any of the
/// parameters are invalid.
bool AppendDataToBody(const void* data, uint32_t len);
/// AppendFileToBody() is used to append an entire file, to be uploaded, to
/// the request body. A content-length request header will be automatically
/// generated.
///
/// @param[in] file_ref A FileRef
containing the file
/// reference.
/// @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 true if successful, false if any of the
/// parameters are invalid.
bool AppendFileToBody(const FileRef& file_ref,
PP_Time expected_last_modified_time = 0);
/// AppendFileRangeToBody() is a pointer to a function used to append part or
/// all of a file, to be uploaded, to the request body. A content-length
/// request header will be automatically generated.
///
/// @param[in] file_ref A FileRef
containing the file
/// reference.
/// @param[in] start_offset An optional starting point offset within the
/// file.
/// @param[in] length An optional number of bytes of the file to
/// be included. If the value 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 true if successful, false if any of the
/// parameters are invalid.
bool AppendFileRangeToBody(const FileRef& file_ref,
int64_t start_offset,
int64_t length,
PP_Time expected_last_modified_time = 0);
/// SetURL() sets the PP_URLREQUESTPROPERTY_URL
/// property for the request.
///
/// @param[in] url_string A Var
containing the property value.
///
/// @return true if successful, false if the parameter is invalid.
bool SetURL(const Var& url_string) {
return SetProperty(PP_URLREQUESTPROPERTY_URL, url_string);
}
/// SetMethod() sets the PP_URLREQUESTPROPERTY_METHOD
/// (corresponding to a string of type PP_VARTYPE_STRING
)
/// property for the request. This string is either a POST or GET. Refer to
/// the HTTP
/// Methods documentation for further information.
///
/// @param[in] method_string A Var
containing the property
/// value.
///
/// @return true if successful, false if the parameter is invalid.
bool SetMethod(const Var& method_string) {
return SetProperty(PP_URLREQUESTPROPERTY_METHOD, method_string);
}
/// SetHeaders() sets the PP_URLREQUESTPROPERTY_HEADERS
/// (corresponding to a \n
delimited string of type
/// PP_VARTYPE_STRING
) property for the request.
/// Refer to the
/// documentation for further information.
///
/// @param[in] headers_string A Var
containing the property
/// value.
///
/// @return true if successful, false if the parameter is invalid.
bool SetHeaders(const Var& headers_string) {
return SetProperty(PP_URLREQUESTPROPERTY_HEADERS, headers_string);
}
/// SetStreamToFile() sets the
/// PP_URLREQUESTPROPERTY_STREAMTOFILE
(corresponding
/// to a bool of type PP_VARTYPE_BOOL
). The default of the
/// property is false. Set this value to true if you want to download the
/// data to a file. Use URL_Loader::FinishStreamingToFile() to complete
/// the download.
///
/// @param[in] enable A bool
containing the property value.
///
/// @return true if successful, false if the parameter is invalid.
bool SetStreamToFile(bool enable) {
return SetProperty(PP_URLREQUESTPROPERTY_STREAMTOFILE, enable);
}
/// SetFollowRedirects() sets the
/// PP_URLREQUESTPROPERTY_FOLLOWREDIRECT
(corresponding
/// to a bool of type PP_VARTYPE_BOOL
). The default of the
/// property is true. Set this value to false if you want to use
/// URLLoader::FollowRedirects() to follow the redirects only after examining
/// redirect headers.
///
/// @param[in] enable A bool
containing the property value.
///
/// @return true if successful, false if the parameter is invalid.
bool SetFollowRedirects(bool enable) {
return SetProperty(PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS, enable);
}
/// SetRecordDownloadProgress() sets the
/// PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGESS
/// (corresponding to a bool of type PP_VARTYPE_BOOL
). The
/// default of the property is false. Set this value to true if you want to
/// be able to poll the download progress using
/// URLLoader::GetDownloadProgress().
///
/// @param[in] enable A bool
containing the property value.
////
/// @return true if successful, false if the parameter is invalid.
bool SetRecordDownloadProgress(bool enable) {
return SetProperty(PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS, enable);
}
/// SetRecordUploadProgress() sets the
/// PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS
/// (corresponding to a bool of type PP_VARTYPE_BOOL
). The
/// default of the property is false. Set this value to true if you want to
/// be able to poll the upload progress using URLLoader::GetUploadProgress().
///
/// @param[in] enable A bool
containing the property value.
///
/// @return true if successful, false if the parameter is invalid.
bool SetRecordUploadProgress(bool enable) {
return SetProperty(PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS, enable);
}
/// SetCustomReferrerURL() sets the
/// PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL
/// (corresponding to a string of type PP_VARTYPE_STRING
or
/// might be set to undefined as PP_VARTYPE_UNDEFINED
). 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.
///
/// @param[in] url A Var
containing the property value.
///
/// @return true if successful, false if the parameter is invalid.
bool SetCustomReferrerURL(const Var& url) {
return SetProperty(PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL, url);
}
/// SetAllowCrossOriginRequests() sets the
/// PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS
/// (corresponding to a bool of type PP_VARTYPE_BOOL
). The
/// default of the property is 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.
///
/// @param[in] enable A bool
containing the property value.
///
/// @return true if successful, false if the parameter is invalid.
bool SetAllowCrossOriginRequests(bool enable) {
return SetProperty(PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS, enable);
}
/// SetAllowCredentials() sets the
/// PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS
/// (corresponding to a bool of type PP_VARTYPE_BOOL
). The
/// default of the property is 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.
///
/// @param[in] enable A bool
containing the property value.
///
/// @return true if successful, false if the parameter is invalid.
bool SetAllowCredentials(bool enable) {
return SetProperty(PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS, enable);
}
/// SetCustomContentTransferEncoding() sets the
/// PP_URLREQUESTPROPERTY_CUSTOMCONTENTTRANSFERENCODING
/// (corresponding to a string of type PP_VARTYPE_STRING
or
/// might be set to undefined as PP_VARTYPE_UNDEFINED
). 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.
///
/// @param[in] content_transfer_encoding A Var
containing the
/// property value. To use the default content transfer encoding, set
/// content_transfer_encoding
to an undefined Var
.
///
/// @return true if successful, false if the parameter is invalid.
bool SetCustomContentTransferEncoding(const Var& content_transfer_encoding) {
return SetProperty(PP_URLREQUESTPROPERTY_CUSTOMCONTENTTRANSFERENCODING,
content_transfer_encoding);
}
/// SetPrefetchBufferUpperThreshold() sets the
/// PP_URLREQUESTPROPERTY_PREFETCHBUFFERUPPERTHRESHOLD
/// (corresponding to a integer of type PP_VARTYPE_INT32
). The
/// 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.
///
/// @param[in] size An int32_t containing the property value.
///
/// @return true if successful, false if the parameter is invalid.
bool SetPrefetchBufferUpperThreshold(int32_t size) {
return SetProperty(PP_URLREQUESTPROPERTY_PREFETCHBUFFERUPPERTHRESHOLD,
size);
}
/// SetPrefetchBufferLowerThreshold() sets the
/// PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERTHRESHOLD
/// (corresponding to a integer of type PP_VARTYPE_INT32
). The
/// 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.
///
/// @param[in] size An int32_t containing the property value.
///
/// @return true if successful, false if the parameter is invalid.
bool SetPrefetchBufferLowerThreshold(int32_t size) {
return SetProperty(PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERTHRESHOLD,
size);
}
/// SetCustomUserAgent() sets the
/// PP_URLREQUESTPROPERTY_CUSTOMUSERAGENT
(corresponding to a
/// string of type PP_VARTYPE_STRING
or might be set to undefined
/// as PP_VARTYPE_UNDEFINED
). Set it to a string to set a custom
/// user-agent header (if empty, that header will be omitted), or to undefined
/// to use the default. Only loaders with universal access (only available on
/// trusted implementations) will accept URLRequestInfo
objects
/// that try to set a custom user agent; if given to a loader without
/// universal access, PP_ERROR_BADARGUMENT
will result.
///
/// @param[in] user_agent A Var
containing the property value. To
/// use the default user agent, set user_agent
to an undefined
/// Var
.
///
/// @return true if successful, false if the parameter is invalid.
bool SetCustomUserAgent(const Var& user_agent) {
return SetProperty(PP_URLREQUESTPROPERTY_CUSTOMUSERAGENT, user_agent);
}
};
} // namespace pp
#endif // PPAPI_CPP_URL_REQUEST_INFO_H_