changeset 1239:b2406e30f04b

make jnlpfile nearly mandatory argument of message and adapt various re-declarations accordingly
author Jiri Vanek <jvanek@redhat.com>
date Thu, 11 Jun 2015 12:51:00 +0200
parents 6565b10a1557
children 21aca3386c4f
files ChangeLog netx/net/sourceforge/jnlp/runtime/ManifestAttributesChecker.java netx/net/sourceforge/jnlp/security/SecurityDialog.java netx/net/sourceforge/jnlp/security/SecurityDialogMessage.java netx/net/sourceforge/jnlp/security/SecurityDialogs.java tests/netx/unit/net/sourceforge/jnlp/security/SecurityDialogsTest.java
diffstat 6 files changed, 50 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Jun 11 11:44:11 2015 +0200
+++ b/ChangeLog	Thu Jun 11 12:51:00 2015 +0200
@@ -1,3 +1,17 @@
+2015-06-11  Jiri Vanek  <jvanek@redhat.com>
+
+	make jnlpfile nearly mandatory argument of message and adapt various re-declarations accordingly
+	* netx/net/sourceforge/jnlp/runtime/ManifestAttributesChecker.java: adapted to new api
+	* netx/net/sourceforge/jnlp/security/SecurityDialog.java: all (SecurityDialog) made private
+	(getPanel) adapted to new apis
+	* netx/net/sourceforge/jnlp/security/SecurityDialogMessage.java: file made final
+	and only default constructor is the one with file.
+	* netx/net/sourceforge/jnlp/security/SecurityDialogs.java: All constructions
+	of SecurityDialogMessage adapted to new constructor. All sets, where information from
+	file were dulicated, replaced by calls to file
+	* tests/netx/unit/net/sourceforge/jnlp/security/SecurityDialogsTest.java: 
+	showMissingPermissionsAttributeDialogue's constructor adapted.
+
 2015-06-10  Jiri Vanek  <jvanek@redhat.com>
 
 	Security dialogs got, moreover, unified dealing with trustNone/All and headless
