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 #include "ppapi/cpp/url_loader.h"
7 #include "ppapi/c/ppb_url_loader.h"
8 #include "ppapi/c/pp_errors.h"
9 #include "ppapi/cpp/completion_callback.h"
10 #include "ppapi/cpp/file_ref.h"
11 #include "ppapi/cpp/instance_handle.h"
12 #include "ppapi/cpp/module.h"
13 #include "ppapi/cpp/module_impl.h"
14 #include "ppapi/cpp/url_request_info.h"
15 #include "ppapi/cpp/url_response_info.h"
21 template <> const char* interface_name
<PPB_URLLoader_1_0
>() {
22 return PPB_URLLOADER_INTERFACE_1_0
;
27 URLLoader::URLLoader(PP_Resource resource
) : Resource(resource
) {
30 URLLoader::URLLoader(const InstanceHandle
& instance
) {
31 if (!has_interface
<PPB_URLLoader_1_0
>())
33 PassRefFromConstructor(get_interface
<PPB_URLLoader_1_0
>()->Create(
34 instance
.pp_instance()));
37 URLLoader::URLLoader(const URLLoader
& other
) : Resource(other
) {
40 int32_t URLLoader::Open(const URLRequestInfo
& request_info
,
41 const CompletionCallback
& cc
) {
42 if (!has_interface
<PPB_URLLoader_1_0
>())
43 return cc
.MayForce(PP_ERROR_NOINTERFACE
);
44 return get_interface
<PPB_URLLoader_1_0
>()->Open(pp_resource(),
45 request_info
.pp_resource(),
46 cc
.pp_completion_callback());
49 int32_t URLLoader::FollowRedirect(const CompletionCallback
& cc
) {
50 if (!has_interface
<PPB_URLLoader_1_0
>())
51 return cc
.MayForce(PP_ERROR_NOINTERFACE
);
52 return get_interface
<PPB_URLLoader_1_0
>()->FollowRedirect(
53 pp_resource(), cc
.pp_completion_callback());
56 bool URLLoader::GetUploadProgress(int64_t* bytes_sent
,
57 int64_t* total_bytes_to_be_sent
) const {
58 if (!has_interface
<PPB_URLLoader_1_0
>())
60 return PP_ToBool(get_interface
<PPB_URLLoader_1_0
>()->GetUploadProgress(
61 pp_resource(), bytes_sent
, total_bytes_to_be_sent
));
64 bool URLLoader::GetDownloadProgress(
65 int64_t* bytes_received
,
66 int64_t* total_bytes_to_be_received
) const {
67 if (!has_interface
<PPB_URLLoader_1_0
>())
69 return PP_ToBool(get_interface
<PPB_URLLoader_1_0
>()->GetDownloadProgress(
70 pp_resource(), bytes_received
, total_bytes_to_be_received
));
73 URLResponseInfo
URLLoader::GetResponseInfo() const {
74 if (!has_interface
<PPB_URLLoader_1_0
>())
75 return URLResponseInfo();
76 return URLResponseInfo(PASS_REF
,
77 get_interface
<PPB_URLLoader_1_0
>()->GetResponseInfo(
81 int32_t URLLoader::ReadResponseBody(void* buffer
,
82 int32_t bytes_to_read
,
83 const CompletionCallback
& cc
) {
84 if (!has_interface
<PPB_URLLoader_1_0
>())
85 return cc
.MayForce(PP_ERROR_NOINTERFACE
);
86 return get_interface
<PPB_URLLoader_1_0
>()->ReadResponseBody(
87 pp_resource(), buffer
, bytes_to_read
, cc
.pp_completion_callback());
90 int32_t URLLoader::FinishStreamingToFile(const CompletionCallback
& cc
) {
91 if (!has_interface
<PPB_URLLoader_1_0
>())
92 return cc
.MayForce(PP_ERROR_NOINTERFACE
);
93 return get_interface
<PPB_URLLoader_1_0
>()->FinishStreamingToFile(
94 pp_resource(), cc
.pp_completion_callback());
97 void URLLoader::Close() {
98 if (!has_interface
<PPB_URLLoader_1_0
>())
100 get_interface
<PPB_URLLoader_1_0
>()->Close(pp_resource());