diff --git a/Core/Handling/RequestHandlerBrowser.cs b/Core/Handling/RequestHandlerBrowser.cs index b8cda481..08c7fbaa 100644 --- a/Core/Handling/RequestHandlerBrowser.cs +++ b/Core/Handling/RequestHandlerBrowser.cs @@ -5,14 +5,26 @@ namespace TweetDuck.Core.Handling{ sealed class RequestHandlerBrowser : RequestHandlerBase{ + private const string UrlVendorResource = "/dist/vendor"; + private const string UrlLoadingSpinner = "/backgrounds/spinner_blue"; + public string BlockNextUserNavUrl { get; set; } public RequestHandlerBrowser() : base(true){} public override CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback){ - if (request.ResourceType == ResourceType.Script && request.Url.Contains("analytics.")){ - callback.Dispose(); - return CefReturnValue.Cancel; + if (request.ResourceType == ResourceType.Script){ + string url = request.Url; + + if (url.Contains("analytics.")){ + callback.Dispose(); + return CefReturnValue.Cancel; + } + else if (url.Contains(UrlVendorResource)){ + NameValueCollection headers = request.Headers; + headers["Accept-Encoding"] = "identity"; + request.Headers = headers; + } } return base.OnBeforeResourceLoad(browserControl, browser, frame, request, callback); @@ -29,7 +41,7 @@ public override bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser } public override bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response){ - if (request.ResourceType == ResourceType.Image && request.Url.Contains("/backgrounds/spinner_blue")){ + if (request.ResourceType == ResourceType.Image && request.Url.Contains(UrlLoadingSpinner)){ request.Url = TwitterUtils.LoadingSpinner.Url; return true; } @@ -38,23 +50,8 @@ public override bool OnResourceResponse(IWebBrowser browserControl, IBrowser bro } public override IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response){ - if (request.ResourceType == ResourceType.Script && request.Url.Contains("/dist/vendor")){ - NameValueCollection headers = response.ResponseHeaders; - - if (int.TryParse(headers["x-ton-expected-size"], out int totalBytes)){ - return new ResponseFilterVendor(totalBytes); - } - #if DEBUG - else{ - System.Diagnostics.Debug.WriteLine($"Missing uncompressed size header in {request.Url}"); - - foreach(string key in headers){ - System.Diagnostics.Debug.WriteLine($" {key}: {headers[key]}"); - } - - System.Diagnostics.Debugger.Break(); - } - #endif + if (request.ResourceType == ResourceType.Script && request.Url.Contains(UrlVendorResource) && int.TryParse(response.ResponseHeaders["Content-Length"], out int totalBytes)){ + return new ResponseFilterVendor(totalBytes); } return base.GetResourceResponseFilter(browserControl, browser, frame, request, response);