diff --git a/gdcef/browser/src/gdbrowser.cpp b/gdcef/browser/src/gdbrowser.cpp index 9791ca7..9277a87 100644 --- a/gdcef/browser/src/gdbrowser.cpp +++ b/gdcef/browser/src/gdbrowser.cpp @@ -347,6 +347,8 @@ void GdBrowserView::_bind_methods() PropertyInfo(Variant::OBJECT, "browser"))); ADD_SIGNAL( MethodInfo("on_page_loaded", PropertyInfo(Variant::OBJECT, "browser"))); + ADD_SIGNAL(MethodInfo("on_page_start_loading", + PropertyInfo(Variant::OBJECT, "browser"))); ADD_SIGNAL(MethodInfo("on_page_failed_loading", PropertyInfo(Variant::INT, "err_code"), PropertyInfo(Variant::STRING, "err_msg"), @@ -537,6 +539,20 @@ void GdBrowserView::onPaint(CefRefPtr /*browser*/, emit_signal("on_browser_paint", this); } +//------------------------------------------------------------------------------ +void GdBrowserView::onLoadStart(CefRefPtr /*browser*/, + CefRefPtr frame) +{ + // Emit signal only when top-level frame is loading. + if (frame->IsMain()) + { + BROWSER_DEBUG("has started loading " << frame->GetURL()); + + // Emit signal for Godot script + emit_signal("on_page_start_loading", this); + } +} + //------------------------------------------------------------------------------ void GdBrowserView::onLoadEnd(CefRefPtr /*browser*/, CefRefPtr frame, diff --git a/gdcef/browser/src/gdbrowser.hpp b/gdcef/browser/src/gdbrowser.hpp index 71a8ad4..53b23a0 100644 --- a/gdcef/browser/src/gdbrowser.hpp +++ b/gdcef/browser/src/gdbrowser.hpp @@ -305,6 +305,21 @@ class GdBrowserView: public godot::Node private: // CefLoadHandler interfaces + // --------------------------------------------------------------------- + //! \brief 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. + // --------------------------------------------------------------------- + virtual void OnLoadStart(CefRefPtr browser, + CefRefPtr frame, + TransitionType transition_type) override + { + m_owner.onLoadStart(browser, frame); + } + // --------------------------------------------------------------------- //! \brief Called when the browser is done loading a frame. The |frame| //! value will never be empty -- call the IsMain() method to check if @@ -1025,6 +1040,12 @@ class GdBrowserView: public godot::Node int width, int height); + // ------------------------------------------------------------------------- + //! \brief Called by GdBrowserView::Impl::OnLoadStart + // ------------------------------------------------------------------------- + void onLoadStart(CefRefPtr browser, + CefRefPtr frame); + // ------------------------------------------------------------------------- //! \brief Called by GdBrowserView::Impl::OnLoadEnd // -------------------------------------------------------------------------