From 5ab8b4daac1f2d314ada0fde29959264bccdeeeb Mon Sep 17 00:00:00 2001 From: Jason Boyer Date: Tue, 8 May 2018 20:55:51 -0400 Subject: [PATCH] LP1731922: Add Firefox support to Hatch Firefox has an unnecessarily picky manifest parser so it requires a separate manifest, and there was also an issue with the batch file and quoting command line parameters that was causing silent failures. The installer has also been updated to put the necessary NativeMessagingHosts key in place but FF doesn't offer the same kind of auto-install abilities that Chrome does. Signed-off-by: Jason Boyer Signed-off-by: Bill Erickson --- INSTALL.adoc | 44 ++++++++++++----- extension/app/extension.js | 13 ++++- extension/app/hatch_icon_128.png | Bin 5337 -> 0 bytes extension/app/hatch_icon_16.png | Bin 1471 -> 0 bytes extension/app/hatch_icon_48.png | Bin 2717 -> 0 bytes extension/app/icon_128.png | Bin 0 -> 17668 bytes extension/app/icon_48.png | Bin 0 -> 4550 bytes extension/app/icon_96.png | Bin 0 -> 11801 bytes extension/app/manifest.json | 23 ++++++--- ...ch.json => org.evergreen_ils.hatch.chrome.json} | 0 .../host/org.evergreen_ils.hatch.firefox.json | 9 ++++ hatch.bat | 11 +++-- installer/windows/hatch.nsi | 55 +++++++++++++++------ 13 files changed, 117 insertions(+), 38 deletions(-) delete mode 100644 extension/app/hatch_icon_128.png delete mode 100644 extension/app/hatch_icon_16.png delete mode 100644 extension/app/hatch_icon_48.png create mode 100644 extension/app/icon_128.png create mode 100644 extension/app/icon_48.png create mode 100644 extension/app/icon_96.png rename extension/host/{org.evergreen_ils.hatch.json => org.evergreen_ils.hatch.chrome.json} (100%) create mode 100644 extension/host/org.evergreen_ils.hatch.firefox.json diff --git a/INSTALL.adoc b/INSTALL.adoc index 7982b3a16e..3ccfa14eb1 100644 --- a/INSTALL.adoc +++ b/INSTALL.adoc @@ -1,8 +1,8 @@ = Hatch Install Documentation = This documentation assumes Windows users will use the Hatch Windows -installer. The xref:linux[Linux]-only steps can also be done on Windows, but -are not documented here. +installer. The xref:linux[Linux]-only steps can also be done on Windows +from a source checkout but are not documented here. == Windows == @@ -18,20 +18,25 @@ Execute the 'Hatch-Installer-(version).exe' executable. NOTE: See installer/windows/README.adoc for building the Windows installer from Linux or Windows. When building the Windows installer -on Windows, the full JDK will be required (for compiling Java). +on Windows a full JDK is required for compiling. ==== Optional: Test Hatch ==== [source,sh] ------------------------------------------------------------------------- C:\>cd %ProgramFiles(x86)%\Hatch -C:\Program Files (x86)\Hatch>hatch.sh test +C:\Program Files (x86)\Hatch>hatch.bat test ------------------------------------------------------------------------- === Install Chrome Extension === If the extension was not installed automatically when installing Hatch you can get it directly in the browser from the -https://chrome.google.com/webstore/detail/hatch-native-messenger/ppooibdipmklfichpmkcgplfgdplgahl[Chrome App Store] +https://chrome.google.com/webstore/detail/hatch-native-messenger/ppooibdipmklfichpmkcgplfgdplgahl[Chrome App Store]. + +=== Install Firefox Extension === + +The Firefox extension can not be installed automatically by the native application installer; +https://addons.mozilla.org/en-US/firefox/addon/hatch-native-messenger/[it is available on the Firefox Addons site]. === Continue with xref:using-hatch[Using Hatch] === @@ -58,18 +63,18 @@ $ ./hatch.sh compile === Configure Native Messaging === -Edit extension/host/org.evergreen_ils.hatch.json and change the "path" +Edit extension/host/org.evergreen_ils.hatch.(chrome|firefox).json and change the "path" value to match the location of your copy of "hatch.sh", found in the root directory of the Hatch repository. -Copy the host file into Chrome's configuration directory. +Copy the correct host file, changing the filename to org.evergreen_ils.hatch.json, into the browser's configuration directory. For Chrome: [source,sh] ------------------------------------------------------------------------- $ mkdir -p ~/.config/google-chrome/NativeMessagingHosts/ -$ cp extension/host/org.evergreen_ils.hatch.json ~/.config/google-chrome/NativeMessagingHosts/ +$ cp extension/host/org.evergreen_ils.hatch.chrome.json ~/.config/google-chrome/NativeMessagingHosts/org.evergreen_ils.hatch.json ------------------------------------------------------------------------- For Chromium: @@ -77,19 +82,32 @@ For Chromium: [source,sh] ------------------------------------------------------------------------- $ mkdir -p ~/.config/chromium/NativeMessagingHosts/ -$ cp extension/host/org.evergreen_ils.hatch.json ~/.config/chromium/NativeMessagingHosts/ +$ cp extension/host/org.evergreen_ils.hatch.chrome.json ~/.config/chromium/NativeMessagingHosts/org.evergreen_ils.hatch.json +------------------------------------------------------------------------- + +For Firefox: + +[source,sh] +------------------------------------------------------------------------- +$ mkdir -p ~/.mozilla/native-messaging-hosts/ +$ cp extension/host/org.evergreen_ils.hatch.firefox.json ~/.mozilla/native-messaging-hosts/org.evergreen_ils.hatch.json ------------------------------------------------------------------------- === Install Chrome Extension === -Install the exenstion directly in the browser from the -https://chrome.google.com/webstore/detail/hatch-native-messenger/ppooibdipmklfichpmkcgplfgdplgahl[Chrome App Store] +Install the Chrome exenstion directly from the +https://chrome.google.com/webstore/detail/hatch-native-messenger/ppooibdipmklfichpmkcgplfgdplgahl[Chrome App Store]. + +=== Install Firefox Extension === + +Install the Firefox extension from the +https://addons.mozilla.org/en-US/firefox/addon/hatch-native-messenger/[Firefox Addons site]. ==== Optional: Test Hatch ==== NOTE: print commands are disabled by default in the tests to avoid -unexpected printing, but they can be added by un-commenting +unexpected printing but they can be added by un-commenting them in src/org/evergreen_ils/hatch/TestHatch.java and recompiling. [source,sh] @@ -132,7 +150,7 @@ Hatch responded to message ID 1 "Connecting to native messaging host: org.evergreen_ils.hatch" in the Background Page console with no errors. * Use the "Reload" link to apply local changes made to the - extension (e.g. main.js). (This might only work when installing + extension (e.g. extension.js). (This might only work when installing the exention manually via developer mode tools). * See also https://developer.chrome.com/extensions/getstarted diff --git a/extension/app/extension.js b/extension/app/extension.js index fddd095b19..a46a2d3299 100644 --- a/extension/app/extension.js +++ b/extension/app/extension.js @@ -39,10 +39,19 @@ function connectToHatch() { /** * Called when the connection to Hatch goes away. */ -function onDisconnected() { - console.warn("Hatch disconnected: " + chrome.runtime.lastError.message); +function onDisconnected(port) { + var reason = "unspecified reason"; + + if (port && port.error) { + reason = port.error.message; + } else if (chrome.runtime.lastError) { + reason = chrome.runtime.lastError.message; + } + + console.warn("Hatch disconnected: " + reason); hatchPort = null; + // Firefox gives some indication a NativeMessaging app doesn't exist, does Chrome? (port.error.message starts with No such...) if (hatchHostUnavailable) return; // If we can reasonablly assume a connection to the Hatch host diff --git a/extension/app/hatch_icon_128.png b/extension/app/hatch_icon_128.png deleted file mode 100644 index 86228e7be210b541a46abafecd7d03ebd732a7d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5337 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 diff --git a/extension/app/hatch_icon_16.png b/extension/app/hatch_icon_16.png deleted file mode 100644 index 4981a0929a16ca5cd4d99333883b0ed4450ee4b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1471 zcmV;w1wi_VP)4Tx062|}Rb6NtRTMtEb7vzY&QokOg>Hg1+lHrgWS zWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6wD^Ni=!>T7nL9I? zX}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8rehoBb*p;u8ID_yBf z0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J`jH<$>RKN5V(7Oq zK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYvwjAKwmYb0gKL(K8 z-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z>!FI&AHCpoWI|RUq zx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVTrI(b06~u#xf1yS} z_UGdMvD``!0~u->P=lA4?YN`hilQ|3tHka)7T{2CGqw zjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^7T9R1gAN8V6s;5) zieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2bW$~+pTw@bIek?Zv zKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L_AC5qq~L$#SMj%U z$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6=b6>{xYV#Ue-+LB$ z7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re4r3qYr~6#KE>;1F z`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+5K}u-6REM(K@W$s zrgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5h^QEb$V`rCQ-|7Z zS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX2i^rZ^Mu;6+rb@? zNPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV0id6JRZw95ZvX%Q z24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jL3}6A(Cc z0R$8P00A>eL_t(I%e9j|O9Md=hM(EJpu};~sS=9gu(`-a{LFbTMJ53#Jg1#ms=7zh6{zSw z`;7(GqF0QU@c@sIYC|BNmebsunDy|Dqt-mPrkvX%2WYy0)nb#UehG^r5=#+JB$jH> z%_*TiuOEr!DyvYpAt9D&ZMZZQw&EIz*qoTbU{bRo7g>tNkt)NBjVaKh;{%R6bCkrf zQfO1v-Qj>4ov|6!KQ3X}Yb>Dzwvz{(*F(=3jPil=n%(4)SoKE^e`zFul31LV|9z%k Z$2(gbZ$0beY&`$~002ovPDHLkV1gr4z!Cre diff --git a/extension/app/hatch_icon_48.png b/extension/app/hatch_icon_48.png deleted file mode 100644 index 1f1974a4e99783f22fa4b12cd1d6b1f7bec99934..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2717 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 literal 0 HcmV?d00001 diff --git a/extension/app/icon_96.png b/extension/app/icon_96.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba2cc417717642772e6dbeaeeb70aef72216d0b GIT binary patch literal 11801 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 Hu0mjfswSWe literal 0 HcmV?d00001 diff --git a/extension/app/manifest.json b/extension/app/manifest.json index e953e356a6..4d3fd7c20e 100644 --- a/extension/app/manifest.json +++ b/extension/app/manifest.json @@ -1,12 +1,12 @@ { "name": "Hatch Native Messenger", - "version": "0.1.5", + "version": "0.2.0", "manifest_version": 2, - "description": "Relays messages to/from Hatch.", + "description": "Relays messages to/from the Hatch native printing service for the Evergreen ILS web client.", "icons": { - "16": "hatch_icon_16.png", - "48": "hatch_icon_48.png", - "128": "hatch_icon_128.png" + "48": "icon_48.png", + "96": "icon_96.png", + "128": "icon_128.png" }, "background" : { "scripts" : ["extension.js"] @@ -19,10 +19,21 @@ } ], "browser_action": { - "default_title": "Hatch" + "default_title": "Hatch", + "default_icon": { + "48": "icon_48.png", + "96": "icon_96.png", + "128": "icon_128.png" + } }, "permissions": [ "nativeMessaging" ], + "applications": { + "gecko": { + "id": "hatch-native-messenger@evergreen-ils.org", + "strict_min_version": "50.0" + } + }, "minimum_chrome_version": "38" } diff --git a/extension/host/org.evergreen_ils.hatch.json b/extension/host/org.evergreen_ils.hatch.chrome.json similarity index 100% rename from extension/host/org.evergreen_ils.hatch.json rename to extension/host/org.evergreen_ils.hatch.chrome.json diff --git a/extension/host/org.evergreen_ils.hatch.firefox.json b/extension/host/org.evergreen_ils.hatch.firefox.json new file mode 100644 index 0000000000..85dea656b3 --- /dev/null +++ b/extension/host/org.evergreen_ils.hatch.firefox.json @@ -0,0 +1,9 @@ +{ + "name": "org.evergreen_ils.hatch", + "description": "Hatch Native Messaging Host", + "path": "/path/to/hatch.sh", + "type": "stdio", + "allowed_extensions": [ + "hatch-native-messenger@evergreen-ils.org" + ] +} diff --git a/hatch.bat b/hatch.bat index 1b208f873c..dd76b2e151 100755 --- a/hatch.bat +++ b/hatch.bat @@ -30,12 +30,17 @@ SET JAVA=%PROGRAMDATA%\Oracle\Java\javapath\java IF %ERRORLEVEL% EQU 0 GOTO Huzzah REM I don't blame you -EXIT %ERRORLEVEL% +EXIT /B %ERRORLEVEL% REM There you are. :Huzzah -IF "%1" == "compile" ( +REM %~1 means to strip %1 of any surrounding quotes. +REM This is necessary if you're going to use a construction like "%1" == "etc" because a quoted %1 will +REM cause silent failures when the batch file is run and dies because the IF command has a syntax error. +REM Specifically, "Files was unexpected at this time." + +IF "%~1" == "compile" ( %JAVAC% -cp "lib\*" -Xdiags:verbose^ -d lib src\org\evergreen_ils\hatch\*.java @@ -45,7 +50,7 @@ IF "%1" == "compile" ( ) ELSE ( - IF "%1" == "test" ( + IF "%~1" == "test" ( %JAVA% -cp "lib\*"^ -Djava.util.logging.config.file=logging.properties^ diff --git a/installer/windows/hatch.nsi b/installer/windows/hatch.nsi index 68fed3e904..06731f321c 100644 --- a/installer/windows/hatch.nsi +++ b/installer/windows/hatch.nsi @@ -62,6 +62,10 @@ ${EndIf} ; Find any installed JRE/JDK and return the version or -1 Function DetectJava + ; FYI: Because it appears there won't ever be a 64 bit version of makensis for linux + ; this script assumes that it will always be run as part of a 32 bit installer. + ; If that should ever change this script will require some significant adjustment. + ; 32 bit JRE >= 9 ReadRegStr $0 HKLM "SOFTWARE\JavaSoft\JRE" "CurrentVersion" StrCmp $0 "" +1 Found @@ -173,14 +177,13 @@ section "install" File ..\..\hatch.bat File ..\..\hatch.properties File ..\..\logging.properties - - ; Set path variable in org.ils_evergreen.hatch.json to $INSTDIR\hatch.bat - ${StrRep} '$0' '$INSTDIR' '\' '\\' - !insertmacro _ReplaceInFile "$INSTDIR\extension\host\org.evergreen_ils.hatch.json" "/path/to/hatch.sh" "$0\\hatch.bat" - AccessControl::EnableFileInheritance "$INSTDIR\extension\host\org.evergreen_ils.hatch.json" - ; Uninstaller - writeUninstaller "$INSTDIR\Uninstall ${APPNAME}.exe" + ; Set path variable in org.ils_evergreen.hatch.*.json to $INSTDIR\hatch.bat + ${StrRep} '$0' '$INSTDIR' '\' '\\' + !insertmacro _ReplaceInFile "$INSTDIR\extension\host\org.evergreen_ils.hatch.chrome.json" "/path/to/hatch.sh" "$0\\hatch.bat" + !insertmacro _ReplaceInFile "$INSTDIR\extension\host\org.evergreen_ils.hatch.firefox.json" "/path/to/hatch.sh" "$0\\hatch.bat" + AccessControl::EnableFileInheritance "$INSTDIR\extension\host\org.evergreen_ils.hatch.chrome.json" + AccessControl::EnableFileInheritance "$INSTDIR\extension\host\org.evergreen_ils.hatch.firefox.json" ; Registry info for Add/Remove Programs WriteRegStr HKLM "SOFTWARE\${COMPANYNAME}\${APPNAME}" "Install Path" $INSTDIR @@ -207,8 +210,25 @@ section "install" WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" ${INSTALLSIZE} ; Connect Hatch to Chrome and install the Hatch extension from the Chrome Web Store - WriteRegStr HKLM "SOFTWARE\Google\Chrome\NativeMessagingHosts\org.evergreen_ils.hatch" "" "$INSTDIR\extension\host\org.evergreen_ils.hatch.json" + WriteRegStr HKLM "SOFTWARE\Google\Chrome\NativeMessagingHosts\org.evergreen_ils.hatch" "" "$INSTDIR\extension\host\org.evergreen_ils.hatch.chrome.json" WriteRegStr HKLM "Software\Google\Chrome\Extensions\${EXTENSIONID}" "update_url" "${EXTENSION_UPDATEURL}" + + ; Firefox won't check both the 32 and 64 bit views, so it's on us to put the key in the right place. + ; Firefox doesn't allow automatic installation of remote extensions either, so there's no (good) auto-install option here. :-/ + ; A link should be added to the web client to simplify locating the FF extension. (Links to both would likely be a good practice.) + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} + + WriteRegStr HKLM "SOFTWARE\Mozilla\NativeMessagingHosts\org.evergreen_ils.hatch" "" "$INSTDIR\extension\host\org.evergreen_ils.hatch.firefox.json" + + ${If} ${RunningX64} + SetRegView 32 + ${EndIf} + + ; Uninstaller + writeUninstaller "$INSTDIR\Uninstall ${APPNAME}.exe" + SectionEnd @@ -217,7 +237,7 @@ SectionEnd function un.onInit SetShellVarContext all - + # Verify uninstaller MessageBox MB_OKCANCEL "Permanently remove ${APPNAME}?" /SD IDOK IDOK next Abort @@ -225,7 +245,7 @@ function un.onInit !insertmacro VerifyUserIsAdmin functionEnd -section "uninstall" +section "uninstall" # Remove the actual files Delete /REBOOTOK "$INSTDIR\hatch.bat" Delete /REBOOTOK "$INSTDIR\hatch.properties" @@ -235,18 +255,25 @@ section "uninstall" RmDir /r /REBOOTOK "$INSTDIR\lib" # Delete uninstaller last Delete /REBOOTOK "$INSTDIR\Uninstall ${APPNAME}.exe" - + # Remove installation directory RmDir /REBOOTOK "$INSTDIR" - + # Remove uninstaller info from registry DeleteRegKey HKLM "SOFTWARE\${COMPANYNAME}\${APPNAME}" DeleteRegKey HKLM "SOFTWARE\${COMPANYNAME}" DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" DeleteRegKey HKLM "SOFTWARE\Google\Chrome\NativeMessagingHosts\org.evergreen_ils.hatch" DeleteRegKey HKLM "SOFTWARE\Google\Chrome\Extensions\${EXTENSIONID}" + ${If} ${RunningX64} - DeleteRegKey HKLM "SOFTWARE\Wow6432Node\Google\Chrome\Extensions\${EXTENSIONID}" + SetRegView 64 + ${EndIf} + + DeleteRegKey HKLM "SOFTWARE\Mozilla\NativeMessagingHosts\org.evergreen_ils.hatch" + + ${If} ${RunningX64} + SetRegView 32 ${EndIf} IfRebootFlag 0 Done @@ -254,5 +281,5 @@ section "uninstall" Reboot Done: - + sectionEnd -- 2.11.0