コード例 #1
0
        /// <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);
        }
コード例 #2
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);
        }
コード例 #3
0
 private void CheckSelf(cef_life_span_handler_t *self)
 {
     if (_self != self)
     {
         throw ExceptionBuilder.InvalidSelfReference();
     }
 }
コード例 #4
0
 protected virtual void Dispose(bool disposing)
 {
     if (_self != null)
     {
         cef_life_span_handler_t.Free(_self);
         _self = null;
     }
 }
コード例 #5
0
ファイル: CefLifeSpanHandler.g.cs プロジェクト: rajsite/lvcef
 protected virtual void Dispose(bool disposing)
 {
     if (_self != null)
     {
         cef_life_span_handler_t.Free(_self);
         _self = null;
     }
 }
コード例 #6
0
        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);
        }
コード例 #7
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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
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;
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        /// <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);
        }
コード例 #13
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);
        }
コード例 #14
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); }
         }
     }
 }
コード例 #15
0
 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);
     }
 }
コード例 #16
0
ファイル: CefLifeSpanHandler.cs プロジェクト: vmas/CefNet
        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
        }
コード例 #17
0
        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);
        }
コード例 #18
0
ファイル: CefLifeSpanHandler.g.cs プロジェクト: rajsite/lvcef
 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);
 }
コード例 #19
0
 private int get_refct(cef_life_span_handler_t *self)
 {
     return(_refct);
 }
コード例 #20
0
 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
        }
コード例 #22
0
 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
        }
コード例 #25
0
 private int has_at_least_one_ref(cef_life_span_handler_t *self)
 {
     lock (SyncRoot) { return(_refct != 0 ? 1 : 0); }
 }
コード例 #26
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));
        }
コード例 #27
0
        /// <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
 }
コード例 #29
0
ファイル: CefLifeSpanHandler.cs プロジェクト: vmas/CefNet
 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
        }