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 17namespace pp { 18 19namespace { 20 21template <> const char* interface_name<PPB_URLLoader_1_0>() { 22 return PPB_URLLOADER_INTERFACE_1_0; 23} 24 25} // namespace 26 27URLLoader::URLLoader(PP_Resource resource) : Resource(resource) { 28} 29 30URLLoader::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 37URLLoader::URLLoader(const URLLoader& other) : Resource(other) { 38} 39 40int32_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 49int32_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 56bool 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 64bool 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 73URLResponseInfo 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 81int32_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 90int32_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 97void 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