ppb_url_loader_thunk.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// From ppb_url_loader.idl modified Tue Aug 20 08:13:36 2013. 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string.h> 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_completion_callback.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/ppb_url_loader.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/tracked_callback.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/enter.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/thunk/ppapi_thunk_export.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/ppb_url_loader_api.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace thunk { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource Create(PP_Instance instance) { 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_URLLoader::Create()"; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterResourceCreation enter(instance); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.functions()->CreateURLLoader(instance); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsURLLoader(PP_Resource resource) { 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_URLLoader::IsURLLoader()"; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterResource<PPB_URLLoader_API> enter(resource, false); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FromBool(enter.succeeded()); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t Open(PP_Resource loader, 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Resource request_info, 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct PP_CompletionCallback callback) { 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_URLLoader::Open()"; 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterResource<PPB_URLLoader_API> enter(loader, callback, true); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.retval(); 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return enter.SetResult(enter.object()->Open(request_info, enter.callback())); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t FollowRedirect(PP_Resource loader, 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct PP_CompletionCallback callback) { 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_URLLoader::FollowRedirect()"; 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterResource<PPB_URLLoader_API> enter(loader, callback, true); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.retval(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.SetResult(enter.object()->FollowRedirect(enter.callback())); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool GetUploadProgress(PP_Resource loader, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64_t* bytes_sent, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64_t* total_bytes_to_be_sent) { 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_URLLoader::GetUploadProgress()"; 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterResource<PPB_URLLoader_API> enter(loader, true); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) { 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) memset(bytes_sent, 0, sizeof(*bytes_sent)); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) memset(total_bytes_to_be_sent, 0, sizeof(*total_bytes_to_be_sent)); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FALSE; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return enter.object()->GetUploadProgress(bytes_sent, total_bytes_to_be_sent); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool GetDownloadProgress(PP_Resource loader, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64_t* bytes_received, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64_t* total_bytes_to_be_received) { 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_URLLoader::GetDownloadProgress()"; 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterResource<PPB_URLLoader_API> enter(loader, true); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) { 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) memset(bytes_received, 0, sizeof(*bytes_received)); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) memset(total_bytes_to_be_received, 0, sizeof(*total_bytes_to_be_received)); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FALSE; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->GetDownloadProgress(bytes_received, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) total_bytes_to_be_received); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource GetResponseInfo(PP_Resource loader) { 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_URLLoader::GetResponseInfo()"; 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterResource<PPB_URLLoader_API> enter(loader, true); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.object()->GetResponseInfo(); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t ReadResponseBody(PP_Resource loader, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* buffer, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t bytes_to_read, 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct PP_CompletionCallback callback) { 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_URLLoader::ReadResponseBody()"; 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterResource<PPB_URLLoader_API> enter(loader, callback, true); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.retval(); 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return enter.SetResult(enter.object()->ReadResponseBody(buffer, 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bytes_to_read, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enter.callback())); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t FinishStreamingToFile(PP_Resource loader, 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct PP_CompletionCallback callback) { 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_URLLoader::FinishStreamingToFile()"; 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterResource<PPB_URLLoader_API> enter(loader, callback, true); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enter.failed()) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enter.retval(); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return enter.SetResult(enter.object()->FinishStreamingToFile( 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enter.callback())); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Close(PP_Resource loader) { 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(4) << "PPB_URLLoader::Close()"; 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EnterResource<PPB_URLLoader_API> enter(loader, true); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (enter.failed()) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enter.object()->Close(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const PPB_URLLoader_1_0 g_ppb_urlloader_thunk_1_0 = { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &Create, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &IsURLLoader, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &Open, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &FollowRedirect, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetUploadProgress, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetDownloadProgress, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &GetResponseInfo, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &ReadResponseBody, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &FinishStreamingToFile, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &Close 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PPAPI_THUNK_EXPORT const PPB_URLLoader_1_0* GetPPB_URLLoader_1_0_Thunk() { 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return &g_ppb_urlloader_thunk_1_0; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace thunk 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ppapi 142