#include "libcef_dll/cpptoc/resource_handler_cpptoc.h"
#include "libcef_dll/ctocpp/callback_ctocpp.h"
#include "libcef_dll/ctocpp/request_ctocpp.h"
#include "libcef_dll/ctocpp/resource_read_callback_ctocpp.h"
#include "libcef_dll/ctocpp/resource_skip_callback_ctocpp.h"
#include "libcef_dll/ctocpp/response_ctocpp.h"
#include "libcef_dll/shutdown_checker.h"
namespace {
int CEF_CALLBACK resource_handler_open(struct _cef_resource_handler_t* self,
cef_request_t* request,
int* handle_request,
cef_callback_t* callback) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(request);
if (!request)
return 0;
DCHECK(handle_request);
if (!handle_request)
return 0;
DCHECK(callback);
if (!callback)
return 0;
bool handle_requestBool = (handle_request && *handle_request) ? true : false;
bool _retval = CefResourceHandlerCppToC::Get(self)->Open(
CefRequestCToCpp::Wrap(request), handle_requestBool,
CefCallbackCToCpp::Wrap(callback));
if (handle_request)
*handle_request = handle_requestBool ? true : false;
return _retval;
}
int CEF_CALLBACK
resource_handler_process_request(struct _cef_resource_handler_t* self,
cef_request_t* request,
cef_callback_t* callback) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(request);
if (!request)
return 0;
DCHECK(callback);
if (!callback)
return 0;
bool _retval = CefResourceHandlerCppToC::Get(self)->ProcessRequest(
CefRequestCToCpp::Wrap(request), CefCallbackCToCpp::Wrap(callback));
return _retval;
}
void CEF_CALLBACK
resource_handler_get_response_headers(struct _cef_resource_handler_t* self,
struct _cef_response_t* response,
int64* response_length,
cef_string_t* redirectUrl) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
DCHECK(response);
if (!response)
return;
DCHECK(response_length);
if (!response_length)
return;
DCHECK(redirectUrl);
if (!redirectUrl)
return;
int64 response_lengthVal = response_length ? *response_length : 0;
CefString redirectUrlStr(redirectUrl);
CefResourceHandlerCppToC::Get(self)->GetResponseHeaders(
CefResponseCToCpp::Wrap(response), response_lengthVal, redirectUrlStr);
if (response_length)
*response_length = response_lengthVal;
}
int CEF_CALLBACK resource_handler_skip(struct _cef_resource_handler_t* self,
int64 bytes_to_skip,
int64* bytes_skipped,
cef_resource_skip_callback_t* callback) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(bytes_skipped);
if (!bytes_skipped)
return 0;
DCHECK(callback);
if (!callback)
return 0;
int64 bytes_skippedVal = bytes_skipped ? *bytes_skipped : 0;
bool _retval = CefResourceHandlerCppToC::Get(self)->Skip(
bytes_to_skip, bytes_skippedVal,
CefResourceSkipCallbackCToCpp::Wrap(callback));
if (bytes_skipped)
*bytes_skipped = bytes_skippedVal;
return _retval;
}
int CEF_CALLBACK resource_handler_read(struct _cef_resource_handler_t* self,
void* data_out,
int bytes_to_read,
int* bytes_read,
cef_resource_read_callback_t* callback) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(data_out);
if (!data_out)
return 0;
DCHECK(bytes_read);
if (!bytes_read)
return 0;
DCHECK(callback);
if (!callback)
return 0;
int bytes_readVal = bytes_read ? *bytes_read : 0;
bool _retval = CefResourceHandlerCppToC::Get(self)->Read(
data_out, bytes_to_read, bytes_readVal,
CefResourceReadCallbackCToCpp::Wrap(callback));
if (bytes_read)
*bytes_read = bytes_readVal;
return _retval;
}
int CEF_CALLBACK
resource_handler_read_response(struct _cef_resource_handler_t* self,
void* data_out,
int bytes_to_read,
int* bytes_read,
cef_callback_t* callback) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(data_out);
if (!data_out)
return 0;
DCHECK(bytes_read);
if (!bytes_read)
return 0;
DCHECK(callback);
if (!callback)
return 0;
int bytes_readVal = bytes_read ? *bytes_read : 0;
bool _retval = CefResourceHandlerCppToC::Get(self)->ReadResponse(
data_out, bytes_to_read, bytes_readVal,
CefCallbackCToCpp::Wrap(callback));
if (bytes_read)
*bytes_read = bytes_readVal;
return _retval;
}
void CEF_CALLBACK
resource_handler_cancel(struct _cef_resource_handler_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
CefResourceHandlerCppToC::Get(self)->Cancel();
}
}
CefResourceHandlerCppToC::CefResourceHandlerCppToC() {
GetStruct()->open = resource_handler_open;
GetStruct()->process_request = resource_handler_process_request;
GetStruct()->get_response_headers = resource_handler_get_response_headers;
GetStruct()->skip = resource_handler_skip;
GetStruct()->read = resource_handler_read;
GetStruct()->read_response = resource_handler_read_response;
GetStruct()->cancel = resource_handler_cancel;
}
CefResourceHandlerCppToC::~CefResourceHandlerCppToC() {
shutdown_checker::AssertNotShutdown();
}
template <>
CefRefPtr<CefResourceHandler> CefCppToCRefCounted<
CefResourceHandlerCppToC,
CefResourceHandler,
cef_resource_handler_t>::UnwrapDerived(CefWrapperType type,
cef_resource_handler_t* s) {
NOTREACHED() << "Unexpected class type: " << type;
return nullptr;
}
template <>
CefWrapperType CefCppToCRefCounted<CefResourceHandlerCppToC,
CefResourceHandler,
cef_resource_handler_t>::kWrapperType =
WT_RESOURCE_HANDLER;