public async Task JavascriptBindingMultipleObjects() { const string script = @" (async function() { await CefSharp.BindObjectAsync('first'); await CefSharp.BindObjectAsync('first', 'second'); })();"; var objectNames = new List <string>(); var boundObj = new AsyncBoundObject(); using (var browser = new ChromiumWebBrowser("https://www.google.com")) { browser.JavascriptObjectRepository.ResolveObject += (s, e) => { objectNames.Add(e.ObjectName); #if NETCOREAPP e.ObjectRepository.Register(e.ObjectName, boundObj); #else e.ObjectRepository.Register(e.ObjectName, boundObj, isAsync: true); #endif }; await browser.LoadPageAsync(); browser.GetMainFrame().ExecuteJavaScriptAsync(script); await Task.Delay(2000); Assert.Equal(new[] { "first", "second" }, objectNames); } }
public async Task CrossSiteNavigationJavascriptBinding() { const string script = @" (async function() { await CefSharp.BindObjectAsync('bound'); bound.echo('test'); })();"; var boundObj = new AsyncBoundObject(); var browser = new ChromiumWebBrowser("https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/url"); browser.JavascriptObjectRepository.Register("bound", boundObj, true); await browser.LoadPageAsync(); browser.GetMainFrame().ExecuteJavaScriptAsync(script); await Task.Delay(2000); Assert.True(boundObj.MethodCalled); boundObj.MethodCalled = false; browser.Load("https://www.google.com"); await browser.LoadPageAsync(); browser.GetMainFrame().ExecuteJavaScriptAsync(script); await Task.Delay(2000); Assert.True(boundObj.MethodCalled); }
public async Task StopConcurrentMethodRunnerQueueWhenMethodRunning() { var boundObject = new AsyncBoundObject(); var objectRepository = new JavascriptObjectRepository(); objectRepository.NameConverter = null; #if NETCOREAPP objectRepository.Register("testObject", boundObject, BindingOptions.DefaultBinder); #else objectRepository.Register("testObject", boundObject, true, BindingOptions.DefaultBinder); #endif var methodInvocation = new MethodInvocation(1, 1, 1, nameof(boundObject.AsyncWaitTwoSeconds), 1); methodInvocation.Parameters.Add("Echo Me!"); var methodRunnerQueue = new ConcurrentMethodRunnerQueue(objectRepository); methodRunnerQueue.Enqueue(methodInvocation); //Wait a litle for the queue to start processing our Method call await Task.Delay(500); var ex = Record.Exception(() => methodRunnerQueue.Dispose()); Assert.Null(ex); }
public void ValidateAsyncTaskMethodOutput() { const string expectedResult = "Echo Me!"; var boundObject = new AsyncBoundObject(); var objectRepository = new JavascriptObjectRepository(); objectRepository.Register("testObject", boundObject, true, new BindingOptions { CamelCaseJavascriptNames = false }); var methodInvocation = new MethodInvocation(1, 1, 1, nameof(boundObject.AsyncWaitTwoSeconds), 1); methodInvocation.Parameters.Add(expectedResult); var methodRunnerQueue = new ConcurrentMethodRunnerQueue(objectRepository); var manualResetEvent = new ManualResetEvent(false); var actualResult = ""; methodRunnerQueue.MethodInvocationComplete += (sender, args) => { methodRunnerQueue.Stop(); actualResult = args.Result.Result.ToString(); manualResetEvent.Set(); }; methodRunnerQueue.Start(); methodRunnerQueue.Enqueue(methodInvocation); manualResetEvent.WaitOne(3000); Assert.Equal(expectedResult, actualResult); }
public async Task ValidateAsyncTaskMethodOutput() { const string expectedResult = "Echo Me!"; var boundObject = new AsyncBoundObject(); var objectRepository = new JavascriptObjectRepository(); objectRepository.NameConverter = null; #if NETCOREAPP objectRepository.Register("testObject", boundObject, BindingOptions.DefaultBinder); #else objectRepository.Register("testObject", boundObject, true, BindingOptions.DefaultBinder); #endif var methodInvocation = new MethodInvocation(1, 1, 1, nameof(boundObject.AsyncWaitTwoSeconds), 1); methodInvocation.Parameters.Add(expectedResult); var methodRunnerQueue = new ConcurrentMethodRunnerQueue(objectRepository); var manualResetEvent = new AsyncManualResetEvent(); var cancellationToken = new CancellationTokenSource(); cancellationToken.CancelAfter(5000); var actualResult = ""; methodRunnerQueue.MethodInvocationComplete += (sender, args) => { actualResult = args.Result.Result.ToString(); manualResetEvent.Set(); }; methodRunnerQueue.Enqueue(methodInvocation); await manualResetEvent.WaitAsync(cancellationToken.Token); Assert.Equal(expectedResult, actualResult); methodRunnerQueue.Dispose(); }
public async Task StopConcurrentMethodRunnerQueueWhenMethodRunning() { var boundObject = new AsyncBoundObject(); var objectRepository = new JavascriptObjectRepository(); objectRepository.Register("testObject", boundObject, true, new BindingOptions { CamelCaseJavascriptNames = false }); var methodInvocation = new MethodInvocation(1, 1, 1, nameof(boundObject.AsyncWaitTwoSeconds), 1); methodInvocation.Parameters.Add("Echo Me!"); var methodRunnerQueue = new ConcurrentMethodRunnerQueue(objectRepository); methodRunnerQueue.Start(); methodRunnerQueue.Enqueue(methodInvocation); //Wait a litle for the queue to start processing our Method call await Task.Delay(500); var ex = Record.Exception(() => methodRunnerQueue.Stop()); Assert.Null(ex); }