--- a/netx/net/sourceforge/jnlp/runtime/ManifestAttributesChecker.java	Thu Jun 11 11:44:11 2015 +0200
+++ b/netx/net/sourceforge/jnlp/runtime/ManifestAttributesChecker.java	Thu Jun 11 12:51:00 2015 +0200
@@ -274,7 +274,7 @@
                 throw new LaunchException("Your Extended applets security is at 'Very high', and this application is missing the 'permissions' attribute in manifest. This is fatal");
             }
             if (itwSecurityLevel == AppletSecurityLevel.ASK_UNSIGNED) {
-                final boolean userApproved = SecurityDialogs.showMissingPermissionsAttributeDialogue(file.getTitle(), file.getCodeBase());
+                final boolean userApproved = SecurityDialogs.showMissingPermissionsAttributeDialogue(file);
                 if (!userApproved) {
                     throw new LaunchException("Your Extended applets security is at 'high' and this application is missing the 'permissions' attribute in manifest. And you have refused to run it.");
                 } else {
@@ -388,7 +388,7 @@
 
         ClasspathMatchers att = file.getManifestsAttributes().getApplicationLibraryAllowableCodebase();
         if (att == null) {
-            final boolean userApproved = isLowSecurity() || SecurityDialogs.showMissingALACAttributePanel(file.getTitle(), documentBase, usedUrls);
+            final boolean userApproved = isLowSecurity() || SecurityDialogs.showMissingALACAttributePanel(file, documentBase, usedUrls);
             if (!userApproved) {
                 throw new LaunchException("The application uses non-codebase resources, has no Application-Library-Allowable-Codebase Attribute, and was blocked from running by the user");
             } else {
--- a/netx/net/sourceforge/jnlp/security/SecurityDialog.java	Thu Jun 11 11:44:11 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/SecurityDialog.java	Thu Jun 11 12:51:00 2015 +0200
@@ -127,7 +127,7 @@
     /**
      * Construct a SecurityDialog to display some sort of access warning
      */
-    SecurityDialog(DialogType dialogType, AccessType accessType,
+    private SecurityDialog(DialogType dialogType, AccessType accessType,
                         JNLPFile file) {
         this(dialogType, accessType, file, null, null, null);
     }
@@ -135,7 +135,7 @@
     /**
      * Create a SecurityDialog to display a certificate-related warning
      */
-    SecurityDialog(DialogType dialogType, AccessType accessType,
+    private SecurityDialog(DialogType dialogType, AccessType accessType,
                         JNLPFile file, CertVerifier certVerifier) {
         this(dialogType, accessType, file, certVerifier, null, null);
     }
@@ -143,7 +143,7 @@
     /**
      * Create a SecurityDialog to display a certificate-related warning
      */
-    SecurityDialog(DialogType dialogType, AccessType accessType,
+    private SecurityDialog(DialogType dialogType, AccessType accessType,
                 CertVerifier certVerifier) {
         this(dialogType, accessType, null, certVerifier, null, null);
     }
@@ -152,7 +152,7 @@
      * Create a SecurityDialog to display some sort of access warning
      * with more information
      */
-    SecurityDialog(DialogType dialogType, AccessType accessType,
+    private SecurityDialog(DialogType dialogType, AccessType accessType,
                         JNLPFile file, Object[] extras) {
         this(dialogType, accessType, file, null, null, extras);
     }
@@ -161,7 +161,7 @@
      * Create a SecurityWarningDailog to display information about a single
      * certificate
      */
-    SecurityDialog(DialogType dialogType, X509Certificate c) {
+    private SecurityDialog(DialogType dialogType, X509Certificate c) {
         this(dialogType, null, null, null, c, null);
     }
 
@@ -317,11 +317,11 @@
         else if (dialogType == DialogType.AUTHENTICATION)
             panel = new PasswordAuthenticationPane(this, extras);
         else if (dialogType == DialogType.UNSIGNED_EAS_NO_PERMISSIONS_WARNING)
-            panel = new MissingPermissionsAttributePanel(this, (String) extras[0], (String) extras[1]);
+            panel = new MissingPermissionsAttributePanel(this, file.getTitle(), file.getCodeBase().toExternalForm());
         else if (dialogType == DialogType.MISSING_ALACA)
-            panel = new MissingALACAttributePanel(this, (String) extras[0], (String) extras[1], (String) extras[2]);
+            panel = new MissingALACAttributePanel(this, file.getTitle(), (String) extras[0], (String) extras[1]);
         else if (dialogType == DialogType.MATCHING_ALACA)
-            panel = AppTrustWarningDialog.matchingAlaca(this, (JNLPFile) extras[0], (String) extras[1], (String) extras[2]);
+            panel = AppTrustWarningDialog.matchingAlaca(this, file, (String) extras[0], (String) extras[1]);
 
         add(panel, BorderLayout.CENTER);
     }
@@ -333,8 +333,9 @@
     private void selectDefaultButton() {
         if (panel == null) {
             OutputController.getLogger().log(OutputController.Level.MESSAGE_ALL, "initial value panel is null");
+        } else {
+            panel.requestFocusOnDefaultButton();
         }
-        panel.requestFocusOnDefaultButton();
     }
 
     public void setValue(DialogResult value) {
--- a/netx/net/sourceforge/jnlp/security/SecurityDialogMessage.java	Thu Jun 11 11:44:11 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/SecurityDialogMessage.java	Thu Jun 11 12:51:00 2015 +0200
@@ -53,13 +53,20 @@
  */
 public final class SecurityDialogMessage {
 
+
+    public SecurityDialogMessage(JNLPFile file) {
+        this.file = file;
+    }
+
     /*
      * These fields contain information need to display the correct dialog type
      */
 
     public DialogType dialogType;
     public AccessType accessType;
-    public JNLPFile file;
+    //all informations dilaogs needs are in file. 
+    //The only known exception is, and should remain, showAuthenicationPrompt
+    public final JNLPFile file;
     public CertVerifier certVerifier;
     public X509Certificate certificate;
     public Object[] extras;
@@ -77,6 +84,7 @@
      */
 
     public Semaphore lock;
+    //if dialog slip out of awt thread, fake modal dialog is created. This is keeping it.
     public JDialog toDispose;
 
 }
--- a/netx/net/sourceforge/jnlp/security/SecurityDialogs.java	Thu Jun 11 11:44:11 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/SecurityDialogs.java	Thu Jun 11 12:51:00 2015 +0200
@@ -132,11 +132,10 @@
             }
         }
 
-        final SecurityDialogMessage message = new SecurityDialogMessage();
+        final SecurityDialogMessage message = new SecurityDialogMessage(file);
 
         message.dialogType = DialogType.ACCESS_WARNING;
         message.accessType = accessType;
-        message.file = file;
         message.extras = extras;
 
         return (AccessWarningPaneComplexReturn) getUserResponse(message);
@@ -161,10 +160,9 @@
             }
         }
 
-        final SecurityDialogMessage message = new SecurityDialogMessage();
+        final SecurityDialogMessage message = new SecurityDialogMessage(file);
         message.dialogType = DialogType.UNSIGNED_WARNING;
         message.accessType = AccessType.UNSIGNED;
-        message.file = file;
 
         return  ((RememberPanel.Garbage) getUserResponse(message)).getAction();
     }
@@ -195,10 +193,9 @@
               }
         }
 
-        final SecurityDialogMessage message = new SecurityDialogMessage();
+        final SecurityDialogMessage message = new SecurityDialogMessage(file);
         message.dialogType = DialogType.CERT_WARNING;
         message.accessType = accessType;
-        message.file = file;
         message.certVerifier = certVerifier;
         message.extras = new Object[] { securityDelegate };
 
@@ -226,10 +223,9 @@
             }
         }
 
-        final SecurityDialogMessage message = new SecurityDialogMessage();
+        final SecurityDialogMessage message = new SecurityDialogMessage(file);
         message.dialogType = DialogType.PARTIALLYSIGNED_WARNING;
         message.accessType = AccessType.PARTIALLYSIGNED;
