Skip to content

Commit

Permalink
Merge 16e9c07 into d6e79e9
Browse files Browse the repository at this point in the history
  • Loading branch information
amaitland committed Sep 12, 2020
2 parents d6e79e9 + 16e9c07 commit 65fd17d
Show file tree
Hide file tree
Showing 488 changed files with 31,498 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.

9 changes: 9 additions & 0 deletions CefSharp.OffScreen.Example/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,15 @@ 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 historyResponse = await devToolsClient.Page.GetNavigationHistoryAsync();
//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
110 changes: 110 additions & 0 deletions CefSharp.Test/DevTools/DevToolsClientFacts.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
// 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.DevTools.Network;
using CefSharp.Example;
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 CanGetPageNavigationHistory()
{
using (var browser = new ChromiumWebBrowser("www.google.com"))
{
await browser.LoadPageAsync();

using (var devToolsClient = browser.GetDevToolsClient())
{
var response = await devToolsClient.Page.GetNavigationHistoryAsync();
var currentIndex = response.CurrentIndex;
var entries = response.Entries;

Assert.Equal(0, currentIndex);
Assert.NotNull(entries);
Assert.True(entries.Count > 0);
Assert.Equal(CefSharp.DevTools.Page.TransitionType.Typed, entries[0].TransitionType);
}
}
}

[Theory]
[InlineData("CefSharpTest", "CefSharp Test Cookie", CefExample.ExampleDomain, CookieSameSite.None)]
[InlineData("CefSharpTest1", "CefSharp Test Cookie2", CefExample.ExampleDomain, CookieSameSite.Lax)]
public async Task CanSetCookieForDomain(string name, string value, string domain, CookieSameSite sameSite)
{
using (var browser = new ChromiumWebBrowser("www.google.com"))
{
await browser.LoadPageAsync();

using (var devToolsClient = browser.GetDevToolsClient())
{
var response = await devToolsClient.Network.SetCookieAsync(name, value, domain: domain, sameSite:sameSite);
Assert.True(response.Success);
}
}
}

}
}
Loading

0 comments on commit 65fd17d

Please sign in to comment.