// Copyright © 2021 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.Threading; using System.Threading.Tasks; namespace CefSharp { /// /// Interface for common events/methods/properties for ChromiumWebBrowser and popup host implementations. /// /// public interface IChromiumWebBrowserBase : IDisposable { /// /// Event handler for receiving Javascript console messages being sent from web pages. /// It's important to note this event is fired on a CEF UI thread, which by default is not the same as your application UI /// thread. It is unwise to block on this thread for any length of time as your browser will become unresponsive and/or hang.. /// To access UI elements you'll need to Invoke/Dispatch onto the UI Thread. /// (The exception to this is when you're running with settings.MultiThreadedMessageLoop = false, then they'll be the same thread). /// event EventHandler ConsoleMessage; /// /// Event handler for changes to the status message. /// It's important to note this event is fired on a CEF UI thread, which by default is not the same as your application UI /// thread. It is unwise to block on this thread for any length of time as your browser will become unresponsive and/or hang. /// To access UI elements you'll need to Invoke/Dispatch onto the UI Thread. /// (The exception to this is when you're running with settings.MultiThreadedMessageLoop = false, then they'll be the same thread). /// event EventHandler StatusMessage; /// /// Event handler that will get called when the browser begins loading a frame. Multiple frames may be loading at the same /// time. Sub-frames may start or continue loading after the main frame load has ended. This method may not be called for a /// particular frame if the load request for that frame fails. For notification of overall browser load status use /// OnLoadingStateChange instead. /// It's important to note this event is fired on a CEF UI thread, which by default is not the same as your application UI /// thread. It is unwise to block on this thread for any length of time as your browser will become unresponsive and/or hang.. /// To access UI elements you'll need to Invoke/Dispatch onto the UI Thread. /// /// Whilst this may seem like a logical place to execute js, it's called before the DOM has been loaded, implement /// as it's called when the underlying V8Context is created /// event EventHandler FrameLoadStart; /// /// Event handler that will get called when the browser is done loading a frame. Multiple frames may be loading at the same /// time. Sub-frames may start or continue loading after the main frame load has ended. This method will always be called /// for all frames irrespective of whether the request completes successfully. /// It's important to note this event is fired on a CEF UI thread, which by default is not the same as your application UI /// thread. It is unwise to block on this thread for any length of time as your browser will become unresponsive and/or hang.. /// To access UI elements you'll need to Invoke/Dispatch onto the UI Thread. /// event EventHandler FrameLoadEnd; /// /// Event handler that will get called when the resource load for a navigation fails or is canceled. /// It's important to note this event is fired on a CEF UI thread, which by default is not the same as your application UI /// thread. It is unwise to block on this thread for any length of time as your browser will become unresponsive and/or hang.. /// To access UI elements you'll need to Invoke/Dispatch onto the UI Thread. /// event EventHandler LoadError; /// /// Event handler that will get called when the Loading state has changed. /// This event will be fired twice. Once when loading is initiated either programmatically or /// by user action, and once when loading is terminated due to completion, cancellation of failure. /// It's important to note this event is fired on a CEF UI thread, which by default is not the same as your application UI /// thread. It is unwise to block on this thread for any length of time as your browser will become unresponsive and/or hang.. /// To access UI elements you'll need to Invoke/Dispatch onto the UI Thread. /// event EventHandler LoadingStateChanged; /// /// Loads the specified in the Main Frame. /// Same as calling /// /// The URL to be loaded. /// /// This is exactly the same as calling Load(string), it was added /// as the method name is more meaningful and easier to discover /// via Intellisense. /// void LoadUrl(string url); /// /// Load the in the main frame of the browser /// /// url to load /// /// A that can be awaited to load the and return the HttpStatusCode and . /// A HttpStatusCode equal to 200 and is considered a success. /// Task LoadUrlAsync(string url); /// /// This resolves when the browser navigates to a new URL or reloads. /// It is useful for when you run code which will indirectly cause the browser to navigate. /// A common use case would be when executing javascript that results in a navigation. e.g. clicks a link /// This must be called before executing the action that navigates the browser. It may not resolve correctly /// if called after. /// /// /// Usage of the History API to change the URL is considered a navigation /// /// optional timeout, if not specified defaults to five(5) seconds. /// optional CancellationToken /// Task which resolves when has been called with false. /// or when is called to signify a load failure. /// /// /// /// /// /// Task WaitForNavigationAsync(TimeSpan? timeout = null, CancellationToken cancellationToken = default); /// /// A flag that indicates whether the WebBrowser is initialized (true) or not (false). /// /// true if this instance is browser initialized; otherwise, false. /// In the WPF control there are two IsBrowserInitialized properties, the ChromiumWebBrowser.IsBrowserInitialized /// property is implemented as a Dependency Property and fully supports data binding. This property /// can only be called from the UI Thread. The explicit IWebBrowser.IsBrowserInitialized interface implementation that /// can be called from any Thread. bool IsBrowserInitialized { get; } /// /// A flag that indicates whether the WebBrowser has been disposed () or not () /// /// if this instance is disposed; otherwise, bool IsDisposed { get; } /// /// A flag that indicates whether the control is currently loading one or more web pages (true) or not (false). /// /// true if this instance is loading; otherwise, false. /// In the WPF control, this property is implemented as a Dependency Property and fully supports data /// binding. bool IsLoading { get; } /// /// A flag that indicates whether the state of the control current supports the GoBack action (true) or not (false). /// /// true if this instance can go back; otherwise, false. /// In the WPF control, this property is implemented as a Dependency Property and fully supports data /// binding. bool CanGoBack { get; } /// /// A flag that indicates whether the state of the control currently supports the GoForward action (true) or not (false). /// /// true if this instance can go forward; otherwise, false. /// In the WPF control, this property is implemented as a Dependency Property and fully supports data /// binding. bool CanGoForward { get; } /// /// The address (URL) which the browser control is currently displaying. /// Will automatically be updated as the user navigates to another page (e.g. by clicking on a link). /// /// The address. /// In the WPF control, this property is implemented as a Dependency Property and fully supports data /// binding. string Address { get; } /// /// Attempts to give focus to the IWebBrowser control. /// /// true if keyboard focus and logical focus were set to this element; false if only logical focus /// was set to this element, or if the call to this method did not force the focus to change. bool Focus(); /// /// Returns the current IBrowser Instance or null. /// is the the underlying CefBrowser /// instance and provides access to frames/browserhost etc. /// IBrowser BrowserCore { get; } } }