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.
5 // From ppb_url_loader.idl modified Wed Apr 17 11:16:00 2013.
9 #include "ppapi/c/pp_completion_callback.h"
10 #include "ppapi/c/pp_errors.h"
11 #include "ppapi/c/ppb_url_loader.h"
12 #include "ppapi/shared_impl/tracked_callback.h"
13 #include "ppapi/thunk/enter.h"
14 #include "ppapi/thunk/ppb_instance_api.h"
15 #include "ppapi/thunk/ppb_url_loader_api.h"
16 #include "ppapi/thunk/resource_creation_api.h"
17 #include "ppapi/thunk/thunk.h"
24 PP_Resource
Create(PP_Instance instance
) {
25 VLOG(4) << "PPB_URLLoader::Create()";
26 EnterResourceCreation
enter(instance
);
29 return enter
.functions()->CreateURLLoader(instance
);
32 PP_Bool
IsURLLoader(PP_Resource resource
) {
33 VLOG(4) << "PPB_URLLoader::IsURLLoader()";
34 EnterResource
<PPB_URLLoader_API
> enter(resource
, false);
35 return PP_FromBool(enter
.succeeded());
38 int32_t Open(PP_Resource loader
,
39 PP_Resource request_info
,
40 struct PP_CompletionCallback callback
) {
41 VLOG(4) << "PPB_URLLoader::Open()";
42 EnterResource
<PPB_URLLoader_API
> enter(loader
, callback
, true);
44 return enter
.retval();
45 return enter
.SetResult(enter
.object()->Open(request_info
, enter
.callback()));
48 int32_t FollowRedirect(PP_Resource loader
,
49 struct PP_CompletionCallback callback
) {
50 VLOG(4) << "PPB_URLLoader::FollowRedirect()";
51 EnterResource
<PPB_URLLoader_API
> enter(loader
, callback
, true);
53 return enter
.retval();
54 return enter
.SetResult(enter
.object()->FollowRedirect(enter
.callback()));
57 PP_Bool
GetUploadProgress(PP_Resource loader
,
59 int64_t* total_bytes_to_be_sent
) {
60 VLOG(4) << "PPB_URLLoader::GetUploadProgress()";
61 EnterResource
<PPB_URLLoader_API
> enter(loader
, true);
63 memset(bytes_sent
, 0, sizeof(*bytes_sent
));
64 memset(total_bytes_to_be_sent
, 0, sizeof(*total_bytes_to_be_sent
));
67 return enter
.object()->GetUploadProgress(bytes_sent
, total_bytes_to_be_sent
);
70 PP_Bool
GetDownloadProgress(PP_Resource loader
,
71 int64_t* bytes_received
,
72 int64_t* total_bytes_to_be_received
) {
73 VLOG(4) << "PPB_URLLoader::GetDownloadProgress()";
74 EnterResource
<PPB_URLLoader_API
> enter(loader
, true);
76 memset(bytes_received
, 0, sizeof(*bytes_received
));
77 memset(total_bytes_to_be_received
, 0, sizeof(*total_bytes_to_be_received
));
80 return enter
.object()->GetDownloadProgress(bytes_received
,
81 total_bytes_to_be_received
);
84 PP_Resource
GetResponseInfo(PP_Resource loader
) {
85 VLOG(4) << "PPB_URLLoader::GetResponseInfo()";
86 EnterResource
<PPB_URLLoader_API
> enter(loader
, true);
89 return enter
.object()->GetResponseInfo();
92 int32_t ReadResponseBody(PP_Resource loader
,
94 int32_t bytes_to_read
,
95 struct PP_CompletionCallback callback
) {
96 VLOG(4) << "PPB_URLLoader::ReadResponseBody()";
97 EnterResource
<PPB_URLLoader_API
> enter(loader
, callback
, true);
99 return enter
.retval();
100 return enter
.SetResult(enter
.object()->ReadResponseBody(buffer
,
105 int32_t FinishStreamingToFile(PP_Resource loader
,
106 struct PP_CompletionCallback callback
) {
107 VLOG(4) << "PPB_URLLoader::FinishStreamingToFile()";
108 EnterResource
<PPB_URLLoader_API
> enter(loader
, callback
, true);
110 return enter
.retval();
111 return enter
.SetResult(enter
.object()->FinishStreamingToFile(
115 void Close(PP_Resource loader
) {
116 VLOG(4) << "PPB_URLLoader::Close()";
117 EnterResource
<PPB_URLLoader_API
> enter(loader
, true);
120 enter
.object()->Close();
123 const PPB_URLLoader_1_0 g_ppb_urlloader_thunk_1_0
= {
129 &GetDownloadProgress
,
132 &FinishStreamingToFile
,
138 const PPB_URLLoader_1_0
* GetPPB_URLLoader_1_0_Thunk() {
139 return &g_ppb_urlloader_thunk_1_0
;