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