1
1
using System ;
2
- using System . Text ;
3
- using System . Threading ;
4
2
using System . Threading . Tasks ;
5
3
using Newtonsoft . Json ;
6
4
7
5
namespace CefSharp . Example . DevTools
8
6
{
9
7
public static class DevToolsExtensions
10
8
{
11
- private static int LastMessageId = 600000 ;
12
9
/// <summary>
13
10
/// Calls Page.captureScreenshot without any optional params
14
11
/// (Results in PNG image of default viewport)
@@ -23,58 +20,29 @@ public static async Task<byte[]> CaptureScreenShotAsPng(this IWebBrowser chromiu
23
20
// throw new System.Exception("Page hasn't loaded");
24
21
//}
25
22
26
- var host = chromiumWebBrowser . GetBrowserHost ( ) ;
23
+ var browser = chromiumWebBrowser . GetBrowser ( ) ;
27
24
28
- if ( host == null || host . IsDisposed )
25
+ if ( browser == null || browser . IsDisposed )
29
26
{
30
- throw new Exception ( "BrowserHost is Null or Disposed" ) ;
27
+ throw new Exception ( "browser is Null or Disposed" ) ;
31
28
}
32
29
33
30
//var param = new Dictionary<string, object>
34
31
//{
35
32
// { "format", "png" },
36
33
//}
37
34
38
- var msgId = Interlocked . Increment ( ref LastMessageId ) ;
39
-
40
- var observer = new TaskMethodDevToolsMessageObserver ( msgId ) ;
41
-
42
35
//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 ( ) )
46
37
{
47
- //Page.captureScreenshot defaults to PNG, all params are optional
48
- //for this DevTools method
49
- int id = 0 ;
50
38
const string methodName = "Page.captureScreenshot" ;
51
39
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 ) ;
73
41
74
- dynamic response = JsonConvert . DeserializeObject < dynamic > ( Encoding . UTF8 . GetString ( result . Item2 ) ) ;
42
+ dynamic response = JsonConvert . DeserializeObject < dynamic > ( result . ResultAsJsonString ) ;
75
43
76
44
//Success
77
- if ( success )
45
+ if ( result . Success )
78
46
{
79
47
return Convert . FromBase64String ( ( string ) response . data ) ;
80
48
}
0 commit comments