-        message.file = file;
         message.certVerifier = certVerifier;
         message.extras = new Object[] { securityDelegate };
 
@@ -261,7 +257,7 @@
             sm.checkPermission(requestPermission);
         }
 
-        final SecurityDialogMessage message = new SecurityDialogMessage();
+        final SecurityDialogMessage message = new SecurityDialogMessage(null);
 
         message.dialogType = DialogType.AUTHENTICATION;
         message.extras = new Object[] { host, port, prompt, type };
@@ -270,7 +266,7 @@
         return (NamePassword) response;
     }
 
-     public static boolean  showMissingALACAttributePanel(String title, URL codeBase, Set<URL> remoteUrls) {
+     public static boolean  showMissingALACAttributePanel(JNLPFile file, URL codeBase, Set<URL> remoteUrls) {
 
          if (!shouldPromptUser()) {
              if (JNLPRuntime.isTrustAll()) {
@@ -280,7 +276,7 @@
              }
          }
 
-        SecurityDialogMessage message = new SecurityDialogMessage();
+        SecurityDialogMessage message = new SecurityDialogMessage(file);
         message.dialogType = DialogType.MISSING_ALACA;
          String urlToShow = "unknown url";
          if (codeBase != null) {
@@ -288,12 +284,12 @@
          } else {
              OutputController.getLogger().log("Warning, null codebase wants to show in ALACA!");
          }
-        message.extras = new Object[]{title, urlToShow, UrlUtils.setOfUrlsToHtmlList(remoteUrls)};
+        message.extras = new Object[]{urlToShow, UrlUtils.setOfUrlsToHtmlList(remoteUrls)};
         DialogResult selectedValue = getUserResponse(message);
         return selectedValue.toBoolean();
     } 
      
-     public static boolean showMatchingALACAttributePanel(JNLPFile file, URL codeBase, Set<URL> remoteUrls) {
+     public static boolean showMatchingALACAttributePanel(JNLPFile file, URL documentBase, Set<URL> remoteUrls) {
 
         ExecuteAppletAction storedAction = getStoredAction(file, AppletSecurityActions.MATCHING_ALACA_ACTION);
         OutputController.getLogger().log(OutputController.Level.ERROR_DEBUG, "Stored action for matching alaca at " + file.getCodeBase() +" was " + storedAction);
@@ -316,9 +312,9 @@
             }
         }
 
-         SecurityDialogMessage message = new SecurityDialogMessage();
+         SecurityDialogMessage message = new SecurityDialogMessage(file);
          message.dialogType = DialogType.MATCHING_ALACA;
-         message.extras = new Object[]{file, codeBase.toString(), UrlUtils.setOfUrlsToHtmlList(remoteUrls)};
+         message.extras = new Object[]{documentBase.toString(), UrlUtils.setOfUrlsToHtmlList(remoteUrls)};
          AppSigningWarningAction selectedValue = ((RememberPanel.Garbage) getUserResponse(message)).getAction();
 
          if (selectedValue != null) {
@@ -332,7 +328,7 @@
 
     }
      
-     public static boolean showMissingPermissionsAttributeDialogue(String title, URL codeBase) {
+     public static boolean showMissingPermissionsAttributeDialogue(JNLPFile file) {
 
          if (!shouldPromptUser()) {
              if (JNLPRuntime.isTrustAll()) {
@@ -342,9 +338,8 @@
              }
          }
 
-         SecurityDialogMessage message = new SecurityDialogMessage();
+         SecurityDialogMessage message = new SecurityDialogMessage(file);
          message.dialogType = DialogType.UNSIGNED_EAS_NO_PERMISSIONS_WARNING;
-         message.extras = new Object[]{title, codeBase.toExternalForm()};
          DialogResult selectedValue = getUserResponse(message);
          return selectedValue.toBoolean();
     }
--- a/tests/netx/unit/net/sourceforge/jnlp/security/SecurityDialogsTest.java	Thu Jun 11 11:44:11 2015 +0200
+++ b/tests/netx/unit/net/sourceforge/jnlp/security/SecurityDialogsTest.java	Thu Jun 11 12:51:00 2015 +0200
@@ -277,7 +277,7 @@
         Assert.assertEquals(r.b, r7);
         boolean r8 = SecurityDialogs.showMatchingALACAttributePanel(new DummyJnlpWithTitleAndUrls(), url, new HashSet<URL>());
         Assert.assertEquals(r.b, r8);
-        boolean r9 = SecurityDialogs.showMissingPermissionsAttributeDialogue(null, null);
+        boolean r9 = SecurityDialogs.showMissingPermissionsAttributeDialogue(null);
         Assert.assertEquals(r.b, r9);
     }
 
@@ -376,7 +376,7 @@
         }
         try {
             metcounter++;
-            SecurityDialogs.showMissingPermissionsAttributeDialogue(null, null);
+            SecurityDialogs.showMissingPermissionsAttributeDialogue(null);
         } catch (NullPointerException ex) {
             npecounter++;
         }