namespace Cef3 { using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Cef3.Interop; /// /// Implement this interface to handle events related to browser load status. The /// methods of this class will be called on the browser process UI thread or /// render process main thread (TID_RENDERER). /// public abstract unsafe partial class CefLoadHandler { private void on_loading_state_change(cef_load_handler_t* self, cef_browser_t* browser, int isLoading, int canGoBack, int canGoForward) { CheckSelf(self); var mBrowser = CefBrowser.FromNative(browser); OnLoadingStateChange(mBrowser, isLoading != 0, canGoBack != 0, canGoForward != 0); } /// /// Called when the loading state has changed. This callback will be executed /// twice -- once when loading is initiated either programmatically or by user /// action, and once when loading is terminated due to completion, cancellation /// of failure. /// protected virtual void OnLoadingStateChange(CefBrowser browser, bool isLoading, bool canGoBack, bool canGoForward) { } private void on_load_start(cef_load_handler_t* self, cef_browser_t* browser, cef_frame_t* frame) { CheckSelf(self); var m_browser = CefBrowser.FromNative(browser); var m_frame = CefFrame.FromNative(frame); OnLoadStart(m_browser, m_frame); } /// /// Called when the browser begins loading a frame. The |frame| value will /// never be empty -- call the IsMain() method to check if this frame is the /// main 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. /// protected virtual void OnLoadStart(CefBrowser browser, CefFrame frame) { } private void on_load_end(cef_load_handler_t* self, cef_browser_t* browser, cef_frame_t* frame, int httpStatusCode) { CheckSelf(self); var m_browser = CefBrowser.FromNative(browser); var m_frame = CefFrame.FromNative(frame); OnLoadEnd(m_browser, m_frame, httpStatusCode); } /// /// Called when the browser is done loading a frame. The |frame| value will /// never be empty -- call the IsMain() method to check if this frame is the /// main 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. /// protected virtual void OnLoadEnd(CefBrowser browser, CefFrame frame, int httpStatusCode) { } private void on_load_error(cef_load_handler_t* self, cef_browser_t* browser, cef_frame_t* frame, CefErrorCode errorCode, cef_string_t* errorText, cef_string_t* failedUrl) { CheckSelf(self); var m_browser = CefBrowser.FromNative(browser); var m_frame = CefFrame.FromNative(frame); var m_errorText = cef_string_t.ToString(errorText); var m_failedUrl = cef_string_t.ToString(failedUrl); OnLoadError(m_browser, m_frame, errorCode, m_errorText, m_failedUrl); } /// /// Called when the resource load for a navigation fails or is canceled. /// |errorCode| is the error code number, |errorText| is the error text and /// |failedUrl| is the URL that failed to load. See net\base\net_error_list.h /// for complete descriptions of the error codes. /// protected virtual void OnLoadError(CefBrowser browser, CefFrame frame, CefErrorCode errorCode, string errorText, string failedUrl) { } } }