Skip to content

Commit

Permalink
Merge f255de8 into d6e79e9
Browse files Browse the repository at this point in the history
  • Loading branch information
amaitland committed Sep 11, 2020
2 parents d6e79e9 + f255de8 commit 07e3365
Show file tree
Hide file tree
Showing 486 changed files with 30,296 additions and 107 deletions.
1 change: 0 additions & 1 deletion CefSharp.Example/CefSharp.Example.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@
<ItemGroup>
<Compile Include="Callback\RunFileDialogCallback.cs" />
<Compile Include="DevTools\DevToolsExtensions.cs" />
<Compile Include="DevTools\TaskMethodDevToolsMessageObserver.cs" />
<Compile Include="Handlers\AudioHandler.cs" />
<Compile Include="Handlers\ExampleResourceRequestHandler.cs" />
<Compile Include="Handlers\ExtensionHandler.cs" />
Expand Down
46 changes: 7 additions & 39 deletions CefSharp.Example/DevTools/DevToolsExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;

namespace CefSharp.Example.DevTools
{
public static class DevToolsExtensions
{
private static int LastMessageId = 600000;
/// <summary>
/// Calls Page.captureScreenshot without any optional params
/// (Results in PNG image of default viewport)
Expand All @@ -23,58 +20,29 @@ public static async Task<byte[]> CaptureScreenShotAsPng(this IWebBrowser chromiu
// throw new System.Exception("Page hasn't loaded");
//}

var host = chromiumWebBrowser.GetBrowserHost();
var browser = chromiumWebBrowser.GetBrowser();

if (host == null || host.IsDisposed)
if (browser == null || browser.IsDisposed)
{
throw new Exception("BrowserHost is Null or Disposed");
throw new Exception("browser is Null or Disposed");
}

//var param = new Dictionary<string, object>
//{
// { "format", "png" },
//}

var msgId = Interlocked.Increment(ref LastMessageId);

var observer = new TaskMethodDevToolsMessageObserver(msgId);

//Make sure to dispose of our observer registration when done
//TODO: Create a single observer that maps tasks to Id's
//Or at least create one for each type, events and method
using (var observerRegistration = host.AddDevToolsMessageObserver(observer))
using (var devToolsClient = browser.GetDevToolsClient())
{
//Page.captureScreenshot defaults to PNG, all params are optional
//for this DevTools method
int id = 0;
const string methodName = "Page.captureScreenshot";

//TODO: Simplify this, we can use an Func to reduce code duplication
if (Cef.CurrentlyOnThread(CefThreadIds.TID_UI))
{
id = host.ExecuteDevToolsMethod(msgId, methodName);
}
else
{
id = await Cef.UIThreadTaskFactory.StartNew(() =>
{
return host.ExecuteDevToolsMethod(msgId, methodName);
});
}

if (id != msgId)
{
throw new Exception("Message Id doesn't match the provided Id");
}

var result = await observer.Task;

var success = result.Item1;
var result = await devToolsClient.ExecuteDevToolsMethodAsync(methodName);

dynamic response = JsonConvert.DeserializeObject<dynamic>(Encoding.UTF8.GetString(result.Item2));
dynamic response = JsonConvert.DeserializeObject<dynamic>(result.ResponseAsJsonString);

//Success
if (success)
if (result.Success)
{
return Convert.FromBase64String((string)response.data);
}
Expand Down
67 changes: 0 additions & 67 deletions CefSharp.Example/DevTools/TaskMethodDevToolsMessageObserver.cs

This file was deleted.

7 changes: 7 additions & 0 deletions CefSharp.OffScreen.Example/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,13 @@ private static async void MainAsync(string cachePath, double zoomLevel)
}
await LoadPageAsync(browser);

using (var devToolsClient = browser.GetDevToolsClient())
{
var response = await devToolsClient.Browser.GetVersionAsync();
var jsVersion = response.Revision;
//var success = await devToolsClient.Network.ClearBrowserCacheAsync();
}

//Check preferences on the CEF UI Thread
await Cef.UIThreadTaskFactory.StartNew(delegate
{
Expand Down
1 change: 1 addition & 0 deletions CefSharp.Test/CefSharp.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="BindingRedirectAssemblyResolver.cs" />
<Compile Include="DevTools\DevToolsClientFacts.cs" />
<Compile Include="Framework\BinderFacts.cs" />
<Compile Include="Framework\AsyncExtensionFacts.cs" />
<Compile Include="Framework\ConcurrentMethodRunnerQueueFacts.cs" />
Expand Down
92 changes: 92 additions & 0 deletions CefSharp.Test/DevTools/DevToolsClientFacts.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
// Copyright © 2017 The CefSharp Authors. All rights reserved.
//
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.

using System.Threading.Tasks;
using CefSharp.DevTools.Browser;
using CefSharp.OffScreen;
using Xunit;
using Xunit.Abstractions;

namespace CefSharp.Test.DevTools
{
//NOTE: All Test classes must be part of this collection as it manages the Cef Initialize/Shutdown lifecycle
[Collection(CefSharpFixtureCollection.Key)]
public class DevToolsClientFacts
{
private readonly ITestOutputHelper output;
private readonly CefSharpFixture fixture;

public DevToolsClientFacts(ITestOutputHelper output, CefSharpFixture fixture)
{
this.fixture = fixture;
this.output = output;
}

[Fact]
public void CanConvertDevToolsObjectToDictionary()
{
var bounds = new Bounds
{
Height = 1,
Width = 1,
Left = 1,
Top = 1,
WindowState = WindowState.Fullscreen
};

var dict = bounds.ToDictionary();

Assert.Equal(bounds.Height, (int)dict["height"]);
Assert.Equal(bounds.Width, (int)dict["width"]);
Assert.Equal(bounds.Top, (int)dict["top"]);
Assert.Equal(bounds.Left, (int)dict["left"]);
Assert.Equal("fullscreen", (string)dict["windowState"]);
}


[Fact]
public async Task CanGetDevToolsProtocolVersion()
{
using (var browser = new ChromiumWebBrowser("www.google.com"))
{
await browser.LoadPageAsync();

using (var devToolsClient = browser.GetDevToolsClient())
{
var response = await devToolsClient.Browser.GetVersionAsync();
var jsVersion = response.JsVersion;
var revision = response.Revision;

Assert.NotNull(jsVersion);
Assert.NotNull(revision);

output.WriteLine("DevTools Revision {0}", revision);
}
}
}

[Fact]
public async Task CanGetDevToolsProtocolGetWindowForTarget()
{
using (var browser = new ChromiumWebBrowser("www.google.com"))
{
await browser.LoadPageAsync();

using (var devToolsClient = browser.GetDevToolsClient())
{
var response = await devToolsClient.Browser.GetWindowForTargetAsync();
var windowId = response.WindowId;
var bounds = response.Bounds;

Assert.NotEqual(0, windowId);
Assert.NotNull(bounds);
Assert.True(bounds.Height > 0);
Assert.True(bounds.Width > 0);
Assert.True(bounds.WindowState.HasValue);
}
}
}

}
}
Loading

0 comments on commit 07e3365

Please sign in to comment.