From 995bdefe1d34bdc263233d7df031702f58af0432 Mon Sep 17 00:00:00 2001 From: nebojsasandin Date: Sun, 3 Mar 2024 14:37:00 +0100 Subject: [PATCH 1/5] Adding test to replicate this issue: https://github.com/cefsharp/CefSharp/issues/4621 --- CefSharp.Test/OffScreen/OffScreenBrowserTests.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs b/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs index 3766ac2065..a4b4d5aef3 100644 --- a/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs +++ b/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs @@ -30,7 +30,7 @@ public OffScreenBrowserTests(ITestOutputHelper output, CefSharpFixture fixture) [Fact] public async Task ShouldWorkWhenLoadingGoogle() { - using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler:false)) + using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false)) { var response = await browser.WaitForInitialLoadAsync(); var mainFrame = browser.GetMainFrame(); @@ -41,6 +41,20 @@ public async Task ShouldWorkWhenLoadingGoogle() Assert.Equal(200, response.HttpStatusCode); output.WriteLine("Url {0}", mainFrame.Url); + + browser.Load("https://accounts.google.com/"); + var nav = await browser.WaitForNavigationAsync(); + mainFrame = browser.GetMainFrame(); + + Assert.True(nav.Success); + Assert.True(mainFrame.IsValid); + Assert.Contains("accounts.google", mainFrame.Url); + Assert.Equal(200, nav.HttpStatusCode); + + output.WriteLine("Url {0}", mainFrame.Url); + + var buttonText = await mainFrame.EvaluateScriptAsync("(function() { return document.querySelector(\"button[aria-haspopup='menu']\").innerText; })();"); + Assert.Equal("Create account", buttonText); } } From aa9497109a6cd82083cc55805cb15fe3e3accd8d Mon Sep 17 00:00:00 2001 From: nebojsasandin Date: Sun, 3 Mar 2024 14:38:22 +0100 Subject: [PATCH 2/5] Add files via upload Modified Google test to replicate this issue: https://github.com/cefsharp/CefSharp/issues/4621 --- .../OffScreen/OffScreenBrowserTests.cs | 648 +++++++++--------- 1 file changed, 331 insertions(+), 317 deletions(-) diff --git a/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs b/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs index 3766ac2065..59b81252ca 100644 --- a/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs +++ b/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs @@ -1,317 +1,331 @@ -// 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; -using System.Net; -using System.Text; -using System.Threading.Tasks; -using CefSharp.Example; -using CefSharp.OffScreen; -using CefSharp.Web; -using Xunit; -using Xunit.Abstractions; - -namespace CefSharp.Test.OffScreen -{ - //NOTE: All Test classes must be part of this collection as it manages the Cef Initialize/Shutdown lifecycle - [Collection(CefSharpFixtureCollection.Key)] - public class OffScreenBrowserTests - { - private readonly ITestOutputHelper output; - private readonly CefSharpFixture fixture; - - public OffScreenBrowserTests(ITestOutputHelper output, CefSharpFixture fixture) - { - this.fixture = fixture; - this.output = output; - } - - [Fact] - public async Task ShouldWorkWhenLoadingGoogle() - { - using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler:false)) - { - var response = await browser.WaitForInitialLoadAsync(); - var mainFrame = browser.GetMainFrame(); - - Assert.True(response.Success); - Assert.True(mainFrame.IsValid); - Assert.Contains("www.google", mainFrame.Url); - Assert.Equal(200, response.HttpStatusCode); - - output.WriteLine("Url {0}", mainFrame.Url); - } - } - - [Theory] - [InlineData("http://httpbin.org/post")] - public async Task ShouldWorkWhenLoadingRequestWithPostData(string url) - { - const string data = "Testing123"; - //When Chromium Site Isolation is enabled we must first navigate to - //a web page of the same origin to use LoadRequest - //When Site Isolation is disabled we can navigate to any web page - //https://magpcss.org/ceforum/viewtopic.php?f=10&t=18672&p=50266#p50249 - using (var browser = new ChromiumWebBrowser("http://httpbin.org/", useLegacyRenderHandler: false)) - { - var response = await browser.WaitForInitialLoadAsync(); - - Assert.True(response.Success, $"Initial Load Error Code: {response.ErrorCode.ToString()} Http Status Code: {response.HttpStatusCode}"); - - var request = new Request - { - Url = "http://httpbin.org/post", - Method = "POST" - }; - var postData = new PostData(); - postData.AddElement(new PostDataElement - { - Bytes = Encoding.UTF8.GetBytes(data) - }); - - request.PostData = postData; - - await browser.LoadRequestAsync(request); - - var mainFrame = browser.GetMainFrame(); - Assert.Equal(url, mainFrame.Url); - - var navEntry = await browser.GetVisibleNavigationEntryAsync(); - - Assert.Equal((int)HttpStatusCode.OK, navEntry.HttpStatusCode); - Assert.True(navEntry.HasPostData, "Has PostData"); - - var source = await browser.GetTextAsync(); - - Assert.Contains(data, source); - } - } - - [Fact] - public async Task ShouldFailWhenLoadingInvalidDomain() - { - using (var browser = new ChromiumWebBrowser("notfound.cefsharp.test", useLegacyRenderHandler: false)) - { - var response = await browser.WaitForInitialLoadAsync(); - var mainFrame = browser.GetMainFrame(); - - Assert.True(mainFrame.IsValid); - Assert.Contains("notfound.cefsharp.test", mainFrame.Url); - Assert.Equal(CefErrorCode.NameNotResolved, response.ErrorCode); - - output.WriteLine("Url {0}", mainFrame.Url); - } - } - - [Fact] - public async Task ShouldFailWhenLoadingBadSsl() - { - using (var browser = new ChromiumWebBrowser("https://expired.badssl.com/", useLegacyRenderHandler: false)) - { - var response = await browser.WaitForInitialLoadAsync(); - var mainFrame = browser.GetMainFrame(); - - Assert.True(mainFrame.IsValid); - Assert.Contains("", mainFrame.Url); - Assert.Equal(-1, response.HttpStatusCode); - Assert.Equal(CefErrorCode.CertDateInvalid, response.ErrorCode); - - output.WriteLine("Url {0}", mainFrame.Url); - } - } - - [Fact] - public async Task ShouldRespectDisposed() - { - ChromiumWebBrowser browser; - - using (browser = new ChromiumWebBrowser(CefExample.DefaultUrl, useLegacyRenderHandler: false)) - { - var response = await browser.WaitForInitialLoadAsync(); - var mainFrame = browser.GetMainFrame(); - - Assert.True(response.Success); - Assert.True(mainFrame.IsValid); - Assert.Equal(CefExample.DefaultUrl, mainFrame.Url); - Assert.Equal(200, response.HttpStatusCode); - - output.WriteLine("Url {0}", mainFrame.Url); - } - - Assert.True(browser.IsDisposed, $"Browser IsDisposed:{browser.IsDisposed}"); - - Assert.Throws(() => - { - browser.Copy(); - }); - } - - [Fact] - public async Task ShouldWorkWhenBrowserCreatedAsync() - { - using (var chromiumWebBrowser = new ChromiumWebBrowser("http://www.google.com", automaticallyCreateBrowser: false, useLegacyRenderHandler: false)) - { - var browser = await chromiumWebBrowser.CreateBrowserAsync(); - - Assert.NotNull(browser); - Assert.False(browser.HasDocument); - Assert.NotEqual(0, browser.Identifier); - Assert.False(browser.IsDisposed); - } - } - - [Fact] - public async Task ShouldMakeFrameUrlRequest() - { - using (var browser = new ChromiumWebBrowser("https://code.jquery.com/jquery-3.4.1.min.js", useLegacyRenderHandler: false)) - { - var response = await browser.WaitForInitialLoadAsync(); - var mainFrame = browser.GetMainFrame(); - - Assert.True(response.Success); - Assert.True(mainFrame.IsValid); - - var taskCompletionSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var wasCached = false; - var requestClient = new Example.UrlRequestClient((IUrlRequest req, byte[] responseBody) => - { - wasCached = req.ResponseWasCached; - taskCompletionSource.TrySetResult(Encoding.UTF8.GetString(responseBody)); - }); - - //Can be created on any valid CEF Thread, here we'll use the CEF UI Thread - await Cef.UIThreadTaskFactory.StartNew(delegate - { - var request = mainFrame.CreateRequest(false); - - request.Method = "GET"; - request.Url = "https://code.jquery.com/jquery-3.4.1.min.js"; - var urlRequest = mainFrame.CreateUrlRequest(request, requestClient); - }); - - var stringResult = await taskCompletionSource.Task; - - Assert.True(!string.IsNullOrEmpty(stringResult)); - Assert.True(wasCached); - } - } - - [Theory] - [InlineData("https://code.jquery.com/jquery-3.4.1.min.js")] - public async Task ShouldDownloadUrlForFrame(string url) - { - using (var browser = new ChromiumWebBrowser(url, useLegacyRenderHandler: false)) - { - var response = await browser.WaitForInitialLoadAsync(); - - Assert.True(response.Success); - - var htmlSrc = await browser.GetSourceAsync(); - - Assert.NotNull(htmlSrc); - - var mainFrame = browser.GetMainFrame(); - Assert.True(mainFrame.IsValid); - - var data = await mainFrame.DownloadUrlAsync(url); - - Assert.NotNull(data); - Assert.True(data.Length > 0); - - var stringResult = Encoding.UTF8.GetString(data).Substring(0, 100); - - Assert.Contains(stringResult, htmlSrc); - } - } - - [Theory] - //TODO: Add more urls - [InlineData("http://www.google.com", "http://cefsharp.github.io/")] - public async Task CanExecuteJavascriptInMainFrameAfterNavigatingToDifferentOrigin(string firstUrl, string secondUrl) - { - using (var browser = new ChromiumWebBrowser(firstUrl, useLegacyRenderHandler: false)) - { - var response = await browser.WaitForInitialLoadAsync(); - - Assert.True(response.Success); - Assert.True(browser.CanExecuteJavascriptInMainFrame); - - await browser.LoadUrlAsync(secondUrl); - - Assert.True(browser.CanExecuteJavascriptInMainFrame); - - await browser.LoadUrlAsync(firstUrl); - - Assert.True(browser.CanExecuteJavascriptInMainFrame); - } - } - - [Fact] - public async Task ShouldWaitForBrowserInitialLoadAfterSubsequentLoad() - { - using (var browser = new ChromiumWebBrowser("http://www.google.com", useLegacyRenderHandler: false)) - { - var response = await browser.WaitForInitialLoadAsync(); - var mainFrame = browser.GetMainFrame(); - - Assert.True(mainFrame.IsValid); - Assert.Contains("www.google.com", mainFrame.Url); - Assert.Equal(CefErrorCode.None, response.ErrorCode); - Assert.Equal(200, response.HttpStatusCode); - - output.WriteLine("Url {0}", mainFrame.Url); - - response = await browser.WaitForInitialLoadAsync(); - - Assert.Equal(CefErrorCode.None, response.ErrorCode); - Assert.Equal(200, response.HttpStatusCode); - } - } - - [Fact] - public async Task ShouldFailWhenCallingTryGetBrowserCoreByIdWithInvalidId() - { - using (var browser = new ChromiumWebBrowser("http://www.google.com", useLegacyRenderHandler: false)) - { - var response = await browser.WaitForInitialLoadAsync(); - var result = browser.TryGetBrowserCoreById(100, out IBrowser browserCore); - - Assert.False(result); - Assert.Null(browserCore); - } - } - - [Fact] - public async Task ShouldWorkWhenCallingTryGetBrowserCoreByIdWithOwnId() - { - using (var browser = new ChromiumWebBrowser("http://www.google.com", useLegacyRenderHandler: false)) - { - var response = await browser.WaitForInitialLoadAsync(); - var result = browser.TryGetBrowserCoreById(browser.BrowserCore.Identifier, out IBrowser browserCore); - - Assert.True(result); - Assert.NotNull(browserCore); - Assert.Equal(browser.BrowserCore.Identifier, browserCore.Identifier); - } - } - - [SkipIfRunOnAppVeyorFact] - public async Task ShouldWorkWhenCreatingOneThousandBrowserSequentially() - { - for (int i = 0; i < 1000; i++) - { - using (var browser = new ChromiumWebBrowser(new HtmlString("Testing"), useLegacyRenderHandler: false)) - { - var response = await browser.WaitForInitialLoadAsync(); - - Assert.True(response.Success); - - var source = await browser.GetSourceAsync(); - - Assert.Contains("Testing", source); - } - } - } - } -} +// 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; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using CefSharp.Example; +using CefSharp.OffScreen; +using CefSharp.Web; +using Xunit; +using Xunit.Abstractions; + +namespace CefSharp.Test.OffScreen +{ + //NOTE: All Test classes must be part of this collection as it manages the Cef Initialize/Shutdown lifecycle + [Collection(CefSharpFixtureCollection.Key)] + public class OffScreenBrowserTests + { + private readonly ITestOutputHelper output; + private readonly CefSharpFixture fixture; + + public OffScreenBrowserTests(ITestOutputHelper output, CefSharpFixture fixture) + { + this.fixture = fixture; + this.output = output; + } + + [Fact] + public async Task ShouldWorkWhenLoadingGoogle() + { + using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + var mainFrame = browser.GetMainFrame(); + + Assert.True(response.Success); + Assert.True(mainFrame.IsValid); + Assert.Contains("www.google", mainFrame.Url); + Assert.Equal(200, response.HttpStatusCode); + + output.WriteLine("Url {0}", mainFrame.Url); + + browser.Load("https://accounts.google.com/"); + var nav = await browser.WaitForNavigationAsync(); + mainFrame = browser.GetMainFrame(); + + Assert.True(nav.Success); + Assert.True(mainFrame.IsValid); + Assert.Contains("accounts.google", mainFrame.Url); + Assert.Equal(200, nav.HttpStatusCode); + + output.WriteLine("Url {0}", mainFrame.Url); + + var buttonText = await mainFrame.EvaluateScriptAsync("(function() { return document.querySelector(\"button[aria-haspopup='menu']\").innerText; })();"); + Assert.Equal("Create account", buttonText); + } + } + + [Theory] + [InlineData("http://httpbin.org/post")] + public async Task ShouldWorkWhenLoadingRequestWithPostData(string url) + { + const string data = "Testing123"; + //When Chromium Site Isolation is enabled we must first navigate to + //a web page of the same origin to use LoadRequest + //When Site Isolation is disabled we can navigate to any web page + //https://magpcss.org/ceforum/viewtopic.php?f=10&t=18672&p=50266#p50249 + using (var browser = new ChromiumWebBrowser("http://httpbin.org/", useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + + Assert.True(response.Success, $"Initial Load Error Code: {response.ErrorCode.ToString()} Http Status Code: {response.HttpStatusCode}"); + + var request = new Request + { + Url = "http://httpbin.org/post", + Method = "POST" + }; + var postData = new PostData(); + postData.AddElement(new PostDataElement + { + Bytes = Encoding.UTF8.GetBytes(data) + }); + + request.PostData = postData; + + await browser.LoadRequestAsync(request); + + var mainFrame = browser.GetMainFrame(); + Assert.Equal(url, mainFrame.Url); + + var navEntry = await browser.GetVisibleNavigationEntryAsync(); + + Assert.Equal((int)HttpStatusCode.OK, navEntry.HttpStatusCode); + Assert.True(navEntry.HasPostData, "Has PostData"); + + var source = await browser.GetTextAsync(); + + Assert.Contains(data, source); + } + } + + [Fact] + public async Task ShouldFailWhenLoadingInvalidDomain() + { + using (var browser = new ChromiumWebBrowser("notfound.cefsharp.test", useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + var mainFrame = browser.GetMainFrame(); + + Assert.True(mainFrame.IsValid); + Assert.Contains("notfound.cefsharp.test", mainFrame.Url); + Assert.Equal(CefErrorCode.NameNotResolved, response.ErrorCode); + + output.WriteLine("Url {0}", mainFrame.Url); + } + } + + [Fact] + public async Task ShouldFailWhenLoadingBadSsl() + { + using (var browser = new ChromiumWebBrowser("https://expired.badssl.com/", useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + var mainFrame = browser.GetMainFrame(); + + Assert.True(mainFrame.IsValid); + Assert.Contains("", mainFrame.Url); + Assert.Equal(-1, response.HttpStatusCode); + Assert.Equal(CefErrorCode.CertDateInvalid, response.ErrorCode); + + output.WriteLine("Url {0}", mainFrame.Url); + } + } + + [Fact] + public async Task ShouldRespectDisposed() + { + ChromiumWebBrowser browser; + + using (browser = new ChromiumWebBrowser(CefExample.DefaultUrl, useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + var mainFrame = browser.GetMainFrame(); + + Assert.True(response.Success); + Assert.True(mainFrame.IsValid); + Assert.Equal(CefExample.DefaultUrl, mainFrame.Url); + Assert.Equal(200, response.HttpStatusCode); + + output.WriteLine("Url {0}", mainFrame.Url); + } + + Assert.True(browser.IsDisposed, $"Browser IsDisposed:{browser.IsDisposed}"); + + Assert.Throws(() => + { + browser.Copy(); + }); + } + + [Fact] + public async Task ShouldWorkWhenBrowserCreatedAsync() + { + using (var chromiumWebBrowser = new ChromiumWebBrowser("http://www.google.com", automaticallyCreateBrowser: false, useLegacyRenderHandler: false)) + { + var browser = await chromiumWebBrowser.CreateBrowserAsync(); + + Assert.NotNull(browser); + Assert.False(browser.HasDocument); + Assert.NotEqual(0, browser.Identifier); + Assert.False(browser.IsDisposed); + } + } + + [Fact] + public async Task ShouldMakeFrameUrlRequest() + { + using (var browser = new ChromiumWebBrowser("https://code.jquery.com/jquery-3.4.1.min.js", useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + var mainFrame = browser.GetMainFrame(); + + Assert.True(response.Success); + Assert.True(mainFrame.IsValid); + + var taskCompletionSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + var wasCached = false; + var requestClient = new Example.UrlRequestClient((IUrlRequest req, byte[] responseBody) => + { + wasCached = req.ResponseWasCached; + taskCompletionSource.TrySetResult(Encoding.UTF8.GetString(responseBody)); + }); + + //Can be created on any valid CEF Thread, here we'll use the CEF UI Thread + await Cef.UIThreadTaskFactory.StartNew(delegate + { + var request = mainFrame.CreateRequest(false); + + request.Method = "GET"; + request.Url = "https://code.jquery.com/jquery-3.4.1.min.js"; + var urlRequest = mainFrame.CreateUrlRequest(request, requestClient); + }); + + var stringResult = await taskCompletionSource.Task; + + Assert.True(!string.IsNullOrEmpty(stringResult)); + Assert.True(wasCached); + } + } + + [Theory] + [InlineData("https://code.jquery.com/jquery-3.4.1.min.js")] + public async Task ShouldDownloadUrlForFrame(string url) + { + using (var browser = new ChromiumWebBrowser(url, useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + + Assert.True(response.Success); + + var htmlSrc = await browser.GetSourceAsync(); + + Assert.NotNull(htmlSrc); + + var mainFrame = browser.GetMainFrame(); + Assert.True(mainFrame.IsValid); + + var data = await mainFrame.DownloadUrlAsync(url); + + Assert.NotNull(data); + Assert.True(data.Length > 0); + + var stringResult = Encoding.UTF8.GetString(data).Substring(0, 100); + + Assert.Contains(stringResult, htmlSrc); + } + } + + [Theory] + //TODO: Add more urls + [InlineData("http://www.google.com", "http://cefsharp.github.io/")] + public async Task CanExecuteJavascriptInMainFrameAfterNavigatingToDifferentOrigin(string firstUrl, string secondUrl) + { + using (var browser = new ChromiumWebBrowser(firstUrl, useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + + Assert.True(response.Success); + Assert.True(browser.CanExecuteJavascriptInMainFrame); + + await browser.LoadUrlAsync(secondUrl); + + Assert.True(browser.CanExecuteJavascriptInMainFrame); + + await browser.LoadUrlAsync(firstUrl); + + Assert.True(browser.CanExecuteJavascriptInMainFrame); + } + } + + [Fact] + public async Task ShouldWaitForBrowserInitialLoadAfterSubsequentLoad() + { + using (var browser = new ChromiumWebBrowser("http://www.google.com", useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + var mainFrame = browser.GetMainFrame(); + + Assert.True(mainFrame.IsValid); + Assert.Contains("www.google.com", mainFrame.Url); + Assert.Equal(CefErrorCode.None, response.ErrorCode); + Assert.Equal(200, response.HttpStatusCode); + + output.WriteLine("Url {0}", mainFrame.Url); + + response = await browser.WaitForInitialLoadAsync(); + + Assert.Equal(CefErrorCode.None, response.ErrorCode); + Assert.Equal(200, response.HttpStatusCode); + } + } + + [Fact] + public async Task ShouldFailWhenCallingTryGetBrowserCoreByIdWithInvalidId() + { + using (var browser = new ChromiumWebBrowser("http://www.google.com", useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + var result = browser.TryGetBrowserCoreById(100, out IBrowser browserCore); + + Assert.False(result); + Assert.Null(browserCore); + } + } + + [Fact] + public async Task ShouldWorkWhenCallingTryGetBrowserCoreByIdWithOwnId() + { + using (var browser = new ChromiumWebBrowser("http://www.google.com", useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + var result = browser.TryGetBrowserCoreById(browser.BrowserCore.Identifier, out IBrowser browserCore); + + Assert.True(result); + Assert.NotNull(browserCore); + Assert.Equal(browser.BrowserCore.Identifier, browserCore.Identifier); + } + } + + [SkipIfRunOnAppVeyorFact] + public async Task ShouldWorkWhenCreatingOneThousandBrowserSequentially() + { + for (int i = 0; i < 1000; i++) + { + using (var browser = new ChromiumWebBrowser(new HtmlString("Testing"), useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); + + Assert.True(response.Success); + + var source = await browser.GetSourceAsync(); + + Assert.Contains("Testing", source); + } + } + } + } +} From 7b3c37bc0d3145f0cf8683e6547d70fde323c5c0 Mon Sep 17 00:00:00 2001 From: nebojsasandin Date: Sat, 9 Mar 2024 14:59:22 +0100 Subject: [PATCH 3/5] Fixed test formatting, Created new test for Google -> Google Accounts navigation --- CefSharp.Test/OffScreen/OffScreenBrowserTests.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs b/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs index a4b4d5aef3..61f5a537af 100644 --- a/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs +++ b/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs @@ -41,10 +41,19 @@ public async Task ShouldWorkWhenLoadingGoogle() Assert.Equal(200, response.HttpStatusCode); output.WriteLine("Url {0}", mainFrame.Url); + } + } + + [Fact] + public async Task GoogleSearchToGoogleAccountsBreaksJS() + { + using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false)) + { + var response = await browser.WaitForInitialLoadAsync(); browser.Load("https://accounts.google.com/"); var nav = await browser.WaitForNavigationAsync(); - mainFrame = browser.GetMainFrame(); + var mainFrame = browser.GetMainFrame(); Assert.True(nav.Success); Assert.True(mainFrame.IsValid); @@ -214,7 +223,7 @@ await Cef.UIThreadTaskFactory.StartNew(delegate [Theory] [InlineData("https://code.jquery.com/jquery-3.4.1.min.js")] public async Task ShouldDownloadUrlForFrame(string url) - { + { using (var browser = new ChromiumWebBrowser(url, useLegacyRenderHandler: false)) { var response = await browser.WaitForInitialLoadAsync(); @@ -237,7 +246,7 @@ public async Task ShouldDownloadUrlForFrame(string url) Assert.Contains(stringResult, htmlSrc); } - } + } [Theory] //TODO: Add more urls From 531eecb641639bd5ca2aab7aed6dce58948e1a6f Mon Sep 17 00:00:00 2001 From: nebojsasandin Date: Sat, 9 Mar 2024 15:03:03 +0100 Subject: [PATCH 4/5] no message --- CefSharp.Test/OffScreen/OffScreenBrowserTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs b/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs index 61f5a537af..837197d8ea 100644 --- a/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs +++ b/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs @@ -51,6 +51,7 @@ public async Task GoogleSearchToGoogleAccountsBreaksJS() { var response = await browser.WaitForInitialLoadAsync(); + browser.Load("https://accounts.google.com/"); var nav = await browser.WaitForNavigationAsync(); var mainFrame = browser.GetMainFrame(); From db995888612855323b71bcffbfb8b75050cfac94 Mon Sep 17 00:00:00 2001 From: nebojsasandin Date: Sat, 9 Mar 2024 15:09:49 +0100 Subject: [PATCH 5/5] Update OffScreenBrowserTests.cs Formatted and rewritten OffScreenBrowserTests.cs to include a new test which mimics this issue: https://github.com/cefsharp/CefSharp/pull/4741 --- CefSharp.Test/OffScreen/OffScreenBrowserTests.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs b/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs index 837197d8ea..6e864961b2 100644 --- a/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs +++ b/CefSharp.Test/OffScreen/OffScreenBrowserTests.cs @@ -30,7 +30,7 @@ public OffScreenBrowserTests(ITestOutputHelper output, CefSharpFixture fixture) [Fact] public async Task ShouldWorkWhenLoadingGoogle() { - using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false)) + using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler:false)) { var response = await browser.WaitForInitialLoadAsync(); var mainFrame = browser.GetMainFrame(); @@ -51,7 +51,6 @@ public async Task GoogleSearchToGoogleAccountsBreaksJS() { var response = await browser.WaitForInitialLoadAsync(); - browser.Load("https://accounts.google.com/"); var nav = await browser.WaitForNavigationAsync(); var mainFrame = browser.GetMainFrame(); @@ -224,7 +223,7 @@ await Cef.UIThreadTaskFactory.StartNew(delegate [Theory] [InlineData("https://code.jquery.com/jquery-3.4.1.min.js")] public async Task ShouldDownloadUrlForFrame(string url) - { + { using (var browser = new ChromiumWebBrowser(url, useLegacyRenderHandler: false)) { var response = await browser.WaitForInitialLoadAsync(); @@ -247,7 +246,7 @@ public async Task ShouldDownloadUrlForFrame(string url) Assert.Contains(stringResult, htmlSrc); } - } + } [Theory] //TODO: Add more urls