11using System ;
2- using System . Text ;
3- using System . Threading ;
42using System . Threading . Tasks ;
53using Newtonsoft . Json ;
64
75namespace CefSharp . Example . DevTools
86{
97 public static class DevToolsExtensions
108 {
11- private static int LastMessageId = 600000 ;
129 /// <summary>
1310 /// Calls Page.captureScreenshot without any optional params
1411 /// (Results in PNG image of default viewport)
@@ -23,58 +20,29 @@ public static async Task<byte[]> CaptureScreenShotAsPng(this IWebBrowser chromiu
2320 // throw new System.Exception("Page hasn't loaded");
2421 //}
2522
26- var host = chromiumWebBrowser . GetBrowserHost ( ) ;
23+ var browser = chromiumWebBrowser . GetBrowser ( ) ;
2724
28- if ( host == null || host . IsDisposed )
25+ if ( browser == null || browser . IsDisposed )
2926 {
30- throw new Exception ( "BrowserHost is Null or Disposed" ) ;
27+ throw new Exception ( "browser is Null or Disposed" ) ;
3128 }
3229
3330 //var param = new Dictionary<string, object>
3431 //{
3532 // { "format", "png" },
3633 //}
3734
38- var msgId = Interlocked . Increment ( ref LastMessageId ) ;
39-
40- var observer = new TaskMethodDevToolsMessageObserver ( msgId ) ;
41-
4235 //Make sure to dispose of our observer registration when done
43- //TODO: Create a single observer that maps tasks to Id's
44- //Or at least create one for each type, events and method
45- using ( var observerRegistration = host . AddDevToolsMessageObserver ( observer ) )
36+ using ( var devToolsClient = browser . GetDevToolsClient ( ) )
4637 {
47- //Page.captureScreenshot defaults to PNG, all params are optional
48- //for this DevTools method
49- int id = 0 ;
5038 const string methodName = "Page.captureScreenshot" ;
5139
52- //TODO: Simplify this, we can use an Func to reduce code duplication
53- if ( Cef . CurrentlyOnThread ( CefThreadIds . TID_UI ) )
54- {
55- id = host . ExecuteDevToolsMethod ( msgId , methodName ) ;
56- }
57- else
58- {
59- id = await Cef . UIThreadTaskFactory . StartNew ( ( ) =>
60- {
61- return host . ExecuteDevToolsMethod ( msgId , methodName ) ;
62- } ) ;
63- }
64-
65- if ( id != msgId )
66- {
67- throw new Exception ( "Message Id doesn't match the provided Id" ) ;
68- }
69-
70- var result = await observer . Task ;
71-
72- var success = result . Item1 ;
40+ var result = await devToolsClient . ExecuteDevToolsMethodAsync ( methodName ) ;
7341
74- dynamic response = JsonConvert . DeserializeObject < dynamic > ( Encoding . UTF8 . GetString ( result . Item2 ) ) ;
42+ dynamic response = JsonConvert . DeserializeObject < dynamic > ( result . ResultAsJsonString ) ;
7543
7644 //Success
77- if ( success )
45+ if ( result . Success )
7846 {
7947 return Convert . FromBase64String ( ( string ) response . data ) ;
8048 }
0 commit comments