This source file includes following definitions.
- data_
- AsPPB_URLRequestInfo_API
- SetProperty
- AppendDataToBody
- AppendFileToBody
- GetData
- SetUndefinedProperty
- SetBooleanProperty
- SetIntegerProperty
- SetStringProperty
#include "ppapi/proxy/url_request_info_resource.h"
#include "ppapi/shared_impl/var.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/ppb_file_ref_api.h"
namespace ppapi {
namespace proxy {
URLRequestInfoResource::URLRequestInfoResource(Connection connection,
PP_Instance instance,
const URLRequestInfoData& data)
: PluginResource(connection, instance),
data_(data) {
}
URLRequestInfoResource::~URLRequestInfoResource() {
}
thunk::PPB_URLRequestInfo_API*
URLRequestInfoResource::AsPPB_URLRequestInfo_API() {
return this;
}
PP_Bool URLRequestInfoResource::SetProperty(PP_URLRequestProperty property,
PP_Var var) {
PP_Bool result = PP_FALSE;
switch (var.type) {
case PP_VARTYPE_UNDEFINED:
result = PP_FromBool(SetUndefinedProperty(property));
break;
case PP_VARTYPE_BOOL:
result = PP_FromBool(
SetBooleanProperty(property, PP_ToBool(var.value.as_bool)));
break;
case PP_VARTYPE_INT32:
result = PP_FromBool(
SetIntegerProperty(property, var.value.as_int));
break;
case PP_VARTYPE_STRING: {
StringVar* string = StringVar::FromPPVar(var);
if (string)
result = PP_FromBool(SetStringProperty(property, string->value()));
break;
}
default:
break;
}
return result;
}
PP_Bool URLRequestInfoResource::AppendDataToBody(const void* data,
uint32_t len) {
if (len > 0) {
data_.body.push_back(URLRequestInfoData::BodyItem(
std::string(static_cast<const char*>(data), len)));
}
return PP_TRUE;
}
PP_Bool URLRequestInfoResource::AppendFileToBody(
PP_Resource file_ref,
int64_t start_offset,
int64_t number_of_bytes,
PP_Time expected_last_modified_time) {
thunk::EnterResourceNoLock<thunk::PPB_FileRef_API> enter(file_ref, true);
if (enter.failed())
return PP_FALSE;
if (number_of_bytes == 0)
return PP_TRUE;
if (start_offset < 0 || number_of_bytes < -1)
return PP_FALSE;
data_.body.push_back(URLRequestInfoData::BodyItem(
enter.resource(),
start_offset,
number_of_bytes,
expected_last_modified_time));
return PP_TRUE;
}
const URLRequestInfoData& URLRequestInfoResource::GetData() const {
return data_;
}
bool URLRequestInfoResource::SetUndefinedProperty(
PP_URLRequestProperty property) {
switch (property) {
case PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL:
data_.has_custom_referrer_url = false;
data_.custom_referrer_url = std::string();
return true;
case PP_URLREQUESTPROPERTY_CUSTOMCONTENTTRANSFERENCODING:
data_.has_custom_content_transfer_encoding = false;
data_.custom_content_transfer_encoding = std::string();
return true;
case PP_URLREQUESTPROPERTY_CUSTOMUSERAGENT:
data_.has_custom_user_agent = false;
data_.custom_user_agent = std::string();
return true;
default:
return false;
}
}
bool URLRequestInfoResource::SetBooleanProperty(
PP_URLRequestProperty property,
bool value) {
switch (property) {
case PP_URLREQUESTPROPERTY_STREAMTOFILE:
data_.stream_to_file = value;
return true;
case PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS:
data_.follow_redirects = value;
return true;
case PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS:
data_.record_download_progress = value;
return true;
case PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS:
data_.record_upload_progress = value;
return true;
case PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS:
data_.allow_cross_origin_requests = value;
return true;
case PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS:
data_.allow_credentials = value;
return true;
default:
return false;
}
}
bool URLRequestInfoResource::SetIntegerProperty(
PP_URLRequestProperty property,
int32_t value) {
switch (property) {
case PP_URLREQUESTPROPERTY_PREFETCHBUFFERUPPERTHRESHOLD:
data_.prefetch_buffer_upper_threshold = value;
return true;
case PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERTHRESHOLD:
data_.prefetch_buffer_lower_threshold = value;
return true;
default:
return false;
}
}
bool URLRequestInfoResource::SetStringProperty(
PP_URLRequestProperty property,
const std::string& value) {
switch (property) {
case PP_URLREQUESTPROPERTY_URL:
data_.url = value;
return true;
case PP_URLREQUESTPROPERTY_METHOD:
data_.method = value;
return true;
case PP_URLREQUESTPROPERTY_HEADERS:
data_.headers = value;
return true;
case PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL:
data_.has_custom_referrer_url = true;
data_.custom_referrer_url = value;
return true;
case PP_URLREQUESTPROPERTY_CUSTOMCONTENTTRANSFERENCODING:
data_.has_custom_content_transfer_encoding = true;
data_.custom_content_transfer_encoding = value;
return true;
case PP_URLREQUESTPROPERTY_CUSTOMUSERAGENT:
data_.has_custom_user_agent = true;
data_.custom_user_agent = value;
return true;
default:
return false;
}
}
}
}