Skip to content

Commit 9b2f096

Browse files
authored
Merge 2845b63 into d6e79e9
2 parents d6e79e9 + 2845b63 commit 9b2f096

File tree

487 files changed

+31395
-107
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

487 files changed

+31395
-107
lines changed

CefSharp.Example/CefSharp.Example.csproj

-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@
7676
<ItemGroup>
7777
<Compile Include="Callback\RunFileDialogCallback.cs" />
7878
<Compile Include="DevTools\DevToolsExtensions.cs" />
79-
<Compile Include="DevTools\TaskMethodDevToolsMessageObserver.cs" />
8079
<Compile Include="Handlers\AudioHandler.cs" />
8180
<Compile Include="Handlers\ExampleResourceRequestHandler.cs" />
8281
<Compile Include="Handlers\ExtensionHandler.cs" />

CefSharp.Example/DevTools/DevToolsExtensions.cs

+7-39
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
using System;
2-
using System.Text;
3-
using System.Threading;
42
using System.Threading.Tasks;
53
using Newtonsoft.Json;
64

75
namespace 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.ResponseAsJsonString);
7543

7644
//Success
77-
if (success)
45+
if (result.Success)
7846
{
7947
return Convert.FromBase64String((string)response.data);
8048
}

CefSharp.Example/DevTools/TaskMethodDevToolsMessageObserver.cs

-67
This file was deleted.

CefSharp.OffScreen.Example/Program.cs

+9
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,15 @@ private static async void MainAsync(string cachePath, double zoomLevel)
7777
}
7878
await LoadPageAsync(browser);
7979

80+
using (var devToolsClient = browser.GetDevToolsClient())
81+
{
82+
var response = await devToolsClient.Browser.GetVersionAsync();
83+
var jsVersion = response.Revision;
84+
85+
var historyResponse = await devToolsClient.Page.GetNavigationHistoryAsync();
86+
//var success = await devToolsClient.Network.ClearBrowserCacheAsync();
87+
}
88+
8089
//Check preferences on the CEF UI Thread
8190
await Cef.UIThreadTaskFactory.StartNew(delegate
8291
{

CefSharp.Test/CefSharp.Test.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@
125125
</ItemGroup>
126126
<ItemGroup>
127127
<Compile Include="BindingRedirectAssemblyResolver.cs" />
128+
<Compile Include="DevTools\DevToolsClientFacts.cs" />
128129
<Compile Include="Framework\BinderFacts.cs" />
129130
<Compile Include="Framework\AsyncExtensionFacts.cs" />
130131
<Compile Include="Framework\ConcurrentMethodRunnerQueueFacts.cs" />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// Copyright © 2017 The CefSharp Authors. All rights reserved.
2+
//
3+
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
4+
5+
using System.Threading.Tasks;
6+
using CefSharp.DevTools.Browser;
7+
using CefSharp.OffScreen;
8+
using Xunit;
9+
using Xunit.Abstractions;
10+
11+
namespace CefSharp.Test.DevTools
12+
{
13+
//NOTE: All Test classes must be part of this collection as it manages the Cef Initialize/Shutdown lifecycle
14+
[Collection(CefSharpFixtureCollection.Key)]
15+
public class DevToolsClientFacts
16+
{
17+
private readonly ITestOutputHelper output;
18+
private readonly CefSharpFixture fixture;
19+
20+
public DevToolsClientFacts(ITestOutputHelper output, CefSharpFixture fixture)
21+
{
22+
this.fixture = fixture;
23+
this.output = output;
24+
}
25+
26+
[Fact]
27+
public void CanConvertDevToolsObjectToDictionary()
28+
{
29+
var bounds = new Bounds
30+
{
31+
Height = 1,
32+
Width = 1,
33+
Left = 1,
34+
Top = 1,
35+
WindowState = WindowState.Fullscreen
36+
};
37+
38+
var dict = bounds.ToDictionary();
39+
40+
Assert.Equal(bounds.Height, (int)dict["height"]);
41+
Assert.Equal(bounds.Width, (int)dict["width"]);
42+
Assert.Equal(bounds.Top, (int)dict["top"]);
43+
Assert.Equal(bounds.Left, (int)dict["left"]);
44+
Assert.Equal("fullscreen", (string)dict["windowState"]);
45+
}
46+
47+
48+
[Fact]
49+
public async Task CanGetDevToolsProtocolVersion()
50+
{
51+
using (var browser = new ChromiumWebBrowser("www.google.com"))
52+
{
53+
await browser.LoadPageAsync();
54+
55+
using (var devToolsClient = browser.GetDevToolsClient())
56+
{
57+
var response = await devToolsClient.Browser.GetVersionAsync();
58+
var jsVersion = response.JsVersion;
59+
var revision = response.Revision;
60+
61+
Assert.NotNull(jsVersion);
62+
Assert.NotNull(revision);
63+
64+
output.WriteLine("DevTools Revision {0}", revision);
65+
}
66+
}
67+
}
68+
69+
[Fact]
70+
public async Task CanGetPageNavigationHistory()
71+
{
72+
using (var browser = new ChromiumWebBrowser("www.google.com"))
73+
{
74+
await browser.LoadPageAsync();
75+
76+
using (var devToolsClient = browser.GetDevToolsClient())
77+
{
78+
var response = await devToolsClient.Page.GetNavigationHistoryAsync();
79+
var currentIndex = response.CurrentIndex;
80+
var entries = response.Entries;
81+
82+
Assert.NotEqual(0, currentIndex);
83+
Assert.NotNull(entries);
84+
Assert.True(entries.Count > 0);
85+
}
86+
}
87+
}
88+
89+
}
90+
}

0 commit comments

Comments
 (0)