summaryrefslogtreecommitdiffstats
path: root/comm/suite/installer
diff options
context:
space:
mode:
Diffstat (limited to 'comm/suite/installer')
-rw-r--r--comm/suite/installer/Makefile.in196
-rw-r--r--comm/suite/installer/allowed-dupes.mn349
-rw-r--r--comm/suite/installer/license.txt373
-rw-r--r--comm/suite/installer/moz.build4
-rw-r--r--comm/suite/installer/package-manifest.in515
-rw-r--r--comm/suite/installer/removed-files.in290
-rw-r--r--comm/suite/installer/windows/Makefile.in55
-rw-r--r--comm/suite/installer/windows/app.tag4
-rw-r--r--comm/suite/installer/windows/moz.build10
-rw-r--r--comm/suite/installer/windows/nsis/custom.nsi68
-rw-r--r--comm/suite/installer/windows/nsis/defines.nsi.in64
-rw-r--r--comm/suite/installer/windows/nsis/installer.nsi942
-rw-r--r--comm/suite/installer/windows/nsis/shared.nsh1069
-rw-r--r--comm/suite/installer/windows/nsis/uninstaller.nsi580
-rw-r--r--comm/suite/installer/windows/nsis/updater_append.ini16
15 files changed, 4535 insertions, 0 deletions
diff --git a/comm/suite/installer/Makefile.in b/comm/suite/installer/Makefile.in
new file mode 100644
index 0000000000..d4acf3e890
--- /dev/null
+++ b/comm/suite/installer/Makefile.in
@@ -0,0 +1,196 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+STANDALONE_MAKEFILE := 1
+
+include $(topsrcdir)/config/rules.mk
+
+MOZ_PKG_REMOVALS = $(srcdir)/removed-files.in
+
+MOZ_PKG_MANIFEST = $(srcdir)/package-manifest.in
+# Be fatal, except when building with XULRunner which already bundles some files.
+ifndef SYSTEM_LIBXUL
+MOZ_PKG_FATAL_WARNINGS = 1
+endif
+
+DEFINES += -DPKG_LOCALE_MANIFEST=$(topobjdir)/comm/suite/installer/locale-manifest.in
+MOZ_CHROME_LOCALE_ENTRIES=@RESPATH@/chrome/
+
+MOZ_PKG_DUPEFLAGS = \
+ -w \
+ -f $(srcdir)/allowed-dupes.mn \
+ -f $(topsrcdir)/browser/installer/allowed-dupes.mn \
+ $(NULL)
+
+MOZ_NONLOCALIZED_PKG_LIST = \
+ xpcom \
+ browser \
+ mail \
+ $(NULL)
+
+MOZ_LOCALIZED_PKG_LIST = \
+ $(AB_CD) \
+ $(NULL)
+
+DEFINES += -DMOZ_APP_NAME=$(MOZ_APP_NAME) -DPREF_DIR=$(PREF_DIR)
+
+DEFINES += -DJAREXT=
+
+ifdef ENABLE_TESTS
+DEFINES += -DENABLE_TESTS=1
+endif
+
+ifdef MOZ_ANGLE_RENDERER
+DEFINES += -DMOZ_ANGLE_RENDERER=$(MOZ_ANGLE_RENDERER)
+ifdef MOZ_D3DCOMPILER_VISTA_DLL
+DEFINES += -DMOZ_D3DCOMPILER_VISTA_DLL=$(MOZ_D3DCOMPILER_VISTA_DLL)
+endif
+endif
+
+ifdef NIGHTLY_BUILD
+DEFINES += -DNIGHTLY_BUILD=1
+endif
+
+ifdef MOZ_DEBUG
+DEFINES += -DMOZ_DEBUG=1
+endif
+
+ifeq ($(MOZ_WIDGET_TOOLKIT),gtk)
+DEFINES += -DMOZ_GTK=1
+endif
+
+ifdef MOZ_DEBUGQA
+DEFINES += -DMOZ_PACKAGE_DEBUGQA=1
+endif
+
+ifdef MOZ_IRC
+DEFINES += -DMOZ_IRC=1
+endif
+
+ifdef MOZ_UPDATER
+DEFINES += -DMOZ_UPDATER=1
+endif
+ifdef MOZ_SYSTEM_NSPR
+DEFINES += -DMOZ_SYSTEM_NSPR=1
+endif
+
+ifdef MOZ_SYSTEM_NSS
+DEFINES += -DMOZ_SYSTEM_NSS=1
+endif
+
+ifdef NECKO_WIFI
+DEFINES += -DNECKO_WIFI=1
+endif
+
+ifdef MOZ_BUNDLED_FONTS
+DEFINES += -DMOZ_BUNDLED_FONTS=1
+endif
+
+# Set MSVC dlls version to package, if any.
+# With VS2015+ it does not make sense to define the ucrt libs without
+# the base c++ libs and vice versa.
+ifdef MOZ_NO_DEBUG_RTL
+ifdef WIN32_REDIST_DIR
+ifdef WIN_UCRT_REDIST_DIR
+DEFINES += -DMOZ_PACKAGE_MSVC_DLLS=1
+DEFINES += -DMSVC_C_RUNTIME_DLL=$(MSVC_C_RUNTIME_DLL)
+DEFINES += -DMSVC_CXX_RUNTIME_DLL=$(MSVC_CXX_RUNTIME_DLL)
+DEFINES += -DMOZ_PACKAGE_WIN_UCRT_DLLS=1
+endif
+endif
+endif
+
+ifneq (,$(filter WINNT Darwin Android,$(OS_TARGET)))
+DEFINES += -DMOZ_SHARED_MOZGLUE=1
+endif
+
+ifneq (en-US, $(AB_CD))
+DEFINES += -DLOCALE_BUILD=1
+endif
+
+DEFINES += -DMOZ_CHILD_PROCESS_NAME=$(MOZ_CHILD_PROCESS_NAME)
+
+ifdef MAKENSISU
+DEFINES += -DHAVE_MAKENSISU=1
+endif
+
+ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa)
+MOZ_PKG_MAC_DSSTORE=$(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/dsstore
+MOZ_PKG_MAC_BACKGROUND=$(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/background.png
+MOZ_PKG_MAC_ICON=$(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/disk.icns
+MOZ_PKG_MAC_EXTRA=--symlink "/Applications:/ "
+endif
+
+NON_OMNIJAR_FILES = \
+ defaults/messenger/mailViews.dat \
+ defaults/profile/panels.rdf \
+ defaults/profile/mimeTypes.rdf \
+ defaults/profile/chrome/userChrome-example.css \
+ defaults/profile/chrome/userContent-example.css \
+ $(NULL)
+
+include $(topsrcdir)/toolkit/mozapps/installer/packager.mk
+
+ifeq (Darwin, $(OS_ARCH))
+BINPATH = $(_BINPATH)
+DEFINES += -DAPPNAME='$(_APPNAME)'
+else
+BINPATH = bin
+endif
+DEFINES += -DBINPATH=$(BINPATH)
+
+ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
+RESPATH = $(_APPNAME)/Contents/Resources
+else
+RESPATH = $(BINPATH)
+endif
+DEFINES += -DRESPATH='$(RESPATH)'
+
+LPROJ_ROOT = $(firstword $(subst -, ,$(AB_CD)))
+ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
+ifeq (zh-TW,$(AB_CD))
+LPROJ_ROOT := $(subst -,_,$(AB_CD))
+endif
+endif
+DEFINES += -DLPROJ_ROOT=$(LPROJ_ROOT)
+
+ifdef CLANG_CXX
+DEFINES += -DCLANG_CXX
+endif
+ifdef CLANG_CL
+DEFINES += -DCLANG_CL
+endif
+
+ifdef LLVM_SYMBOLIZER
+DEFINES += -DLLVM_SYMBOLIZER=$(notdir $(LLVM_SYMBOLIZER))
+endif
+ifdef MOZ_CLANG_RT_ASAN_LIB_PATH
+DEFINES += -DMOZ_CLANG_RT_ASAN_LIB=$(notdir $(MOZ_CLANG_RT_ASAN_LIB_PATH))
+endif
+
+libs::
+ $(MAKE) -C $(topobjdir)/comm/suite/locales langpack
+
+ifeq (WINNT,$(OS_ARCH))
+PKGCOMP_FIND_OPTS =
+else
+PKGCOMP_FIND_OPTS = -L
+endif
+ifeq (Darwin, $(OS_ARCH))
+FINDPATH = $(_APPNAME)/Contents/MacOS
+else
+FINDPATH=bin
+endif
+
+package-compare:: $(MOZ_PKG_MANIFEST)
+ cd $(DIST); find $(PKGCOMP_FIND_OPTS) '$(FINDPATH)' -type f | sort > bin-list.txt
+ $(call py_action,preprocessor,$(DEFINES) $(ACDEFINES) $(MOZ_PKG_MANIFEST)) | grep '^$(BINPATH)' | sed -e 's/^\///' | sort > $(DIST)/pack-list.txt
+ -diff -u $(DIST)/pack-list.txt $(DIST)/bin-list.txt
+ rm -f $(DIST)/pack-list.txt $(DIST)/bin-list.txt
+
+# The comm-* source stamp is already there.
+PLATFORM_SOURCE_STAMP = $(firstword $(shell hg -R "$(topsrcdir)" parent --template="{node|short}\n" 2>/dev/null))
+PLATFORM_SOURCE_REPO = $(shell hg -R "$(topsrcdir)" showconfig paths.default 2>/dev/null | sed -e "s/^ssh:/https:/")
+make-sourcestamp-file::
+ @echo "$(PLATFORM_SOURCE_REPO)/rev/$(PLATFORM_SOURCE_STAMP)" >> $(MOZ_SOURCESTAMP_FILE)
diff --git a/comm/suite/installer/allowed-dupes.mn b/comm/suite/installer/allowed-dupes.mn
new file mode 100644
index 0000000000..66e730c0f1
--- /dev/null
+++ b/comm/suite/installer/allowed-dupes.mn
@@ -0,0 +1,349 @@
+# Known duplicate files
+# This file is ideally removed, but some existing files will be grandfathered in
+# See bug 1303184, bug 1313670. bug 1314892
+#
+# PLEASE DO NOT ADD MORE EXCEPTIONS TO THIS LIST UNLESS NECESSARY FOR THEMES OR EXTENSIONS
+#
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/console/error-dash.png
+chrome/classic/skin/classic/communicator/console/console-error-dash.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/menu/menu-radio-dis.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/menu/menu-radio.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/sidebar/sbpicker-arrow.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/scrollbar/btn-dn.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/arrow/arrow-lft-sharp.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/scrollbar/btn-lft.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/arrow/arrow-rit-sharp.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/scrollbar/btn-rit.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/menu/menu-check-dis.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/menu/menu-check.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/console/error-caret.png
+chrome/classic/skin/classic/communicator/console/console-error-caret.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/gtk/tree/sort-asc.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/mac/tree/sort-dsc.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/win/tree/sort-dsc.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/gtk/tree/sort-dsc.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/mac/tree/sort-asc.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/win/tree/sort-asc.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/extensions/cancel.png
+chrome/toolkit/skin/classic/mozapps/extensions/cancel.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/editor/icons/multicolor.png
+chrome/classic/skin/classic/editor/icons/multicolor.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/tree/checkbox.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/dot.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/navigator/icons/tab-drag-indicator.png
+chrome/classic/skin/classic/navigator/icons/tab-drag-indicator.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/viewsource/viewsource.css
+chrome/toolkit/skin/classic/mozapps/viewsource/viewsource.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/editor/icons/progress-failed.png
+chrome/classic/skin/classic/editor/icons/progress-failed.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/media/playButton.svg
+chrome/toolkit/skin/classic/global/media/playButton.svg
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/tree/checkbox-checked.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/check.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/folderPaneExtras.css
+chrome/classic/skin/classic/messenger/folderPaneExtras.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/editor/icons/progress-done.png
+chrome/classic/skin/classic/editor/icons/progress-done.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/threadPaneExtras.css
+chrome/classic/skin/classic/messenger/threadPaneExtras.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/editor/icons/img-align-lft.png
+chrome/classic/skin/classic/editor/icons/img-align-left.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/editor/icons/img-align-rit.png
+chrome/classic/skin/classic/editor/icons/img-align-right.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/smime/certFetchingStatus.css
+chrome/classic/skin/classic/messenger/smime/certFetchingStatus.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/editor/icons/editmode-tags.png
+chrome/classic/skin/classic/editor/icons/editmode-tags.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/local-mailhost.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-local.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/messageKeywords.css
+chrome/classic/skin/classic/messenger/messageKeywords.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/media/pauseButton.svg
+chrome/toolkit/skin/classic/global/media/pauseButton.svg
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/search/engineManager.css
+chrome/classic/skin/classic/communicator/search/engineManager.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/editor/icons/editmode-preview.png
+chrome/classic/skin/classic/editor/icons/editmode-preview.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/sidebar/sidebarListView.css
+chrome/classic/skin/classic/communicator/sidebar/sidebarListView.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/media/TopLevelVideoDocument.css
+chrome/toolkit/skin/classic/global/media/TopLevelVideoDocument.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/dialogs.css
+chrome/classic/skin/classic/communicator/dialogs.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/addressbook/sidebarPanel.css
+chrome/classic/skin/classic/messenger/addressbook/sidebarPanel.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/smime/msgCompSecurityInfo.css
+chrome/classic/skin/classic/messenger/smime/msgCompSecurityInfo.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/dataman/datamanIcon-16.png
+chrome/classic/skin/classic/communicator/dataman/datamanIcon-16.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/media/TopLevelImageDocument.css
+chrome/toolkit/skin/classic/global/media/TopLevelImageDocument.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/prefPanels.css
+chrome/classic/skin/classic/messenger/prefPanels.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/lock-broken.png
+chrome/classic/skin/classic/communicator/icons/lock-broken.png
+chrome/en-US/locale/en-US/global-platform/mac/intl.properties
+chrome/en-US/locale/en-US/global-platform/unix/intl.properties
+chrome/en-US/locale/en-US/global-platform/win/intl.properties
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/lock-secure.png
+chrome/classic/skin/classic/communicator/icons/lock-secure.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/lock-insecure.png
+chrome/classic/skin/classic/communicator/icons/lock-insecure.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/closeFullScreenVideo.png
+chrome/classic/skin/classic/communicator/icons/closeFullScreenVideo.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/smime/msgReadSecurityInfo.css
+chrome/classic/skin/classic/messenger/smime/msgReadSecurityInfo.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/fullscreen-video.css
+chrome/classic/skin/classic/communicator/fullscreen-video.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/smime/msgReadSMIMEOverlay.css
+chrome/classic/skin/classic/messenger/smime/msgReadSMIMEOverlay.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/smime/msgHdrViewSMIMEOverlay.css
+chrome/classic/skin/classic/messenger/smime/msgHdrViewSMIMEOverlay.css
+chrome/classic/skin/classic/communicator/downloads/dl-remove.png
+chrome/classic/skin/classic/messenger/icons/folder-trash.png
+modules/commonjs/sdk/ui/button/view/events.js
+modules/commonjs/sdk/ui/state/events.js
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-inbox-open.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-inbox.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/browserRequest.css
+chrome/classic/skin/classic/messenger/browserRequest.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/start.css
+chrome/classic/skin/classic/messenger/start.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-kill-offl.png
+chrome/classic/skin/classic/messenger/icons/message-news-kill-offl.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-kill.png
+chrome/classic/skin/classic/messenger/icons/message-news-kill.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-kill-offl.png
+chrome/classic/skin/classic/messenger/icons/message-news-attach-kill-offl.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-kill.png
+chrome/classic/skin/classic/messenger/icons/message-news-attach-kill.png
+chrome/en-US/locale/en-US/global-platform/unix/accessible.properties
+chrome/en-US/locale/en-US/global-platform/win/accessible.properties
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/notification-16.png
+chrome/classic/skin/classic/communicator/icons/notification-16.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/thread-closed-offl-kill.png
+chrome/classic/skin/classic/messenger/icons/thread-closed-offl-kill.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/thread-closed-kill.png
+chrome/classic/skin/classic/messenger/icons/thread-closed-kill.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/insecure.png
+chrome/classic/skin/classic/messenger/icons/insecure.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/plugins/pluginGeneric-16.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/thread-new-closed-offl-kill.png
+chrome/classic/skin/classic/messenger/icons/thread-new-closed-offl-kill.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/thread-new-closed-kill.png
+chrome/classic/skin/classic/messenger/icons/thread-new-closed-kill.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/secure.png
+chrome/classic/skin/classic/messenger/icons/secure.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/places/calendar.png
+chrome/classic/skin/classic/communicator/places/calendar.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/identity.png
+chrome/classic/skin/classic/communicator/icons/identity.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/icons/information-16.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/icons/notfound.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/addressbook/cardDialog.css
+chrome/classic/skin/classic/messenger/addressbook/cardDialog.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/addressbook/icons/contact-generic-tiny.png
+chrome/classic/skin/classic/messenger/addressbook/icons/contact-generic-tiny.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/feedIcon16.png
+chrome/classic/skin/classic/communicator/icons/feedIcon16.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/phishing.png
+chrome/classic/skin/classic/messenger/icons/phishing.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/places/history.png
+chrome/classic/skin/classic/communicator/places/history.png
+res/table-remove-column-active.gif
+res/table-remove-row-active.gif
+res/table-remove-column-hover.gif
+res/table-remove-row-hover.gif
+res/table-remove-column.gif
+res/table-remove-row.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger-newsblog/icons/rss-feed.png
+chrome/classic/skin/classic/messenger-newsblog/icons/rss-feed.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/plugins/pluginBlocked-16.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/plugins/pluginBlocked.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/plugins/pluginGeneric.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/info.png
+chrome/classic/skin/classic/messenger/icons/info.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/brand/throbber16-single.png
+chrome/classic/skin/classic/communicator/brand/throbber16-single.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-sealed.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-sealed.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/geo.png
+chrome/classic/skin/classic/communicator/icons/geo.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/save.png
+chrome/classic/skin/classic/communicator/icons/save.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-foot.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-foot.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-tongue.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-tongue.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-embarrassed.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-embarrassed.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-innocent.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-innocent.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-yell.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-yell.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-kiss.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-kiss.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-undecided.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-undecided.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/downloads/downloadButtons.png
+chrome/classic/skin/classic/communicator/downloads/downloadButtons.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-money.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-money.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-cool.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-cool.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/editor/icons/progress-busy.png
+chrome/classic/skin/classic/editor/icons/progress-busy.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-wink.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-wink.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-surprise.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-surprise.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-smile.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-smile.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-frown.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-frown.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-laughing.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-laughing.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/smileys/smiley-cry.png
+chrome/classic/skin/classic/communicator/icons/smileys/smiley-cry.png
+modules/devtools/Loader.jsm
+modules/devtools/shared/Loader.jsm
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/junk.png
+chrome/classic/skin/classic/messenger/icons/junk.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/extensions/rating-not-won.png
+chrome/toolkit/skin/classic/mozapps/extensions/rating-not-won.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/extensions/category-extensions.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/extensions/extensionGeneric.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/xpinstall/xpinstallItemGeneric.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/extensions/rating-won.png
+chrome/toolkit/skin/classic/mozapps/extensions/rating-won.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/plugins/contentPluginCrashed.png
+chrome/toolkit/skin/classic/mozapps/plugins/contentPluginCrashed.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/extensions/category-dictionaries.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/extensions/dictionaryGeneric.png
+chrome/toolkit/skin/classic/mozapps/extensions/dictionaryGeneric.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/new-mail-alert.png
+chrome/classic/skin/classic/messenger/icons/new-mail-alert.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/navigator/webDeveloper.css
+chrome/classic/skin/classic/navigator/webDeveloper.css
+chrome/comm/content/communicator/places/bookmarkProperties.xul
+chrome/comm/content/communicator/places/bookmarkProperties2.xul
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/audioFeedIcon.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/feedIcon.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/videoFeedIcon.png
+chrome/classic/skin/classic/communicator/icons/audioFeedIcon.png
+chrome/classic/skin/classic/communicator/icons/feedIcon.png
+chrome/classic/skin/classic/communicator/icons/videoFeedIcon.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/brand/throbber-single.png
+chrome/classic/skin/classic/communicator/brand/throbber-single.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/notification-icons.svg
+chrome/classic/skin/classic/communicator/icons/notification-icons.svg
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/extensions/category-languages.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/extensions/localeGeneric.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/extensions/heart.png
+chrome/toolkit/skin/classic/mozapps/extensions/heart.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/media/imagedoc-darknoise.png
+chrome/toolkit/skin/classic/global/media/imagedoc-darknoise.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/icons/autoscroll.png
+chrome/toolkit/skin/classic/global/icons/autoscroll.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/notification-64.png
+chrome/classic/skin/classic/communicator/icons/notification-64.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/media/imagedoc-lightnoise.png
+chrome/toolkit/skin/classic/global/media/imagedoc-lightnoise.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/addressbook/icons/contact-generic.png
+chrome/classic/skin/classic/messenger/addressbook/icons/contact-generic.png
+chrome/toolkit/skin/classic/mozapps/downloads/downloadButtons.png
+chrome/toolkit/skin/classic/mozapps/update/downloadButtons.png
+chrome/devtools/modules/devtools/client/themes/toolbars.css
+chrome/devtools/skin/toolbars.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/media/error.png
+chrome/toolkit/skin/classic/global/media/error.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/navigator/icons/identity.png
+chrome/classic/skin/classic/navigator/icons/identity.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/loading.png
+chrome/toolkit/skin/classic/global/icons/loading.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/mozapps/extensions/discover-logo.png
+chrome/toolkit/skin/classic/mozapps/extensions/discover-logo.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/icons/connecting.png
+chrome/classic/skin/classic/communicator/icons/connecting.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/media/stalled.png
+chrome/toolkit/skin/classic/global/media/stalled.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/brand/throbber16-anim.png
+chrome/classic/skin/classic/communicator/brand/throbber16-anim.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/media/throbber.png
+chrome/toolkit/skin/classic/global/media/throbber.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/brand/throbber-anim.png
+chrome/classic/skin/classic/communicator/brand/throbber-anim.png
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/icons/spinner-arrow-down.svg
+chrome/toolkit/skin/classic/global/icons/spinner-arrow-down.svg
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/icons/spinner-arrow-up.svg
+chrome/toolkit/skin/classic/global/icons/spinner-arrow-up.svg
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/datetimepopup.css
+chrome/toolkit/skin/classic/global/datetimepopup.css
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/icons/calendar-arrow-left.svg
+chrome/toolkit/skin/classic/global/icons/calendar-arrow-left.svg
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/icons/calendar-arrow-right.svg
+chrome/toolkit/skin/classic/global/icons/calendar-arrow-right.svg
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/icons/input-clear.svg
+chrome/toolkit/skin/classic/global/icons/input-clear.svg
+
+# Compatibility gif files for modern theme.
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/gtk/tree/sort-dsc.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/mac/tree/sort-asc.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/win/tree/sort-asc.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/gtk/tree/sort-asc.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/mac/tree/sort-dsc.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/win/tree/sort-dsc.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/menu/menu-radio-dis.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/menu/menu-radio.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/menu/menu-check-dis.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/menu/menu-check.gif
+
+# Lightning
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/linux/lightning/imip.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/windows/lightning/imip.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/linux/calendar/calendar-invitations-dialog.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/windows/calendar/calendar-invitations-dialog.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/linux/lightning/lightning-widgets.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/windows/lightning/lightning-widgets.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/linux/calendar/calendar-daypicker.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/windows/calendar/calendar-daypicker.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/linux/lightning/accountCentral.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/windows/lightning/accountCentral.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/linux/calendar/calendar-alarm-dialog.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/windows/calendar/calendar-alarm-dialog.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/linux/calendar/calendar-management.css
+extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/skin/windows/calendar/calendar-management.css
+
+# Linux
+chrome/comm/content/branding/icon16.png
+chrome/comm/content/branding/icon32.png
+chrome/comm/content/branding/icon48.png
+chrome/comm/content/branding/icon64.png
+chrome/comm/content/branding/icon128.png
+chrome/icons/default/default16.png
+chrome/icons/default/default32.png
+chrome/icons/default/default48.png
+chrome/icons/default/default64.png
+chrome/icons/default/default128.png
+@MOZ_APP_NAME@
+@MOZ_APP_NAME@-bin
+
+# OSX
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/communicator/sidebar/sbpicker-arrow.gif
+chrome/toolkit/skin/classic/global/arrow/arrow-dn-sharp.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/arrow/arrow-lft-sharp.gif
+chrome/toolkit/skin/classic/global/arrow/arrow-lft-sharp.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/arrow/arrow-rit-sharp.gif
+chrome/toolkit/skin/classic/global/arrow/arrow-rit-sharp.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/arrow/arrow-lft-sharp-end.gif
+chrome/toolkit/skin/classic/global/arrow/arrow-lft-sharp-end.gif
+extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/global/arrow/arrow-rit-sharp-end.gif
+chrome/toolkit/skin/classic/global/arrow/arrow-rit-sharp-end.gif
+plugin-container.app/Contents/Resources/English.lproj/InfoPlist.strings
+en.lproj/InfoPlist.strings
+chrome/toolkit/skin/classic/mozapps/extensions/category-plugins.png
+chrome/toolkit/skin/classic/mozapps/extensions/category-discover.png
+chrome/toolkit/skin/classic/mozapps/extensions/category-recent.png
+chrome/toolkit/skin/classic/mozapps/extensions/category-available.png
+chrome/toolkit/skin/classic/mozapps/extensions/themeGeneric.png
+chrome/toolkit/skin/classic/mozapps/extensions/localeGeneric.png
diff --git a/comm/suite/installer/license.txt b/comm/suite/installer/license.txt
new file mode 100644
index 0000000000..14e2f777f6
--- /dev/null
+++ b/comm/suite/installer/license.txt
@@ -0,0 +1,373 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+ means each individual or legal entity that creates, contributes to
+ the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+ means the combination of the Contributions of others (if any) used
+ by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+ means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+ means Source Code Form to which the initial Contributor has attached
+ the notice in Exhibit A, the Executable Form of such Source Code
+ Form, and Modifications of such Source Code Form, in each case
+ including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+ means
+
+ (a) that the initial Contributor has attached the notice described
+ in Exhibit B to the Covered Software; or
+
+ (b) that the Covered Software was made available under the terms of
+ version 1.1 or earlier of the License, but not also under the
+ terms of a Secondary License.
+
+1.6. "Executable Form"
+ means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+ means a work that combines Covered Software with other material, in
+ a separate file or files, that is not Covered Software.
+
+1.8. "License"
+ means this document.
+
+1.9. "Licensable"
+ means having the right to grant, to the maximum extent possible,
+ whether at the time of the initial grant or subsequently, any and
+ all of the rights conveyed by this License.
+
+1.10. "Modifications"
+ means any of the following:
+
+ (a) any file in Source Code Form that results from an addition to,
+ deletion from, or modification of the contents of Covered
+ Software; or
+
+ (b) any new file in Source Code Form that contains any Covered
+ Software.
+
+1.11. "Patent Claims" of a Contributor
+ means any patent claim(s), including without limitation, method,
+ process, and apparatus claims, in any patent Licensable by such
+ Contributor that would be infringed, but for the grant of the
+ License, by the making, using, selling, offering for sale, having
+ made, import, or transfer of either its Contributions or its
+ Contributor Version.
+
+1.12. "Secondary License"
+ means either the GNU General Public License, Version 2.0, the GNU
+ Lesser General Public License, Version 2.1, the GNU Affero General
+ Public License, Version 3.0, or any later versions of those
+ licenses.
+
+1.13. "Source Code Form"
+ means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, "You" includes any entity that
+ controls, is controlled by, or is under common control with You. For
+ purposes of this definition, "control" means (a) the power, direct
+ or indirect, to cause the direction or management of such entity,
+ whether by contract or otherwise, or (b) ownership of more than
+ fifty percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or
+ as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+ for sale, have made, import, and otherwise transfer either its
+ Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+ or
+
+(b) for infringements caused by: (i) Your and any other third party's
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+ its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+ Form, as described in Section 3.1, and You must inform recipients of
+ the Executable Form how they can obtain a copy of such Source Code
+ Form by reasonable means in a timely manner, at a charge no more
+ than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+ License, or sublicense it under different terms, provided that the
+ license for the Executable Form does not attempt to limit or alter
+ the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+* *
+* 6. Disclaimer of Warranty *
+* ------------------------- *
+* *
+* Covered Software is provided under this License on an "as is" *
+* basis, without warranty of any kind, either expressed, implied, or *
+* statutory, including, without limitation, warranties that the *
+* Covered Software is free of defects, merchantable, fit for a *
+* particular purpose or non-infringing. The entire risk as to the *
+* quality and performance of the Covered Software is with You. *
+* Should any Covered Software prove defective in any respect, You *
+* (not any Contributor) assume the cost of any necessary servicing, *
+* repair, or correction. This disclaimer of warranty constitutes an *
+* essential part of this License. No use of any Covered Software is *
+* authorized under this License except under this disclaimer. *
+* *
+************************************************************************
+
+************************************************************************
+* *
+* 7. Limitation of Liability *
+* -------------------------- *
+* *
+* Under no circumstances and under no legal theory, whether tort *
+* (including negligence), contract, or otherwise, shall any *
+* Contributor, or anyone who distributes Covered Software as *
+* permitted above, be liable to You for any direct, indirect, *
+* special, incidental, or consequential damages of any character *
+* including, without limitation, damages for lost profits, loss of *
+* goodwill, work stoppage, computer failure or malfunction, or any *
+* and all other commercial damages or losses, even if such party *
+* shall have been informed of the possibility of such damages. This *
+* limitation of liability shall not apply to liability for death or *
+* personal injury resulting from such party's negligence to the *
+* extent applicable law prohibits such limitation. Some *
+* jurisdictions do not allow the exclusion or limitation of *
+* incidental or consequential damages, so this exclusion and *
+* limitation may not apply to You. *
+* *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+ This Source Code Form is "Incompatible With Secondary Licenses", as
+ defined by the Mozilla Public License, v. 2.0.
diff --git a/comm/suite/installer/moz.build b/comm/suite/installer/moz.build
new file mode 100644
index 0000000000..89251dc396
--- /dev/null
+++ b/comm/suite/installer/moz.build
@@ -0,0 +1,4 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
diff --git a/comm/suite/installer/package-manifest.in b/comm/suite/installer/package-manifest.in
new file mode 100644
index 0000000000..c77bde7eb4
--- /dev/null
+++ b/comm/suite/installer/package-manifest.in
@@ -0,0 +1,515 @@
+; Package file for the SeaMonkey build.
+;
+; Packaging manifest is used to copy files from dist/bin
+; to the staging directory.
+; Some other files are built in the staging directory directly,
+; so they will be implicitly packaged too.
+;
+; File format:
+;
+; [] designates a toplevel component. Example: [xpcom]
+; - in front of a file specifies it to be removed from the destination
+; * wildcard support to recursively copy the entire directory
+; ; file comment
+;
+
+; Due to Apple macOS packaging requirements, files that are in the same
+; directory on other platforms must be located in different directories on
+; macOS. The following defines allow specifying the macOS bundle
+; location which also work on other platforms.
+;
+; @BINPATH@
+; Equals Contents/MacOS/ on macOS and is the path to the main binary on other
+; platforms.
+;
+; @RESPATH@
+; Equals Contents/Resources/ on macOS and is equivalent to @BINPATH@ on other
+; platforms.
+
+#filter substitution
+
+#ifdef XP_UNIX
+#ifndef XP_MACOSX
+#define UNIX_BUT_NOT_MAC
+#endif
+#endif
+
+#ifdef XP_MACOSX
+; Mac bundle stuff
+@APPNAME@/Contents/Info.plist
+@APPNAME@/Contents/PkgInfo
+@RESPATH@/seamonkey.icns
+@RESPATH@/@LPROJ_ROOT@.lproj/*
+#endif
+
+[@AB_CD@]
+@RESPATH@/defaults/messenger/mailViews.dat
+@RESPATH@/defaults/profile/bookmarks.html
+@RESPATH@/defaults/profile/chrome/*
+@RESPATH@/defaults/profile/mimeTypes.rdf
+@RESPATH@/defaults/profile/panels.rdf
+@RESPATH@/dictionaries/*
+@RESPATH@/hyphenation/*
+#ifdef MOZ_BUNDLED_FONTS
+@RESPATH@/fonts/*
+#endif
+@RESPATH@/@PREF_DIR@/suite-l10n.js
+#ifdef HAVE_MAKENSISU
+@BINPATH@/uninstall/helper.exe
+#endif
+#ifdef MOZ_UPDATER
+@RESPATH@/update.locale
+@RESPATH@/updater.ini
+#endif
+
+#ifdef PKG_LOCALE_MANIFEST
+#include @PKG_LOCALE_MANIFEST@
+#endif
+
+[xpcom]
+@RESPATH@/dependentlibs.list
+#ifdef MOZ_SHARED_MOZGLUE
+@BINPATH@/@DLL_PREFIX@mozglue@DLL_SUFFIX@
+#endif
+#ifndef MOZ_STATIC_JS
+@BINPATH@/@DLL_PREFIX@mozjs@DLL_SUFFIX@
+#endif
+#ifndef MOZ_SYSTEM_NSPR
+#ifndef MOZ_FOLD_LIBS
+@BINPATH@/@DLL_PREFIX@nspr4@DLL_SUFFIX@
+@BINPATH@/@DLL_PREFIX@plc4@DLL_SUFFIX@
+@BINPATH@/@DLL_PREFIX@plds4@DLL_SUFFIX@
+#endif
+#endif
+#ifdef XP_MACOSX
+@BINPATH@/XUL
+#else
+@BINPATH@/@DLL_PREFIX@xul@DLL_SUFFIX@
+#endif
+#ifdef XP_MACOSX
+@BINPATH@/@MOZ_CHILD_PROCESS_NAME@.app/
+#else
+@BINPATH@/@MOZ_CHILD_PROCESS_NAME@
+#endif
+; ANGLE GLES-on-D3D rendering library
+#ifdef MOZ_ANGLE_RENDERER
+@BINPATH@/libEGL.dll
+@BINPATH@/libGLESv2.dll
+#ifdef MOZ_D3DCOMPILER_VISTA_DLL
+@BINPATH@/@MOZ_D3DCOMPILER_VISTA_DLL@
+#endif
+#endif # MOZ_ANGLE_RENDERER
+
+#if defined(XP_WIN) && defined(MOZ_ENABLE_SKIA_PDF)
+@BINPATH@/pdfium.dll
+#endif
+
+#ifdef XP_WIN
+#if MOZ_PACKAGE_MSVC_DLLS
+@BINPATH@/@MSVC_C_RUNTIME_DLL@
+@BINPATH@/@MSVC_CXX_RUNTIME_DLL@
+@BINPATH@/api-ms-win-*.dll
+@BINPATH@/ucrtbase.dll
+#endif
+#endif
+
+[browser]
+; [Base Browser Files]
+#ifdef XP_WIN
+@BINPATH@/@MOZ_APP_NAME@.exe
+#else
+@BINPATH@/@MOZ_APP_NAME@-bin
+@BINPATH@/@MOZ_APP_NAME@
+#endif
+@RESPATH@/application.ini
+@RESPATH@/platform.ini
+#ifdef MOZ_UPDATER
+@RESPATH@/update-settings.ini
+#endif
+#ifndef MOZ_FOLD_LIBS
+@BINPATH@/@DLL_PREFIX@mozsqlite3@DLL_SUFFIX@
+#endif
+@BINPATH@/@DLL_PREFIX@lgpllibs@DLL_SUFFIX@
+#ifdef MOZ_FFVPX
+@BINPATH@/@DLL_PREFIX@mozavutil@DLL_SUFFIX@
+@BINPATH@/@DLL_PREFIX@mozavcodec@DLL_SUFFIX@
+#endif
+#ifdef MOZ_GTK
+@BINPATH@/@DLL_PREFIX@mozgtk@DLL_SUFFIX@
+#ifdef MOZ_WAYLAND
+@BINPATH@/@DLL_PREFIX@mozwayland@DLL_SUFFIX@
+#endif
+#endif
+@RESPATH@/license.txt
+@RESPATH@/blocklist.xml
+#ifdef XP_WIN
+#ifdef _AMD64_
+@BINPATH@/@DLL_PREFIX@qipcap64@DLL_SUFFIX@
+#else
+@BINPATH@/@DLL_PREFIX@qipcap@DLL_SUFFIX@
+#endif
+#endif
+
+; [Components]
+#ifdef ACCESSIBILITY
+#ifdef XP_WIN
+@BINPATH@/Accessible.tlb
+@BINPATH@/AccessibleHandler.dll
+@BINPATH@/AccessibleMarshal.dll
+@BINPATH@/IA2Marshal.dll
+#endif
+#endif
+@RESPATH@/components/extensions.manifest
+@RESPATH@/components/SuiteBrowser.manifest
+@RESPATH@/components/SuiteComponents.manifest
+@RESPATH@/components/SuiteFeeds.manifest
+@RESPATH@/components/SuiteSidebar.manifest
+; JavaScript components
+@RESPATH@/components/cryptoComponents.manifest
+@RESPATH@/components/FeedConverter.js
+@RESPATH@/components/FeedWriter.js
+@RESPATH@/components/jsconsole-clhandler.js
+@RESPATH@/components/jsconsole-clhandler.manifest
+@RESPATH@/components/nsAbout.js
+@RESPATH@/components/nsBrowserContentHandler.js
+@RESPATH@/components/nsComposerCmdLineHandler.js
+@RESPATH@/components/nsComposerCmdLineHandler.manifest
+@RESPATH@/components/nsGopherProtocolStubHandler.js
+@RESPATH@/components/nsPlacesAutoComplete.js
+@RESPATH@/components/nsPlacesAutoComplete.manifest
+@RESPATH@/components/nsSessionStartup.js
+@RESPATH@/components/nsSessionStartup.manifest
+@RESPATH@/components/nsSessionStore.js
+@RESPATH@/components/nsSidebar.js
+@RESPATH@/components/nsSuiteGlue.js
+@RESPATH@/components/nsSetDefault.js
+@RESPATH@/components/nsSetDefault.manifest
+@RESPATH@/components/nsTypeAheadFind.js
+#ifdef MOZ_UPDATER
+@RESPATH@/components/nsUpdateService.manifest
+#endif
+@RESPATH@/components/ProcessSingleton.manifest
+@RESPATH@/components/Push.manifest
+@RESPATH@/components/servicesComponents.manifest
+@RESPATH@/components/servicesSettings.manifest
+@RESPATH@/components/SuiteProfileMigrator.js
+@RESPATH@/components/SuiteProfileMigrator.manifest
+#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG)
+@RESPATH@/components/TestInterfaceJS.js
+@RESPATH@/components/TestInterfaceJS.manifest
+@RESPATH@/components/TestInterfaceJSMaplike.js
+#endif
+@RESPATH@/components/WebContentConverter.js
+
+; Modules
+@RESPATH@/modules/*
+
+; [Extensions]
+@RESPATH@/components/extensions-toolkit.manifest
+
+; [Browser Chrome Files]
+; Browser: Hack to get built_in_addons.json packaged
+@RESPATH@/chrome/browser@JAREXT@
+@RESPATH@/chrome/browser.manifest
+@RESPATH@/chrome/comm@JAREXT@
+@RESPATH@/chrome/comm.manifest
+@RESPATH@/chrome/toolkit@JAREXT@
+@RESPATH@/chrome/toolkit.manifest
+
+; [DevTools Startup Files]
+@RESPATH@/chrome/devtools-startup@JAREXT@
+@RESPATH@/chrome/devtools-startup.manifest
+
+; DevTools
+@RESPATH@/chrome/devtools@JAREXT@
+@RESPATH@/chrome/devtools.manifest
+@RESPATH@/@PREF_DIR@/debugger.js
+
+; classic theme
+@RESPATH@/chrome/classic@JAREXT@
+@RESPATH@/chrome/classic.manifest
+@RESPATH@/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi
+
+; modern theme
+@RESPATH@/extensions/modern@themes.mozilla.org.xpi
+
+; shell icons
+#ifdef MOZ_GTK
+@RESPATH@/chrome/icons/default/bookmarkproperties.png
+@RESPATH@/chrome/icons/default/bookmarkproperties16.png
+@RESPATH@/chrome/icons/default/bookmarkproperties48.png
+@RESPATH@/chrome/icons/default/chatzilla-window.png
+@RESPATH@/chrome/icons/default/chatzilla-window16.png
+@RESPATH@/chrome/icons/default/chatzilla-window48.png
+@RESPATH@/chrome/icons/default/default16.png
+@RESPATH@/chrome/icons/default/default22.png
+@RESPATH@/chrome/icons/default/default24.png
+@RESPATH@/chrome/icons/default/default32.png
+@RESPATH@/chrome/icons/default/default48.png
+@RESPATH@/chrome/icons/default/default64.png
+@RESPATH@/chrome/icons/default/default128.png
+@RESPATH@/chrome/icons/default/default256.png
+@RESPATH@/chrome/icons/default/downloadManager.png
+@RESPATH@/chrome/icons/default/downloadManager16.png
+@RESPATH@/chrome/icons/default/downloadManager48.png
+@RESPATH@/chrome/icons/default/editorWindow.png
+@RESPATH@/chrome/icons/default/editorWindow16.png
+@RESPATH@/chrome/icons/default/editorWindow48.png
+@RESPATH@/chrome/icons/default/findBookmarkWindow.png
+@RESPATH@/chrome/icons/default/findBookmarkWindow16.png
+@RESPATH@/chrome/icons/default/findBookmarkWindow48.png
+@RESPATH@/chrome/icons/default/findHistoryWindow.png
+@RESPATH@/chrome/icons/default/findHistoryWindow16.png
+@RESPATH@/chrome/icons/default/findHistoryWindow48.png
+@RESPATH@/chrome/icons/default/history-window.png
+@RESPATH@/chrome/icons/default/history-window16.png
+@RESPATH@/chrome/icons/default/history-window48.png
+@RESPATH@/chrome/icons/default/JSConsoleWindow.png
+@RESPATH@/chrome/icons/default/JSConsoleWindow16.png
+@RESPATH@/chrome/icons/default/JSConsoleWindow48.png
+@RESPATH@/chrome/icons/default/places.png
+@RESPATH@/chrome/icons/default/places16.png
+@RESPATH@/chrome/icons/default/places48.png
+#ifdef MOZ_UPDATER
+@RESPATH@/icons/updater.png
+#endif
+#elifdef XP_WIN
+@RESPATH@/chrome/icons/default/bookmarkproperties.ico
+@RESPATH@/chrome/icons/default/chatzilla-window.ico
+@RESPATH@/chrome/icons/default/downloadManager.ico
+@RESPATH@/chrome/icons/default/editorWindow.ico
+@RESPATH@/chrome/icons/default/findBookmarkWindow.ico
+@RESPATH@/chrome/icons/default/findHistoryWindow.ico
+@RESPATH@/chrome/icons/default/gif-file.ico
+@RESPATH@/chrome/icons/default/history-window.ico
+@RESPATH@/chrome/icons/default/html-file.ico
+@RESPATH@/chrome/icons/default/image-file.ico
+@RESPATH@/chrome/icons/default/jpeg-file.ico
+@RESPATH@/chrome/icons/default/JSConsoleWindow.ico
+@RESPATH@/chrome/icons/default/main-window.ico
+@RESPATH@/chrome/icons/default/places.ico
+@RESPATH@/chrome/icons/default/script-file.ico
+@RESPATH@/chrome/icons/default/xml-file.ico
+@RESPATH@/chrome/icons/default/xul-file.ico
+#endif
+
+; [Default Preferences]
+; All the browser/general pref files must be part of base to prevent migration bugs
+@RESPATH@/@PREF_DIR@/suite-prefs.js
+@RESPATH@/@PREF_DIR@/composer.js
+@RESPATH@/greprefs.js
+@RESPATH@/defaults/autoconfig/prefcalls.js
+@RESPATH@/defaults/permissions
+@RESPATH@/defaults/settings/blocklists
+@RESPATH@/defaults/settings/main
+; Warning: changing the path to channel-prefs.js can cause bugs. (Bug 756325)
+@RESPATH@/defaults/pref/channel-prefs.js
+
+; [Layout Engine Resources]
+; Layout debug extension.
+#ifdef ENABLE_TESTS
+#ifdef MOZ_DEBUG
+@RESPATH@/chrome/layoutdebug@JAREXT@
+@RESPATH@/chrome/layoutdebug.manifest
+#endif
+#endif
+; Style Sheets, Graphics and other Resources used by the layout engine.
+@RESPATH@/res/contenteditable.css
+@RESPATH@/res/designmode.css
+@RESPATH@/res/EditorOverride.css
+@RESPATH@/res/grabber.gif
+@RESPATH@/res/language.properties
+@RESPATH@/res/svg.css
+@RESPATH@/res/table-add-column-after-active.gif
+@RESPATH@/res/table-add-column-after-hover.gif
+@RESPATH@/res/table-add-column-after.gif
+@RESPATH@/res/table-add-column-before-active.gif
+@RESPATH@/res/table-add-column-before-hover.gif
+@RESPATH@/res/table-add-column-before.gif
+@RESPATH@/res/table-add-row-after-active.gif
+@RESPATH@/res/table-add-row-after-hover.gif
+@RESPATH@/res/table-add-row-after.gif
+@RESPATH@/res/table-add-row-before-active.gif
+@RESPATH@/res/table-add-row-before-hover.gif
+@RESPATH@/res/table-add-row-before.gif
+@RESPATH@/res/table-remove-column-active.gif
+@RESPATH@/res/table-remove-column-hover.gif
+@RESPATH@/res/table-remove-column.gif
+@RESPATH@/res/table-remove-row-active.gif
+@RESPATH@/res/table-remove-row-hover.gif
+@RESPATH@/res/table-remove-row.gif
+#ifdef XP_MACOSX
+@RESPATH@/res/cursors/*
+#endif
+@RESPATH@/res/fonts/*
+@RESPATH@/res/dtd/*
+#ifdef XP_MACOSX
+@RESPATH@/res/MainMenu.nib/
+#endif
+
+; Content-accessible resources.
+@RESPATH@/contentaccessible/*
+
+; [Personal Security Manager]
+;
+; NSS libraries are signed in the staging directory,
+; meaning their .chk files are created there directly.
+;
+#ifndef MOZ_SYSTEM_NSS
+#if defined(XP_LINUX) && !defined(ANDROID)
+@BINPATH@/@DLL_PREFIX@freeblpriv3@DLL_SUFFIX@
+#else
+@BINPATH@/@DLL_PREFIX@freebl3@DLL_SUFFIX@
+#endif
+@BINPATH@/@DLL_PREFIX@nss3@DLL_SUFFIX@
+@BINPATH@/@DLL_PREFIX@nssckbi@DLL_SUFFIX@
+#ifndef MOZ_FOLD_LIBS
+@BINPATH@/@DLL_PREFIX@nssutil3@DLL_SUFFIX@
+@BINPATH@/@DLL_PREFIX@smime3@DLL_SUFFIX@
+@BINPATH@/@DLL_PREFIX@ssl3@DLL_SUFFIX@
+#endif
+@BINPATH@/@DLL_PREFIX@softokn3@DLL_SUFFIX@
+#endif
+@RESPATH@/chrome/pippki@JAREXT@
+@RESPATH@/chrome/pippki.manifest
+
+; For process sandboxing
+#if defined(MOZ_SANDBOX)
+#if defined(XP_LINUX)
+@BINPATH@/@DLL_PREFIX@mozsandbox@DLL_SUFFIX@
+#endif
+#endif
+
+; for Solaris SPARC
+#ifdef SOLARIS
+bin/libfreebl_32fpu_3.so
+bin/libfreebl_32int_3.so
+bin/libfreebl_32int64_3.so
+#endif
+
+; [MAN pages]
+#ifdef UNIX_BUT_NOT_MAC
+man/*
+#endif
+
+; [Updater]
+;
+#ifdef MOZ_UPDATER
+#ifdef XP_MACOSX
+@BINPATH@/updater.app/
+#else
+@BINPATH@/updater@BIN_SUFFIX@
+#endif
+#endif
+
+; [Crash Reporter]
+;
+#ifdef MOZ_CRASHREPORTER
+#ifdef XP_MACOSX
+@BINPATH@/crashreporter.app/
+#else
+@BINPATH@/crashreporter@BIN_SUFFIX@
+@BINPATH@/minidump-analyzer@BIN_SUFFIX@
+@RESPATH@/crashreporter.ini
+#ifdef XP_UNIX
+@RESPATH@/Throbber-small.gif
+#endif
+#endif
+@RESPATH@/crashreporter-override.ini
+#ifdef MOZ_CRASHREPORTER_INJECTOR
+@BINPATH@/breakpadinjector.dll
+#endif
+#endif
+
+; [ Ping Sender ]
+;
+@BINPATH@/pingsender@BIN_SUFFIX@
+
+[mail]
+; MailNews components
+
+; MailNews JS components
+@RESPATH@/components/msgMime.manifest
+
+; MailNews chrome
+@RESPATH@/chrome/messenger@JAREXT@
+@RESPATH@/chrome/messenger.manifest
+@RESPATH@/chrome/newsblog@JAREXT@
+@RESPATH@/chrome/newsblog.manifest
+#ifdef MOZ_GTK
+@RESPATH@/chrome/icons/default/abcardWindow.png
+@RESPATH@/chrome/icons/default/abcardWindow16.png
+@RESPATH@/chrome/icons/default/abcardWindow48.png
+@RESPATH@/chrome/icons/default/ablistWindow.png
+@RESPATH@/chrome/icons/default/ablistWindow16.png
+@RESPATH@/chrome/icons/default/ablistWindow48.png
+@RESPATH@/chrome/icons/default/addressbookWindow.png
+@RESPATH@/chrome/icons/default/addressbookWindow16.png
+@RESPATH@/chrome/icons/default/addressbookWindow48.png
+@RESPATH@/chrome/icons/default/messengerWindow.png
+@RESPATH@/chrome/icons/default/messengerWindow16.png
+@RESPATH@/chrome/icons/default/messengerWindow48.png
+@RESPATH@/chrome/icons/default/msgcomposeWindow.png
+@RESPATH@/chrome/icons/default/msgcomposeWindow16.png
+@RESPATH@/chrome/icons/default/msgcomposeWindow48.png
+#elifdef XP_WIN
+@RESPATH@/chrome/icons/default/abcardWindow.ico
+@RESPATH@/chrome/icons/default/ablistWindow.ico
+@RESPATH@/chrome/icons/default/addressbookWindow.ico
+@RESPATH@/chrome/icons/default/messengerWindow.ico
+@RESPATH@/chrome/icons/default/msgcomposeWindow.ico
+@RESPATH@/chrome/icons/default/calendar-alarm-dialog.ico
+@RESPATH@/chrome/icons/default/calendar-event-dialog.ico
+@RESPATH@/chrome/icons/default/calendar-event-summary-dialog.ico
+@RESPATH@/chrome/icons/default/calendar-task-dialog.ico
+@RESPATH@/chrome/icons/default/calendar-task-summary-dialog.ico
+#endif
+
+; [MailNews Default Preferences]
+@RESPATH@/@PREF_DIR@/mailnews.js
+@RESPATH@/@PREF_DIR@/mdn.js
+; @RESPATH@/@PREF_DIR@/e2e-prefs.js
+
+#ifdef MOZ_MAPI_SUPPORT
+@BINPATH@/MapiProxy.dll
+@BINPATH@/mozMapi32.dll
+#endif
+
+@RESPATH@/isp/*
+
+; Gloda
+@RESPATH@/chrome/gloda@JAREXT@
+@RESPATH@/chrome/gloda.manifest
+
+; Address Sanitizer
+#ifdef LLVM_SYMBOLIZER
+@BINPATH@/@LLVM_SYMBOLIZER@
+#endif
+
+#ifdef MOZ_CLANG_RT_ASAN_LIB
+@BINPATH@/@MOZ_CLANG_RT_ASAN_LIB@
+#endif
+
+[chatzilla]
+#ifdef MOZ_IRC
+@RESPATH@/chrome/chatzilla@JAREXT@
+@RESPATH@/chrome/chatzilla.manifest
+@RESPATH@/components/chatzilla-service.js
+@RESPATH@/components/chatzilla-service.manifest
+#endif
+
+[debugqa]
+#ifdef MOZ_PACKAGE_DEBUGQA
+@RESPATH@/extensions/debugQA@mozilla.org.xpi
+#endif
+
+[calendar]
+@RESPATH@/chrome/calendar@JAREXT@
+@RESPATH@/chrome/calendar.manifest
+
+@RESPATH@/@PREF_DIR@/calendar.js
+
+# Files added to components directory via `FINAL_TARGET_FILES.components`.
+@RESPATH@/components/calCachedCalendar.js
+@RESPATH@/components/calICSService-worker.js
+@RESPATH@/components/calItemBase.js
diff --git a/comm/suite/installer/removed-files.in b/comm/suite/installer/removed-files.in
new file mode 100644
index 0000000000..b705de305e
--- /dev/null
+++ b/comm/suite/installer/removed-files.in
@@ -0,0 +1,290 @@
+# Due to Apple macOS packaging requirements files that are in the same
+# directory on other platforms must be located in different directories on
+# macOS. The following defines allow specifying the macOS bundle
+# location which also work on other platforms.
+#
+# @DIR_MACOS@
+# Equals Contents/MacOS/ on Mac OX X and is an empty string on other platforms.
+#
+# @DIR_RESOURCES@
+# Equals Contents/Resources/ on Mac OX X and is an empty string on other
+# platforms.
+
+#ifdef XP_UNIX
+#ifndef XP_MACOSX
+#define UNIX_BUT_NOT_MAC
+#endif
+#endif
+@DIR_MACOS@.autoreg
+@DIR_MACOS@chrome/icons/default/abcardWindow.xpm
+@DIR_MACOS@chrome/icons/default/abcardWindow16.xpm
+@DIR_MACOS@chrome/icons/default/ablistWindow.xpm
+@DIR_MACOS@chrome/icons/default/addressbookWindow.xpm
+@DIR_MACOS@chrome/icons/default/addressbookWindow16.xpm
+@DIR_MACOS@chrome/icons/default/bmPropsWindow.ico
+@DIR_MACOS@chrome/icons/default/bmPropsWindow.png
+@DIR_MACOS@chrome/icons/default/bmPropsWindow16.png
+@DIR_MACOS@chrome/icons/default/bmPropsWindow48.png
+@DIR_MACOS@chrome/icons/default/bmPropsWindow.xpm
+@DIR_MACOS@chrome/icons/default/bmPropsWindow16.xpm
+@DIR_MACOS@chrome/icons/default/bookmark-window.ico
+@DIR_MACOS@chrome/icons/default/bookmark-window.png
+@DIR_MACOS@chrome/icons/default/bookmark-window16.png
+@DIR_MACOS@chrome/icons/default/bookmark-window48.png
+@DIR_MACOS@chrome/icons/default/bookmark-window.xpm
+@DIR_MACOS@chrome/icons/default/bookmark-window16.xpm
+@DIR_MACOS@chrome/icons/default/calendar-window.xpm
+@DIR_MACOS@chrome/icons/default/calendar-window16.xpm
+@DIR_MACOS@chrome/icons/default/chatzilla-window.xpm
+@DIR_MACOS@chrome/icons/default/chatzilla-window16.xpm
+@DIR_MACOS@chrome/icons/default/default.xpm
+@DIR_MACOS@chrome/icons/default/default16.xpm
+@DIR_MACOS@chrome/icons/default/downloadManager.xpm
+@DIR_MACOS@chrome/icons/default/downloadManager16.xpm
+@DIR_MACOS@chrome/icons/default/editorWindow.xpm
+@DIR_MACOS@chrome/icons/default/editorWindow16.xpm
+@DIR_MACOS@chrome/icons/default/findBookmarkWindow.xpm
+@DIR_MACOS@chrome/icons/default/findBookmarkWindow16.xpm
+@DIR_MACOS@chrome/icons/default/findHistoryWindow.xpm
+@DIR_MACOS@chrome/icons/default/findHistoryWindow16.xpm
+@DIR_MACOS@chrome/icons/default/history-window.xpm
+@DIR_MACOS@chrome/icons/default/history-window16.xpm
+@DIR_MACOS@chrome/icons/default/JSConsoleWindow.xpm
+@DIR_MACOS@chrome/icons/default/jsconsoleWindow.xpm
+@DIR_MACOS@chrome/icons/default/jsconsoleWindow16.xpm
+@DIR_MACOS@chrome/icons/default/main-window.xpm
+@DIR_MACOS@chrome/icons/default/main-window16.xpm
+@DIR_MACOS@chrome/icons/default/messengerWindow.xpm
+@DIR_MACOS@chrome/icons/default/messengerWindow16.xpm
+@DIR_MACOS@chrome/icons/default/msgcomposeWindow.xpm
+@DIR_MACOS@chrome/icons/default/msgcomposeWindow16.xpm
+@DIR_MACOS@chrome/icons/default/venkman-window.xpm
+@DIR_MACOS@chrome/icons/default/venkman-window16.xpm
+#ifndef MOZ_CRASHREPORTER
+#ifdef XP_MACOSX
+@DIR_MACOS@crashreporter.app/
+#else
+@DIR_MACOS@crashreporter@BIN_SUFFIX@
+@DIR_MACOS@crashreporter.ini
+#endif
+#endif
+@DIR_MACOS@defaults/profile/localstore.rdf
+@DIR_MACOS@defaults/profile/search.rdf
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/components/components.list
+@DIR_MACOS@extensions/inspector@mozilla.org/components/components.list
+
+# Remove unpacked lightning extension.
+# Depending on the previous installed version it might reside in one of two
+# different places.
+@DIR_RESOURCES@extensions/
+@DIR_RESOURCES@extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/*
+@DIR_RESOURCES@distribution/
+@DIR_RESOURCES@distribution/extensions/
+@DIR_RESOURCES@distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/*
+
+# Remove old extensions in distribution.
+@DIR_RESOURCES@distribution/extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}.xpi
+@DIR_RESOURCES@distribution/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}.xpi
+@DIR_RESOURCES@distribution/extensions/debugQA@mozilla.org.xpi
+@DIR_RESOURCES@distribution/extensions/inspector@mozilla.org.xpi
+
+@DIR_MACOS@hyphenation/
+@DIR_MACOS@hyphenation/hyph_af.dic
+@DIR_MACOS@hyphenation/hyph_bg.dic
+@DIR_MACOS@hyphenation/hyph_ca.dic
+@DIR_MACOS@hyphenation/hyph_cy.dic
+@DIR_MACOS@hyphenation/hyph_da.dic
+@DIR_MACOS@hyphenation/hyph_de-1901.dic
+@DIR_MACOS@hyphenation/hyph_de-1996.dic
+@DIR_MACOS@hyphenation/hyph_de-CH.dic
+@DIR_MACOS@hyphenation/hyph_en_US.dic
+@DIR_MACOS@hyphenation/hyph_eo.dic
+@DIR_MACOS@hyphenation/hyph_es.dic
+@DIR_MACOS@hyphenation/hyph_et.dic
+@DIR_MACOS@hyphenation/hyph_fi.dic
+@DIR_MACOS@hyphenation/hyph_fr.dic
+@DIR_MACOS@hyphenation/hyph_gl.dic
+@DIR_MACOS@hyphenation/hyph_hr.dic
+@DIR_MACOS@hyphenation/hyph_hsb.dic
+@DIR_MACOS@hyphenation/hyph_hu.dic
+@DIR_MACOS@hyphenation/hyph_ia.dic
+@DIR_MACOS@hyphenation/hyph_is.dic
+@DIR_MACOS@hyphenation/hyph_it.dic
+@DIR_MACOS@hyphenation/hyph_kmr.dic
+@DIR_MACOS@hyphenation/hyph_la.dic
+@DIR_MACOS@hyphenation/hyph_lt.dic
+@DIR_MACOS@hyphenation/hyph_mn.dic
+@DIR_MACOS@hyphenation/hyph_nb.dic
+@DIR_MACOS@hyphenation/hyph_nl.dic
+@DIR_MACOS@hyphenation/hyph_nn.dic
+@DIR_MACOS@hyphenation/hyph_pt.dic
+@DIR_MACOS@hyphenation/hyph_ru.dic
+@DIR_MACOS@hyphenation/hyph_sh.dic
+@DIR_MACOS@hyphenation/hyph_sl.dic
+@DIR_MACOS@hyphenation/hyph_sv.dic
+@DIR_MACOS@hyphenation/hyph_tr.dic
+@DIR_MACOS@hyphenation/hyph_uk.dic
+@DIR_MACOS@LICENSE
+#ifdef XP_MACOSX
+ @DIR_MACOS@run-mozilla.sh
+ @DIR_MACOS@updater.app/Contents/MacOS/updater.ini
+#endif
+@DIR_MACOS@res/arrow.gif
+@DIR_MACOS@res/arrowd.gif
+@DIR_MACOS@res/broken-image.gif
+@DIR_MACOS@res/broken-image.png
+@DIR_MACOS@res/loading-image.gif
+@DIR_MACOS@res/loading-image.png
+@DIR_MACOS@searchplugins/
+#ifndef MOZ_CRASHREPORTER
+#ifdef UNIX_BUT_NOT_MAC
+@DIR_MACOS@res/Throbber-small.gif
+#endif
+#endif
+#ifndef MOZ_UPDATER
+ @DIR_MACOS@update-settings.ini
+ #ifdef XP_MACOSX
+ @DIR_MACOS@updater.app/
+ #else
+ @DIR_MACOS@updater@BIN_SUFFIX@
+ #endif
+ @DIR_MACOS@updater.ini
+#endif
+@DIR_MACOS@update.locale
+
+@DIR_MACOS@defaults/profile/bookmarks.html
+@DIR_MACOS@defaults/pref/browser-prefs.js
+@DIR_MACOS@defaults/pref/composer.js
+@DIR_MACOS@defaults/pref/mailnews.js
+@DIR_MACOS@defaults/pref/mdn.js
+@DIR_MACOS@defaults/pref/services-aitc.js
+@DIR_MACOS@defaults/pref/services-notifications.js
+@DIR_MACOS@defaults/pref/smime.js
+@DIR_MACOS@defaults/autoconfig/
+@DIR_MACOS@defaults/autoconfig/platform.js
+@DIR_MACOS@defaults/autoconfig/prefcalls.js
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/chrome/
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/chrome/chatzilla.jar
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/chrome/icons/
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/chrome/icons/default/
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/chrome/icons/default/chatzilla-window.xpm
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/chrome/icons/default/chatzilla-window16.xpm
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/chrome/icons/default/chatzilla-window.ico
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/chrome.manifest
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/components/
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/components/chatzilla-service.js
+@DIR_MACOS@extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/install.rdf
+@DIR_MACOS@extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/
+@DIR_MACOS@extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/chrome.manifest
+@DIR_MACOS@extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/icon.png
+@DIR_MACOS@extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf
+@DIR_MACOS@extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/preview.png
+@DIR_MACOS@extensions/debugQA@mozilla.org/
+@DIR_MACOS@extensions/debugQA@mozilla.org/install.rdf
+@DIR_MACOS@extensions/debugQA@mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/debugQA@mozilla.org/chrome/
+@DIR_MACOS@extensions/debugQA@mozilla.org/chrome/debugqa.jar
+@DIR_MACOS@extensions/inspector@mozilla.org/
+@DIR_MACOS@extensions/inspector@mozilla.org/install.rdf
+@DIR_MACOS@extensions/inspector@mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/inspector@mozilla.org/chrome/
+@DIR_MACOS@extensions/inspector@mozilla.org/chrome/inspector.jar
+@DIR_MACOS@extensions/inspector@mozilla.org/platform/
+@DIR_MACOS@extensions/inspector@mozilla.org/platform/Linux/
+@DIR_MACOS@extensions/inspector@mozilla.org/platform/Linux/chrome/
+@DIR_MACOS@extensions/inspector@mozilla.org/platform/Linux/chrome/icons/
+@DIR_MACOS@extensions/inspector@mozilla.org/platform/Linux/chrome/icons/default/
+@DIR_MACOS@extensions/inspector@mozilla.org/platform/Linux/chrome/icons/default/winInspectorMain16.xpm
+@DIR_MACOS@extensions/inspector@mozilla.org/platform/Linux/chrome/icons/default/winInspectorMain.xpm
+@DIR_MACOS@extensions/inspector@mozilla.org/platform/WINNT/chrome/icons/default/winInspectorMain.ico
+@DIR_MACOS@extensions/inspector@mozilla.org/components/
+@DIR_MACOS@extensions/inspector@mozilla.org/components/inspector-cmdline.js
+@DIR_MACOS@extensions/inspector@mozilla.org/defaults/
+@DIR_MACOS@extensions/inspector@mozilla.org/defaults/preferences/
+@DIR_MACOS@extensions/inspector@mozilla.org/defaults/preferences/inspector.js
+@DIR_MACOS@extensions/langpack-ca@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-ca@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-ca@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-ca@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-ca@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-cs@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-cs@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-cs@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-cs@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-cs@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-de@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-de@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-de@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-de@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-de@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-es-ES@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-es-ES@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-es-ES@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-es-ES@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-es-ES@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-fi@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-fi@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-fi@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-fi@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-fi@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-fr@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-fr@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-fr@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-fr@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-fr@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-it@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-it@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-it@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-it@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-it@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-ja@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-ja@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-ja@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-ja@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-ja@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-ja-JP-mac@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-ja-JP-mac@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-ja-JP-mac@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-ja-JP-mac@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-ja-JP-mac@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-nb-NO@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-nb-NO@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-nb-NO@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-nb-NO@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-nb-NO@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-pl@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-pl@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-pl@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-pl@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-pl@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-pt-BR@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-pt-BR@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-pt-BR@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-pt-BR@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-pt-BR@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-pt-PT@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-pt-PT@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-pt-PT@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-pt-PT@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-pt-PT@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-ru@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-ru@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-ru@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-ru@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-ru@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-si@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-si@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-si@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-si@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-si@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-sk@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-sk@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-sk@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-sk@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-sk@chatzilla.mozilla.org/install.rdf
+@DIR_MACOS@extensions/langpack-sv-SE@chatzilla.mozilla.org/chrome/chatzilla.jar
+@DIR_MACOS@extensions/langpack-sv-SE@chatzilla.mozilla.org/chrome/chatzilla.manifest
+@DIR_MACOS@extensions/langpack-sv-SE@chatzilla.mozilla.org/chrome.manifest
+@DIR_MACOS@extensions/langpack-sv-SE@chatzilla.mozilla.org/install.js
+@DIR_MACOS@extensions/langpack-sv-SE@chatzilla.mozilla.org/install.rdf
diff --git a/comm/suite/installer/windows/Makefile.in b/comm/suite/installer/windows/Makefile.in
new file mode 100644
index 0000000000..7bdc367ef4
--- /dev/null
+++ b/comm/suite/installer/windows/Makefile.in
@@ -0,0 +1,55 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+include $(topsrcdir)/toolkit/mozapps/installer/package-name.mk
+
+CONFIG_DIR = instgen
+SFX_MODULE = $(topsrcdir)/comm/other-licenses/7zstub/seamonkey/7zSD.sfx
+
+EXPAND_COMM_LOCALE_SRCDIR = $(if $(filter en-US,$(AB_CD)),$(topsrcdir)/comm/$(1)/en-US,$(or $(realpath $(L10NBASEDIR)),$(abspath $(L10NBASEDIR)))/$(AB_CD)/$(subst /locales,,$(1)))
+
+INSTALLER_FILES = \
+ app.tag \
+ nsis/installer.nsi \
+ nsis/uninstaller.nsi \
+ nsis/shared.nsh \
+ nsis/custom.nsi \
+ $(NULL)
+
+BRANDING_FILES = \
+ branding.nsi \
+ wizHeader.bmp \
+ wizHeaderRTL.bmp \
+ wizWatermark.bmp \
+ $(NULL)
+
+include $(topsrcdir)/config/config.mk
+
+ifdef IS_LANGUAGE_REPACK
+PPL_LOCALE_ARGS = \
+ --l10n-dir=$(REAL_LOCALE_MERGEDIR)/suite/installer/windows \
+ --l10n-dir=$(call EXPAND_COMM_LOCALE_SRCDIR,suite/locales)/installer/windows \
+ --l10n-dir=$(topsrcdir)/comm/suite/locales/en-US/installer/windows \
+ $(NULL)
+else
+PPL_LOCALE_ARGS=$(call EXPAND_COMM_LOCALE_SRCDIR,suite/locales)/installer/windows
+endif
+
+$(CONFIG_DIR)/setup.exe::
+ $(RM) -r $(CONFIG_DIR)
+ $(MKDIR) $(CONFIG_DIR)
+ $(INSTALL) $(addprefix $(srcdir)/,$(INSTALLER_FILES)) $(CONFIG_DIR)
+ $(INSTALL) $(addprefix $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/,$(BRANDING_FILES)) $(CONFIG_DIR)
+ $(PYTHON3) $(topsrcdir)/toolkit/mozapps/installer/windows/nsis/preprocess-locale.py \
+ --convert-utf8-utf16le $(topsrcdir)/comm/suite/installer/license.txt $(CONFIG_DIR)/license.txt
+ $(call py_action,preprocessor,-Fsubstitution $(DEFINES) $(ACDEFINES) \
+ $(srcdir)/nsis/defines.nsi.in -o $(CONFIG_DIR)/defines.nsi)
+ $(PYTHON3) $(topsrcdir)/toolkit/mozapps/installer/windows/nsis/preprocess-locale.py \
+ --preprocess-locale $(topsrcdir) \
+ $(PPL_LOCALE_ARGS) $(AB_CD) $(CONFIG_DIR)
+
+GARBARGE_DIRS += instgen
+
+include $(topsrcdir)/config/rules.mk
+include $(topsrcdir)/toolkit/mozapps/installer/windows/nsis/makensis.mk
diff --git a/comm/suite/installer/windows/app.tag b/comm/suite/installer/windows/app.tag
new file mode 100644
index 0000000000..628717e1eb
--- /dev/null
+++ b/comm/suite/installer/windows/app.tag
@@ -0,0 +1,4 @@
+;!@Install@!UTF-8!
+Title="SeaMonkey"
+RunProgram="setup.exe"
+;!@InstallEnd@!
diff --git a/comm/suite/installer/windows/moz.build b/comm/suite/installer/windows/moz.build
new file mode 100644
index 0000000000..9a388e7c2a
--- /dev/null
+++ b/comm/suite/installer/windows/moz.build
@@ -0,0 +1,10 @@
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+DEFINES["APP_VERSION"] = CONFIG["SEAMONKEY_VERSION"]
+
+DEFINES["MOZ_APP_NAME"] = CONFIG["MOZ_APP_NAME"]
+DEFINES["MOZ_APP_DISPLAYNAME"] = CONFIG["MOZ_APP_DISPLAYNAME"]
+DEFINES["MOZILLA_VERSION"] = CONFIG["MOZILLA_VERSION"]
diff --git a/comm/suite/installer/windows/nsis/custom.nsi b/comm/suite/installer/windows/nsis/custom.nsi
new file mode 100644
index 0000000000..660f4259e4
--- /dev/null
+++ b/comm/suite/installer/windows/nsis/custom.nsi
@@ -0,0 +1,68 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+!macro checkSuiteComponents
+ ; If no extensions are available skip the components page
+ ${Unless} ${FileExists} "$EXEDIR\optional\extensions\debugQA@mozilla.org.xpi"
+ ${AndUnless} ${FileExists} "$EXEDIR\optional\extensions\{f13b157f-b174-47e7-a34d-4815ddfdfeb8}.xpi"
+ Abort
+ ${EndUnless}
+!macroend
+
+!macro createSuiteComponentsIni
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Type "label"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Text "$(OPTIONAL_COMPONENTS_LABEL)"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Left "0"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Right "-1"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Top "0"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Bottom "15"
+
+ StrCpy $R1 2
+ ; Top of checkbox
+ StrCpy $R2 15
+ ; Bottom of checkbox
+ StrCpy $R3 25
+ ; Seperation between titles/text
+ StrCpy $R4 25
+
+ ${If} ${FileExists} "$EXEDIR\optional\extensions\debugQA@mozilla.org.xpi"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Type "checkbox"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Text "$(DEBUGQA_TITLE)"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Left "15"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Right "-1"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Top "$R2"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Bottom "$R3"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" State "1"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Flags "GROUP"
+ ${GetSize} "$EXEDIR\optional\extensions\debugQA@mozilla.org.xpi" "/S=0K" $0 $8 $9
+ SectionSetSize ${DEBUG_IDX} $0
+ IntOp $R1 $R1 + 1
+ IntOp $R2 $R2 + $R4
+ IntOp $R3 $R3 + $R4
+ ${Else}
+ ; Hide debugQA in the components page if it isn't available.
+ SectionSetText ${DEBUG_IDX} ""
+ ${EndIf}
+
+ ; Set new values for the top and bottom of labels
+ ; Top of label box
+ StrCpy $R2 27
+ ; Bottom of label box
+ StrCpy $R3 47
+
+ ${If} ${FileExists} "$EXEDIR\optional\extensions\debugQA@mozilla.org.xpi"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Type "label"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Text "$(DEBUGQA_TEXT)"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Left "30"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Right "-1"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Top "$R2"
+ WriteINIStr "$PLUGINSDIR\components.ini" "Field $R1" Bottom "$R3"
+ IntOp $R1 $R1 + 1
+ IntOp $R2 $R2 + $R4
+ IntOp $R3 $R3 + $R4
+ ${EndIf}
+
+ WriteINIStr "$PLUGINSDIR\components.ini" "Settings" NumFields "$R1"
+
+!macroend
diff --git a/comm/suite/installer/windows/nsis/defines.nsi.in b/comm/suite/installer/windows/nsis/defines.nsi.in
new file mode 100644
index 0000000000..a4814c3a69
--- /dev/null
+++ b/comm/suite/installer/windows/nsis/defines.nsi.in
@@ -0,0 +1,64 @@
+#filter substitution
+!define AppName "SeaMonkey"
+!define AppVersion "@APP_VERSION@"
+!define GREVersion @MOZILLA_VERSION@
+!define AB_CD "@AB_CD@"
+!define NO_UNINSTALL_SURVEY
+
+!define FileMainEXE "@MOZ_APP_NAME@.exe"
+!define WindowClass "SeaMonkeyMessageWindow"
+!define DDEApplication "SeaMonkey"
+
+!define AppRegName "SeaMonkey"
+!define AppRegNameMail "SeaMonkey (Mail)"
+!define AppRegNameNews "SeaMonkey (News)"
+
+!define BrandProductName "@MOZ_APP_DISPLAYNAME@"
+
+!define BrandShortName "@MOZ_APP_DISPLAYNAME@"
+!define BrandFullName "${BrandFullNameInternal}"
+
+# ARCH is used when it is necessary to differentiate the x64 registry keys from
+# the x86 registry keys (e.g. the uninstall registry key).
+#ifdef HAVE_64BIT_BUILD
+!define HAVE_64BIT_BUILD
+!define ARCH "x64"
+!define MinSupportedVer "Microsoft Windows 7 x64"
+#else
+!define ARCH "x86"
+!define MinSupportedVer "Microsoft Windows 7"
+#endif
+
+!define MinSupportedCPU "SSE2"
+
+# AccessibleHandler.dll uses a different CLSID depending on release channel.
+# These defines must match HANDLER_CLSID defined in
+# accessible/ipc/win/handler/HandlerData.idl
+
+!if "@MOZ_UPDATE_CHANNEL@" == "default"
+#ifdef DEBUG
+!define AccessibleHandlerCLSID "{398FFD8D-5382-48F7-9E3B-19012762D39A}"
+#else
+!define AccessibleHandlerCLSID "{CE573FAF-7815-4FC2-A031-B092268ACE9E}"
+#endif
+!else if "@MOZ_UPDATE_CHANNEL@" == "nightly"
+!define AccessibleHandlerCLSID "{4629216B-8753-41BF-9527-5BFF51401671}"
+!else if "@MOZ_UPDATE_CHANNEL@" == "beta"
+!define AccessibleHandlerCLSID "{21E9F98D-A6C9-4CB5-B288-AE2FD2A96C58}"
+!else if "@MOZ_UPDATE_CHANNEL@" == "release"
+!define AccessibleHandlerCLSID "{1BAA303D-B4B9-45E5-9CCB-E3FCA3E274B6}"
+!else
+!define AccessibleHandlerCLSID "{4A195748-DCA2-45FB-9295-0A139E76A9E7}"
+!endif
+
+# File details shared by both the installer and uninstaller
+VIProductVersion "1.0.0.0"
+VIAddVersionKey "ProductName" "${BrandShortName}"
+VIAddVersionKey "CompanyName" "${CompanyName}"
+VIAddVersionKey "LegalTrademarks" "${BrandShortName} is a Trademark of The Mozilla Foundation."
+VIAddVersionKey "LegalCopyright" "${CompanyName}"
+VIAddVersionKey "FileVersion" "${AppVersion}"
+VIAddVersionKey "ProductVersion" "${AppVersion}"
+# Comments is not used but left below commented out for future reference
+# VIAddVersionKey "Comments" "Comments"
+
diff --git a/comm/suite/installer/windows/nsis/installer.nsi b/comm/suite/installer/windows/nsis/installer.nsi
new file mode 100644
index 0000000000..d9ffd78069
--- /dev/null
+++ b/comm/suite/installer/windows/nsis/installer.nsi
@@ -0,0 +1,942 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# Also requires:
+# AppAssocReg http://nsis.sourceforge.net/Application_Association_Registration_plug-in
+# CityHash http://mxr.mozilla.org/mozilla-central/source/other-licenses/nsis/Contrib/CityHash
+# ShellLink plugin http://nsis.sourceforge.net/ShellLink_plug-in
+# UAC http://nsis.sourceforge.net/UAC_plug-in
+
+; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs
+!verbose 3
+
+; 7-Zip provides better compression than the lzma from NSIS so we add the files
+; uncompressed and use 7-Zip to create a SFX archive of it
+SetDatablockOptimize on
+SetCompress off
+CRCCheck on
+
+RequestExecutionLevel user
+
+Unicode true
+ManifestSupportedOS all
+ManifestDPIAware true
+
+!addplugindir ./
+
+Var TmpVal
+Var StartMenuDir
+Var InstallType
+Var AddStartMenuSC
+Var AddTaskbarSC
+Var AddQuickLaunchSC
+Var AddDesktopSC
+Var InstallMaintenanceService
+Var InstallOptionalExtensions
+Var RegisterDefaultAgent
+
+; Other included files may depend upon these includes!
+; The following includes are provided by NSIS.
+!include FileFunc.nsh
+!include LogicLib.nsh
+!include WinMessages.nsh
+!include WinVer.nsh
+!include WordFunc.nsh
+!include MUI.nsh
+
+!insertmacro StrFilter
+!insertmacro GetOptions
+!insertmacro GetParameters
+!insertmacro GetSize
+!insertmacro WordFind
+
+; The following includes are custom.
+!include branding.nsi
+!include defines.nsi
+!include common.nsh
+!include locales.nsi
+!include custom.nsi
+
+VIAddVersionKey "FileDescription" "${BrandShortName} Installer"
+VIAddVersionKey "OriginalFilename" "setup.exe"
+
+; Must be inserted before other macros that use logging
+!insertmacro _LoggingCommon
+
+; Most commonly used macros for managing shortcuts
+!insertmacro _LoggingShortcutsCommon
+
+!insertmacro AddDisabledDDEHandlerValues
+!insertmacro AddHandlerValues
+!insertmacro ChangeMUIHeaderImage
+!insertmacro CheckForFilesInUse
+!insertmacro CheckIfRegistryKeyExists
+!insertmacro CleanUpdateDirectories
+!insertmacro CopyFilesFromDir
+!insertmacro CreateRegKey
+!insertmacro FindSMProgramsDir
+!insertmacro GetPathFromString
+!insertmacro GetParent
+!insertmacro InitHashAppModelId
+!insertmacro IsHandlerForInstallDir
+!insertmacro ManualCloseAppPrompt
+!insertmacro RegCleanMain
+!insertmacro RegCleanUninstall
+!insertmacro SetBrandNameVars
+!insertmacro UnloadUAC
+!insertmacro WriteRegStr2
+!insertmacro WriteRegDWORD2
+
+!include shared.nsh
+
+; Helper macros for ui callbacks. Insert these after shared.nsh
+!insertmacro CheckCustomCommon
+!insertmacro InstallEndCleanupCommon
+!insertmacro InstallOnInitCommon
+!insertmacro InstallStartCleanupCommon
+!insertmacro LeaveDirectoryCommon
+!insertmacro LeaveOptionsCommon
+!insertmacro OnEndCommon
+!insertmacro PreDirectoryCommon
+
+Name "${BrandFullName}"
+OutFile "setup.exe"
+!ifdef HAVE_64BIT_BUILD
+ InstallDir "$PROGRAMFILES64\${BrandFullName}\"
+!else
+ InstallDir "$PROGRAMFILES32\${BrandFullName}\"
+!endif
+ShowInstDetails nevershow
+
+################################################################################
+# Modern User Interface - MUI
+
+!define MUI_ABORTWARNING
+!define MUI_ICON setup.ico
+!define MUI_UNICON setup.ico
+!define MUI_WELCOMEPAGE_TITLE_3LINES
+!define MUI_HEADERIMAGE
+!define MUI_HEADERIMAGE_RIGHT
+!define MUI_WELCOMEFINISHPAGE_BITMAP wizWatermark.bmp
+
+; Use a right to left header image when the language is right to left
+!ifdef ${AB_CD}_rtl
+!define MUI_HEADERIMAGE_BITMAP_RTL wizHeaderRTL.bmp
+!else
+!define MUI_HEADERIMAGE_BITMAP wizHeader.bmp
+!endif
+
+/**
+ * Installation Pages
+ */
+; Welcome Page
+!define MUI_PAGE_CUSTOMFUNCTION_PRE preWelcome
+!insertmacro MUI_PAGE_WELCOME
+
+; License Page
+!define MUI_PAGE_CUSTOMFUNCTION_SHOW showLicense
+!define MUI_LICENSEPAGE_CHECKBOX
+!insertmacro MUI_PAGE_LICENSE license.txt
+
+; Custom Options Page
+Page custom preOptions leaveOptions
+
+; Custom Components Page
+Page custom preComponents leaveComponents
+
+; Select Install Directory Page
+!define MUI_PAGE_CUSTOMFUNCTION_PRE preDirectory
+!define MUI_PAGE_CUSTOMFUNCTION_LEAVE leaveDirectory
+!define MUI_DIRECTORYPAGE_VERIFYONLEAVE
+!insertmacro MUI_PAGE_DIRECTORY
+
+; Custom Shortcuts Page
+Page custom preShortcuts leaveShortcuts
+
+; Start Menu Folder Page Configuration
+!define MUI_PAGE_CUSTOMFUNCTION_PRE preStartMenu
+!define MUI_PAGE_CUSTOMFUNCTION_LEAVE leaveStartMenu
+!define MUI_STARTMENUPAGE_NODISABLE
+!insertmacro MUI_PAGE_STARTMENU Application $StartMenuDir
+
+; Custom Summary Page
+Page custom preSummary leaveSummary
+
+; Install Files Page
+!insertmacro MUI_PAGE_INSTFILES
+
+; Finish Page
+!define MUI_FINISHPAGE_TITLE_3LINES
+!define MUI_FINISHPAGE_RUN
+!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApp
+!define MUI_FINISHPAGE_RUN_TEXT $(LAUNCH_TEXT)
+!define MUI_PAGE_CUSTOMFUNCTION_PRE preFinish
+!insertmacro MUI_PAGE_FINISH
+
+; Use the default dialog for IDD_VERIFY for a simple Banner
+ChangeUI IDD_VERIFY "${NSISDIR}\Contrib\UIs\default.exe"
+
+################################################################################
+
+; Cleanup operations to perform at the start of the installation.
+Section "-InstallStartCleanup"
+ SetDetailsPrint both
+ DetailPrint $(STATUS_CLEANUP)
+ SetDetailsPrint none
+
+ SetOutPath "$INSTDIR"
+ ${StartInstallLog} "${BrandFullName}" "${AB_CD}" "${AppVersion}" "${GREVersion}"
+
+ ; Delete the app exe to prevent launching the app while we are installing.
+ ClearErrors
+ ${DeleteFile} "$INSTDIR\${FileMainEXE}"
+ ${If} ${Errors}
+ ; If the user closed the application it can take several seconds for it to
+ ; shut down completely. If the application is being used by another user we
+ ; can rename the file and then delete is when the system is restarted.
+ Sleep 5000
+ ${DeleteFile} "$INSTDIR\${FileMainEXE}"
+ ClearErrors
+ ${EndIf}
+
+ ${If} $InstallType == ${INSTALLTYPE_CUSTOM}
+ ; Custom installs.
+ ; If DebugQA is installed and this install includes DebugQA remove it
+ ; from the installation directory. This will remove it if the user
+ ; deselected DebugQA on the components page.
+ ${If} ${FileExists} "$EXEDIR\optional\extensions\debugQA@mozilla.org.xpi"
+ ${DeleteFile} "$INSTDIR\extensions\debugQA@mozilla.org.xpi"
+ ${If} ${FileExists} "$INSTDIR\extensions\debugQA@mozilla.org"
+ RmDir /r "$INSTDIR\extensions\debugQA@mozilla.org"
+ ${EndIf}
+ ${EndIf}
+
+ ${EndIf}
+
+ ; setup the application model id registration value
+ ${InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs"
+
+ ; Remove the updates directory for Windows 7 and above
+ ${CleanUpdateDirectories} "Mozilla\SeaMonkey" "Mozilla\updates"
+
+ ${RemoveDeprecatedFiles}
+
+ ${InstallStartCleanupCommon}
+SectionEnd
+
+Section "-Application" APP_IDX
+ ${StartUninstallLog}
+
+ SetDetailsPrint both
+ DetailPrint $(STATUS_INSTALL_APP)
+ SetDetailsPrint none
+
+ ${LogHeader} "Installing Main Files"
+ ${CopyFilesFromDir} "$EXEDIR\core" "$INSTDIR" \
+ "$(ERROR_CREATE_DIRECTORY_PREFIX)" \
+ "$(ERROR_CREATE_DIRECTORY_SUFFIX)"
+
+ ; The MAPI DLL's are copied and the copies are then registered to lessen
+ ; file in use errors on application update.
+ ClearErrors
+ ${DeleteFile} "$INSTDIR\MapiProxy_InUse.dll"
+ ${If} ${Errors}
+ ; Clear the way for the new file and delete the old file on reboot
+ Rename "$INSTDIR\MapiProxy_InUse.dll" "$INSTDIR\MapiProxy_InUse.dll.moz-delete"
+ Delete /REBOOTOK "$INSTDIR\MapiProxy_InUse.dll.moz-delete"
+ ${EndIf}
+ CopyFiles /SILENT "$EXEDIR\core\MapiProxy.dll" "$INSTDIR\MapiProxy_InUse.dll"
+ ${LogMsg} "Installed File: $INSTDIR\MapiProxy_InUse.dll"
+ ${LogUninstall} "File: \MapiProxy_InUse.dll"
+
+ ClearErrors
+ ${DeleteFile} "$INSTDIR\mozMapi32_InUse.dll"
+ ${If} ${Errors}
+ ; Clear the way for the new file and delete the old file on reboot
+ Rename "$INSTDIR\mozMapi32_InUse.dll" "$INSTDIR\mozMapi32_InUse.dll.moz-delete"
+ Delete /REBOOTOK "$INSTDIR\mozMapi32_InUse.dll.moz-delete"
+ ${EndIf}
+ CopyFiles /SILENT "$EXEDIR\core\mozMapi32.dll" "$INSTDIR\mozMapi32_InUse.dll"
+ ${LogMsg} "Installed File: $INSTDIR\mozMapi32_InUse.dll"
+ ${LogUninstall} "File: \mozMapi32_InUse.dll"
+
+ ; Register DLLs
+ ; XXXrstrong - AccessibleMarshal.dll can be used by multiple applications but
+ ; is only registered for the last application installed. When the last
+ ; application installed is uninstalled AccessibleMarshal.dll will no longer be
+ ; registered. bug 338878
+ ${LogHeader} "DLL Registration"
+
+ ClearErrors
+
+ ${RegisterDLL} "$INSTDIR\AccessibleMarshal.dll"
+ ${If} ${Errors}
+ ${LogMsg} "** ERROR Registering: $INSTDIR\AccessibleMarshal.dll **"
+ ${Else}
+ ${LogUninstall} "DLLReg: \AccessibleMarshal.dll"
+ ${LogMsg} "Registered: $INSTDIR\AccessibleMarshal.dll"
+ ${EndIf}
+
+ ClearErrors
+
+ ${RegisterDLL} "$INSTDIR\AccessibleHandler.dll"
+ ${If} ${Errors}
+ ${LogMsg} "** ERROR Registering: $INSTDIR\AccessibleHandler.dll **"
+ ${Else}
+ ${LogUninstall} "DLLReg: \AccessibleHandler.dll"
+ ${LogMsg} "Registered: $INSTDIR\AccessibleHandler.dll"
+ ${EndIf}
+
+ ; Write extra files created by the application to the uninstall log so they
+ ; will be removed when the application is uninstalled. To remove an empty
+ ; directory write a bogus filename to the deepest directory and all empty
+ ; parent directories will be removed.
+ ${LogUninstall} "File: \components\compreg.dat"
+ ${LogUninstall} "File: \components\xpti.dat"
+ ${LogUninstall} "File: \active-update.xml"
+ ${LogUninstall} "File: \install.log"
+ ${LogUninstall} "File: \install_status.log"
+ ${LogUninstall} "File: \install_wizard.log"
+ ${LogUninstall} "File: \updates.xml"
+
+ ; Default for creating Start Menu folder and shortcuts
+ ; (1 = create, 0 = don't create)
+ ${If} $AddStartMenuSC == ""
+ StrCpy $AddStartMenuSC "1"
+ ${EndIf}
+
+; Default for creating Task Bar shortcuts
+ ; (1 = create, 0 = don't create)
+ ${If} $AddTaskbarSC == ""
+ StrCpy $AddTaskbarSC "1"
+ ${EndIf}
+
+ ; Default for creating Quick Launch shortcut (1 = create, 0 = don't create)
+ ${If} $AddQuickLaunchSC == ""
+ StrCpy $AddQuickLaunchSC "1"
+ ${EndIf}
+
+ ; Default for creating Desktop shortcut (1 = create, 0 = don't create)
+ ${If} $AddDesktopSC == ""
+ StrCpy $AddDesktopSC "1"
+ ${EndIf}
+
+ ${LogHeader} "Adding Registry Entries"
+ SetShellVarContext current ; Set SHCTX to HKCU
+ ${RegCleanMain} "Software\Mozilla"
+ ${RegCleanUninstall}
+ ${UpdateProtocolHandlers}
+
+ ClearErrors
+ WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
+ ${If} ${Errors}
+ StrCpy $TmpVal "HKCU" ; used primarily for logging
+ ${Else}
+ SetShellVarContext all ; Set SHCTX to HKLM
+ DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
+ StrCpy $TmpVal "HKLM" ; used primarily for logging
+ ${RegCleanMain} "Software\Mozilla"
+ ${RegCleanUninstall}
+ ${UpdateProtocolHandlers}
+ ${EndIf}
+
+ ; The previous installer adds several registry values to both HKLM and HKCU.
+ ; We now try to add to HKLM and if that fails to HKCU
+
+ ; The order that reg keys and values are added is important if you use the
+ ; uninstall log to remove them on uninstall. When using the uninstall log you
+ ; MUST add children first so they will be removed first on uninstall so they
+ ; will be empty when the key is deleted. This allows the uninstaller to
+ ; specify that only empty keys will be deleted.
+ ${SetAppKeys}
+
+ ${FixClassKeys}
+
+ StrCpy $1 "$\"$8$\" -requestPending -osint -url $\"%1$\""
+ StrCpy $2 "$\"%1$\",,0,0,,,,"
+ StrCpy $3 "$\"$8$\" -url $\"%1$\""
+ ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8
+
+ ; An empty string is used for the 5th param because SeaMonkeyHTML is not a
+ ; protocol handler
+ ${AddHandlerValues} "SOFTWARE\Classes\SeaMonkeyHTML" "$3" \
+ "$INSTDIR\chrome\icons\default\html-file.ico,0" \
+ "${AppRegName} Document" "" ""
+ ${AddDisabledDDEHandlerValues} "SeaMonkeyURL" "$1" "$8,0" \
+ "${AppRegName} URL" ""
+
+ ${FixShellIconHandler}
+
+ ; The following keys should only be set if we can write to HKLM
+ ${If} $TmpVal == "HKLM"
+ ; Uninstall keys can only exist under HKLM on some versions of windows.
+ ${SetUninstallKeys}
+
+ ; Set the Start Menu Internet and Windows 7 Registered App HKLM registry keys.
+ ${SetStartMenuInternet}
+ ${SetClientsMail}
+
+ ; If we are writing to HKLM and create the quick launch and the desktop
+ ; shortcuts set IconsVisible to 1 otherwise to 0.
+ ; Taskbar shortcuts imply having a start menu shortcut.
+ ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
+ ${If} $AddQuickLaunchSC == 1
+ ${OrIf} $AddDesktopSC == 1
+ ${OrIf} $AddTaskbarSC == 1
+ StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
+ WriteRegDWORD HKLM "$0" "IconsVisible" 1
+ StrCpy $0 "Software\Clients\Mail\${BrandFullNameInternal}\InstallInfo"
+ WriteRegDWORD HKLM "$0" "IconsVisible" 1
+ ${Else}
+ StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
+ WriteRegDWORD HKLM "$0" "IconsVisible" 0
+ StrCpy $0 "Software\Clients\Mail\${BrandFullNameInternal}\InstallInfo"
+ WriteRegDWORD HKLM "$0" "IconsVisible" 0
+ ${EndIf}
+ ${EndIf}
+
+ ; These need special handling on uninstall since they may be overwritten by
+ ; an install into a different location.
+ StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\App Paths\${FileMainEXE}"
+ ${WriteRegStr2} $TmpVal "$0" "" "$INSTDIR\${FileMainEXE}" 0
+ ${WriteRegStr2} $TmpVal "$0" "Path" "$INSTDIR" 0
+
+ StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\$R9"
+ ${CreateRegKey} "$TmpVal" "$0" 0
+ StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\plugin-container.exe"
+ ${CreateRegKey} "$TmpVal" "$0" 0
+
+ !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
+
+ ; Create shortcuts
+ ${LogHeader} "Adding Shortcuts"
+
+ ; Always add the relative path to the application's Start Menu directory and
+ ; the application's shortcuts to the shortcuts log ini file. The
+ ; DeleteShortcuts macro will do the right thing on uninstall if they don't
+ ; exist.
+ ${LogSMProgramsDirRelPath} "$StartMenuDir"
+ ${LogSMProgramsShortcut} "${BrandFullName}.lnk"
+ ${LogSMProgramsShortcut} "${BrandFullName} ($(SAFE_MODE)).lnk"
+ ${LogSMProgramsShortcut} "${BrandFullNameInternal} $(MAILNEWS_TEXT).lnk"
+ ${LogSMProgramsShortcut} "$(PROFILE_TEXT).lnk"
+ ${LogQuickLaunchShortcut} "${BrandFullName}.lnk"
+ ${LogDesktopShortcut} "${BrandFullName}.lnk"
+
+ ${If} $AddStartMenuSC == 1
+ ${Unless} ${FileExists} "$SMPROGRAMS\$StartMenuDir"
+ CreateDirectory "$SMPROGRAMS\$StartMenuDir"
+ ${LogMsg} "Added Start Menu Directory: $SMPROGRAMS\$StartMenuDir"
+ ${EndUnless}
+ CreateShortCut "$SMPROGRAMS\$StartMenuDir\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
+ ${If} "$AppUserModelID" != ""
+ ApplicationID::Set "$SMPROGRAMS\$StartMenuDir\${BrandFullName}.lnk" "$AppUserModelID"
+ ${EndIf}
+ ${LogMsg} "Added Shortcut: $SMPROGRAMS\$StartMenuDir\${BrandFullName}.lnk"
+ CreateShortCut "$SMPROGRAMS\$StartMenuDir\${BrandFullName} ($(SAFE_MODE)).lnk" "$INSTDIR\${FileMainEXE}" "-safe-mode" "$INSTDIR\${FileMainEXE}" 0
+ ${If} "$AppUserModelID" != ""
+ ApplicationID::Set "$SMPROGRAMS\$StartMenuDir\${BrandFullName} ($(SAFE_MODE)).lnk" "$AppUserModelID"
+ ${EndIf}
+ ${LogMsg} "Added Shortcut: $SMPROGRAMS\$StartMenuDir\${BrandFullName} ($(SAFE_MODE)).lnk"
+ CreateShortCut "$SMPROGRAMS\$StartMenuDir\${BrandFullName} $(MAILNEWS_TEXT).lnk" "$INSTDIR\${FileMainEXE}" "-mail" "$INSTDIR\chrome\icons\default\messengerWindow.ico" 0
+ ${LogMsg} "Added Shortcut: $SMPROGRAMS\$StartMenuDir\${BrandFullName} $(MAILNEWS_TEXT).lnk"
+ CreateShortCut "$SMPROGRAMS\$StartMenuDir\$(PROFILE_TEXT).lnk" "$INSTDIR\${FileMainEXE}" "-profileManager" "$INSTDIR\${FileMainEXE}" 0
+ ${LogMsg} "Added Shortcut: $SMPROGRAMS\$StartMenuDir\$(PROFILE_TEXT).lnk"
+ ${EndIf}
+
+ ${If} $AddQuickLaunchSC == 1
+ CreateShortCut "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
+ ${If} "$AppUserModelID" != ""
+ ApplicationID::Set "$QUICKLAUNCH\${BrandFullName}.lnk" "$AppUserModelID"
+ ${EndIf}
+ ${LogMsg} "Added Shortcut: $QUICKLAUNCH\${BrandFullName}.lnk"
+ ${EndIf}
+
+ ${If} $AddDesktopSC == 1
+ CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
+ ${If} "$AppUserModelID" != ""
+ ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID"
+ ${EndIf}
+ ${LogMsg} "Added Shortcut: $DESKTOP\${BrandFullName}.lnk"
+ ${EndIf}
+
+ !insertmacro MUI_STARTMENU_WRITE_END
+SectionEnd
+
+Section /o "Debug and QA Tools" DEBUG_IDX
+ ${If} ${FileExists} "$EXEDIR\optional\extensions\debugQA@mozilla.org.xpi"
+ SetDetailsPrint both
+ DetailPrint $(STATUS_INSTALL_OPTIONAL)
+ SetDetailsPrint none
+
+ ${RemoveDir} "$INSTDIR\extensions\debugQA@mozilla.org"
+ ${DeleteFile} "$INSTDIR\extensions\debugQA@mozilla.org.xpi"
+ ${DeleteFile} "$INSTDIR\distribution\extensions\debugQA@mozilla.org.xpi"
+ ClearErrors
+ ${LogHeader} "Installing Debug and QA Tools"
+ CopyFiles /SILENT "$EXEDIR\optional\extensions\debugQA@mozilla.org.xpi" \
+ "$INSTDIR\extensions\"
+ ${EndIf}
+SectionEnd
+
+; Cleanup operations to perform at the end of the installation.
+Section "-InstallEndCleanup"
+ SetDetailsPrint both
+ DetailPrint "$(STATUS_CLEANUP)"
+ SetDetailsPrint none
+
+ ; Refresh desktop icons
+ System::Call "shell32::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)"
+
+ ${InstallEndCleanupCommon}
+
+ ; If we have to reboot give SHChangeNotify time to finish the refreshing
+ ; the icons so the OS doesn't display the icons from helper.exe
+ ${If} ${RebootFlag}
+ Sleep 10000
+ ${LogHeader} "Reboot Required To Finish Installation"
+ ; ${FileMainEXE}.moz-upgrade should never exist but just in case...
+ ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}.moz-upgrade"
+ Rename "$INSTDIR\${FileMainEXE}" "$INSTDIR\${FileMainEXE}.moz-upgrade"
+ ${EndUnless}
+
+ ${If} ${FileExists} "$INSTDIR\${FileMainEXE}"
+ ClearErrors
+ Rename "$INSTDIR\${FileMainEXE}" "$INSTDIR\${FileMainEXE}.moz-delete"
+ ${Unless} ${Errors}
+ Delete /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-delete"
+ ${EndUnless}
+ ${EndUnless}
+ ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}"
+ CopyFiles /SILENT "$INSTDIR\uninstall\helper.exe" "$INSTDIR"
+ FileOpen $0 "$INSTDIR\${FileMainEXE}" w
+ FileWrite $0 "Will be deleted on restart"
+ Rename /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-upgrade" "$INSTDIR\${FileMainEXE}"
+ FileClose $0
+ Delete "$INSTDIR\${FileMainEXE}"
+ Rename "$INSTDIR\helper.exe" "$INSTDIR\${FileMainEXE}"
+ ${EndUnless}
+ ${EndIf}
+SectionEnd
+
+Function CheckExistingInstall
+ ; If there is a pending file copy from a previous uninstall don't allow
+ ; installing until after the system has rebooted.
+ IfFileExists "$INSTDIR\${FileMainEXE}.moz-upgrade" +1 +4
+ MessageBox MB_YESNO "$(WARN_RESTART_REQUIRED_UPGRADE)" IDNO +2
+ Reboot
+ Quit
+
+ ; If there is a pending file deletion from a previous uninstall don't allow
+ ; installing until after the system has rebooted.
+ IfFileExists "$INSTDIR\${FileMainEXE}.moz-delete" +1 +4
+ MessageBox MB_YESNO "$(WARN_RESTART_REQUIRED_UNINSTALL)" IDNO +2
+ Reboot
+ Quit
+
+ ${If} ${FileExists} "$INSTDIR\${FileMainEXE}"
+ Banner::show /NOUNLOAD "$(BANNER_CHECK_EXISTING)"
+ ${If} "$TmpVal" == "FoundMessageWindow"
+ Sleep 5000
+ ${EndIf}
+ ${PushFilesToCheck}
+ ; Store the return value in $TmpVal so it is less likely to be accidentally
+ ; overwritten elsewhere.
+ ${CheckForFilesInUse} $TmpVal
+
+ Banner::destroy
+
+ ${If} "$TmpVal" == "true"
+ StrCpy $TmpVal "FoundMessageWindow"
+ ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_INSTALL)"
+ StrCpy $TmpVal "true"
+ ${EndIf}
+ ${EndIf}
+FunctionEnd
+
+Function LaunchApp
+ GetFunctionAddress $0 LaunchAppFromElevatedProcess
+ UAC::ExecCodeSegment $0
+FunctionEnd
+
+Function LaunchAppFromElevatedProcess
+ ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_LAUNCH)"
+ ; Find the installation directory when launching using GetFunctionAddress
+ ; from an elevated installer since $INSTDIR will not be set in this installer
+ ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
+ ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$R9\DefaultIcon" ""
+ ${GetPathFromString} "$0" $0
+ ${GetParent} "$0" $1
+ ; Set our current working directory to the application's install directory
+ ; otherwise the 7-Zip temp directory will be in use and won't be deleted.
+ SetOutPath "$1"
+ Exec "$\"$0$\""
+FunctionEnd
+
+################################################################################
+# Language
+
+!insertmacro MOZ_MUI_LANGUAGE 'baseLocale'
+!verbose push
+!verbose 3
+!include "overrideLocale.nsh"
+!include "customLocale.nsh"
+!verbose pop
+
+; Set this after the locale files to override it if it is in the locale
+; using " " for BrandingText will hide the "Nullsoft Install System..." branding
+BrandingText " "
+
+################################################################################
+# Page pre and leave functions
+
+Function preWelcome
+ ${If} ${FileExists} "$EXEDIR\core\distribution\modern-wizard.bmp"
+ Delete "$PLUGINSDIR\modern-wizard.bmp"
+ CopyFiles /SILENT "$EXEDIR\core\distribution\modern-wizard.bmp" "$PLUGINSDIR\modern-wizard.bmp"
+ ${EndIf}
+FunctionEnd
+
+Function showLicense
+ ${If} ${FileExists} "$EXEDIR\core\distribution\modern-header.bmp"
+ ${AndIf} $hHeaderBitmap == ""
+ Delete "$PLUGINSDIR\modern-header.bmp"
+ CopyFiles /SILENT "$EXEDIR\core\distribution\modern-header.bmp" "$PLUGINSDIR\modern-header.bmp"
+ ${ChangeMUIHeaderImage} "$PLUGINSDIR\modern-header.bmp"
+ ${EndIf}
+FunctionEnd
+
+Function preOptions
+ !insertmacro MUI_HEADER_TEXT "$(OPTIONS_PAGE_TITLE)" "$(OPTIONS_PAGE_SUBTITLE)"
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "options.ini"
+FunctionEnd
+
+Function leaveOptions
+ ${MUI_INSTALLOPTIONS_READ} $0 "options.ini" "Settings" "State"
+ ${If} $0 != 0
+ Abort
+ ${EndIf}
+ ${MUI_INSTALLOPTIONS_READ} $R0 "options.ini" "Field 2" "State"
+ StrCmp $R0 "1" +1 +2
+ StrCpy $InstallType ${INSTALLTYPE_BASIC}
+ ${MUI_INSTALLOPTIONS_READ} $R0 "options.ini" "Field 3" "State"
+ StrCmp $R0 "1" +1 +2
+ StrCpy $InstallType ${INSTALLTYPE_CUSTOM}
+
+ ${LeaveOptionsCommon}
+
+ ${If} $InstallType == ${INSTALLTYPE_BASIC}
+ Call CheckExistingInstall
+ ${EndIf}
+FunctionEnd
+
+Function preComponents
+ ${CheckCustomCommon}
+ !insertmacro checkSuiteComponents
+ !insertmacro MUI_HEADER_TEXT "$(OPTIONAL_COMPONENTS_TITLE)" "$(OPTIONAL_COMPONENTS_SUBTITLE)"
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "components.ini"
+FunctionEnd
+
+Function leaveComponents
+ ; If debugQA exists then it will be Field 2.
+ StrCpy $R1 2
+
+ ${If} ${FileExists} "$EXEDIR\optional\extensions\debugQA@mozilla.org.xpi"
+ ${MUI_INSTALLOPTIONS_READ} $R0 "components.ini" "Field $R1" "State"
+ ; State will be 1 for checked and 0 for unchecked so we can use that to set
+ ; the section flags for installation.
+ SectionSetFlags ${DEBUG_IDX} $R0
+ IntOp $R1 $R1 + 1
+ ${Else}
+ SectionSetFlags ${DEBUG_IDX} 0 ; Disable install for debugQA
+ ${EndIf}
+
+FunctionEnd
+
+Function preDirectory
+ ${PreDirectoryCommon}
+FunctionEnd
+
+Function leaveDirectory
+ ${If} $InstallType == ${INSTALLTYPE_BASIC}
+ Call CheckExistingInstall
+ ${EndIf}
+ ${LeaveDirectoryCommon} "$(WARN_DISK_SPACE)" "$(WARN_WRITE_ACCESS)"
+FunctionEnd
+
+Function preShortcuts
+ ${CheckCustomCommon}
+ !insertmacro MUI_HEADER_TEXT "$(SHORTCUTS_PAGE_TITLE)" "$(SHORTCUTS_PAGE_SUBTITLE)"
+ !insertmacro MUI_INSTALLOPTIONS_DISPLAY "shortcuts.ini"
+FunctionEnd
+
+Function leaveShortcuts
+ ${MUI_INSTALLOPTIONS_READ} $0 "shortcuts.ini" "Settings" "State"
+ ${If} $0 != 0
+ Abort
+ ${EndIf}
+ ${MUI_INSTALLOPTIONS_READ} $AddDesktopSC "shortcuts.ini" "Field 2" "State"
+ ${MUI_INSTALLOPTIONS_READ} $AddStartMenuSC "shortcuts.ini" "Field 3" "State"
+ ${MUI_INSTALLOPTIONS_READ} $AddQuickLaunchSC "shortcuts.ini" "Field 4" "State"
+
+ ; If Start Menu shortcuts won't be created call CheckExistingInstall here
+ ; since leaveStartMenu will not be called.
+ ${If} $AddStartMenuSC != 1
+ ${AndIf} $InstallType == ${INSTALLTYPE_CUSTOM}
+ Call CheckExistingInstall
+ ${EndIf}
+FunctionEnd
+
+Function preStartMenu
+ ; With the Unicode installer the path to the application's Start Menu
+ ; directory relative to the Start Menu's Programs directory is written to the
+ ; shortcuts log ini file and is used to set the default Start Menu directory.
+ ${GetSMProgramsDirRelPath} $0
+ ${If} "$0" != ""
+ StrCpy $StartMenuDir "$0"
+ ${Else}
+ ; Prior to the Unicode installer the path to the application's Start Menu
+ ; directory relative to the Start Menu's Programs directory was written to
+ ; the registry and use this value to set the default Start Menu directory.
+ ClearErrors
+ ReadRegStr $0 HKLM "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})\Main" "Start Menu Folder"
+ ${If} ${Errors}
+ ; Use the FindSMProgramsDir macro to find a previously used path to the
+ ; application's Start Menu directory relative to the Start Menu's Programs
+ ; directory in the uninstall log and use this value to set the default
+ ; Start Menu directory.
+ ${FindSMProgramsDir} $0
+ ${If} "$0" != ""
+ StrCpy $StartMenuDir "$0"
+ ${EndIf}
+ ${Else}
+ StrCpy $StartMenuDir "$0"
+ ${EndUnless}
+ ${EndIf}
+
+ ${CheckCustomCommon}
+ ${If} $AddStartMenuSC != 1
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function leaveStartMenu
+ ${If} $InstallType == ${INSTALLTYPE_CUSTOM}
+ Call CheckExistingInstall
+ ${EndIf}
+FunctionEnd
+
+Function preSummary
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NumFields "3"
+
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Type "label"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Text "$(SUMMARY_INSTALLED_TO)"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Left "0"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Right "-1"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Top "5"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Bottom "15"
+
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Type "text"
+ ; The contents of this control must be set as follows in the pre function
+ ; ${MUI_INSTALLOPTIONS_READ} $1 "summary.ini" "Field 2" "HWND"
+ ; SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" state ""
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Left "0"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Right "-1"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Top "17"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Bottom "30"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" flags "READONLY"
+
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Type "label"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Text "$(SUMMARY_CLICK)"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Left "0"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Right "-1"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Top "130"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Bottom "150"
+
+ ${If} "$TmpVal" == "true"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Type "label"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Text "$(SUMMARY_REBOOT_REQUIRED_INSTALL)"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Left "0"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Right "-1"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Top "35"
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Bottom "45"
+
+ WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NumFields "4"
+ ${EndIf}
+
+ !insertmacro MUI_HEADER_TEXT "$(SUMMARY_PAGE_TITLE)" "$(SUMMARY_PAGE_SUBTITLE)"
+
+ ; The Summary custom page has a textbox that will automatically receive
+ ; focus. This sets the focus to the Install button instead.
+ !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "summary.ini"
+ GetDlgItem $0 $HWNDPARENT 1
+ System::Call "user32::SetFocus(i r0, i 0x0007, i,i)i"
+ ${MUI_INSTALLOPTIONS_READ} $1 "summary.ini" "Field 2" "HWND"
+ SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR"
+ !insertmacro MUI_INSTALLOPTIONS_SHOW
+FunctionEnd
+
+Function leaveSummary
+ ; Try to delete the app executable and if we can't delete it try to find the
+ ; app's message window and prompt the user to close the app. This allows
+ ; running an instance that is located in another directory. If for whatever
+ ; reason there is no message window we will just rename the app's files and
+ ; then remove them on restart.
+ ClearErrors
+ ${DeleteFile} "$INSTDIR\${FileMainEXE}"
+ ${If} ${Errors}
+ ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_INSTALL)"
+ ${EndIf}
+FunctionEnd
+
+; When we add an optional action to the finish page the cancel button is
+; enabled. This disables it and leaves the finish button as the only choice.
+Function preFinish
+ ${EndInstallLog} "${BrandFullName}"
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "cancelenabled" "0"
+FunctionEnd
+
+################################################################################
+# Initialization Functions
+
+Function .onInit
+ StrCpy $LANGUAGE 0
+ ${SetBrandNameVars} "$EXEDIR\core\distribution\setup.ini"
+
+ ; Don't install on systems that don't support SSE2. The parameter value of
+ ; 10 is for PF_XMMI64_INSTRUCTIONS_AVAILABLE which will check whether the
+ ; SSE2 instruction set is available. Result returned in $R7.
+ System::Call "kernel32::IsProcessorFeaturePresent(i 10)i .R7"
+
+ ; Windows NT 6.0 (Vista/Server 2008) and lower are not supported.
+ ${Unless} ${AtLeastWin7}
+ ${If} "$R7" == "0"
+ strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)"
+ ${Else}
+ strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_MSG)"
+ ${EndIf}
+ MessageBox MB_OKCANCEL|MB_ICONSTOP "$R7" IDCANCEL +2
+ ExecShell "open" "${URLSystemRequirements}"
+ Quit
+ ${EndUnless}
+
+ ; SSE2 CPU support
+ ${If} "$R7" == "0"
+ MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_CPU_MSG)" IDCANCEL +2
+ ExecShell "open" "${URLSystemRequirements}"
+ Quit
+ ${EndIf}
+
+!ifdef HAVE_64BIT_BUILD
+ ${Unless} ${RunningX64}
+ MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_OSVER_MSG)" IDCANCEL +2
+ ExecShell "open" "${URLSystemRequirements}"
+ Quit
+ ${EndUnless}
+ SetRegView 64
+!endif
+
+ ${InstallOnInitCommon} "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)"
+
+
+ !insertmacro InitInstallOptionsFile "options.ini"
+ !insertmacro InitInstallOptionsFile "components.ini"
+ !insertmacro InitInstallOptionsFile "shortcuts.ini"
+ !insertmacro InitInstallOptionsFile "summary.ini"
+
+ ; Setup the options.ini file for the Custom Options Page
+ WriteINIStr "$PLUGINSDIR\options.ini" "Settings" NumFields "5"
+
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Type "label"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Text "$(OPTIONS_SUMMARY)"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Left "0"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Right "-1"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Top "0"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Bottom "10"
+
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Type "RadioButton"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Text "$(OPTION_STANDARD_RADIO)"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Left "15"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Right "-1"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Top "25"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Bottom "35"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" State "1"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Flags "GROUP"
+
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Type "RadioButton"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Text "$(OPTION_CUSTOM_RADIO)"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Left "15"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Right "-1"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Top "55"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Bottom "65"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" State "0"
+
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Type "label"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Text "$(OPTION_STANDARD_DESC)"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Left "30"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Right "-1"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Top "37"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Bottom "57"
+
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Type "label"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Text "$(OPTION_CUSTOM_DESC)"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Left "30"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Right "-1"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Top "67"
+ WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Bottom "87"
+
+ ; Setup the components.ini file for the Components page
+ !insertmacro createSuiteComponentsINI
+
+ ; Setup the shortcuts.ini file for the Custom Shortcuts Page
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Settings" NumFields "4"
+
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Type "label"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Text "$(CREATE_ICONS_DESC)"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Left "0"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Right "-1"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Top "5"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Bottom "15"
+
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Type "checkbox"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Text "$(ICONS_DESKTOP)"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Left "15"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Right "-1"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Top "20"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Bottom "30"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" State "1"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Flags "GROUP"
+
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Type "checkbox"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Text "$(ICONS_STARTMENU)"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Left "15"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Right "-1"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Top "40"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Bottom "50"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" State "1"
+
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Type "checkbox"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Text "$(ICONS_QUICKLAUNCH)"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Left "15"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Right "-1"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Top "60"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Bottom "70"
+ WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" State "1"
+
+ ; There must always be a core directory
+ ${GetSize} "$EXEDIR\core\" "/S=0K" $R5 $R7 $R8
+ ; Add 1024 Kb to the diskspace requirement since the installer makes a copy
+ ; of the MAPI dll's (around 20 Kb)... also, see Bug 434338.
+ IntOp $R5 $R5 + 1024
+ SectionSetSize ${APP_IDX} $R5
+
+ ; Initialize $hHeaderBitmap to prevent redundant changing of the bitmap if
+ ; the user clicks the back button
+ StrCpy $hHeaderBitmap ""
+FunctionEnd
+
+Function .onGUIEnd
+ ${OnEndCommon}
+FunctionEnd
diff --git a/comm/suite/installer/windows/nsis/shared.nsh b/comm/suite/installer/windows/nsis/shared.nsh
new file mode 100644
index 0000000000..5830eb8411
--- /dev/null
+++ b/comm/suite/installer/windows/nsis/shared.nsh
@@ -0,0 +1,1069 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+!macro PostUpdate
+ ${CreateShortcutsLog}
+
+ ; Remove registry entries for non-existent apps and for apps that point to our
+ ; install location in the Software\Mozilla key and uninstall registry entries
+ ; that point to our install location for both HKCU and HKLM.
+ SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU)
+ ${RegCleanMain} "Software\Mozilla"
+ ${RegCleanUninstall}
+ ${UpdateProtocolHandlers}
+
+ ; Win7 taskbar and start menu link maintenance
+ ${If} "$AppUserModelID" != ""
+ ${UpdateShortcutAppModelIDs} "$INSTDIR\${FileMainEXE}" "$AppUserModelID" $0
+ ${EndIf}
+
+ ; Upgrade the copies of the MAPI DLLs
+ ${UpgradeMapiDLLs}
+
+ ClearErrors
+ WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
+ ${If} ${Errors}
+ StrCpy $TmpVal "HKCU" ; used primarily for logging
+ ${Else}
+ DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
+ SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM)
+ StrCpy $TmpVal "HKLM" ; used primarily for logging
+ ${RegCleanMain} "Software\Mozilla"
+ ${RegCleanUninstall}
+ ${SetStartMenuInternet}
+ ${FixShellIconHandler}
+ ${SetUninstallKeys}
+ ${UpdateProtocolHandlers}
+
+ ReadRegStr $0 HKLM "Software\mozilla.org\Mozilla" "CurrentVersion"
+ ${If} "$0" != "${GREVersion}"
+ WriteRegStr HKLM "Software\mozilla.org\Mozilla" "CurrentVersion" "${GREVersion}"
+ ${EndIf}
+
+ ; Only update the Clients\Mail registry key values if they don't exist or
+ ; this installation is the same as the one set in those keys.
+ ReadRegStr $0 HKLM "Software\Clients\Mail\${BrandFullNameInternal}\DefaultIcon" ""
+ ${GetPathFromString} "$0" $0
+ ${GetParent} "$0" $0
+ ${If} ${FileExists} "$0"
+ ${GetLongPath} "$0" $0
+ ${EndIf}
+ ${If} "$0" == "$INSTDIR"
+ ${SetClientsMail}
+ ${EndIf}
+
+ ; Only update the Clients\News registry key values if they don't exist or
+ ; this installation is the same as the one set in those keys.
+ ReadRegStr $0 HKLM "Software\Clients\News\${BrandFullNameInternal}\DefaultIcon" ""
+ ${GetPathFromString} "$0" $0
+ ${GetParent} "$0" $0
+ ${If} ${FileExists} "$0"
+ ${GetLongPath} "$0" $0
+ ${EndIf}
+ ${If} "$0" == "$INSTDIR"
+ ${SetClientsNews}
+ ${EndIf}
+ ${EndIf}
+
+ ${RemoveDeprecatedKeys}
+ ; Add Software\Mozilla\ registry entries
+ ${SetAppKeys}
+
+ ${FixClassKeys}
+
+ ; Remove files that may be left behind by the application in the
+ ; VirtualStore directory.
+ ${CleanVirtualStore}
+
+ ${RemoveDeprecatedFiles}
+
+ ; Register AccessibleHandler.dll with COM (this writes to HKLM)
+ ${RegisterAccessibleHandler}
+!macroend
+!define PostUpdate "!insertmacro PostUpdate"
+
+!macro SetAsDefaultAppUser
+ SetShellVarContext current
+
+ ; It is only possible to set this installation of the application as the
+ ; handler for the various types if those types were added to the respective
+ ; HKLM\Clients registry keys.
+ ; http://support.microsoft.com/kb/297878
+ ${GetParameters} $R0
+
+ ClearErrors
+ ${GetOptions} "$R0" "Browser" $R1
+ ${Unless} ${Errors}
+ ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
+ ClearErrors
+ ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$R9\DefaultIcon" ""
+ ${GetPathFromString} "$0" $0
+ ${GetParent} "$0" $0
+ ${If} ${FileExists} "$0"
+ ${GetLongPath} "$0" $0
+ ${EndIf}
+ ${If} "$0" != "$INSTDIR"
+ DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
+ ClearErrors
+ WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
+ ${If} ${Errors}
+ ; Prevent multiple elevation requests
+ ClearErrors
+ ${GetOptions} "$R0" "/UAC:" $R1
+ ${Unless} ${Errors}
+ Quit
+ ${EndUnless}
+ ${ElevateUAC}
+ ${EndIf}
+ DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
+ ${SetStartMenuInternet}
+ ${EndIf}
+ SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM)
+ ${FixShellIconHandler}
+ WriteRegStr HKCU "Software\Clients\StartMenuInternet" "" "$R9"
+
+ ClearErrors
+ ReadRegStr $0 HKLM "Software\RegisteredApplications" "${AppRegName}"
+ ; Only register as the handler on 7 if the app registry name exists
+ ; under the RegisteredApplications registry key.
+ ${Unless} ${Errors}
+ AppAssocReg::SetAppAsDefaultAll "${AppRegName}"
+ ${EndUnless}
+
+ SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU)
+ ${SetHandlersBrowser}
+ ${EndUnless}
+
+ ClearErrors
+ ${GetOptions} "$R0" "Mail" $R1
+ ${Unless} ${Errors}
+ ReadRegStr $0 HKLM "Software\Clients\Mail\${BrandFullNameInternal}\DefaultIcon" ""
+ ${GetPathFromString} "$0" $0
+ ${GetParent} "$0" $0
+ ${If} ${FileExists} "$0"
+ ${GetLongPath} "$0" $0
+ ${EndIf}
+ ${If} "$0" != "$INSTDIR"
+ DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
+ ClearErrors
+ WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
+ ${If} ${Errors}
+ ; Prevent multiple elevation requests
+ ClearErrors
+ ${GetOptions} "$R0" "/UAC:" $R1
+ ${Unless} ${Errors}
+ Quit
+ ${EndUnless}
+ ${ElevateUAC}
+ ${EndIf}
+ DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
+ SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM)
+ ${SetClientsMail}
+ ${EndIf}
+ WriteRegStr HKCU "Software\Clients\Mail" "" "${BrandFullNameInternal}"
+ GetFunctionAddress $0 SetAsDefaultMailAppUser
+ UAC::ExecCodeSegment $0
+ ${EndUnless}
+
+ ClearErrors
+ ${GetOptions} "$R0" "News" $R1
+ ${Unless} ${Errors}
+ ReadRegStr $0 HKLM "Software\Clients\News\${BrandFullNameInternal}\DefaultIcon" ""
+ ${GetPathFromString} "$0" $0
+ ${GetParent} "$0" $0
+ ${If} ${FileExists} "$0"
+ ${GetLongPath} "$0" $0
+ ${EndIf}
+ ${If} "$0" != "$INSTDIR"
+ DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
+ ClearErrors
+ WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
+ ${If} ${Errors}
+ ; Prevent multiple elevation requests
+ ClearErrors
+ ${GetOptions} "$R0" "/UAC:" $R1
+ ${Unless} ${Errors}
+ Quit
+ ${EndUnless}
+ ${ElevateUAC}
+ ${EndIf}
+ DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
+ SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM)
+ ${SetClientsNews}
+ ${EndIf}
+ WriteRegStr HKCU "Software\Clients\News" "" "${BrandFullNameInternal}"
+ GetFunctionAddress $0 SetAsDefaultNewsAppUser
+ UAC::ExecCodeSegment $0
+ ${EndUnless}
+!macroend
+!define SetAsDefaultAppUser "!insertmacro SetAsDefaultAppUser"
+
+!macro SetAsDefaultAppGlobal
+ ${RemoveDeprecatedKeys}
+ SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM)
+ ; Make sure that the MapiProxy and the mozMapi32 dll copies exist as we will
+ ; use those to register as default mail app. When using a ZIP build, the DLL
+ ; copies might not exist yet
+ IfFileExists "$INSTDIR\MapiProxy_InUse.dll" +2 +1
+ CopyFiles /SILENT "$INSTDIR\MapiProxy.dll" "$INSTDIR\MapiProxy_InUse.dll"
+ IfFileExists "$INSTDIR\mozMapi32_InUse.dll" +2 +1
+ CopyFiles /SILENT "$INSTDIR\mozMapi32.dll" "$INSTDIR\mozMapi32_InUse.dll"
+
+ ${SetHandlersBrowser}
+ ${SetHandlersMail}
+ ${SetHandlersNews}
+ ${SetStartMenuInternet}
+ ${SetClientsMail}
+ ${SetClientsNews}
+ ${FixShellIconHandler}
+ ${ShowShortcuts}
+ ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
+ WriteRegStr HKLM "Software\Clients\StartMenuInternet" "" "$R9"
+ WriteRegStr HKLM "Software\Clients\Mail" "" "${BrandFullNameInternal}"
+!macroend
+!define SetAsDefaultAppGlobal "!insertmacro SetAsDefaultAppGlobal"
+
+!macro HideShortcuts
+ StrCpy $R1 "Software\Clients\Mail\${BrandFullNameInternal}\InstallInfo"
+ WriteRegDWORD HKLM $R1 "IconsVisible" 0
+ SetShellVarContext all ; Set $DESKTOP to All Users
+ ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
+ SetShellVarContext current ; Set $DESKTOP to the current user's desktop
+ ${EndUnless}
+
+ ${If} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
+ ShellLink::GetShortCutArgs "$DESKTOP\${BrandFullName}.lnk"
+ Pop $0
+ ${If} "$0" == ""
+ ShellLink::GetShortCutTarget "$DESKTOP\${BrandFullName}.lnk"
+ Pop $0
+ ; Needs to handle short paths
+ ${If} "$0" == "$INSTDIR\${FileMainEXE}"
+ Delete "$DESKTOP\${BrandFullName}.lnk"
+ ${EndIf}
+ ${EndIf}
+ ${EndIf}
+
+ ${If} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk"
+ ShellLink::GetShortCutArgs "$QUICKLAUNCH\${BrandFullName}.lnk"
+ Pop $0
+ ${If} "$0" == ""
+ ShellLink::GetShortCutTarget "$QUICKLAUNCH\${BrandFullName}.lnk"
+ Pop $0
+ ; Needs to handle short paths
+ ${If} "$0" == "$INSTDIR\${FileMainEXE}"
+ Delete "$QUICKLAUNCH\${BrandFullName}.lnk"
+ ${EndIf}
+ ${EndIf}
+ ${EndIf}
+!macroend
+!define HideShortcuts "!insertmacro HideShortcuts"
+
+!macro ShowShortcuts
+ StrCpy $R1 "Software\Clients\Mail\${BrandFullNameInternal}\InstallInfo"
+ WriteRegDWORD HKLM $R1 "IconsVisible" 1
+ SetShellVarContext all ; Set $DESKTOP to All Users
+ ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
+ CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
+ ${If} "$AppUserModelID" != ""
+ ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID"
+ ${EndIf}
+ ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR"
+ ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
+ SetShellVarContext current ; Set $DESKTOP to the current user's desktop
+ ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
+ CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
+ ${If} "$AppUserModelID" != ""
+ ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID"
+ ${EndIf}
+ ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR"
+ ${EndUnless}
+ ${EndUnless}
+ ${EndUnless}
+ ${Unless} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk"
+ CreateShortCut "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0
+ ${If} "$AppUserModelID" != ""
+ ApplicationID::Set "$QUICKLAUNCH\${BrandFullName}.lnk" "$AppUserModelID"
+ ${EndIf}
+ ShellLink::SetShortCutWorkingDirectory "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR"
+ ${EndUnless}
+!macroend
+!define ShowShortcuts "!insertmacro ShowShortcuts"
+
+!macro SetHandlersBrowser
+ ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8
+
+ StrCpy $0 "SOFTWARE\Classes"
+ StrCpy $1 "$\"$8$\" -requestPending -osint -url $\"%1$\""
+ StrCpy $2 "$\"$8$\" -url $\"%1$\""
+ StrCpy $3 "$\"%1$\",,0,0,,,,"
+
+ ; An empty string is used for the 5th param because SeaMonkeyHTML is not a
+ ; protocol handler
+ ${AddHandlerValues} "$0\SeaMonkeyHTML" "$2" \
+ "$INSTDIR\chrome\icons\default\html-file.ico,0" \
+ "${AppRegName} Document" "" ""
+ ${AddDisabledDDEHandlerValues} "SeaMonkeyURL" "$1" "$8,0" \
+ "${AppRegName} URL" "delete"
+
+ ; An empty string is used for the 4th & 5th params because the following
+ ; protocol handlers already have a display name and the additional keys
+ ; required for a protocol handler.
+ ${AddDisabledDDEHandlerValues} "ftp" "$1" "$8,0" "" ""
+ ${AddDisabledDDEHandlerValues} "http" "$1" "$8,0" "" ""
+ ${AddDisabledDDEHandlerValues} "https" "$1" "$8,0" "" ""
+
+ ReadRegStr $6 HKCR ".htm" ""
+ ${If} "$6" != "SeaMonkeyHTML"
+ WriteRegStr SHCTX "$0\.htm" "" "SeaMonkeyHTML"
+ ${EndIf}
+
+ ReadRegStr $6 HKCR ".html" ""
+ ${If} "$6" != "SeaMonkeyHTML"
+ WriteRegStr SHCTX "$0\.html" "" "SeaMonkeyHTML"
+ ${EndIf}
+
+ ReadRegStr $6 HKCR ".shtml" ""
+ ${If} "$6" != "SeaMonkeyHTML"
+ WriteRegStr SHCTX "$0\.shtml" "" "SeaMonkeyHTML"
+ ${EndIf}
+
+ ReadRegStr $6 HKCR ".xht" ""
+ ${If} "$6" != "SeaMonkeyHTML"
+ WriteRegStr SHCTX "$0\.xht" "" "SeaMonkeyHTML"
+ ${EndIf}
+
+ ReadRegStr $6 HKCR ".xhtml" ""
+ ${If} "$6" != "SeaMonkeyHTML"
+ WriteRegStr SHCTX "$0\.xhtml" "" "SeaMonkeyHTML"
+ ${EndIf}
+
+ ; Only add webm if it's not present
+ ${CheckIfRegistryKeyExists} "$0" ".webm" $7
+ ${If} $7 == "false"
+ WriteRegStr SHCTX "$0\.webm" "" "SeaMonkeyHTML"
+ ${EndIf}
+!macroend
+!define SetHandlersBrowser "!insertmacro SetHandlersBrowser"
+
+!macro SetHandlersMail
+ ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8
+
+ StrCpy $0 "SOFTWARE\Classes"
+ StrCpy $1 "$\"$8$\" $\"%1$\""
+ StrCpy $2 "$\"$8$\" -osint -compose $\"%1$\""
+
+ ; An empty string is used for the 5th param because SeaMonkeyEML is not a
+ ; protocol handler
+ ${AddHandlerValues} "$0\SeaMonkeyEML" "$1" "$INSTDIR\chrome\icons\default\html-file.ico,0" "${AppRegNameMail} Document" "" ""
+
+ ${AddHandlerValues} "$0\SeaMonkeyCOMPOSE" "$2" "$8,0" "${AppRegNameMail} URL" "delete" ""
+
+ ; An empty string is used for the 4th & 5th params because the following
+ ; protocol handler already has a display name and additional keys required
+ ; for a protocol handler.
+ ${AddHandlerValues} "$0\mailto" "$2" "$8,0" "${AppRegNameMail} URL" "true" ""
+
+ ; Associate the file handlers with SeaMonkeyEML
+ ReadRegStr $6 HKCR ".eml" ""
+ ${If} "$6" != "SeaMonkeyEML"
+ WriteRegStr SHCTX "$0\.eml" "" "SeaMonkeyEML"
+ ${EndIf}
+!macroend
+!define SetHandlersMail "!insertmacro SetHandlersMail"
+
+!macro SetHandlersNews
+ ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8
+ StrCpy $0 "SOFTWARE\Classes"
+ StrCpy $1 "$\"$8$\" -osint -mail $\"%1$\""
+
+ ${AddHandlerValues} "$0\SeaMonkeyNEWS" "$1" "$8,0" "${AppRegNameNews} URL" "delete" ""
+ ; An empty string is used for the 4th & 5th params because the following
+ ; protocol handlers already have a display name and additional keys required
+ ; for a protocol handler.
+ ${AddHandlerValues} "$0\news" "$1" "$8,0" "${AppRegNameNews} URL" "true" ""
+ ${AddHandlerValues} "$0\nntp" "$1" "$8,0" "${AppRegNameNews} URL" "true" ""
+ ${AddHandlerValues} "$0\snews" "$1" "$8,0" "${AppRegNameNews} URL" "true" ""
+!macroend
+!define SetHandlersNews "!insertmacro SetHandlersNews"
+
+; XXXrstrong - there are several values that will be overwritten by and
+; overwrite other installs of the same application.
+!macro SetStartMenuInternet
+ GetFullPathName $8 "$INSTDIR\${FileMainEXE}"
+ GetFullPathName $7 "$INSTDIR\uninstall\helper.exe"
+
+ ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
+
+ StrCpy $0 "Software\Clients\StartMenuInternet\$R9"
+ WriteRegStr HKLM "$0" "" "${BrandFullName}"
+
+ WriteRegStr HKLM "$0\DefaultIcon" "" "$8,0"
+
+ ; The Reinstall Command is defined at
+ ; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/registeringapps.asp
+ WriteRegStr HKLM "$0\InstallInfo" "HideIconsCommand" "$\"$7$\" /HideShortcuts"
+ WriteRegStr HKLM "$0\InstallInfo" "ShowIconsCommand" "$\"$7$\" /ShowShortcuts"
+ WriteRegStr HKLM "$0\InstallInfo" "ReinstallCommand" "$\"$7$\" /SetAsDefaultAppGlobal"
+
+ WriteRegStr HKLM "$0\shell\open\command" "" "$\"$8$\""
+
+ WriteRegStr HKLM "$0\shell\properties" "" "$(CONTEXT_OPTIONS)"
+ WriteRegStr HKLM "$0\shell\properties\command" "" "$\"$8$\" -preferences"
+
+ WriteRegStr HKLM "$0\shell\safemode" "" "$(CONTEXT_SAFE_MODE)"
+ WriteRegStr HKLM "$0\shell\safemode\command" "" "$\"$8$\" -safe-mode"
+
+ ; Vista Capabilities registry keys
+ WriteRegStr HKLM "$0\Capabilities" "ApplicationDescription" "$(REG_APP_DESC)"
+ WriteRegStr HKLM "$0\Capabilities" "ApplicationIcon" "$8,0"
+ WriteRegStr HKLM "$0\Capabilities" "ApplicationName" "${BrandShortName}"
+
+ WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".htm" "SeaMonkeyHTML"
+ WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".html" "SeaMonkeyHTML"
+ WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".shtml" "SeaMonkeyHTML"
+ WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".xht" "SeaMonkeyHTML"
+ WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".xhtml" "SeaMonkeyHTML"
+
+ WriteRegStr HKLM "$0\Capabilities\StartMenu" "StartMenuInternet" "$R9"
+
+ WriteRegStr HKLM "$0\Capabilities\URLAssociations" "ftp" "SeaMonkeyURL"
+ WriteRegStr HKLM "$0\Capabilities\URLAssociations" "http" "SeaMonkeyURL"
+ WriteRegStr HKLM "$0\Capabilities\URLAssociations" "https" "SeaMonkeyURL"
+
+ ; Vista Registered Application
+ WriteRegStr HKLM "Software\RegisteredApplications" "${AppRegName}" "$0\Capabilities"
+!macroend
+!define SetStartMenuInternet "!insertmacro SetStartMenuInternet"
+
+!macro FixShellIconHandler
+ ; The IconHandler reference for SeaMonkeyHTML can end up in an inconsistent
+ ; state due to changes not being detected by the IconHandler for side by side
+ ; installs. The symptoms can be either an incorrect icon or no icon being
+ ; displayed for files associated with SeaMonkey. By setting it here it will
+ ; always reference the install referenced in the
+ ; HKLM\Software\Classes\SeaMonkeyHTML registry key.
+ ClearErrors
+ ReadRegStr $2 HKLM "Software\Classes\SeaMonkeyHTML\ShellEx\IconHandler" ""
+ ${Unless} ${Errors}
+ ClearErrors
+ ReadRegStr $3 HKLM "Software\Classes\CLSID\$2\Old Icon\SeaMonkeyHTML\DefaultIcon" ""
+ ${Unless} ${Errors}
+ WriteRegStr HKLM "Software\Classes\CLSID\$2\Old Icon\SeaMonkeyHTML\DefaultIcon" "" "$INSTDIR\chrome\icons\default\html-file.ico,0"
+ ${EndUnless}
+ ${EndUnless}
+!macroend
+!define FixShellIconHandler "!insertmacro FixShellIconHandler"
+
+; XXXrstrong - there are several values that will be overwritten by and
+; overwrite other installs of the same application.
+!macro SetClientsMail
+ ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8
+ ${GetLongPath} "$INSTDIR\uninstall\helper.exe" $7
+ ${GetLongPath} "$INSTDIR\mozMapi32_InUse.dll" $6
+
+ StrCpy $0 "Software\Clients\Mail\${BrandFullNameInternal}"
+ WriteRegStr HKLM "$0" "" "${BrandFullNameInternal}"
+ WriteRegStr HKLM "$0\DefaultIcon" "" "$8,0"
+ WriteRegStr HKLM "$0" "DLLPath" "$6"
+
+ ; The MapiProxy dll can be used by multiple applications but
+ ; is only registered for the last application installed. When the last
+ ; application installed is uninstalled MapiProxy.dll will no longer be
+ ; registered.
+ !ifndef NO_LOG
+ ${LogHeader} "DLL Registration"
+ !endif
+ ClearErrors
+ ${RegisterDLL} "$INSTDIR\MapiProxy_InUse.dll"
+ !ifndef NO_LOG
+ ${If} ${Errors}
+ ${LogMsg} "** ERROR Registering: $INSTDIR\MapiProxy_InUse.dll **"
+ ${Else}
+ ${LogUninstall} "DLLReg: \MapiProxy_InUse.dll"
+ ${LogMsg} "Registered: $INSTDIR\MapiProxy_InUse.dll"
+ ${EndIf}
+ !endif
+
+ StrCpy $1 "Software\Classes\CLSID\{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}"
+ WriteRegStr HKLM "$1\LocalServer32" "" "$\"$8$\" /MAPIStartup"
+ WriteRegStr HKLM "$1\ProgID" "" "MozillaMapi.1"
+ WriteRegStr HKLM "$1\VersionIndependentProgID" "" "MozillaMAPI"
+ StrCpy $1 "SOFTWARE\Classes"
+ WriteRegStr HKLM "$1\MozillaMapi" "" "Mozilla MAPI"
+ WriteRegStr HKLM "$1\MozillaMapi\CLSID" "" "{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}"
+ WriteRegStr HKLM "$1\MozillaMapi\CurVer" "" "MozillaMapi.1"
+ WriteRegStr HKLM "$1\MozillaMapi.1" "" "Mozilla MAPI"
+ WriteRegStr HKLM "$1\MozillaMapi.1\CLSID" "" "{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}"
+
+ ; The Reinstall Command is defined at
+ ; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/registeringapps.asp
+ WriteRegStr HKLM "$0\InstallInfo" "HideIconsCommand" "$\"$7$\" /HideShortcuts"
+ WriteRegStr HKLM "$0\InstallInfo" "ShowIconsCommand" "$\"$7$\" /ShowShortcuts"
+ WriteRegStr HKLM "$0\InstallInfo" "ReinstallCommand" "$\"$7$\" /SetAsDefaultAppGlobal"
+
+ ClearErrors
+ ReadRegDWORD $1 HKLM "$0\InstallInfo" "IconsVisible"
+ ; If the IconsVisible name value pair doesn't exist add it otherwise the
+ ; application won't be displayed in Set Program Access and Defaults.
+ ${If} ${Errors}
+ ${If} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk"
+ WriteRegDWORD HKLM "$0\InstallInfo" "IconsVisible" 1
+ ${Else}
+ WriteRegDWORD HKLM "$0\InstallInfo" "IconsVisible" 0
+ ${EndIf}
+ ${EndIf}
+
+ ; Mail shell/open/command
+ WriteRegStr HKLM "$0\shell\open\command" "" "$\"$8$\" -mail"
+
+ ; options
+ WriteRegStr HKLM "$0\shell\properties" "" "$(CONTEXT_OPTIONS)"
+ WriteRegStr HKLM "$0\shell\properties\command" "" "$\"$8$\" -options"
+
+ ; safemode
+ WriteRegStr HKLM "$0\shell\safemode" "" "$(CONTEXT_SAFE_MODE)"
+ WriteRegStr HKLM "$0\shell\safemode\command" "" "$\"$8$\" -safe-mode"
+
+ ; Protocols
+ StrCpy $1 "$\"$8$\" -compose $\"%1$\""
+ ${AddHandlerValues} "$0\Protocols\mailto" "$1" "$8,0" "${AppRegNameMail} URL" "true" ""
+
+ ; Vista Capabilities registry keys
+ WriteRegStr HKLM "$0\Capabilities" "ApplicationDescription" "$(REG_APP_DESC)"
+ WriteRegStr HKLM "$0\Capabilities" "ApplicationIcon" "$8,0"
+ WriteRegStr HKLM "$0\Capabilities" "ApplicationName" "${AppRegNameMail}"
+ WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".eml" "SeaMonkeyEML"
+ WriteRegStr HKLM "$0\Capabilities\StartMenu" "Mail" "${BrandFullNameInternal}"
+ WriteRegStr HKLM "$0\Capabilities\URLAssociations" "mailto" "SeaMonkeyCOMPOSE"
+
+ ; Vista Registered Application
+ WriteRegStr HKLM "Software\RegisteredApplications" "${AppRegNameMail}" "$0\Capabilities"
+!macroend
+!define SetClientsMail "!insertmacro SetClientsMail"
+
+; XXXrstrong - there are several values that will be overwritten by and
+; overwrite other installs of the same application.
+!macro SetClientsNews
+ ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8
+ ${GetLongPath} "$INSTDIR\uninstall\helper.exe" $7
+ ${GetLongPath} "$INSTDIR\mozMapi32_InUse.dll" $6
+
+ StrCpy $0 "Software\Clients\News\${BrandFullNameInternal}"
+ WriteRegStr HKLM "$0" "" "${BrandFullNameInternal}"
+ WriteRegStr HKLM "$0\DefaultIcon" "" "$8,0"
+ WriteRegStr HKLM "$0" "DLLPath" "$6"
+
+ ; The MapiProxy dll can exist in multiple installs of the application.
+ ; Registration occurs as follows with the last action to occur being the one
+ ; that wins: On install and software update when helper.exe runs with the
+ ; /PostUpdate argument. On setting the application as the system's default
+ ; application using Window's "Set program access and defaults".
+ !ifndef NO_LOG
+ ${LogHeader} "DLL Registration"
+ !endif
+ ClearErrors
+ ${RegisterDLL} "$INSTDIR\MapiProxy_InUse.dll"
+ !ifndef NO_LOG
+ ${If} ${Errors}
+ ${LogMsg} "** ERROR Registering: $INSTDIR\MapiProxy_InUse.dll **"
+ ${Else}
+ ${LogUninstall} "DLLReg: \MapiProxy_InUse.dll"
+ ${LogMsg} "Registered: $INSTDIR\MapiProxy_InUse.dll"
+ ${EndIf}
+ !endif
+
+ StrCpy $1 "Software\Classes\CLSID\{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}"
+ WriteRegStr HKLM "$1\LocalServer32" "" "$\"$8$\" /MAPIStartup"
+ WriteRegStr HKLM "$1\ProgID" "" "MozillaMapi.1"
+ WriteRegStr HKLM "$1\VersionIndependentProgID" "" "MozillaMAPI"
+ StrCpy $1 "SOFTWARE\Classes"
+ WriteRegStr HKLM "$1\MozillaMapi" "" "Mozilla MAPI"
+ WriteRegStr HKLM "$1\MozillaMapi\CLSID" "" "{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}"
+ WriteRegStr HKLM "$1\MozillaMapi\CurVer" "" "MozillaMapi.1"
+ WriteRegStr HKLM "$1\MozillaMapi.1" "" "Mozilla MAPI"
+ WriteRegStr HKLM "$1\MozillaMapi.1\CLSID" "" "{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}"
+
+ ; Mail shell/open/command
+ WriteRegStr HKLM "$0\shell\open\command" "" "$\"$8$\" -mail"
+
+ ; Vista Capabilities registry keys
+ WriteRegStr HKLM "$0\Capabilities" "ApplicationDescription" "$(REG_APP_DESC)"
+ WriteRegStr HKLM "$0\Capabilities" "ApplicationIcon" "$8,0"
+ WriteRegStr HKLM "$0\Capabilities" "ApplicationName" "${AppRegNameNews}"
+ WriteRegStr HKLM "$0\Capabilities\URLAssociations" "nntp" "SeaMonkeyNEWS"
+ WriteRegStr HKLM "$0\Capabilities\URLAssociations" "news" "SeaMonkeyNEWS"
+ WriteRegStr HKLM "$0\Capabilities\URLAssociations" "snews" "SeaMonkeyNEWS"
+
+ ; Protocols
+ StrCpy $1 "$\"$8$\" -osint -mail $\"%1$\""
+ ${AddHandlerValues} "$0\Protocols\nntp" "$1" "$8,0" "${AppRegNameNews} URL" "true" ""
+ ${AddHandlerValues} "$0\Protocols\news" "$1" "$8,0" "${AppRegNameNews} URL" "true" ""
+ ${AddHandlerValues} "$0\Protocols\snews" "$1" "$8,0" "${AppRegNameNews} URL" "true" ""
+
+ ; Vista Registered Application
+ WriteRegStr HKLM "Software\RegisteredApplications" "${AppRegNameNews}" "$0\Capabilities"
+!macroend
+!define SetClientsNews "!insertmacro SetClientsNews"
+
+!macro SetAppKeys
+ ${GetLongPath} "$INSTDIR" $8
+ StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})\Main"
+ ${WriteRegStr2} $TmpVal "$0" "Install Directory" "$8" 0
+ ${WriteRegStr2} $TmpVal "$0" "PathToExe" "$8\${FileMainEXE}" 0
+
+ StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})\Uninstall"
+ ${WriteRegStr2} $TmpVal "$0" "Description" "${BrandFullNameInternal} ${AppVersion} (${ARCH} ${AB_CD})" 0
+
+ StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})"
+ ${WriteRegStr2} $TmpVal "$0" "" "${AppVersion} (${AB_CD})" 0
+
+ StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}\bin"
+ ${WriteRegStr2} $TmpVal "$0" "PathToExe" "$8\${FileMainEXE}" 0
+
+ StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}\extensions"
+ ${WriteRegStr2} $TmpVal "$0" "Components" "$8\components" 0
+ ${WriteRegStr2} $TmpVal "$0" "Plugins" "$8\plugins" 0
+
+ StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}"
+ ${WriteRegStr2} $TmpVal "$0" "GeckoVer" "${GREVersion}" 0
+
+ StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}"
+ ${WriteRegStr2} $TmpVal "$0" "" "${GREVersion}" 0
+ ${WriteRegStr2} $TmpVal "$0" "CurrentVersion" "${AppVersion} (${AB_CD})" 0
+!macroend
+!define SetAppKeys "!insertmacro SetAppKeys"
+
+!macro SetUninstallKeys
+ StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${BrandFullNameInternal} ${AppVersion} (${ARCH} ${AB_CD})"
+
+ WriteRegStr HKLM "$0" "${BrandShortName}InstallerTest" "Write Test"
+ ${If} ${Errors}
+ StrCpy $1 "HKCU"
+ SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU)
+ ${Else}
+ StrCpy $1 "HKLM"
+ SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM)
+ DeleteRegValue HKLM "$0" "${BrandShortName}InstallerTest"
+ ${EndIf}
+
+ ${GetLongPath} "$INSTDIR" $8
+
+ ; Write the uninstall registry keys
+ ${WriteRegStr2} $1 "$0" "Comments" "${BrandFullNameInternal} ${AppVersion} (${ARCH} ${AB_CD})" 0
+ ${WriteRegStr2} $1 "$0" "DisplayIcon" "$8\${FileMainEXE},0" 0
+ ${WriteRegStr2} $1 "$0" "DisplayName" "${BrandFullNameInternal} ${AppVersion} (${ARCH} ${AB_CD})" 0
+ ${WriteRegStr2} $1 "$0" "DisplayVersion" "${AppVersion}" 0
+ ${WriteRegStr2} $1 "$0" "InstallLocation" "$8" 0
+ ${WriteRegStr2} $1 "$0" "Publisher" "Mozilla" 0
+ ${WriteRegStr2} $1 "$0" "UninstallString" "$8\uninstall\helper.exe" 0
+ ${WriteRegStr2} $1 "$0" "URLInfoAbout" "${URLInfoAbout}" 0
+ ${WriteRegStr2} $1 "$0" "URLUpdateInfo" "${URLUpdateInfo}" 0
+ ${WriteRegDWORD2} $1 "$0" "NoModify" 1 0
+ ${WriteRegDWORD2} $1 "$0" "NoRepair" 1 0
+
+ ${GetSize} "$8" "/S=0K" $R2 $R3 $R4
+ ${WriteRegDWORD2} $1 "$0" "EstimatedSize" $R2 0
+
+ ${If} "$TmpVal" == "HKLM"
+ SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM)
+ ${Else}
+ SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU)
+ ${EndIf}
+!macroend
+!define SetUninstallKeys "!insertmacro SetUninstallKeys"
+
+; Updates protocol handlers if their registry open command value is for this
+; install location
+!macro UpdateProtocolHandlers
+ ; Store the command to open the app with an url in a register for easy access.
+ ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8
+ StrCpy $0 "SOFTWARE\Classes"
+ StrCpy $1 "$\"$8$\" -osint -compose $\"%1$\""
+ StrCpy $2 "$\"$8$\" -osint -mail $\"%1$\""
+ StrCpy $3 "$\"$8$\" -requestPending -osint -url $\"%1$\""
+ StrCpy $4 "$\"%1$\",,0,0,,,,"
+ StrCpy $5 "$\"$8$\" -url $\"%1$\""
+
+ ; Only set the file and protocol handlers if the existing one under HKCR is
+ ; for this install location.
+ ${IsHandlerForInstallDir} "SeaMonkeyHTML" $R9
+ ${If} "$R9" == "true"
+ ; An empty string is used for the 5th param because SeaMonkeyHTML is not a
+ ; protocol handler.
+ ${AddHandlerValues} "$0\SeaMonkeyHTML" "$5" \
+ "$INSTDIR\chrome\icons\default\html-file.ico,0" \
+ "${AppRegName} Document" "" ""
+ ${EndIf}
+
+ ${IsHandlerForInstallDir} "SeaMonkeyURL" $R9
+ ${If} "$R9" == "true"
+ ${AddDisabledDDEHandlerValues} "SeaMonkeyURL" "$3" "$8,0" \
+ "${AppRegName} URL" "delete"
+ ${EndIf}
+
+ ${IsHandlerForInstallDir} "ftp" $R9
+ ${If} "$R9" == "true"
+ ${AddDisabledDDEHandlerValues} "ftp" "$3" "$8,0" "" ""
+ ${EndIf}
+
+ ${IsHandlerForInstallDir} "http" $R9
+ ${If} "$R9" == "true"
+ ${AddDisabledDDEHandlerValues} "http" "$3" "$8,0" "" ""
+ ${EndIf}
+
+ ${IsHandlerForInstallDir} "https" $R9
+ ${If} "$R9" == "true"
+ ${AddDisabledDDEHandlerValues} "https" "$3" "$8,0" "" ""
+ ${EndIf}
+
+ ${IsHandlerForInstallDir} "SeaMonkeyEML" $R9
+ ${If} "$R9" == "true"
+ ${AddHandlerValues} "SOFTWARE\Classes\SeaMonkeyEML" "$2" \
+ "$INSTDIR\chrome\icons\default\html-file.ico,0" \
+ "${AppRegNameMail} Document" "" ""
+ ${EndIf}
+
+ ${IsHandlerForInstallDir} "SeaMonkeyMAIL" $R9
+ ${If} "$R9" == "true"
+ ${AddHandlerValues} "SOFTWARE\Classes\SeaMonkeyMAIL" "$2" "$8,0" \
+ "${AppRegNameMail} URL" "delete" ""
+ ${EndIf}
+
+ ${IsHandlerForInstallDir} "mailto" $R9
+ ${If} "$R9" == "true"
+ ${AddHandlerValues} "SOFTWARE\Classes\mailto" "$1" "$8,0" "" "" ""
+ ${EndIf}
+
+ ${IsHandlerForInstallDir} "SeaMonkeyNEWS" $R9
+ ${If} "$R9" == "true"
+ ${AddHandlerValues} "SOFTWARE\Classes\SeaMonkeyNEWS" "$2" "$8,0" \
+ "${AppRegNameMail} URL" "delete" ""
+ ${EndIf}
+
+ ${IsHandlerForInstallDir} "news" $R9
+ ${If} "$R9" == "true"
+ ${AddHandlerValues} "SOFTWARE\Classes\news" "$2" "$8,0" "" "" ""
+ ${EndIf}
+
+ ${IsHandlerForInstallDir} "snews" $R9
+ ${If} "$R9" == "true"
+ ${AddHandlerValues} "SOFTWARE\Classes\snews" "$2" "$8,0" "" "" ""
+ ${EndIf}
+
+ ${IsHandlerForInstallDir} "nntp" $R9
+ ${If} "$R9" == "true"
+ ${AddHandlerValues} "SOFTWARE\Classes\nntp" "$2" "$8,0" "" "" ""
+ ${EndIf}
+!macroend
+!define UpdateProtocolHandlers "!insertmacro UpdateProtocolHandlers"
+!insertmacro RegCleanAppHandler
+
+!macro RegisterAccessibleHandler
+ ${RegisterDLL} "$INSTDIR\AccessibleHandler.dll"
+!macroend
+!define RegisterAccessibleHandler "!insertmacro RegisterAccessibleHandler"
+
+; Removes various registry entries for reasons noted below (does not use SHCTX).
+!macro RemoveDeprecatedKeys
+ StrCpy $0 "SOFTWARE\Classes"
+ ; Remove support for launching gopher urls from the shell during install or
+ ; update if the DefaultIcon is from seamonkey.exe.
+ ${RegCleanAppHandler} "gopher"
+
+ ; Remove support for launching chrome urls from the shell during install or
+ ; update if the DefaultIcon is from seamonkey.exe (Bug 301073).
+ ${RegCleanAppHandler} "chrome"
+
+ ; Delete gopher from Capabilities\URLAssociations if it is present.
+ ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
+ StrCpy $0 "Software\Clients\StartMenuInternet\$R9"
+ ClearErrors
+ ReadRegStr $2 HKLM "$0\Capabilities\URLAssociations" "gopher"
+ ${Unless} ${Errors}
+ DeleteRegValue HKLM "$0\Capabilities\URLAssociations" "gopher"
+ ${EndUnless}
+
+ ; Delete gopher from the user's UrlAssociations if it points to SeamonkeyURL.
+ StrCpy $0 "Software\Microsoft\Windows\Shell\Associations\UrlAssociations\gopher"
+ ReadRegStr $2 HKCU "$0\UserChoice" "Progid"
+ ${If} "$2" == "SeamonkeyURL"
+ DeleteRegKey HKCU "$0"
+ ${EndIf}
+
+ ; Remove the SupportUTF8 registry value as it causes MAPI issues on some locales
+ ; with non-ASCII characters in file names.
+ StrCpy $0 "Software\Clients\Mail\${ClientsRegName}"
+ DeleteRegValue HKLM $0 "SupportUTF8"
+!macroend
+!define RemoveDeprecatedKeys "!insertmacro RemoveDeprecatedKeys"
+
+; Removes various directories and files for reasons noted below.
+!macro RemoveDeprecatedFiles
+ ; Remove the Java Console extension (bug 1165156)
+ FindFirst $0 $1 "$INSTDIR\extensions\{CAFEEFAC-00*-0000-*-ABCDEFFEDCBA}"
+ loopDirs:
+ StrCmp $1 "" doneDirs
+ ${If} ${FileExists} "$INSTDIR\extensions\$1"
+ !ifndef NO_LOG
+ ${LogMsg} "Removing Java console edition in: $INSTDIR\extensions\$1"
+ !endif
+ RmDir /r /REBOOTOK "$INSTDIR\extensions\$1"
+ ${EndIf}
+ FindNext $0 $1
+ Goto loopDirs
+ doneDirs:
+ FindClose $0
+!macroend
+!define RemoveDeprecatedFiles "!insertmacro RemoveDeprecatedFiles"
+
+!macro FixClassKeys
+ StrCpy $0 "SOFTWARE\Classes"
+
+ ; BROWSER part
+ ; File handler keys and name value pairs that may need to be created during
+ ; install or upgrade.
+ ReadRegStr $2 SHCTX "$0\.shtml" "Content Type"
+ ${If} $2 == ""
+ StrCpy $2 "$0\.shtml"
+ ${WriteRegStr2} $TmpVal "$0\.shtml" "" "shtmlfile" 0
+ ${WriteRegStr2} $TmpVal "$0\.shtml" "Content Type" "text/html" 0
+ ${WriteRegStr2} $TmpVal "$0\.shtml" "PerceivedType" "text" 0
+ ${EndIf}
+
+ ReadRegStr $2 SHCTX "$0\.xht" "Content Type"
+ ${If} $2 == ""
+ ${WriteRegStr2} $TmpVal "$0\.xht" "" "xhtfile" 0
+ ${WriteRegStr2} $TmpVal "$0\.xht" "Content Type" "application/xhtml+xml" 0
+ ${EndIf}
+
+ ReadRegStr $2 SHCTX "$0\.xhtml" "Content Type"
+ ${If} $2 == ""
+ ${WriteRegStr2} $TmpVal "$0\.xhtml" "" "xhtmlfile" 0
+ ${WriteRegStr2} $TmpVal "$0\.xhtml" "Content Type" "application/xhtml+xml" 0
+ ${EndIf}
+
+ ; Protocol handler keys and name value pairs that may need to be updated during
+ ; install or upgrade.
+
+ ; Store the command to open the app with an url in a register for easy access.
+ GetFullPathName $8 "$INSTDIR\${FileMainEXE}"
+ StrCpy $1 "$\"$8$\" -requestPending -osint -url $\"%1$\""
+ StrCpy $2 "$\"$8$\" -url $\"%1$\""
+
+ ; Always set the file and protocol handlers since they may specify a
+ ; different path and the path is used by Vista when setting associations.
+ ${AddHandlerValues} "$0\SeaMonkeyURL" "$1" "$8,0" "${AppRegName} URL" "delete" "true"
+
+ ; An empty string is used for the 5th param because SeaMonkeyHTML is not a
+ ; protocol handler
+ ${AddHandlerValues} "$0\SeaMonkeyHTML" "$2" \
+ "$INSTDIR\chrome\icons\default\html-file.ico,0" \
+ "${AppRegName} Document" "" ""
+
+ ReadRegStr $2 SHCTX "$0\http\shell\open\command" ""
+ ClearErrors
+ ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1
+ ${Unless} ${Errors}
+ ${AddHandlerValues} "$0\http" "$1" "$8,0" "" "" "true"
+ ${EndUnless}
+
+ ReadRegStr $2 SHCTX "$0\https\shell\open\command" ""
+ ClearErrors
+ ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1
+ ${Unless} ${Errors}
+ ${AddHandlerValues} "$0\https" "$1" "$8,0" "" "" "true"
+ ${EndUnless}
+
+ ReadRegStr $2 SHCTX "$0\ftp\shell\open\command" ""
+ ClearErrors
+ ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1
+ ${Unless} ${Errors}
+ ${AddHandlerValues} "$0\ftp" "$1" "$8,0" "" "" "true"
+ ${EndUnless}
+
+ ; MAIL/NEWS part
+ GetFullPathName $8 "$INSTDIR\${FileMainEXE}"
+
+ StrCpy $1 "$\"$8$\" -compose $\"%1$\""
+ ${AddHandlerValues} "$0\SeaMonkeyCOMPOSE" "$1" "$8,0" "${AppRegNameMail} URL" "delete" ""
+
+ ReadRegStr $2 SHCTX "$0\mailto\shell\open\command" ""
+ ${GetPathFromString} "$2" $3
+ GetFullPathName $2 "$3"
+ ClearErrors
+ ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1
+ ${Unless} ${Errors}
+ ${AddHandlerValues} "$0\mailto" "$1" "$8,0" "" "" ""
+ ${EndUnless}
+
+ StrCpy $1 "$\"$8$\" $\"%1$\""
+ ${AddHandlerValues} "$0\SeaMonkeyEML" "$1" "$INSTDIR\chrome\icons\default\html-file.ico,0" "${AppRegNameMail} Document" "" ""
+
+ StrCpy $1 "$\"$8$\" -osint -mail $\"%1$\""
+ ${AddHandlerValues} "$0\SeaMonkeyNEWS" "$1" "$8,0" "${AppRegNameNews} URL" "delete" ""
+
+ ReadRegStr $2 SHCTX "$0\news\shell\open\command" ""
+ ${GetPathFromString} "$2" $3
+ GetFullPathName $2 "$3"
+ ClearErrors
+ ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1
+ ${Unless} ${Errors}
+ ${AddHandlerValues} "$0\news" "$1" "$8,0" "" "" ""
+ ${EndUnless}
+
+ ReadRegStr $2 SHCTX "$0\snews\shell\open\command" ""
+ ${GetPathFromString} "$2" $3
+ GetFullPathName $2 "$3"
+ ClearErrors
+ ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1
+ ${Unless} ${Errors}
+ ${AddHandlerValues} "$0\snews" "$1" "$8,0" "" "" ""
+ ${EndUnless}
+
+ ReadRegStr $2 SHCTX "$0\nntp\shell\open\command" ""
+ ${GetPathFromString} "$2" $3
+ GetFullPathName $2 "$3"
+ ClearErrors
+ ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1
+ ${Unless} ${Errors}
+ ${AddHandlerValues} "$0\nntp" "$1" "$8,0" "" "" ""
+ ${EndUnless}
+
+ ; remove DI and SOC from the .eml class if it exists
+ ReadRegStr $2 SHCTX "$0\.eml\shell\open\command" ""
+ ${GetPathFromString} "$2" $3
+ GetFullPathName $2 "$3"
+ ClearErrors
+ ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1
+ ${Unless} ${Errors}
+ DeleteRegKey HKLM "$0\.eml\shell\open\command"
+ ${EndUnless}
+
+ ReadRegStr $2 SHCTX "$0\.eml\DefaultIcon" ""
+ ${GetPathFromString} "$2" $3
+ GetFullPathName $2 "$3"
+ ClearErrors
+ ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1
+ ${Unless} ${Errors}
+ DeleteRegKey HKLM "$0\.eml\DefaultIcon"
+ ${EndUnless}
+
+!macroend
+!define FixClassKeys "!insertmacro FixClassKeys"
+
+; Creates the shortcuts log ini file with the appropriate entries if it doesn't
+; already exist.
+!macro CreateShortcutsLog
+ ${GetShortcutsLogPath} $0
+ ${Unless} ${FileExists} "$0"
+ ; Default to ${BrandFullName} for the Start Menu Folder
+ StrCpy $TmpVal "${BrandFullName}"
+ ; Prior to Unicode installer the Start Menu directory was written to the
+ ; registry and this value can be used to set the Start Menu directory.
+ ClearErrors
+ ReadRegStr $0 SHCTX "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})\Main" "Start Menu Folder"
+ ${If} ${Errors}
+ ${FindSMProgramsDir} $0
+ ${If} "$0" != ""
+ StrCpy $TmpVal "$0"
+ ${EndIf}
+ ${Else}
+ StrCpy $TmpVal "$0"
+ ${EndUnless}
+
+ ${LogSMProgramsDirRelPath} "$TmpVal"
+ ${LogSMProgramsShortcut} "${BrandFullName}.lnk"
+ ${LogSMProgramsShortcut} "${BrandFullName} ($(SAFE_MODE)).lnk"
+ ${LogSMProgramsShortcut} "${BrandFullNameInternal} $(MAILNEWS_TEXT).lnk"
+ ${LogSMProgramsShortcut} "$(PROFILE_TEXT).lnk"
+ ${LogQuickLaunchShortcut} "${BrandFullName}.lnk"
+ ${LogDesktopShortcut} "${BrandFullName}.lnk"
+ ${EndUnless}
+!macroend
+!define CreateShortcutsLog "!insertmacro CreateShortcutsLog"
+
+; The MAPI DLLs are copied and the copies are used for the MAPI registration
+; to lessen file in use errors on application update.
+!macro UpgradeMapiDLLs
+ ClearErrors
+ ${DeleteFile} "$INSTDIR\MapiProxy_InUse.dll"
+ ${If} ${Errors}
+ ${DeleteFile} "$INSTDIR\MapiProxy_InUse.dll.moz-delete" ; shouldn't exist
+ Rename "$INSTDIR\MapiProxy_InUse.dll" "$INSTDIR\MapiProxy_InUse.dll.moz-delete"
+ Delete /REBOOTOK "$INSTDIR\MapiProxy_InUse.dll.moz-delete"
+ ${EndIf}
+ CopyFiles /SILENT "$INSTDIR\MapiProxy.dll" "$INSTDIR\MapiProxy_InUse.dll"
+
+ ClearErrors
+ ${DeleteFile} "$INSTDIR\mozMapi32_InUse.dll"
+ ${If} ${Errors}
+ ${DeleteFile} "$INSTDIR\mozMapi32_InUse.dll.moz-delete" ; shouldn't exist
+ Rename "$INSTDIR\mozMapi32_InUse.dll" "$INSTDIR\mozMapi32_InUse.dll.moz-delete"
+ Delete /REBOOTOK "$INSTDIR\mozMapi32_InUse.dll.moz-delete"
+ ${EndIf}
+ CopyFiles /SILENT "$INSTDIR\mozMapi32.dll" "$INSTDIR\mozMapi32_InUse.dll"
+!macroend
+!define UpgradeMapiDLLs "!insertmacro UpgradeMapiDLLs"
+
+; The files to check if they are in use during (un)install so the restart is
+; required message is displayed. All files must be located in the $INSTDIR
+; directory.
+!macro PushFilesToCheck
+ ; The first string to be pushed onto the stack MUST be "end" to indicate
+ ; that there are no more files to check in $INSTDIR and the last string
+ ; should be ${FileMainEXE} so if it is in use the CheckForFilesInUse macro
+ ; returns after the first check.
+ Push "end"
+ Push "AccessibleHandler.dll"
+ Push "AccessibleMarshal.dll"
+ Push "IA2Marshal.dll"
+ Push "freebl3.dll"
+ Push "nssckbi.dll"
+ Push "nspr4.dll"
+ Push "nssdbm3.dll"
+ Push "sqlite3.dll"
+ Push "mozsqlite3.dll"
+ Push "xpcom.dll"
+ Push "crashreporter.exe"
+ Push "minidump-analyzer.exe"
+ Push "pingsender.exe"
+ Push "updater.exe"
+ Push "xpicleanup.exe"
+ Push "MapiProxy.dll"
+ Push "MapiProxy_InUse.dll"
+ Push "mozMapi32.dll"
+ Push "mozMapi32_InUse.dll"
+ Push "${FileMainEXE}"
+!macroend
+!define PushFilesToCheck "!insertmacro PushFilesToCheck"
+
+; The !ifdef NO_LOG prevents warnings when compiling the installer since these
+; functions are currently only used by the uninstaller.
+!ifdef NO_LOG
+Function SetAsDefaultMailAppUser
+ SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU)
+ ${SetHandlersMail}
+ ClearErrors
+ ReadRegStr $0 HKLM "Software\RegisteredApplications" "${AppRegNameMail}"
+ ; Only register as the handler if the app registry name exists
+ ; under the RegisteredApplications registry key.
+ ${Unless} ${Errors}
+ AppAssocReg::SetAppAsDefaultAll "${AppRegNameMail}"
+ ${EndUnless}
+FunctionEnd
+
+Function SetAsDefaultNewsAppUser
+ SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU)
+ ${SetHandlersNews}
+ ClearErrors
+ ReadRegStr $0 HKLM "Software\RegisteredApplications" "${AppRegNameNews}"
+ ; Only register as the handler if the app registry name exists
+ ; under the RegisteredApplications registry key.
+ ${Unless} ${Errors}
+ AppAssocReg::SetAppAsDefaultAll "${AppRegNameNews}"
+ ${EndUnless}
+FunctionEnd
+!endif
+
diff --git a/comm/suite/installer/windows/nsis/uninstaller.nsi b/comm/suite/installer/windows/nsis/uninstaller.nsi
new file mode 100644
index 0000000000..8a6a312e59
--- /dev/null
+++ b/comm/suite/installer/windows/nsis/uninstaller.nsi
@@ -0,0 +1,580 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# Also requires:
+# AppAssocReg http://nsis.sourceforge.net/Application_Association_Registration_plug-in
+# CityHash http://mxr.mozilla.org/mozilla-central/source/other-licenses/nsis/Contrib/CityHash
+# ShellLink http://nsis.sourceforge.net/ShellLink_plug-in
+# UAC http://nsis.sourceforge.net/UAC_plug-in
+
+
+; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs
+!verbose 3
+
+; 7-Zip provides better compression than the lzma from NSIS so we add the files
+; uncompressed and use 7-Zip to create a SFX archive of it
+SetDatablockOptimize on
+SetCompress off
+CRCCheck on
+
+RequestExecutionLevel user
+
+Unicode true
+ManifestSupportedOS all
+ManifestDPIAware true
+
+!addplugindir ./
+
+; prevents compiling of the reg write logging.
+!define NO_LOG
+
+Var TmpVal
+
+; Other included files may depend upon these includes!
+; The following includes are provided by NSIS.
+!include FileFunc.nsh
+!include LogicLib.nsh
+!include MUI.nsh
+!include WinMessages.nsh
+!include WinVer.nsh
+!include WordFunc.nsh
+
+!insertmacro GetSize
+!insertmacro GetOptions
+!insertmacro GetParameters
+!insertmacro GetParent
+!insertmacro StrFilter
+!insertmacro WordFind
+
+!insertmacro un.GetParent
+
+; The following includes are custom.
+!include branding.nsi
+!include defines.nsi
+!include common.nsh
+!include locales.nsi
+
+; This is named BrandShortName helper because we use this for software update
+; post update cleanup.
+VIAddVersionKey "FileDescription" "${BrandShortName} Helper"
+VIAddVersionKey "OriginalFilename" "helper.exe"
+
+; Most commonly used macros for managing shortcuts
+!insertmacro _LoggingShortcutsCommon
+
+!insertmacro AddDisabledDDEHandlerValues
+!insertmacro AddHandlerValues
+!insertmacro CheckIfRegistryKeyExists
+!insertmacro CleanUpdateDirectories
+!insertmacro CleanVirtualStore
+!insertmacro FindSMProgramsDir
+!insertmacro GetLongPath
+!insertmacro GetPathFromString
+!insertmacro InitHashAppModelId
+!insertmacro IsHandlerForInstallDir
+!insertmacro RegCleanMain
+!insertmacro RegCleanUninstall
+!insertmacro SetBrandNameVars
+!insertmacro UnloadUAC
+!insertmacro UpdateShortcutAppModelIDs
+!insertmacro WordReplace
+!insertmacro WriteRegDWORD2
+!insertmacro WriteRegStr2
+
+!insertmacro un.ChangeMUIHeaderImage
+!insertmacro un.CheckForFilesInUse
+!insertmacro un.CleanUpdateDirectories
+!insertmacro un.CleanVirtualStore
+!insertmacro un.DeleteShortcuts
+!insertmacro un.GetLongPath
+!insertmacro un.GetSecondInstallPath
+!insertmacro un.InitHashAppModelId
+!insertmacro un.ManualCloseAppPrompt
+!insertmacro un.ParseUninstallLog
+!insertmacro un.RegCleanAppHandler
+!insertmacro un.RegCleanFileHandler
+!insertmacro un.RegCleanMain
+!insertmacro un.RegCleanProtocolHandler
+!insertmacro un.RegCleanUninstall
+!insertmacro un.RemoveQuotesFromPath
+!insertmacro un.SetBrandNameVars
+
+!include shared.nsh
+
+; Helper macros for ui callbacks. Insert these after shared.nsh
+!insertmacro OnEndCommon
+!insertmacro UninstallOnInitCommon
+
+!insertmacro un.OnEndCommon
+!insertmacro un.UninstallUnOnInitCommon
+
+Name "${BrandFullName}"
+OutFile "helper.exe"
+!ifdef HAVE_64BIT_BUILD
+ InstallDir "$PROGRAMFILES64\${BrandFullName}\"
+!else
+ InstallDir "$PROGRAMFILES32\${BrandFullName}\"
+!endif
+ShowUnInstDetails nevershow
+
+################################################################################
+# Modern User Interface - MUI
+
+!define MUI_ABORTWARNING
+!define MUI_ICON setup.ico
+!define MUI_UNICON setup.ico
+!define MUI_WELCOMEPAGE_TITLE_3LINES
+!define MUI_HEADERIMAGE
+!define MUI_HEADERIMAGE_RIGHT
+!define MUI_UNWELCOMEFINISHPAGE_BITMAP wizWatermark.bmp
+
+; Use a right to left header image when the language is right to left
+!ifdef ${AB_CD}_rtl
+!define MUI_HEADERIMAGE_BITMAP_RTL wizHeaderRTL.bmp
+!else
+!define MUI_HEADERIMAGE_BITMAP wizHeader.bmp
+!endif
+
+/**
+ * Uninstall Pages
+ */
+; Welcome Page
+!define MUI_PAGE_CUSTOMFUNCTION_PRE un.preWelcome
+!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.leaveWelcome
+!insertmacro MUI_UNPAGE_WELCOME
+
+; Uninstall Confirm Page
+UninstPage custom un.preConfirm un.leaveConfirm
+
+; Remove Files Page
+!insertmacro MUI_UNPAGE_INSTFILES
+
+; Don't setup the survey controls, functions, etc. when the application has
+; defined NO_UNINSTALL_SURVEY
+!ifndef NO_UNINSTALL_SURVEY
+!define MUI_PAGE_CUSTOMFUNCTION_PRE un.preFinish
+!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
+!define MUI_FINISHPAGE_SHOWREADME ""
+!define MUI_FINISHPAGE_SHOWREADME_TEXT $(SURVEY_TEXT)
+!define MUI_FINISHPAGE_SHOWREADME_FUNCTION un.Survey
+!endif
+
+!insertmacro MUI_UNPAGE_FINISH
+
+; Use the default dialog for IDD_VERIFY for a simple Banner
+ChangeUI IDD_VERIFY "${NSISDIR}\Contrib\UIs\default.exe"
+
+################################################################################
+# Install Sections
+; Empty section required for the installer to compile as an uninstaller
+Section ""
+SectionEnd
+
+################################################################################
+# Uninstall Sections
+
+Section "Uninstall"
+ SetDetailsPrint textonly
+ DetailPrint $(STATUS_UNINSTALL_MAIN)
+ SetDetailsPrint none
+
+ ; Delete the app exe to prevent launching the app while we are uninstalling.
+ ClearErrors
+ ${DeleteFile} "$INSTDIR\${FileMainEXE}"
+ ${If} ${Errors}
+ ; If the user closed the application it can take several seconds for it to
+ ; shut down completely. If the application is being used by another user we
+ ; can still delete the files when the system is restarted.
+ Sleep 5000
+ ${DeleteFile} "$INSTDIR\${FileMainEXE}"
+ ClearErrors
+ ${EndIf}
+
+ SetShellVarContext current ; Set SHCTX to HKCU
+ ${un.RegCleanMain} "Software\Mozilla"
+ ${un.RegCleanUninstall}
+ ${un.DeleteShortcuts}
+
+ ; setup the application model id registration value
+ ${un.InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs"
+
+ ; Unregister resources associated with Win7 taskbar jump lists.
+ ${If} "$AppUserModelID" != ""
+ ApplicationID::UninstallJumpLists "$AppUserModelID"
+ ${EndIf}
+
+ ; Remove the updates directory for Vista and above
+ ${un.CleanUpdateDirectories} "Mozilla\SeaMonkey" "Mozilla\updates"
+
+ ; Remove any app model id's stored in the registry for this install path
+ DeleteRegValue HKCU "Software\Mozilla\${AppName}\TaskBarIDs" "$INSTDIR"
+ DeleteRegValue HKLM "Software\Mozilla\${AppName}\TaskBarIDs" "$INSTDIR"
+
+ ClearErrors
+ WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
+ ${If} ${Errors}
+ StrCpy $TmpVal "HKCU" ; used primarily for logging
+ ${Else}
+ SetShellVarContext all ; Set SHCTX to HKLM
+ DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
+ StrCpy $TmpVal "HKLM" ; used primarily for logging
+ ${un.RegCleanMain} "Software\Mozilla"
+ ${un.RegCleanUninstall}
+ ${un.DeleteShortcuts}
+ ${EndIf}
+
+ ${un.RegCleanAppHandler} "SeaMonkeyURL"
+ ${un.RegCleanAppHandler} "SeaMonkeyHTML"
+ ${un.RegCleanAppHandler} "SeaMonkeyMAIL"
+ ${un.RegCleanAppHandler} "SeaMonkeyNEWS"
+ ${un.RegCleanAppHandler} "SeaMonkeyEML"
+ ${un.RegCleanProtocolHandler} "http"
+ ${un.RegCleanProtocolHandler} "https"
+ ${un.RegCleanProtocolHandler} "ftp"
+ ${un.RegCleanProtocolHandler} "mailto"
+ ${un.RegCleanProtocolHandler} "news"
+ ${un.RegCleanProtocolHandler} "nntp"
+ ${un.RegCleanProtocolHandler} "snews"
+
+ ClearErrors
+ ReadRegStr $R9 HKCR "SeaMonkeyEML" ""
+ ; Don't clean up the file handlers if the SeaMonkeyEML key still exists since
+ ; there could be a second installation that may be the default file handler
+ ${If} ${Errors}
+ ${un.RegCleanFileHandler} ".eml" "SeaMonkeyEML"
+ ${EndIf}
+
+ ClearErrors
+ ReadRegStr $R9 HKCR "SeaMonkeyHTML" ""
+ ; Don't clean up the file handlers if the SeaMonkeyHTML key still exists since
+ ; there could be a second installation that may be the default file handler
+ ${If} ${Errors}
+ ${un.RegCleanFileHandler} ".htm" "SeaMonkeyHTML"
+ ${un.RegCleanFileHandler} ".html" "SeaMonkeyHTML"
+ ${un.RegCleanFileHandler} ".shtml" "SeaMonkeyHTML"
+ ${un.RegCleanFileHandler} ".webm" "SeaMonkeyHTML"
+ ${un.RegCleanFileHandler} ".xht" "SeaMonkeyHTML"
+ ${un.RegCleanFileHandler} ".xhtml" "SeaMonkeyHTML"
+ ${EndIf}
+
+ SetShellVarContext all ; Set SHCTX to HKLM
+ ${un.GetSecondInstallPath} "Software\Mozilla" $R9
+ ${If} $R9 == "false"
+ SetShellVarContext current ; Set SHCTX to HKCU
+ ${un.GetSecondInstallPath} "Software\Mozilla" $R9
+ ${EndIf}
+
+ StrCpy $0 "Software\Clients\StartMenuInternet\${FileMainEXE}\shell\open\command"
+ ReadRegStr $R1 HKLM "$0" ""
+ ${un.RemoveQuotesFromPath} "$R1" $R1
+ ${un.GetParent} "$R1" $R1
+
+ ; Only remove the StartMenuInternet key if it refers to this install location.
+ ; The StartMenuInternet registry key is independent of the default browser
+ ; settings. The XPInstall base un-installer always removes this key if it is
+ ; uninstalling the default browser and it will always replace the keys when
+ ; installing even if there is another install of SeaMonkey that is set as the
+ ; default browser. Now the key is always updated on install but it is only
+ ; removed if it refers to this install location.
+ ${If} "$INSTDIR" == "$R1"
+ DeleteRegKey HKLM "Software\Clients\StartMenuInternet\${FileMainEXE}"
+ DeleteRegValue HKLM "Software\RegisteredApplications" "${AppRegName}"
+ ${EndIf}
+
+ StrCpy $0 "Software\Clients\Mail\${BrandFullNameInternal}\shell\open\command"
+ ReadRegStr $R1 HKLM "$0" ""
+ ${un.RemoveQuotesFromPath} "$R1" $R1
+ ${un.GetParent} "$R1" $R1
+
+ ; Only remove the Clients\Mail and Clients\News key if it refers to this
+ ; install location. The Clients\Mail & Clients\News keys are independent
+ ; of the default app for the OS settings. The XPInstall base un-installer
+ ; always removes these keys if it is uninstalling the default app and it
+ ; will always replace the keys when installing even if there is another
+ ; install of SeaMonkey that is set as the default app. Now the keys are always
+ ; updated on install but are only removed if they refer to this install
+ ; location.
+ ${If} "$INSTDIR" == "$R1"
+ DeleteRegKey HKLM "Software\Clients\Mail\${BrandFullNameInternal}"
+ DeleteRegKey HKLM "Software\Clients\News\${BrandFullNameInternal}"
+ DeleteRegValue HKLM "Software\RegisteredApplications" "${AppRegNameMail}"
+ DeleteRegValue HKLM "Software\RegisteredApplications" "${AppRegNameNews}"
+ ${EndIf}
+
+ StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\App Paths\${FileMainEXE}"
+ ${If} $R9 == "false"
+ DeleteRegKey HKLM "$0"
+ DeleteRegKey HKCU "$0"
+ StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\${FileMainEXE}"
+ DeleteRegKey HKLM "$0"
+ DeleteRegKey HKCU "$0"
+ StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\plugin-container.exe"
+ DeleteRegKey HKLM "$0"
+ DeleteRegKey HKCU "$0"
+ ${Else}
+ ReadRegStr $R1 HKLM "$0" ""
+ ${un.RemoveQuotesFromPath} "$R1" $R1
+ ${un.GetParent} "$R1" $R1
+ ${If} "$INSTDIR" == "$R1"
+ WriteRegStr HKLM "$0" "" "$R9"
+ ${un.GetParent} "$R9" $R1
+ WriteRegStr HKLM "$0" "Path" "$R1"
+ ${EndIf}
+ ${EndIf}
+
+ ; Remove directories and files we always control before parsing the uninstall
+ ; log so empty directories can be removed.
+ ${If} ${FileExists} "$INSTDIR\updates"
+ RmDir /r /REBOOTOK "$INSTDIR\updates"
+ ${EndIf}
+ ${If} ${FileExists} "$INSTDIR\defaults\shortcuts"
+ RmDir /r /REBOOTOK "$INSTDIR\defaults\shortcuts"
+ ${EndIf}
+ ${If} ${FileExists} "$INSTDIR\distribution"
+ RmDir /r /REBOOTOK "$INSTDIR\distribution"
+ ${EndIf}
+ ${If} ${FileExists} "$INSTDIR\removed-files"
+ Delete /REBOOTOK "$INSTDIR\removed-files"
+ ${EndIf}
+
+ ; Application update won't add these files to the uninstall log so delete
+ ; them if they still exist.
+ ${If} ${FileExists} "$INSTDIR\MapiProxy_InUse.dll"
+ Delete /REBOOTOK "$INSTDIR\MapiProxy_InUse.dll"
+ ${EndIf}
+ ${If} ${FileExists} "$INSTDIR\mozMapi32_InUse.dll"
+ Delete /REBOOTOK "$INSTDIR\mozMapi32_InUse.dll"
+ ${EndIf}
+
+ ; Remove files that may be left behind by the application in the
+ ; VirtualStore directory.
+ ${un.CleanVirtualStore}
+
+ ; Only unregister the dll if the registration points to this installation
+ ReadRegStr $R1 HKCR "CLSID\{0D68D6D0-D93D-4D08-A30D-F00DD1F45B24}\InProcServer32" ""
+ ${If} "$INSTDIR\AccessibleMarshal.dll" == "$R1"
+ ${UnregisterDLL} "$INSTDIR\AccessibleMarshal.dll"
+ ${EndIf}
+
+ ; Only unregister the dll if the registration points to this installation
+ ReadRegStr $R1 HKCR "CLSID\${AccessibleHandlerCLSID}\InProcHandler32" ""
+ ${If} "$INSTDIR\AccessibleHandler.dll" == "$R1"
+ ${UnregisterDLL} "$INSTDIR\AccessibleHandler.dll"
+ ${EndIf}
+
+ ; Parse the uninstall log to unregister dll's and remove all installed
+ ; files / directories this install is responsible for.
+ ${un.ParseUninstallLog}
+
+ ; Remove the uninstall directory that we control
+ RmDir /r /REBOOTOK "$INSTDIR\uninstall"
+
+ ; Remove the installation directory if it is empty
+ ${RemoveDir} "$INSTDIR"
+
+ ; If seamonkey.exe was successfully deleted yet we still need to restart to
+ ; remove other files create a dummy seamonkey.exe.moz-delete to prevent the
+ ; installer from allowing an install without restart when it is required
+ ; to complete an uninstall.
+ ${If} ${RebootFlag}
+ ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}.moz-delete"
+ FileOpen $0 "$INSTDIR\${FileMainEXE}.moz-delete" w
+ FileWrite $0 "Will be deleted on restart"
+ Delete /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-delete"
+ FileClose $0
+ ${EndUnless}
+ ${EndIf}
+
+
+ ; Refresh desktop icons otherwise the start menu internet item won't be
+ ; removed and other ugly things will happen like recreation of the app's
+ ; clients registry key by the OS under some conditions.
+ System::Call "shell32::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)"
+SectionEnd
+
+################################################################################
+# Helper Functions
+
+; Don't setup the survey controls, functions, etc. when the application has
+; defined NO_UNINSTALL_SURVEY
+!ifndef NO_UNINSTALL_SURVEY
+Function un.Survey
+ Exec "$\"$TmpVal$\" $\"${SurveyURL}$\""
+FunctionEnd
+!endif
+
+################################################################################
+# Language
+
+!insertmacro MOZ_MUI_LANGUAGE 'baseLocale'
+!verbose push
+!verbose 3
+!include "overrideLocale.nsh"
+!include "customLocale.nsh"
+!verbose pop
+
+; Set this after the locale files to override it if it is in the locale. Using
+; " " for BrandingText will hide the "Nullsoft Install System..." branding.
+BrandingText " "
+
+################################################################################
+# Page pre, show, and leave functions
+
+Function un.preWelcome
+ ${If} ${FileExists} "$INSTDIR\distribution\modern-wizard.bmp"
+ Delete "$PLUGINSDIR\modern-wizard.bmp"
+ CopyFiles /SILENT "$INSTDIR\distribution\modern-wizard.bmp" "$PLUGINSDIR\modern-wizard.bmp"
+ ${EndIf}
+FunctionEnd
+
+Function un.leaveWelcome
+ ${If} ${FileExists} "$INSTDIR\${FileMainEXE}"
+ Banner::show /NOUNLOAD "$(BANNER_CHECK_EXISTING)"
+
+ ${If} "$TmpVal" == "FoundMessageWindow"
+ Sleep 5000
+ ${EndIf}
+
+ ${PushFilesToCheck}
+
+ ${un.CheckForFilesInUse} $TmpVal
+
+ Banner::destroy
+
+ ${If} "$TmpVal" == "true"
+ StrCpy $TmpVal "FoundMessageWindow"
+ ${un.ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_UNINSTALL)"
+ StrCpy $TmpVal "true"
+ ${EndIf}
+ ${EndIf}
+FunctionEnd
+
+Function un.preConfirm
+ ${If} ${FileExists} "$INSTDIR\distribution\modern-header.bmp"
+ ${AndIf} $hHeaderBitmap == ""
+ Delete "$PLUGINSDIR\modern-header.bmp"
+ CopyFiles /SILENT "$INSTDIR\distribution\modern-header.bmp" "$PLUGINSDIR\modern-header.bmp"
+ ${un.ChangeMUIHeaderImage} "$PLUGINSDIR\modern-header.bmp"
+ ${EndIf}
+
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Settings" NumFields "3"
+
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Type "label"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Text "$(UN_CONFIRM_UNINSTALLED_FROM)"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Left "0"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Right "-1"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Top "5"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Bottom "15"
+
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Type "text"
+ ; The contents of this control must be set as follows in the pre function
+ ; ${MUI_INSTALLOPTIONS_READ} $1 "unconfirm.ini" "Field 2" "HWND"
+ ; SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" State ""
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Left "0"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Right "-1"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Top "17"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Bottom "30"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" flags "READONLY"
+
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Type "label"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Text "$(UN_CONFIRM_CLICK)"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Left "0"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Right "-1"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Top "130"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Bottom "150"
+
+ ${If} "$TmpVal" == "true"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Type "label"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Text "$(SUMMARY_REBOOT_REQUIRED_UNINSTALL)"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Left "0"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Right "-1"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Top "35"
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Bottom "45"
+
+ WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Settings" NumFields "4"
+ ${EndIf}
+
+ !insertmacro MUI_HEADER_TEXT "$(UN_CONFIRM_PAGE_TITLE)" "$(UN_CONFIRM_PAGE_SUBTITLE)"
+ ; The Summary custom page has a textbox that will automatically receive
+ ; focus. This sets the focus to the Install button instead.
+ !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "unconfirm.ini"
+ GetDlgItem $0 $HWNDPARENT 1
+ System::Call "user32::SetFocus(i r0, i 0x0007, i,i)i"
+ ${MUI_INSTALLOPTIONS_READ} $1 "unconfirm.ini" "Field 2" "HWND"
+ SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR"
+ !insertmacro MUI_INSTALLOPTIONS_SHOW
+FunctionEnd
+
+Function un.leaveConfirm
+ ; Try to delete the app executable and if we can't delete it try to find the
+ ; app's message window and prompt the user to close the app. This allows
+ ; running an instance that is located in another directory. If for whatever
+ ; reason there is no message window we will just rename the app's files and
+ ; then remove them on restart if they are in use.
+ ClearErrors
+ ${DeleteFile} "$INSTDIR\${FileMainEXE}"
+ ${If} ${Errors}
+ ${un.ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_UNINSTALL)"
+ ${EndIf}
+FunctionEnd
+
+!ifndef NO_UNINSTALL_SURVEY
+Function un.preFinish
+ ; Do not modify the finish page if there is a reboot pending
+ ${Unless} ${RebootFlag}
+ ; Setup the survey controls, functions, etc.
+ StrCpy $TmpVal "SOFTWARE\Microsoft\IE Setup\Setup"
+ ClearErrors
+ ReadRegStr $0 HKLM $TmpVal "Path"
+ ${If} ${Errors}
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "NumFields" "3"
+ ${Else}
+ ExpandEnvStrings $0 "$0" ; this value will usually contain %programfiles%
+ ${If} $0 != "\"
+ StrCpy $0 "$0\"
+ ${EndIf}
+ StrCpy $0 "$0\iexplore.exe"
+ ClearErrors
+ GetFullPathName $TmpVal $0
+ ${If} ${Errors}
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "NumFields" "3"
+ ${Else}
+ ; When we add an optional action to the finish page the cancel button
+ ; is enabled. This disables it and leaves the finish button as the
+ ; only choice.
+ !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "cancelenabled" "0"
+ ${EndIf}
+ ${EndIf}
+ ${EndUnless}
+FunctionEnd
+!endif
+
+################################################################################
+# Initialization Functions
+
+Function .onInit
+ ; We need this set up for most of the helper.exe operations.
+ !ifdef AppName
+ ${InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs"
+ !endif
+ ${UninstallOnInitCommon}
+FunctionEnd
+
+Function un.onInit
+ StrCpy $LANGUAGE 0
+
+ ${un.UninstallUnOnInitCommon}
+
+ !insertmacro InitInstallOptionsFile "unconfirm.ini"
+FunctionEnd
+
+Function .onGUIEnd
+ ${OnEndCommon}
+FunctionEnd
+
+Function un.onGUIEnd
+ ${un.OnEndCommon}
+FunctionEnd
+
diff --git a/comm/suite/installer/windows/nsis/updater_append.ini b/comm/suite/installer/windows/nsis/updater_append.ini
new file mode 100644
index 0000000000..1b4bc1be7d
--- /dev/null
+++ b/comm/suite/installer/windows/nsis/updater_append.ini
@@ -0,0 +1,16 @@
+; This Source Code Form is subject to the terms of the Mozilla Public
+; License, v. 2.0. If a copy of the MPL was not distributed with this
+; file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+
+; IMPORTANT: This file should always start with a newline in case a locale
+; provided updater.ini does not end with a newline.
+; Application to launch after an update has been successfully applied. This
+; must be in the same directory or a sub-directory of the directory of the
+; application executable that initiated the software update.
+[PostUpdateWin]
+; ExeRelPath is the path to the PostUpdateWin executable relative to the
+; application executable.
+ExeRelPath=uninstall\helper.exe
+; ExeArg is the argument to pass to the PostUpdateWin exe
+ExeArg=/PostUpdate