/// <summary> /// Called before a new popup window is created. /// The |parentBrowser| parameter will point to the parent browser window. /// The |popupFeatures| parameter will contain information about the style of popup window requested. /// Return false to have the framework create the new popup window based on the parameters in |windowInfo|. /// Return true to cancel creation of the popup window. /// By default, a newly created popup window will have the same client and settings as the parent window. /// To change the client for the new window modify the object that |client| points to. /// To change the settings for the new window modify the |settings| structure. /// </summary> private int on_before_popup(cef_life_span_handler_t *self, cef_browser_t *parentBrowser, /*const*/ cef_popup_features_t *popupFeatures, cef_window_info_t *windowInfo, /*const*/ cef_string_t *url, cef_client_t **client, cef_browser_settings_t *settings) { ThrowIfObjectDisposed(); var m_client = CefClient.From(*client); var m_parentBrowser = CefBrowser.From(parentBrowser); var m_popupFeatures = CefPopupFeatures.From(popupFeatures); var m_windowInfo = CefWindowInfo.From(windowInfo); var m_url = cef_string_t.ToString(url); var m_settings = CefBrowserSettings.From(settings); var o_client = m_client; var handled = this.OnBeforePopup(m_parentBrowser, m_popupFeatures, m_windowInfo, m_url, ref m_client, m_settings); if (!handled && m_client != o_client && m_client != null) { *client = m_client.GetNativePointerAndAddRef(); } m_popupFeatures.Dispose(); m_windowInfo.Dispose(); m_settings.Dispose(); return(handled ? 1 : 0); }
private int on_before_popup(cef_life_span_handler_t *self, cef_browser_t *browser, cef_frame_t *frame, cef_string_t *target_url, cef_string_t *target_frame_name, CefWindowOpenDisposition target_disposition, int user_gesture, cef_popup_features_t *popupFeatures, cef_window_info_t *windowInfo, cef_client_t **client, cef_browser_settings_t *settings, int *no_javascript_access) { CheckSelf(self); var m_browser = CefBrowser.FromNative(browser); var m_frame = CefFrame.FromNative(frame); var m_targetUrl = cef_string_t.ToString(target_url); var m_targetFrameName = cef_string_t.ToString(target_frame_name); var m_userGesture = user_gesture != 0; var m_popupFeatures = new CefPopupFeatures(popupFeatures); var m_windowInfo = CefWindowInfo.FromNative(windowInfo); var m_client = CefClient.FromNative(*client); var m_settings = new CefBrowserSettings(settings); var m_noJavascriptAccess = (*no_javascript_access) != 0; var o_client = m_client; var result = OnBeforePopup(m_browser, m_frame, m_targetUrl, m_targetFrameName, target_disposition, m_userGesture, m_popupFeatures, m_windowInfo, ref m_client, m_settings, ref m_noJavascriptAccess); if ((object)o_client != m_client && m_client != null) { *client = m_client.ToNative(); } *no_javascript_access = m_noJavascriptAccess ? 1 : 0; m_popupFeatures.Dispose(); m_windowInfo.Dispose(); m_settings.Dispose(); return(result ? 1 : 0); }
private void CheckSelf(cef_life_span_handler_t *self) { if (_self != self) { throw ExceptionBuilder.InvalidSelfReference(); } }
protected virtual void Dispose(bool disposing) { if (_self != null) { cef_life_span_handler_t.Free(_self); _self = null; } }
private int run_modal(cef_life_span_handler_t *self, cef_browser_t *browser) { CheckSelf(self); var m_browser = CefBrowser.FromNative(browser); return(RunModal(m_browser) ? 1 : 0); }
private void on_before_close(cef_life_span_handler_t *self, cef_browser_t *browser) { CheckSelf(self); var m_browser = CefBrowser.FromNative(browser); OnBeforeClose(m_browser); }
private void on_after_created(cef_life_span_handler_t *self, cef_browser_t *browser) { CheckSelf(self); var m_browser = CefBrowser.FromNative(browser); OnAfterCreated(m_browser); }
private int do_close(cef_life_span_handler_t *self, cef_browser_t *browser) { CheckSelf(self); var m_browser = CefBrowser.FromNative(browser); return(DoClose(m_browser) ? 1 : 0); }
public CefLifeSpanHandler(CefClient ownerClient) { Client = ownerClient; cef_life_span_handler_t *self = FixedPtr; self->on_after_created = holder_on_after_created; self->on_before_close = holder_on_before_close; self->on_before_popup = holder_on_before_popup; }
public CefLifeSpanHandler() { cef_life_span_handler_t *self = this.NativeInstance; self->on_before_popup = (void *)Marshal.GetFunctionPointerForDelegate(fnOnBeforePopup); self->on_after_created = (void *)Marshal.GetFunctionPointerForDelegate(fnOnAfterCreated); self->do_close = (void *)Marshal.GetFunctionPointerForDelegate(fnDoClose); self->on_before_close = (void *)Marshal.GetFunctionPointerForDelegate(fnOnBeforeClose); }
/// <summary> /// Called when a modal window is about to display and the modal loop /// should begin running. Return false to use the default modal loop /// implementation or true to use a custom implementation. /// </summary> private int run_modal(cef_life_span_handler_t *self, cef_browser_t *browser) { ThrowIfObjectDisposed(); var m_browser = CefBrowser.From(browser); var handled = this.RunModal(m_browser); return(handled ? 1 : 0); }
/// <summary> /// Called when a window has recieved a request to close. Return false to /// proceed with the window close or true to cancel the window close. If /// this is a modal window and a custom modal loop implementation was /// provided in RunModal() this callback should be used to restore the /// opener window to a usable state. /// </summary> private int do_close(cef_life_span_handler_t *self, cef_browser_t *browser) { ThrowIfObjectDisposed(); var m_browser = CefBrowser.From(browser); var handled = this.DoClose(m_browser); return(handled ? 1 : 0); }
private void add_ref(cef_life_span_handler_t *self) { lock (SyncRoot) { var result = ++_refct; if (result == 1) { lock (_roots) { _roots.Add((IntPtr)_self, this); } } } }
private int release(cef_life_span_handler_t *self) { lock (SyncRoot) { var result = --_refct; if (result == 0) { lock (_roots) { _roots.Remove((IntPtr)_self); } } return(result); } }
public CefLifeSpanHandler() { cef_life_span_handler_t *self = this.NativeInstance; #if NET_LESS_5_0 self->on_before_popup = (void *)Marshal.GetFunctionPointerForDelegate(fnOnBeforePopup); self->on_after_created = (void *)Marshal.GetFunctionPointerForDelegate(fnOnAfterCreated); self->do_close = (void *)Marshal.GetFunctionPointerForDelegate(fnDoClose); self->on_before_close = (void *)Marshal.GetFunctionPointerForDelegate(fnOnBeforeClose); #else self->on_before_popup = (delegate * unmanaged[Stdcall] < cef_life_span_handler_t *, cef_browser_t *, cef_frame_t *, cef_string_t *, cef_string_t *, CefWindowOpenDisposition, int, cef_popup_features_t *, cef_window_info_t *, cef_client_t **, cef_browser_settings_t *, cef_dictionary_value_t **, int *, int >) & OnBeforePopupImpl; self->on_after_created = (delegate * unmanaged[Stdcall] < cef_life_span_handler_t *, cef_browser_t *, void >) & OnAfterCreatedImpl; self->do_close = (delegate * unmanaged[Stdcall] < cef_life_span_handler_t *, cef_browser_t *, int >) & DoCloseImpl; self->on_before_close = (delegate * unmanaged[Stdcall] < cef_life_span_handler_t *, cef_browser_t *, void >) & OnBeforeCloseImpl; #endif }
protected CefLifeSpanHandler() { _self = cef_life_span_handler_t.Alloc(); _ds0 = new cef_life_span_handler_t.add_ref_delegate(add_ref); _self->_base._add_ref = Marshal.GetFunctionPointerForDelegate(_ds0); _ds1 = new cef_life_span_handler_t.release_delegate(release); _self->_base._release = Marshal.GetFunctionPointerForDelegate(_ds1); _ds2 = new cef_life_span_handler_t.has_one_ref_delegate(has_one_ref); _self->_base._has_one_ref = Marshal.GetFunctionPointerForDelegate(_ds2); _ds3 = new cef_life_span_handler_t.on_before_popup_delegate(on_before_popup); _self->_on_before_popup = Marshal.GetFunctionPointerForDelegate(_ds3); _ds4 = new cef_life_span_handler_t.on_after_created_delegate(on_after_created); _self->_on_after_created = Marshal.GetFunctionPointerForDelegate(_ds4); _ds5 = new cef_life_span_handler_t.do_close_delegate(do_close); _self->_do_close = Marshal.GetFunctionPointerForDelegate(_ds5); _ds6 = new cef_life_span_handler_t.on_before_close_delegate(on_before_close); _self->_on_before_close = Marshal.GetFunctionPointerForDelegate(_ds6); }
protected CefLifeSpanHandler() { _self = cef_life_span_handler_t.Alloc(); _ds0 = new cef_life_span_handler_t.add_ref_delegate(add_ref); _self->_base._add_ref = Marshal.GetFunctionPointerForDelegate(_ds0); _ds1 = new cef_life_span_handler_t.release_delegate(release); _self->_base._release = Marshal.GetFunctionPointerForDelegate(_ds1); _ds2 = new cef_life_span_handler_t.has_one_ref_delegate(has_one_ref); _self->_base._has_one_ref = Marshal.GetFunctionPointerForDelegate(_ds2); _ds3 = new cef_life_span_handler_t.on_before_popup_delegate(on_before_popup); _self->_on_before_popup = Marshal.GetFunctionPointerForDelegate(_ds3); _ds4 = new cef_life_span_handler_t.on_after_created_delegate(on_after_created); _self->_on_after_created = Marshal.GetFunctionPointerForDelegate(_ds4); _ds5 = new cef_life_span_handler_t.run_modal_delegate(run_modal); _self->_run_modal = Marshal.GetFunctionPointerForDelegate(_ds5); _ds6 = new cef_life_span_handler_t.do_close_delegate(do_close); _self->_do_close = Marshal.GetFunctionPointerForDelegate(_ds6); _ds7 = new cef_life_span_handler_t.on_before_close_delegate(on_before_close); _self->_on_before_close = Marshal.GetFunctionPointerForDelegate(_ds7); }
private int get_refct(cef_life_span_handler_t *self) { return(_refct); }
internal static void Free(cef_life_span_handler_t *ptr) { Marshal.FreeHGlobal((IntPtr)ptr); }
/// <summary> /// Called when a browser has recieved a request to close. This may result /// directly from a call to CefBrowserHost::CloseBrowser() or indirectly if the /// browser is a top-level OS window created by CEF and the user attempts to /// close the window. This method will be called after the JavaScript /// 'onunload' event has been fired. It will not be called for browsers after /// the associated OS window has been destroyed (for those browsers it is no /// longer possible to cancel the close). /// If CEF created an OS window for the browser returning false will send an OS /// close notification to the browser window's top-level owner (e.g. WM_CLOSE /// on Windows, performClose: on OS-X and "delete_event" on Linux). If no OS /// window exists (window rendering disabled) returning false will cause the /// browser object to be destroyed immediately. Return true if the browser is /// parented to another window and that other window needs to receive close /// notification via some non-standard technique. /// If an application provides its own top-level window it should handle OS /// close notifications by calling CefBrowserHost::CloseBrowser(false) instead /// of immediately closing (see the example below). This gives CEF an /// opportunity to process the 'onbeforeunload' event and optionally cancel the /// close before DoClose() is called. /// The CefLifeSpanHandler::OnBeforeClose() method will be called immediately /// before the browser object is destroyed. The application should only exit /// after OnBeforeClose() has been called for all existing browsers. /// If the browser represents a modal window and a custom modal loop /// implementation was provided in CefLifeSpanHandler::RunModal() this callback /// should be used to restore the opener window to a usable state. /// By way of example consider what should happen during window close when the /// browser is parented to an application-provided top-level OS window. /// 1. User clicks the window close button which sends an OS close /// notification (e.g. WM_CLOSE on Windows, performClose: on OS-X and /// "delete_event" on Linux). /// 2. Application's top-level window receives the close notification and: /// A. Calls CefBrowserHost::CloseBrowser(false). /// B. Cancels the window close. /// 3. JavaScript 'onbeforeunload' handler executes and shows the close /// confirmation dialog (which can be overridden via /// CefJSDialogHandler::OnBeforeUnloadDialog()). /// 4. User approves the close. /// 5. JavaScript 'onunload' handler executes. /// 6. Application's DoClose() handler is called. Application will: /// A. Set a flag to indicate that the next close attempt will be allowed. /// B. Return false. /// 7. CEF sends an OS close notification. /// 8. Application's top-level window receives the OS close notification and /// allows the window to close based on the flag from #6B. /// 9. Browser OS window is destroyed. /// 10. Application's CefLifeSpanHandler::OnBeforeClose() handler is called and /// the browser object is destroyed. /// 11. Application exits by calling CefQuitMessageLoop() if no other browsers /// exist. /// </summary> // protected abstract int DoClose(cef_browser_t* browser); private void on_before_close(cef_life_span_handler_t *self, cef_browser_t *browser) { CheckSelf(self); throw new NotImplementedException(); // TODO: CefLifeSpanHandler.OnBeforeClose }
private int has_one_ref(cef_life_span_handler_t *self) { lock (SyncRoot) { return(_refct == 1 ? 1 : 0); } }
/// <summary> /// Called on the IO thread before a new popup browser is created. The /// |browser| and |frame| values represent the source of the popup request. The /// |target_url| and |target_frame_name| values indicate where the popup /// browser should navigate and may be empty if not specified with the request. /// The |target_disposition| value indicates where the user intended to open /// the popup (e.g. current tab, new tab, etc). The |user_gesture| value will /// be true if the popup was opened via explicit user gesture (e.g. clicking a /// link) or false if the popup opened automatically (e.g. via the /// DomContentLoaded event). The |popupFeatures| structure contains additional /// information about the requested popup window. To allow creation of the /// popup browser optionally modify |windowInfo|, |client|, |settings| and /// |no_javascript_access| and return false. To cancel creation of the popup /// browser return true. The |client| and |settings| values will default to the /// source browser's values. If the |no_javascript_access| value is set to /// false the new browser will not be scriptable and may not be hosted in the /// same renderer process as the source browser. /// </summary> // protected abstract int OnBeforePopup(cef_browser_t* browser, cef_frame_t* frame, cef_string_t* target_url, cef_string_t* target_frame_name, CefWindowOpenDisposition target_disposition, int user_gesture, cef_popup_features_t* popupFeatures, cef_window_info_t* windowInfo, cef_client_t** client, cef_browser_settings_t* settings, int* no_javascript_access); private void on_after_created(cef_life_span_handler_t *self, cef_browser_t *browser) { CheckSelf(self); throw new NotImplementedException(); // TODO: CefLifeSpanHandler.OnAfterCreated }
/// <summary> /// Called after a new browser is created. /// </summary> // protected abstract void OnAfterCreated(cef_browser_t* browser); private int run_modal(cef_life_span_handler_t *self, cef_browser_t *browser) { CheckSelf(self); throw new NotImplementedException(); // TODO: CefLifeSpanHandler.RunModal }
private int has_at_least_one_ref(cef_life_span_handler_t *self) { lock (SyncRoot) { return(_refct != 0 ? 1 : 0); } }
/// <summary> /// Called just before a window is closed. /// If this is a modal window and you handled the RunModal() event you can use this callback to restore the opener window to a usable state. /// </summary> private void on_before_close(cef_life_span_handler_t *self, cef_browser_t *browser) { ThrowIfObjectDisposed(); this.OnBeforeClose(CefBrowser.From(browser)); }
/// <summary> /// Called after a new window is created. /// </summary> private void on_after_created(cef_life_span_handler_t *self, cef_browser_t *browser) { ThrowIfObjectDisposed(); this.OnAfterCreated(CefBrowser.From(browser)); }
private int on_before_popup(cef_life_span_handler_t *self, cef_browser_t *browser, cef_frame_t *frame, cef_string_t *target_url, cef_string_t *target_frame_name, CefWindowOpenDisposition target_disposition, int user_gesture, cef_popup_features_t *popupFeatures, cef_window_info_t *windowInfo, cef_client_t **client, cef_browser_settings_t *settings, int *no_javascript_access) { CheckSelf(self); throw new NotImplementedException(); // TODO: CefLifeSpanHandler.OnBeforePopup }
public CefLifeSpanHandler(cef_life_span_handler_t *instance) : base((cef_base_ref_counted_t *)instance) { }
/// <summary> /// Called when a modal window is about to display and the modal loop should /// begin running. Return false to use the default modal loop implementation or /// true to use a custom implementation. /// </summary> // protected abstract int RunModal(cef_browser_t* browser); private int do_close(cef_life_span_handler_t *self, cef_browser_t *browser) { CheckSelf(self); throw new NotImplementedException(); // TODO: CefLifeSpanHandler.DoClose }