• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/cpp/url_loader.h"
6 
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"
16 
17 namespace pp {
18 
19 namespace {
20 
interface_name()21 template <> const char* interface_name<PPB_URLLoader_1_0>() {
22   return PPB_URLLOADER_INTERFACE_1_0;
23 }
24 
25 }  // namespace
26 
URLLoader(PP_Resource resource)27 URLLoader::URLLoader(PP_Resource resource) : Resource(resource) {
28 }
29 
URLLoader(const InstanceHandle & instance)30 URLLoader::URLLoader(const InstanceHandle& instance) {
31   if (!has_interface<PPB_URLLoader_1_0>())
32     return;
33   PassRefFromConstructor(get_interface<PPB_URLLoader_1_0>()->Create(
34       instance.pp_instance()));
35 }
36 
URLLoader(const URLLoader & other)37 URLLoader::URLLoader(const URLLoader& other) : Resource(other) {
38 }
39 
Open(const URLRequestInfo & request_info,const CompletionCallback & cc)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());
47 }
48 
FollowRedirect(const CompletionCallback & cc)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());
54 }
55 
GetUploadProgress(int64_t * bytes_sent,int64_t * total_bytes_to_be_sent) const56 bool URLLoader::GetUploadProgress(int64_t* bytes_sent,
57                                   int64_t* total_bytes_to_be_sent) const {
58   if (!has_interface<PPB_URLLoader_1_0>())
59     return false;
60   return PP_ToBool(get_interface<PPB_URLLoader_1_0>()->GetUploadProgress(
61       pp_resource(), bytes_sent, total_bytes_to_be_sent));
62 }
63 
GetDownloadProgress(int64_t * bytes_received,int64_t * total_bytes_to_be_received) const64 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>())
68     return false;
69   return PP_ToBool(get_interface<PPB_URLLoader_1_0>()->GetDownloadProgress(
70       pp_resource(), bytes_received, total_bytes_to_be_received));
71 }
72 
GetResponseInfo() const73 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(
78                              pp_resource()));
79 }
80 
ReadResponseBody(void * buffer,int32_t bytes_to_read,const CompletionCallback & cc)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());
88 }
89 
FinishStreamingToFile(const CompletionCallback & cc)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());
95 }
96 
Close()97 void URLLoader::Close() {
98   if (!has_interface<PPB_URLLoader_1_0>())
99     return;
100   get_interface<PPB_URLLoader_1_0>()->Close(pp_resource());
101 }
102 
103 }  // namespace pp
104