Initial commit
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "ResourceHandler.h"
|
||||
//#include "GlobalUnit.h"
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
__fastcall TResHandler::TResHandler(const _di_ICefBrowser browser, const _di_ICefFrame frame,
|
||||
const _di_ICefRequest request, HWND wnd, int msg)
|
||||
: TCefResourceHandlerOwn( browser, frame, "ImgHandler", request )
|
||||
{
|
||||
_size = _offset = 0;
|
||||
_callback = NULL;
|
||||
_response = NULL;
|
||||
_wnd = wnd;
|
||||
_msg = msg;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool __fastcall TResHandler::ProcessRequest(const _di_ICefRequest request, const _di_ICefCallback callback)
|
||||
{
|
||||
_offset = 0;
|
||||
_callback = callback;
|
||||
|
||||
TCefUrlRequestFlags flags = request->GetFlags();
|
||||
flags << UR_FLAG_ALLOW_CACHED_CREDENTIALS << UR_FLAG_SKIP_CACHE;
|
||||
request->SetFlags( flags );
|
||||
|
||||
TResRequestClient* client = new TResRequestClient( this );
|
||||
|
||||
TCefUrlRequestRef::New( request, *client, NULL/*callback*/ );
|
||||
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TResHandler::GetResponseHeaders(const _di_ICefResponse response, /* out */ __int64 &responseLength, /* out */ ustring &redirectUrl)
|
||||
{
|
||||
if( _response ){
|
||||
_di_ICefStringMultimap map = *(new TCefStringMultimapOwn());
|
||||
_response->GetHeaderMap( map );
|
||||
response->SetHeaderMap( map );
|
||||
|
||||
response->SetMimeType( _response->GetMimeType() );
|
||||
response->SetStatus( _response->GetStatus() );
|
||||
response->SetStatusText( _response->GetStatusText() );
|
||||
}
|
||||
|
||||
responseLength = _size;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool __fastcall TResHandler::ReadResponse(const void * dataOut, int bytesToRead, int &bytesRead, const _di_ICefCallback callback)
|
||||
{
|
||||
if( _offset < _size ){
|
||||
bytesRead = _size - _offset;
|
||||
if( bytesRead > bytesToRead )
|
||||
bytesRead = bytesToRead;
|
||||
|
||||
char* pData = (char*)dataOut;
|
||||
memcpy( pData, _data + _offset, bytesRead );
|
||||
|
||||
_offset += bytesRead;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
__fastcall TResRequestClient::TResRequestClient(TResHandler* handler)
|
||||
{
|
||||
_resHandler = handler;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TResRequestClient::OnRequestComplete(const _di_ICefUrlRequest request)
|
||||
{
|
||||
_resHandler->_response = request->GetResponse();
|
||||
TCefResourceType type = request->GetRequest()->GetResourceType();
|
||||
// String str = _imgHandler->_response->GetMimeType();
|
||||
// if( str.Pos("image") )
|
||||
if( type==RT_IMAGE || type==RT_XHR )
|
||||
SendMessage( _resHandler->_wnd, _resHandler->_msg,
|
||||
_resHandler->_size, (int)_resHandler->_data );
|
||||
|
||||
if( _resHandler->_callback )
|
||||
_resHandler->_callback->Cont();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TResRequestClient::OnDownloadData(const _di_ICefUrlRequest request, void * data, NativeUInt dataLength)
|
||||
{
|
||||
char* pData = _resHandler->_data;
|
||||
int& nSize = _resHandler->_size;
|
||||
memcpy( pData + nSize, data, dataLength );
|
||||
nSize += dataLength;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user