diff --git a/zap/gradle/japicmp.yaml b/zap/gradle/japicmp.yaml index ea21a2cffbb..e80413c0a29 100644 --- a/zap/gradle/japicmp.yaml +++ b/zap/gradle/japicmp.yaml @@ -20,4 +20,6 @@ classExcludes: methodExcludes: - "org.parosproxy.paros.model.OptionsParam#getCertificateParam()" - "org.parosproxy.paros.model.OptionsParam#getExperimentalFeaturesParam()" - - "org.parosproxy.paros.model.OptionsParam#setCertificateParam(org.parosproxy.paros.extension.option.OptionsParamCertificate)" \ No newline at end of file + - "org.parosproxy.paros.model.OptionsParam#setCertificateParam(org.parosproxy.paros.extension.option.OptionsParamCertificate)" + - "org.parosproxy.paros.control.Control#exit(boolean,java.io.File)" + - "org.parosproxy.paros.control.MenuFileControl#exit()" \ No newline at end of file diff --git a/zap/src/main/java/org/parosproxy/paros/control/Control.java b/zap/src/main/java/org/parosproxy/paros/control/Control.java index 6ac0afae17a..0755f21bc8c 100644 --- a/zap/src/main/java/org/parosproxy/paros/control/Control.java +++ b/zap/src/main/java/org/parosproxy/paros/control/Control.java @@ -232,7 +232,10 @@ private void saveConfigurations() { } } - public void exit(boolean noPrompt, final File openOnExit) { + /** + * @return {@code true} if shutdown was started, {@code false} if the user cancelled a prompt + */ + public boolean exit(boolean noPrompt, final File openOnExit) { boolean isNewState = model.getSession().isNewState(); int rootCount = 0; if (!Constant.isLowMemoryOptionSet()) { @@ -282,7 +285,7 @@ public void exit(boolean noPrompt, final File openOnExit) { if (message != null && view.showConfirmDialog(new ZapHtmlLabel(message)) != JOptionPane.OK_OPTION) { - return; + return false; } } @@ -335,6 +338,7 @@ public void run() { } else { t.start(); } + return true; } /** diff --git a/zap/src/main/java/org/parosproxy/paros/control/MenuFileControl.java b/zap/src/main/java/org/parosproxy/paros/control/MenuFileControl.java index 2a90070a5df..c151c21e885 100644 --- a/zap/src/main/java/org/parosproxy/paros/control/MenuFileControl.java +++ b/zap/src/main/java/org/parosproxy/paros/control/MenuFileControl.java @@ -110,8 +110,8 @@ public MenuFileControl(Model model, View view, Control control) { this.control = control; } - public void exit() { - control.exit(false, null); + public boolean exit() { + return control.exit(false, null); } public void newSession(boolean isPromptNewSession) throws ClassNotFoundException, Exception { diff --git a/zap/src/main/java/org/zaproxy/zap/OsXGui.java b/zap/src/main/java/org/zaproxy/zap/OsXGui.java index 4e1305c8ebb..e6f1348bdbe 100644 --- a/zap/src/main/java/org/zaproxy/zap/OsXGui.java +++ b/zap/src/main/java/org/zaproxy/zap/OsXGui.java @@ -22,6 +22,7 @@ import java.awt.Desktop; import java.awt.Image; import java.awt.Toolkit; +import java.awt.desktop.QuitResponse; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.parosproxy.paros.control.Control; @@ -64,7 +65,7 @@ public static void setup() { Desktop desktop = Desktop.getDesktop(); desktop.setAboutHandler(ae -> showAboutDialog()); desktop.setPreferencesHandler(pe -> showOptionsDialog()); - desktop.setQuitHandler((qe, qr) -> exitZap()); + desktop.setQuitHandler((qe, qr) -> exitZap(qr)); } private static Image createIcon() { @@ -81,7 +82,9 @@ private static void showOptionsDialog() { Control.getSingleton().getMenuToolsControl().options(); } - private static void exitZap() { - Control.getSingleton().getMenuFileControl().exit(); + private static void exitZap(QuitResponse quitResponse) { + if (!Control.getSingleton().getMenuFileControl().exit()) { + quitResponse.cancelQuit(); + } } }