diff --git a/lib/TweetLib.Browser.CEF/Logic/ByteArrayResourceHandlerLogic.cs b/lib/TweetLib.Browser.CEF/Logic/ByteArrayResourceHandlerLogic.cs index 80331a87..5c6364cd 100644 --- a/lib/TweetLib.Browser.CEF/Logic/ByteArrayResourceHandlerLogic.cs +++ b/lib/TweetLib.Browser.CEF/Logic/ByteArrayResourceHandlerLogic.cs @@ -10,8 +10,6 @@ public abstract class ByteArrayResourceHandlerLogic { [SuppressMessage("ReSharper", "MemberCanBePrivate.Global")] public sealed class ByteArrayResourceHandlerLogic<TResponse> : ByteArrayResourceHandlerLogic { - public int RemainingBytes => resource.Length - position; - private readonly ByteArrayResource resource; private readonly IResponseAdapter<TResponse> responseAdapter; @@ -46,20 +44,21 @@ public bool Skip(long bytesToSkip, out long bytesSkipped, IDisposable callback) return true; } - public bool Read<T>(WriteToOut<T> write, T dataOut, int bytesToRead, out int bytesRead, IDisposable callback) { + public bool Read<T>(WriteToOut<T> write, T dataOut, long maxBytesToRead, out int bytesRead, IDisposable callback) { callback.Dispose(); - if (bytesToRead > 0) { + if (maxBytesToRead == 0) { + bytesRead = 0; + } + else { + int bytesToRead = (int) Math.Min(maxBytesToRead, resource.Length - position); + write(dataOut, resource.Contents, position, bytesToRead); position += bytesToRead; + bytesRead = bytesToRead; } - bytesRead = bytesToRead; return bytesRead > 0; } - - public bool Read<T>(WriteToOut<T> write, T dataOut, out int bytesRead, IDisposable callback) { - return Read(write, dataOut, RemainingBytes, out bytesRead, callback); - } } } diff --git a/linux/TweetImpl.CefGlue/Handlers/Resource/ByteArrayResourceHandler.cs b/linux/TweetImpl.CefGlue/Handlers/Resource/ByteArrayResourceHandler.cs index 98ac094c..52acc15a 100644 --- a/linux/TweetImpl.CefGlue/Handlers/Resource/ByteArrayResourceHandler.cs +++ b/linux/TweetImpl.CefGlue/Handlers/Resource/ByteArrayResourceHandler.cs @@ -38,7 +38,7 @@ protected override bool Skip(long bytesToSkip, out long bytesSkipped, CefResourc } protected override bool Read(IntPtr dataOut, int bytesToRead, out int bytesRead, CefResourceReadCallback callback) { - return logic!.Read(WriteToOut, dataOut, Math.Min(bytesToRead, logic.RemainingBytes), out bytesRead, callback); + return logic!.Read(WriteToOut, dataOut, bytesToRead, out bytesRead, callback); } protected override void Cancel() {} diff --git a/windows/TweetImpl.CefSharp/Handlers/CefByteArrayResourceHandler.cs b/windows/TweetImpl.CefSharp/Handlers/CefByteArrayResourceHandler.cs index 8a429f9b..4e84ac86 100644 --- a/windows/TweetImpl.CefSharp/Handlers/CefByteArrayResourceHandler.cs +++ b/windows/TweetImpl.CefSharp/Handlers/CefByteArrayResourceHandler.cs @@ -39,7 +39,7 @@ bool IResourceHandler.Skip(long bytesToSkip, out long bytesSkipped, IResourceSki } bool IResourceHandler.Read(Stream dataOut, out int bytesRead, IResourceReadCallback callback) { - return logic.Read(WriteToOut, dataOut, out bytesRead, callback); + return logic.Read(WriteToOut, dataOut, dataOut.Length, out bytesRead, callback); } bool IResourceHandler.ProcessRequest(IRequest request, ICallback callback) {