Mercurial > hg > release > icedtea-web-1.7
changeset 1236:f721899863b5
Fixed issue, when desktop/menu shortcut created during -html mode, was not created like it
author | Jiri Vanek <jvanek@redhat.com> |
---|---|
date | Tue, 09 Jun 2015 17:52:28 +0200 |
parents | d0a5b33cf779 |
children | eb4e63805894 |
files | ChangeLog netx/net/sourceforge/jnlp/runtime/Boot.java netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java netx/net/sourceforge/jnlp/util/FileUtils.java netx/net/sourceforge/jnlp/util/XDesktopEntry.java tests/netx/unit/net/sourceforge/jnlp/util/XDesktopEntryTest.java |
diffstat | 6 files changed, 198 insertions(+), 55 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Tue Jun 09 14:28:18 2015 +0200 +++ b/ChangeLog Tue Jun 09 17:52:28 2015 +0200 @@ -1,3 +1,16 @@ +2015-06-09 Jiri Vanek <jvanek@redhat.com> + + Fixed issue, when desktop/menu shortcut created during -html mode, was not created like it + * netx/net/sourceforge/jnlp/runtime/Boot.java: setHtml(true) used when + commandline contains html switch + * netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java: added html field and setter and getter + * netx/net/sourceforge/jnlp/util/XDesktopEntry.java: (getContentsAsReader) now + add -html if jnlpruntime.isHtml. Partially reworked logging of this method. + * tests/netx/unit/net/sourceforge/jnlp/util/XDesktopEntryTest.java: added tests for new + functionality + * Changelog: occurence of tab asterix slash replaced by tab asterix space in file + declarations + 2015-06-09 Jiri Vanek <jvanek@redhat.com> Fixed bug when generated desktop icon was not matched and user was asked for recreation @@ -89,26 +102,26 @@ 2015-06-01 Jiri Vanek <jvanek@redhat.com> Remember panel extracted so it can be reused - */netx/net/sourceforge/jnlp/security/SecurityDialogs.java: now correctly behaves on Xtrustall - */netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmation.java: + * netx/net/sourceforge/jnlp/security/SecurityDialogs.java: now correctly behaves on Xtrustall + * netx/net/sourceforge/jnlp/security/appletextendedsecurity/UnsignedAppletTrustConfirmation.java: result is using diamond - */netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/AppTrustWarningDialog.java: + * netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/AppTrustWarningDialog.java: Simplified constructors, getting dialogue and jnlpfile is all they need - */netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/AppTrustWarningPanel.java: + * netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/AppTrustWarningPanel.java: extracted remember panel and related stuff. Made to use extracted one - */netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/MatchingALACAttributePanel.java: + * netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/MatchingALACAttributePanel.java: same - */netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java: + * netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java: same - */netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/UnsignedAppletTrustWarningPanel.java: + * netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/UnsignedAppletTrustWarningPanel.java: same - */netx/net/sourceforge/jnlp/security/dialogs/remember/ActionChoiceListener.java: + * netx/net/sourceforge/jnlp/security/dialogs/remember/ActionChoiceListener.java: new class. Extracted stuff from AppTrustWarningPanel - */netx/net/sourceforge/jnlp/security/dialogs/remember/AppSigningWarningAction.java: + * netx/net/sourceforge/jnlp/security/dialogs/remember/AppSigningWarningAction.java: new class. Extracted stuff from AppTrustWarningPanel - */netx/net/sourceforge/jnlp/security/dialogs/remember/RememberPanel.java: + * netx/net/sourceforge/jnlp/security/dialogs/remember/RememberPanel.java: new class. Extracted stuff from AppTrustWarningPanel - */tests/netx/unit/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/AppTrustWarningPanelTest.java: + * tests/netx/unit/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/AppTrustWarningPanelTest.java: minor, adapted to match current codebase 2015-05-27 Jiri Vanek <jvanek@redhat.com> @@ -340,25 +353,25 @@ 2015-04-13 Jiri Vanek <jvanek@redhat.com> set single place for keystore operations - */netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java: usage of keystore moved + * netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java: usage of keystore moved to utility method - */netx/net/sourceforge/jnlp/security/CertificateUtils.java: same - */netx/net/sourceforge/jnlp/security/KeyStores.java: same - */netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java: same - */netx/net/sourceforge/jnlp/security/viewer/CertificatePane.java: same - */netx/net/sourceforge/jnlp/security/SecurityUtil.java: added five new methods + * netx/net/sourceforge/jnlp/security/CertificateUtils.java: same + * netx/net/sourceforge/jnlp/security/KeyStores.java: same + * netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java: same + * netx/net/sourceforge/jnlp/security/viewer/CertificatePane.java: same + * netx/net/sourceforge/jnlp/security/SecurityUtil.java: added five new methods wrapping work on keystores 2015-04-13 Jiri Vanek <jvanek@redhat.com> Removed redundant occurrence of default keystore password - */netx/net/sourceforge/jnlp/security/KeyStores.java: removed redundant DEFAULT_PASSWORD - */netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java: call to KeyStores.getPassword + * netx/net/sourceforge/jnlp/security/KeyStores.java: removed redundant DEFAULT_PASSWORD + * netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java: call to KeyStores.getPassword replaced by SecurityUtil.getTrustedCertsPassword - */netx/net/sourceforge/jnlp/security/CertificateUtils.java: same - */netx/net/sourceforge/jnlp/security/SecurityUtil.java: same - */netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java: same - */netx/net/sourceforge/jnlp/security/viewer/CertificatePane.java: same + * netx/net/sourceforge/jnlp/security/CertificateUtils.java: same + * netx/net/sourceforge/jnlp/security/SecurityUtil.java: same + * netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java: same + * netx/net/sourceforge/jnlp/security/viewer/CertificatePane.java: same 2015-04-13 Jiri Vanek <jvanek@redhat.com> @@ -1174,34 +1187,34 @@ 2014-12-05 Jiri Vanek <jvanek@redhat.com> Added support for menu shortcuts. - */netx/net/sourceforge/jnlp/Parser.java: used setMenu instead of addMenu - */netx/net/sourceforge/jnlp/ShortcutDesc.java: removed isOnline support, + * netx/net/sourceforge/jnlp/Parser.java: used setMenu instead of addMenu + * netx/net/sourceforge/jnlp/ShortcutDesc.java: removed isOnline support, added onDesktop and toMenu support. addMenu renamed to setMenu. Added deploymentJavawsShortcutToString, just for comfortableness. - */netx/net/sourceforge/jnlp/config/PathsAndFiles.java: Added support for + * netx/net/sourceforge/jnlp/config/PathsAndFiles.java: Added support for XDG_DATA_HOME, declared ICONS_DIR and MENUS_DIR - */netx/net/sourceforge/jnlp/controlpanel/DesktopShortcutPanel.java: removed + * netx/net/sourceforge/jnlp/controlpanel/DesktopShortcutPanel.java: removed duplicated logic of deploymentJavawsShortcutToString/comboboxItem and hardcoded calls to depolyment. - */netx/net/sourceforge/jnlp/resources/Messages.properties: added + * netx/net/sourceforge/jnlp/resources/Messages.properties: added CPTabMenuShortcuts, FILEicons, FILEmenus. adapted SDesktopShortcut - */netx/net/sourceforge/jnlp/runtime/ApplicationInstance.java: + * netx/net/sourceforge/jnlp/runtime/ApplicationInstance.java: removed retired fixme, now it do not ask for shortcut creation if menu or desktop entry exists. Added menu support and removed not-implemented call. Added temporary IconsCreationDescriptor qiockfix for dialog->logic information rtransfer. Used where needed. - */netx/net/sourceforge/jnlp/security/SecurityDialogs.java: Added boolean + * netx/net/sourceforge/jnlp/security/SecurityDialogs.java: Added boolean and integer workarounds around showAccessWarningDialog - */netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java: Added + * netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java: Added menu support. Is now coding more sophisticated return value if are about desktop creations. - */netx/net/sourceforge/jnlp/services/ServiceUtil.java: Adapted to + * netx/net/sourceforge/jnlp/services/ServiceUtil.java: Adapted to showAccessWarningDialog changes - */netx/net/sourceforge/jnlp/util/FileUtils.java: INVALID_CHARS extended + * netx/net/sourceforge/jnlp/util/FileUtils.java: INVALID_CHARS extended for more linux one and most windows ones. - */netx/net/sourceforge/jnlp/util/XDesktopEntry.java: added logic to place + * netx/net/sourceforge/jnlp/util/XDesktopEntry.java: added logic to place menu shortcut. - */tests/netx/unit/net/sourceforge/jnlp/ParserBasic.java: Is now testing only + * tests/netx/unit/net/sourceforge/jnlp/ParserBasic.java: Is now testing only presence of isOnline instead if it is used.
--- a/netx/net/sourceforge/jnlp/runtime/Boot.java Tue Jun 09 14:28:18 2015 +0200 +++ b/netx/net/sourceforge/jnlp/runtime/Boot.java Tue Jun 09 17:52:28 2015 +0200 @@ -177,6 +177,9 @@ if (optionParser.hasOption(OptionsDefinitions.OPTIONS.TRUSTALL)) { JNLPRuntime.setTrustAll(true); } + if (optionParser.hasOption(OptionsDefinitions.OPTIONS.HTML)) { + JNLPRuntime.setHtml(true); + } if (optionParser.hasOption(OptionsDefinitions.OPTIONS.TRUSTNONE)) { JNLPRuntime.setTrustNone(true); }
--- a/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java Tue Jun 09 14:28:18 2015 +0200 +++ b/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java Tue Jun 09 17:52:28 2015 +0200 @@ -151,6 +151,9 @@ /** all security dialogs will be consumed and pretented as being verified by user and allowed.*/ private static boolean trustAll=false; + + /** flag keeping rest of jnlpruntime live that javaws was lunched as -html */ + private static boolean html=false; /** all security dialogs will be consumed and we will pretend the Sandbox option was chosen */ private static boolean trustNone = false; @@ -830,6 +833,14 @@ } } + public static void setHtml(boolean html) { + JNLPRuntime.html = html; + } + + public static boolean isHtml() { + return html; + } + static void setTrustAll(boolean b) { trustAll=b; }
--- a/netx/net/sourceforge/jnlp/util/FileUtils.java Tue Jun 09 14:28:18 2015 +0200 +++ b/netx/net/sourceforge/jnlp/util/FileUtils.java Tue Jun 09 17:52:28 2015 +0200 @@ -30,6 +30,7 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.RandomAccessFile; +import java.io.Reader; import java.io.Writer; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; @@ -575,8 +576,15 @@ * @throws IOException if connection can't be established or resource does not exist */ public static String getContentOfStream(InputStream is, String encoding) throws IOException { + try { + return getContentOfReader(new InputStreamReader(is, encoding)); + } finally { + is.close(); + } + } + public static String getContentOfReader(Reader r) throws IOException { try { - BufferedReader br = new BufferedReader(new InputStreamReader(is, encoding)); + BufferedReader br = new BufferedReader(r); StringBuilder sb = new StringBuilder(); while (true) { String s = br.readLine(); @@ -588,7 +596,7 @@ } return sb.toString(); } finally { - is.close(); + r.close(); } }
--- a/netx/net/sourceforge/jnlp/util/XDesktopEntry.java Tue Jun 09 14:28:18 2015 +0200 +++ b/netx/net/sourceforge/jnlp/util/XDesktopEntry.java Tue Jun 09 17:52:28 2015 +0200 @@ -40,6 +40,7 @@ import net.sourceforge.jnlp.IconDesc; import net.sourceforge.jnlp.JNLPFile; +import net.sourceforge.jnlp.OptionsDefinitions; import net.sourceforge.jnlp.PluginBridge; import net.sourceforge.jnlp.StreamEater; import net.sourceforge.jnlp.cache.CacheUtil; @@ -149,36 +150,42 @@ if (file.getInformation().getVendor() != null) { fileContents += "Vendor=" + sanitize(file.getInformation().getVendor()) + "\n"; } - + String exec; + String title = "xdesktop writing"; if (JNLPRuntime.isWebstartApplication()) { - fileContents += "Exec=" - + getJavaWsBin() + " \"" + file.getSourceLocation() + "\"\n"; - OutputController.getLogger().log("Using " + getJavaWsBin() + " as binary for " + file.getSourceLocation()); + String htmlSwitch = ""; + if (JNLPRuntime.isHtml()){ + htmlSwitch = " "+OptionsDefinitions.OPTIONS.HTML.option; + } + exec = "Exec=" + + getJavaWsBin() + htmlSwitch + " \"" + file.getSourceLocation() + "\"\n"; + fileContents += exec; } else { if (info.getShortcutType() == AccessWarningPaneComplexReturn.ShortcutResult.Shortcut.BROWSER) { String browser = info.getBrowser(); if (browser == null) { browser = getBrowserBin(); } - fileContents += "Exec=" + exec = "Exec=" + browser + " \"" + file.getSourceLocation() + "\"\n"; - OutputController.getLogger().log("Using " + browser + " as binary for " + file.getSourceLocation()); + fileContents += exec; } else if ((info.getShortcutType() == AccessWarningPaneComplexReturn.ShortcutResult.Shortcut.GENERATED_JNLP || info.getShortcutType() == AccessWarningPaneComplexReturn.ShortcutResult.Shortcut.JNLP_HREF) && generatedJnlp != null) { - fileContents += "Exec=" + exec = "Exec=" + getJavaWsBin() + " \"" + generatedJnlp.getAbsolutePath() + "\"\n"; - OutputController.getLogger().log("Using " + getJavaWsBin() + " (generated) as binary for " + file.getSourceLocation() + " to " + generatedJnlp.getAbsolutePath()); + fileContents += exec; + title = title + " (generated jnlp)"; } else if (info.getShortcutType() == AccessWarningPaneComplexReturn.ShortcutResult.Shortcut.JAVAWS_HTML) { - fileContents += "Exec=" + exec = "Exec=" + getJavaWsBin() + " -html \"" + file.getSourceLocation() + "\"\n"; - OutputController.getLogger().log("Using " + getJavaWsBin() + " -html as binary for " + file.getSourceLocation()); + fileContents += exec; } else { - fileContents += "Exec=" + exec = "Exec=" + getBrowserBin() + " \"" + file.getSourceLocation() + "\"\n"; - OutputController.getLogger().log("Using " + getBrowserBin() + " as binary for " + file.getSourceLocation()); + fileContents += exec; } } - + OutputController.getLogger().log(title + " " + exec); return new StringReader(fileContents); }
--- a/tests/netx/unit/net/sourceforge/jnlp/util/XDesktopEntryTest.java Tue Jun 09 14:28:18 2015 +0200 +++ b/tests/netx/unit/net/sourceforge/jnlp/util/XDesktopEntryTest.java Tue Jun 09 17:52:28 2015 +0200 @@ -37,15 +37,25 @@ package net.sourceforge.jnlp.util; import java.io.BufferedReader; +import java.io.File; import java.io.IOException; +import java.io.Reader; import java.io.StringReader; import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import java.net.MalformedURLException; import java.util.HashMap; import java.util.Map; import java.util.Set; +import net.sourceforge.jnlp.InformationDesc; +import net.sourceforge.jnlp.JNLPFile; +import net.sourceforge.jnlp.PluginBridgeTest; import net.sourceforge.jnlp.ServerAccess; import net.sourceforge.jnlp.annotations.KnownToFail; +import net.sourceforge.jnlp.mock.DummyJNLPFileWithJar; +import net.sourceforge.jnlp.runtime.JNLPRuntime; +import net.sourceforge.jnlp.security.dialogresults.AccessWarningPaneComplexReturn; +import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -74,6 +84,32 @@ private static final String src8 = XDesktopEntry.XDG_DESKTOP_DIR + " = " + des8; private static final String src9 = XDesktopEntry.XDG_DESKTOP_DIR + " = " + des9; private static Map<String, String> backupedEnv; + private static boolean wasHtml; + private static boolean wasJavaws; + + @BeforeClass + public static void saveJnlpRuntimeHtml() { + wasHtml = JNLPRuntime.isHtml(); + wasJavaws = JNLPRuntime.isWebstartApplication(); + } + + private static void setIsWebstart(boolean value) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException { + Field field = JNLPRuntime.class.getDeclaredField("isWebstartApplication"); + field.setAccessible(true); + field.set(null, value); + } + + @After + public void restoreJnlpRuntimeHtml() throws Exception { + JNLPRuntime.setHtml(wasHtml); + setIsWebstart(wasJavaws); + } + + @AfterClass + public static void restoreJnlpRuntimeHtmlFinally() throws Exception { + JNLPRuntime.setHtml(wasHtml); + setIsWebstart(wasJavaws); + } @BeforeClass public static void ensureHomeVaribale() throws NoSuchFieldException, IllegalAccessException, IllegalArgumentException, ClassNotFoundException { @@ -84,7 +120,7 @@ backupedEnv = null; } else { backupedEnv = env; - Map<String,String> m = new HashMap<String,String>(env); + Map<String, String> m = new HashMap<>(env); m.put(HOME, System.getProperty("user.home")); fakeEnvironment(m); ServerAccess.logOutputReprint("Hacked environment"); @@ -102,7 +138,7 @@ } } - private static void fakeEnvironment(Map<String,String> m) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException, ClassNotFoundException { + private static void fakeEnvironment(Map<String, String> m) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException, ClassNotFoundException { Class<?> processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment"); Field env = processEnvironmentClass.getDeclaredField("theUnmodifiableEnvironment"); env.setAccessible(true); @@ -123,13 +159,13 @@ @Test public void getFreedesktopOrgDesktopPathFromtestSimple() throws IOException { String s = XDesktopEntry.getFreedesktopOrgDesktopPathFrom(new BufferedReader(new StringReader(src1))); - Assert.assertEquals(s, des1); + Assert.assertEquals(des1, s); } @Test public void getFreedesktopOrgDesktopPathFromtestSpaced() throws IOException { String s = XDesktopEntry.getFreedesktopOrgDesktopPathFrom(new BufferedReader(new StringReader(src2))); - Assert.assertEquals(s, des1); + Assert.assertEquals(des1, s); } @Test(expected = IOException.class) @@ -160,6 +196,7 @@ String s = XDesktopEntry.getFreedesktopOrgDesktopPathFrom(new BufferedReader(new StringReader(src8))); Assert.assertEquals(s, des8res); } + @Test public void getFreedesktopOrgDesktopPathFromtestSpacedWithHomeAndMixedQuotes() throws IOException { String s = XDesktopEntry.getFreedesktopOrgDesktopPathFrom(new BufferedReader(new StringReader(src9))); @@ -181,4 +218,68 @@ ServerAccess.logOutputReprint(entry.getKey() + " = " + entry.getValue()); } } -} \ No newline at end of file + + @Test + public void allFilesHaveSameName() throws IOException { + JNLPFile jnlpf = new DummyJnlpWithTitle(); + XDesktopEntry xde = new XDesktopEntry(jnlpf); + File f1 = xde.getShortcutTmpFile(); + File f2 = xde.getLinuxDesktopIconFile(); + File f3 = xde.getLinuxMenuIconFile(); + Assert.assertEquals(f1.getName(), f2.getName()); + Assert.assertEquals(f2.getName(), f3.getName()); + } + + private void testHtmlOccurences(boolean html, boolean javaws, boolean menu, AccessWarningPaneComplexReturn.ShortcutResult.Shortcut type, int occurences) throws Exception { + JNLPRuntime.setHtml(html); + setIsWebstart(javaws); + JNLPFile jnlpf = new DummyJnlpWithTitle(); + XDesktopEntry xde = new XDesktopEntry(jnlpf); + AccessWarningPaneComplexReturn.ShortcutResult a = new AccessWarningPaneComplexReturn.ShortcutResult(true); + a.setBrowser("blah"); + a.setFixHref(false); + a.setShortcutType(type); + Reader r = xde.getContentsAsReader(menu, a, true); + String s = FileUtils.getContentOfReader(r); + Assert.assertEquals(occurences, PluginBridgeTest.countOccurences(s, "-html")); + } + + @Test + public void htmlSwitchCorrectAccordingToJnlpRuntimeAndShortcutType() throws Exception { + AccessWarningPaneComplexReturn.ShortcutResult.Shortcut[] v = AccessWarningPaneComplexReturn.ShortcutResult.Shortcut.values(); + for (AccessWarningPaneComplexReturn.ShortcutResult.Shortcut w : v) { + int var1 = 0; + if (w == AccessWarningPaneComplexReturn.ShortcutResult.Shortcut.JAVAWS_HTML) { + var1 = 1; + } + testHtmlOccurences(true, true, true, w, 1); + testHtmlOccurences(true, false, false, w, var1); + testHtmlOccurences(true, false, true, w, var1); + testHtmlOccurences(true, true, false, w, 1); + testHtmlOccurences(false, true, true, w, 0); + testHtmlOccurences(false, false, false, w, var1); + testHtmlOccurences(false, true, false, w, 0); + testHtmlOccurences(false, false, true, w, var1); + } + } + + private static class DummyJnlpWithTitle extends DummyJNLPFileWithJar { + + public DummyJnlpWithTitle() throws MalformedURLException { + super(new File("/some/path/blah.jar")); + } + + @Override + public InformationDesc getInformation() { + return new InformationDesc(null, false) { + + @Override + public String getTitle() { + return "Demo App"; + } + + }; + } + + }; +}