Skip to content

Commit 310df33

Browse files
committed
2025.8.13.0
1 parent 62a1779 commit 310df33

22 files changed

+1686
-798
lines changed

SLBr/App.xaml.cs

Lines changed: 493 additions & 210 deletions
Large diffs are not rendered by default.

SLBr/Benchmark.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace SLBr
55
{
6-
//#if DEBUG
6+
#if DEBUG
77
public class Benchmark
88
{
99
public class Result
@@ -52,4 +52,5 @@ public static string Report()
5252
return _String.ToString();
5353
}
5454
}
55-
}
55+
#endif
56+
}

SLBr/Controls/LessThanConverter.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Globalization;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using System.Windows.Data;
8+
9+
namespace SLBr.Controls
10+
{
11+
public class LessThanConverter : IValueConverter
12+
{
13+
public double Threshold { get; set; } = 60;
14+
15+
public object Convert(object Value, Type TargetType, object Parameter, CultureInfo Culture)
16+
{
17+
if (Value is double Length)
18+
return Length < Threshold;
19+
return false;
20+
}
21+
22+
public object ConvertBack(object Value, Type TargetType, object Parameter, CultureInfo C)
23+
=> throw new NotImplementedException();
24+
}
25+
}

SLBr/Handlers/ContextMenuHandler.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ public bool ExecuteContextMenu(IWebBrowser WebBrowser, IBrowser Browser, CefMenu
224224
string SelectedText = Parameters.SelectionText;
225225
App.Current.Dispatcher.Invoke(() =>
226226
{
227-
App.Instance.CurrentFocusedWindow().NewTab(Utils.FixUrl(string.Format(App.Instance.DefaultSearchProvider.SearchUrl, SelectedText)), true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1);
227+
App.Instance.CurrentFocusedWindow().NewTab(Utils.FixUrl(string.Format(App.Instance.DefaultSearchProvider.SearchUrl, SelectedText)), true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1, bool.Parse(App.Instance.GlobalSave.Get("PrivateTabs")));
228228
});
229229
ToReturn = true;
230230
}
@@ -237,7 +237,7 @@ public bool ExecuteContextMenu(IWebBrowser WebBrowser, IBrowser Browser, CefMenu
237237
{
238238
if (CommandID == MenuOpenNewTab)
239239
{
240-
App.Instance.CurrentFocusedWindow().NewTab(Parameters.LinkUrl, true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1);
240+
App.Instance.CurrentFocusedWindow().NewTab(Parameters.LinkUrl, true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1, bool.Parse(App.Instance.GlobalSave.Get("PrivateTabs")));
241241
ToReturn = true;
242242
}
243243
else if (CommandID == MenuCopyURL)
@@ -254,7 +254,7 @@ public bool ExecuteContextMenu(IWebBrowser WebBrowser, IBrowser Browser, CefMenu
254254
{
255255
if (CommandID == CefMenuCommand.Find)
256256
{
257-
App.Instance.CurrentFocusedWindow().NewTab(Utils.FixUrl(string.Format(App.Instance.DefaultSearchProvider.SearchUrl, SelectedText)), true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1); ;
257+
App.Instance.CurrentFocusedWindow().NewTab(Utils.FixUrl(string.Format(App.Instance.DefaultSearchProvider.SearchUrl, SelectedText)), true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1, bool.Parse(App.Instance.GlobalSave.Get("PrivateTabs")));
258258
ToReturn = true;
259259
}
260260
});
@@ -422,7 +422,7 @@ public bool ExecuteContextMenu(IWebBrowser WebBrowser, IBrowser Browser, CefMenu
422422
}
423423
case CefMenuCommand.ViewSource:
424424
{
425-
App.Instance.CurrentFocusedWindow().NewTab($"view-source:{WebBrowser.Address}", true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1);
425+
App.Instance.CurrentFocusedWindow().NewTab($"view-source:{WebBrowser.Address}", true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1, bool.Parse(App.Instance.GlobalSave.Get("PrivateTabs")));
426426
//Browser.FocusedFrame.ViewSource();
427427
break;
428428
}

SLBr/Handlers/DisplayHandler.cs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,14 @@ public bool OnCursorChange(IWebBrowser chromiumWebBrowser, IBrowser browser, Int
3434

3535
public void OnFaviconUrlChange(IWebBrowser chromiumWebBrowser, IBrowser browser, IList<string> urls)
3636
{
37-
if (urls.Count != 0 && bool.Parse(App.Instance.GlobalSave.Get("Favicons")))
37+
if (urls.Count != 0 && bool.Parse(App.Instance.GlobalSave.Get("Favicons")) && !_BrowserView.Private)
3838
{
39-
urls = urls.OrderBy(url => url.EndsWith(".ico") ? 0 : url.EndsWith(".png") ? 1 : 2).ToList();
40-
if (Utils.GetFileExtension(urls[0]) != ".svg")
39+
urls = urls.OrderBy(url => url.EndsWith(".ico", StringComparison.Ordinal) ? 0 : url.EndsWith(".png", StringComparison.Ordinal) ? 1 : 2).ToList();
40+
if (!urls[0].EndsWith(".svg", StringComparison.Ordinal))
4141
{
4242
App.Current.Dispatcher.Invoke(async () =>
4343
{
44-
_BrowserView.Tab.Icon = await App.Instance.SetIcon(urls[0], chromiumWebBrowser.Address, _BrowserView.Private);
45-
/*foreach (string url in urls)
46-
{
47-
if (Utils.GetFileExtensionFromUrl(url) != ".svg")
48-
{
49-
//MessageBox.Show(urls[0]);
50-
_BrowserView.Tab.Icon = await App.Instance.SetIcon(urls[0], chromiumWebBrowser.Address);
51-
break;
52-
}
53-
}*/
44+
_BrowserView.Tab.Icon = await App.Instance.SetIcon(urls[0], chromiumWebBrowser.Address);
5445
});
5546
}
5647
}

SLBr/Handlers/LifeSpanHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame f
9393
new PopupBrowser(targetUrl, popupFeatures.Width ?? 600, popupFeatures.Height ?? 650).Show();
9494
}
9595
else
96-
App.Instance.CurrentFocusedWindow().NewTab(targetUrl, true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1);
96+
App.Instance.CurrentFocusedWindow().NewTab(targetUrl, true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1, bool.Parse(App.Instance.GlobalSave.Get("PrivateTabs")));
9797
});
9898
}
9999
return true;

