diff --git a/cef3/include/capi/cef_jsdialog_handler_capi.h b/cef3/include/capi/cef_jsdialog_handler_capi.h index 4869f54ea..0ee6309a0 100644 --- a/cef3/include/capi/cef_jsdialog_handler_capi.h +++ b/cef3/include/capi/cef_jsdialog_handler_capi.h @@ -116,6 +116,12 @@ typedef struct _cef_jsdialog_handler_t { /// void (CEF_CALLBACK *on_reset_dialog_state)( struct _cef_jsdialog_handler_t* self, struct _cef_browser_t* browser); + + /// + // Called when the default implementation dialog is closed. + /// + void (CEF_CALLBACK *on_dialog_closed)(struct _cef_jsdialog_handler_t* self, + struct _cef_browser_t* browser); } cef_jsdialog_handler_t; diff --git a/cef3/include/cef_jsdialog_handler.h b/cef3/include/cef_jsdialog_handler.h index f2a4cf849..723557d5e 100644 --- a/cef3/include/cef_jsdialog_handler.h +++ b/cef3/include/cef_jsdialog_handler.h @@ -117,6 +117,12 @@ class CefJSDialogHandler : public virtual CefBase { /// /*--cef()--*/ virtual void OnResetDialogState(CefRefPtr browser) {} + + /// + // Called when the default implementation dialog is closed. + /// + /*--cef()--*/ + virtual void OnDialogClosed(CefRefPtr browser) {} }; #endif // CEF_INCLUDE_CEF_JSDIALOG_HANDLER_H_ diff --git a/cef3/libcef/browser/javascript_dialog_manager.cc b/cef3/libcef/browser/javascript_dialog_manager.cc index af9ce26d8..98f08db3b 100644 --- a/cef3/libcef/browser/javascript_dialog_manager.cc +++ b/cef3/libcef/browser/javascript_dialog_manager.cc @@ -209,5 +209,11 @@ void CefJavaScriptDialogManager::DialogClosed(CefJavaScriptDialog* dialog) { #if defined(OS_MACOSX) || defined(OS_WIN) || defined(TOOLKIT_GTK) DCHECK_EQ(dialog, dialog_.get()); dialog_.reset(); + CefRefPtr client = browser_->GetClient(); + if (client.get()) { + CefRefPtr handler = client->GetJSDialogHandler(); + if (handler.get()) + handler->OnDialogClosed(browser_); + } #endif } diff --git a/cef3/libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc b/cef3/libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc index d3dd01940..1a4071e91 100644 --- a/cef3/libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc +++ b/cef3/libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc @@ -116,6 +116,23 @@ void CEF_CALLBACK jsdialog_handler_on_reset_dialog_state( CefBrowserCToCpp::Wrap(browser)); } +void CEF_CALLBACK jsdialog_handler_on_dialog_closed( + struct _cef_jsdialog_handler_t* self, cef_browser_t* browser) { + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + DCHECK(self); + if (!self) + return; + // Verify param: browser; type: refptr_diff + DCHECK(browser); + if (!browser) + return; + + // Execute + CefJSDialogHandlerCppToC::Get(self)->OnDialogClosed( + CefBrowserCToCpp::Wrap(browser)); +} + // CONSTRUCTOR - Do not edit by hand. @@ -127,6 +144,7 @@ CefJSDialogHandlerCppToC::CefJSDialogHandlerCppToC(CefJSDialogHandler* cls) jsdialog_handler_on_before_unload_dialog; struct_.struct_.on_reset_dialog_state = jsdialog_handler_on_reset_dialog_state; + struct_.struct_.on_dialog_closed = jsdialog_handler_on_dialog_closed; } #ifndef NDEBUG diff --git a/cef3/libcef_dll/ctocpp/jsdialog_handler_ctocpp.cc b/cef3/libcef_dll/ctocpp/jsdialog_handler_ctocpp.cc index 9eceb4189..06e187a7c 100644 --- a/cef3/libcef_dll/ctocpp/jsdialog_handler_ctocpp.cc +++ b/cef3/libcef_dll/ctocpp/jsdialog_handler_ctocpp.cc @@ -108,6 +108,22 @@ void CefJSDialogHandlerCToCpp::OnResetDialogState( CefBrowserCppToC::Wrap(browser)); } +void CefJSDialogHandlerCToCpp::OnDialogClosed(CefRefPtr browser) { + if (CEF_MEMBER_MISSING(struct_, on_dialog_closed)) + return; + + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + // Verify param: browser; type: refptr_diff + DCHECK(browser.get()); + if (!browser.get()) + return; + + // Execute + struct_->on_dialog_closed(struct_, + CefBrowserCppToC::Wrap(browser)); +} + #ifndef NDEBUG template<> long CefCToCpp callback) OVERRIDE; virtual void OnResetDialogState(CefRefPtr browser) OVERRIDE; + virtual void OnDialogClosed(CefRefPtr browser) OVERRIDE; }; #endif // BUILDING_CEF_SHARED