CEFInterfaceBrowserByteResource.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Engine/Source/Runtime/WebBrowser/Private/CEF/CEFBrowserByteResource.cpp
  2. #include "CEF/CEFInterfaceBrowserByteResource.h"
  3. #if WITH_CEF3
  4. FCEFInterfaceBrowserByteResource::FCEFInterfaceBrowserByteResource(const CefRefPtr<CefPostDataElement>& PostData, const FString& InMimeType)
  5. : Position(0)
  6. , Buffer(nullptr)
  7. , MimeType(InMimeType)
  8. {
  9. Size = PostData->GetBytesCount();
  10. if (Size > 0)
  11. {
  12. Buffer = new unsigned char[Size];
  13. PostData->GetBytes(Size, Buffer);
  14. }
  15. }
  16. FCEFInterfaceBrowserByteResource::~FCEFInterfaceBrowserByteResource()
  17. {
  18. delete[] Buffer;
  19. }
  20. void FCEFInterfaceBrowserByteResource::Cancel()
  21. {
  22. }
  23. void FCEFInterfaceBrowserByteResource::GetResponseHeaders(CefRefPtr<CefResponse> Response, int64& ResponseLength, CefString& RedirectUrl)
  24. {
  25. Response->SetMimeType(TCHAR_TO_WCHAR(*MimeType));
  26. Response->SetStatus(200);
  27. Response->SetStatusText("OK");
  28. ResponseLength = Size;
  29. }
  30. bool FCEFInterfaceBrowserByteResource::ProcessRequest(CefRefPtr<CefRequest> Request, CefRefPtr<CefCallback> Callback)
  31. {
  32. Callback->Continue();
  33. return true;
  34. }
  35. bool FCEFInterfaceBrowserByteResource::ReadResponse(void* DataOut, int BytesToRead, int& BytesRead, CefRefPtr<CefCallback> Callback)
  36. {
  37. int32 BytesLeft = Size - Position;
  38. BytesRead = BytesLeft >= BytesToRead ? BytesToRead : BytesLeft;
  39. if (BytesRead > 0)
  40. {
  41. FMemory::Memcpy(DataOut, Buffer + Position, BytesRead);
  42. Position += BytesRead;
  43. return true;
  44. }
  45. return false;
  46. }
  47. #endif