import URLRequestHeader from "./URLRequestHeader";


declare namespace openfl.net {
	
	
	/**
	 * The URLRequest class captures all of the information in a single HTTP
	 * request. URLRequest objects are passed to the `load()` methods
	 * of the Loader, URLStream, and URLLoader classes, and to other loading
	 * operations, to initiate URL downloads. They are also passed to the
	 * `upload()` and `download()` methods of the
	 * FileReference class.
	 *
	 * A SWF file in the local-with-filesystem sandbox may not load data from,
	 * or provide data to, a resource that is in the network sandbox. 
	 *
	 * By default, the calling SWF file and the URL you load must be in the
	 * same domain. For example, a SWF file at www.adobe.com can load data only
	 * from sources that are also at www.adobe.com. To load data from a different
	 * domain, place a URL policy file on the server hosting the data.
	 *
	 *  However, in Adobe AIR, content in the application security sandbox
	 * (content installed with the AIR application) is not restricted by these
	 * security limitations. For content running in Adobe AIR, files in the
	 * application security sandbox can access URLs using any of the following URL
	 * schemes:
	 *
	 * 
	 *  * `http` and `https` 
	 *  * `file` 
	 *  * `app-storage` 
	 *  * `app` 
	 * 
	 *
	 * Content running in Adobe AIR that is not in the application security
	 * sandbox observes the same restrictions as content running in the browser
	 * (in Flash Player), and loading is governed by the content's domain and any
	 * permissions granted in URL policy files.
	 *
	 * For more information related to security, see the Flash Player Developer
	 * Center Topic: [Security](http://www.adobe.com/go/devnet_security_en).
	 */
	/*@:final*/ export class URLRequest {
		
		
		/**
		 * The MIME content type of the content in the the `data`
		 * property.
		 *
		 * The default value is
		 * `application/x-www-form-urlencoded`.
		 *
		 * **Note**:The `FileReference.upload()`,
		 * `FileReference.download()`, and `HTMLLoader.load()`
		 * methods do not support the `URLRequest.contentType`
		 * property.
		 *
		 * When sending a POST request, the values of the `contentType`
		 * and `data` properties must correspond properly. The value of
		 * the `contentType` property instructs servers on how to
		 * interpret the value of the `data` property. 
		 *
		 * 
		 *  * If the value of the `data` property is a URLVariables
		 * object, the value of `contentType` must be
		 * `application/x-www-form-urlencoded`. 
		 *  *  If the value of the `data` property is any other type,
		 * the value of `contentType` should indicate the type of the POST
		 * data that will be sent(which is the binary or string data contained in
		 * the value of the `data` property). 
		 *  * For `FileReference.upload()`, the Content-Type of the
		 * request is set automatically to `multipart/form-data`, and the
		 * value of the `contentType` property is ignored.
		 * 
		 *
		 *  In Flash Player 10 and later, if you use a multipart Content-Type(for
		 * example "multipart/form-data") that contains an upload(indicated by a
		 * "filename" parameter in a "content-disposition" header within the POST
		 * body), the POST operation is subject to the security rules applied to
		 * uploads:
		 *
		 * 
		 *  * The POST operation must be performed in response to a user-initiated
		 * action, such as a mouse click or key press.
		 *  * If the POST operation is cross-domain(the POST target is not on the
		 * same server as the SWF file that is sending the POST request), the target
		 * server must provide a URL policy file that permits cross-domain
		 * access.
		 * 
		 *
		 * Also, for any multipart Content-Type, the syntax must be valid
		 * (according to the RFC2046 standards). If the syntax appears to be invalid,
		 * the POST operation is subject to the security rules applied to
		 * uploads.
		 */
		contentType:string;
		
		/**
		 * An object containing data to be transmitted with the URL request.
		 *
		 * This property is used in conjunction with the `method`
		 * property. When the value of `method` is `GET`, the
		 * value of `data` is appended to the value of
		 * `URLRequest.url`, using HTTP query-string syntax. When the
		 * `method` value is `POST`(or any value other than
		 * `GET`), the value of `data` is transmitted in the
		 * body of the HTTP request.
		 *
		 * The URLRequest API offers binary `POST` support and support
		 * for URL-encoded variables, as well as support for strings. The data object
		 * can be a ByteArray, URLVariables, or String object.
		 *
		 * The way in which the data is used depends on the type of object
		 * used:
		 *
		 * 
		 *  * If the object is a ByteArray object, the binary data of the
		 * ByteArray object is used as `POST` data. For `GET`,
		 * data of ByteArray type is not supported. Also, data of ByteArray type is
		 * not supported for `FileReference.upload()` and
		 * `FileReference.download()`.
		 *  * If the object is a URLVariables object and the method is
		 * `POST`, the variables are encoded using
		 * _x-www-form-urlencoded_ format and the resulting string is used as
		 * `POST` data. An exception is a call to
		 * `FileReference.upload()`, in which the variables are sent as
		 * separate fields in a `multipart/form-data` post.
		 *  * If the object is a URLVariables object and the method is
		 * `GET`, the URLVariables object defines variables to be sent
		 * with the URLRequest object.
		 *  * Otherwise, the object is converted to a string, and the string is
		 * used as the `POST` or `GET` data.
		 * 
		 *
		 * This data is not sent until a method, such as
		 * `navigateToURL()` or `FileReference.upload()`, uses
		 * the URLRequest object.
		 *
		 * **Note**: The value of `contentType` must correspond to
		 * the type of data in the `data` property. See the note in the
		 * description of the `contentType` property.
		 */
		data:object;
		
		// #if flash
		// @:noCompletion @:dox(hide) digest:string;
		// #end
		
		followRedirects:boolean;
		
		idleTimeout:number;
		
		manageCookies:boolean;
		
		/**
		 * Controls the HTTP form submission method.
		 *
		 * For SWF content running in Flash Player(in the browser), this property
		 * is limited to GET or POST operations, and valid values are
		 * `URLRequestMethod.GET` or
		 * `URLRequestMethod.POST`.
		 *
		 * For content running in Adobe AIR, you can use any string value if the
		 * content is in the application security sandbox. Otherwise, as with content
		 * running in Flash Player, you are restricted to using GET or POST
		 * operations.
		 *
		 * For content running in Adobe AIR, when using the
		 * `navigateToURL()` function, the runtime treats a URLRequest
		 * that uses the POST method(one that has its `method` property
		 * set to `URLRequestMethod.POST`) as using the GET method.
		 *
		 * **Note:** If running in Flash Player and the referenced form has no
		 * body, Flash Player automatically uses a GET operation, even if the method
		 * is set to `URLRequestMethod.POST`. For this reason, it is
		 * recommended to always include a "dummy" body to ensure that the correct
		 * method is used.
		 * 
		 * @default URLRequestMethod.GET
		 * @throws ArgumentError If the `value` parameter is not
		 *                       `URLRequestMethod.GET` or
		 *                       `URLRequestMethod.POST`.
		 */
		method:string;
		
		/**
		 * The array of HTTP request headers to be appended to the HTTP request. The
		 * array is composed of URLRequestHeader objects. Each object in the array
		 * must be a URLRequestHeader object that contains a name string and a value
		 * string, as follows:
		 *
		 * Flash Player and the AIR runtime impose certain restrictions on request
		 * headers; for more information, see the URLRequestHeader class
		 * description.
		 *
		 * Not all methods that accept URLRequest parameters support the
		 * `requestHeaders` property, consult the documentation for the
		 * method you are calling. For example, the
		 * `FileReference.upload()` and
		 * `FileReference.download()` methods do not support the
		 * `URLRequest.requestHeaders` property.
		 *
		 * Due to browser limitations, custom HTTP request headers are only
		 * supported for `POST` requests, not for `GET`
		 * requests.
		 */
		requestHeaders:Array<URLRequestHeader>;
		
		/**
		 * The URL to be requested.
		 *
		 * Be sure to encode any characters that are either described as unsafe in
		 * the Uniform Resource Locator specification(see
		 * http://www.faqs.org/rfcs/rfc1738.html) or that are reserved in the URL
		 * scheme of the URLRequest object(when not used for their reserved
		 * purpose). For example, use `"%25"` for the percent(%) symbol
		 * and `"%23"` for the number sign(#), as in
		 * `"http://www.example.com/orderForm.cfm?item=%23B-3&discount=50%25"`.
		 *
		 * By default, the URL must be in the same domain as the calling file,
		 * unless the content is running in the Adobe AIR application security
		 * sandbox. If you need to load data from a different domain, put a URL
		 * policy file on the server that is hosting the data. For more information,
		 * see the description of the URLRequest class.
		 *
		 * For content running in Adobe AIR, files in the application security
		 * sandobx  -  files installed with the AIR application  -  can access URLs
		 * using any of the following URL schemes:
		 *
		 * 
		 *  * `http` and `https` 
		 *  * `file` 
		 *  * `app-storage` 
		 *  * `app` 
		 * 
		 *
		 * **Note:** IPv6(Internet Protocol version 6) is supported in AIR and
		 * in Flash Player 9.0.115.0 and later. IPv6 is a version of Internet
		 * Protocol that supports 128-bit addresses(an improvement on the earlier
		 * IPv4 protocol that supports 32-bit addresses). You might need to activate
		 * IPv6 on your networking interfaces. For more information, see the Help for
		 * the operating system hosting the data. If IPv6 is supported on the hosting
		 * system, you can specify numeric IPv6 literal addresses in URLs enclosed in
		 * brackets([]), as in the following. 
		 * `rtmp://[2001:db8:ccc3:ffff:0:444d:555e:666f]:1935/test`
		 */
		url:string;
		
		userAgent:string;
		
		
		/**
		 * Creates a URLRequest object. If `System.useCodePage` is
		 * `true`, the request is encoded using the system code page,
		 * rather than Unicode. If `System.useCodePage` is
		 * `false`, the request is encoded using Unicode, rather than the
		 * system code page.
		 * 
		 * @param url The URL to be requested. You can set the URL later by using the
		 *            `url` property.
		 */
		constructor (url?:string);
		
		
		// #if flash
		// @:noCompletion @:dox(hide) public function useRedirectedURL (sourceRequest:URLRequest, wholeURL:boolean = false, pattern:Dynamic = null, replace:string = null):Void;
		// #end
		
		
	}
	
	
}


export default openfl.net.URLRequest;