Home | History | Annotate | Download | only in cpp
      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 
     21 template <> const char* interface_name<PPB_URLLoader_1_0>() {
     22   return PPB_URLLOADER_INTERFACE_1_0;
     23 }
     24 
     25 }  // namespace
     26 
     27 URLLoader::URLLoader(PP_Resource resource) : Resource(resource) {
     28 }
     29 
     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 
     37 URLLoader::URLLoader(const URLLoader& other) : Resource(other) {
     38 }
     39 
     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 
     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 
     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>())
     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 
     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>())
     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 
     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(
     78                              pp_resource()));
     79 }
     80 
     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 
     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 
     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