| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2010 The Native Client Authors. All rights reserved. | 2  * Copyright 2010 The Native Client Authors. All rights reserved. | 
| 3  * Use of this source code is governed by a BSD-style license that can | 3  * Use of this source code is governed by a BSD-style license that can | 
| 4  * be found in the LICENSE file. | 4  * be found in the LICENSE file. | 
| 5  */ | 5  */ | 
| 6 | 6 | 
| 7 #include "native_client/src/shared/ppapi_proxy/plugin_url_loader.h" | 7 #include "native_client/src/shared/ppapi_proxy/plugin_ppb_url_loader.h" | 
| 8 | 8 | 
| 9 #include <stdio.h> | 9 #include <stdio.h> | 
| 10 #include <string.h> | 10 #include <string.h> | 
| 11 #include "srpcgen/ppb_rpc.h" | 11 #include "native_client/src/include/nacl_macros.h" | 
| 12 #include "native_client/src/include/portability.h" | 12 #include "native_client/src/include/portability.h" | 
|  | 13 #include "native_client/src/shared/ppapi_proxy/plugin_callback.h" | 
| 13 #include "native_client/src/shared/ppapi_proxy/plugin_globals.h" | 14 #include "native_client/src/shared/ppapi_proxy/plugin_globals.h" | 
| 14 #include "native_client/src/shared/ppapi_proxy/utility.h" | 15 #include "native_client/src/shared/ppapi_proxy/utility.h" | 
| 15 #include "native_client/src/shared/srpc/nacl_srpc.h" | 16 #include "native_client/src/shared/srpc/nacl_srpc.h" | 
|  | 17 #include "ppapi/c/pp_completion_callback.h" | 
| 16 #include "ppapi/c/pp_errors.h" | 18 #include "ppapi/c/pp_errors.h" | 
| 17 #include "ppapi/c/pp_completion_callback.h" |  | 
| 18 #include "ppapi/c/ppb_url_loader.h" | 19 #include "ppapi/c/ppb_url_loader.h" | 
|  | 20 #include "srpcgen/ppb_rpc.h" | 
| 19 | 21 | 
| 20 namespace ppapi_proxy { | 22 namespace ppapi_proxy { | 
| 21 | 23 | 
| 22 namespace { | 24 namespace { | 
|  | 25 | 
| 23 PP_Resource Create(PP_Instance instance) { | 26 PP_Resource Create(PP_Instance instance) { | 
| 24   UNREFERENCED_PARAMETER(instance); | 27   DebugPrintf("PPB_URLLoader::Create: instance=%"NACL_PRIx64"\n", instance); | 
|  | 28 | 
|  | 29   PP_Resource resource; | 
|  | 30   NaClSrpcError srpc_result = | 
|  | 31       PpbURLLoaderRpcClient::PPB_URLLoader_Create( | 
|  | 32           GetMainSrpcChannel(), instance, &resource); | 
|  | 33   DebugPrintf("PPB_URLLoader::Create: %s\n", NaClSrpcErrorString(srpc_result)); | 
|  | 34 | 
|  | 35   if (srpc_result == NACL_SRPC_RESULT_OK) | 
|  | 36     return resource; | 
| 25   return kInvalidResourceId; | 37   return kInvalidResourceId; | 
| 26 } | 38 } | 
| 27 | 39 | 
| 28 PP_Bool IsURLLoader(PP_Resource resource) { | 40 PP_Bool IsURLLoader(PP_Resource resource) { | 
| 29   UNREFERENCED_PARAMETER(resource); | 41   DebugPrintf("PPB_URLLoader::IsURLLoader: resource=%"NACL_PRIx64"\n", | 
|  | 42               resource); | 
|  | 43 | 
|  | 44   int32_t is_url_loader; | 
|  | 45   NaClSrpcError srpc_result = | 
|  | 46       PpbURLLoaderRpcClient::PPB_URLLoader_IsURLLoader( | 
|  | 47           GetMainSrpcChannel(), resource, &is_url_loader); | 
|  | 48   DebugPrintf("PPB_URLLoader::IsURLLoader: %s\n", | 
|  | 49               NaClSrpcErrorString(srpc_result)); | 
|  | 50 | 
|  | 51   if (srpc_result == NACL_SRPC_RESULT_OK && is_url_loader) | 
|  | 52     return PP_TRUE; | 
| 30   return PP_FALSE; | 53   return PP_FALSE; | 
| 31 } | 54 } | 
| 32 | 55 | 
| 33 int32_t Open(PP_Resource loader, | 56 int32_t Open(PP_Resource loader, | 
| 34              PP_Resource request_info, | 57              PP_Resource request, | 
| 35              struct PP_CompletionCallback callback) { | 58              struct PP_CompletionCallback callback) { | 
| 36   UNREFERENCED_PARAMETER(loader); | 59   DebugPrintf("PPB_URLLoader::Open: loader=%"NACL_PRIx64"\n", loader); | 
| 37   UNREFERENCED_PARAMETER(request_info); | 60 | 
| 38   UNREFERENCED_PARAMETER(callback); | 61   int32_t callback_id = | 
| 39   return PP_ERROR_BADRESOURCE; | 62       CompletionCallbackTable::Get()->AddCallback(callback); | 
|  | 63   if (callback_id == 0)  // Just like Chrome, for now disallow blocking calls. | 
|  | 64     return PP_ERROR_BADARGUMENT; | 
|  | 65 | 
|  | 66   int32_t pp_error; | 
|  | 67   NaClSrpcError srpc_result = | 
|  | 68       PpbURLLoaderRpcClient::PPB_URLLoader_Open( | 
|  | 69           GetMainSrpcChannel(), loader, request, callback_id, &pp_error); | 
|  | 70   DebugPrintf("PPB_URLLoader::Open: %s\n", NaClSrpcErrorString(srpc_result)); | 
|  | 71 | 
|  | 72   if (srpc_result == NACL_SRPC_RESULT_OK) | 
|  | 73     return pp_error; | 
|  | 74   return PP_ERROR_FAILED; | 
| 40 } | 75 } | 
| 41 | 76 | 
| 42 int32_t FollowRedirect(PP_Resource loader, | 77 int32_t FollowRedirect(PP_Resource loader, | 
| 43                        struct PP_CompletionCallback callback) { | 78                        struct PP_CompletionCallback callback) { | 
| 44   UNREFERENCED_PARAMETER(loader); | 79   DebugPrintf("PPB_URLLoader::FollowRedirect: loader=%"NACL_PRIx64"\n", loader); | 
| 45   UNREFERENCED_PARAMETER(callback); | 80   NACL_UNTESTED(); | 
| 46   return PP_ERROR_BADRESOURCE; | 81 | 
|  | 82   int32_t callback_id = | 
|  | 83       CompletionCallbackTable::Get()->AddCallback(callback); | 
|  | 84   if (callback_id == 0)  // Just like Chrome, for now disallow blocking calls. | 
|  | 85     return PP_ERROR_BADARGUMENT; | 
|  | 86 | 
|  | 87   int32_t pp_error; | 
|  | 88   NaClSrpcError srpc_result = | 
|  | 89       PpbURLLoaderRpcClient::PPB_URLLoader_FollowRedirect( | 
|  | 90           GetMainSrpcChannel(), loader, callback_id, &pp_error); | 
|  | 91   DebugPrintf("PPB_URLLoader::FollowRedirect: %s\n", | 
|  | 92               NaClSrpcErrorString(srpc_result)); | 
|  | 93 | 
|  | 94   if (srpc_result == NACL_SRPC_RESULT_OK) | 
|  | 95     return pp_error; | 
|  | 96   return PP_ERROR_FAILED; | 
| 47 } | 97 } | 
| 48 | 98 | 
| 49 PP_Bool GetUploadProgress(PP_Resource loader, | 99 PP_Bool GetUploadProgress(PP_Resource loader, | 
| 50                        int64_t* bytes_sent, | 100                           int64_t* bytes_sent, | 
| 51                        int64_t* total_bytes_to_be_sent) { | 101                           int64_t* total_bytes_to_be_sent) { | 
| 52   UNREFERENCED_PARAMETER(loader); | 102   DebugPrintf("PPB_URLLoader::GetUploadProgress: loader=%"NACL_PRIx64"\n", | 
| 53   UNREFERENCED_PARAMETER(bytes_sent); | 103               loader); | 
| 54   UNREFERENCED_PARAMETER(total_bytes_to_be_sent); | 104   NACL_UNTESTED(); | 
|  | 105 | 
|  | 106   int32_t success; | 
|  | 107   NaClSrpcError srpc_result = | 
|  | 108       PpbURLLoaderRpcClient::PPB_URLLoader_GetUploadProgress( | 
|  | 109           GetMainSrpcChannel(), | 
|  | 110           loader, | 
|  | 111           bytes_sent, | 
|  | 112           total_bytes_to_be_sent, | 
|  | 113           &success); | 
|  | 114  DebugPrintf("PPB_URLLoader::GetUploadProgress: %s\n", | 
|  | 115              NaClSrpcErrorString(srpc_result)); | 
|  | 116 | 
|  | 117   if (srpc_result == NACL_SRPC_RESULT_OK && success) | 
|  | 118     return PP_TRUE; | 
| 55   return PP_FALSE; | 119   return PP_FALSE; | 
| 56 } | 120 } | 
| 57 | 121 | 
| 58 PP_Bool GetDownloadProgress(PP_Resource loader, | 122 PP_Bool GetDownloadProgress(PP_Resource loader, | 
| 59                          int64_t* bytes_received, | 123                             int64_t* bytes_received, | 
| 60                          int64_t* total_bytes_to_be_received) { | 124                             int64_t* total_bytes_to_be_received) { | 
| 61   UNREFERENCED_PARAMETER(loader); | 125   DebugPrintf("PPB_URLLoader::GetDownloadProgress: loader=%"NACL_PRIx64"\n", | 
| 62   UNREFERENCED_PARAMETER(bytes_received); | 126               loader); | 
| 63   UNREFERENCED_PARAMETER(total_bytes_to_be_received); | 127   NACL_UNTESTED(); | 
|  | 128 | 
|  | 129   int32_t success; | 
|  | 130   NaClSrpcError srpc_result = | 
|  | 131       PpbURLLoaderRpcClient::PPB_URLLoader_GetDownloadProgress( | 
|  | 132           GetMainSrpcChannel(), | 
|  | 133           loader, | 
|  | 134           bytes_received, | 
|  | 135           total_bytes_to_be_received, | 
|  | 136           &success); | 
|  | 137  DebugPrintf("PPB_URLLoader::GetDownloadProgress: %s\n", | 
|  | 138               NaClSrpcErrorString(srpc_result)); | 
|  | 139 | 
|  | 140   if (srpc_result == NACL_SRPC_RESULT_OK && success) | 
|  | 141     return PP_TRUE; | 
| 64   return PP_FALSE; | 142   return PP_FALSE; | 
| 65 } | 143 } | 
| 66 | 144 | 
| 67 PP_Resource GetResponseInfo(PP_Resource loader) { | 145 PP_Resource GetResponseInfo(PP_Resource loader) { | 
| 68   UNREFERENCED_PARAMETER(loader); | 146   DebugPrintf("PPB_URLLoader::GetResponseInfo: loader=%"NACL_PRIx64"\n", | 
|  | 147               loader); | 
|  | 148 | 
|  | 149   PP_Resource response; | 
|  | 150   NaClSrpcError srpc_result = | 
|  | 151       PpbURLLoaderRpcClient::PPB_URLLoader_GetResponseInfo( | 
|  | 152           GetMainSrpcChannel(), | 
|  | 153           loader, | 
|  | 154           &response); | 
|  | 155 | 
|  | 156   if (srpc_result == NACL_SRPC_RESULT_OK) | 
|  | 157     return response; | 
| 69   return kInvalidResourceId; | 158   return kInvalidResourceId; | 
| 70 } | 159 } | 
| 71 | 160 | 
| 72 int32_t ReadResponseBody(PP_Resource loader, | 161 int32_t ReadResponseBody(PP_Resource loader, | 
| 73                          char* buffer, | 162                          char* buffer, | 
| 74                          int32_t bytes_to_read, | 163                          int32_t bytes_to_read, | 
| 75                          struct PP_CompletionCallback callback) { | 164                          struct PP_CompletionCallback callback) { | 
| 76   UNREFERENCED_PARAMETER(loader); | 165   DebugPrintf("PPB_URLLoader::ReadResponseBody: loader=%"NACL_PRIx64"\n", | 
| 77   UNREFERENCED_PARAMETER(buffer); | 166               loader); | 
| 78   UNREFERENCED_PARAMETER(bytes_to_read); | 167   if (bytes_to_read < 0) | 
| 79   UNREFERENCED_PARAMETER(callback); | 168     bytes_to_read = 0; | 
| 80   return PP_ERROR_BADRESOURCE; | 169   nacl_abi_size_t buffer_size = bytes_to_read; | 
|  | 170 | 
|  | 171   int32_t callback_id = | 
|  | 172       CompletionCallbackTable::Get()->AddCallback(callback, buffer); | 
|  | 173   if (callback_id == 0)  // Just like Chrome, for now disallow blocking calls. | 
|  | 174     return PP_ERROR_BADARGUMENT; | 
|  | 175 | 
|  | 176   int32_t pp_error_or_bytes; | 
|  | 177   NaClSrpcError srpc_result = | 
|  | 178       PpbURLLoaderRpcClient::PPB_URLLoader_ReadResponseBody( | 
|  | 179           GetMainSrpcChannel(), | 
|  | 180           loader, | 
|  | 181           bytes_to_read, | 
|  | 182           callback_id, | 
|  | 183           &buffer_size, | 
|  | 184           buffer, | 
|  | 185           &pp_error_or_bytes); | 
|  | 186   DebugPrintf("PPB_URLLoader::ReadResponseBody: %s\n", | 
|  | 187               NaClSrpcErrorString(srpc_result)); | 
|  | 188 | 
|  | 189   if (srpc_result == NACL_SRPC_RESULT_OK) | 
|  | 190     return pp_error_or_bytes; | 
|  | 191   return PP_ERROR_FAILED; | 
| 81 } | 192 } | 
| 82 | 193 | 
| 83 int32_t FinishStreamingToFile(PP_Resource loader, | 194 int32_t FinishStreamingToFile(PP_Resource loader, | 
| 84                               struct PP_CompletionCallback callback) { | 195                               struct PP_CompletionCallback callback) { | 
| 85   UNREFERENCED_PARAMETER(loader); | 196   DebugPrintf("PPB_URLLoader::FinishStreamingToFile: loader=%"NACL_PRIx64"\n", | 
| 86   UNREFERENCED_PARAMETER(callback); | 197               loader); | 
| 87   return PP_ERROR_BADRESOURCE; | 198 | 
|  | 199   int32_t callback_id = | 
|  | 200       CompletionCallbackTable::Get()->AddCallback(callback); | 
|  | 201   if (callback_id == 0)  // Just like Chrome, for now disallow blocking calls. | 
|  | 202     return PP_ERROR_BADARGUMENT; | 
|  | 203 | 
|  | 204   int32_t pp_error; | 
|  | 205   NaClSrpcError srpc_result = | 
|  | 206       PpbURLLoaderRpcClient::PPB_URLLoader_FinishStreamingToFile( | 
|  | 207           GetMainSrpcChannel(), loader, callback_id, &pp_error); | 
|  | 208 | 
|  | 209   if (srpc_result == NACL_SRPC_RESULT_OK) | 
|  | 210     return pp_error; | 
|  | 211   return PP_ERROR_FAILED; | 
| 88 } | 212 } | 
| 89 | 213 | 
| 90 void Close(PP_Resource loader) { | 214 void Close(PP_Resource loader) { | 
| 91   UNREFERENCED_PARAMETER(loader); | 215   DebugPrintf("PPB_URLLoader::Close: loader=%"NACL_PRIx64"\n", loader); | 
|  | 216   NACL_UNTESTED(); | 
|  | 217 | 
|  | 218   NaClSrpcError srpc_result = | 
|  | 219       PpbURLLoaderRpcClient::PPB_URLLoader_Close( | 
|  | 220           GetMainSrpcChannel(), loader); | 
|  | 221   DebugPrintf("PPB_URLLoader::Close: %s\n", NaClSrpcErrorString(srpc_result)); | 
| 92 } | 222 } | 
|  | 223 | 
| 93 }  // namespace | 224 }  // namespace | 
| 94 | 225 | 
| 95 const PPB_URLLoader* PluginURLLoader::GetInterface() { | 226 const PPB_URLLoader* PluginURLLoader::GetInterface() { | 
| 96   static const PPB_URLLoader intf = { | 227   static const PPB_URLLoader url_loader_interface = { | 
| 97     Create, | 228     Create, | 
| 98     IsURLLoader, | 229     IsURLLoader, | 
| 99     Open, | 230     Open, | 
| 100     FollowRedirect, | 231     FollowRedirect, | 
| 101     GetUploadProgress, | 232     GetUploadProgress, | 
| 102     GetDownloadProgress, | 233     GetDownloadProgress, | 
| 103     GetResponseInfo, | 234     GetResponseInfo, | 
| 104     ReadResponseBody, | 235     ReadResponseBody, | 
| 105     FinishStreamingToFile, | 236     FinishStreamingToFile, | 
| 106     Close, | 237     Close, | 
| 107   }; | 238   }; | 
| 108   return &intf; | 239   return &url_loader_interface; | 
| 109 } | 240 } | 
| 110 | 241 | 
| 111 }  // namespace ppapi_proxy | 242 }  // namespace ppapi_proxy | 
| OLD | NEW | 
|---|