internal Callback(CefMessageRouterBrowserSide router, int browserId, long queryId, bool persistent) { _router = router; _browserId = browserId; _queryId = queryId; _persistent = persistent; }
internal OnQueryEventArgs(CefBrowser _browser, CefFrame _frame, long _queryId, string _request, bool _persistent, CefMessageRouterBrowserSide.Callback _callback) { browser = _browser; frame = _frame; queryId = _queryId; request = _request; persistent = _persistent; callback = _callback; Handled = false; //default return value }
public override bool OnQuery(CefBrowser browser, CefFrame frame, long queryId, string request, bool persistent, CefMessageRouterBrowserSide.Callback callback) { Debug.WriteLine(DBGPREFIX + "OnQuery called, [" + queryId + " " + (persistent ? "" : "not" + " persistent]: ") + request); var handler = OnQueryEvent; if (handler != null) { Debug.WriteLine(DBGPREFIX + "OnQuery Delegate"); var e = new OnQueryEventArgs(browser, frame, queryId, request, persistent, callback); handler(this, e); return e.Handled; } return false; }
internal LVCefClient(LVCefControl lvCefControl) { Debug.WriteLine(DBGPREFIX + "Created"); if (lvCefControl == null) throw new CefRuntimeException(DBGPREFIX + "Instance of a LVCefControl required to create an LVCefClient"); _lvCefControl = lvCefControl; _messageRouter = new CefMessageRouterBrowserSide(new CefMessageRouterConfig()); LifeSpanHandler = new LVCefLifeSpanHandler(_lvCefControl, _messageRouter); RequestHandler = new LVCefRequestHandler(_lvCefControl, _messageRouter); MessageRouterHandler = new LVCefMessageRouterHandler(_lvCefControl, _messageRouter); RegisterMessageRouter(); }
/// <summary> /// Notify the associated JavaScript onFailure callback that the query has /// failed with the specified |error_code| and |error_message|. /// </summary> public void Failure(int errorCode, string errorMessage) { if (!CefRuntime.CurrentlyOn(CefThreadId.UI)) { // Must execute on the UI thread to access member variables. Helpers.PostTask(CefThreadId.UI, Helpers.Apply(this.Failure, errorCode, errorMessage) ); return; } if (_router != null) { Helpers.PostTaskUncertainty(CefThreadId.UI, Helpers.Apply(_router.OnCallbackFailure, _browserId, _queryId, errorCode, errorMessage) ); // Failure always invalidates the callback. _router = null; } }
/// <summary> /// Notify the associated JavaScript onSuccess callback that the query has /// completed successfully with the specified |response|. /// </summary> public void Success(string response) { if (!CefRuntime.CurrentlyOn(CefThreadId.UI)) { Helpers.PostTask(CefThreadId.UI, Helpers.Apply(this.Success, response) ); return; } if (_router != null) { Helpers.PostTaskUncertainty(CefThreadId.UI, Helpers.Apply(_router.OnCallbackSuccess, _browserId, _queryId, response) ); if (!_persistent) { // Non-persistent callbacks are only good for a single use. _router = null; } } }
internal LVCefMessageRouterHandler(LVCefControl lvCefControl, CefMessageRouterBrowserSide messageRouter) { Debug.WriteLine(DBGPREFIX + "Created"); _lvCefControl = lvCefControl; _messageRouter = messageRouter; }
public override bool OnQuery(CefBrowser browser, CefFrame frame, long queryId, string request, bool persistent, CefMessageRouterBrowserSide.Callback callback) { if (request == "wait5") { new Thread(() => { Thread.Sleep(5000); callback.Success("success! responded after 5 sec timeout."); // TODO: at this place crash can occurs, if application closed }).Start(); return true; } if (request == "wait5f") { new Thread(() => { Thread.Sleep(5000); callback.Failure(12345, "success! responded after 5 sec timeout. responded as failure."); }).Start(); return true; } if (request == "wait30") { new Thread(() => { Thread.Sleep(30000); callback.Success("success! responded after 30 sec timeout."); }).Start(); return true; } if (request == "noanswer") { return true; } var chars = request.ToCharArray(); Array.Reverse(chars); var response = new string(chars); callback.Success(response); return true; }
internal void Detach() { Helpers.RequireUIThread(); _router = null; }
internal LVCefRequestHandler(LVCefControl lvCefControl, CefMessageRouterBrowserSide messageRouter) { Debug.WriteLine(DBGPREFIX + "Constructor"); _lvCefControl = lvCefControl; _messageRouter = messageRouter; }