ppb_url_loader_thunk.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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#include "ppapi/c/pp_completion_callback.h" 6#include "ppapi/c/pp_errors.h" 7#include "ppapi/shared_impl/tracked_callback.h" 8#include "ppapi/thunk/enter.h" 9#include "ppapi/thunk/thunk.h" 10#include "ppapi/thunk/ppb_url_loader_api.h" 11#include "ppapi/thunk/resource_creation_api.h" 12 13namespace ppapi { 14namespace thunk { 15 16namespace { 17 18typedef EnterResource<PPB_URLLoader_API> EnterURLLoader; 19 20PP_Resource Create(PP_Instance instance) { 21 EnterResourceCreation enter(instance); 22 if (enter.failed()) 23 return 0; 24 return enter.functions()->CreateURLLoader(instance); 25} 26 27PP_Bool IsURLLoader(PP_Resource resource) { 28 EnterURLLoader enter(resource, false); 29 return PP_FromBool(enter.succeeded()); 30} 31 32int32_t Open(PP_Resource loader, 33 PP_Resource request_id, 34 PP_CompletionCallback callback) { 35 EnterURLLoader enter(loader, callback, true); 36 if (enter.failed()) 37 return enter.retval(); 38 return enter.SetResult(enter.object()->Open(request_id, enter.callback())); 39} 40 41int32_t FollowRedirect(PP_Resource loader, 42 PP_CompletionCallback callback) { 43 EnterURLLoader enter(loader, callback, true); 44 if (enter.failed()) 45 return enter.retval(); 46 return enter.SetResult(enter.object()->FollowRedirect(enter.callback())); 47} 48 49PP_Bool GetUploadProgress(PP_Resource loader, 50 int64_t* bytes_sent, 51 int64_t* total_bytes_to_be_sent) { 52 EnterURLLoader enter(loader, true); 53 if (enter.failed()) { 54 *bytes_sent = 0; 55 *total_bytes_to_be_sent = 0; 56 return PP_FALSE; 57 } 58 return enter.object()->GetUploadProgress(bytes_sent, 59 total_bytes_to_be_sent); 60} 61 62PP_Bool GetDownloadProgress(PP_Resource loader, 63 int64_t* bytes_received, 64 int64_t* total_bytes_to_be_received) { 65 EnterURLLoader enter(loader, true); 66 if (enter.failed()) { 67 *bytes_received = 0; 68 *total_bytes_to_be_received = 0; 69 return PP_FALSE; 70 } 71 return enter.object()->GetDownloadProgress(bytes_received, 72 total_bytes_to_be_received); 73} 74 75PP_Resource GetResponseInfo(PP_Resource loader) { 76 EnterURLLoader enter(loader, true); 77 if (enter.failed()) 78 return 0; 79 return enter.object()->GetResponseInfo(); 80} 81 82int32_t ReadResponseBody(PP_Resource loader, 83 void* buffer, 84 int32_t bytes_to_read, 85 PP_CompletionCallback callback) { 86 EnterURLLoader enter(loader, callback, true); 87 if (enter.failed()) 88 return enter.retval(); 89 return enter.SetResult(enter.object()->ReadResponseBody(buffer, bytes_to_read, 90 enter.callback())); 91} 92 93int32_t FinishStreamingToFile(PP_Resource loader, 94 PP_CompletionCallback callback) { 95 EnterURLLoader enter(loader, callback, true); 96 if (enter.failed()) 97 return enter.retval(); 98 return enter.SetResult( 99 enter.object()->FinishStreamingToFile(enter.callback())); 100} 101 102void Close(PP_Resource loader) { 103 EnterURLLoader enter(loader, true); 104 if (enter.succeeded()) 105 enter.object()->Close(); 106} 107 108void GrantUniversalAccess(PP_Resource loader) { 109 EnterURLLoader enter(loader, true); 110 if (enter.succeeded()) 111 enter.object()->GrantUniversalAccess(); 112} 113 114void SetStatusCallback(PP_Resource loader, 115 PP_URLLoaderTrusted_StatusCallback cb) { 116 EnterURLLoader enter(loader, true); 117 if (enter.succeeded()) 118 enter.object()->SetStatusCallback(cb); 119} 120 121const PPB_URLLoader g_ppb_urlloader_thunk = { 122 &Create, 123 &IsURLLoader, 124 &Open, 125 &FollowRedirect, 126 &GetUploadProgress, 127 &GetDownloadProgress, 128 &GetResponseInfo, 129 &ReadResponseBody, 130 &FinishStreamingToFile, 131 &Close 132}; 133 134const PPB_URLLoaderTrusted g_ppb_urlloader_trusted_thunk = { 135 &GrantUniversalAccess, 136 &SetStatusCallback 137}; 138 139} // namespace 140 141const PPB_URLLoader_1_0* GetPPB_URLLoader_1_0_Thunk() { 142 return &g_ppb_urlloader_thunk; 143} 144 145const PPB_URLLoaderTrusted_0_3* GetPPB_URLLoaderTrusted_0_3_Thunk() { 146 return &g_ppb_urlloader_trusted_thunk; 147} 148 149} // namespace thunk 150} // namespace ppapi 151