diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e12f87e..7affb595 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,7 +132,7 @@ set_property(GLOBAL PROPERTY OS_FOLDERS ON) # Specify the CEF distribution version. if(NOT DEFINED CEF_VERSION) - set(CEF_VERSION "122.1.10+gc902316+chromium-122.0.6261.112") + set(CEF_VERSION "130.1.9+gfc42567+chromium-130.0.6723.70") endif() # Determine the platform. diff --git a/java/org/cef/CefClient.java b/java/org/cef/CefClient.java index e3008c41..a3c4c386 100644 --- a/java/org/cef/CefClient.java +++ b/java/org/cef/CefClient.java @@ -212,10 +212,11 @@ public void removeDialogHandler() { @Override public boolean onFileDialog(CefBrowser browser, FileDialogMode mode, String title, - String defaultFilePath, Vector acceptFilters, CefFileDialogCallback callback) { + String defaultFilePath, Vector acceptFilters, Vector acceptExtensions, + Vector acceptDescriptions, CefFileDialogCallback callback) { if (dialogHandler_ != null && browser != null) { - return dialogHandler_.onFileDialog( - browser, mode, title, defaultFilePath, acceptFilters, callback); + return dialogHandler_.onFileDialog(browser, mode, title, defaultFilePath, acceptFilters, + acceptExtensions, acceptDescriptions, callback); } return false; } @@ -244,9 +245,9 @@ public void onTitleChange(CefBrowser browser, String title) { } @Override - public void OnFullscreenModeChange(CefBrowser browser, boolean fullscreen) { + public void onFullscreenModeChange(CefBrowser browser, boolean fullscreen) { if (displayHandler_ != null && browser != null) - displayHandler_.OnFullscreenModeChange(browser, fullscreen); + displayHandler_.onFullscreenModeChange(browser, fullscreen); } @Override @@ -303,10 +304,12 @@ public void removeDownloadHandler() { } @Override - public void onBeforeDownload(CefBrowser browser, CefDownloadItem downloadItem, - String suggestedName, CefBeforeDownloadCallback callback) { + public boolean onBeforeDownload(CefBrowser browser, CefDownloadItem downloadItem, + String suggestedName, CefBeforeDownloadCallback callback) { if (downloadHandler_ != null && browser != null) - downloadHandler_.onBeforeDownload(browser, downloadItem, suggestedName, callback); + return downloadHandler_.onBeforeDownload( + browser, downloadItem, suggestedName, callback); + return false; } @Override @@ -757,8 +760,10 @@ public boolean onCertificateError( } @Override - public void onRenderProcessTerminated(CefBrowser browser, TerminationStatus status) { - if (requestHandler_ != null) requestHandler_.onRenderProcessTerminated(browser, status); + public void onRenderProcessTerminated( + CefBrowser browser, TerminationStatus status, int error_code, String error_string) { + if (requestHandler_ != null) + requestHandler_.onRenderProcessTerminated(browser, status, error_code, error_string); } // CefWindowHandler diff --git a/java/org/cef/CefSettings.java b/java/org/cef/CefSettings.java index 49583d0a..209b6042 100644 --- a/java/org/cef/CefSettings.java +++ b/java/org/cef/CefSettings.java @@ -214,15 +214,6 @@ public ColorType clone() { */ public String locales_dir_path = null; - /** - * Set to true to disable loading of pack files for resources and locales. - * A resource bundle handler must be provided for the browser and render - * processes via CefApp::GetResourceBundleHandler() if loading of pack files - * is disabled. Also configurable using the "disable-pack-loading" command- - * line switch. - */ - public boolean pack_loading_disabled = false; - /** * Set to a value between 1024 and 65535 to enable remote debugging on the * specified port. For example, if 8080 is specified the remote debugging URL @@ -284,7 +275,6 @@ public CefSettings clone() { tmp.javascript_flags = javascript_flags; tmp.resources_dir_path = resources_dir_path; tmp.locales_dir_path = locales_dir_path; - tmp.pack_loading_disabled = pack_loading_disabled; tmp.remote_debugging_port = remote_debugging_port; tmp.uncaught_exception_stack_size = uncaught_exception_stack_size; if (background_color != null) tmp.background_color = background_color.clone(); diff --git a/java/org/cef/browser/CefBrowser.java b/java/org/cef/browser/CefBrowser.java index d9343120..cfe3e039 100644 --- a/java/org/cef/browser/CefBrowser.java +++ b/java/org/cef/browser/CefBrowser.java @@ -331,18 +331,21 @@ public void runFileDialog(FileDialogMode mode, String title, String defaultFileP public void stopFinding(boolean clearSelection); /** - * Get an instance of the DevTools to be displayed in its own window or to be - * embedded within your UI. Only one instance per browser is available. + * Get an instance of the DevTools to be displayed in its own window. */ - public CefBrowser getDevTools(); + public void openDevTools(); /** - * Get an instance of the DevTools to be displayed in its own window or to be - * embedded within your UI. Only one instance per browser is available. + * Open an instance of the DevTools to be displayed in its own window. * * @param inspectAt a position in the UI which should be inspected. */ - public CefBrowser getDevTools(Point inspectAt); + public void openDevTools(Point inspectAt); + + /** + * Close the DevTools. + */ + public void closeDevTools(); /** * Get an instance of a client that can be used to leverage the DevTools diff --git a/java/org/cef/browser/CefBrowser_N.java b/java/org/cef/browser/CefBrowser_N.java index 72502f64..6c4d5595 100644 --- a/java/org/cef/browser/CefBrowser_N.java +++ b/java/org/cef/browser/CefBrowser_N.java @@ -35,7 +35,6 @@ public abstract class CefBrowser_N extends CefNativeAdapter implements CefBrowse private final CefRequestContext request_context_; private volatile CefBrowser_N parent_ = null; private volatile Point inspectAt_ = null; - private volatile CefBrowser_N devTools_ = null; private volatile CefDevToolsClient devToolsClient_ = null; private boolean closeAllowed_ = false; private volatile boolean isClosed_ = false; @@ -112,7 +111,6 @@ public synchronized void onBeforeClose() { if (request_context_ != null) request_context_.dispose(); if (parent_ != null) { parent_.closeDevTools(); - parent_.devTools_ = null; parent_ = null; } if (devToolsClient_ != null) { @@ -121,16 +119,13 @@ public synchronized void onBeforeClose() { } @Override - public CefBrowser getDevTools() { - return getDevTools(null); + public void openDevTools() { + openDevTools(null); } @Override - public synchronized CefBrowser getDevTools(Point inspectAt) { - if (devTools_ == null) { - devTools_ = createDevToolsBrowser(client_, url_, request_context_, this, inspectAt); - } - return devTools_; + public synchronized void openDevTools(Point inspectAt) { + createDevToolsBrowser(client_, url_, request_context_, this, inspectAt).createImmediately(); } @Override @@ -572,7 +567,8 @@ public void stopFinding(boolean clearSelection) { } } - protected final void closeDevTools() { + @Override + public void closeDevTools() { try { N_CloseDevTools(); } catch (UnsatisfiedLinkError ule) { diff --git a/java/org/cef/handler/CefAppHandlerAdapter.java b/java/org/cef/handler/CefAppHandlerAdapter.java index 1d0bc15b..9947b74c 100644 --- a/java/org/cef/handler/CefAppHandlerAdapter.java +++ b/java/org/cef/handler/CefAppHandlerAdapter.java @@ -48,11 +48,13 @@ public void onBeforeCommandLineProcessing(String process_type, CefCommandLine co case 1: { // Switches can optionally have a value specified using the '=' delimiter // (e.g. "-switch=value"). - String[] switchVals = arg.substring(switchCnt).split("="); - if (switchVals.length == 2) { - command_line.appendSwitchWithValue(switchVals[0], switchVals[1]); + String switchStr = arg.substring(switchCnt); + int index = switchStr.indexOf('='); + if (index > 0) { + command_line.appendSwitchWithValue( + switchStr.substring(0, index), switchStr.substring(index + 1)); } else { - command_line.appendSwitch(switchVals[0]); + command_line.appendSwitch(switchStr); } break; } diff --git a/java/org/cef/handler/CefDialogHandler.java b/java/org/cef/handler/CefDialogHandler.java index 311de4cb..12ffdea7 100644 --- a/java/org/cef/handler/CefDialogHandler.java +++ b/java/org/cef/handler/CefDialogHandler.java @@ -38,11 +38,17 @@ enum FileDialogMode { * "image/*"), (b) individual file extensions (e.g. ".txt" or ".png"), or (c) * combined description and file extension delimited using "|" and ";" (e.g. * "Image Types|.png;.gif;.jpg"). + * @param acceptExtensions provides the semicolon-delimited expansion of MIME + * types to file extensions (if known, or empty string otherwise). + * @param acceptDescriptions provides the descriptions for MIME types (if known, + * or empty string otherwise). For example, the "image/*" mime type might + * have extensions ".png;.jpg;.bmp;..." and description "Image Files". * @param callback is a callback handler for handling own file dialogs. * * @return To display a custom dialog return true and execute callback. * To display the default dialog return false. */ public boolean onFileDialog(CefBrowser browser, FileDialogMode mode, String title, - String defaultFilePath, Vector acceptFilters, CefFileDialogCallback callback); + String defaultFilePath, Vector acceptFilters, Vector acceptExtensions, + Vector acceptDescriptions, CefFileDialogCallback callback); } diff --git a/java/org/cef/handler/CefDisplayHandler.java b/java/org/cef/handler/CefDisplayHandler.java index 5913794e..f2a828eb 100644 --- a/java/org/cef/handler/CefDisplayHandler.java +++ b/java/org/cef/handler/CefDisplayHandler.java @@ -33,7 +33,7 @@ public interface CefDisplayHandler { * @param browser The browser generating the event. * @param fullscreen True if fullscreen mode is on. */ - public void OnFullscreenModeChange(CefBrowser browser, boolean fullscreen); + public void onFullscreenModeChange(CefBrowser browser, boolean fullscreen); /** * About to display a tooltip. diff --git a/java/org/cef/handler/CefDisplayHandlerAdapter.java b/java/org/cef/handler/CefDisplayHandlerAdapter.java index 302ae6b0..90d22d50 100644 --- a/java/org/cef/handler/CefDisplayHandlerAdapter.java +++ b/java/org/cef/handler/CefDisplayHandlerAdapter.java @@ -25,7 +25,7 @@ public void onTitleChange(CefBrowser browser, String title) { } @Override - public void OnFullscreenModeChange(CefBrowser browser, boolean fullscreen) { + public void onFullscreenModeChange(CefBrowser browser, boolean fullscreen) { return; } diff --git a/java/org/cef/handler/CefDownloadHandler.java b/java/org/cef/handler/CefDownloadHandler.java index 66ea49a4..3f0ee6f2 100644 --- a/java/org/cef/handler/CefDownloadHandler.java +++ b/java/org/cef/handler/CefDownloadHandler.java @@ -15,9 +15,11 @@ */ public interface CefDownloadHandler { /** - * Called before a download begins. By default the download will be canceled. - * Execute callback either asynchronously or in this method to continue the download - * if desired. + * Called before a download begins. Return true and execute |callback| either + * asynchronously or in this method to continue or cancel the download. + * Return false to proceed with default handling (cancel with Alloy style, + * download shelf with Chrome style). Do not keep a reference to + * downloadItem outside of this method. * * @param browser The desired browser. * @param downloadItem The item to be downloaded. Do not keep a reference to it outside this @@ -25,7 +27,7 @@ public interface CefDownloadHandler { * @param suggestedName is the suggested name for the download file. * @param callback start the download by calling the Continue method */ - public void onBeforeDownload(CefBrowser browser, CefDownloadItem downloadItem, + public boolean onBeforeDownload(CefBrowser browser, CefDownloadItem downloadItem, String suggestedName, CefBeforeDownloadCallback callback); /** diff --git a/java/org/cef/handler/CefDownloadHandlerAdapter.java b/java/org/cef/handler/CefDownloadHandlerAdapter.java index 8b1f46aa..f0311637 100644 --- a/java/org/cef/handler/CefDownloadHandlerAdapter.java +++ b/java/org/cef/handler/CefDownloadHandlerAdapter.java @@ -16,8 +16,10 @@ */ public abstract class CefDownloadHandlerAdapter implements CefDownloadHandler { @Override - public void onBeforeDownload(CefBrowser browser, CefDownloadItem downloadItem, - String suggestedName, CefBeforeDownloadCallback callback) {} + public boolean onBeforeDownload(CefBrowser browser, CefDownloadItem downloadItem, + String suggestedName, CefBeforeDownloadCallback callback) { + return false; + } @Override public void onDownloadUpdated( diff --git a/java/org/cef/handler/CefLoadHandler.java b/java/org/cef/handler/CefLoadHandler.java index af50686e..4f0bb831 100644 --- a/java/org/cef/handler/CefLoadHandler.java +++ b/java/org/cef/handler/CefLoadHandler.java @@ -213,13 +213,6 @@ enum ErrorCode { ERR_INVALID_WEB_BUNDLE(-505), ERR_TRUST_TOKEN_OPERATION_FAILED(-506), ERR_TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST(-507), - ERR_FTP_FAILED(-601), - ERR_FTP_SERVICE_UNAVAILABLE(-602), - ERR_FTP_TRANSFER_ABORTED(-603), - ERR_FTP_FILE_BUSY(-604), - ERR_FTP_SYNTAX_ERROR(-605), - ERR_FTP_COMMAND_NOT_SUPPORTED(-606), - ERR_FTP_BAD_COMMAND_SEQUENCE(-607), ERR_PKCS12_IMPORT_BAD_PASSWORD(-701), ERR_PKCS12_IMPORT_FAILED(-702), ERR_IMPORT_CA_CERT_NOT_CA(-703), diff --git a/java/org/cef/handler/CefRequestHandler.java b/java/org/cef/handler/CefRequestHandler.java index 7a508323..93cbe95b 100644 --- a/java/org/cef/handler/CefRequestHandler.java +++ b/java/org/cef/handler/CefRequestHandler.java @@ -24,7 +24,9 @@ enum TerminationStatus { TS_ABNORMAL_TERMINATION, //!< Non-zero exit status. TS_PROCESS_WAS_KILLED, //!< SIGKILL or task manager kill. TS_PROCESS_CRASHED, //!< Segmentation fault. - TS_PROCESS_OOM //!< Out of memory. + TS_PROCESS_OOM, //!< Out of memory. + TS_LAUNCH_FAILED, //!< Failed to launch. + TS_INTEGRITY_FAILURE //!< Integrity check failed. } /** @@ -123,6 +125,9 @@ boolean onCertificateError(CefBrowser browser, CefLoadHandler.ErrorCode cert_err * Called on the browser process UI thread when the render process terminates unexpectedly. * @param browser The corresponding browser. * @param status Indicates how the process was terminated. + * @param error_code The process error code. + * @param error_string A string description of the error. */ - void onRenderProcessTerminated(CefBrowser browser, TerminationStatus status); + void onRenderProcessTerminated( + CefBrowser browser, TerminationStatus status, int error_code, String error_string); } diff --git a/java/org/cef/handler/CefRequestHandlerAdapter.java b/java/org/cef/handler/CefRequestHandlerAdapter.java index dd785529..a6c04ef6 100644 --- a/java/org/cef/handler/CefRequestHandlerAdapter.java +++ b/java/org/cef/handler/CefRequestHandlerAdapter.java @@ -51,5 +51,6 @@ public boolean onCertificateError( } @Override - public void onRenderProcessTerminated(CefBrowser browser, TerminationStatus status) {} + public void onRenderProcessTerminated( + CefBrowser browser, TerminationStatus status, int error_code, String error_string) {} } diff --git a/java/org/cef/misc/CefPdfPrintSettings.java b/java/org/cef/misc/CefPdfPrintSettings.java index 49afdc28..a014d81c 100644 --- a/java/org/cef/misc/CefPdfPrintSettings.java +++ b/java/org/cef/misc/CefPdfPrintSettings.java @@ -105,6 +105,16 @@ public enum MarginType { */ public String footer_template; + /** + * Whether or not to generate tagged (accessible) PDF. + */ + public boolean generate_tagged_pdf; + + /** + * Whether or not to embed the document outline into the PDF. + */ + public boolean generate_document_outline; + public CefPdfPrintSettings() {} @Override @@ -125,6 +135,8 @@ public CefPdfPrintSettings clone() { tmp.display_header_footer = this.display_header_footer; tmp.header_template = this.header_template; tmp.footer_template = this.footer_template; + tmp.generate_tagged_pdf = this.generate_tagged_pdf; + tmp.generate_document_outline = this.generate_document_outline; return tmp; } } diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 70e88f40..1099cc48 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -148,8 +148,6 @@ set(JCEF_SRCS set(JCEF_SRCS_LINUX critical_wait_posix.cpp jni_util_linux.cpp - signal_restore_posix.cpp - signal_restore_posix.h temp_window_x11.cc temp_window_x11.h util_linux.cpp @@ -157,8 +155,6 @@ set(JCEF_SRCS_LINUX ) set(JCEF_SRCS_MAC critical_wait_posix.cpp - signal_restore_posix.cpp - signal_restore_posix.h temp_window_mac.h temp_window_mac.mm util_mac.h diff --git a/native/CefBrowser_N.cpp b/native/CefBrowser_N.cpp index 6d39d926..482211ec 100644 --- a/native/CefBrowser_N.cpp +++ b/native/CefBrowser_N.cpp @@ -1010,11 +1010,31 @@ void create(std::shared_ptr objs, if (!lifeSpanHandler.get()) return; - CefWindowInfo windowInfo; - windowInfo.SetAsWindowless((CefWindowHandle)windowHandle); + CefRefPtr parentBrowser = + GetCefFromJNIObject(env, objs->jparentBrowser, "CefBrowser"); + CefWindowInfo windowInfo; CefBrowserSettings settings; + // If parentBrowser is set, we want to show the DEV-Tools for that browser. + // Since that cannot be an Alloy-style window, it cannot be integrated into + // Java UI but must be opened as a pop-up. + if (parentBrowser.get() != nullptr) { + CefPoint inspectAt; + if (objs->jinspectAt != nullptr) { + int x, y; + GetJNIPoint(env, objs->jinspectAt, &x, &y); + inspectAt.Set(x, y); + } + + parentBrowser->GetHost()->ShowDevTools(windowInfo, clientHandler.get(), + settings, inspectAt); + JNI_CALL_VOID_METHOD(env, objs->jbrowser, "notifyBrowserCreated", "()V"); + return; + } + + windowInfo.SetAsWindowless((CefWindowHandle)windowHandle); + if (transparent == JNI_FALSE) { // Specify an opaque background color (white) to disable transparency. settings.background_color = CefColorSetARGB(255, 255, 255, 255); @@ -1033,27 +1053,10 @@ void create(std::shared_ptr objs, CefRefPtr context = GetCefFromJNIObject( env, objs->jcontext, "CefRequestContext"); - CefRefPtr parentBrowser = - GetCefFromJNIObject(env, objs->jparentBrowser, "CefBrowser"); - // Add a global ref that will be released in LifeSpanHandler::OnAfterCreated. jobject globalRef = env->NewGlobalRef(objs->jbrowser); lifeSpanHandler->registerJBrowser(globalRef); - // If parentBrowser is set, we want to show the DEV-Tools for that browser - if (parentBrowser.get() != nullptr) { - CefPoint inspectAt; - if (objs->jinspectAt != nullptr) { - int x, y; - GetJNIPoint(env, objs->jinspectAt, &x, &y); - inspectAt.Set(x, y); - } - parentBrowser->GetHost()->ShowDevTools(windowInfo, clientHandler.get(), - settings, inspectAt); - JNI_CALL_VOID_METHOD(env, objs->jbrowser, "notifyBrowserCreated", "()V"); - return; - } - CefRefPtr extra_info; auto router_configs = BrowserProcessHandler::GetMessageRouterConfigs(); if (router_configs) { @@ -1062,6 +1065,10 @@ void create(std::shared_ptr objs, extra_info->SetList("router_configs", router_configs); } + // JCEF requires Alloy runtime style for "normal" browsers in order for them + // to be integratable into Java UI. + windowInfo.runtime_style = CEF_RUNTIME_STYLE_ALLOY; + bool result = CefBrowserHost::CreateBrowser( windowInfo, clientHandler.get(), strUrl, settings, extra_info, context); if (!result) { @@ -1190,6 +1197,12 @@ CefPdfPrintSettings GetJNIPdfPrintSettings(JNIEnv* env, jobject obj) { tmp.clear(); } + GetJNIFieldBoolean(env, cls, obj, "generate_tagged_pdf", + &settings.generate_tagged_pdf); + + GetJNIFieldBoolean(env, cls, obj, "generate_document_outline", + &settings.generate_document_outline); + return settings; } @@ -1555,7 +1568,6 @@ Java_org_cef_browser_CefBrowser_1N_N_1SetWindowVisibility(JNIEnv* env, } #endif } - JNIEXPORT jdouble JNICALL Java_org_cef_browser_CefBrowser_1N_N_1GetZoomLevel(JNIEnv* env, jobject obj) { CefRefPtr browser = JNI_GET_BROWSER_OR_RETURN(env, obj, 0.0); diff --git a/native/context.cpp b/native/context.cpp index 1e4020c1..802c930a 100644 --- a/native/context.cpp +++ b/native/context.cpp @@ -13,10 +13,6 @@ #include "util_mac.h" #endif -#if defined(OS_POSIX) -#include "signal_restore_posix.h" -#endif - namespace { Context* g_context = nullptr; @@ -24,6 +20,11 @@ Context* g_context = nullptr; CefSettings GetJNISettings(JNIEnv* env, jobject obj) { CefString tmp; CefSettings settings; + +#if defined(OS_POSIX) && !defined(OS_ANDROID) + settings.disable_signal_handlers = true; +#endif + if (!obj) return settings; @@ -116,8 +117,6 @@ CefSettings GetJNISettings(JNIEnv* env, jobject obj) { CefString(&settings.main_bundle_path) = tmp; tmp.clear(); } - GetJNIFieldBoolean(env, cls, obj, "pack_loading_disabled", - &settings.pack_loading_disabled); GetJNIFieldInt(env, cls, obj, "remote_debugging_port", &settings.remote_debugging_port); GetJNIFieldInt(env, cls, obj, "uncaught_exception_stack_size", @@ -236,12 +235,6 @@ bool Context::Initialize(JNIEnv* env, new ClientApp(CefString(&settings.cache_path), env, appHandler)); bool res = false; -#if defined(OS_POSIX) - // CefInitialize will reset signal handlers. Backup/restore the original - // signal handlers to avoid crashes in the JVM (see issue #41). - BackupSignalHandlers(); -#endif - #if defined(OS_MACOSX) res = util_mac::CefInitializeOnMainThread(main_args, settings, client_app.get()); @@ -249,10 +242,6 @@ bool Context::Initialize(JNIEnv* env, res = CefInitialize(main_args, settings, client_app.get(), nullptr); #endif -#if defined(OS_POSIX) - RestoreSignalHandlers(); -#endif - return res; } diff --git a/native/dialog_handler.cpp b/native/dialog_handler.cpp index 30acb467..883f675f 100644 --- a/native/dialog_handler.cpp +++ b/native/dialog_handler.cpp @@ -27,12 +27,15 @@ class ScopedJNIFileDialogCallback DialogHandler::DialogHandler(JNIEnv* env, jobject handler) : handle_(env, handler) {} -bool DialogHandler::OnFileDialog(CefRefPtr browser, - FileDialogMode mode, - const CefString& title, - const CefString& default_file_path, - const std::vector& accept_filters, - CefRefPtr callback) { +bool DialogHandler::OnFileDialog( + CefRefPtr browser, + FileDialogMode mode, + const CefString& title, + const CefString& default_file_path, + const std::vector& accept_filters, + const std::vector& accept_extensions, + const std::vector& accept_descriptions, + CefRefPtr callback) { ScopedJNIEnv env; if (!env) return false; @@ -42,6 +45,10 @@ bool DialogHandler::OnFileDialog(CefRefPtr browser, ScopedJNIString jdefaultFilePath(env, default_file_path); ScopedJNIObjectLocal jacceptFilters(env, NewJNIStringVector(env, accept_filters)); + ScopedJNIObjectLocal jacceptExtensions( + env, NewJNIStringVector(env, accept_extensions)); + ScopedJNIObjectLocal jacceptDescriptions( + env, NewJNIStringVector(env, accept_descriptions)); ScopedJNIFileDialogCallback jcallback(env, callback); ScopedJNIObjectResult jmode(env); @@ -61,9 +68,11 @@ bool DialogHandler::OnFileDialog(CefRefPtr browser, env, handle_, "onFileDialog", "(Lorg/cef/browser/CefBrowser;Lorg/cef/handler/" "CefDialogHandler$FileDialogMode;Ljava/lang/String;Ljava/lang/" - "String;Ljava/util/Vector;Lorg/cef/callback/CefFileDialogCallback;)Z", + "String;Ljava/util/Vector;Ljava/util/Vector;Ljava/util/Vector;Lorg/cef/" + "callback/CefFileDialogCallback;)Z", Boolean, jreturn, jbrowser.get(), jmode.get(), jtitle.get(), - jdefaultFilePath.get(), jacceptFilters.get(), jcallback.get()); + jdefaultFilePath.get(), jacceptFilters.get(), jacceptExtensions.get(), + jacceptDescriptions.get(), jcallback.get()); if (jreturn == JNI_FALSE) { // If the Java method returns "false" the callback won't be used and diff --git a/native/dialog_handler.h b/native/dialog_handler.h index d4ec0cd3..0a5411ee 100644 --- a/native/dialog_handler.h +++ b/native/dialog_handler.h @@ -22,6 +22,8 @@ class DialogHandler : public CefDialogHandler { const CefString& title, const CefString& default_file_path, const std::vector& accept_filters, + const std::vector& accept_extensions, + const std::vector& accept_descriptions, CefRefPtr callback) override; protected: diff --git a/native/display_handler.cpp b/native/display_handler.cpp index 13dcd9de..cb0537fa 100644 --- a/native/display_handler.cpp +++ b/native/display_handler.cpp @@ -48,7 +48,7 @@ void DisplayHandler::OnFullscreenModeChange(CefRefPtr browser, return; ScopedJNIBrowser jbrowser(env, browser); - JNI_CALL_VOID_METHOD(env, handle_, "OnFullscreenModeChange", + JNI_CALL_VOID_METHOD(env, handle_, "onFullscreenModeChange", "(Lorg/cef/browser/CefBrowser;Z)V", jbrowser.get(), (jboolean)fullscreen); } diff --git a/native/download_handler.cpp b/native/download_handler.cpp index f594d435..e0b37759 100644 --- a/native/download_handler.cpp +++ b/native/download_handler.cpp @@ -49,14 +49,14 @@ class ScopedJNIDownloadItemCallback DownloadHandler::DownloadHandler(JNIEnv* env, jobject handler) : handle_(env, handler) {} -void DownloadHandler::OnBeforeDownload( +bool DownloadHandler::OnBeforeDownload( CefRefPtr browser, CefRefPtr download_item, const CefString& suggested_name, CefRefPtr callback) { ScopedJNIEnv env; if (!env) - return; + return false; ScopedJNIBrowser jbrowser(env, browser); ScopedJNIDownloadItem jdownloadItem(env, download_item); @@ -64,12 +64,16 @@ void DownloadHandler::OnBeforeDownload( ScopedJNIString jsuggestedName(env, suggested_name); ScopedJNIBeforeDownloadCallback jcallback(env, callback); - JNI_CALL_VOID_METHOD( - env, handle_, "onBeforeDownload", + jboolean jresult = 0; + + JNI_CALL_BOOLEAN_METHOD( + jresult, env, handle_, "onBeforeDownload", "(Lorg/cef/browser/CefBrowser;Lorg/cef/callback/CefDownloadItem;" - "Ljava/lang/String;Lorg/cef/callback/CefBeforeDownloadCallback;)V", + "Ljava/lang/String;Lorg/cef/callback/CefBeforeDownloadCallback;)Z", jbrowser.get(), jdownloadItem.get(), jsuggestedName.get(), jcallback.get()); + + return jresult; } void DownloadHandler::OnDownloadUpdated( diff --git a/native/download_handler.h b/native/download_handler.h index d41ca492..adbaacbb 100644 --- a/native/download_handler.h +++ b/native/download_handler.h @@ -17,7 +17,7 @@ class DownloadHandler : public CefDownloadHandler { DownloadHandler(JNIEnv* env, jobject handler); // CefDownloadHandler methods - virtual void OnBeforeDownload( + virtual bool OnBeforeDownload( CefRefPtr browser, CefRefPtr download_item, const CefString& suggested_name, diff --git a/native/jni_util.cpp b/native/jni_util.cpp index fbc73852..4bee5978 100644 --- a/native/jni_util.cpp +++ b/native/jni_util.cpp @@ -685,20 +685,6 @@ jobject NewJNIErrorCode(JNIEnv* env, cef_errorcode_t errorCode) { JNI_CASE(env, "org/cef/handler/CefLoadHandler$ErrorCode", ERR_TRUST_TOKEN_OPERATION_SUCCESS_WITHOUT_SENDING_REQUEST, jerrorCode); - JNI_CASE(env, "org/cef/handler/CefLoadHandler$ErrorCode", ERR_FTP_FAILED, - jerrorCode); - JNI_CASE(env, "org/cef/handler/CefLoadHandler$ErrorCode", - ERR_FTP_SERVICE_UNAVAILABLE, jerrorCode); - JNI_CASE(env, "org/cef/handler/CefLoadHandler$ErrorCode", - ERR_FTP_TRANSFER_ABORTED, jerrorCode); - JNI_CASE(env, "org/cef/handler/CefLoadHandler$ErrorCode", - ERR_FTP_FILE_BUSY, jerrorCode); - JNI_CASE(env, "org/cef/handler/CefLoadHandler$ErrorCode", - ERR_FTP_SYNTAX_ERROR, jerrorCode); - JNI_CASE(env, "org/cef/handler/CefLoadHandler$ErrorCode", - ERR_FTP_COMMAND_NOT_SUPPORTED, jerrorCode); - JNI_CASE(env, "org/cef/handler/CefLoadHandler$ErrorCode", - ERR_FTP_BAD_COMMAND_SEQUENCE, jerrorCode); JNI_CASE(env, "org/cef/handler/CefLoadHandler$ErrorCode", ERR_PKCS12_IMPORT_BAD_PASSWORD, jerrorCode); JNI_CASE(env, "org/cef/handler/CefLoadHandler$ErrorCode", diff --git a/native/request_handler.cpp b/native/request_handler.cpp index 26d50dbd..0b6f6cec 100644 --- a/native/request_handler.cpp +++ b/native/request_handler.cpp @@ -175,7 +175,9 @@ bool RequestHandler::OnCertificateError(CefRefPtr browser, } void RequestHandler::OnRenderProcessTerminated(CefRefPtr browser, - TerminationStatus status) { + TerminationStatus status, + int error_code, + const CefString& error_string) { // Forward request to ClientHandler to make the message_router_ happy. CefRefPtr client = (ClientHandler*)browser->GetHost()->GetClient().get(); @@ -197,11 +199,18 @@ void RequestHandler::OnRenderProcessTerminated(CefRefPtr browser, TS_PROCESS_CRASHED, jstatus); JNI_CASE(env, "org/cef/handler/CefRequestHandler$TerminationStatus", TS_PROCESS_OOM, jstatus); + JNI_CASE(env, "org/cef/handler/CefRequestHandler$TerminationStatus", + TS_LAUNCH_FAILED, jstatus); + JNI_CASE(env, "org/cef/handler/CefRequestHandler$TerminationStatus", + TS_INTEGRITY_FAILURE, jstatus); } - JNI_CALL_VOID_METHOD( - env, handle_, "onRenderProcessTerminated", - "(Lorg/cef/browser/CefBrowser;" - "Lorg/cef/handler/CefRequestHandler$TerminationStatus;)V", - jbrowser.get(), jstatus.get()); + ScopedJNIString jerrorString(env, error_string); + + JNI_CALL_VOID_METHOD(env, handle_, "onRenderProcessTerminated", + "(Lorg/cef/browser/CefBrowser;" + "Lorg/cef/handler/CefRequestHandler$TerminationStatus;" + "ILjava/lang/String;)V", + jbrowser.get(), jstatus.get(), error_code, + jerrorString.get()); } diff --git a/native/request_handler.h b/native/request_handler.h index 60b47b0b..9ee8356e 100644 --- a/native/request_handler.h +++ b/native/request_handler.h @@ -50,7 +50,9 @@ class RequestHandler : public CefRequestHandler { CefRefPtr ssl_info, CefRefPtr callback) override; void OnRenderProcessTerminated(CefRefPtr browser, - TerminationStatus status) override; + TerminationStatus status, + int error_code, + const CefString& error_string) override; protected: ScopedJNIObjectGlobal handle_; diff --git a/native/signal_restore_posix.cpp b/native/signal_restore_posix.cpp deleted file mode 100644 index 03d22496..00000000 --- a/native/signal_restore_posix.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights -// reserved. Use of this source code is governed by a BSD-style license that -// can be found in the LICENSE file. - -#include "signal_restore_posix.h" - -#include -#include - -// arraysize borrowed from base/macros.h -template -char (&ArraySizeHelper(T (&array)[N]))[N]; -#define arraysize(array) (sizeof(ArraySizeHelper(array))) - -namespace { - -const int signals_to_restore[] = {SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGABRT, - SIGFPE, SIGSEGV, SIGALRM, SIGTERM, SIGCHLD, - SIGBUS, SIGTRAP, SIGPIPE}; - -struct sigaction signal_handlers[arraysize(signals_to_restore)]; - -} // namespace - -void BackupSignalHandlers() { - struct sigaction sigact; - for (unsigned i = 0; i < arraysize(signals_to_restore); ++i) { - memset(&sigact, 0, sizeof(sigact)); - sigaction(signals_to_restore[i], nullptr, &sigact); - signal_handlers[i] = sigact; - } -} - -void RestoreSignalHandlers() { - for (unsigned i = 0; i < arraysize(signals_to_restore); ++i) { - sigaction(signals_to_restore[i], &signal_handlers[i], nullptr); - } -} diff --git a/native/signal_restore_posix.h b/native/signal_restore_posix.h deleted file mode 100644 index 830b361a..00000000 --- a/native/signal_restore_posix.h +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights -// reserved. Use of this source code is governed by a BSD-style license that -// can be found in the LICENSE file. - -#ifndef SIGNAL_RESTORE_POSIX_H -#define SIGNAL_RESTORE_POSIX_H - -void BackupSignalHandlers(); -void RestoreSignalHandlers(); - -#endif // SIGNAL_RESTORE_POSIX_H