| 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 |