SLBr/Handlers/LimitedContextMenuHandler.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ public bool ExecuteContextMenu(IWebBrowser WebBrowser, IBrowser Browser, CefMenu
174174
{
175175
if (CommandID == MenuOpenNewTab)
176176
{
177-
App.Instance.CurrentFocusedWindow().NewTab(Parameters.LinkUrl, true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1);
177+
App.Instance.CurrentFocusedWindow().NewTab(Parameters.LinkUrl, true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1, bool.Parse(App.Instance.GlobalSave.Get("PrivateTabs")));
178178
ToReturn = true;
179179
}
180180
else if (CommandID == MenuCopyURL)
@@ -190,7 +190,7 @@ public bool ExecuteContextMenu(IWebBrowser WebBrowser, IBrowser Browser, CefMenu
190190
{
191191
if (CommandID == CefMenuCommand.Find)
192192
{
193-
App.Instance.CurrentFocusedWindow().NewTab(Utils.FixUrl(string.Format(App.Instance.DefaultSearchProvider.SearchUrl, Parameters.SelectionText)), true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1); ;
193+
App.Instance.CurrentFocusedWindow().NewTab(Utils.FixUrl(string.Format(App.Instance.DefaultSearchProvider.SearchUrl, Parameters.SelectionText)), true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1, bool.Parse(App.Instance.GlobalSave.Get("PrivateTabs")));
194194
ToReturn = true;
195195
}
196196
});
@@ -314,7 +314,7 @@ public bool ExecuteContextMenu(IWebBrowser WebBrowser, IBrowser Browser, CefMenu
314314
}
315315
case CefMenuCommand.ViewSource:
316316
{
317-
App.Instance.CurrentFocusedWindow().NewTab($"view-source:{WebBrowser.Address}", true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1);
317+
App.Instance.CurrentFocusedWindow().NewTab($"view-source:{WebBrowser.Address}", true, App.Instance.CurrentFocusedWindow().TabsUI.SelectedIndex + 1, bool.Parse(App.Instance.GlobalSave.Get("PrivateTabs")));
318318
//Browser.FocusedFrame.ViewSource();
319319
break;
320320
}

SLBr/Handlers/RequestHandler.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -285,9 +285,6 @@ public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFr
285285
case string s when s.StartsWith("profile-picker", StringComparison.Ordinal):
286286
Block = true;
287287
break;
288-
case string s when s.StartsWith("search-engine-choice", StringComparison.Ordinal):
289-
Block = true;
290-
break;
291288
case string s when s.StartsWith("intro", StringComparison.Ordinal):
292289
Block = true;
293290
break;
@@ -303,9 +300,9 @@ public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFr
303300
case string s when s.StartsWith("reset-password", StringComparison.Ordinal):
304301
Block = true;
305302
break;
306-
case string s when s.StartsWith("imageburner", StringComparison.Ordinal):
307-
Block = true;
308-
break;
303+
//case string s when s.StartsWith("imageburner", StringComparison.Ordinal):
304+
// Block = true;
305+
// break;
309306
case string s when s.StartsWith("connection-help", StringComparison.Ordinal):
310307
Block = true;
311308
break;
@@ -324,7 +321,7 @@ public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFr
324321
{
325322
App.Current.Dispatcher.Invoke(async () =>
326323
{
327-
BrowserView.Tab.Icon = await App.Instance.SetIcon("", chromiumWebBrowser.Address, BrowserView.Private);
324+
BrowserView.Tab.Icon = await App.Instance.SetIcon("", request.Url, BrowserView.Private);
328325
});
329326
}
330327
if (App.Instance.NeverSlowMode)
@@ -367,7 +364,7 @@ public IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWeb
367364
public void OnDocumentAvailableInMainFrame(IWebBrowser chromiumWebBrowser, IBrowser browser)
368365
{
369366
chromiumWebBrowser.ExecuteScriptAsync(Scripts.ScrollCSS);
370-
if (bool.Parse(App.Instance.GlobalSave.Get("SmoothScroll")))
367+
if (!App.Instance.LiteMode && bool.Parse(App.Instance.GlobalSave.Get("SmoothScroll")))
371368
chromiumWebBrowser.ExecuteScriptAsync(Scripts.ScrollScript);
372369
}
373370

SLBr/Handlers/ResourceRequestHandler.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ public IResourceHandler GetResourceHandler(IWebBrowser chromiumWebBrowser, IBrow
4848

4949
public IResponseFilter GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
5050
{
51+
/*if (request.ResourceType == ResourceType.Script && !request.Url.StartsWith("devtools:", StringComparison.Ordinal))
52+
{
53+
return new SafePassthroughFilter("window", "dowin");
54+
}*/
55+
5156
return null;
5257
}
5358

@@ -160,8 +165,8 @@ public CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrow
160165
//https://chromium-review.googlesource.com/c/chromium/src/+/1265506/25/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
161166
if (App.Instance.AdBlock == 1)
162167
{
163-
if (App.Instance.AdBlockAllowList.Has(Utils.FastHost(browser.FocusedFrame.Url)))
164-
return CefReturnValue.Continue;
168+
if (browser.FocusedFrame != null && App.Instance.AdBlockAllowList.Has(Utils.FastHost(browser.FocusedFrame.Url)))
169+
return CefReturnValue.Continue;
165170
if (request.ResourceType == ResourceType.Ping)
166171
{
167172
App.Instance.TrackersBlocked++;
@@ -198,8 +203,14 @@ public CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrow
198203
}*/
199204
if (App.Instance.LiteMode)
200205
request.SetHeaderByName("Save-Data", "on", true);
201-
if (App.Instance.MobileView)
206+
//if (App.Instance.MobileView)
207+
if (Handler.BrowserView.UserAgentBranding)
208+
{
202209
request.SetHeaderByName("User-Agent", App.Instance.UserAgent, true);
210+
//WARNING: \r\n SHOULD NOT BE REMOVED, CLOUDFLARE TURNSTILE WILL NOT WORK
211+
request.SetHeaderByName("sec-ch-ua", $"\r\n{App.Instance.UserAgentBrandsString}", true);
212+
//WARNING: \r\n SHOULD NOT BE REMOVED, CLOUDFLARE TURNSTILE WILL NOT WORK
213+
}
203214
//request.SetHeaderByName("Device-Memory", "0.25", true);
204215
//request.SetHeaderByName("DNT", "1", true);
205216
}
@@ -232,6 +243,11 @@ public void OnResourceRedirect(IWebBrowser chromiumWebBrowser, IBrowser browser,
232243

233244
public bool OnResourceResponse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
234245
{
246+
//TODO: Always enable cache regardless of Cache-Control: no-cache
247+
/*request.SetHeaderByName("Cache-Control", "public, max-age=31536000", true);
248+
request.Headers.Remove("Pragma");
249+
request.Headers.Remove("Expires");
250+
request.Headers.Remove("ETag");*/
235251
if (App.Instance.AMP && request.ResourceType == ResourceType.MainFrame)
236252
{
237253
if (frame.IsMain)

SLBr/MainWindow.xaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,12 @@
2929
<StaticResource ResourceKey="TabItemStyleSelector"/>
3030
</TabControl.ItemContainerStyleSelector>
3131
</WinUI:WinUITabControl>
32-
<Grid x:Name="FullscreenContainer" Visibility="Collapsed">
32+
<Grid x:Name="FullscreenContainer" Visibility="Visible">
33+
<Popup SnapsToDevicePixels="True" x:Name="FullscreenPopup" Placement="Center" IsHitTestVisible="False" Focusable="False" AllowsTransparency="True" IsOpen="False" PopupAnimation="Fade">
34+
<Border Background="{StaticResource PrimaryBrush}" BorderThickness="1" BorderBrush="{StaticResource BorderBrush}" CornerRadius="5" Opacity="0.8">
35+
<TextBlock FontSize="25" Text="To exit fullscreen, press F11 or Esc" Margin="7.5" Foreground="{StaticResource FontBrush}"/>
36+
</Border>
37+
</Popup>
3338
</Grid>
3439
</Grid>
3540
</Window>

0 commit comments

Comments
 (0)