From ac7026e25a172156fd64cb543e49dc23fa6046fd Mon Sep 17 00:00:00 2001 From: Margaret Leibovic Date: Mon, 29 Sep 2014 11:08:27 -0700 Subject: [PATCH 01/60] Bug 1050457 - Increase top/right/left values of edit_text_focus layer-list drawable to fix pixel issue on 4.1. r=liuche --- mobile/android/search/res/drawable/edit_text_focused.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mobile/android/search/res/drawable/edit_text_focused.xml b/mobile/android/search/res/drawable/edit_text_focused.xml index 193a48192ba..a0e8a6b4ef4 100644 --- a/mobile/android/search/res/drawable/edit_text_focused.xml +++ b/mobile/android/search/res/drawable/edit_text_focused.xml @@ -6,9 +6,9 @@ + android:top="-3dp" + android:right="-3dp" + android:left="-3dp"> Date: Mon, 29 Sep 2014 11:08:30 -0700 Subject: [PATCH 02/60] Bug 1063193 - Update Wikipedia search plugin so that it won't redirect to a new domain. r=mfinkle --- mobile/locales/en-US/searchplugins/wikipedia.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/locales/en-US/searchplugins/wikipedia.xml b/mobile/locales/en-US/searchplugins/wikipedia.xml index 55f5ff48f80..22d4073c075 100644 --- a/mobile/locales/en-US/searchplugins/wikipedia.xml +++ b/mobile/locales/en-US/searchplugins/wikipedia.xml @@ -10,7 +10,7 @@ - + From 513418338ffb5b2c9901e15ac42562345e8cbcab Mon Sep 17 00:00:00 2001 From: Margaret Leibovic Date: Mon, 29 Sep 2014 11:08:32 -0700 Subject: [PATCH 03/60] Bug 1074204 - Show correct android:summary text for sync. r=liuche --- mobile/android/base/resources/xml/preferences.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/android/base/resources/xml/preferences.xml b/mobile/android/base/resources/xml/preferences.xml index 25513792f29..0c9d8515fae 100644 --- a/mobile/android/base/resources/xml/preferences.xml +++ b/mobile/android/base/resources/xml/preferences.xml @@ -13,7 +13,7 @@ Date: Mon, 29 Sep 2014 09:51:45 -0700 Subject: [PATCH 04/60] Bug 1071226 - Part 1: Use same menu asset for private browsing mode. r=lucasr --- .../drawable-large/new_tablet_menu_level.xml | 22 ------------------- .../new_tablet_browser_toolbar.xml | 2 +- 2 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 mobile/android/base/resources/drawable-large/new_tablet_menu_level.xml diff --git a/mobile/android/base/resources/drawable-large/new_tablet_menu_level.xml b/mobile/android/base/resources/drawable-large/new_tablet_menu_level.xml deleted file mode 100644 index 8c3ccdd7f89..00000000000 --- a/mobile/android/base/resources/drawable-large/new_tablet_menu_level.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/mobile/android/base/resources/layout-large-v11/new_tablet_browser_toolbar.xml b/mobile/android/base/resources/layout-large-v11/new_tablet_browser_toolbar.xml index 3279df511fe..f109edafa1c 100644 --- a/mobile/android/base/resources/layout-large-v11/new_tablet_browser_toolbar.xml +++ b/mobile/android/base/resources/layout-large-v11/new_tablet_browser_toolbar.xml @@ -91,7 +91,7 @@ style="@style/UrlBar.ImageButton" android:layout_alignLeft="@id/menu" android:layout_alignRight="@id/menu" - android:src="@drawable/new_tablet_menu_level" + android:src="@drawable/new_tablet_menu" android:visibility="gone"/> - #FFFFFF + #F5F5F5 #DDDDDD #A4A7A9 From 67c57e95cd5c1ab63883b5b865993b54cd0e06d0 Mon Sep 17 00:00:00 2001 From: Nick Alexander Date: Mon, 29 Sep 2014 11:27:11 -0700 Subject: [PATCH 06/60] Bug 1072954 - Iterate entire list in RemoteClientsDialogFragment onClick. r=trivial --- mobile/android/base/RemoteClientsDialogFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/android/base/RemoteClientsDialogFragment.java b/mobile/android/base/RemoteClientsDialogFragment.java index 4701d602abf..84f480388bc 100644 --- a/mobile/android/base/RemoteClientsDialogFragment.java +++ b/mobile/android/base/RemoteClientsDialogFragment.java @@ -102,7 +102,7 @@ public class RemoteClientsDialogFragment extends DialogFragment { final AlertDialog dialog = (AlertDialog) dialogInterface; final SparseBooleanArray checkedItemPositions = dialog.getListView().getCheckedItemPositions(); final ArrayList checked = new ArrayList(); - for (int i = 0; i < checkedItemPositions.size(); i++) { + for (int i = 0; i < clients.size(); i++) { if (checkedItemPositions.get(i)) { checked.add(clients.get(i)); } From fef23c81908f726e7af301a9ffd28109fea157f2 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Mon, 29 Sep 2014 11:35:11 -0700 Subject: [PATCH 07/60] Bug 1073449 - Correct favicon size. r=lucasr --- mobile/android/base/resources/values/dimens.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mobile/android/base/resources/values/dimens.xml b/mobile/android/base/resources/values/dimens.xml index e775673ec13..4cda485d95a 100644 --- a/mobile/android/base/resources/values/dimens.xml +++ b/mobile/android/base/resources/values/dimens.xml @@ -12,7 +12,9 @@ 12dp 48dp 20dp - 25.33dip + + 21.33dip 2dp 48dp From 0ef4b0288569e361ae84d3ed9b01fe8a650c4697 Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:50:52 -0700 Subject: [PATCH 08/60] Mac v2 signing - Bug 1047584 - Enable DMG v2 signing. r=bhearsum --- toolkit/mozapps/installer/signing.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toolkit/mozapps/installer/signing.mk b/toolkit/mozapps/installer/signing.mk index 1d877c28e25..7c0fcef0b2b 100644 --- a/toolkit/mozapps/installer/signing.mk +++ b/toolkit/mozapps/installer/signing.mk @@ -22,7 +22,7 @@ SIGN_EXCLUDES := \ endif # Windows ifeq (Darwin, $(OS_ARCH)) -MOZ_INTERNAL_SIGNING_FORMAT := dmg +MOZ_INTERNAL_SIGNING_FORMAT := dmgv2 MOZ_EXTERNAL_SIGNING_FORMAT := endif # Darwin From e27f45a6cc74df8d698a28e8af4b341bb6de6f83 Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:50:56 -0700 Subject: [PATCH 09/60] Mac v2 signing - Bug 1047584 - Modify the .app file structure to allow for OSX v2 signing. r=bsmedberg --- browser/app/Makefile.in | 9 +-- browser/app/macbuild/Contents/CodeResources | 1 - browser/app/macbuild/Contents/Info.plist.in | 2 +- browser/app/macbuild/Contents/MacOS-files.in | 5 ++ .../Contents/_CodeSignature/CodeResources | 71 ------------------- browser/installer/package-manifest.in | 58 ++++++++++++--- config/createprecomplete.py | 2 +- toolkit/locales/Makefile.in | 2 +- toolkit/mozapps/installer/packager.mk | 4 +- 9 files changed, 60 insertions(+), 94 deletions(-) delete mode 100644 browser/app/macbuild/Contents/CodeResources create mode 100644 browser/app/macbuild/Contents/MacOS-files.in delete mode 100644 browser/app/macbuild/Contents/_CodeSignature/CodeResources diff --git a/browser/app/Makefile.in b/browser/app/Makefile.in index 267292380f9..c5a126e6a28 100644 --- a/browser/app/Makefile.in +++ b/browser/app/Makefile.in @@ -97,12 +97,6 @@ AB := $(firstword $(subst -, ,$(AB_CD))) clean clobber repackage:: $(RM) -r $(dist_dest) -ifdef LIBXUL_SDK -APPFILES = Resources -else -APPFILES = MacOS -endif - MAC_BUNDLE_VERSION = $(shell $(PYTHON) $(srcdir)/macversion.py --version=$(MOZ_APP_VERSION) --buildid=$(DEPTH)/config/buildid) .PHONY: repackage @@ -113,7 +107,8 @@ tools repackage:: $(PROGRAM) rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents/Resources/English.lproj/ $(dist_dest)/Contents/Resources/$(AB).lproj sed -e 's/%APP_VERSION%/$(MOZ_APP_VERSION)/' -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' -e 's/%MOZ_MACBUNDLE_ID%/$(MOZ_MACBUNDLE_ID)/' -e 's/%MAC_BUNDLE_VERSION%/$(MAC_BUNDLE_VERSION)/' $(srcdir)/macbuild/Contents/Info.plist.in > $(dist_dest)/Contents/Info.plist sed -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' $(srcdir)/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in | iconv -f UTF-8 -t UTF-16 > $(dist_dest)/Contents/Resources/$(AB).lproj/InfoPlist.strings - rsync -a $(DIST)/bin/ $(dist_dest)/Contents/$(APPFILES) + rsync -a --exclude-from='$(srcdir)/macbuild/Contents/MacOS-files.in' $(DIST)/bin/ $(dist_dest)/Contents/Resources + rsync -a --include-from='$(srcdir)/macbuild/Contents/MacOS-files.in' --exclude '*' $(DIST)/bin/ $(dist_dest)/Contents/MacOS $(RM) $(dist_dest)/Contents/MacOS/$(PROGRAM) rsync -aL $(PROGRAM) $(dist_dest)/Contents/MacOS cp -RL $(DIST)/branding/firefox.icns $(dist_dest)/Contents/Resources/firefox.icns diff --git a/browser/app/macbuild/Contents/CodeResources b/browser/app/macbuild/Contents/CodeResources deleted file mode 100644 index 1a65e20cbea..00000000000 --- a/browser/app/macbuild/Contents/CodeResources +++ /dev/null @@ -1 +0,0 @@ -_CodeSignature/CodeResources \ No newline at end of file diff --git a/browser/app/macbuild/Contents/Info.plist.in b/browser/app/macbuild/Contents/Info.plist.in index 5d3da8e2ecf..ed2cf8dd282 100644 --- a/browser/app/macbuild/Contents/Info.plist.in +++ b/browser/app/macbuild/Contents/Info.plist.in @@ -147,7 +147,7 @@ CFBundleGetInfoString %MAC_APP_NAME% %APP_VERSION% CFBundleIconFile - firefox + firefox.icns CFBundleIdentifier %MOZ_MACBUNDLE_ID% CFBundleInfoDictionaryVersion diff --git a/browser/app/macbuild/Contents/MacOS-files.in b/browser/app/macbuild/Contents/MacOS-files.in new file mode 100644 index 00000000000..79808584427 --- /dev/null +++ b/browser/app/macbuild/Contents/MacOS-files.in @@ -0,0 +1,5 @@ +/*.app/*** +/*.dylib +/firefox-bin +/webapprt-stub +/XUL diff --git a/browser/app/macbuild/Contents/_CodeSignature/CodeResources b/browser/app/macbuild/Contents/_CodeSignature/CodeResources deleted file mode 100644 index 6f6e20efffe..00000000000 --- a/browser/app/macbuild/Contents/_CodeSignature/CodeResources +++ /dev/null @@ -1,71 +0,0 @@ - - - - - rules - - ^Info.plist$ - - ^PkgInfo$ - - ^MacOS/ - - ^Resources/ - - ^MacOS/distribution/.* - omit - - weight - 10 - - ^MacOS/override.ini - omit - - weight - 10 - - ^MacOS/updates/.* - omit - - weight - 10 - - ^MacOS/active-update.xml$ - omit - - weight - 10 - - ^MacOS/defaults/.* - omit - - weight - 10 - - ^MacOS/removed-files$ - omit - - weight - 10 - - ^MacOS/updates.xml$ - omit - - weight - 10 - - ^Updated.app/.* - omit - - weight - 10 - - ^updating/.* - omit - - weight - 10 - - - - diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in index 5f6bb76cc76..ea9b370d2fd 100644 --- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -23,10 +23,9 @@ ; Mac bundle stuff @APPNAME@/Contents/Info.plist @APPNAME@/Contents/PkgInfo -@APPNAME@/Contents/Resources/ -#ifdef MOZ_SIGNING -@APPNAME@/Contents/_CodeSignature/CodeResources -#endif +@APPNAME@/Contents/Resources/firefox.icns +@APPNAME@/Contents/Resources/document.icns +@APPNAME@/Contents/Resources/en.lproj/* #endif [@AB_CD@] @@ -55,16 +54,32 @@ #ifdef GKMEDIAS_SHARED_LIBRARY @BINPATH@/@DLL_PREFIX@gkmedias@DLL_SUFFIX@ #endif +#ifdef XP_MACOSX +@APPNAME@/Contents/MacOS/@DLL_PREFIX@mozalloc@DLL_SUFFIX@ +#else @BINPATH@/@DLL_PREFIX@mozalloc@DLL_SUFFIX@ +#endif #ifdef MOZ_SHARED_MOZGLUE +#ifdef XP_MACOSX +@APPNAME@/Contents/MacOS/@DLL_PREFIX@mozglue@DLL_SUFFIX@ +#else @BINPATH@/@DLL_PREFIX@mozglue@DLL_SUFFIX@ #endif +#endif #ifndef MOZ_STATIC_JS +#ifdef XP_MACOSX +@APPNAME@/Contents/MacOS/@DLL_PREFIX@mozjs@DLL_SUFFIX@ +#else @BINPATH@/@DLL_PREFIX@mozjs@DLL_SUFFIX@ #endif +#endif #ifdef MOZ_DMD +#ifdef XP_MACOSX +@APPNAME@/Contents/MacOS/@DLL_PREFIX@dmd@DLL_SUFFIX@ +#else @BINPATH@/@DLL_PREFIX@dmd@DLL_SUFFIX@ #endif +#endif #ifndef MOZ_NATIVE_NSPR #ifndef MOZ_FOLD_LIBS @BINPATH@/@DLL_PREFIX@nspr4@DLL_SUFFIX@ @@ -73,13 +88,13 @@ #endif #endif #ifdef XP_MACOSX -@BINPATH@/XUL +@APPNAME@/Contents/MacOS/XUL #else @BINPATH@/@DLL_PREFIX@xul@DLL_SUFFIX@ #endif #ifdef XP_MACOSX -@BINPATH@/@MOZ_CHILD_PROCESS_NAME@.app/ -@BINPATH@/@DLL_PREFIX@plugin_child_interpose@DLL_SUFFIX@ +@APPNAME@/Contents/MacOS/@MOZ_CHILD_PROCESS_NAME@.app/ +@APPNAME@/Contents/MacOS/@DLL_PREFIX@plugin_child_interpose@DLL_SUFFIX@ #else @BINPATH@/@MOZ_CHILD_PROCESS_NAME@ #endif @@ -109,9 +124,13 @@ #endif #ifdef MOZ_REPLACE_MALLOC #ifndef MOZ_JEMALLOC3 +#ifdef XP_MACOSX +@APPNAME@/Contents/MacOS/@DLL_PREFIX@replace_jemalloc@DLL_SUFFIX@ +#else @BINPATH@/@DLL_PREFIX@replace_jemalloc@DLL_SUFFIX@ #endif #endif +#endif #ifdef MOZ_GTK3 @BINPATH@/@DLL_PREFIX@mozgtk@DLL_SUFFIX@ @BINPATH@/@DLL_PREFIX@mozgtk2@DLL_SUFFIX@ @@ -121,6 +140,9 @@ ; [Base Browser Files] #ifndef XP_UNIX @BINPATH@/@MOZ_APP_NAME@.exe +#elif XP_MACOSX +@APPNAME@/Contents/MacOS/@MOZ_APP_NAME@-bin +@APPNAME@/Contents/MacOS/@MOZ_APP_NAME@ #else @BINPATH@/@MOZ_APP_NAME@-bin @BINPATH@/@MOZ_APP_NAME@ @@ -740,19 +762,33 @@ ; meaning their .chk files are created there directly. ; #ifndef MOZ_NATIVE_NSS +#ifdef XP_MACOSX +@APPNAME@/Contents/MacOS/@DLL_PREFIX@freebl3@DLL_SUFFIX@ +@APPNAME@/Contents/MacOS/@DLL_PREFIX@nss3@DLL_SUFFIX@ +@APPNAME@/Contents/MacOS/@DLL_PREFIX@nssckbi@DLL_SUFFIX@ +#else @BINPATH@/@DLL_PREFIX@freebl3@DLL_SUFFIX@ @BINPATH@/@DLL_PREFIX@nss3@DLL_SUFFIX@ @BINPATH@/@DLL_PREFIX@nssckbi@DLL_SUFFIX@ +#endif #ifndef NSS_DISABLE_DBM +#ifdef XP_MACOSX +@APPNAME@/Contents/MacOS/@DLL_PREFIX@nssdbm3@DLL_SUFFIX@ +#else @BINPATH@/@DLL_PREFIX@nssdbm3@DLL_SUFFIX@ #endif +#endif #ifndef MOZ_FOLD_LIBS @BINPATH@/@DLL_PREFIX@nssutil3@DLL_SUFFIX@ @BINPATH@/@DLL_PREFIX@smime3@DLL_SUFFIX@ @BINPATH@/@DLL_PREFIX@ssl3@DLL_SUFFIX@ #endif +#ifdef XP_MACOSX +@APPNAME@/Contents/MacOS/@DLL_PREFIX@softokn3@DLL_SUFFIX@ +#else @BINPATH@/@DLL_PREFIX@softokn3@DLL_SUFFIX@ #endif +#endif @BINPATH@/chrome/pippki@JAREXT@ @BINPATH@/chrome/pippki.manifest @BINPATH@/components/pipboot.xpt @@ -779,7 +815,7 @@ bin/libfreebl_32int64_3.so ; #ifdef MOZ_UPDATER #ifdef XP_MACOSX -@BINPATH@/updater.app/ +@APPNAME@/Contents/MacOS/updater.app/ #else @BINPATH@/updater@BIN_SUFFIX@ #endif @@ -799,7 +835,7 @@ bin/libfreebl_32int64_3.so @BINPATH@/components/CrashService.js @BINPATH@/components/toolkit_crashservice.xpt #ifdef XP_MACOSX -@BINPATH@/crashreporter.app/ +@APPNAME@/Contents/MacOS/crashreporter.app/ #else @BINPATH@/crashreporter@BIN_SUFFIX@ @BINPATH@/crashreporter.ini @@ -818,7 +854,11 @@ bin/libfreebl_32int64_3.so #ifdef XP_WIN @BINPATH@/webapp-uninstaller@BIN_SUFFIX@ #endif +#ifdef XP_MACOSX +@APPNAME@/Contents/MacOS/webapprt-stub@BIN_SUFFIX@ +#else @BINPATH@/webapprt-stub@BIN_SUFFIX@ +#endif @BINPATH@/webapprt/webapprt.ini @BINPATH@/webapprt/chrome.manifest @BINPATH@/webapprt/chrome/webapprt@JAREXT@ diff --git a/config/createprecomplete.py b/config/createprecomplete.py index e58dfe520b8..560677623e4 100644 --- a/config/createprecomplete.py +++ b/config/createprecomplete.py @@ -45,7 +45,7 @@ def generate_precomplete(root_path): for the location to enumerate and to create the precomplete file. """ # If inside a Mac bundle use the root of the bundle for the path. - if os.path.basename(root_path) == "MacOS": + if os.path.basename(root_path) == "Resources": root_path = os.path.abspath(os.path.join(root_path, '../../')) rel_file_path_list, rel_dir_path_list = get_build_entries(root_path) diff --git a/toolkit/locales/Makefile.in b/toolkit/locales/Makefile.in index dd023123f5f..f5e4e553fdb 100644 --- a/toolkit/locales/Makefile.in +++ b/toolkit/locales/Makefile.in @@ -36,7 +36,7 @@ endif ifdef MOZ_CRASHREPORTER libs:: crashreporter.ini ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT)) - $(SYSINSTALL) $(IFLAGS1) $^ $(FINAL_TARGET)/crashreporter.app/Contents/MacOS + $(SYSINSTALL) $(IFLAGS1) $^ $(FINAL_TARGET)/crashreporter.app/Contents/Resources else $(SYSINSTALL) $(IFLAGS1) $^ $(FINAL_TARGET) endif diff --git a/toolkit/mozapps/installer/packager.mk b/toolkit/mozapps/installer/packager.mk index 6c24503a11b..5f7b01d69b7 100644 --- a/toolkit/mozapps/installer/packager.mk +++ b/toolkit/mozapps/installer/packager.mk @@ -39,7 +39,7 @@ ifndef _APPNAME _APPNAME = $(MOZ_MACBUNDLE_NAME) endif ifndef _BINPATH -_BINPATH = /$(_APPNAME)/Contents/MacOS +_BINPATH = /$(_APPNAME)/Contents/Resources endif # _BINPATH ifdef UNIVERSAL_BINARY STAGEPATH = universal/ @@ -536,8 +536,6 @@ endif ifdef MOZ_SIGN_PREPARED_PACKAGE_CMD ifeq (Darwin, $(OS_ARCH)) MAKE_PACKAGE = cd ./$(PKG_DMG_SOURCE) && $(MOZ_SIGN_PREPARED_PACKAGE_CMD) $(MOZ_MACBUNDLE_NAME) \ - && rm $(MOZ_MACBUNDLE_NAME)/Contents/CodeResources \ - && cp $(MOZ_MACBUNDLE_NAME)/Contents/_CodeSignature/CodeResources $(MOZ_MACBUNDLE_NAME)/Contents \ && cd $(PACKAGE_BASE_DIR) \ && $(INNER_MAKE_PACKAGE) else From 34a3832be4ca25f84c1b325c81bc038958923297 Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:51:00 -0700 Subject: [PATCH 10/60] Mac v2 signing - Bug 1048687 - Read dependentlibs.list from Contents/Resources due to the new .app bundle structure. r=bsmedberg --- xpcom/glue/standalone/nsXPCOMGlue.cpp | 35 +++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/xpcom/glue/standalone/nsXPCOMGlue.cpp b/xpcom/glue/standalone/nsXPCOMGlue.cpp index 0c118b02a43..b6cef848f99 100644 --- a/xpcom/glue/standalone/nsXPCOMGlue.cpp +++ b/xpcom/glue/standalone/nsXPCOMGlue.cpp @@ -367,8 +367,23 @@ static GetFrozenFunctionsFunc XPCOMGlueLoad(const char* aXPCOMFile) { char xpcomDir[MAXPATHLEN]; -#if defined(XP_WIN) +#ifdef XP_WIN const char* lastSlash = ns_strrpbrk(aXPCOMFile, "/\\"); +#elif XP_MACOSX + // On OSX, the dependentlibs.list file lives under Contents/Resources. + // However, the actual libraries listed in dependentlibs.list live under + // Contents/MacOS. We want to read the list from Contents/Resources, then + // load the libraries from Contents/MacOS. + const char *tempSlash = strrchr(aXPCOMFile, '/'); + size_t tempLen = size_t(tempSlash - aXPCOMFile); + if (tempLen > MAXPATHLEN) { + return nullptr; + } + char tempBuffer[MAXPATHLEN]; + memcpy(tempBuffer, aXPCOMFile, tempLen); + const char *slash = strrchr(tempBuffer, '/'); + tempLen = size_t(slash - tempBuffer); + const char *lastSlash = aXPCOMFile + tempLen; #else const char* lastSlash = strrchr(aXPCOMFile, '/'); #endif @@ -377,12 +392,20 @@ XPCOMGlueLoad(const char* aXPCOMFile) size_t len = size_t(lastSlash - aXPCOMFile); if (len > MAXPATHLEN - sizeof(XPCOM_FILE_PATH_SEPARATOR +#ifdef XP_MACOSX + "Resources" + XPCOM_FILE_PATH_SEPARATOR +#endif XPCOM_DEPENDENT_LIBS_LIST)) { return nullptr; } memcpy(xpcomDir, aXPCOMFile, len); strcpy(xpcomDir + len, XPCOM_FILE_PATH_SEPARATOR - XPCOM_DEPENDENT_LIBS_LIST); +#ifdef XP_MACOSX + "Resources" + XPCOM_FILE_PATH_SEPARATOR +#endif + XPCOM_DEPENDENT_LIBS_LIST); cursor = xpcomDir + len + 1; } else { strcpy(xpcomDir, XPCOM_DEPENDENT_LIBS_LIST); @@ -399,6 +422,14 @@ XPCOMGlueLoad(const char* aXPCOMFile) return nullptr; } +#ifdef XP_MACOSX + tempLen = size_t(cursor - xpcomDir); + if (tempLen > MAXPATHLEN - sizeof("MacOS" XPCOM_FILE_PATH_SEPARATOR) - 1) { + return nullptr; + } + strcpy(cursor, "MacOS" XPCOM_FILE_PATH_SEPARATOR); + cursor += strlen(cursor); +#endif *cursor = '\0'; char buffer[MAXPATHLEN]; From b8761ffa6fdc4963640b47431bf876484b823b98 Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:51:04 -0700 Subject: [PATCH 11/60] Mac v2 signing - Bug 1050944 - Get Firefox to launch and run on OSX with the new .app bundle structure, made necessary by Apple's v2 signatures. r=smichaud, r=ted, sr=bsmedberg --- browser/app/nsBrowserApp.cpp | 14 ++++++++++++- ipc/glue/GeckoChildProcessHost.cpp | 21 +++++++++++++++----- toolkit/crashreporter/nsExceptionHandler.cpp | 4 ++++ toolkit/xre/nsAppRunner.cpp | 2 ++ toolkit/xre/nsXREDirProvider.h | 2 ++ xpcom/build/XPCOMInit.cpp | 12 +++++++++++ 6 files changed, 49 insertions(+), 6 deletions(-) diff --git a/browser/app/nsBrowserApp.cpp b/browser/app/nsBrowserApp.cpp index 355755d6920..bc45ee63ebd 100644 --- a/browser/app/nsBrowserApp.cpp +++ b/browser/app/nsBrowserApp.cpp @@ -50,6 +50,9 @@ using namespace mozilla; +#ifdef XP_MACOSX +#define kOSXResourcesFolder "Resources" +#endif #define kDesktopFolder "browser" #define kMetroFolder "metro" #define kMetroAppIniFilename "metroapp.ini" @@ -270,7 +273,12 @@ static int do_main(int argc, char* argv[], nsIFile *xreDirectory) nsCOMPtr greDir; exeFile->GetParent(getter_AddRefs(greDir)); - +#ifdef XP_MACOSX + nsCOMPtr parent; + greDir->GetParent(getter_AddRefs(parent)); + greDir = parent.forget(); + greDir->AppendNative(NS_LITERAL_CSTRING(kOSXResourcesFolder)); +#endif nsCOMPtr appSubdir; greDir->Clone(getter_AddRefs(appSubdir)); appSubdir->Append(NS_LITERAL_STRING(kDesktopFolder)); @@ -564,6 +572,10 @@ InitXPCOMGlue(const char *argv0, nsIFile **xreDirectory) // chop XPCOM_DLL off exePath *lastSlash = '\0'; +#ifdef XP_MACOSX + lastSlash = strrchr(exePath, XPCOM_FILE_PATH_SEPARATOR[0]); + strcpy(lastSlash + 1, kOSXResourcesFolder); +#endif #ifdef XP_WIN rv = NS_NewLocalFile(NS_ConvertUTF8toUTF16(exePath), false, xreDirectory); diff --git a/ipc/glue/GeckoChildProcessHost.cpp b/ipc/glue/GeckoChildProcessHost.cpp index 43c8d1bbc9b..9afb9e900a9 100644 --- a/ipc/glue/GeckoChildProcessHost.cpp +++ b/ipc/glue/GeckoChildProcessHost.cpp @@ -135,15 +135,26 @@ GeckoChildProcessHost::GetPathToBinary(FilePath& exePath) MOZ_ASSERT(gGREPath); #ifdef OS_WIN exePath = FilePath(char16ptr_t(gGREPath)); +#elif MOZ_WIDGET_COCOA + nsCOMPtr childProcPath; + NS_NewLocalFile(nsDependentString(gGREPath), false, + getter_AddRefs(childProcPath)); + // We need to use an App Bundle on OS X so that we can hide + // the dock icon. See Bug 557225. + nsCOMPtr tempPath; + childProcPath->GetParent(getter_AddRefs(tempPath)); + childProcPath = tempPath.forget(); + childProcPath->AppendNative(NS_LITERAL_CSTRING("MacOS")); + childProcPath->AppendNative(NS_LITERAL_CSTRING("plugin-container.app")); + childProcPath->AppendNative(NS_LITERAL_CSTRING("Contents")); + childProcPath->AppendNative(NS_LITERAL_CSTRING("MacOS")); + nsCString tempCPath; + childProcPath->GetNativePath(tempCPath); + exePath = FilePath(tempCPath.get()); #else nsCString path; NS_CopyUnicodeToNative(nsDependentString(gGREPath), path); exePath = FilePath(path.get()); -#endif -#ifdef MOZ_WIDGET_COCOA - // We need to use an App Bundle on OS X so that we can hide - // the dock icon. See Bug 557225. - exePath = exePath.AppendASCII(MOZ_CHILD_PROCESS_BUNDLE); #endif } diff --git a/toolkit/crashreporter/nsExceptionHandler.cpp b/toolkit/crashreporter/nsExceptionHandler.cpp index cabad55ce2d..1276c08740a 100644 --- a/toolkit/crashreporter/nsExceptionHandler.cpp +++ b/toolkit/crashreporter/nsExceptionHandler.cpp @@ -1086,6 +1086,10 @@ nsresult SetExceptionHandler(nsIFile* aXREDirectory, NS_ENSURE_SUCCESS(rv, rv); #if defined(XP_MACOSX) + nsCOMPtr parentPath; + exePath->GetParent(getter_AddRefs(parentPath)); + exePath = parentPath.forget(); + exePath->Append(NS_LITERAL_STRING("MacOS")); exePath->Append(NS_LITERAL_STRING("crashreporter.app")); exePath->Append(NS_LITERAL_STRING("Contents")); exePath->Append(NS_LITERAL_STRING("MacOS")); diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp index 188ec66cce8..25b96a7bf88 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp @@ -4173,6 +4173,8 @@ XREMain::XRE_mainRun() /* * XRE_main - A class based main entry point used by most platforms. + * Note that on OSX, aAppData->xreDirectory will point to + * .app/Contents/Resources. */ int XREMain::XRE_main(int argc, char* argv[], const nsXREAppData* aAppData) diff --git a/toolkit/xre/nsXREDirProvider.h b/toolkit/xre/nsXREDirProvider.h index 4a9f9a0b838..6fa95bcf475 100644 --- a/toolkit/xre/nsXREDirProvider.h +++ b/toolkit/xre/nsXREDirProvider.h @@ -132,7 +132,9 @@ protected: void Append(nsIFile* aDirectory); nsCOMPtr mAppProvider; + // On OSX, mGREDir points to .app/Contents/Resources nsCOMPtr mGREDir; + // On OSX, mXULAppDir points to .app/Contents/Resources/browser nsCOMPtr mXULAppDir; nsCOMPtr mProfileDir; nsCOMPtr mProfileLocalDir; diff --git a/xpcom/build/XPCOMInit.cpp b/xpcom/build/XPCOMInit.cpp index deb5de7e2ff..d7c9ba43e3f 100644 --- a/xpcom/build/XPCOMInit.cpp +++ b/xpcom/build/XPCOMInit.cpp @@ -475,6 +475,7 @@ NS_IMPL_ISUPPORTS(NesteggReporter, nsIMemoryReporter) CountingAllocatorBase::sAmount(0); #endif /* MOZ_WEBM */ +// Note that on OSX, aBinDirectory will point to .app/Contents/Resources/browser EXPORT_XPCOM_API(nsresult) NS_InitXPCOM2(nsIServiceManager** aResult, nsIFile* aBinDirectory, @@ -593,6 +594,17 @@ NS_InitXPCOM2(nsIServiceManager** aResult, xpcomLib->GetPath(path); gGREPath = ToNewUnicode(path); +#ifdef XP_MACOSX + nsCOMPtr parent; + xpcomLib->GetParent(getter_AddRefs(parent)); + parent->AppendNative(NS_LITERAL_CSTRING("MacOS")); + bool pathExists = false; + parent->Exists(&pathExists); + if (pathExists) { + xpcomLib = parent.forget(); + } +#endif + xpcomLib->AppendNative(nsDependentCString(XPCOM_DLL)); nsDirectoryService::gService->Set(NS_XPCOM_LIBRARY_FILE, xpcomLib); From 70fc651292b791d6acd2c56a90d450eac8daea13 Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:51:08 -0700 Subject: [PATCH 12/60] Mac v2 signing - Bug 1046924 - Move updates directory out of the .app bundle. r=rstrong --- .../mozapps/update/updater/launchchild_osx.mm | 2 +- toolkit/xre/nsUpdateDriver.cpp | 2 +- toolkit/xre/nsXREDirProvider.cpp | 40 +++++++++++++++++-- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/toolkit/mozapps/update/updater/launchchild_osx.mm b/toolkit/mozapps/update/updater/launchchild_osx.mm index 903544cc12a..9e4e08d372f 100644 --- a/toolkit/mozapps/update/updater/launchchild_osx.mm +++ b/toolkit/mozapps/update/updater/launchchild_osx.mm @@ -83,7 +83,7 @@ LaunchMacPostProcess(const char* aAppBundle) NSString* iniPath = [NSString stringWithUTF8String:aAppBundle]; iniPath = - [iniPath stringByAppendingPathComponent:@"Contents/MacOS/updater.ini"]; + [iniPath stringByAppendingPathComponent:@"Contents/Resources/updater.ini"]; NSFileManager* fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:iniPath]) { diff --git a/toolkit/xre/nsUpdateDriver.cpp b/toolkit/xre/nsUpdateDriver.cpp index f38d705a11c..48480958717 100644 --- a/toolkit/xre/nsUpdateDriver.cpp +++ b/toolkit/xre/nsUpdateDriver.cpp @@ -341,7 +341,7 @@ CopyUpdaterIntoUpdateDir(nsIFile *greDir, nsIFile *appDir, nsIFile *updateDir, { // Copy the updater application from the GRE and the updater ini from the app #if defined(XP_MACOSX) - if (!CopyFileIntoUpdateDir(greDir, kUpdaterApp, updateDir)) + if (!CopyFileIntoUpdateDir(appDir, kUpdaterApp, updateDir)) return false; #else if (!CopyFileIntoUpdateDir(greDir, kUpdaterBin, updateDir)) diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp index c525e0eb1ac..be4a8601c04 100644 --- a/toolkit/xre/nsXREDirProvider.cpp +++ b/toolkit/xre/nsXREDirProvider.cpp @@ -231,7 +231,7 @@ nsXREDirProvider::GetUserProfilesLocalDir(nsIFile** aResult, NS_IMETHODIMP nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent, - nsIFile** aFile) + nsIFile** aFile) { nsresult rv; @@ -1031,8 +1031,42 @@ nsXREDirProvider::GetUpdateRootDir(nsIFile* *aResult) rv = appFile->GetParent(getter_AddRefs(updRoot)); NS_ENSURE_SUCCESS(rv, rv); -#ifdef XP_WIN +#ifdef XP_MACOSX + nsCOMPtr appRootDirFile; + nsCOMPtr localDir; + nsAutoString appDirPath; + if (NS_FAILED(appFile->GetParent(getter_AddRefs(appRootDirFile))) || + NS_FAILED(appRootDirFile->GetPath(appDirPath)) || + NS_FAILED(GetUserDataDirectoryHome(getter_AddRefs(localDir), true))) { + return NS_ERROR_FAILURE; + } + int32_t dotIndex = appDirPath.RFind(".app"); + if (dotIndex == kNotFound) { + dotIndex = appDirPath.Length(); + } + appDirPath = Substring(appDirPath, 1, dotIndex - 1); + + bool hasVendor = gAppData->vendor && strlen(gAppData->vendor) != 0; + if (hasVendor || gAppData->name) { + if (NS_FAILED(localDir->AppendNative(nsDependentCString(hasVendor ? + gAppData->vendor : + gAppData->name)))) { + return NS_ERROR_FAILURE; + } + } else if (NS_FAILED(localDir->AppendNative(NS_LITERAL_CSTRING("Mozilla")))) { + return NS_ERROR_FAILURE; + } + + if (NS_FAILED(localDir->Append(NS_LITERAL_STRING("updates"))) || + NS_FAILED(localDir->AppendRelativePath(appDirPath))) { + return NS_ERROR_FAILURE; + } + + NS_ADDREF(*aResult = localDir); + return NS_OK; + +#elif XP_WIN nsAutoString pathHash; bool pathHashResult = false; bool hasVendor = gAppData->vendor && strlen(gAppData->vendor) != 0; @@ -1121,7 +1155,7 @@ nsXREDirProvider::GetUpdateRootDir(nsIFile* *aResult) rv = updRoot->AppendRelativePath(programName); NS_ENSURE_SUCCESS(rv, rv); -#endif +#endif // XP_WIN #endif NS_ADDREF(*aResult = updRoot); return NS_OK; From ec3c661f98448b8dbc77b364a2d7adf311b70c8c Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:51:13 -0700 Subject: [PATCH 13/60] Mac v2 signing - Bug 1055774 - Update lookup for crashreporter.ini for the new v2 bundle structure on OSX. r=bsmedberg --- toolkit/crashreporter/CrashSubmit.jsm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/toolkit/crashreporter/CrashSubmit.jsm b/toolkit/crashreporter/CrashSubmit.jsm index bab05a43d52..f95074bca01 100644 --- a/toolkit/crashreporter/CrashSubmit.jsm +++ b/toolkit/crashreporter/CrashSubmit.jsm @@ -45,9 +45,11 @@ function getL10nStrings() { if (!path.exists()) { // see if we're on a mac path = path.parent; + path = path.parent; + path.append("MacOS"); path.append("crashreporter.app"); path.append("Contents"); - path.append("MacOS"); + path.append("Resources"); path.append("crashreporter.ini"); if (!path.exists()) { // very bad, but I don't know how to recover From 0abcadeb626d0de69c1fcaa674c930901422ee9c Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:51:17 -0700 Subject: [PATCH 14/60] Mac v2 signing - Bug 1059504 - Avoid plugin-container from crashing due to the new v2 bundle structure on OSX. r=bsmedberg --- ipc/glue/GeckoChildProcessHost.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ipc/glue/GeckoChildProcessHost.cpp b/ipc/glue/GeckoChildProcessHost.cpp index 9afb9e900a9..67b94d5ee10 100644 --- a/ipc/glue/GeckoChildProcessHost.cpp +++ b/ipc/glue/GeckoChildProcessHost.cpp @@ -550,7 +550,17 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector& aExt if (ShouldHaveDirectoryService()) { MOZ_ASSERT(gGREPath); nsCString path; +#ifdef MOZ_WIDGET_COCOA + nsCOMPtr grePath; + nsCOMPtr tempPath; + NS_NewLocalFile(nsDependentString(gGREPath), false, + getter_AddRefs(grePath)); + grePath->GetParent(getter_AddRefs(tempPath)); + tempPath->AppendNative(NS_LITERAL_CSTRING("MacOS")); + tempPath->GetNativePath(path); +#else NS_CopyUnicodeToNative(nsDependentString(gGREPath), path); +#endif # if defined(OS_LINUX) || defined(OS_BSD) # if defined(MOZ_WIDGET_ANDROID) path += "/lib"; From a77ea63e36e023d9896f4eae854ce24e052ae6f0 Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:51:21 -0700 Subject: [PATCH 15/60] Mac v2 signing - Bug 1053838 - Fix GTests to run with the new v2 bundle structure. r=bsmedberg --- testing/gtest/Makefile.in | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/testing/gtest/Makefile.in b/testing/gtest/Makefile.in index 523ea17ab8f..82c9ea37844 100644 --- a/testing/gtest/Makefile.in +++ b/testing/gtest/Makefile.in @@ -25,8 +25,12 @@ check:: $(MAKE) -C $(DEPTH)/toolkit/library gtestxul ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT)) $(MAKE) -C $(DEPTH)/browser/app repackage -endif + rsync -a $(DIST)/bin/dependentlibs.list.gtest $(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/Resources + rsync -a $(DIST)/bin/gtest $(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/MacOS/ + $(PYTHON) $(topsrcdir)/testing/gtest/rungtests.py --xre-path=$(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/Resources --symbols-path=$(DIST)/crashreporter-symbols $(DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/MacOS/$(MOZ_APP_NAME)$(BIN_SUFFIX) +else $(PYTHON) $(topsrcdir)/testing/gtest/rungtests.py --xre-path=$(DIST)/bin --symbols-path=$(DIST)/crashreporter-symbols $(DIST)/bin/$(MOZ_APP_NAME)$(BIN_SUFFIX) +endif else check:: echo GTest skipped during make check From 6c7fc66e8281773d838742ba92893af1293b54a7 Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:51:25 -0700 Subject: [PATCH 16/60] Mac v2 signing - Bug 1060652 - Make mochitest harness work with the new bundle structure for v2 signatures on OSX. r=jmaher --- browser/app/macbuild/Contents/MacOS-files.in | 3 +++ build/automationutils.py | 5 ++++- testing/mochitest/mochitest_options.py | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/browser/app/macbuild/Contents/MacOS-files.in b/browser/app/macbuild/Contents/MacOS-files.in index 79808584427..4de83cc1982 100644 --- a/browser/app/macbuild/Contents/MacOS-files.in +++ b/browser/app/macbuild/Contents/MacOS-files.in @@ -1,5 +1,8 @@ /*.app/*** /*.dylib +/certutil /firefox-bin +/pk12util +/ssltunnel /webapprt-stub /XUL diff --git a/build/automationutils.py b/build/automationutils.py index df8be4946ed..aa8f985d591 100644 --- a/build/automationutils.py +++ b/build/automationutils.py @@ -390,7 +390,10 @@ def environment(xrePath, env=None, crashreporter=True, debugger=False, dmdPath=N assert os.path.isabs(xrePath) - ldLibraryPath = xrePath + if mozinfo.isMac: + ldLibraryPath = os.path.join(os.path.dirname(xrePath), "MacOS") + else: + ldLibraryPath = xrePath envVar = None dmdLibrary = None diff --git a/testing/mochitest/mochitest_options.py b/testing/mochitest/mochitest_options.py index 91d79d470d9..cd2f9147aff 100644 --- a/testing/mochitest/mochitest_options.py +++ b/testing/mochitest/mochitest_options.py @@ -475,6 +475,8 @@ class MochitestOptions(optparse.OptionParser): # but only if an app path was explicitly provided if options.app != self.defaults['app']: options.xrePath = os.path.dirname(options.app) + if mozinfo.isMac: + options.xrePath = os.path.join(os.path.dirname(options.xrePath), "Resources") elif build_obj is not None: # otherwise default to dist/bin options.xrePath = build_obj.bindir From cf2ca1fd7cb8dd9d91b16c04ee41616d7a6d7ab1 Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:51:29 -0700 Subject: [PATCH 17/60] Mac v2 signing - Bug 1060562 - Update xpcshell-tests for the new v2 bundle structure on OSX. r=jmaher --- browser/app/macbuild/Contents/MacOS-files.in | 1 + js/xpconnect/src/XPCShellImpl.cpp | 18 ++++++++++++++++++ netwerk/test/unit/test_socks.js | 10 ++-------- python/mozbuild/mozbuild/base.py | 3 +++ security/manager/ssl/tests/unit/head_psm.js | 4 +++- testing/xpcshell/runxpcshelltests.py | 9 ++++++++- testing/xpcshell/selftest.py | 9 +++++++-- .../test/unit/head_crashreporter.js | 10 +++------- xpcom/tests/unit/head_xpcom.js | 5 +++-- 9 files changed, 48 insertions(+), 21 deletions(-) diff --git a/browser/app/macbuild/Contents/MacOS-files.in b/browser/app/macbuild/Contents/MacOS-files.in index 4de83cc1982..f600fae3f22 100644 --- a/browser/app/macbuild/Contents/MacOS-files.in +++ b/browser/app/macbuild/Contents/MacOS-files.in @@ -5,4 +5,5 @@ /pk12util /ssltunnel /webapprt-stub +/xpcshell /XUL diff --git a/js/xpconnect/src/XPCShellImpl.cpp b/js/xpconnect/src/XPCShellImpl.cpp index 2856701d6bb..557a033d07b 100644 --- a/js/xpconnect/src/XPCShellImpl.cpp +++ b/js/xpconnect/src/XPCShellImpl.cpp @@ -1351,6 +1351,23 @@ XRE_XPCShellMain(int argc, char **argv, char **envp) argc -= 2; argv += 2; } else { +#ifdef XP_MACOSX + // On OSX, the GreD needs to point to Contents/Resources in the .app + // bundle. Libraries will be loaded at a relative path to GreD, i.e. + // ../MacOS. + XRE_GetFileFromPath(argv[0], getter_AddRefs(greDir)); + nsCOMPtr parentDir; + greDir->GetParent(getter_AddRefs(parentDir)); + parentDir->GetParent(getter_AddRefs(greDir)); + greDir->AppendNative(NS_LITERAL_CSTRING("Resources")); + bool dirExists = false; + greDir->Exists(&dirExists); + if (!dirExists) { + printf("Setting GreD failed.\n"); + return 1; + } + dirprovider.SetGREDir(greDir); +#else nsAutoString workingDir; if (!GetCurrentWorkingDirectory(workingDir)) { printf("GetCurrentWorkingDirectory failed.\n"); @@ -1361,6 +1378,7 @@ XRE_XPCShellMain(int argc, char **argv, char **envp) printf("NS_NewLocalFile failed.\n"); return 1; } +#endif } if (argc > 1 && !strcmp(argv[1], "-a")) { diff --git a/netwerk/test/unit/test_socks.js b/netwerk/test/unit/test_socks.js index 28ef0198b38..cea5307aa6d 100644 --- a/netwerk/test/unit/test_socks.js +++ b/netwerk/test/unit/test_socks.js @@ -30,16 +30,10 @@ function getAvailableBytes(input) function runScriptSubprocess(script, args) { - // logic copied from ted's crashreporter unit test var ds = new DirectoryService(); - var bin = ds.get("CurProcD", Ci.nsILocalFile); - - bin.append("xpcshell"); + var bin = ds.get("XREExeF", Ci.nsILocalFile); if (!bin.exists()) { - bin.leafName = "xpcshell.exe"; - do_check_true(bin.exists()); - if (!bin.exists()) - do_throw("Can't find xpcshell binary"); + do_throw("Can't find xpcshell binary"); } var script = do_get_file(script); diff --git a/python/mozbuild/mozbuild/base.py b/python/mozbuild/mozbuild/base.py index 1db94c75eb7..7881d710ef0 100644 --- a/python/mozbuild/mozbuild/base.py +++ b/python/mozbuild/mozbuild/base.py @@ -274,6 +274,9 @@ class MozbuildObject(ProcessExecutionMixin): @property def bindir(self): + import mozinfo + if mozinfo.os == "mac": + return os.path.join(self.topobjdir, 'dist', self.substs['MOZ_MACBUNDLE_NAME'], 'Contents', 'Resources') return os.path.join(self.topobjdir, 'dist', 'bin') @property diff --git a/security/manager/ssl/tests/unit/head_psm.js b/security/manager/ssl/tests/unit/head_psm.js index 7305dc9d8a9..917c27087a6 100644 --- a/security/manager/ssl/tests/unit/head_psm.js +++ b/security/manager/ssl/tests/unit/head_psm.js @@ -361,7 +361,9 @@ function _setupTLSServerTest(serverBinName) let envSvc = Cc["@mozilla.org/process/environment;1"] .getService(Ci.nsIEnvironment); let greDir = directoryService.get("GreD", Ci.nsIFile); - envSvc.set("DYLD_LIBRARY_PATH", greDir.path); + let macOSDir = greDir.parent; + macOSDir.append("MacOS"); + envSvc.set("DYLD_LIBRARY_PATH", macOSDir.path); envSvc.set("LD_LIBRARY_PATH", greDir.path); envSvc.set("MOZ_TLS_SERVER_DEBUG_LEVEL", "3"); envSvc.set("MOZ_TLS_SERVER_CALLBACK_PORT", CALLBACK_PORT); diff --git a/testing/xpcshell/runxpcshelltests.py b/testing/xpcshell/runxpcshelltests.py index 9688cc73256..de575d9d58a 100755 --- a/testing/xpcshell/runxpcshelltests.py +++ b/testing/xpcshell/runxpcshelltests.py @@ -8,6 +8,7 @@ import copy import json import math import mozdebug +import mozinfo import os import os.path import random @@ -841,6 +842,12 @@ class XPCShellTests(object): if self.xrePath is None: self.xrePath = os.path.dirname(self.xpcshell) + if mozinfo.isMac: + # Check if we're run from an OSX app bundle and override + # self.xrePath if we are. + appBundlePath = os.path.join(os.path.dirname(os.path.dirname(self.xpcshell)), 'Resources') + if os.path.exists(os.path.join(appBundlePath, 'application.ini')): + self.xrePath = appBundlePath else: self.xrePath = os.path.abspath(self.xrePath) @@ -880,7 +887,7 @@ class XPCShellTests(object): os.environ["BEGINLIBPATH"] = self.xrePath + ";" + self.env["BEGINLIBPATH"] os.environ["LIBPATHSTRICT"] = "T" elif sys.platform == 'osx' or sys.platform == "darwin": - self.env["DYLD_LIBRARY_PATH"] = self.xrePath + self.env["DYLD_LIBRARY_PATH"] = os.path.join(os.path.dirname(self.xrePath), 'MacOS') else: # unix or linux? if not "LD_LIBRARY_PATH" in self.env or self.env["LD_LIBRARY_PATH"] is None: self.env["LD_LIBRARY_PATH"] = self.xrePath diff --git a/testing/xpcshell/selftest.py b/testing/xpcshell/selftest.py index 8e470725159..573cec764d5 100644 --- a/testing/xpcshell/selftest.py +++ b/testing/xpcshell/selftest.py @@ -20,8 +20,13 @@ from runxpcshelltests import XPCShellTests mozinfo.find_and_update_from_json() objdir = build_obj.topobjdir.encode("utf-8") -xpcshellBin = os.path.join(objdir, "dist", "bin", "xpcshell") -if sys.platform == "win32": + +if mozinfo.isMac: + from buildconfig import substs + xpcshellBin = os.path.join(objdir, "dist", substs['MOZ_MACBUNDLE_NAME'], "Contents", "MacOS", "xpcshell") +else: + xpcshellBin = os.path.join(objdir, "dist", "bin", "xpcshell") + if sys.platform == "win32": xpcshellBin += ".exe" SIMPLE_PASSING_TEST = "function run_test() { do_check_true(true); }" diff --git a/toolkit/crashreporter/test/unit/head_crashreporter.js b/toolkit/crashreporter/test/unit/head_crashreporter.js index 040b270bacd..5146033a406 100644 --- a/toolkit/crashreporter/test/unit/head_crashreporter.js +++ b/toolkit/crashreporter/test/unit/head_crashreporter.js @@ -35,14 +35,10 @@ function do_crash(setup, callback, canReturnZero) // get current process filename (xpcshell) let ds = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties); - let bin = ds.get("CurProcD", Components.interfaces.nsILocalFile); - bin.append("xpcshell"); + let bin = ds.get("XREExeF", Components.interfaces.nsILocalFile); if (!bin.exists()) { - bin.leafName = "xpcshell.exe"; - do_check_true(bin.exists()); - if (!bin.exists()) - // weird, can't find xpcshell binary? - do_throw("Can't find xpcshell binary!"); + // weird, can't find xpcshell binary? + do_throw("Can't find xpcshell binary!"); } // get Gre dir (GreD) let greD = ds.get("GreD", Components.interfaces.nsILocalFile); diff --git a/xpcom/tests/unit/head_xpcom.js b/xpcom/tests/unit/head_xpcom.js index b6d71bdc198..b0f7acd038e 100644 --- a/xpcom/tests/unit/head_xpcom.js +++ b/xpcom/tests/unit/head_xpcom.js @@ -16,8 +16,9 @@ function set_process_running_environment() var dirSvc = Components.classes["@mozilla.org/file/directory_service;1"]. getService(Components.interfaces.nsIProperties); var greDir = dirSvc.get("GreD", Components.interfaces.nsIFile); - - envSvc.set("DYLD_LIBRARY_PATH", greDir.path); + var macOSDir = greDir.parent; + macOSDir.append("MacOS"); + envSvc.set("DYLD_LIBRARY_PATH", macOSDir.path); // For Linux envSvc.set("LD_LIBRARY_PATH", greDir.path); //XXX: handle windows From 7cc53b980e8c90f6c8771698f26b9e854752dc0a Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:51:39 -0700 Subject: [PATCH 18/60] Mac v2 signing - Bug 1064952 - Update Cpp unit test harness for the new v2 bundle structure on OSX. r=jmaher --- startupcache/test/TestStartupCache.cpp | 8 ++++++++ testing/runcppunittests.py | 12 ++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/startupcache/test/TestStartupCache.cpp b/startupcache/test/TestStartupCache.cpp index 300080fb0b3..749286b4a2e 100644 --- a/startupcache/test/TestStartupCache.cpp +++ b/startupcache/test/TestStartupCache.cpp @@ -414,6 +414,14 @@ int main(int argc, char** argv) nsCOMPtr manifest; scrv = NS_GetSpecialDirectory(NS_GRE_DIR, getter_AddRefs(manifest)); +#ifdef XP_MACOSX + if (NS_SUCCEEDED(scrv)) { + nsCOMPtr parent; + manifest->GetParent(getter_AddRefs(parent)); + parent->AppendNative(NS_LITERAL_CSTRING("MacOS")); + manifest = parent.forget(); + } +#endif if (NS_FAILED(scrv)) { fail("NS_XPCOM_CURRENT_PROCESS_DIR"); return 1; diff --git a/testing/runcppunittests.py b/testing/runcppunittests.py index def44a31895..3e83f325b77 100644 --- a/testing/runcppunittests.py +++ b/testing/runcppunittests.py @@ -97,17 +97,23 @@ class CPPUnitTests(object): env = dict(os.environ) env = self.build_core_environment(env) pathvar = "" + libpath = self.xre_path if mozinfo.os == "linux": pathvar = "LD_LIBRARY_PATH" elif mozinfo.os == "mac": + applibpath = os.path.join(os.path.dirname(libpath), 'MacOS') + if os.path.exists(applibpath): + # Set the library load path to Contents/MacOS if we're run from + # the app bundle. + libpath = applibpath pathvar = "DYLD_LIBRARY_PATH" elif mozinfo.os == "win": pathvar = "PATH" if pathvar: if pathvar in env: - env[pathvar] = "%s%s%s" % (self.xre_path, os.pathsep, env[pathvar]) + env[pathvar] = "%s%s%s" % (libpath, os.pathsep, env[pathvar]) else: - env[pathvar] = self.xre_path + env[pathvar] = libpath # Use llvm-symbolizer for ASan if available/required llvmsym = os.path.join(self.xre_path, "llvm-symbolizer") @@ -209,6 +215,8 @@ def main(): progs = extract_unittests_from_args(args, options.manifest_file) options.xre_path = os.path.abspath(options.xre_path) + if mozinfo.isMac: + options.xre_path = os.path.join(os.path.dirname(options.xre_path), 'Resources') tester = CPPUnitTests() try: From 3a3ac5f17b36c7905720d1059f1cc3d37b1b1cb6 Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:51:43 -0700 Subject: [PATCH 19/60] Mac v2 signing - Bug 1064910 - Update Webapp Runtime to work with the new v2 bundle structure of Firefox on OSX. r=myk --- toolkit/webapps/tests/Makefile.in | 5 ++++ webapprt/mac/webapprt.mm | 43 ++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/toolkit/webapps/tests/Makefile.in b/toolkit/webapps/tests/Makefile.in index 4cc7f819120..29a2f1a5f86 100644 --- a/toolkit/webapps/tests/Makefile.in +++ b/toolkit/webapps/tests/Makefile.in @@ -5,3 +5,8 @@ PROGRAMS_DEST = $(DEPTH)/_tests/testing/mochitest/chrome/$(relativesrcdir) include $(topsrcdir)/config/rules.mk + +# Don't create a dependency on mozglue, which is impossible (difficult?) +# to dynamically link into our executable, as we copy it to arbitrary locations. +MOZ_GLUE_LDFLAGS = +MOZ_GLUE_PROGRAM_LDFLAGS = diff --git a/webapprt/mac/webapprt.mm b/webapprt/mac/webapprt.mm index 74b07334e56..746e4d144d5 100644 --- a/webapprt/mac/webapprt.mm +++ b/webapprt/mac/webapprt.mm @@ -38,7 +38,8 @@ const char WEBAPPINI_NAME[] = "webapp.ini"; const char WEBRTINI_NAME[] = "webapprt.ini"; //need the correct relative path here -const char APP_CONTENTS_PATH[] = "/Contents/MacOS/"; +const char APP_MACOS_PATH[] = "/Contents/MacOS/"; +const char APP_RESOURCES_PATH[] = "/Contents/Resources/"; //the path to the WebappRT subdir within the Firefox app contents dir const char WEBAPPRT_PATH[] = "webapprt/"; @@ -119,13 +120,21 @@ main(int argc, char **argv) } //GET FIREFOX BUILD ID - NSString *firefoxINIFilePath = [NSString stringWithFormat:@"%@%s%s", firefoxPath, APP_CONTENTS_PATH, FXAPPINI_NAME]; + NSString *firefoxINIFilePath = + [NSString stringWithFormat:@"%@%s%s", firefoxPath, APP_RESOURCES_PATH, + FXAPPINI_NAME]; nsINIParser ffparser; NSLog(@"Looking for firefox ini file here: %@", firefoxINIFilePath); - if (NS_FAILED(ffparser.Init([firefoxINIFilePath UTF8String]))) { - NSLog(@"Unable to locate Firefox application.ini"); - @throw MakeException(@"Error", @"Unable to parse environment files for application startup"); + firefoxINIFilePath = [NSString stringWithFormat:@"%@%s%s", firefoxPath, + APP_MACOS_PATH, + FXAPPINI_NAME]; + NSLog(@"Looking for firefox ini file here: %@", firefoxINIFilePath); + if (NS_FAILED(ffparser.Init([firefoxINIFilePath UTF8String]))) { + NSLog(@"Unable to locate Firefox application.ini"); + @throw MakeException(@"Error", + @"Unable to parse environment files for application startup"); + } } char ffVersChars[MAXPATHLEN]; @@ -149,7 +158,9 @@ main(int argc, char **argv) NSError *errorDesc = nil; //we know the firefox path, so copy the new webapprt here - NSString *newWebRTPath = [NSString stringWithFormat: @"%@%s%s", firefoxPath, APP_CONTENTS_PATH, WEBAPPRT_EXECUTABLE]; + NSString *newWebRTPath = + [NSString stringWithFormat: @"%@%s%s", firefoxPath, APP_MACOS_PATH, + WEBAPPRT_EXECUTABLE]; NSLog(@"### Firefox webapprt path: %@", newWebRTPath); if (![fileClerk fileExistsAtPath:newWebRTPath]) { NSString* msg = [NSString stringWithFormat: @"This version of Firefox (%@) cannot run web applications, because it is not recent enough or damaged", firefoxVersion]; @@ -184,7 +195,8 @@ main(int argc, char **argv) // Set up our environment to know where webapp.ini was loaded from. char appEnv[MAXPATHLEN]; - snprintf(appEnv, MAXPATHLEN, "%s%s%s", [myBundlePath UTF8String], APP_CONTENTS_PATH, WEBAPPINI_NAME); + snprintf(appEnv, MAXPATHLEN, "%s%s%s", [myBundlePath UTF8String], + APP_MACOS_PATH, WEBAPPINI_NAME); if (setenv("XUL_APP_FILE", appEnv, 1)) { NSLog(@"Couldn't set XUL_APP_FILE to: %s", appEnv); @throw MakeException(@"Error", @"Unable to set Web Runtime INI file."); @@ -193,7 +205,8 @@ main(int argc, char **argv) //CONSTRUCT GREDIR AND CALL XPCOMGLUE WITH IT char greDir[MAXPATHLEN]; - snprintf(greDir, MAXPATHLEN, "%s%s", [firefoxPath UTF8String], APP_CONTENTS_PATH); + snprintf(greDir, MAXPATHLEN, "%s%s", [firefoxPath UTF8String], + APP_RESOURCES_PATH); if (!NS_SUCCEEDED(AttemptGRELoad(greDir))) { @throw MakeException(@"Error", @"Unable to load XUL files for application startup"); } @@ -205,11 +218,16 @@ main(int argc, char **argv) // Get the path to the runtime directory. char rtDir[MAXPATHLEN]; - snprintf(rtDir, MAXPATHLEN, "%s%s%s", [firefoxPath UTF8String], APP_CONTENTS_PATH, WEBAPPRT_PATH); + snprintf(rtDir, MAXPATHLEN, "%s%s%s", [firefoxPath UTF8String], + APP_RESOURCES_PATH, + WEBAPPRT_PATH); // Get the path to the runtime's INI file. This is in the runtime // directory. - snprintf(rtINIPath, MAXPATHLEN, "%s%s%s%s", [firefoxPath UTF8String], APP_CONTENTS_PATH, WEBAPPRT_PATH, WEBRTINI_NAME); + snprintf(rtINIPath, MAXPATHLEN, "%s%s%s%s", [firefoxPath UTF8String], + APP_RESOURCES_PATH, + WEBAPPRT_PATH, + WEBRTINI_NAME); NSLog(@"WebappRT application.ini path: %s", rtINIPath); // Load the runtime's INI from its path. @@ -320,8 +338,9 @@ NSString // We're run from the Firefox bundle during WebappRT chrome and content tests. NSString *myBundlePath = [[NSBundle mainBundle] bundlePath]; - NSString *fxPath = [NSString stringWithFormat:@"%@%sfirefox-bin", - myBundlePath, APP_CONTENTS_PATH]; + NSString *fxPath = + [NSString stringWithFormat:@"%@%sfirefox-bin", myBundlePath, + APP_MACOS_PATH]; if ([[NSFileManager defaultManager] fileExistsAtPath:fxPath]) { return myBundlePath; } From 462a374b6fac8ec99e8d13d3c4107e8de281db0e Mon Sep 17 00:00:00 2001 From: Stephen Pohl Date: Mon, 29 Sep 2014 11:51:47 -0700 Subject: [PATCH 20/60] Mac v2 signing - Bug 1066123 - Ensure b2g desktop OSX builds still work after the v2 signature changes to Firefox.app bundles. r=ted --- b2g/app/Makefile.in | 1 + b2g/installer/Makefile.in | 9 +++++++++ b2g/installer/package-manifest.in | 2 ++ 3 files changed, 12 insertions(+) diff --git a/b2g/app/Makefile.in b/b2g/app/Makefile.in index c0bf9ffd89a..46161c68c77 100644 --- a/b2g/app/Makefile.in +++ b/b2g/app/Makefile.in @@ -64,6 +64,7 @@ tools repackage:: $(libs-preqs) sed -e 's/%MOZ_APP_VERSION%/$(MOZ_APP_VERSION)/' -e 's/%MOZ_APP_NAME%/$(MOZ_APP_NAME)/' -e 's/%APP_VERSION%/$(APP_VERSION)/' -e 's/%APP_NAME%/$(APP_NAME)/' -e 's/%APP_BINARY%/$(APP_BINARY)/' $(srcdir)/macbuild/Contents/Info.plist.in > $(DIST)/$(APP_NAME).app/Contents/Info.plist sed -e 's/%APP_VERSION%/$(APP_VERSION)/' -e 's/%APP_NAME%/$(APP_NAME)/' $(srcdir)/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in | iconv -f UTF-8 -t UTF-16 > $(DIST)/$(APP_NAME).app/Contents/Resources/$(AB).lproj/InfoPlist.strings rsync -a $(DIST)/bin/ $(DIST)/$(APP_NAME).app/Contents/$(APPFILES) + mv $(DIST)/$(APP_NAME).app/Contents/$(APPFILES)/dependentlibs.list $(DIST)/$(APP_NAME).app/Contents/Resources $(RM) $(DIST)/$(APP_NAME).app/Contents/$(APPFILES)/mangle $(DIST)/$(APP_NAME).app/Contents/$(APPFILES)/shlibsign ifdef LIBXUL_SDK cp $(LIBXUL_DIST)/bin/xulrunner$(BIN_SUFFIX) $(DIST)/$(APP_NAME).app/Contents/MacOS/$(APP_BINARY) diff --git a/b2g/installer/Makefile.in b/b2g/installer/Makefile.in index 852e45963c9..416698c75dd 100644 --- a/b2g/installer/Makefile.in +++ b/b2g/installer/Makefile.in @@ -42,6 +42,15 @@ endif MOZ_PACKAGER_MINIFY=1 +ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT)) +ifndef _APPNAME +_APPNAME = $(MOZ_MACBUNDLE_NAME) +endif +ifndef _BINPATH +_BINPATH = /$(_APPNAME)/Contents/MacOS +endif +endif + include $(topsrcdir)/toolkit/mozapps/installer/packager.mk # Note that JS_BINARY can be defined in packager.mk, so this test must come after diff --git a/b2g/installer/package-manifest.in b/b2g/installer/package-manifest.in index e3745162d2b..754030b1fe9 100644 --- a/b2g/installer/package-manifest.in +++ b/b2g/installer/package-manifest.in @@ -42,7 +42,9 @@ #endif [xpcom] +#ifndef XP_MACOSX @BINPATH@/dependentlibs.list +#endif #ifdef GKMEDIAS_SHARED_LIBRARY @BINPATH@/@DLL_PREFIX@gkmedias@DLL_SUFFIX@ #endif From 66beaa21062b12316b6ceaa694ee85f45977cfc3 Mon Sep 17 00:00:00 2001 From: Steven Michaud Date: Mon, 29 Sep 2014 11:51:51 -0700 Subject: [PATCH 21/60] Mac v2 signing - Bug 1047738 - Make distribution code look for the distribution directory under Contents/Resources due to v2 signing requirements. r=bsmedberg --- .../components/dirprovider/DirectoryProvider.cpp | 3 +-- browser/components/distribution.js | 16 ++++++++++------ toolkit/xre/nsXREDirProvider.cpp | 4 ++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/browser/components/dirprovider/DirectoryProvider.cpp b/browser/components/dirprovider/DirectoryProvider.cpp index 746a4efa8b0..d47830c7243 100644 --- a/browser/components/dirprovider/DirectoryProvider.cpp +++ b/browser/components/dirprovider/DirectoryProvider.cpp @@ -125,12 +125,11 @@ static void AppendDistroSearchDirs(nsIProperties* aDirSvc, nsCOMArray &array) { nsCOMPtr searchPlugins; - nsresult rv = aDirSvc->Get(XRE_EXECUTABLE_FILE, + nsresult rv = aDirSvc->Get(XRE_APP_DISTRIBUTION_DIR, NS_GET_IID(nsIFile), getter_AddRefs(searchPlugins)); if (NS_FAILED(rv)) return; - searchPlugins->SetNativeLeafName(NS_LITERAL_CSTRING("distribution")); searchPlugins->AppendNative(NS_LITERAL_CSTRING("searchplugins")); bool exists; diff --git a/browser/components/distribution.js b/browser/components/distribution.js index 170a382ed0f..30fe822d900 100644 --- a/browser/components/distribution.js +++ b/browser/components/distribution.js @@ -26,12 +26,16 @@ this.DistributionCustomizer = function DistributionCustomizer() { } catch(ex) {} let dirSvc = Cc["@mozilla.org/file/directory_service;1"]. getService(Ci.nsIProperties); - let iniFile = loadFromProfile ? dirSvc.get("ProfD", Ci.nsIFile) - : dirSvc.get("XREExeF", Ci.nsIFile); - iniFile.leafName = "distribution"; - iniFile.append("distribution.ini"); - if (iniFile.exists()) - this._iniFile = iniFile; + try { + let iniFile = loadFromProfile ? dirSvc.get("ProfD", Ci.nsIFile) + : dirSvc.get("XREAppDist", Ci.nsIFile); + if (loadFromProfile) { + iniFile.leafName = "distribution"; + } + iniFile.append("distribution.ini"); + if (iniFile.exists()) + this._iniFile = iniFile; + } catch(ex) {} } DistributionCustomizer.prototype = { diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp index be4a8601c04..c3fe5639633 100644 --- a/toolkit/xre/nsXREDirProvider.cpp +++ b/toolkit/xre/nsXREDirProvider.cpp @@ -373,9 +373,9 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent, } else if (!strcmp(aProperty, XRE_APP_DISTRIBUTION_DIR)) { bool persistent = false; - rv = GetFile(XRE_EXECUTABLE_FILE, &persistent, getter_AddRefs(file)); + rv = GetFile(NS_GRE_DIR, &persistent, getter_AddRefs(file)); if (NS_SUCCEEDED(rv)) - rv = file->SetNativeLeafName(NS_LITERAL_CSTRING("distribution")); + rv = file->AppendNative(NS_LITERAL_CSTRING("distribution")); } else if (NS_SUCCEEDED(GetProfileStartupDir(getter_AddRefs(file)))) { // We need to allow component, xpt, and chrome registration to From b20be455fefa99d51fc60b06158a238f17dbbb52 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:51:55 -0700 Subject: [PATCH 22/60] Mac v2 signing - Bug 1059467 - Move precomplete file from the root of the Mac bundle to Contents/Resources. r=bbondy, r=nthomas --HG-- rename : tools/update-packaging/test/from-mac/precomplete => tools/update-packaging/test/from-mac/Contents/Resources/precomplete rename : tools/update-packaging/test/to-mac/precomplete => tools/update-packaging/test/to-mac/Contents/Resources/precomplete --- config/createprecomplete.py | 9 ++-- toolkit/mozapps/update/updater/updater.cpp | 41 +++---------------- tools/update-packaging/make_full_update.sh | 9 ++-- .../make_incremental_update.sh | 14 ++++--- .../make_incremental_updates.py | 16 ++++++-- .../{ => Contents/Resources}/precomplete | 3 +- .../update-packaging/test/make_full_update.sh | 9 ++-- .../test/to-mac/Contents/MacOS/precomplete | 19 --------- .../{ => Contents/Resources}/precomplete | 4 +- 9 files changed, 44 insertions(+), 80 deletions(-) rename tools/update-packaging/test/from-mac/{ => Contents/Resources}/precomplete (93%) delete mode 100644 tools/update-packaging/test/to-mac/Contents/MacOS/precomplete rename tools/update-packaging/test/to-mac/{ => Contents/Resources}/precomplete (95%) diff --git a/config/createprecomplete.py b/config/createprecomplete.py index 560677623e4..3241d526b28 100644 --- a/config/createprecomplete.py +++ b/config/createprecomplete.py @@ -44,14 +44,17 @@ def generate_precomplete(root_path): application update instructions. The given directory is used for the location to enumerate and to create the precomplete file. """ + rel_path_precomplete = "precomplete" # If inside a Mac bundle use the root of the bundle for the path. if os.path.basename(root_path) == "Resources": root_path = os.path.abspath(os.path.join(root_path, '../../')) + rel_path_precomplete = "Contents/Resources/precomplete" - rel_file_path_list, rel_dir_path_list = get_build_entries(root_path) - precomplete_file_path = os.path.join(root_path,"precomplete") - # open in binary mode to prevent OS specific line endings. + precomplete_file_path = os.path.join(root_path,rel_path_precomplete) + # Open the file so it exists before building the list of files and open it + # in binary mode to prevent OS specific line endings. precomplete_file = open(precomplete_file_path, "wb") + rel_file_path_list, rel_dir_path_list = get_build_entries(root_path) for rel_file_path in rel_file_path_list: precomplete_file.writelines("remove \""+rel_file_path+"\"\n") diff --git a/toolkit/mozapps/update/updater/updater.cpp b/toolkit/mozapps/update/updater/updater.cpp index ce6af32b9f3..8a6e107545a 100644 --- a/toolkit/mozapps/update/updater/updater.cpp +++ b/toolkit/mozapps/update/updater/updater.cpp @@ -2090,43 +2090,8 @@ ProcessReplaceRequest() LOG(("Updated.app dir can't be found: " LOG_S ", err: %d", updatedAppDir, errno)); } + ensure_remove_recursive(updatedAppDir); - - LOG(("Moving the precomplete file")); - - // We also need to move the precomplete file too. - NS_tchar precompleteSource[MAXPATHLEN]; - NS_tsnprintf(precompleteSource, sizeof(precompleteSource)/sizeof(precompleteSource[0]), - NS_T("%s/precomplete"), installDir); - - NS_tchar precompleteTmp[MAXPATHLEN]; - NS_tsnprintf(precompleteTmp, sizeof(precompleteTmp)/sizeof(precompleteTmp[0]), - NS_T("%s/precomplete.bak"), installDir); - - NS_tchar precompleteNew[MAXPATHLEN]; - NS_tsnprintf(precompleteNew, sizeof(precompleteNew)/sizeof(precompleteNew[0]), - NS_T("%s/Updated.app/precomplete"), installDir); - - ensure_remove(precompleteTmp); - LOG(("Begin moving precompleteSrc to precompleteTmp")); - rv = rename_file(precompleteSource, precompleteTmp); - LOG(("Moved precompleteSrc to precompleteTmp, err: %d", rv)); - LOG(("Begin moving precompleteNew to precompleteSrc")); - int rv2 = rename_file(precompleteNew, precompleteSource); - LOG(("Moved precompleteNew to precompleteSrc, err: %d", rv2)); - - // If new could not be moved to source, we only want to restore tmp to source - // if the first step succeeded. Note that it is possible for the first - // rename to have failed as well, for example if the tmpFile exists and we - // race between the ensure_remove call and the first rename call, but there - // isn't too much that we can do about that, unfortunately. - if (!rv && rv2) { - LOG(("Begin trying to recover precompleteSrc")); - rv = rename_file(precompleteTmp, precompleteSource); - LOG(("Moved precompleteTmp to precompleteSrc, err: %d", rv)); - } - - LOG(("Finished moving the precomplete file")); #endif gSucceeded = true; @@ -3639,7 +3604,11 @@ int AddPreCompleteActions(ActionList *list) return OK; } +#ifdef XP_MACOSX + NS_tchar *rb = GetManifestContents(NS_T("Contents/Resources/precomplete")); +#else NS_tchar *rb = GetManifestContents(NS_T("precomplete")); +#endif if (rb == nullptr) { LOG(("AddPreCompleteActions: error getting contents of precomplete " \ "manifest")); diff --git a/tools/update-packaging/make_full_update.sh b/tools/update-packaging/make_full_update.sh index 0ab09a6746c..f0466144dfc 100755 --- a/tools/update-packaging/make_full_update.sh +++ b/tools/update-packaging/make_full_update.sh @@ -49,9 +49,6 @@ targetfiles="updatev2.manifest updatev3.manifest" mkdir -p "$workdir" -# On Mac, the precomplete file added by Bug 386760 will cause OS X to reload the -# Info.plist so it launches the right architecture, bug 600098 - # Generate a list of all files in the target directory. pushd "$targetdir" if test $? -ne 0 ; then @@ -59,8 +56,10 @@ if test $? -ne 0 ; then fi if [ ! -f "precomplete" ]; then - notice "precomplete file is missing!" - exit 1 + if [ ! -f "Contents/Resources/precomplete" ]; then + notice "precomplete file is missing!" + exit 1 + fi fi list_files files diff --git a/tools/update-packaging/make_incremental_update.sh b/tools/update-packaging/make_incremental_update.sh index 507627b8fd8..cd170cd0dbd 100755 --- a/tools/update-packaging/make_incremental_update.sh +++ b/tools/update-packaging/make_incremental_update.sh @@ -35,6 +35,11 @@ check_for_forced_update() { return 0; fi + if [ "$forced_file_chk" = "Contents/Resources/precomplete" ]; then + ## "true" *giggle* + return 0; + fi + if [ "${forced_file_chk##*.}" = "chk" ] then ## "true" *giggle* @@ -92,9 +97,6 @@ archivefiles="updatev2.manifest updatev3.manifest" mkdir -p "$workdir" -# On Mac, the precomplete file added by Bug 386760 will cause OS X to reload the -# Info.plist so it launches the right architecture, bug 600098 - # Generate a list of all files in the target directory. pushd "$olddir" if test $? -ne 0 ; then @@ -112,8 +114,10 @@ if test $? -ne 0 ; then fi if [ ! -f "precomplete" ]; then - notice "precomplete file is missing!" - exit 1 + if [ ! -f "Contents/Resources/precomplete" ]; then + notice "precomplete file is missing!" + exit 1 + fi fi list_dirs newdirs diff --git a/tools/update-packaging/make_incremental_updates.py b/tools/update-packaging/make_incremental_updates.py index b06904a6681..0867434aeaf 100755 --- a/tools/update-packaging/make_incremental_updates.py +++ b/tools/update-packaging/make_incremental_updates.py @@ -336,12 +336,20 @@ def create_partial_patch(from_dir_path, to_dir_path, patch_filename, shas, patch # Create a hashtable of the from and to directories from_dir_hash,from_file_set,from_dir_set = patch_info.build_marfile_entry_hash(from_dir_path) to_dir_hash,to_file_set,to_dir_set = patch_info.build_marfile_entry_hash(to_dir_path) - # Require that the precomplete file is included in the complete update - if "precomplete" not in to_file_set: - raise Exception, "missing precomplete file in: "+to_dir_path # Create a list of the forced updates forced_list = forced_updates.strip().split('|') - forced_list.append("precomplete") + # Require that the precomplete file is included in the complete update + if "precomplete" not in to_file_set: + # The check with \ file separators allows tests for Mac to run on Windows + if "Contents/Resources/precomplete" not in to_file_set and "Contents\Resources\precomplete" not in to_file_set: + raise Exception, "missing precomplete file in: "+to_dir_path + else: + if "Contents/Resources/precomplete" in to_file_set: + forced_list.append("Contents/Resources/precomplete") + else: + forced_list.append("Contents\Resources\precomplete") + else: + forced_list.append("precomplete") # Files which exist in both sets need to be patched patch_filenames = list(from_file_set.intersection(to_file_set)) diff --git a/tools/update-packaging/test/from-mac/precomplete b/tools/update-packaging/test/from-mac/Contents/Resources/precomplete similarity index 93% rename from tools/update-packaging/test/from-mac/precomplete rename to tools/update-packaging/test/from-mac/Contents/Resources/precomplete index 5dd59ea913e..2d9068d3723 100644 --- a/tools/update-packaging/test/from-mac/precomplete +++ b/tools/update-packaging/test/from-mac/Contents/Resources/precomplete @@ -1,4 +1,3 @@ -remove "precomplete" remove "Contents/MacOS/{foodir/update.manifest" remove "Contents/MacOS/{foodir/same.txt" remove "Contents/MacOS/{foodir/same.bin" @@ -16,10 +15,12 @@ remove "Contents/MacOS/force.txt" remove "Contents/MacOS/extensions/diff/diff-patch-larger-than-file.txt" remove "Contents/MacOS/diff-patch-larger-than-file.txt" remove "Contents/MacOS/application.ini" +remove "Contents/Resources/precomplete" rmdir "Contents/MacOS/{foodir/" rmdir "Contents/MacOS/searchplugins/diff/" rmdir "Contents/MacOS/searchplugins/" rmdir "Contents/MacOS/extensions/diff/" rmdir "Contents/MacOS/extensions/" rmdir "Contents/MacOS/" +rmdir "Contents/Resources/" rmdir "Contents/" diff --git a/tools/update-packaging/test/make_full_update.sh b/tools/update-packaging/test/make_full_update.sh index 84d99731291..f2907da9ee4 100755 --- a/tools/update-packaging/test/make_full_update.sh +++ b/tools/update-packaging/test/make_full_update.sh @@ -50,9 +50,6 @@ targetfiles="updatev2.manifest updatev3.manifest" mkdir -p "$workdir" -# On Mac, the precomplete file added by Bug 386760 will cause OS X to reload the -# Info.plist so it launches the right architecture, bug 600098 - # Generate a list of all files in the target directory. pushd "$targetdir" if test $? -ne 0 ; then @@ -60,8 +57,10 @@ if test $? -ne 0 ; then fi if [ ! -f "precomplete" ]; then - notice "precomplete file is missing!" - exit 1 + if [ ! -f "Contents/Resources/precomplete" ]; then + notice "precomplete file is missing!" + exit 1 + fi fi list_files files diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/precomplete b/tools/update-packaging/test/to-mac/Contents/MacOS/precomplete deleted file mode 100644 index dd64d4d6f27..00000000000 --- a/tools/update-packaging/test/to-mac/Contents/MacOS/precomplete +++ /dev/null @@ -1,19 +0,0 @@ -remove "Contents/MacOS/{foodir/update.manifest" -remove "Contents/MacOS/{foodir/same.txt" -remove "Contents/MacOS/{foodir/same.bin" -remove "Contents/MacOS/{foodir/readme.txt" -remove "Contents/MacOS/{foodir/force.txt" -remove "Contents/MacOS/{foodir/diff-patch-larger-than-file.txt" -remove "Contents/MacOS/update.manifest" -remove "Contents/MacOS/searchplugins/diff/diff-patch-larger-than-file.txt" -remove "Contents/MacOS/same.txt" -remove "Contents/MacOS/same.bin" -remove "Contents/MacOS/removed-files" -remove "Contents/MacOS/readme.txt" -remove "Contents/MacOS/precomplete" -remove "Contents/MacOS/force.txt" -remove "Contents/MacOS/diff-patch-larger-than-file.txt" -rmdir "Contents/MacOS/{foodir/" -rmdir "Contents/MacOS/searchplugins/diff/" -rmdir "Contents/MacOS/searchplugins/added/" -rmdir "Contents/MacOS/searchplugins/" diff --git a/tools/update-packaging/test/to-mac/precomplete b/tools/update-packaging/test/to-mac/Contents/Resources/precomplete similarity index 95% rename from tools/update-packaging/test/to-mac/precomplete rename to tools/update-packaging/test/to-mac/Contents/Resources/precomplete index 0549035754a..7af8bfd7695 100644 --- a/tools/update-packaging/test/to-mac/precomplete +++ b/tools/update-packaging/test/to-mac/Contents/Resources/precomplete @@ -1,4 +1,3 @@ -remove "precomplete" remove "Contents/MacOS/{foodir/update.manifest" remove "Contents/MacOS/{foodir/same.txt" remove "Contents/MacOS/{foodir/same.bin" @@ -13,7 +12,6 @@ remove "Contents/MacOS/same.txt" remove "Contents/MacOS/same.bin" remove "Contents/MacOS/removed-files" remove "Contents/MacOS/readme.txt" -remove "Contents/MacOS/precomplete" remove "Contents/MacOS/force.txt" remove "Contents/MacOS/extensions/diff/diff-patch-larger-than-file.txt" remove "Contents/MacOS/extensions/added/file.txt" @@ -22,6 +20,7 @@ remove "Contents/MacOS/diff-patch-larger-than-file.bin" remove "Contents/MacOS/application.ini" remove "Contents/MacOS/added.txt" remove "Contents/MacOS/addFeedPrefs.js" +remove "Contents/Resources/precomplete" rmdir "Contents/MacOS/{foodir/" rmdir "Contents/MacOS/searchplugins/diff/" rmdir "Contents/MacOS/searchplugins/added/" @@ -30,4 +29,5 @@ rmdir "Contents/MacOS/extensions/diff/" rmdir "Contents/MacOS/extensions/added/" rmdir "Contents/MacOS/extensions/" rmdir "Contents/MacOS/" +rmdir "Contents/Resources/" rmdir "Contents/" From 1b5440b2948a209048b9e59355eb19ff9faeffcb Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:52:04 -0700 Subject: [PATCH 23/60] Mac v2 signing - Bug 1059567 - Packaging changes for the move of removed-files file from Contents/MacOS to Contents/Resources. r=bbondy, r=nthomas --HG-- rename : tools/update-packaging/test/from-mac/Contents/MacOS/application.ini => tools/update-packaging/test/from-mac/Contents/Resources/application.ini rename : tools/update-packaging/test/from-mac/Contents/MacOS/distribution/extensions/diff/diff-patch-larger-than-file.txt => tools/update-packaging/test/from-mac/Contents/Resources/distribution/extensions/diff/diff-patch-larger-than-file.txt rename : tools/update-packaging/test/from-mac/Contents/MacOS/extensions/diff/diff-patch-larger-than-file.txt => tools/update-packaging/test/from-mac/Contents/Resources/extensions/diff/diff-patch-larger-than-file.txt rename : tools/update-packaging/test/from-mac/Contents/MacOS/readme.txt => tools/update-packaging/test/from-mac/Contents/Resources/readme.txt rename : tools/update-packaging/test/from-mac/Contents/MacOS/removed.txt => tools/update-packaging/test/from-mac/Contents/Resources/removed.txt rename : tools/update-packaging/test/from-mac/Contents/MacOS/same.txt => tools/update-packaging/test/from-mac/Contents/Resources/same.txt rename : tools/update-packaging/test/from-mac/Contents/MacOS/searchplugins/diff/diff-patch-larger-than-file.txt => tools/update-packaging/test/from-mac/Contents/Resources/searchplugins/diff/diff-patch-larger-than-file.txt rename : tools/update-packaging/test/from-mac/Contents/MacOS/update-settings.ini => tools/update-packaging/test/from-mac/Contents/Resources/update-settings.ini rename : tools/update-packaging/test/from-mac/Contents/MacOS/{foodir/channel-prefs.js => tools/update-packaging/test/from-mac/Contents/Resources/{foodir/channel-prefs.js rename : tools/update-packaging/test/from-mac/Contents/MacOS/{foodir/force.txt => tools/update-packaging/test/from-mac/Contents/Resources/{foodir/force.txt rename : tools/update-packaging/test/to-mac/Contents/MacOS/application.ini => tools/update-packaging/test/to-mac/Contents/Resources/application.ini rename : tools/update-packaging/test/to-mac/Contents/MacOS/distribution/extensions/added/file.txt => tools/update-packaging/test/to-mac/Contents/Resources/distribution/extensions/added/file.txt rename : tools/update-packaging/test/to-mac/Contents/MacOS/distribution/extensions/diff/diff-patch-larger-than-file.txt => tools/update-packaging/test/to-mac/Contents/Resources/distribution/extensions/diff/diff-patch-larger-than-file.txt rename : tools/update-packaging/test/to-mac/Contents/MacOS/extensions/added/file.txt => tools/update-packaging/test/to-mac/Contents/Resources/extensions/added/file.txt rename : tools/update-packaging/test/to-mac/Contents/MacOS/extensions/diff/diff-patch-larger-than-file.txt => tools/update-packaging/test/to-mac/Contents/Resources/extensions/diff/diff-patch-larger-than-file.txt rename : tools/update-packaging/test/to-mac/Contents/MacOS/readme.txt => tools/update-packaging/test/to-mac/Contents/Resources/readme.txt rename : tools/update-packaging/test/to-mac/Contents/MacOS/removed-files => tools/update-packaging/test/to-mac/Contents/Resources/removed-files rename : tools/update-packaging/test/to-mac/Contents/MacOS/same.txt => tools/update-packaging/test/to-mac/Contents/Resources/same.txt rename : tools/update-packaging/test/to-mac/Contents/MacOS/searchplugins/added/file.txt => tools/update-packaging/test/to-mac/Contents/Resources/searchplugins/added/file.txt rename : tools/update-packaging/test/to-mac/Contents/MacOS/searchplugins/diff/diff-patch-larger-than-file.txt => tools/update-packaging/test/to-mac/Contents/Resources/searchplugins/diff/diff-patch-larger-than-file.txt rename : tools/update-packaging/test/to-mac/Contents/MacOS/update-settings.ini => tools/update-packaging/test/to-mac/Contents/Resources/update-settings.ini rename : tools/update-packaging/test/to-mac/Contents/MacOS/{foodir/channel-prefs.js => tools/update-packaging/test/to-mac/Contents/Resources/{foodir/channel-prefs.js rename : tools/update-packaging/test/to-mac/Contents/MacOS/{foodir/force.txt => tools/update-packaging/test/to-mac/Contents/Resources/{foodir/force.txt --- browser/installer/removed-files.in | 73 +++++++++++-------- toolkit/mozapps/installer/packager.mk | 6 ++ tools/update-packaging/common.sh | 37 +++------- .../make_incremental_update.sh | 17 ----- .../make_incremental_updates.py | 70 ++++++++---------- tools/update-packaging/test/common.sh | 37 +++------- .../{MacOS => Resources}/application.ini | 0 .../diff/diff-patch-larger-than-file.txt | 0 .../diff/diff-patch-larger-than-file.txt | 0 .../Contents/{MacOS => Resources}/readme.txt | 0 .../from-mac/Contents/Resources/removed-files | 8 ++ .../from-mac/Contents/Resources/removed.txt | 1 + .../Contents/{MacOS => Resources}/same.txt | 0 .../diff/diff-patch-larger-than-file.txt | 0 .../{MacOS => Resources}/update-settings.ini | 0 .../{foodir/channel-prefs.js | 0 .../{MacOS => Resources}/{foodir/force.txt | 0 .../Contents/MacOS => from}/removed-files | 6 -- .../{MacOS => Resources}/application.ini | 0 .../distribution/extensions/added/file.txt | 0 .../diff/diff-patch-larger-than-file.txt | 0 .../extensions/added/file.txt | 0 .../diff/diff-patch-larger-than-file.txt | 0 .../Contents/{MacOS => Resources}/readme.txt | 0 .../to-mac/Contents/Resources/removed-files | 14 ++++ .../Contents/{MacOS => Resources}/same.txt | 0 .../searchplugins/added/file.txt | 0 .../diff/diff-patch-larger-than-file.txt | 0 .../{MacOS => Resources}/update-settings.ini | 0 .../{foodir/channel-prefs.js | 0 .../{MacOS => Resources}/{foodir/force.txt | 0 .../test_make_incremental_updates.py | 4 +- 32 files changed, 128 insertions(+), 145 deletions(-) rename tools/update-packaging/test/from-mac/Contents/{MacOS => Resources}/application.ini (100%) rename tools/update-packaging/test/from-mac/Contents/{MacOS => Resources}/distribution/extensions/diff/diff-patch-larger-than-file.txt (100%) rename tools/update-packaging/test/from-mac/Contents/{MacOS => Resources}/extensions/diff/diff-patch-larger-than-file.txt (100%) rename tools/update-packaging/test/from-mac/Contents/{MacOS => Resources}/readme.txt (100%) create mode 100644 tools/update-packaging/test/from-mac/Contents/Resources/removed-files create mode 100644 tools/update-packaging/test/from-mac/Contents/Resources/removed.txt rename tools/update-packaging/test/from-mac/Contents/{MacOS => Resources}/same.txt (100%) rename tools/update-packaging/test/from-mac/Contents/{MacOS => Resources}/searchplugins/diff/diff-patch-larger-than-file.txt (100%) rename tools/update-packaging/test/from-mac/Contents/{MacOS => Resources}/update-settings.ini (100%) rename tools/update-packaging/test/from-mac/Contents/{MacOS => Resources}/{foodir/channel-prefs.js (100%) rename tools/update-packaging/test/from-mac/Contents/{MacOS => Resources}/{foodir/force.txt (100%) rename tools/update-packaging/test/{to-mac/Contents/MacOS => from}/removed-files (66%) rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/application.ini (100%) rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/distribution/extensions/added/file.txt (100%) rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/distribution/extensions/diff/diff-patch-larger-than-file.txt (100%) rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/extensions/added/file.txt (100%) rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/extensions/diff/diff-patch-larger-than-file.txt (100%) rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/readme.txt (100%) create mode 100644 tools/update-packaging/test/to-mac/Contents/Resources/removed-files rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/same.txt (100%) rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/searchplugins/added/file.txt (100%) rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/searchplugins/diff/diff-patch-larger-than-file.txt (100%) rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/update-settings.ini (100%) rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/{foodir/channel-prefs.js (100%) rename tools/update-packaging/test/to-mac/Contents/{MacOS => Resources}/{foodir/force.txt (100%) diff --git a/browser/installer/removed-files.in b/browser/installer/removed-files.in index b1b9f29b906..196b2a72f3e 100644 --- a/browser/installer/removed-files.in +++ b/browser/installer/removed-files.in @@ -52,51 +52,66 @@ # # Example: path/to/dir/* +# Due to Apple Mac OS X packaging requirements files that are in the same +# directory on other platforms must be located in different directories on +# Mac OS X. The following defines allow specifying the Mac OS X 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. + # File Removals # This is located under the "distribution/" directory and it was added before # Firefox 27 -distribution/extensions/testpilot@labs.mozilla.com.xpi +@DIR_MACOS@distribution/extensions/testpilot@labs.mozilla.com.xpi # Some users are ending up with unpacked chrome instead of omni.ja. This # causes updates to break badly, see bug 1063052. Removing the toplevel # chrome.manifest causes us to use the updated omni.ja. #ifndef MOZ_GTK -chrome.manifest + @DIR_MACOS@chrome.manifest + #ifdef XP_MACOSX + @DIR_RESOURCES@chrome.manifest + #endif #endif # Directory removals -chrome/ +@DIR_MACOS@chrome/ #ifdef XP_UNIX #ifndef XP_MACOSX chrome/icons/ chrome/icons/default/ #endif #endif -chrome/overlayinfo/ -components/ -defaults/autoconfig/ -defaults/profile/ -defaults/profile/chrome/ -defaults/profile/US/* -defaults/profile/extensions/ -defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/* -distribution/ -distribution/extensions/ -extensions/ -extensions/inspector@mozilla.org/* -extensions/reporter@mozilla.org/* -extensions/talkback@mozilla.org/* -extensions/testpilot@labs.mozilla.com/* -extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/* -extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/* -greprefs/ -jssubloader/ -modules/ +@DIR_MACOS@chrome/overlayinfo/ +@DIR_MACOS@components/ +@DIR_MACOS@defaults/autoconfig/ +@DIR_MACOS@defaults/profile/ +@DIR_MACOS@defaults/profile/chrome/ +@DIR_MACOS@defaults/profile/US/* +@DIR_MACOS@defaults/profile/extensions/ +@DIR_MACOS@defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/* +@DIR_MACOS@distribution/ +@DIR_MACOS@distribution/extensions/ +@DIR_MACOS@extensions/ +@DIR_MACOS@extensions/inspector@mozilla.org/* +@DIR_MACOS@extensions/reporter@mozilla.org/* +@DIR_MACOS@extensions/talkback@mozilla.org/* +@DIR_MACOS@extensions/testpilot@labs.mozilla.com/* +@DIR_MACOS@extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/* +@DIR_MACOS@extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/* +@DIR_MACOS@greprefs/ +@DIR_MACOS@jssubloader/ +@DIR_MACOS@modules/ #ifdef XP_MACOSX - plugins/Default Plugin.plugin/* - plugins/JavaEmbeddingPlugin.bundle/* - plugins/MRJPlugin.plugin/* - ../Plug-Ins/PrintPDE.plugin/* + @DIR_MACOS@plugins/Default Plugin.plugin/* + @DIR_MACOS@plugins/JavaEmbeddingPlugin.bundle/* + @DIR_MACOS@plugins/MRJPlugin.plugin/* + Contents/Plug-Ins/PrintPDE.plugin/* #endif -searchplugins/* -webapprt/components/ +@DIR_MACOS@searchplugins/* +@DIR_MACOS@webapprt/components/ diff --git a/toolkit/mozapps/installer/packager.mk b/toolkit/mozapps/installer/packager.mk index 5f7b01d69b7..8129487ea1c 100644 --- a/toolkit/mozapps/installer/packager.mk +++ b/toolkit/mozapps/installer/packager.mk @@ -608,6 +608,12 @@ endif DEFINES += -DDLL_PREFIX=$(DLL_PREFIX) -DDLL_SUFFIX=$(DLL_SUFFIX) -DBIN_SUFFIX=$(BIN_SUFFIX) +ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT)) +DEFINES += -DDIR_MACOS=Contents/MacOS/ -DDIR_RESOURCES=Contents/Resources/ +else +DEFINES += -DDIR_MACOS= -DDIR_RESOURCES= +endif + ifdef MOZ_FOLD_LIBS DEFINES += -DMOZ_FOLD_LIBS=1 endif diff --git a/tools/update-packaging/common.sh b/tools/update-packaging/common.sh index a5f23296237..eb358806fd0 100755 --- a/tools/update-packaging/common.sh +++ b/tools/update-packaging/common.sh @@ -130,11 +130,9 @@ append_remove_instructions() { filev3="$3" if [ -f "$dir/removed-files" ]; then - prefix= listfile="$dir/removed-files" - elif [ -f "$dir/Contents/MacOS/removed-files" ]; then - prefix=Contents/MacOS/ - listfile="$dir/Contents/MacOS/removed-files" + elif [ -f "$dir/Contents/Resources/removed-files" ]; then + listfile="$dir/Contents/Resources/removed-files" fi if [ -n "$listfile" ]; then # Map spaces to pipes so that we correctly handle filenames with spaces. @@ -149,33 +147,20 @@ append_remove_instructions() { if [ -n "$f" ]; then # Exclude comments if [ ! $(echo "$f" | grep -c '^#') = 1 ]; then - # Normalize the path to the root of the Mac OS X bundle if necessary - fixedprefix="$prefix" - if [ $prefix ]; then - if [ $(echo "$f" | grep -c '^\.\./') = 1 ]; then - if [ $(echo "$f" | grep -c '^\.\./\.\./') = 1 ]; then - f=$(echo $f | sed -e 's:^\.\.\/\.\.\/::') - fixedprefix="" - else - f=$(echo $f | sed -e 's:^\.\.\/::') - fixedprefix=$(echo "$prefix" | sed -e 's:[^\/]*\/$::') - fi - fi - fi if [ $(echo "$f" | grep -c '\/$') = 1 ]; then - notice " rmdir \"$fixedprefix$f\"" - echo "rmdir \"$fixedprefix$f\"" >> $filev2 - echo "rmdir \"$fixedprefix$f\"" >> $filev3 + notice " rmdir \"$f\"" + echo "rmdir \"$f\"" >> $filev2 + echo "rmdir \"$f\"" >> $filev3 elif [ $(echo "$f" | grep -c '\/\*$') = 1 ]; then # Remove the * f=$(echo "$f" | sed -e 's:\*$::') - notice " rmrfdir \"$fixedprefix$f\"" - echo "rmrfdir \"$fixedprefix$f\"" >> $filev2 - echo "rmrfdir \"$fixedprefix$f\"" >> $filev3 + notice " rmrfdir \"$f\"" + echo "rmrfdir \"$f\"" >> $filev2 + echo "rmrfdir \"$f\"" >> $filev3 else - notice " remove \"$fixedprefix$f\"" - echo "remove \"$fixedprefix$f\"" >> $filev2 - echo "remove \"$fixedprefix$f\"" >> $filev3 + notice " remove \"$f\"" + echo "remove \"$f\"" >> $filev2 + echo "remove \"$f\"" >> $filev3 fi fi fi diff --git a/tools/update-packaging/make_incremental_update.sh b/tools/update-packaging/make_incremental_update.sh index cd170cd0dbd..20a9881f19d 100755 --- a/tools/update-packaging/make_incremental_update.sh +++ b/tools/update-packaging/make_incremental_update.sh @@ -144,17 +144,6 @@ num_removes=0 for ((i=0; $i<$num_oldfiles; i=$i+1)); do f="${oldfiles[$i]}" - # This file is created by Talkback, so we can ignore it - if [ "$f" = "readme.txt" ]; then - continue 1 - fi - - # removed-files is excluded by make_incremental_updates.py so it is excluded - # here for consistency. - if [ `basename $f` = "removed-files" ]; then - continue 1 - fi - # If this file exists in the new directory as well, then check if it differs. if [ -f "$newdir/$f" ]; then @@ -219,12 +208,6 @@ num_newfiles=${#newfiles[*]} for ((i=0; $i<$num_newfiles; i=$i+1)); do f="${newfiles[$i]}" - # removed-files is excluded by make_incremental_updates.py so it is excluded - # here for consistency. - if [ `basename $f` = "removed-files" ]; then - continue 1 - fi - # If we've already tested this file, then skip it for ((j=0; $j<$num_oldfiles; j=$j+1)); do if [ "$f" = "${oldfiles[j]}" ]; then diff --git a/tools/update-packaging/make_incremental_updates.py b/tools/update-packaging/make_incremental_updates.py index 0867434aeaf..f571a7168a6 100755 --- a/tools/update-packaging/make_incremental_updates.py +++ b/tools/update-packaging/make_incremental_updates.py @@ -22,7 +22,7 @@ class PatchInfo: archive_files = list of files to include in this patch manifestv2 = set of manifest version 2 patch instructions manifestv3 = set of manifest version 3 patch instructions - file_exclusion_list = + file_exclusion_list = files to exclude from this patch. names without slashes will be excluded anywhere in the directory hiearchy. names with slashes will only be excluded at that exact path @@ -154,7 +154,7 @@ class PatchInfo: dirname_set.add(dirname) return mar_entry_hash, filename_set, dirname_set - + class MarFileEntry: """Represents a file inside a Mozilla Archive Format (MAR) @@ -163,7 +163,7 @@ class MarFileEntry: foo.mar/dir/bar.txt extracted into /tmp/foo: abs_path=/tmp/foo/dir/bar.txt name = dir/bar.txt - """ + """ def __init__(self, root, name): """root = path the the top of the mar name = relative path within the mar""" @@ -211,10 +211,10 @@ def bunzip_file(filename): if not filename.endswith(".bz2"): os.rename(filename, filename+".bz2") filename=filename+".bz2" - exec_shell_cmd('bzip2 -d "' + filename+'"') + exec_shell_cmd('bzip2 -d "' + filename+'"') -def extract_mar(filename, work_dir): +def extract_mar(filename, work_dir): """ Extracts the marfile intot he work_dir assumes work_dir already exists otherwise will throw osError""" print "Extracting "+filename+" to "+work_dir @@ -280,7 +280,7 @@ def create_partial_patch_for_file(from_marfile_entry, to_marfile_entry, shas, pa # Copy the pre-calculated file into our new patch work aread copy_file(src_file_abs_path, os.path.join(patch_info.work_dir, file_in_manifest_name)) patch_info.archive_files.append('"'+file_in_manifest_name+'"') - + def create_add_patch_for_file(to_marfile_entry, patch_info): """ Copy the file to the working dir, add the add instruction, and add it to the list of archive files """ copy_file(to_marfile_entry.abs_path, os.path.join(patch_info.work_dir, to_marfile_entry.name)) @@ -293,36 +293,28 @@ def create_add_if_not_patch_for_file(to_marfile_entry, patch_info): patch_info.append_add_if_not_instruction(to_marfile_entry.name) patch_info.archive_files.append('"'+to_marfile_entry.name+'"') -def process_explicit_remove_files(dir_path, patch_info): +def process_explicit_remove_files(dir_path, patch_info): """ Looks for a 'removed-files' file in the dir_path. If the removed-files does not exist this will throw. If found adds the removed-files found in that file to the patch_info""" # Windows and linux have this file at the root of the dir list_file_path = os.path.join(dir_path, "removed-files") - prefix="" if not os.path.exists(list_file_path): - # On Mac removed-files contains relative paths from Contents/MacOS/ - prefix= "Contents/MacOS" - list_file_path = os.path.join(dir_path, prefix+"/removed-files") + list_file_path = os.path.join(dir_path, "Contents/Resources/removed-files") if (os.path.exists(list_file_path)): - list_file = bz2.BZ2File(list_file_path,"r") # throws if doesn't exist + list_file = open(list_file_path,"r") # throws if doesn't exist lines = [] for line in list_file: lines.append(line.strip()) + list_file.close() lines.sort(reverse=True) for line in lines: # Exclude any blank and comment lines. if line and not line.startswith("#"): - if prefix != "": - if line.startswith("../"): - line = line.replace("../../", "") - line = line.replace("../", "Contents/") - else: - line = os.path.join(prefix,line) # Python on windows uses \ for path separators and the update # manifests expects / for path separators on all platforms. line = line.replace("\\", "/") @@ -336,7 +328,7 @@ def create_partial_patch(from_dir_path, to_dir_path, patch_filename, shas, patch # Create a hashtable of the from and to directories from_dir_hash,from_file_set,from_dir_set = patch_info.build_marfile_entry_hash(from_dir_path) to_dir_hash,to_file_set,to_dir_set = patch_info.build_marfile_entry_hash(to_dir_path) - # Create a list of the forced updates + # Create a list of the forced updates forced_list = forced_updates.strip().split('|') # Require that the precomplete file is included in the complete update if "precomplete" not in to_file_set: @@ -364,7 +356,7 @@ def create_partial_patch(from_dir_path, to_dir_path, patch_filename, shas, patch print 'Forcing "'+filename+'"' # This filename is in the forced list, explicitly add create_add_patch_for_file(to_dir_hash[filename], patch_info) - else: + else: if from_marfile_entry.sha() != to_marfile_entry.sha(): # Not the same - calculate a patch create_partial_patch_for_file(from_marfile_entry, to_marfile_entry, shas, patch_info) @@ -404,27 +396,27 @@ def create_partial_patch(from_dir_path, to_dir_path, patch_filename, shas, patch if not os.path.exists(patch_file_dir): os.makedirs(patch_file_dir) shutil.copy2(os.path.join(patch_info.work_dir,"output.mar"), patch_filename) + return patch_filename def usage(): print "-h for help" print "-f for patchlist_file" -def get_buildid(work_dir, platform): +def get_buildid(work_dir): """ extracts buildid from MAR - TODO: this should handle 1.8 branch too """ - if platform == 'mac': - ini = '%s/Contents/MacOS/application.ini' % work_dir - else: - ini = '%s/application.ini' % work_dir + ini = '%s/application.ini' % work_dir if not os.path.exists(ini): - print 'WARNING: application.ini not found, cannot find build ID' - return '' + ini = '%s/Contents/Resources/application.ini' % work_dir + if not os.path.exists(ini): + print 'WARNING: application.ini not found, cannot find build ID' + return '' + file = bz2.BZ2File(ini) for line in file: - if line.find('BuildID') == 0: - return line.strip().split('=')[1] + if line.find('BuildID') == 0: + return line.strip().split('=')[1] print 'WARNING: cannot find build ID in application.ini' return '' @@ -457,7 +449,7 @@ def create_partial_patches(patches): try: work_dir_root = tempfile.mkdtemp('-fastmode', 'tmp', os.getcwd()) print "Building patches using work dir: %s" % (work_dir_root) - + # Iterate through every patch set in the patch file patch_num = 1 for patch in patches: @@ -475,7 +467,7 @@ def create_partial_patches(patches): os.mkdir(work_dir_from) extract_mar(from_filename,work_dir_from) from_decoded = decode_filename(from_filename) - from_buildid = get_buildid(work_dir_from, from_decoded['platform']) + from_buildid = get_buildid(work_dir_from) from_shasum = sha.sha(open(from_filename).read()).hexdigest() from_size = str(os.path.getsize(to_filename)) @@ -484,13 +476,13 @@ def create_partial_patches(patches): os.mkdir(work_dir_to) extract_mar(to_filename, work_dir_to) to_decoded = decode_filename(from_filename) - to_buildid = get_buildid(work_dir_to, to_decoded['platform']) + to_buildid = get_buildid(work_dir_to) to_shasum = sha.sha(open(to_filename).read()).hexdigest() to_size = str(os.path.getsize(to_filename)) mar_extract_time = time.time() - partial_filename = create_partial_patch(work_dir_from, work_dir_to, patch_filename, shas, PatchInfo(work_dir, ['update.manifest','updatev2.manifest','updatev3.manifest','removed-files'],['/readme.txt']),forced_updates,['channel-prefs.js','update-settings.ini']) + partial_filename = create_partial_patch(work_dir_from, work_dir_to, patch_filename, shas, PatchInfo(work_dir, ['update.manifest','updatev2.manifest','updatev3.manifest'],[]),forced_updates,['channel-prefs.js','update-settings.ini']) partial_buildid = to_buildid partial_shasum = sha.sha(open(partial_filename).read()).hexdigest() partial_size = str(os.path.getsize(partial_filename)) @@ -499,11 +491,11 @@ def create_partial_patches(patches): 'to_filename': os.path.basename(to_filename), 'from_filename': os.path.basename(from_filename), 'partial_filename': os.path.basename(partial_filename), - 'to_buildid':to_buildid, - 'from_buildid':from_buildid, - 'to_sha1sum':to_shasum, - 'from_sha1sum':from_shasum, - 'partial_sha1sum':partial_shasum, + 'to_buildid':to_buildid, + 'from_buildid':from_buildid, + 'to_sha1sum':to_shasum, + 'from_sha1sum':from_shasum, + 'partial_sha1sum':partial_shasum, 'to_size':to_size, 'from_size':from_size, 'partial_size':partial_size, diff --git a/tools/update-packaging/test/common.sh b/tools/update-packaging/test/common.sh index 99a6586377d..7c133724e52 100755 --- a/tools/update-packaging/test/common.sh +++ b/tools/update-packaging/test/common.sh @@ -131,11 +131,9 @@ append_remove_instructions() { filev3="$3" if [ -f "$dir/removed-files" ]; then - prefix= listfile="$dir/removed-files" - elif [ -f "$dir/Contents/MacOS/removed-files" ]; then - prefix=Contents/MacOS/ - listfile="$dir/Contents/MacOS/removed-files" + elif [ -f "$dir/Contents/Resources/removed-files" ]; then + listfile="$dir/Contents/Resources/removed-files" fi if [ -n "$listfile" ]; then # Map spaces to pipes so that we correctly handle filenames with spaces. @@ -150,33 +148,20 @@ append_remove_instructions() { if [ -n "$f" ]; then # Exclude comments if [ ! $(echo "$f" | grep -c '^#') = 1 ]; then - # Normalize the path to the root of the Mac OS X bundle if necessary - fixedprefix="$prefix" - if [ $prefix ]; then - if [ $(echo "$f" | grep -c '^\.\./') = 1 ]; then - if [ $(echo "$f" | grep -c '^\.\./\.\./') = 1 ]; then - f=$(echo $f | sed -e 's:^\.\.\/\.\.\/::') - fixedprefix="" - else - f=$(echo $f | sed -e 's:^\.\.\/::') - fixedprefix=$(echo "$prefix" | sed -e 's:[^\/]*\/$::') - fi - fi - fi if [ $(echo "$f" | grep -c '\/$') = 1 ]; then - notice " rmdir \"$fixedprefix$f\"" - echo "rmdir \"$fixedprefix$f\"" >> $filev2 - echo "rmdir \"$fixedprefix$f\"" >> $filev3 + notice " rmdir \"$f\"" + echo "rmdir \"$f\"" >> $filev2 + echo "rmdir \"$f\"" >> $filev3 elif [ $(echo "$f" | grep -c '\/\*$') = 1 ]; then # Remove the * f=$(echo "$f" | sed -e 's:\*$::') - notice " rmrfdir \"$fixedprefix$f\"" - echo "rmrfdir \"$fixedprefix$f\"" >> $filev2 - echo "rmrfdir \"$fixedprefix$f\"" >> $filev3 + notice " rmrfdir \"$f\"" + echo "rmrfdir \"$f\"" >> $filev2 + echo "rmrfdir \"$f\"" >> $filev3 else - notice " remove \"$fixedprefix$f\"" - echo "remove \"$fixedprefix$f\"" >> $filev2 - echo "remove \"$fixedprefix$f\"" >> $filev3 + notice " remove \"$f\"" + echo "remove \"$f\"" >> $filev2 + echo "remove \"$f\"" >> $filev3 fi fi fi diff --git a/tools/update-packaging/test/from-mac/Contents/MacOS/application.ini b/tools/update-packaging/test/from-mac/Contents/Resources/application.ini similarity index 100% rename from tools/update-packaging/test/from-mac/Contents/MacOS/application.ini rename to tools/update-packaging/test/from-mac/Contents/Resources/application.ini diff --git a/tools/update-packaging/test/from-mac/Contents/MacOS/distribution/extensions/diff/diff-patch-larger-than-file.txt b/tools/update-packaging/test/from-mac/Contents/Resources/distribution/extensions/diff/diff-patch-larger-than-file.txt similarity index 100% rename from tools/update-packaging/test/from-mac/Contents/MacOS/distribution/extensions/diff/diff-patch-larger-than-file.txt rename to tools/update-packaging/test/from-mac/Contents/Resources/distribution/extensions/diff/diff-patch-larger-than-file.txt diff --git a/tools/update-packaging/test/from-mac/Contents/MacOS/extensions/diff/diff-patch-larger-than-file.txt b/tools/update-packaging/test/from-mac/Contents/Resources/extensions/diff/diff-patch-larger-than-file.txt similarity index 100% rename from tools/update-packaging/test/from-mac/Contents/MacOS/extensions/diff/diff-patch-larger-than-file.txt rename to tools/update-packaging/test/from-mac/Contents/Resources/extensions/diff/diff-patch-larger-than-file.txt diff --git a/tools/update-packaging/test/from-mac/Contents/MacOS/readme.txt b/tools/update-packaging/test/from-mac/Contents/Resources/readme.txt similarity index 100% rename from tools/update-packaging/test/from-mac/Contents/MacOS/readme.txt rename to tools/update-packaging/test/from-mac/Contents/Resources/readme.txt diff --git a/tools/update-packaging/test/from-mac/Contents/Resources/removed-files b/tools/update-packaging/test/from-mac/Contents/Resources/removed-files new file mode 100644 index 00000000000..5bbdac6f62e --- /dev/null +++ b/tools/update-packaging/test/from-mac/Contents/Resources/removed-files @@ -0,0 +1,8 @@ +Contents/Resources/removed1.txt +Contents/MacOS/removed2.bin +Contents/MacOS/recursivedir/meh/* +Contents/Resources/dir/ +Contents/MacOS/this file has spaces + + +Contents/MacOS/extra-spaces diff --git a/tools/update-packaging/test/from-mac/Contents/Resources/removed.txt b/tools/update-packaging/test/from-mac/Contents/Resources/removed.txt new file mode 100644 index 00000000000..2c3f0b3406a --- /dev/null +++ b/tools/update-packaging/test/from-mac/Contents/Resources/removed.txt @@ -0,0 +1 @@ +removed diff --git a/tools/update-packaging/test/from-mac/Contents/MacOS/same.txt b/tools/update-packaging/test/from-mac/Contents/Resources/same.txt similarity index 100% rename from tools/update-packaging/test/from-mac/Contents/MacOS/same.txt rename to tools/update-packaging/test/from-mac/Contents/Resources/same.txt diff --git a/tools/update-packaging/test/from-mac/Contents/MacOS/searchplugins/diff/diff-patch-larger-than-file.txt b/tools/update-packaging/test/from-mac/Contents/Resources/searchplugins/diff/diff-patch-larger-than-file.txt similarity index 100% rename from tools/update-packaging/test/from-mac/Contents/MacOS/searchplugins/diff/diff-patch-larger-than-file.txt rename to tools/update-packaging/test/from-mac/Contents/Resources/searchplugins/diff/diff-patch-larger-than-file.txt diff --git a/tools/update-packaging/test/from-mac/Contents/MacOS/update-settings.ini b/tools/update-packaging/test/from-mac/Contents/Resources/update-settings.ini similarity index 100% rename from tools/update-packaging/test/from-mac/Contents/MacOS/update-settings.ini rename to tools/update-packaging/test/from-mac/Contents/Resources/update-settings.ini diff --git a/tools/update-packaging/test/from-mac/Contents/MacOS/{foodir/channel-prefs.js b/tools/update-packaging/test/from-mac/Contents/Resources/{foodir/channel-prefs.js similarity index 100% rename from tools/update-packaging/test/from-mac/Contents/MacOS/{foodir/channel-prefs.js rename to tools/update-packaging/test/from-mac/Contents/Resources/{foodir/channel-prefs.js diff --git a/tools/update-packaging/test/from-mac/Contents/MacOS/{foodir/force.txt b/tools/update-packaging/test/from-mac/Contents/Resources/{foodir/force.txt similarity index 100% rename from tools/update-packaging/test/from-mac/Contents/MacOS/{foodir/force.txt rename to tools/update-packaging/test/from-mac/Contents/Resources/{foodir/force.txt diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/removed-files b/tools/update-packaging/test/from/removed-files similarity index 66% rename from tools/update-packaging/test/to-mac/Contents/MacOS/removed-files rename to tools/update-packaging/test/from/removed-files index 4fdfff7fd54..73b348d9c49 100644 --- a/tools/update-packaging/test/to-mac/Contents/MacOS/removed-files +++ b/tools/update-packaging/test/from/removed-files @@ -1,14 +1,8 @@ removed1.txt removed2.bin recursivedir/meh/* -removed3-foo.txt dir/ this file has spaces -notherdir/ extra-spaces - -lastFile - - diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/application.ini b/tools/update-packaging/test/to-mac/Contents/Resources/application.ini similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/application.ini rename to tools/update-packaging/test/to-mac/Contents/Resources/application.ini diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/distribution/extensions/added/file.txt b/tools/update-packaging/test/to-mac/Contents/Resources/distribution/extensions/added/file.txt similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/distribution/extensions/added/file.txt rename to tools/update-packaging/test/to-mac/Contents/Resources/distribution/extensions/added/file.txt diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/distribution/extensions/diff/diff-patch-larger-than-file.txt b/tools/update-packaging/test/to-mac/Contents/Resources/distribution/extensions/diff/diff-patch-larger-than-file.txt similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/distribution/extensions/diff/diff-patch-larger-than-file.txt rename to tools/update-packaging/test/to-mac/Contents/Resources/distribution/extensions/diff/diff-patch-larger-than-file.txt diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/extensions/added/file.txt b/tools/update-packaging/test/to-mac/Contents/Resources/extensions/added/file.txt similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/extensions/added/file.txt rename to tools/update-packaging/test/to-mac/Contents/Resources/extensions/added/file.txt diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/extensions/diff/diff-patch-larger-than-file.txt b/tools/update-packaging/test/to-mac/Contents/Resources/extensions/diff/diff-patch-larger-than-file.txt similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/extensions/diff/diff-patch-larger-than-file.txt rename to tools/update-packaging/test/to-mac/Contents/Resources/extensions/diff/diff-patch-larger-than-file.txt diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/readme.txt b/tools/update-packaging/test/to-mac/Contents/Resources/readme.txt similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/readme.txt rename to tools/update-packaging/test/to-mac/Contents/Resources/readme.txt diff --git a/tools/update-packaging/test/to-mac/Contents/Resources/removed-files b/tools/update-packaging/test/to-mac/Contents/Resources/removed-files new file mode 100644 index 00000000000..a756cc560bc --- /dev/null +++ b/tools/update-packaging/test/to-mac/Contents/Resources/removed-files @@ -0,0 +1,14 @@ +Contents/Resources/removed1.txt +Contents/MacOS/removed2.bin +Contents/MacOS/recursivedir/meh/* +Contents/MacOS/removed3-foo.txt +Contents/Resources/dir/ +Contents/MacOS/this file has spaces +Contents/MacOS/notherdir/ + + +Contents/Resources/extra-spaces + +Contents/MacOS/lastFile + + diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/same.txt b/tools/update-packaging/test/to-mac/Contents/Resources/same.txt similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/same.txt rename to tools/update-packaging/test/to-mac/Contents/Resources/same.txt diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/searchplugins/added/file.txt b/tools/update-packaging/test/to-mac/Contents/Resources/searchplugins/added/file.txt similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/searchplugins/added/file.txt rename to tools/update-packaging/test/to-mac/Contents/Resources/searchplugins/added/file.txt diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/searchplugins/diff/diff-patch-larger-than-file.txt b/tools/update-packaging/test/to-mac/Contents/Resources/searchplugins/diff/diff-patch-larger-than-file.txt similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/searchplugins/diff/diff-patch-larger-than-file.txt rename to tools/update-packaging/test/to-mac/Contents/Resources/searchplugins/diff/diff-patch-larger-than-file.txt diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/update-settings.ini b/tools/update-packaging/test/to-mac/Contents/Resources/update-settings.ini similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/update-settings.ini rename to tools/update-packaging/test/to-mac/Contents/Resources/update-settings.ini diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/{foodir/channel-prefs.js b/tools/update-packaging/test/to-mac/Contents/Resources/{foodir/channel-prefs.js similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/{foodir/channel-prefs.js rename to tools/update-packaging/test/to-mac/Contents/Resources/{foodir/channel-prefs.js diff --git a/tools/update-packaging/test/to-mac/Contents/MacOS/{foodir/force.txt b/tools/update-packaging/test/to-mac/Contents/Resources/{foodir/force.txt similarity index 100% rename from tools/update-packaging/test/to-mac/Contents/MacOS/{foodir/force.txt rename to tools/update-packaging/test/to-mac/Contents/Resources/{foodir/force.txt diff --git a/tools/update-packaging/test_make_incremental_updates.py b/tools/update-packaging/test_make_incremental_updates.py index 9fb64874556..016823dee15 100644 --- a/tools/update-packaging/test_make_incremental_updates.py +++ b/tools/update-packaging/test_make_incremental_updates.py @@ -11,7 +11,7 @@ from make_incremental_updates import PatchInfo, MarFileEntry class TestPatchInfo(unittest.TestCase): def setUp(self): self.work_dir = 'work_dir' - self.file_exclusion_list = ['update.manifest','updatev2.manifest','updatev3.manifest','removed-files'] + self.file_exclusion_list = ['update.manifest','updatev2.manifest','updatev3.manifest'] self.path_exclusion_list = ['/readme.txt'] self.patch_info = PatchInfo(self.work_dir, self.file_exclusion_list, self.path_exclusion_list) @@ -99,7 +99,7 @@ class TestMarFileEntry(unittest.TestCase): class TestMakeIncrementalUpdates(unittest.TestCase): def setUp(self): work_dir = '.' - self.patch_info = PatchInfo(work_dir, ['update.manifest','updatev2.manifest','updatev3.manifest','removed-files'],['/readme.txt']) + self.patch_info = PatchInfo(work_dir, ['update.manifest','updatev2.manifest','updatev3.manifest'],['/readme.txt']) root_path = '/' filename = 'test.file' self.mar_file_entry = MarFileEntry(root_path, filename) From 43f735be139c3311d5a616e373e3d76a799de828 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:52:08 -0700 Subject: [PATCH 24/60] Mac v2 signing - Bug 1064523 - Create staging directory outside of the Mac bundle. r=bbondy --- .../maintenanceservice/workmonitor.cpp | 147 ++++--- toolkit/mozapps/update/nsUpdateService.js | 14 +- toolkit/mozapps/update/updater/updater.cpp | 400 +++++++----------- toolkit/xre/nsUpdateDriver.cpp | 215 +++++----- 4 files changed, 379 insertions(+), 397 deletions(-) diff --git a/toolkit/components/maintenanceservice/workmonitor.cpp b/toolkit/components/maintenanceservice/workmonitor.cpp index 50e4beddb11..3615650ea6f 100644 --- a/toolkit/components/maintenanceservice/workmonitor.cpp +++ b/toolkit/components/maintenanceservice/workmonitor.cpp @@ -25,7 +25,7 @@ #include "errors.h" // Wait 15 minutes for an update operation to run at most. -// Updates usually take less than a minute so this seems like a +// Updates usually take less than a minute so this seems like a // significantly large and safe amount of time to wait. static const int TIME_TO_WAIT_ON_UPDATER = 15 * 60 * 1000; char16_t* MakeCommandLine(int argc, char16_t **argv); @@ -33,9 +33,9 @@ BOOL WriteStatusFailure(LPCWSTR updateDirPath, int errorCode); BOOL PathGetSiblingFilePath(LPWSTR destinationBuffer, LPCWSTR siblingFilePath, LPCWSTR newFileName); -/* +/* * Read the update.status file and sets isApplying to true if - * the status is set to applying + * the status is set to applying. * * @param updateDirPath The directory where update.status is stored * @param isApplying Out parameter for specifying if the status @@ -54,8 +54,8 @@ IsStatusApplying(LPCWSTR updateDirPath, BOOL &isApplying) } nsAutoHandle statusFile(CreateFileW(updateStatusFilePath, GENERIC_READ, - FILE_SHARE_READ | - FILE_SHARE_WRITE | + FILE_SHARE_READ | + FILE_SHARE_WRITE | FILE_SHARE_DELETE, nullptr, OPEN_EXISTING, 0, nullptr)); @@ -74,7 +74,7 @@ IsStatusApplying(LPCWSTR updateDirPath, BOOL &isApplying) LOG(("updater.exe returned status: %s", buf)); const char kApplying[] = "applying"; - isApplying = strncmp(buf, kApplying, + isApplying = strncmp(buf, kApplying, sizeof(kApplying) - 1) == 0; return TRUE; } @@ -82,15 +82,51 @@ IsStatusApplying(LPCWSTR updateDirPath, BOOL &isApplying) /** * Determines whether we're staging an update. * - * @param argc The argc value normally sent to updater.exe - * @param argv The argv value normally sent to updater.exe - * @param boolean True if we're staging an update + * @param argc The argc value normally sent to updater.exe + * @param argv The argv value normally sent to updater.exe + * @return boolean True if we're staging an update */ static bool IsUpdateBeingStaged(int argc, LPWSTR *argv) { // PID will be set to -1 if we're supposed to stage an update. - return argc == 4 && !wcscmp(argv[3], L"-1"); + return argc == 4 && !wcscmp(argv[3], L"-1") || + argc == 5 && !wcscmp(argv[4], L"-1"); +} + +/** + * Determines whether the param only contains digits. + * + * @param str The string to check + * @param boolean True if the param only contains digits + */ +static bool +IsDigits(WCHAR *str) +{ + while (*str) { + if (!iswdigit(*str++)) { + return FALSE; + } + } + return TRUE; +} + +/** + * Determines whether the command line contains just the directory to apply the + * update to (old command line) or if it contains the installation directory and + * the directory to apply the update to. + * + * @param argc The argc value normally sent to updater.exe + * @param argv The argv value normally sent to updater.exe + * @param boolean True if the command line contains just the directory to apply + * the update to + */ +static bool +IsOldCommandline(int argc, LPWSTR *argv) +{ + return argc == 4 && !wcscmp(argv[3], L"-1") || + !wcscmp(argv[3], L"0/replace") || + IsDigits(argv[3]); } /** @@ -103,19 +139,29 @@ IsUpdateBeingStaged(int argc, LPWSTR *argv) static BOOL GetInstallationDir(int argcTmp, LPWSTR *argvTmp, WCHAR aResultDir[MAX_PATH + 1]) { - if (argcTmp < 2) { + int index = 3; + if (IsOldCommandline(argcTmp, argvTmp)) { + index = 2; + } + + if (argcTmp < index) { return FALSE; } + wcsncpy(aResultDir, argvTmp[2], MAX_PATH); WCHAR* backSlash = wcsrchr(aResultDir, L'\\'); // Make sure that the path does not include trailing backslashes if (backSlash && (backSlash[1] == L'\0')) { *backSlash = L'\0'; } - bool backgroundUpdate = IsUpdateBeingStaged(argcTmp, argvTmp); - bool replaceRequest = (argcTmp >= 4 && wcsstr(argvTmp[3], L"/replace")); - if (backgroundUpdate || replaceRequest) { - return PathRemoveFileSpecW(aResultDir); + + // The new command line's argv[2] is always the installation directory. + if (index == 2) { + bool backgroundUpdate = IsUpdateBeingStaged(argcTmp, argvTmp); + bool replaceRequest = (argcTmp >= 4 && wcsstr(argvTmp[3], L"/replace")); + if (backgroundUpdate || replaceRequest) { + return PathRemoveFileSpecW(aResultDir); + } } return TRUE; } @@ -145,18 +191,23 @@ StartUpdateProcess(int argc, // updater.exe update-dir apply [wait-pid [callback-dir callback-path args]] LPWSTR cmdLine = MakeCommandLine(argc, argv); + int index = 3; + if (IsOldCommandline(argc, argv)) { + index = 2; + } + // If we're about to start the update process from session 0, // then we should not show a GUI. This only really needs to be done // on Vista and higher, but it's better to keep everything consistent // across all OS if it's of no harm. - if (argc >= 2 ) { + if (argc >= index) { // Setting the desktop to blank will ensure no GUI is displayed si.lpDesktop = L""; si.dwFlags |= STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; } - // We move the updater.ini file out of the way because we will handle + // We move the updater.ini file out of the way because we will handle // executing PostUpdate through the service. We handle PostUpdate from // the service because there are some per user things that happen that // can't run in session 0 which we run updater.exe in. @@ -169,7 +220,7 @@ StartUpdateProcess(int argc, // because of background updates. if (PathGetSiblingFilePath(updaterINI, argv[0], L"updater.ini") && PathGetSiblingFilePath(updaterINITemp, argv[0], L"updater.tmp")) { - selfHandlePostUpdate = MoveFileExW(updaterINI, updaterINITemp, + selfHandlePostUpdate = MoveFileExW(updaterINI, updaterINITemp, MOVEFILE_REPLACE_EXISTING); } @@ -178,14 +229,14 @@ StartUpdateProcess(int argc, // Search in updater.cpp for more info on MOZ_USING_SERVICE. putenv(const_cast("MOZ_USING_SERVICE=1")); LOG(("Starting service with cmdline: %ls", cmdLine)); - processStarted = CreateProcessW(argv[0], cmdLine, - nullptr, nullptr, FALSE, - CREATE_DEFAULT_ERROR_MODE, - nullptr, + processStarted = CreateProcessW(argv[0], cmdLine, + nullptr, nullptr, FALSE, + CREATE_DEFAULT_ERROR_MODE, + nullptr, nullptr, &si, &pi); // Empty value on putenv is how you remove an env variable in Windows putenv(const_cast("MOZ_USING_SERVICE=")); - + BOOL updateWasSuccessful = FALSE; if (processStarted) { // Wait for the updater process to finish @@ -216,7 +267,7 @@ StartUpdateProcess(int argc, if (updateWasSuccessful) { LOG(("update.status is still applying even know update " " was successful.")); - if (!WriteStatusFailure(argv[1], + if (!WriteStatusFailure(argv[1], SERVICE_STILL_APPLYING_ON_SUCCESS)) { LOG_WARN(("Could not write update.status still applying on" " success error.")); @@ -226,7 +277,7 @@ StartUpdateProcess(int argc, updateWasSuccessful = FALSE; } else { LOG_WARN(("update.status is still applying and update was not successful.")); - if (!WriteStatusFailure(argv[1], + if (!WriteStatusFailure(argv[1], SERVICE_STILL_APPLYING_ON_FAILURE)) { LOG_WARN(("Could not write update.status still applying on" " success error.")); @@ -241,18 +292,18 @@ StartUpdateProcess(int argc, } // Now that we're done with the update, restore back the updater.ini file - // We use it ourselves, and also we want it back in case we had any type + // We use it ourselves, and also we want it back in case we had any type // of error so that the normal update process can use it. if (selfHandlePostUpdate) { MoveFileExW(updaterINITemp, updaterINI, MOVEFILE_REPLACE_EXISTING); // Only run the PostUpdate if the update was successful - if (updateWasSuccessful && argc > 2) { + if (updateWasSuccessful && argc > index) { LPCWSTR updateInfoDir = argv[1]; - bool backgroundUpdate = IsUpdateBeingStaged(argc, argv); + bool stagingUpdate = IsUpdateBeingStaged(argc, argv); // Launch the PostProcess with admin access in session 0. This is - // actually launching the post update process but it takes in the + // actually launching the post update process but it takes in the // callback app path to figure out where to apply to. // The PostUpdate process with user only access will be done inside // the unelevated updater.exe after the update process is complete @@ -261,7 +312,7 @@ StartUpdateProcess(int argc, // Note that we don't need to do this if we're just staging the // update in the background, as the PostUpdate step runs when // performing the replacing in that case. - if (!backgroundUpdate) { + if (!stagingUpdate) { LOG(("Launching post update process as the service in session 0.")); if (!LaunchWinPostProcess(installDir, updateInfoDir, true, nullptr)) { LOG_WARN(("The post update process could not be launched." @@ -294,8 +345,8 @@ ProcessSoftwareUpdateCommand(DWORD argc, LPWSTR *argv) // We can only update update.status if argv[1] exists. argv[1] is // the directory where the update.status file exists. - if (argc < 2 || - !WriteStatusFailure(argv[1], + if (argc < 2 || + !WriteStatusFailure(argv[1], SERVICE_NOT_ENOUGH_COMMAND_LINE_ARGS)) { LOG_WARN(("Could not write update.status service update failure. (%d)", GetLastError())); @@ -320,7 +371,7 @@ ProcessSoftwareUpdateCommand(DWORD argc, LPWSTR *argv) if (!IsLocalFile(argv[0], isLocal) || !isLocal) { LOG_WARN(("Filesystem in path %ls is not supported (%d)", argv[0], GetLastError())); - if (!WriteStatusFailure(argv[1], + if (!WriteStatusFailure(argv[1], SERVICE_UPDATER_NOT_FIXED_DRIVE)) { LOG_WARN(("Could not write update.status service update failure. (%d)", GetLastError())); @@ -328,12 +379,12 @@ ProcessSoftwareUpdateCommand(DWORD argc, LPWSTR *argv) return FALSE; } - nsAutoHandle noWriteLock(CreateFileW(argv[0], GENERIC_READ, FILE_SHARE_READ, + nsAutoHandle noWriteLock(CreateFileW(argv[0], GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr)); if (INVALID_HANDLE_VALUE == noWriteLock) { LOG_WARN(("Could not set no write sharing access on file. (%d)", GetLastError())); - if (!WriteStatusFailure(argv[1], + if (!WriteStatusFailure(argv[1], SERVICE_COULD_NOT_LOCK_UPDATER)) { LOG_WARN(("Could not write update.status service update failure. (%d)", GetLastError())); @@ -352,7 +403,7 @@ ProcessSoftwareUpdateCommand(DWORD argc, LPWSTR *argv) } BOOL updaterIsCorrect; - if (result && !VerifySameFiles(argv[0], installDirUpdater, + if (result && !VerifySameFiles(argv[0], installDirUpdater, updaterIsCorrect)) { LOG_WARN(("Error checking if the updaters are the same.\n" "Path 1: %ls\nPath 2: %ls", argv[0], installDirUpdater)); @@ -360,7 +411,7 @@ ProcessSoftwareUpdateCommand(DWORD argc, LPWSTR *argv) } if (result && !updaterIsCorrect) { - LOG_WARN(("The updaters do not match, updater will not run.")); + LOG_WARN(("The updaters do not match, updater will not run.")); result = FALSE; } @@ -368,7 +419,7 @@ ProcessSoftwareUpdateCommand(DWORD argc, LPWSTR *argv) LOG(("updater.exe was compared successfully to the installation directory" " updater.exe.")); } else { - if (!WriteStatusFailure(argv[1], + if (!WriteStatusFailure(argv[1], SERVICE_UPDATER_COMPARE_ERROR)) { LOG_WARN(("Could not write update.status updater compare failure.")); } @@ -378,14 +429,14 @@ ProcessSoftwareUpdateCommand(DWORD argc, LPWSTR *argv) // Check to make sure the updater.exe module has the unique updater identity. // This is a security measure to make sure that the signed executable that // we will run is actually an updater. - HMODULE updaterModule = LoadLibraryEx(argv[0], nullptr, + HMODULE updaterModule = LoadLibraryEx(argv[0], nullptr, LOAD_LIBRARY_AS_DATAFILE); if (!updaterModule) { LOG_WARN(("updater.exe module could not be loaded. (%d)", GetLastError())); result = FALSE; } else { char updaterIdentity[64]; - if (!LoadStringA(updaterModule, IDS_UPDATER_IDENTITY, + if (!LoadStringA(updaterModule, IDS_UPDATER_IDENTITY, updaterIdentity, sizeof(updaterIdentity))) { LOG_WARN(("The updater.exe application does not contain the Mozilla" " updater identity.")); @@ -403,7 +454,7 @@ ProcessSoftwareUpdateCommand(DWORD argc, LPWSTR *argv) LOG(("The updater.exe application contains the Mozilla" " updater identity.")); } else { - if (!WriteStatusFailure(argv[1], + if (!WriteStatusFailure(argv[1], SERVICE_UPDATER_IDENTITY_ERROR)) { LOG_WARN(("Could not write update.status no updater identity.")); } @@ -438,12 +489,12 @@ ProcessSoftwareUpdateCommand(DWORD argc, LPWSTR *argv) LogFlush(); // If the update process was started, then updater.exe is responsible for - // setting the failure code. If it could not be started then we do the - // work. We set an error instead of directly setting status pending - // so that the app.update.service.errors pref can be updated when + // setting the failure code. If it could not be started then we do the + // work. We set an error instead of directly setting status pending + // so that the app.update.service.errors pref can be updated when // the callback app restarts. if (!updateProcessWasStarted) { - if (!WriteStatusFailure(argv[1], + if (!WriteStatusFailure(argv[1], SERVICE_UPDATER_COULD_NOT_BE_STARTED)) { LOG_WARN(("Could not write update.status service update failure. (%d)", GetLastError())); @@ -457,7 +508,7 @@ ProcessSoftwareUpdateCommand(DWORD argc, LPWSTR *argv) // When there is a certificate check error on the updater.exe application, // we want to write out the error. - if (!WriteStatusFailure(argv[1], + if (!WriteStatusFailure(argv[1], SERVICE_UPDATER_SIGN_ERROR)) { LOG_WARN(("Could not write pending state to update.status. (%d)", GetLastError())); @@ -547,7 +598,7 @@ DeleteSecureUpdater(WCHAR serviceUpdaterPath[MAX_PATH + 1]) * @param argv The service command line arguments, argv[0] and argv[1] * and automatically included by Windows. argv[2] is the * service command. - * + * * @return FALSE if there was an error executing the service command. */ BOOL @@ -558,7 +609,7 @@ ExecuteServiceCommand(int argc, LPWSTR *argv) return FALSE; } - // The tests work by making sure the log has changed, so we put a + // The tests work by making sure the log has changed, so we put a // unique ID in the log. RPC_WSTR guidString = RPC_WSTR(L""); GUID guid; diff --git a/toolkit/mozapps/update/nsUpdateService.js b/toolkit/mozapps/update/nsUpdateService.js index d03da884006..5bbf0c9e0f2 100644 --- a/toolkit/mozapps/update/nsUpdateService.js +++ b/toolkit/mozapps/update/nsUpdateService.js @@ -612,7 +612,17 @@ XPCOMUtils.defineLazyGetter(this, "gCanApplyUpdates", function aus_gCanApplyUpda var updateTestFile = getUpdateFile([FILE_PERMS_TEST]); LOG("gCanApplyUpdates - testing write access " + updateTestFile.path); testWriteAccess(updateTestFile, false); -#ifdef XP_WIN +#ifdef XP_MACOSX + // Check that the application bundle can be written to. + var appDirTestFile = getAppBaseDir(); + appDirTestFile.append(FILE_PERMS_TEST); + LOG("gCanApplyUpdates - testing write access " + appDirTestFile.path); + if (appDirTestFile.exists()) { + appDirTestFile.remove(false) + } + appDirTestFile.create(Ci.nsILocalFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE); + appDirTestFile.remove(false); +#elifdef XP_WIN var sysInfo = Cc["@mozilla.org/system-info;1"]. getService(Ci.nsIPropertyBag2); @@ -997,7 +1007,7 @@ function getUpdatesDir() { /** * Get the Active Updates directory inside the directory where we apply the - * background updates. + * staged update. * @return The active updates directory inside the updated directory, as a * nsIFile object. */ diff --git a/toolkit/mozapps/update/updater/updater.cpp b/toolkit/mozapps/update/updater/updater.cpp index 8a6e107545a..6c266aa7ec8 100644 --- a/toolkit/mozapps/update/updater/updater.cpp +++ b/toolkit/mozapps/update/updater/updater.cpp @@ -195,7 +195,7 @@ private: }; struct MARChannelStringTable { - MARChannelStringTable() + MARChannelStringTable() { MARChannelID[0] = '\0'; } @@ -268,8 +268,9 @@ private: //----------------------------------------------------------------------------- -static NS_tchar* gSourcePath; -static NS_tchar gDestinationPath[MAXPATHLEN]; +static NS_tchar* gPatchDirPath; +static NS_tchar gInstallDirPath[MAXPATHLEN]; +static NS_tchar gWorkingDirPath[MAXPATHLEN]; static ArchiveReader gArchiveReader; static bool gSucceeded = false; static bool sStagedUpdate = false; @@ -1369,7 +1370,7 @@ PatchFile::Prepare() mPatchIndex = sPatchIndex++; NS_tsnprintf(spath, sizeof(spath)/sizeof(spath[0]), - NS_T("%s/updating/%d.patch"), gDestinationPath, mPatchIndex); + NS_T("%s/updating/%d.patch"), gWorkingDirPath, mPatchIndex); NS_tremove(spath); @@ -1738,9 +1739,9 @@ IsUpdateFromMetro(int argc, NS_tchar **argv) #endif static void -LaunchCallbackApp(const NS_tchar *workingDir, - int argc, - NS_tchar **argv, +LaunchCallbackApp(const NS_tchar *workingDir, + int argc, + NS_tchar **argv, bool usingService) { putenv(const_cast("NO_EM_RESTART=")); @@ -1781,7 +1782,7 @@ WriteStatusFile(const char* aStatus) { NS_tchar filename[MAXPATHLEN]; NS_tsnprintf(filename, sizeof(filename)/sizeof(filename[0]), - NS_T("%s/update.status"), gSourcePath); + NS_T("%s/update.status"), gPatchDirPath); // Make sure that the directory for the update status file exists if (ensure_parent_dir(filename)) @@ -1818,7 +1819,7 @@ WriteStatusFile(int status) } #ifdef MOZ_MAINTENANCE_SERVICE -/* +/* * Read the update.status file and sets isPendingService to true if * the status is set to pending-service. * @@ -1832,7 +1833,7 @@ IsUpdateStatusPendingService() { NS_tchar filename[MAXPATHLEN]; NS_tsnprintf(filename, sizeof(filename)/sizeof(filename[0]), - NS_T("%s/update.status"), gSourcePath); + NS_T("%s/update.status"), gPatchDirPath); AutoFile file(NS_tfopen(filename, NS_T("rb"))); if (file == nullptr) @@ -1844,7 +1845,7 @@ IsUpdateStatusPendingService() const char kPendingService[] = "pending-service"; const char kAppliedService[] = "applied-service"; - return (strncmp(buf, kPendingService, + return (strncmp(buf, kPendingService, sizeof(kPendingService) - 1) == 0) || (strncmp(buf, kAppliedService, sizeof(kAppliedService) - 1) == 0); @@ -1852,7 +1853,7 @@ IsUpdateStatusPendingService() #endif #ifdef XP_WIN -/* +/* * Read the update.status file and sets isSuccess to true if * the status is set to succeeded. * @@ -1866,7 +1867,7 @@ IsUpdateStatusSucceeded(bool &isSucceeded) isSucceeded = false; NS_tchar filename[MAXPATHLEN]; NS_tsnprintf(filename, sizeof(filename)/sizeof(filename[0]), - NS_T("%s/update.status"), gSourcePath); + NS_T("%s/update.status"), gPatchDirPath); AutoFile file(NS_tfopen(filename, NS_T("rb"))); if (file == nullptr) @@ -1876,42 +1877,12 @@ IsUpdateStatusSucceeded(bool &isSucceeded) fread(buf, sizeof(buf), 1, file); const char kSucceeded[] = "succeeded"; - isSucceeded = strncmp(buf, kSucceeded, + isSucceeded = strncmp(buf, kSucceeded, sizeof(kSucceeded) - 1) == 0; return true; } #endif -/* - * Get the application installation directory. - * - * @param installDir Out parameter for specifying the installation directory. - * @return true if successful, false otherwise. - */ -template -static bool -GetInstallationDir(NS_tchar (&installDir)[N]) -{ - NS_tsnprintf(installDir, N, NS_T("%s"), gDestinationPath); - if (!sStagedUpdate && !sReplaceRequest) { - // no need to do any further processing - return true; - } - - NS_tchar *slash = (NS_tchar *) NS_tstrrchr(installDir, NS_SLASH); - // Make sure we're not looking at a trailing slash - if (slash && slash[1] == NS_T('\0')) { - *slash = NS_T('\0'); - slash = (NS_tchar *) NS_tstrrchr(installDir, NS_SLASH); - } - if (slash) { - *slash = NS_T('\0'); - } else { - return false; - } - return true; -} - /* * Copy the entire contents of the application installation directory to the * destination directory for the update process. @@ -1921,32 +1892,24 @@ GetInstallationDir(NS_tchar (&installDir)[N]) static int CopyInstallDirToDestDir() { - // First extract the installation directory from gSourcePath by going two - // levels above it. This is effectively skipping over "updates/0". - NS_tchar installDir[MAXPATHLEN]; - if (!GetInstallationDir(installDir)) { - return NO_INSTALLDIR_ERROR; - } - // These files should not be copied over to the updated app #ifdef XP_WIN #define SKIPLIST_COUNT 3 +#elif XP_MACOSX +#define SKIPLIST_COUNT 0 #else #define SKIPLIST_COUNT 2 #endif copy_recursive_skiplist skiplist; -#ifdef XP_MACOSX - skiplist.append(0, installDir, NS_T("Updated.app")); - skiplist.append(1, installDir, NS_T("Contents/MacOS/updates/0")); -#else - skiplist.append(0, installDir, NS_T("updated")); - skiplist.append(1, installDir, NS_T("updates/0")); +#ifndef XP_MACOSX + skiplist.append(0, gInstallDirPath, NS_T("updated")); + skiplist.append(1, gInstallDirPath, NS_T("updates/0")); #ifdef XP_WIN - skiplist.append(2, installDir, NS_T("updated.update_in_progress.lock")); + skiplist.append(2, gInstallDirPath, NS_T("updated.update_in_progress.lock")); #endif #endif - return ensure_copy_recursive(installDir, gDestinationPath, skiplist); + return ensure_copy_recursive(gInstallDirPath, gWorkingDirPath, skiplist); } /* @@ -1959,54 +1922,50 @@ static int ProcessReplaceRequest() { // The replacement algorithm is like this: - // 1. Move sourceDir to tmpDir. In case of failure, abort. - // 2. Move newDir to sourceDir. In case of failure, revert step 1 and abort. + // 1. Move destDir to tmpDir. In case of failure, abort. + // 2. Move newDir to destDir. In case of failure, revert step 1 and abort. // 3. Delete tmpDir (or defer it to the next reboot). - NS_tchar installDir[MAXPATHLEN]; - if (!GetInstallationDir(installDir)) { - return NO_INSTALLDIR_ERROR; - } - #ifdef XP_MACOSX - NS_tchar sourceDir[MAXPATHLEN]; - NS_tsnprintf(sourceDir, sizeof(sourceDir)/sizeof(sourceDir[0]), - NS_T("%s/Contents"), installDir); + NS_tchar destDir[MAXPATHLEN]; + NS_tsnprintf(destDir, sizeof(destDir)/sizeof(destDir[0]), + NS_T("%s/Contents"), gInstallDirPath); #elif XP_WIN // Windows preserves the case of the file/directory names. We use the // GetLongPathName API in order to get the correct case for the directory // name, so that if the user has used a different case when launching the // application, the installation directory's name does not change. - NS_tchar sourceDir[MAXPATHLEN]; - if (!GetLongPathNameW(installDir, sourceDir, sizeof(sourceDir)/sizeof(sourceDir[0]))) { + NS_tchar destDir[MAXPATHLEN]; + if (!GetLongPathNameW(gInstallDirPath, destDir, sizeof(destDir)/sizeof(destDir[0]))) { return NO_INSTALLDIR_ERROR; } #else - NS_tchar* sourceDir = installDir; + NS_tchar* destDir = gInstallDirPath; #endif NS_tchar tmpDir[MAXPATHLEN]; NS_tsnprintf(tmpDir, sizeof(tmpDir)/sizeof(tmpDir[0]), - NS_T("%s.bak"), sourceDir); + NS_T("%s.bak"), destDir); NS_tchar newDir[MAXPATHLEN]; NS_tsnprintf(newDir, sizeof(newDir)/sizeof(newDir[0]), #ifdef XP_MACOSX - NS_T("%s/Updated.app/Contents"), + NS_T("%s/Contents"), + gWorkingDirPath); #else NS_T("%s.bak/updated"), + gInstallDirPath); #endif - installDir); // First try to remove the possibly existing temp directory, because if this - // directory exists, we will fail to rename sourceDir. + // directory exists, we will fail to rename destDir. // No need to error check here because if this fails, we will fail in the // next step anyways. ensure_remove_recursive(tmpDir); - LOG(("Begin moving sourceDir (" LOG_S ") to tmpDir (" LOG_S ")", - sourceDir, tmpDir)); - int rv = rename_file(sourceDir, tmpDir, true); + LOG(("Begin moving destDir (" LOG_S ") to tmpDir (" LOG_S ")", + destDir, tmpDir)); + int rv = rename_file(destDir, tmpDir, true); #ifdef XP_WIN // On Windows, if Firefox is launched using the shortcut, it will hold a handle // to its installation directory open, which might not get released in time. @@ -2015,30 +1974,30 @@ ProcessReplaceRequest() const int max_retries = 10; int retries = 0; while (rv == WRITE_ERROR && (retries++ < max_retries)) { - LOG(("PerformReplaceRequest: sourceDir rename attempt %d failed. " \ + LOG(("PerformReplaceRequest: destDir rename attempt %d failed. " \ "File: " LOG_S ". Last error: %d, err: %d", retries, - sourceDir, GetLastError(), rv)); + destDir, GetLastError(), rv)); Sleep(100); - rv = rename_file(sourceDir, tmpDir, true); + rv = rename_file(destDir, tmpDir, true); } #endif if (rv) { - LOG(("Moving sourceDir to tmpDir failed, err: %d", rv)); + LOG(("Moving destDir to tmpDir failed, err: %d", rv)); return rv; } - LOG(("Begin moving newDir (" LOG_S ") to sourceDir (" LOG_S ")", - newDir, sourceDir)); - rv = rename_file(newDir, sourceDir, true); + LOG(("Begin moving newDir (" LOG_S ") to destDir (" LOG_S ")", + newDir, destDir)); + rv = rename_file(newDir, destDir, true); if (rv) { - LOG(("Moving newDir to sourceDir failed, err: %d", rv)); - LOG(("Now, try to move tmpDir back to sourceDir")); - ensure_remove_recursive(sourceDir); - int rv2 = rename_file(tmpDir, sourceDir, true); + LOG(("Moving newDir to destDir failed, err: %d", rv)); + LOG(("Now, try to move tmpDir back to destDir")); + ensure_remove_recursive(destDir); + int rv2 = rename_file(tmpDir, destDir, true); if (rv2) { - LOG(("Moving tmpDir back to sourceDir failed, err: %d", rv2)); + LOG(("Moving tmpDir back to destDir failed, err: %d", rv2)); } return rv; } @@ -2058,39 +2017,11 @@ ProcessReplaceRequest() } #ifdef XP_MACOSX - // On OS X, we need to copy anything else left over inside the Updated.app - // directory, and then we need to get rid of it as it's no longer going to - // be useful. + // On OS X, we we need to remove the staging directory after its Contents + // directory has been moved. NS_tchar updatedAppDir[MAXPATHLEN]; NS_tsnprintf(updatedAppDir, sizeof(updatedAppDir)/sizeof(updatedAppDir[0]), - NS_T("%s/Updated.app"), installDir); - NS_tDIR *dir = NS_topendir(updatedAppDir); - if (dir) { - NS_tdirent *entry; - while ((entry = NS_treaddir(dir)) != 0) { - if (NS_tstrcmp(entry->d_name, NS_T(".")) && - NS_tstrcmp(entry->d_name, NS_T(".."))) { - NS_tchar childSrcPath[MAXPATHLEN]; - NS_tsnprintf(childSrcPath, sizeof(childSrcPath)/sizeof(childSrcPath[0]), - NS_T("%s/%s"), updatedAppDir, entry->d_name); - NS_tchar childDstPath[MAXPATHLEN]; - NS_tsnprintf(childDstPath, sizeof(childDstPath)/sizeof(childDstPath[0]), - NS_T("%s/%s"), installDir, entry->d_name); - ensure_remove_recursive(childDstPath); - rv = rename_file(childSrcPath, childDstPath, true); - if (rv) { - LOG(("Moving " LOG_S " to " LOG_S " failed, err: %d", - childSrcPath, childDstPath, errno)); - } - } - } - - NS_tclosedir(dir); - } else { - LOG(("Updated.app dir can't be found: " LOG_S ", err: %d", - updatedAppDir, errno)); - } - + NS_T("%s/Updated.app"), gPatchDirPath); ensure_remove_recursive(updatedAppDir); #endif @@ -2100,7 +2031,7 @@ ProcessReplaceRequest() } #ifdef XP_WIN -static void +static void WaitForServiceFinishThread(void *param) { // We wait at most 10 minutes, we already waited 5 seconds previously @@ -2144,11 +2075,11 @@ GetUpdateFileName(NS_tchar *fileName, int maxChars) NS_tchar linkFileName[MAXPATHLEN]; NS_tsnprintf(linkFileName, sizeof(linkFileName)/sizeof(linkFileName[0]), - NS_T("%s/update.link"), gSourcePath); + NS_T("%s/update.link"), gPatchDirPath); AutoFile linkFile(NS_tfopen(linkFileName, NS_T("rb"))); if (linkFile == nullptr) { NS_tsnprintf(fileName, maxChars, - NS_T("%s/update.mar"), gSourcePath); + NS_T("%s/update.mar"), gPatchDirPath); return OK; } @@ -2174,7 +2105,7 @@ GetUpdateFileName(NS_tchar *fileName, int maxChars) #else // We currently only support update.link files under GONK NS_tsnprintf(fileName, maxChars, - NS_T("%s/update.mar"), gSourcePath); + NS_T("%s/update.mar"), gPatchDirPath); #endif return OK; } @@ -2199,19 +2130,11 @@ UpdateThreadFunc(void *param) } if (rv == OK) { - NS_tchar installDir[MAXPATHLEN]; - if (sStagedUpdate) { - if (!GetInstallationDir(installDir)) { - rv = NO_INSTALLDIR_ERROR; - } - } else { - NS_tstrcpy(installDir, gDestinationPath); - } if (rv == OK) { NS_tchar updateSettingsPath[MAX_TEXT_LEN]; NS_tsnprintf(updateSettingsPath, sizeof(updateSettingsPath) / sizeof(updateSettingsPath[0]), - NS_T("%s/update-settings.ini"), installDir); + NS_T("%s/update-settings.ini"), gWorkingDirPath); MARChannelStringTable MARStrings; if (ReadMARChannelIDs(updateSettingsPath, &MARStrings) != OK) { // If we can't read from update-settings.ini then we shouldn't impose @@ -2234,7 +2157,7 @@ UpdateThreadFunc(void *param) gArchiveReader.Close(); NS_tchar updatingDir[MAXPATHLEN]; NS_tsnprintf(updatingDir, sizeof(updatingDir)/sizeof(updatingDir[0]), - NS_T("%s/updating"), gDestinationPath); + NS_T("%s/updating"), gWorkingDirPath); ensure_remove_recursive(updatingDir); } } @@ -2252,23 +2175,11 @@ UpdateThreadFunc(void *param) // bypass this fallback, and is used in the updater tests. // The only special thing which we should do here is to remove the // staged directory as it won't be useful any more. - NS_tchar installDir[MAXPATHLEN]; - if (GetInstallationDir(installDir)) { - NS_tchar stageDir[MAXPATHLEN]; - NS_tsnprintf(stageDir, sizeof(stageDir)/sizeof(stageDir[0]), -#ifdef XP_MACOSX - NS_T("%s/Updated.app"), -#else - NS_T("%s/updated"), -#endif - installDir); - - ensure_remove_recursive(stageDir); - WriteStatusFile(sUsingService ? "pending-service" : "pending"); - char processUpdates[] = "MOZ_PROCESS_UPDATES="; - putenv(processUpdates); // We need to use -process-updates again in the tests - reportRealResults = false; // pretend success - } + ensure_remove_recursive(gWorkingDirPath); + WriteStatusFile(sUsingService ? "pending-service" : "pending"); + char processUpdates[] = "MOZ_PROCESS_UPDATES="; + putenv(processUpdates); // We need to use -process-updates again in the tests + reportRealResults = false; // pretend success } if (reportRealResults) { @@ -2342,14 +2253,14 @@ int NS_main(int argc, NS_tchar **argv) } // The directory containing the update information. - gSourcePath = argv[1]; + gPatchDirPath = argv[1]; // The directory we're going to update to. // We copy this string because we need to remove trailing slashes. The C++ // standard says that it's always safe to write to strings pointed to by argv // elements, but I don't necessarily believe it. - NS_tstrncpy(gDestinationPath, argv[2], MAXPATHLEN); - gDestinationPath[MAXPATHLEN - 1] = NS_T('\0'); - NS_tchar *slash = NS_tstrrchr(gDestinationPath, NS_SLASH); + NS_tstrncpy(gInstallDirPath, argv[2], MAXPATHLEN); + gInstallDirPath[MAXPATHLEN - 1] = NS_T('\0'); + NS_tchar *slash = NS_tstrrchr(gInstallDirPath, NS_SLASH); if (slash && !slash[1]) { *slash = NS_T('\0'); } @@ -2365,7 +2276,7 @@ int NS_main(int argc, NS_tchar **argv) #ifdef MOZ_MAINTENANCE_SERVICE useService = IsUpdateStatusPendingService(); // Our tests run with a different apply directory for each test. - // We use this registry key on our test slaves to store the + // We use this registry key on our test slaves to store the // allowed name/issuers. testOnlyFallbackKeyExists = DoesFallbackKeyExist(); #endif @@ -2395,23 +2306,34 @@ int NS_main(int argc, NS_tchar **argv) #else int pid = 0; #endif - if (argc > 3) { + if (argc > 4) { #ifdef XP_WIN - pid = _wtoi64(argv[3]); + pid = _wtoi64(argv[4]); #else - pid = atoi(argv[3]); + pid = atoi(argv[4]); #endif if (pid == -1) { // This is a signal from the parent process that the updater should stage // the update. sStagedUpdate = true; - } else if (NS_tstrstr(argv[3], NS_T("/replace"))) { + } else if (NS_tstrstr(argv[4], NS_T("/replace"))) { // We're processing a request to replace the application with a staged // update. sReplaceRequest = true; } } + // The directory we're going to update to. + // We copy this string because we need to remove trailing slashes. The C++ + // standard says that it's always safe to write to strings pointed to by argv + // elements, but I don't necessarily believe it. + NS_tstrncpy(gWorkingDirPath, argv[3], MAXPATHLEN); + gWorkingDirPath[MAXPATHLEN - 1] = NS_T('\0'); + slash = NS_tstrrchr(gWorkingDirPath, NS_SLASH); + if (slash && !slash[1]) { + *slash = NS_T('\0'); + } + if (getenv("MOZ_OS_UPDATE")) { sIsOSUpdate = true; putenv(const_cast("MOZ_OS_UPDATE=")); @@ -2420,28 +2342,22 @@ int NS_main(int argc, NS_tchar **argv) if (sReplaceRequest) { // If we're attempting to replace the application, try to append to the // log generated when staging the staged update. - NS_tchar installDir[MAXPATHLEN]; - if (!GetInstallationDir(installDir)) { - fprintf(stderr, "Could not get the installation directory\n"); - return 1; - } - #ifdef XP_WIN - NS_tchar* logDir = gSourcePath; + NS_tchar* logDir = gPatchDirPath; +#else +#ifdef XP_MACOSX + NS_tchar* logDir = gPatchDirPath; #else NS_tchar logDir[MAXPATHLEN]; NS_tsnprintf(logDir, sizeof(logDir)/sizeof(logDir[0]), -#ifdef XP_MACOSX - NS_T("%s/Updated.app/Contents/MacOS/updates"), -#else NS_T("%s/updated/updates"), + gInstallDirPath); #endif - installDir); #endif LogInitAppend(logDir, NS_T("last-update.log"), NS_T("update.log")); } else { - LogInit(gSourcePath, NS_T("update.log")); + LogInit(gPatchDirPath, NS_T("update.log")); } if (!WriteStatusFile("applying")) { @@ -2455,6 +2371,10 @@ int NS_main(int argc, NS_tchar **argv) LOG(("Performing a replace request")); } + LOG(("PATCH DIRECTORY " LOG_S, gPatchDirPath)); + LOG(("INSTALLATION DIRECTORY " LOG_S, gInstallDirPath)); + LOG(("WORKING DIRECTORY " LOG_S, gWorkingDirPath)); + #ifdef MOZ_WIDGET_GONK const char *prioEnv = getenv("MOZ_UPDATER_PRIO"); if (prioEnv) { @@ -2522,14 +2442,14 @@ int NS_main(int argc, NS_tchar **argv) // The callback is the remaining arguments starting at callbackIndex. // The argument specified by callbackIndex is the callback executable and the // argument prior to callbackIndex is the working directory. - const int callbackIndex = 5; + const int callbackIndex = 6; #if defined(XP_WIN) sUsingService = getenv("MOZ_USING_SERVICE") != nullptr; putenv(const_cast("MOZ_USING_SERVICE=")); - // lastFallbackError keeps track of the last error for the service not being - // used, in case of an error when fallback is not enabled we write the - // error to the update.status file. + // lastFallbackError keeps track of the last error for the service not being + // used, in case of an error when fallback is not enabled we write the + // error to the update.status file. // When fallback is disabled (MOZ_NO_SERVICE_FALLBACK does not exist) then // we will instead fallback to not using the service and display a UAC prompt. int lastFallbackError = FALLBACKKEY_UNKNOWN_ERROR; @@ -2543,17 +2463,15 @@ int NS_main(int argc, NS_tchar **argv) NS_tchar updateLockFilePath[MAXPATHLEN]; if (sStagedUpdate) { // When staging an update, the lock file is: - // $INSTALLDIR\updated.update_in_progress.lock + // \updated.update_in_progress.lock NS_tsnprintf(updateLockFilePath, sizeof(updateLockFilePath)/sizeof(updateLockFilePath[0]), - NS_T("%s.update_in_progress.lock"), gDestinationPath); + NS_T("%s/updated.update_in_progress.lock"), gInstallDirPath); } else if (sReplaceRequest) { // When processing a replace request, the lock file is: - // $INSTALLDIR\..\moz_update_in_progress.lock + // \..\moz_update_in_progress.lock NS_tchar installDir[MAXPATHLEN]; - if (!GetInstallationDir(installDir)) { - return 1; - } + NS_tstrcpy(installDir, gInstallDirPath); NS_tchar *slash = (NS_tchar *) NS_tstrrchr(installDir, NS_SLASH); *slash = NS_T('\0'); NS_tsnprintf(updateLockFilePath, @@ -2561,7 +2479,7 @@ int NS_main(int argc, NS_tchar **argv) NS_T("%s\\moz_update_in_progress.lock"), installDir); } else { // In the non-staging update case, the lock file is: - // $INSTALLDIR\$APPNAME.exe.update_in_progress.lock + // \.exe.update_in_progress.lock NS_tsnprintf(updateLockFilePath, sizeof(updateLockFilePath)/sizeof(updateLockFilePath[0]), NS_T("%s.update_in_progress.lock"), argv[callbackIndex]); @@ -2593,17 +2511,16 @@ int NS_main(int argc, NS_tchar **argv) NS_tsnprintf(elevatedLockFilePath, sizeof(elevatedLockFilePath)/sizeof(elevatedLockFilePath[0]), - NS_T("%s/update_elevated.lock"), gSourcePath); - + NS_T("%s/update_elevated.lock"), gPatchDirPath); // Even if a file has no sharing access, you can still get its attributes bool startedFromUnelevatedUpdater = GetFileAttributesW(elevatedLockFilePath) != INVALID_FILE_ATTRIBUTES; - + // If we're running from the service, then we were started with the same // token as the service so the permissions are already dropped. If we're - // running from an elevated updater that was started from an unelevated - // updater, then we drop the permissions here. We do not drop the + // running from an elevated updater that was started from an unelevated + // updater, then we drop the permissions here. We do not drop the // permissions on the originally called updater because we use its token // to start the callback application. if(startedFromUnelevatedUpdater) { @@ -2612,7 +2529,7 @@ int NS_main(int argc, NS_tchar **argv) UACHelper::DisablePrivileges(nullptr); } - if (updateLockFileHandle == INVALID_HANDLE_VALUE || + if (updateLockFileHandle == INVALID_HANDLE_VALUE || (useService && testOnlyFallbackKeyExists && noServiceFallback)) { if (!_waccess(elevatedLockFilePath, F_OK) && NS_tremove(elevatedLockFilePath) != 0) { @@ -2640,11 +2557,6 @@ int NS_main(int argc, NS_tchar **argv) return 1; } - NS_tchar installDir[MAXPATHLEN]; - if (!GetInstallationDir(installDir)) { - return 1; - } - // Make sure the path to the updater to use for the update is on local. // We do this check to make sure that file locking is available for // race condition security checks. @@ -2670,11 +2582,11 @@ int NS_main(int argc, NS_tchar **argv) // are available. If not don't use the service. if (useService) { WCHAR maintenanceServiceKey[MAX_PATH + 1]; - if (CalculateRegistryPathFromFilePath(installDir, maintenanceServiceKey)) { + if (CalculateRegistryPathFromFilePath(gInstallDirPath, maintenanceServiceKey)) { HKEY baseKey; - if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, - maintenanceServiceKey, 0, - KEY_READ | KEY_WOW64_64KEY, + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, + maintenanceServiceKey, 0, + KEY_READ | KEY_WOW64_64KEY, &baseKey) == ERROR_SUCCESS) { RegCloseKey(baseKey); } else { @@ -2695,7 +2607,7 @@ int NS_main(int argc, NS_tchar **argv) // fails in between, we can fall back to using the normal update process // on our own. - // If we still want to use the service try to launch the service + // If we still want to use the service try to launch the service // comamnd for the update. if (useService) { // If the update couldn't be started, then set useService to false so @@ -2718,7 +2630,7 @@ int NS_main(int argc, NS_tchar **argv) DWORD lastState = WaitForServiceStop(SVC_NAME, 5); if (lastState != SERVICE_STOPPED) { Thread t1; - if (t1.Run(WaitForServiceFinishThread, nullptr) == 0 && + if (t1.Run(WaitForServiceFinishThread, nullptr) == 0 && showProgressUI) { ShowProgressUI(true, false); } @@ -2744,7 +2656,7 @@ int NS_main(int argc, NS_tchar **argv) if (updateLockFileHandle != INVALID_HANDLE_VALUE) { CloseHandle(updateLockFileHandle); } - WriteStatusPending(gSourcePath); + WriteStatusPending(gPatchDirPath); return 0; } @@ -2757,9 +2669,9 @@ int NS_main(int argc, NS_tchar **argv) // as the PostUpdate step runs when performing the replacing in that case. if (useService && !sStagedUpdate) { bool updateStatusSucceeded = false; - if (IsUpdateStatusSucceeded(updateStatusSucceeded) && + if (IsUpdateStatusSucceeded(updateStatusSucceeded) && updateStatusSucceeded) { - if (!LaunchWinPostProcess(installDir, gSourcePath, false, nullptr)) { + if (!LaunchWinPostProcess(gInstallDirPath, gPatchDirPath, false, nullptr)) { fprintf(stderr, "The post update process which runs as the user" " for service update could not be launched."); } @@ -2772,7 +2684,7 @@ int NS_main(int argc, NS_tchar **argv) // We don't launch the elevated updater in the case that we did have // write access all along because in that case the only reason we're // using the service is because we are testing. - if (!useService && !noServiceFallback && + if (!useService && !noServiceFallback && updateLockFileHandle == INVALID_HANDLE_VALUE) { SHELLEXECUTEINFO sinfo; memset(&sinfo, 0, sizeof(SHELLEXECUTEINFO)); @@ -2798,7 +2710,7 @@ int NS_main(int argc, NS_tchar **argv) } if (argc > callbackIndex) { - LaunchCallbackApp(argv[4], argc - callbackIndex, + LaunchCallbackApp(argv[5], argc - callbackIndex, argv + callbackIndex, sUsingService); } @@ -2811,7 +2723,7 @@ int NS_main(int argc, NS_tchar **argv) // update.status file. return 0; } else if(useService) { - // The service command was launched. The service is responsible for + // The service command was launched. The service is responsible for // writing out the update.status file. if (updateLockFileHandle != INVALID_HANDLE_VALUE) { CloseHandle(updateLockFileHandle); @@ -2853,16 +2765,16 @@ int NS_main(int argc, NS_tchar **argv) if (sStagedUpdate) { // When staging updates, blow away the old installation directory and create // it from scratch. - ensure_remove_recursive(gDestinationPath); + ensure_remove_recursive(gWorkingDirPath); } if (!sReplaceRequest) { // Change current directory to the directory where we need to apply the update. - if (NS_tchdir(gDestinationPath) != 0) { + if (NS_tchdir(gWorkingDirPath) != 0) { // Try to create the destination directory if it doesn't exist - int rv = NS_tmkdir(gDestinationPath, 0755); + int rv = NS_tmkdir(gWorkingDirPath, 0755); if (rv == OK && errno != EEXIST) { // Try changing the current directory again - if (NS_tchdir(gDestinationPath) != 0) { + if (NS_tchdir(gWorkingDirPath) != 0) { // OK, time to give up! return 1; } @@ -2873,24 +2785,21 @@ int NS_main(int argc, NS_tchar **argv) } } - LOG(("SOURCE DIRECTORY " LOG_S, gSourcePath)); - LOG(("DESTINATION DIRECTORY " LOG_S, gDestinationPath)); - #ifdef XP_WIN // For replace requests, we don't need to do any real updates, so this is not // necessary. if (!sReplaceRequest) { // Allocate enough space for the length of the path an optional additional // trailing slash and null termination. - NS_tchar *destpath = (NS_tchar *) malloc((NS_tstrlen(gDestinationPath) + 2) * sizeof(NS_tchar)); + NS_tchar *destpath = (NS_tchar *) malloc((NS_tstrlen(gWorkingDirPath) + 2) * sizeof(NS_tchar)); if (!destpath) return 1; NS_tchar *c = destpath; - NS_tstrcpy(c, gDestinationPath); - c += NS_tstrlen(gDestinationPath); - if (gDestinationPath[NS_tstrlen(gDestinationPath) - 1] != NS_T('/') && - gDestinationPath[NS_tstrlen(gDestinationPath) - 1] != NS_T('\\')) { + NS_tstrcpy(c, gWorkingDirPath); + c += NS_tstrlen(gWorkingDirPath); + if (gWorkingDirPath[NS_tstrlen(gWorkingDirPath) - 1] != NS_T('/') && + gWorkingDirPath[NS_tstrlen(gWorkingDirPath) - 1] != NS_T('\\')) { NS_tstrcat(c, NS_T("/")); c += NS_tstrlen(NS_T("/")); } @@ -2901,14 +2810,14 @@ int NS_main(int argc, NS_tchar **argv) } NS_tchar applyDirLongPath[MAXPATHLEN]; - if (!GetLongPathNameW(gDestinationPath, applyDirLongPath, + if (!GetLongPathNameW(gWorkingDirPath, applyDirLongPath, sizeof(applyDirLongPath)/sizeof(applyDirLongPath[0]))) { - LOG(("NS_main: unable to find apply to dir: " LOG_S, gDestinationPath)); + LOG(("NS_main: unable to find apply to dir: " LOG_S, gWorkingDirPath)); LogFinish(); WriteStatusFile(WRITE_ERROR); EXIT_WHEN_ELEVATED(elevatedLockFilePath, updateLockFileHandle, 1); if (argc > callbackIndex) { - LaunchCallbackApp(argv[4], argc - callbackIndex, + LaunchCallbackApp(argv[5], argc - callbackIndex, argv + callbackIndex, sUsingService); } return 1; @@ -2930,15 +2839,15 @@ int NS_main(int argc, NS_tchar **argv) // In case of replace requests, we should look for the callback file in // the destination directory. size_t commonPrefixLength = PathCommonPrefixW(argv[callbackIndex], - gDestinationPath, + gInstallDirPath, nullptr); NS_tchar *p = buffer; NS_tstrncpy(p, argv[callbackIndex], commonPrefixLength); p += commonPrefixLength; bufferLeft -= commonPrefixLength; - NS_tstrncpy(p, gDestinationPath + commonPrefixLength, bufferLeft); + NS_tstrncpy(p, gInstallDirPath + commonPrefixLength, bufferLeft); - size_t len = NS_tstrlen(gDestinationPath + commonPrefixLength); + size_t len = NS_tstrlen(gInstallDirPath + commonPrefixLength); p += len; bufferLeft -= len; *p = NS_T('\\'); @@ -2946,8 +2855,7 @@ int NS_main(int argc, NS_tchar **argv) bufferLeft--; *p = NS_T('\0'); NS_tchar installDir[MAXPATHLEN]; - if (!GetInstallationDir(installDir)) - return 1; + NS_tstrcpy(installDir, gInstallDirPath); size_t callbackPrefixLength = PathCommonPrefixW(argv[callbackIndex], installDir, nullptr); @@ -2961,9 +2869,9 @@ int NS_main(int argc, NS_tchar **argv) WriteStatusFile(WRITE_ERROR); EXIT_WHEN_ELEVATED(elevatedLockFilePath, updateLockFileHandle, 1); if (argc > callbackIndex) { - LaunchCallbackApp(argv[4], - argc - callbackIndex, - argv + callbackIndex, + LaunchCallbackApp(argv[5], + argc - callbackIndex, + argv + callbackIndex, sUsingService); } return 1; @@ -3042,7 +2950,7 @@ int NS_main(int argc, NS_tchar **argv) NS_tremove(gCallbackBackupPath); EXIT_WHEN_ELEVATED(elevatedLockFilePath, updateLockFileHandle, 1); - LaunchCallbackApp(argv[4], + LaunchCallbackApp(argv[5], argc - callbackIndex, argv + callbackIndex, sUsingService); @@ -3119,37 +3027,31 @@ int NS_main(int argc, NS_tchar **argv) if (gSucceeded) { // The service update will only be executed if it is already installed. // For first time installs of the service, the install will happen from - // the PostUpdate process. We do the service update process here - // because it's possible we are updating with updater.exe without the + // the PostUpdate process. We do the service update process here + // because it's possible we are updating with updater.exe without the // service if the service failed to apply the update. We want to update // the service to a newer version in that case. If we are not running // through the service, then MOZ_USING_SERVICE will not exist. if (!sUsingService) { - NS_tchar installDir[MAXPATHLEN]; - if (GetInstallationDir(installDir)) { - if (!LaunchWinPostProcess(installDir, gSourcePath, false, nullptr)) { - LOG(("NS_main: The post update process could not be launched.")); - } - - StartServiceUpdate(installDir); + if (!LaunchWinPostProcess(gInstallDirPath, gPatchDirPath, false, nullptr)) { + LOG(("NS_main: The post update process could not be launched.")); } + + StartServiceUpdate(gInstallDirPath); } } EXIT_WHEN_ELEVATED(elevatedLockFilePath, updateLockFileHandle, 0); #endif /* XP_WIN */ #ifdef XP_MACOSX if (gSucceeded) { - char installDir[MAXPATHLEN]; - if (GetInstallationDir(installDir)) { - LaunchMacPostProcess(installDir); - } + LaunchMacPostProcess(gInstallDirPath); } #endif /* XP_MACOSX */ if (getenv("MOZ_PROCESS_UPDATES") == nullptr) { - LaunchCallbackApp(argv[4], - argc - callbackIndex, - argv + callbackIndex, + LaunchCallbackApp(argv[5], + argc - callbackIndex, + argv + callbackIndex, sUsingService); } } @@ -3662,7 +3564,7 @@ int DoUpdate() { NS_tchar manifest[MAXPATHLEN]; NS_tsnprintf(manifest, sizeof(manifest)/sizeof(manifest[0]), - NS_T("%s/updating/update.manifest"), gDestinationPath); + NS_T("%s/updating/update.manifest"), gWorkingDirPath); ensure_parent_dir(manifest); // extract the manifest diff --git a/toolkit/xre/nsUpdateDriver.cpp b/toolkit/xre/nsUpdateDriver.cpp index 48480958717..d7538e4afca 100644 --- a/toolkit/xre/nsUpdateDriver.cpp +++ b/toolkit/xre/nsUpdateDriver.cpp @@ -132,6 +132,44 @@ GetCurrentWorkingDir(char *buf, size_t size) return NS_OK; } +/** + * Get the path to the installation directory. For Mac OS X this will be the + * bundle directory. + * + * @param appDir the application directory file object + * @param installDirPath the path to the installation directory + */ +static nsresult +GetInstallDirPath(nsIFile *appDir, nsACString& installDirPath) +{ + nsresult rv; +#ifdef XP_MACOSX + nsCOMPtr parentDir1, parentDir2; + rv = appDir->GetParent(getter_AddRefs(parentDir1)); + if (NS_FAILED(rv)) { + return rv; + } + rv = parentDir1->GetParent(getter_AddRefs(parentDir2)); + if (NS_FAILED(rv)) { + return rv; + } + rv = parentDir2->GetNativePath(installDirPath); +#elif XP_WIN + nsAutoString installDirPathW; + rv = appDir->GetPath(installDirPathW); + if (NS_FAILED(rv)) { + return rv; + } + installDirPath = NS_ConvertUTF16toUTF8(installDirPathW); +#else + rv = appDir->GetNativePath(installDirPath); +#endif + if (NS_FAILED(rv)) { + return rv; + } + return NS_OK; +} + #if defined(XP_MACOSX) // This is a copy of OS X's XRE_GetBinaryPath from nsAppRunner.cpp with the // gBinaryPath check removed so that the updater can reload the stub executable @@ -343,11 +381,12 @@ CopyUpdaterIntoUpdateDir(nsIFile *greDir, nsIFile *appDir, nsIFile *updateDir, #if defined(XP_MACOSX) if (!CopyFileIntoUpdateDir(appDir, kUpdaterApp, updateDir)) return false; + CopyFileIntoUpdateDir(greDir, kUpdaterINI, updateDir); #else if (!CopyFileIntoUpdateDir(greDir, kUpdaterBin, updateDir)) return false; -#endif CopyFileIntoUpdateDir(appDir, kUpdaterINI, updateDir); +#endif #if defined(XP_UNIX) && !defined(XP_MACOSX) && !defined(ANDROID) nsCOMPtr iconDir; appDir->Clone(getter_AddRefs(iconDir)); @@ -466,40 +505,35 @@ SwitchToUpdatedApp(nsIFile *greDir, nsIFile *updateDir, nsIFile *statusFile, return; #endif - // Get the directory to which the update will be applied. On Mac OSX we need - // to apply the update to the Updated.app directory under the Foo.app - // directory which is the parent of the parent of the appDir. On other - // platforms we will just apply to the appDir/updated. - nsCOMPtr updatedDir; -#if defined(XP_MACOSX) - nsAutoCString applyToDir; - { - nsCOMPtr parentDir1, parentDir2; - rv = appDir->GetParent(getter_AddRefs(parentDir1)); - if (NS_FAILED(rv)) - return; - rv = parentDir1->GetParent(getter_AddRefs(parentDir2)); - if (NS_FAILED(rv)) - return; - if (!GetFile(parentDir2, NS_LITERAL_CSTRING("Updated.app"), updatedDir)) - return; - rv = updatedDir->GetNativePath(applyToDir); - } -#else - if (!GetFile(appDir, NS_LITERAL_CSTRING("updated"), updatedDir)) + nsAutoCString installDirPath; + rv = GetInstallDirPath(appDir, installDirPath); + if (NS_FAILED(rv)) { return; -#if defined(XP_WIN) + } + + // Get the directory where the update will be staged. + nsAutoCString applyToDir; + nsCOMPtr updatedDir; +#ifdef XP_MACOSX + if (!GetFile(updateDir, NS_LITERAL_CSTRING("Updated.app"), updatedDir)) { +#else + if (!GetFile(appDir, NS_LITERAL_CSTRING("updated"), updatedDir)) { +#endif + return; + } +#ifdef XP_WIN nsAutoString applyToDirW; rv = updatedDir->GetPath(applyToDirW); - - NS_ConvertUTF16toUTF8 applyToDir(applyToDirW); + if (NS_FAILED(rv)) { + return; + } + applyToDir = NS_ConvertUTF16toUTF8(applyToDirW); #else - nsAutoCString applyToDir; rv = updatedDir->GetNativePath(applyToDir); #endif -#endif - if (NS_FAILED(rv)) + if (NS_FAILED(rv)) { return; + } // Make sure that the updated directory exists bool updatedDirExists = false; @@ -511,13 +545,11 @@ SwitchToUpdatedApp(nsIFile *greDir, nsIFile *updateDir, nsIFile *statusFile, #if defined(XP_WIN) nsAutoString updateDirPathW; rv = updateDir->GetPath(updateDirPathW); - NS_ConvertUTF16toUTF8 updateDirPath(updateDirPathW); #else nsAutoCString updateDirPath; rv = updateDir->GetNativePath(updateDirPath); #endif - if (NS_FAILED(rv)) return; @@ -548,19 +580,20 @@ SwitchToUpdatedApp(nsIFile *greDir, nsIFile *updateDir, nsIFile *statusFile, immersiveArgc = 1; } #endif - int argc = appArgc + 5 + immersiveArgc; + int argc = appArgc + 6 + immersiveArgc; char **argv = new char*[argc + 1]; if (!argv) return; argv[0] = (char*) updaterPath.get(); argv[1] = (char*) updateDirPath.get(); - argv[2] = (char*) applyToDir.get(); - argv[3] = (char*) pid.get(); + argv[2] = (char*) installDirPath.get(); + argv[3] = (char*) applyToDir.get(); + argv[4] = (char*) pid.get(); if (appArgc) { - argv[4] = workingDirPath; - argv[5] = (char*) appFilePath.get(); + argv[5] = workingDirPath; + argv[6] = (char*) appFilePath.get(); for (int i = 1; i < appArgc; ++i) - argv[5 + i] = appArgv[i]; + argv[6 + i] = appArgv[i]; #ifdef XP_WIN if (immersiveArgc) { argv[argc - 1] = "-ServerName:DefaultBrowserServer"; @@ -568,8 +601,8 @@ SwitchToUpdatedApp(nsIFile *greDir, nsIFile *updateDir, nsIFile *statusFile, #endif argv[argc] = nullptr; } else { - argc = 4; - argv[4] = nullptr; + argc = 5; + argv[5] = nullptr; } if (gSafeMode) { @@ -726,79 +759,64 @@ ApplyUpdate(nsIFile *greDir, nsIFile *updateDir, nsIFile *statusFile, #endif - // Get the directory to which the update will be applied. On Mac OSX we need - // to apply the update to the Updated.app directory under the Foo.app - // directory which is the parent of the parent of the appDir. On other - // platforms we will just apply to the appDir/updated. - nsCOMPtr updatedDir; -#if defined(XP_MACOSX) + nsAutoCString installDirPath; + rv = GetInstallDirPath(appDir, installDirPath); + if (NS_FAILED(rv)) + return; + + // Get the directory where the update was staged for replace and GONK OS + // Updates or where it will be applied. +#ifndef MOZ_WIDGET_GONK + // OS Updates are only supported on GONK so force it to false on everything + // but GONK to simplify the following logic. + isOSUpdate = false; +#endif nsAutoCString applyToDir; - { - nsCOMPtr parentDir1, parentDir2; - rv = appDir->GetParent(getter_AddRefs(parentDir1)); - if (NS_FAILED(rv)) + nsCOMPtr updatedDir; + if (restart && !isOSUpdate) { + applyToDir.Assign(installDirPath); + } else { +#ifdef XP_MACOSX + if (!GetFile(updateDir, NS_LITERAL_CSTRING("Updated.app"), updatedDir)) { +#else + if (!GetFile(appDir, NS_LITERAL_CSTRING("updated"), updatedDir)) { +#endif return; - rv = parentDir1->GetParent(getter_AddRefs(parentDir2)); - if (NS_FAILED(rv)) + } +#ifdef XP_WIN + nsAutoString applyToDirW; + rv = updatedDir->GetPath(applyToDirW); + if (NS_FAILED(rv)) { return; - if (restart) { - // Use the correct directory if we're not staging the update. - rv = parentDir2->GetNativePath(applyToDir); - } else { - if (!GetFile(parentDir2, NS_LITERAL_CSTRING("Updated.app"), updatedDir)) + } + applyToDir = NS_ConvertUTF16toUTF8(applyToDirW); +#elif MOZ_WIDGET_GONK + if (isOSUpdate) { + if (!osApplyToDir) { return; + } + rv = osApplyToDir->GetNativePath(applyToDir); + } else { rv = updatedDir->GetNativePath(applyToDir); } - } #else - if (restart) { - // Use the correct directory if we're not staging the update. - updatedDir = do_QueryInterface(appDir); - } else if (!GetFile(appDir, NS_LITERAL_CSTRING("updated"), updatedDir)) { - return; - } -#if defined(XP_WIN) - nsAutoString applyToDirW; - rv = updatedDir->GetPath(applyToDirW); - - NS_ConvertUTF16toUTF8 applyToDir(applyToDirW); -#else - nsAutoCString applyToDir; - -#if defined(MOZ_WIDGET_GONK) - if (isOSUpdate) { - if (!osApplyToDir) { - return; - } - - rv = osApplyToDir->GetNativePath(applyToDir); - } else { -#endif // defined(MOZ_WIDGET_GONK) - rv = updatedDir->GetNativePath(applyToDir); - -#if defined(MOZ_WIDGET_GONK) - } -#endif // defined(MOZ_WIDGET_GONK) - -#endif // defined(XP_WIN) #endif - + } if (NS_FAILED(rv)) return; #if defined(XP_WIN) nsAutoString updateDirPathW; rv = updateDir->GetPath(updateDirPathW); - NS_ConvertUTF16toUTF8 updateDirPath(updateDirPathW); #else nsAutoCString updateDirPath; rv = updateDir->GetNativePath(updateDirPath); #endif - - if (NS_FAILED(rv)) + if (NS_FAILED(rv)) { return; + } // Get the current working directory. char workingDirPath[MAXPATHLEN]; @@ -834,19 +852,20 @@ ApplyUpdate(nsIFile *greDir, nsIFile *updateDir, nsIFile *statusFile, immersiveArgc = 1; } #endif - int argc = appArgc + 5 + immersiveArgc; + int argc = appArgc + 6 + immersiveArgc; char **argv = new char*[argc + 1 ]; if (!argv) return; argv[0] = (char*) updaterPath.get(); argv[1] = (char*) updateDirPath.get(); - argv[2] = (char*) applyToDir.get(); - argv[3] = (char*) pid.get(); + argv[2] = (char*) installDirPath.get(); + argv[3] = (char*) applyToDir.get(); + argv[4] = (char*) pid.get(); if (restart && appArgc) { - argv[4] = workingDirPath; - argv[5] = (char*) appFilePath.get(); + argv[5] = workingDirPath; + argv[6] = (char*) appFilePath.get(); for (int i = 1; i < appArgc; ++i) - argv[5 + i] = appArgv[i]; + argv[6 + i] = appArgv[i]; #ifdef XP_WIN if (immersiveArgc) { argv[argc - 1] = "-ServerName:DefaultBrowserServer"; @@ -854,8 +873,8 @@ ApplyUpdate(nsIFile *greDir, nsIFile *updateDir, nsIFile *statusFile, #endif argv[argc] = nullptr; } else { - argc = 4; - argv[4] = nullptr; + argc = 5; + argv[5] = nullptr; } if (gSafeMode) { From 898c627c714eb5d9615eaa69883c7f3878a8e3d0 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:52:14 -0700 Subject: [PATCH 25/60] Mac v2 signing - Bug 1058182 - Fix app update xpcshell tests due to the Mac v2 bundle structure. r=bbondy --- toolkit/mozapps/update/tests/chrome/utils.js | 8 +- .../mozapps/update/tests/data/complete.mar | Bin 98001 -> 97888 bytes .../update/tests/data/complete_log_success | 601 +++++++++--------- .../tests/data/complete_log_success_mac | 326 ++++++++++ .../update/tests/data/complete_mac.mar | Bin 0 -> 98454 bytes .../update/tests/data/complete_precomplete | 37 +- .../tests/data/complete_precomplete_mac | 21 + .../update/tests/data/complete_removed-files | 82 +-- .../tests/data/complete_removed-files_mac | 41 ++ .../tests/data/complete_update_manifest | 115 ++-- toolkit/mozapps/update/tests/data/partial.mar | Bin 10749 -> 10645 bytes .../update/tests/data/partial_log_failure | 354 +++++------ .../update/tests/data/partial_log_failure_mac | 186 ++++++ .../update/tests/data/partial_log_success | 514 +++++++-------- .../update/tests/data/partial_log_success_mac | 273 ++++++++ .../mozapps/update/tests/data/partial_mac.mar | Bin 0 -> 11172 bytes .../update/tests/data/partial_precomplete | 39 +- .../update/tests/data/partial_precomplete_mac | 22 + .../tests/data/partial_removed-files_mac | 41 ++ toolkit/mozapps/update/tests/shared.js | 16 - .../downloadAndHashCheckMar.js | 3 - .../tests/unit_aus_update/head_update.js | 600 ++++++++++------- .../marAppApplyDirLockedStageFailure_win.js | 19 +- ...pApplyUpdateAppBinInUseStageSuccess_win.js | 108 ++-- .../marAppApplyUpdateStageSuccess.js | 116 ++-- .../marAppApplyUpdateSuccess.js | 20 +- ...ppInUseFallbackStageFailureComplete_win.js | 8 +- .../marAppInUseStageFailureComplete_win.js | 8 +- .../marAppInUseStageSuccessComplete_unix.js | 108 +++- .../marAppInUseSuccessComplete.js | 14 +- .../marCallbackAppStageSuccessComplete_win.js | 4 +- .../marCallbackAppStageSuccessPartial_win.js | 4 +- .../marCallbackAppSuccessComplete_win.js | 4 +- .../marCallbackAppSuccessPartial_win.js | 4 +- .../unit_base_updater/marFailurePartial.js | 12 +- ...leInUseFallbackStageFailureComplete_win.js | 6 +- ...ileInUseFallbackStageFailurePartial_win.js | 6 +- .../marFileInUseStageFailureComplete_win.js | 6 +- .../marFileInUseStageFailurePartial_win.js | 6 +- .../marFileInUseSuccessComplete_win.js | 6 +- .../marFileInUseSuccessPartial_win.js | 6 +- .../marFileLockedFailureComplete_win.js | 14 +- .../marFileLockedFailurePartial_win.js | 14 +- ...eLockedFallbackStageFailureComplete_win.js | 14 +- ...leLockedFallbackStageFailurePartial_win.js | 14 +- .../marFileLockedStageFailureComplete_win.js | 14 +- .../marFileLockedStageFailurePartial_win.js | 14 +- ...leInUseFallbackStageFailureComplete_win.js | 6 +- ...ileInUseFallbackStageFailurePartial_win.js | 6 +- ...MRFDirFileInUseStageFailureComplete_win.js | 6 +- ...RMRFDirFileInUseStageFailurePartial_win.js | 6 +- .../marRMRFDirFileInUseSuccessComplete_win.js | 6 +- .../marRMRFDirFileInUseSuccessPartial_win.js | 6 +- .../marStageFailurePartial.js | 23 +- .../marStageSuccessComplete.js | 111 ++-- .../marStageSuccessPartial.js | 30 +- .../unit_base_updater/marSuccessComplete.js | 12 +- .../unit_base_updater/marSuccessPartial.js | 12 +- .../unit_base_updater/marVersionDowngrade.js | 6 +- .../unit_base_updater/marWrongChannel.js | 6 +- .../unit_service_updater/bootstrapSvc.js | 4 +- ...marAppApplyDirLockedStageFailureSvc_win.js | 25 +- ...plyUpdateAppBinInUseStageSuccessSvc_win.js | 111 ++-- .../marAppApplyUpdateStageSuccessSvc.js | 119 ++-- .../marAppApplyUpdateSuccessSvc.js | 20 +- ...nUseFallbackStageFailureCompleteSvc_win.js | 8 +- .../marAppInUseStageFailureCompleteSvc_win.js | 8 +- .../marAppInUseSuccessCompleteSvc.js | 14 +- ...rCallbackAppStageSuccessCompleteSvc_win.js | 4 +- ...arCallbackAppStageSuccessPartialSvc_win.js | 4 +- .../marCallbackAppSuccessCompleteSvc_win.js | 4 +- .../marCallbackAppSuccessPartialSvc_win.js | 4 +- .../marFailurePartialSvc.js | 18 +- ...nUseFallbackStageFailureCompleteSvc_win.js | 6 +- ...InUseFallbackStageFailurePartialSvc_win.js | 6 +- ...marFileInUseStageFailureCompleteSvc_win.js | 6 +- .../marFileInUseStageFailurePartialSvc_win.js | 6 +- .../marFileInUseSuccessCompleteSvc_win.js | 6 +- .../marFileInUseSuccessPartialSvc_win.js | 6 +- .../marFileLockedFailureCompleteSvc_win.js | 14 +- .../marFileLockedFailurePartialSvc_win.js | 14 +- ...ckedFallbackStageFailureCompleteSvc_win.js | 14 +- ...ockedFallbackStageFailurePartialSvc_win.js | 14 +- ...arFileLockedStageFailureCompleteSvc_win.js | 14 +- ...marFileLockedStageFailurePartialSvc_win.js | 14 +- ...nUseFallbackStageFailureCompleteSvc_win.js | 6 +- ...InUseFallbackStageFailurePartialSvc_win.js | 6 +- ...DirFileInUseStageFailureCompleteSvc_win.js | 6 +- ...FDirFileInUseStageFailurePartialSvc_win.js | 6 +- ...rRMRFDirFileInUseSuccessCompleteSvc_win.js | 6 +- ...arRMRFDirFileInUseSuccessPartialSvc_win.js | 6 +- .../marStageFailurePartialSvc.js | 29 +- .../marStageSuccessCompleteSvc.js | 129 ++-- .../marStageSuccessPartialSvc.js | 44 +- .../marSuccessCompleteSvc.js | 12 +- .../marSuccessPartialSvc.js | 12 +- 96 files changed, 2861 insertions(+), 1928 deletions(-) create mode 100644 toolkit/mozapps/update/tests/data/complete_log_success_mac create mode 100644 toolkit/mozapps/update/tests/data/complete_mac.mar create mode 100644 toolkit/mozapps/update/tests/data/complete_precomplete_mac create mode 100644 toolkit/mozapps/update/tests/data/complete_removed-files_mac create mode 100644 toolkit/mozapps/update/tests/data/partial_log_failure_mac create mode 100644 toolkit/mozapps/update/tests/data/partial_log_success_mac create mode 100644 toolkit/mozapps/update/tests/data/partial_mac.mar create mode 100644 toolkit/mozapps/update/tests/data/partial_precomplete_mac create mode 100644 toolkit/mozapps/update/tests/data/partial_removed-files_mac diff --git a/toolkit/mozapps/update/tests/chrome/utils.js b/toolkit/mozapps/update/tests/chrome/utils.js index 62e98b36ab8..67e2ec68074 100644 --- a/toolkit/mozapps/update/tests/chrome/utils.js +++ b/toolkit/mozapps/update/tests/chrome/utils.js @@ -928,7 +928,13 @@ function resetFiles() { // Not being able to remove the "updated" directory will not adversely affect // subsequent tests so wrap it in a try block and don't test whether its // removal was successful. - let updatedDir = getUpdatedDir(); +#ifdef XP_MACOSX + let updatedDir = getUpdatesDir(); + updatedDir.append(DIR_PATCH); +#else + let updatedDir = getAppBaseDir(); +#endif + updatedDir.append(DIR_UPDATED); if (updatedDir.exists()) { try { removeDirRecursive(updatedDir); diff --git a/toolkit/mozapps/update/tests/data/complete.mar b/toolkit/mozapps/update/tests/data/complete.mar index 46b0fc80a611d36257ca7bab200e254563d972ff..52306e0a24d60acb5a971a31bb6efaa13c3b4d14 100644 GIT binary patch delta 1860 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 bqaiR@%BJCv1Uj9u>?D%w1ofd>;b9K|KjQ{K diff --git a/toolkit/mozapps/update/tests/data/complete_log_success b/toolkit/mozapps/update/tests/data/complete_log_success index 661b05dbbd7..5aa60882d55 100644 --- a/toolkit/mozapps/update/tests/data/complete_log_success +++ b/toolkit/mozapps/update/tests/data/complete_log_success @@ -1,319 +1,314 @@ UPDATE TYPE complete -PREPARE REMOVEFILE a/b/searchplugins/searchpluginstext0 -PREPARE REMOVEFILE a/b/searchplugins/searchpluginspng0.png -PREPARE REMOVEFILE a/b/removed-files -PREPARE REMOVEFILE a/b/exe0.exe -PREPARE REMOVEFILE a/b/2/20/20text0 -PREPARE REMOVEFILE a/b/2/20/20png0.png -PREPARE REMOVEFILE a/b/0/0exe0.exe -PREPARE REMOVEFILE a/b/0/00/00text0 -PREPARE REMOVEDIR a/b/searchplugins/ -PREPARE REMOVEDIR a/b/defaults/pref/ -PREPARE REMOVEDIR a/b/defaults/ -PREPARE REMOVEDIR a/b/2/20/ -PREPARE REMOVEDIR a/b/2/ -PREPARE REMOVEDIR a/b/0/00/ -PREPARE REMOVEDIR a/b/0/ -PREPARE REMOVEDIR a/b/ -PREPARE REMOVEDIR a/ +PREPARE REMOVEFILE searchplugins/searchpluginstext0 +PREPARE REMOVEFILE searchplugins/searchpluginspng0.png +PREPARE REMOVEFILE removed-files +PREPARE REMOVEFILE precomplete +PREPARE REMOVEFILE exe0.exe +PREPARE REMOVEFILE 2/20/20text0 +PREPARE REMOVEFILE 2/20/20png0.png +PREPARE REMOVEFILE 0/0exe0.exe +PREPARE REMOVEFILE 0/00/00text0 +PREPARE REMOVEDIR searchplugins/ +PREPARE REMOVEDIR defaults/pref/ +PREPARE REMOVEDIR defaults/ +PREPARE REMOVEDIR 2/20/ +PREPARE REMOVEDIR 2/ +PREPARE REMOVEDIR 0/00/ +PREPARE REMOVEDIR 0/ +PREPARE ADD searchplugins/searchpluginstext0 +PREPARE ADD searchplugins/searchpluginspng1.png +PREPARE ADD searchplugins/searchpluginspng0.png +PREPARE ADD removed-files PREPARE ADD precomplete -PREPARE ADD a/b/searchplugins/searchpluginstext0 -PREPARE ADD a/b/searchplugins/searchpluginspng1.png -PREPARE ADD a/b/searchplugins/searchpluginspng0.png -PREPARE ADD a/b/removed-files -PREPARE ADD a/b/exe0.exe -PREPARE ADD a/b/distribution/extensions/extensions1/extensions1text0 -PREPARE ADD a/b/distribution/extensions/extensions1/extensions1png1.png -PREPARE ADD a/b/distribution/extensions/extensions1/extensions1png0.png -PREPARE ADD a/b/distribution/extensions/extensions0/extensions0text0 -PREPARE ADD a/b/distribution/extensions/extensions0/extensions0png1.png -PREPARE ADD a/b/distribution/extensions/extensions0/extensions0png0.png -PREPARE ADD a/b/1/10/10text0 -PREPARE ADD a/b/0/0exe0.exe -PREPARE ADD a/b/0/00/00text1 -PREPARE ADD a/b/0/00/00text0 -PREPARE ADD a/b/0/00/00png0.png -PREPARE REMOVEDIR a/b/9/99/ -PREPARE REMOVEDIR a/b/9/99/ -PREPARE REMOVEDIR a/b/9/98/ -PREPARE REMOVEFILE a/b/9/97/970/97xtext0 -PREPARE REMOVEFILE a/b/9/97/970/97xtext1 -PREPARE REMOVEDIR a/b/9/97/970/ -PREPARE REMOVEFILE a/b/9/97/971/97xtext0 -PREPARE REMOVEFILE a/b/9/97/971/97xtext1 -PREPARE REMOVEDIR a/b/9/97/971/ -PREPARE REMOVEDIR a/b/9/97/ -PREPARE REMOVEFILE a/b/9/96/96text0 -PREPARE REMOVEFILE a/b/9/96/96text1 -PREPARE REMOVEDIR a/b/9/96/ -PREPARE REMOVEDIR a/b/9/95/ -PREPARE REMOVEDIR a/b/9/95/ -PREPARE REMOVEDIR a/b/9/94/ -PREPARE REMOVEDIR a/b/9/94/ -PREPARE REMOVEDIR a/b/9/93/ -PREPARE REMOVEDIR a/b/9/92/ -PREPARE REMOVEDIR a/b/9/91/ -PREPARE REMOVEDIR a/b/9/90/ -PREPARE REMOVEDIR a/b/9/90/ -PREPARE REMOVEDIR a/b/8/89/ -PREPARE REMOVEDIR a/b/8/89/ -PREPARE REMOVEDIR a/b/8/88/ -PREPARE REMOVEFILE a/b/8/87/870/87xtext0 -PREPARE REMOVEFILE a/b/8/87/870/87xtext1 -PREPARE REMOVEDIR a/b/8/87/870/ -PREPARE REMOVEFILE a/b/8/87/871/87xtext0 -PREPARE REMOVEFILE a/b/8/87/871/87xtext1 -PREPARE REMOVEDIR a/b/8/87/871/ -PREPARE REMOVEDIR a/b/8/87/ -PREPARE REMOVEFILE a/b/8/86/86text0 -PREPARE REMOVEFILE a/b/8/86/86text1 -PREPARE REMOVEDIR a/b/8/86/ -PREPARE REMOVEDIR a/b/8/85/ -PREPARE REMOVEDIR a/b/8/85/ -PREPARE REMOVEDIR a/b/8/84/ -PREPARE REMOVEDIR a/b/8/84/ -PREPARE REMOVEDIR a/b/8/83/ -PREPARE REMOVEDIR a/b/8/82/ -PREPARE REMOVEDIR a/b/8/81/ -PREPARE REMOVEDIR a/b/8/80/ -PREPARE REMOVEDIR a/b/8/80/ -PREPARE REMOVEFILE a/b/7/70/7xtest.exe -PREPARE REMOVEFILE a/b/7/70/7xtext0 -PREPARE REMOVEFILE a/b/7/70/7xtext1 -PREPARE REMOVEDIR a/b/7/70/ -PREPARE REMOVEFILE a/b/7/71/7xtest.exe -PREPARE REMOVEFILE a/b/7/71/7xtext0 -PREPARE REMOVEFILE a/b/7/71/7xtext1 -PREPARE REMOVEDIR a/b/7/71/ -PREPARE REMOVEDIR a/b/7/ -PREPARE REMOVEDIR a/b/6/ -PREPARE REMOVEFILE a/b/5/5text1 -PREPARE REMOVEFILE a/b/5/5text0 -PREPARE REMOVEFILE a/b/5/5test.exe -PREPARE REMOVEFILE a/b/5/5text0 -PREPARE REMOVEFILE a/b/5/5text1 -PREPARE REMOVEDIR a/b/5/ -PREPARE REMOVEFILE a/b/4/4text1 -PREPARE REMOVEFILE a/b/4/4text0 -PREPARE REMOVEDIR a/b/4/ -PREPARE REMOVEFILE a/b/3/3text1 -PREPARE REMOVEFILE a/b/3/3text0 -EXECUTE REMOVEFILE a/b/searchplugins/searchpluginstext0 -EXECUTE REMOVEFILE a/b/searchplugins/searchpluginspng0.png -EXECUTE REMOVEFILE a/b/removed-files -EXECUTE REMOVEFILE a/b/exe0.exe -EXECUTE REMOVEFILE a/b/2/20/20text0 -EXECUTE REMOVEFILE a/b/2/20/20png0.png -EXECUTE REMOVEFILE a/b/0/0exe0.exe -EXECUTE REMOVEFILE a/b/0/00/00text0 -EXECUTE REMOVEDIR a/b/searchplugins/ -EXECUTE REMOVEDIR a/b/defaults/pref/ -EXECUTE REMOVEDIR a/b/defaults/ -EXECUTE REMOVEDIR a/b/2/20/ -EXECUTE REMOVEDIR a/b/2/ -EXECUTE REMOVEDIR a/b/0/00/ -EXECUTE REMOVEDIR a/b/0/ -EXECUTE REMOVEDIR a/b/ -EXECUTE REMOVEDIR a/ +PREPARE ADD exe0.exe +PREPARE ADD distribution/extensions/extensions1/extensions1text0 +PREPARE ADD distribution/extensions/extensions1/extensions1png1.png +PREPARE ADD distribution/extensions/extensions1/extensions1png0.png +PREPARE ADD distribution/extensions/extensions0/extensions0text0 +PREPARE ADD distribution/extensions/extensions0/extensions0png1.png +PREPARE ADD distribution/extensions/extensions0/extensions0png0.png +PREPARE ADD 1/10/10text0 +PREPARE ADD 0/0exe0.exe +PREPARE ADD 0/00/00text1 +PREPARE ADD 0/00/00text0 +PREPARE ADD 0/00/00png0.png +PREPARE REMOVEDIR 9/99/ +PREPARE REMOVEDIR 9/99/ +PREPARE REMOVEDIR 9/98/ +PREPARE REMOVEFILE 9/97/970/97xtext0 +PREPARE REMOVEFILE 9/97/970/97xtext1 +PREPARE REMOVEDIR 9/97/970/ +PREPARE REMOVEFILE 9/97/971/97xtext0 +PREPARE REMOVEFILE 9/97/971/97xtext1 +PREPARE REMOVEDIR 9/97/971/ +PREPARE REMOVEDIR 9/97/ +PREPARE REMOVEFILE 9/96/96text0 +PREPARE REMOVEFILE 9/96/96text1 +PREPARE REMOVEDIR 9/96/ +PREPARE REMOVEDIR 9/95/ +PREPARE REMOVEDIR 9/95/ +PREPARE REMOVEDIR 9/94/ +PREPARE REMOVEDIR 9/94/ +PREPARE REMOVEDIR 9/93/ +PREPARE REMOVEDIR 9/92/ +PREPARE REMOVEDIR 9/91/ +PREPARE REMOVEDIR 9/90/ +PREPARE REMOVEDIR 9/90/ +PREPARE REMOVEDIR 8/89/ +PREPARE REMOVEDIR 8/89/ +PREPARE REMOVEDIR 8/88/ +PREPARE REMOVEFILE 8/87/870/87xtext0 +PREPARE REMOVEFILE 8/87/870/87xtext1 +PREPARE REMOVEDIR 8/87/870/ +PREPARE REMOVEFILE 8/87/871/87xtext0 +PREPARE REMOVEFILE 8/87/871/87xtext1 +PREPARE REMOVEDIR 8/87/871/ +PREPARE REMOVEDIR 8/87/ +PREPARE REMOVEFILE 8/86/86text0 +PREPARE REMOVEFILE 8/86/86text1 +PREPARE REMOVEDIR 8/86/ +PREPARE REMOVEDIR 8/85/ +PREPARE REMOVEDIR 8/85/ +PREPARE REMOVEDIR 8/84/ +PREPARE REMOVEDIR 8/84/ +PREPARE REMOVEDIR 8/83/ +PREPARE REMOVEDIR 8/82/ +PREPARE REMOVEDIR 8/81/ +PREPARE REMOVEDIR 8/80/ +PREPARE REMOVEDIR 8/80/ +PREPARE REMOVEFILE 7/70/7xtest.exe +PREPARE REMOVEFILE 7/70/7xtext0 +PREPARE REMOVEFILE 7/70/7xtext1 +PREPARE REMOVEDIR 7/70/ +PREPARE REMOVEFILE 7/71/7xtest.exe +PREPARE REMOVEFILE 7/71/7xtext0 +PREPARE REMOVEFILE 7/71/7xtext1 +PREPARE REMOVEDIR 7/71/ +PREPARE REMOVEDIR 7/ +PREPARE REMOVEDIR 6/ +PREPARE REMOVEFILE 5/5text1 +PREPARE REMOVEFILE 5/5text0 +PREPARE REMOVEFILE 5/5test.exe +PREPARE REMOVEFILE 5/5text0 +PREPARE REMOVEFILE 5/5text1 +PREPARE REMOVEDIR 5/ +PREPARE REMOVEFILE 4/4text1 +PREPARE REMOVEFILE 4/4text0 +PREPARE REMOVEDIR 4/ +PREPARE REMOVEFILE 3/3text1 +PREPARE REMOVEFILE 3/3text0 +EXECUTE REMOVEFILE searchplugins/searchpluginstext0 +EXECUTE REMOVEFILE searchplugins/searchpluginspng0.png +EXECUTE REMOVEFILE removed-files +EXECUTE REMOVEFILE precomplete +EXECUTE REMOVEFILE exe0.exe +EXECUTE REMOVEFILE 2/20/20text0 +EXECUTE REMOVEFILE 2/20/20png0.png +EXECUTE REMOVEFILE 0/0exe0.exe +EXECUTE REMOVEFILE 0/00/00text0 +EXECUTE REMOVEDIR searchplugins/ +EXECUTE REMOVEDIR defaults/pref/ +EXECUTE REMOVEDIR defaults/ +EXECUTE REMOVEDIR 2/20/ +EXECUTE REMOVEDIR 2/ +EXECUTE REMOVEDIR 0/00/ +EXECUTE REMOVEDIR 0/ +EXECUTE ADD searchplugins/searchpluginstext0 +EXECUTE ADD searchplugins/searchpluginspng1.png +EXECUTE ADD searchplugins/searchpluginspng0.png +EXECUTE ADD removed-files EXECUTE ADD precomplete -EXECUTE ADD a/b/searchplugins/searchpluginstext0 -EXECUTE ADD a/b/searchplugins/searchpluginspng1.png -EXECUTE ADD a/b/searchplugins/searchpluginspng0.png -EXECUTE ADD a/b/removed-files -EXECUTE ADD a/b/exe0.exe -EXECUTE ADD a/b/distribution/extensions/extensions1/extensions1text0 -EXECUTE ADD a/b/distribution/extensions/extensions1/extensions1png1.png -EXECUTE ADD a/b/distribution/extensions/extensions1/extensions1png0.png -EXECUTE ADD a/b/distribution/extensions/extensions0/extensions0text0 -EXECUTE ADD a/b/distribution/extensions/extensions0/extensions0png1.png -EXECUTE ADD a/b/distribution/extensions/extensions0/extensions0png0.png -EXECUTE ADD a/b/1/10/10text0 -EXECUTE ADD a/b/0/0exe0.exe -EXECUTE ADD a/b/0/00/00text1 -EXECUTE ADD a/b/0/00/00text0 -EXECUTE ADD a/b/0/00/00png0.png -EXECUTE REMOVEDIR a/b/9/99/ -EXECUTE REMOVEDIR a/b/9/99/ -EXECUTE REMOVEDIR a/b/9/98/ -EXECUTE REMOVEFILE a/b/9/97/970/97xtext0 -EXECUTE REMOVEFILE a/b/9/97/970/97xtext1 -EXECUTE REMOVEDIR a/b/9/97/970/ -EXECUTE REMOVEFILE a/b/9/97/971/97xtext0 -EXECUTE REMOVEFILE a/b/9/97/971/97xtext1 -EXECUTE REMOVEDIR a/b/9/97/971/ -EXECUTE REMOVEDIR a/b/9/97/ -EXECUTE REMOVEFILE a/b/9/96/96text0 -EXECUTE REMOVEFILE a/b/9/96/96text1 -EXECUTE REMOVEDIR a/b/9/96/ -EXECUTE REMOVEDIR a/b/9/95/ -EXECUTE REMOVEDIR a/b/9/95/ -EXECUTE REMOVEDIR a/b/9/94/ -EXECUTE REMOVEDIR a/b/9/94/ -EXECUTE REMOVEDIR a/b/9/93/ -EXECUTE REMOVEDIR a/b/9/92/ -EXECUTE REMOVEDIR a/b/9/91/ -EXECUTE REMOVEDIR a/b/9/90/ -EXECUTE REMOVEDIR a/b/9/90/ -EXECUTE REMOVEDIR a/b/8/89/ -EXECUTE REMOVEDIR a/b/8/89/ -EXECUTE REMOVEDIR a/b/8/88/ -EXECUTE REMOVEFILE a/b/8/87/870/87xtext0 -EXECUTE REMOVEFILE a/b/8/87/870/87xtext1 -EXECUTE REMOVEDIR a/b/8/87/870/ -EXECUTE REMOVEFILE a/b/8/87/871/87xtext0 -EXECUTE REMOVEFILE a/b/8/87/871/87xtext1 -EXECUTE REMOVEDIR a/b/8/87/871/ -EXECUTE REMOVEDIR a/b/8/87/ -EXECUTE REMOVEFILE a/b/8/86/86text0 -EXECUTE REMOVEFILE a/b/8/86/86text1 -EXECUTE REMOVEDIR a/b/8/86/ -EXECUTE REMOVEDIR a/b/8/85/ -EXECUTE REMOVEDIR a/b/8/85/ -EXECUTE REMOVEDIR a/b/8/84/ -EXECUTE REMOVEDIR a/b/8/84/ -EXECUTE REMOVEDIR a/b/8/83/ -EXECUTE REMOVEDIR a/b/8/82/ -EXECUTE REMOVEDIR a/b/8/81/ -EXECUTE REMOVEDIR a/b/8/80/ -EXECUTE REMOVEDIR a/b/8/80/ -EXECUTE REMOVEFILE a/b/7/70/7xtest.exe -EXECUTE REMOVEFILE a/b/7/70/7xtext0 -EXECUTE REMOVEFILE a/b/7/70/7xtext1 -EXECUTE REMOVEDIR a/b/7/70/ -EXECUTE REMOVEFILE a/b/7/71/7xtest.exe -EXECUTE REMOVEFILE a/b/7/71/7xtext0 -EXECUTE REMOVEFILE a/b/7/71/7xtext1 -EXECUTE REMOVEDIR a/b/7/71/ -EXECUTE REMOVEDIR a/b/7/ -EXECUTE REMOVEDIR a/b/6/ -EXECUTE REMOVEFILE a/b/5/5text1 -EXECUTE REMOVEFILE a/b/5/5text0 -EXECUTE REMOVEFILE a/b/5/5test.exe -EXECUTE REMOVEFILE a/b/5/5text0 +EXECUTE ADD exe0.exe +EXECUTE ADD distribution/extensions/extensions1/extensions1text0 +EXECUTE ADD distribution/extensions/extensions1/extensions1png1.png +EXECUTE ADD distribution/extensions/extensions1/extensions1png0.png +EXECUTE ADD distribution/extensions/extensions0/extensions0text0 +EXECUTE ADD distribution/extensions/extensions0/extensions0png1.png +EXECUTE ADD distribution/extensions/extensions0/extensions0png0.png +EXECUTE ADD 1/10/10text0 +EXECUTE ADD 0/0exe0.exe +EXECUTE ADD 0/00/00text1 +EXECUTE ADD 0/00/00text0 +EXECUTE ADD 0/00/00png0.png +EXECUTE REMOVEDIR 9/99/ +EXECUTE REMOVEDIR 9/99/ +EXECUTE REMOVEDIR 9/98/ +EXECUTE REMOVEFILE 9/97/970/97xtext0 +EXECUTE REMOVEFILE 9/97/970/97xtext1 +EXECUTE REMOVEDIR 9/97/970/ +EXECUTE REMOVEFILE 9/97/971/97xtext0 +EXECUTE REMOVEFILE 9/97/971/97xtext1 +EXECUTE REMOVEDIR 9/97/971/ +EXECUTE REMOVEDIR 9/97/ +EXECUTE REMOVEFILE 9/96/96text0 +EXECUTE REMOVEFILE 9/96/96text1 +EXECUTE REMOVEDIR 9/96/ +EXECUTE REMOVEDIR 9/95/ +EXECUTE REMOVEDIR 9/95/ +EXECUTE REMOVEDIR 9/94/ +EXECUTE REMOVEDIR 9/94/ +EXECUTE REMOVEDIR 9/93/ +EXECUTE REMOVEDIR 9/92/ +EXECUTE REMOVEDIR 9/91/ +EXECUTE REMOVEDIR 9/90/ +EXECUTE REMOVEDIR 9/90/ +EXECUTE REMOVEDIR 8/89/ +EXECUTE REMOVEDIR 8/89/ +EXECUTE REMOVEDIR 8/88/ +EXECUTE REMOVEFILE 8/87/870/87xtext0 +EXECUTE REMOVEFILE 8/87/870/87xtext1 +EXECUTE REMOVEDIR 8/87/870/ +EXECUTE REMOVEFILE 8/87/871/87xtext0 +EXECUTE REMOVEFILE 8/87/871/87xtext1 +EXECUTE REMOVEDIR 8/87/871/ +EXECUTE REMOVEDIR 8/87/ +EXECUTE REMOVEFILE 8/86/86text0 +EXECUTE REMOVEFILE 8/86/86text1 +EXECUTE REMOVEDIR 8/86/ +EXECUTE REMOVEDIR 8/85/ +EXECUTE REMOVEDIR 8/85/ +EXECUTE REMOVEDIR 8/84/ +EXECUTE REMOVEDIR 8/84/ +EXECUTE REMOVEDIR 8/83/ +EXECUTE REMOVEDIR 8/82/ +EXECUTE REMOVEDIR 8/81/ +EXECUTE REMOVEDIR 8/80/ +EXECUTE REMOVEDIR 8/80/ +EXECUTE REMOVEFILE 7/70/7xtest.exe +EXECUTE REMOVEFILE 7/70/7xtext0 +EXECUTE REMOVEFILE 7/70/7xtext1 +EXECUTE REMOVEDIR 7/70/ +EXECUTE REMOVEFILE 7/71/7xtest.exe +EXECUTE REMOVEFILE 7/71/7xtext0 +EXECUTE REMOVEFILE 7/71/7xtext1 +EXECUTE REMOVEDIR 7/71/ +EXECUTE REMOVEDIR 7/ +EXECUTE REMOVEDIR 6/ +EXECUTE REMOVEFILE 5/5text1 +EXECUTE REMOVEFILE 5/5text0 +EXECUTE REMOVEFILE 5/5test.exe +EXECUTE REMOVEFILE 5/5text0 file cannot be removed because it does not exist; skipping -EXECUTE REMOVEFILE a/b/5/5text1 +EXECUTE REMOVEFILE 5/5text1 file cannot be removed because it does not exist; skipping -EXECUTE REMOVEDIR a/b/5/ -EXECUTE REMOVEFILE a/b/4/4text1 -EXECUTE REMOVEFILE a/b/4/4text0 -EXECUTE REMOVEDIR a/b/4/ -EXECUTE REMOVEFILE a/b/3/3text1 -EXECUTE REMOVEFILE a/b/3/3text0 -FINISH REMOVEFILE a/b/searchplugins/searchpluginstext0 -FINISH REMOVEFILE a/b/searchplugins/searchpluginspng0.png -FINISH REMOVEFILE a/b/removed-files -FINISH REMOVEFILE a/b/exe0.exe -FINISH REMOVEFILE a/b/2/20/20text0 -FINISH REMOVEFILE a/b/2/20/20png0.png -FINISH REMOVEFILE a/b/0/0exe0.exe -FINISH REMOVEFILE a/b/0/00/00text0 -FINISH REMOVEDIR a/b/searchplugins/ -removing directory: a/b/searchplugins/, rv: 0 -FINISH REMOVEDIR a/b/defaults/pref/ -removing directory: a/b/defaults/pref/, rv: 0 -FINISH REMOVEDIR a/b/defaults/ -removing directory: a/b/defaults/, rv: 0 -FINISH REMOVEDIR a/b/2/20/ -FINISH REMOVEDIR a/b/2/ -FINISH REMOVEDIR a/b/0/00/ -removing directory: a/b/0/00/, rv: 0 -FINISH REMOVEDIR a/b/0/ -removing directory: a/b/0/, rv: 0 -FINISH REMOVEDIR a/b/ -removing directory: a/b/, rv: 0 -FINISH REMOVEDIR a/ -removing directory: a/, rv: 0 +EXECUTE REMOVEDIR 5/ +EXECUTE REMOVEFILE 4/4text1 +EXECUTE REMOVEFILE 4/4text0 +EXECUTE REMOVEDIR 4/ +EXECUTE REMOVEFILE 3/3text1 +EXECUTE REMOVEFILE 3/3text0 +FINISH REMOVEFILE searchplugins/searchpluginstext0 +FINISH REMOVEFILE searchplugins/searchpluginspng0.png +FINISH REMOVEFILE removed-files +FINISH REMOVEFILE precomplete +FINISH REMOVEFILE exe0.exe +FINISH REMOVEFILE 2/20/20text0 +FINISH REMOVEFILE 2/20/20png0.png +FINISH REMOVEFILE 0/0exe0.exe +FINISH REMOVEFILE 0/00/00text0 +FINISH REMOVEDIR searchplugins/ +removing directory: searchplugins/, rv: 0 +FINISH REMOVEDIR defaults/pref/ +removing directory: defaults/pref/, rv: 0 +FINISH REMOVEDIR defaults/ +removing directory: defaults/, rv: 0 +FINISH REMOVEDIR 2/20/ +FINISH REMOVEDIR 2/ +FINISH REMOVEDIR 0/00/ +removing directory: 0/00/, rv: 0 +FINISH REMOVEDIR 0/ +removing directory: 0/, rv: 0 +FINISH ADD searchplugins/searchpluginstext0 +FINISH ADD searchplugins/searchpluginspng1.png +FINISH ADD searchplugins/searchpluginspng0.png +FINISH ADD removed-files FINISH ADD precomplete -FINISH ADD a/b/searchplugins/searchpluginstext0 -FINISH ADD a/b/searchplugins/searchpluginspng1.png -FINISH ADD a/b/searchplugins/searchpluginspng0.png -FINISH ADD a/b/removed-files -FINISH ADD a/b/exe0.exe -FINISH ADD a/b/distribution/extensions/extensions1/extensions1text0 -FINISH ADD a/b/distribution/extensions/extensions1/extensions1png1.png -FINISH ADD a/b/distribution/extensions/extensions1/extensions1png0.png -FINISH ADD a/b/distribution/extensions/extensions0/extensions0text0 -FINISH ADD a/b/distribution/extensions/extensions0/extensions0png1.png -FINISH ADD a/b/distribution/extensions/extensions0/extensions0png0.png -FINISH ADD a/b/1/10/10text0 -FINISH ADD a/b/0/0exe0.exe -FINISH ADD a/b/0/00/00text1 -FINISH ADD a/b/0/00/00text0 -FINISH ADD a/b/0/00/00png0.png -FINISH REMOVEDIR a/b/9/99/ -FINISH REMOVEDIR a/b/9/99/ +FINISH ADD exe0.exe +FINISH ADD distribution/extensions/extensions1/extensions1text0 +FINISH ADD distribution/extensions/extensions1/extensions1png1.png +FINISH ADD distribution/extensions/extensions1/extensions1png0.png +FINISH ADD distribution/extensions/extensions0/extensions0text0 +FINISH ADD distribution/extensions/extensions0/extensions0png1.png +FINISH ADD distribution/extensions/extensions0/extensions0png0.png +FINISH ADD 1/10/10text0 +FINISH ADD 0/0exe0.exe +FINISH ADD 0/00/00text1 +FINISH ADD 0/00/00text0 +FINISH ADD 0/00/00png0.png +FINISH REMOVEDIR 9/99/ +FINISH REMOVEDIR 9/99/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/9/98/ -FINISH REMOVEFILE a/b/9/97/970/97xtext0 -FINISH REMOVEFILE a/b/9/97/970/97xtext1 -FINISH REMOVEDIR a/b/9/97/970/ -FINISH REMOVEFILE a/b/9/97/971/97xtext0 -FINISH REMOVEFILE a/b/9/97/971/97xtext1 -FINISH REMOVEDIR a/b/9/97/971/ -FINISH REMOVEDIR a/b/9/97/ -FINISH REMOVEFILE a/b/9/96/96text0 -FINISH REMOVEFILE a/b/9/96/96text1 -FINISH REMOVEDIR a/b/9/96/ -FINISH REMOVEDIR a/b/9/95/ -FINISH REMOVEDIR a/b/9/95/ +FINISH REMOVEDIR 9/98/ +FINISH REMOVEFILE 9/97/970/97xtext0 +FINISH REMOVEFILE 9/97/970/97xtext1 +FINISH REMOVEDIR 9/97/970/ +FINISH REMOVEFILE 9/97/971/97xtext0 +FINISH REMOVEFILE 9/97/971/97xtext1 +FINISH REMOVEDIR 9/97/971/ +FINISH REMOVEDIR 9/97/ +FINISH REMOVEFILE 9/96/96text0 +FINISH REMOVEFILE 9/96/96text1 +FINISH REMOVEDIR 9/96/ +FINISH REMOVEDIR 9/95/ +FINISH REMOVEDIR 9/95/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/9/94/ -FINISH REMOVEDIR a/b/9/94/ +FINISH REMOVEDIR 9/94/ +FINISH REMOVEDIR 9/94/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/9/93/ -FINISH REMOVEDIR a/b/9/92/ -removing directory: a/b/9/92/, rv: 0 -FINISH REMOVEDIR a/b/9/91/ -removing directory: a/b/9/91/, rv: 0 -FINISH REMOVEDIR a/b/9/90/ -FINISH REMOVEDIR a/b/9/90/ +FINISH REMOVEDIR 9/93/ +FINISH REMOVEDIR 9/92/ +removing directory: 9/92/, rv: 0 +FINISH REMOVEDIR 9/91/ +removing directory: 9/91/, rv: 0 +FINISH REMOVEDIR 9/90/ +FINISH REMOVEDIR 9/90/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/8/89/ -FINISH REMOVEDIR a/b/8/89/ +FINISH REMOVEDIR 8/89/ +FINISH REMOVEDIR 8/89/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/8/88/ -FINISH REMOVEFILE a/b/8/87/870/87xtext0 -FINISH REMOVEFILE a/b/8/87/870/87xtext1 -FINISH REMOVEDIR a/b/8/87/870/ -FINISH REMOVEFILE a/b/8/87/871/87xtext0 -FINISH REMOVEFILE a/b/8/87/871/87xtext1 -FINISH REMOVEDIR a/b/8/87/871/ -FINISH REMOVEDIR a/b/8/87/ -FINISH REMOVEFILE a/b/8/86/86text0 -FINISH REMOVEFILE a/b/8/86/86text1 -FINISH REMOVEDIR a/b/8/86/ -FINISH REMOVEDIR a/b/8/85/ -FINISH REMOVEDIR a/b/8/85/ +FINISH REMOVEDIR 8/88/ +FINISH REMOVEFILE 8/87/870/87xtext0 +FINISH REMOVEFILE 8/87/870/87xtext1 +FINISH REMOVEDIR 8/87/870/ +FINISH REMOVEFILE 8/87/871/87xtext0 +FINISH REMOVEFILE 8/87/871/87xtext1 +FINISH REMOVEDIR 8/87/871/ +FINISH REMOVEDIR 8/87/ +FINISH REMOVEFILE 8/86/86text0 +FINISH REMOVEFILE 8/86/86text1 +FINISH REMOVEDIR 8/86/ +FINISH REMOVEDIR 8/85/ +FINISH REMOVEDIR 8/85/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/8/84/ -FINISH REMOVEDIR a/b/8/84/ +FINISH REMOVEDIR 8/84/ +FINISH REMOVEDIR 8/84/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/8/83/ -FINISH REMOVEDIR a/b/8/82/ -removing directory: a/b/8/82/, rv: 0 -FINISH REMOVEDIR a/b/8/81/ -removing directory: a/b/8/81/, rv: 0 -FINISH REMOVEDIR a/b/8/80/ -FINISH REMOVEDIR a/b/8/80/ +FINISH REMOVEDIR 8/83/ +FINISH REMOVEDIR 8/82/ +removing directory: 8/82/, rv: 0 +FINISH REMOVEDIR 8/81/ +removing directory: 8/81/, rv: 0 +FINISH REMOVEDIR 8/80/ +FINISH REMOVEDIR 8/80/ directory no longer exists; skipping -FINISH REMOVEFILE a/b/7/70/7xtest.exe -FINISH REMOVEFILE a/b/7/70/7xtext0 -FINISH REMOVEFILE a/b/7/70/7xtext1 -FINISH REMOVEDIR a/b/7/70/ -FINISH REMOVEFILE a/b/7/71/7xtest.exe -FINISH REMOVEFILE a/b/7/71/7xtext0 -FINISH REMOVEFILE a/b/7/71/7xtext1 -FINISH REMOVEDIR a/b/7/71/ -FINISH REMOVEDIR a/b/7/ -FINISH REMOVEDIR a/b/6/ -FINISH REMOVEFILE a/b/5/5text1 -FINISH REMOVEFILE a/b/5/5text0 -FINISH REMOVEFILE a/b/5/5test.exe -FINISH REMOVEDIR a/b/5/ -FINISH REMOVEFILE a/b/4/4text1 -FINISH REMOVEFILE a/b/4/4text0 -FINISH REMOVEDIR a/b/4/ -FINISH REMOVEFILE a/b/3/3text1 -FINISH REMOVEFILE a/b/3/3text0 +FINISH REMOVEFILE 7/70/7xtest.exe +FINISH REMOVEFILE 7/70/7xtext0 +FINISH REMOVEFILE 7/70/7xtext1 +FINISH REMOVEDIR 7/70/ +FINISH REMOVEFILE 7/71/7xtest.exe +FINISH REMOVEFILE 7/71/7xtext0 +FINISH REMOVEFILE 7/71/7xtext1 +FINISH REMOVEDIR 7/71/ +FINISH REMOVEDIR 7/ +FINISH REMOVEDIR 6/ +FINISH REMOVEFILE 5/5text1 +FINISH REMOVEFILE 5/5text0 +FINISH REMOVEFILE 5/5test.exe +FINISH REMOVEDIR 5/ +FINISH REMOVEFILE 4/4text1 +FINISH REMOVEFILE 4/4text0 +FINISH REMOVEDIR 4/ +FINISH REMOVEFILE 3/3text1 +FINISH REMOVEFILE 3/3text0 succeeded calling QuitProgressUI diff --git a/toolkit/mozapps/update/tests/data/complete_log_success_mac b/toolkit/mozapps/update/tests/data/complete_log_success_mac new file mode 100644 index 00000000000..c8e922ef07a --- /dev/null +++ b/toolkit/mozapps/update/tests/data/complete_log_success_mac @@ -0,0 +1,326 @@ +UPDATE TYPE complete +PREPARE REMOVEFILE Contents/Resources/searchplugins/searchpluginstext0 +PREPARE REMOVEFILE Contents/Resources/searchplugins/searchpluginspng0.png +PREPARE REMOVEFILE Contents/Resources/removed-files +PREPARE REMOVEFILE Contents/Resources/precomplete +PREPARE REMOVEFILE Contents/Resources/2/20/20text0 +PREPARE REMOVEFILE Contents/Resources/2/20/20png0.png +PREPARE REMOVEFILE Contents/Resources/0/0exe0.exe +PREPARE REMOVEFILE Contents/Resources/0/00/00text0 +PREPARE REMOVEFILE Contents/MacOS/exe0.exe +PREPARE REMOVEDIR Contents/Resources/searchplugins/ +PREPARE REMOVEDIR Contents/Resources/defaults/pref/ +PREPARE REMOVEDIR Contents/Resources/defaults/ +PREPARE REMOVEDIR Contents/Resources/2/20/ +PREPARE REMOVEDIR Contents/Resources/2/ +PREPARE REMOVEDIR Contents/Resources/0/00/ +PREPARE REMOVEDIR Contents/Resources/0/ +PREPARE REMOVEDIR Contents/Resources/ +PREPARE REMOVEDIR Contents/MacOS/ +PREPARE REMOVEDIR Contents/ +PREPARE ADD Contents/Resources/searchplugins/searchpluginstext0 +PREPARE ADD Contents/Resources/searchplugins/searchpluginspng1.png +PREPARE ADD Contents/Resources/searchplugins/searchpluginspng0.png +PREPARE ADD Contents/Resources/removed-files +PREPARE ADD Contents/Resources/precomplete +PREPARE ADD Contents/Resources/distribution/extensions/extensions1/extensions1text0 +PREPARE ADD Contents/Resources/distribution/extensions/extensions1/extensions1png1.png +PREPARE ADD Contents/Resources/distribution/extensions/extensions1/extensions1png0.png +PREPARE ADD Contents/Resources/distribution/extensions/extensions0/extensions0text0 +PREPARE ADD Contents/Resources/distribution/extensions/extensions0/extensions0png1.png +PREPARE ADD Contents/Resources/distribution/extensions/extensions0/extensions0png0.png +PREPARE ADD Contents/Resources/1/10/10text0 +PREPARE ADD Contents/Resources/0/0exe0.exe +PREPARE ADD Contents/Resources/0/00/00text1 +PREPARE ADD Contents/Resources/0/00/00text0 +PREPARE ADD Contents/Resources/0/00/00png0.png +PREPARE ADD Contents/MacOS/exe0.exe +PREPARE REMOVEDIR Contents/Resources/9/99/ +PREPARE REMOVEDIR Contents/Resources/9/99/ +PREPARE REMOVEDIR Contents/Resources/9/98/ +PREPARE REMOVEFILE Contents/Resources/9/97/970/97xtext0 +PREPARE REMOVEFILE Contents/Resources/9/97/970/97xtext1 +PREPARE REMOVEDIR Contents/Resources/9/97/970/ +PREPARE REMOVEFILE Contents/Resources/9/97/971/97xtext0 +PREPARE REMOVEFILE Contents/Resources/9/97/971/97xtext1 +PREPARE REMOVEDIR Contents/Resources/9/97/971/ +PREPARE REMOVEDIR Contents/Resources/9/97/ +PREPARE REMOVEFILE Contents/Resources/9/96/96text0 +PREPARE REMOVEFILE Contents/Resources/9/96/96text1 +PREPARE REMOVEDIR Contents/Resources/9/96/ +PREPARE REMOVEDIR Contents/Resources/9/95/ +PREPARE REMOVEDIR Contents/Resources/9/95/ +PREPARE REMOVEDIR Contents/Resources/9/94/ +PREPARE REMOVEDIR Contents/Resources/9/94/ +PREPARE REMOVEDIR Contents/Resources/9/93/ +PREPARE REMOVEDIR Contents/Resources/9/92/ +PREPARE REMOVEDIR Contents/Resources/9/91/ +PREPARE REMOVEDIR Contents/Resources/9/90/ +PREPARE REMOVEDIR Contents/Resources/9/90/ +PREPARE REMOVEDIR Contents/Resources/8/89/ +PREPARE REMOVEDIR Contents/Resources/8/89/ +PREPARE REMOVEDIR Contents/Resources/8/88/ +PREPARE REMOVEFILE Contents/Resources/8/87/870/87xtext0 +PREPARE REMOVEFILE Contents/Resources/8/87/870/87xtext1 +PREPARE REMOVEDIR Contents/Resources/8/87/870/ +PREPARE REMOVEFILE Contents/Resources/8/87/871/87xtext0 +PREPARE REMOVEFILE Contents/Resources/8/87/871/87xtext1 +PREPARE REMOVEDIR Contents/Resources/8/87/871/ +PREPARE REMOVEDIR Contents/Resources/8/87/ +PREPARE REMOVEFILE Contents/Resources/8/86/86text0 +PREPARE REMOVEFILE Contents/Resources/8/86/86text1 +PREPARE REMOVEDIR Contents/Resources/8/86/ +PREPARE REMOVEDIR Contents/Resources/8/85/ +PREPARE REMOVEDIR Contents/Resources/8/85/ +PREPARE REMOVEDIR Contents/Resources/8/84/ +PREPARE REMOVEDIR Contents/Resources/8/84/ +PREPARE REMOVEDIR Contents/Resources/8/83/ +PREPARE REMOVEDIR Contents/Resources/8/82/ +PREPARE REMOVEDIR Contents/Resources/8/81/ +PREPARE REMOVEDIR Contents/Resources/8/80/ +PREPARE REMOVEDIR Contents/Resources/8/80/ +PREPARE REMOVEFILE Contents/Resources/7/70/7xtest.exe +PREPARE REMOVEFILE Contents/Resources/7/70/7xtext0 +PREPARE REMOVEFILE Contents/Resources/7/70/7xtext1 +PREPARE REMOVEDIR Contents/Resources/7/70/ +PREPARE REMOVEFILE Contents/Resources/7/71/7xtest.exe +PREPARE REMOVEFILE Contents/Resources/7/71/7xtext0 +PREPARE REMOVEFILE Contents/Resources/7/71/7xtext1 +PREPARE REMOVEDIR Contents/Resources/7/71/ +PREPARE REMOVEDIR Contents/Resources/7/ +PREPARE REMOVEDIR Contents/Resources/6/ +PREPARE REMOVEFILE Contents/Resources/5/5text1 +PREPARE REMOVEFILE Contents/Resources/5/5text0 +PREPARE REMOVEFILE Contents/Resources/5/5test.exe +PREPARE REMOVEFILE Contents/Resources/5/5text0 +PREPARE REMOVEFILE Contents/Resources/5/5text1 +PREPARE REMOVEDIR Contents/Resources/5/ +PREPARE REMOVEFILE Contents/Resources/4/4text1 +PREPARE REMOVEFILE Contents/Resources/4/4text0 +PREPARE REMOVEDIR Contents/Resources/4/ +PREPARE REMOVEFILE Contents/Resources/3/3text1 +PREPARE REMOVEFILE Contents/Resources/3/3text0 +EXECUTE REMOVEFILE Contents/Resources/searchplugins/searchpluginstext0 +EXECUTE REMOVEFILE Contents/Resources/searchplugins/searchpluginspng0.png +EXECUTE REMOVEFILE Contents/Resources/removed-files +EXECUTE REMOVEFILE Contents/Resources/precomplete +EXECUTE REMOVEFILE Contents/Resources/2/20/20text0 +EXECUTE REMOVEFILE Contents/Resources/2/20/20png0.png +EXECUTE REMOVEFILE Contents/Resources/0/0exe0.exe +EXECUTE REMOVEFILE Contents/Resources/0/00/00text0 +EXECUTE REMOVEFILE Contents/MacOS/exe0.exe +EXECUTE REMOVEDIR Contents/Resources/searchplugins/ +EXECUTE REMOVEDIR Contents/Resources/defaults/pref/ +EXECUTE REMOVEDIR Contents/Resources/defaults/ +EXECUTE REMOVEDIR Contents/Resources/2/20/ +EXECUTE REMOVEDIR Contents/Resources/2/ +EXECUTE REMOVEDIR Contents/Resources/0/00/ +EXECUTE REMOVEDIR Contents/Resources/0/ +EXECUTE REMOVEDIR Contents/Resources/ +EXECUTE REMOVEDIR Contents/MacOS/ +EXECUTE REMOVEDIR Contents/ +EXECUTE ADD Contents/Resources/searchplugins/searchpluginstext0 +EXECUTE ADD Contents/Resources/searchplugins/searchpluginspng1.png +EXECUTE ADD Contents/Resources/searchplugins/searchpluginspng0.png +EXECUTE ADD Contents/Resources/removed-files +EXECUTE ADD Contents/Resources/precomplete +EXECUTE ADD Contents/Resources/distribution/extensions/extensions1/extensions1text0 +EXECUTE ADD Contents/Resources/distribution/extensions/extensions1/extensions1png1.png +EXECUTE ADD Contents/Resources/distribution/extensions/extensions1/extensions1png0.png +EXECUTE ADD Contents/Resources/distribution/extensions/extensions0/extensions0text0 +EXECUTE ADD Contents/Resources/distribution/extensions/extensions0/extensions0png1.png +EXECUTE ADD Contents/Resources/distribution/extensions/extensions0/extensions0png0.png +EXECUTE ADD Contents/Resources/1/10/10text0 +EXECUTE ADD Contents/Resources/0/0exe0.exe +EXECUTE ADD Contents/Resources/0/00/00text1 +EXECUTE ADD Contents/Resources/0/00/00text0 +EXECUTE ADD Contents/Resources/0/00/00png0.png +EXECUTE ADD Contents/MacOS/exe0.exe +EXECUTE REMOVEDIR Contents/Resources/9/99/ +EXECUTE REMOVEDIR Contents/Resources/9/99/ +EXECUTE REMOVEDIR Contents/Resources/9/98/ +EXECUTE REMOVEFILE Contents/Resources/9/97/970/97xtext0 +EXECUTE REMOVEFILE Contents/Resources/9/97/970/97xtext1 +EXECUTE REMOVEDIR Contents/Resources/9/97/970/ +EXECUTE REMOVEFILE Contents/Resources/9/97/971/97xtext0 +EXECUTE REMOVEFILE Contents/Resources/9/97/971/97xtext1 +EXECUTE REMOVEDIR Contents/Resources/9/97/971/ +EXECUTE REMOVEDIR Contents/Resources/9/97/ +EXECUTE REMOVEFILE Contents/Resources/9/96/96text0 +EXECUTE REMOVEFILE Contents/Resources/9/96/96text1 +EXECUTE REMOVEDIR Contents/Resources/9/96/ +EXECUTE REMOVEDIR Contents/Resources/9/95/ +EXECUTE REMOVEDIR Contents/Resources/9/95/ +EXECUTE REMOVEDIR Contents/Resources/9/94/ +EXECUTE REMOVEDIR Contents/Resources/9/94/ +EXECUTE REMOVEDIR Contents/Resources/9/93/ +EXECUTE REMOVEDIR Contents/Resources/9/92/ +EXECUTE REMOVEDIR Contents/Resources/9/91/ +EXECUTE REMOVEDIR Contents/Resources/9/90/ +EXECUTE REMOVEDIR Contents/Resources/9/90/ +EXECUTE REMOVEDIR Contents/Resources/8/89/ +EXECUTE REMOVEDIR Contents/Resources/8/89/ +EXECUTE REMOVEDIR Contents/Resources/8/88/ +EXECUTE REMOVEFILE Contents/Resources/8/87/870/87xtext0 +EXECUTE REMOVEFILE Contents/Resources/8/87/870/87xtext1 +EXECUTE REMOVEDIR Contents/Resources/8/87/870/ +EXECUTE REMOVEFILE Contents/Resources/8/87/871/87xtext0 +EXECUTE REMOVEFILE Contents/Resources/8/87/871/87xtext1 +EXECUTE REMOVEDIR Contents/Resources/8/87/871/ +EXECUTE REMOVEDIR Contents/Resources/8/87/ +EXECUTE REMOVEFILE Contents/Resources/8/86/86text0 +EXECUTE REMOVEFILE Contents/Resources/8/86/86text1 +EXECUTE REMOVEDIR Contents/Resources/8/86/ +EXECUTE REMOVEDIR Contents/Resources/8/85/ +EXECUTE REMOVEDIR Contents/Resources/8/85/ +EXECUTE REMOVEDIR Contents/Resources/8/84/ +EXECUTE REMOVEDIR Contents/Resources/8/84/ +EXECUTE REMOVEDIR Contents/Resources/8/83/ +EXECUTE REMOVEDIR Contents/Resources/8/82/ +EXECUTE REMOVEDIR Contents/Resources/8/81/ +EXECUTE REMOVEDIR Contents/Resources/8/80/ +EXECUTE REMOVEDIR Contents/Resources/8/80/ +EXECUTE REMOVEFILE Contents/Resources/7/70/7xtest.exe +EXECUTE REMOVEFILE Contents/Resources/7/70/7xtext0 +EXECUTE REMOVEFILE Contents/Resources/7/70/7xtext1 +EXECUTE REMOVEDIR Contents/Resources/7/70/ +EXECUTE REMOVEFILE Contents/Resources/7/71/7xtest.exe +EXECUTE REMOVEFILE Contents/Resources/7/71/7xtext0 +EXECUTE REMOVEFILE Contents/Resources/7/71/7xtext1 +EXECUTE REMOVEDIR Contents/Resources/7/71/ +EXECUTE REMOVEDIR Contents/Resources/7/ +EXECUTE REMOVEDIR Contents/Resources/6/ +EXECUTE REMOVEFILE Contents/Resources/5/5text1 +EXECUTE REMOVEFILE Contents/Resources/5/5text0 +EXECUTE REMOVEFILE Contents/Resources/5/5test.exe +EXECUTE REMOVEFILE Contents/Resources/5/5text0 +file cannot be removed because it does not exist; skipping +EXECUTE REMOVEFILE Contents/Resources/5/5text1 +file cannot be removed because it does not exist; skipping +EXECUTE REMOVEDIR Contents/Resources/5/ +EXECUTE REMOVEFILE Contents/Resources/4/4text1 +EXECUTE REMOVEFILE Contents/Resources/4/4text0 +EXECUTE REMOVEDIR Contents/Resources/4/ +EXECUTE REMOVEFILE Contents/Resources/3/3text1 +EXECUTE REMOVEFILE Contents/Resources/3/3text0 +FINISH REMOVEFILE Contents/Resources/searchplugins/searchpluginstext0 +FINISH REMOVEFILE Contents/Resources/searchplugins/searchpluginspng0.png +FINISH REMOVEFILE Contents/Resources/removed-files +FINISH REMOVEFILE Contents/Resources/precomplete +FINISH REMOVEFILE Contents/Resources/2/20/20text0 +FINISH REMOVEFILE Contents/Resources/2/20/20png0.png +FINISH REMOVEFILE Contents/Resources/0/0exe0.exe +FINISH REMOVEFILE Contents/Resources/0/00/00text0 +FINISH REMOVEFILE Contents/MacOS/exe0.exe +FINISH REMOVEDIR Contents/Resources/searchplugins/ +removing directory: Contents/Resources/searchplugins/, rv: 0 +FINISH REMOVEDIR Contents/Resources/defaults/pref/ +removing directory: Contents/Resources/defaults/pref/, rv: 0 +FINISH REMOVEDIR Contents/Resources/defaults/ +removing directory: Contents/Resources/defaults/, rv: 0 +FINISH REMOVEDIR Contents/Resources/2/20/ +FINISH REMOVEDIR Contents/Resources/2/ +FINISH REMOVEDIR Contents/Resources/0/00/ +removing directory: Contents/Resources/0/00/, rv: 0 +FINISH REMOVEDIR Contents/Resources/0/ +removing directory: Contents/Resources/0/, rv: 0 +FINISH REMOVEDIR Contents/Resources/ +removing directory: Contents/Resources/, rv: 0 +FINISH REMOVEDIR Contents/MacOS/ +removing directory: Contents/MacOS/, rv: 0 +FINISH REMOVEDIR Contents/ +removing directory: Contents/, rv: 0 +FINISH ADD Contents/Resources/searchplugins/searchpluginstext0 +FINISH ADD Contents/Resources/searchplugins/searchpluginspng1.png +FINISH ADD Contents/Resources/searchplugins/searchpluginspng0.png +FINISH ADD Contents/Resources/removed-files +FINISH ADD Contents/Resources/precomplete +FINISH ADD Contents/Resources/distribution/extensions/extensions1/extensions1text0 +FINISH ADD Contents/Resources/distribution/extensions/extensions1/extensions1png1.png +FINISH ADD Contents/Resources/distribution/extensions/extensions1/extensions1png0.png +FINISH ADD Contents/Resources/distribution/extensions/extensions0/extensions0text0 +FINISH ADD Contents/Resources/distribution/extensions/extensions0/extensions0png1.png +FINISH ADD Contents/Resources/distribution/extensions/extensions0/extensions0png0.png +FINISH ADD Contents/Resources/1/10/10text0 +FINISH ADD Contents/Resources/0/0exe0.exe +FINISH ADD Contents/Resources/0/00/00text1 +FINISH ADD Contents/Resources/0/00/00text0 +FINISH ADD Contents/Resources/0/00/00png0.png +FINISH ADD Contents/MacOS/exe0.exe +FINISH REMOVEDIR Contents/Resources/9/99/ +FINISH REMOVEDIR Contents/Resources/9/99/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/9/98/ +FINISH REMOVEFILE Contents/Resources/9/97/970/97xtext0 +FINISH REMOVEFILE Contents/Resources/9/97/970/97xtext1 +FINISH REMOVEDIR Contents/Resources/9/97/970/ +FINISH REMOVEFILE Contents/Resources/9/97/971/97xtext0 +FINISH REMOVEFILE Contents/Resources/9/97/971/97xtext1 +FINISH REMOVEDIR Contents/Resources/9/97/971/ +FINISH REMOVEDIR Contents/Resources/9/97/ +FINISH REMOVEFILE Contents/Resources/9/96/96text0 +FINISH REMOVEFILE Contents/Resources/9/96/96text1 +FINISH REMOVEDIR Contents/Resources/9/96/ +FINISH REMOVEDIR Contents/Resources/9/95/ +FINISH REMOVEDIR Contents/Resources/9/95/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/9/94/ +FINISH REMOVEDIR Contents/Resources/9/94/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/9/93/ +FINISH REMOVEDIR Contents/Resources/9/92/ +removing directory: Contents/Resources/9/92/, rv: 0 +FINISH REMOVEDIR Contents/Resources/9/91/ +removing directory: Contents/Resources/9/91/, rv: 0 +FINISH REMOVEDIR Contents/Resources/9/90/ +FINISH REMOVEDIR Contents/Resources/9/90/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/8/89/ +FINISH REMOVEDIR Contents/Resources/8/89/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/8/88/ +FINISH REMOVEFILE Contents/Resources/8/87/870/87xtext0 +FINISH REMOVEFILE Contents/Resources/8/87/870/87xtext1 +FINISH REMOVEDIR Contents/Resources/8/87/870/ +FINISH REMOVEFILE Contents/Resources/8/87/871/87xtext0 +FINISH REMOVEFILE Contents/Resources/8/87/871/87xtext1 +FINISH REMOVEDIR Contents/Resources/8/87/871/ +FINISH REMOVEDIR Contents/Resources/8/87/ +FINISH REMOVEFILE Contents/Resources/8/86/86text0 +FINISH REMOVEFILE Contents/Resources/8/86/86text1 +FINISH REMOVEDIR Contents/Resources/8/86/ +FINISH REMOVEDIR Contents/Resources/8/85/ +FINISH REMOVEDIR Contents/Resources/8/85/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/8/84/ +FINISH REMOVEDIR Contents/Resources/8/84/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/8/83/ +FINISH REMOVEDIR Contents/Resources/8/82/ +removing directory: Contents/Resources/8/82/, rv: 0 +FINISH REMOVEDIR Contents/Resources/8/81/ +removing directory: Contents/Resources/8/81/, rv: 0 +FINISH REMOVEDIR Contents/Resources/8/80/ +FINISH REMOVEDIR Contents/Resources/8/80/ +directory no longer exists; skipping +FINISH REMOVEFILE Contents/Resources/7/70/7xtest.exe +FINISH REMOVEFILE Contents/Resources/7/70/7xtext0 +FINISH REMOVEFILE Contents/Resources/7/70/7xtext1 +FINISH REMOVEDIR Contents/Resources/7/70/ +FINISH REMOVEFILE Contents/Resources/7/71/7xtest.exe +FINISH REMOVEFILE Contents/Resources/7/71/7xtext0 +FINISH REMOVEFILE Contents/Resources/7/71/7xtext1 +FINISH REMOVEDIR Contents/Resources/7/71/ +FINISH REMOVEDIR Contents/Resources/7/ +FINISH REMOVEDIR Contents/Resources/6/ +FINISH REMOVEFILE Contents/Resources/5/5text1 +FINISH REMOVEFILE Contents/Resources/5/5text0 +FINISH REMOVEFILE Contents/Resources/5/5test.exe +FINISH REMOVEDIR Contents/Resources/5/ +FINISH REMOVEFILE Contents/Resources/4/4text1 +FINISH REMOVEFILE Contents/Resources/4/4text0 +FINISH REMOVEDIR Contents/Resources/4/ +FINISH REMOVEFILE Contents/Resources/3/3text1 +FINISH REMOVEFILE Contents/Resources/3/3text0 +succeeded +calling QuitProgressUI diff --git a/toolkit/mozapps/update/tests/data/complete_mac.mar b/toolkit/mozapps/update/tests/data/complete_mac.mar new file mode 100644 index 0000000000000000000000000000000000000000..ca1497f4f292e2065b0355f7345fb2681fe85db8 GIT binary patch literal 98454 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

-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 h6A93mrJ3IDN^8zyr-e_ZAA_5$DP zGi|MBa;$t&VWXdhJqD_VBjaV>f-) z*%`ed^0AW`+66E7Gxp!BJ2U_LcB>Z|3u-e2zgC$9Y^u4=XCrNTKElrYrChjHNa3;I znwM^K=Nn!+@B22>_mIz}DEn9P?tvdaA1k)|`BOjq5yvXUtQ)g97pHQazRxdxOCZi5 z^RRH5l3Z4dpbF1oiSnuQR3}&HuUw^frD!_8T2{YUiS3ImS(9ZL%j%2HUW#B~3Ax$8 zAP~U(|AGDU`w0$Ag2j#wm$K|bG8a2YF)*lHS-#Zwm0K_GlCNwHY?2bfKAaPdTxYaefB%WN}98QHvX(xpO1UnXnSZD-1I3RO+ zZR5d+bzIK^SLB~h_%0jFF1af!`JrjioW=EWmh*yFC6`yX+}K*BvugF?8k3o7#WM?% zd17yBtr7`zSvG6dwXJK;impw|SZ~zt_~(s(m-&<&8NpYx|2rS4zISuRrcIkRH`Lb# zuYbQ@c~YV7r20Db>A}VYNq%21$Xu;melb?M`DL+h^G5Y9eYudA?o;i)NJwiPcspa- zlUZ{+IZY?r&M0bV|N3vjPIcqO_oliAT`QmP-tV2sYkr1H()&&QO-?QMDCRx!;ga9= zw6f>tkDr&_c02dH{fz>?_aQ&|y~+jt)E~VwvEENaMP_r!GzO=r3`;}DNVVX|+7G?Y z8Cd4PW8^z1MuJx=F!rdaHM1m1O85wgobnGcF}bY1a^b=S5{Hs94BQkawj5ZgGApww z_)FUi&BdlhjttqyCm*x(S~zjpF_qQp7j%mhLqt%BY~nS8vhEB5Psk+>cM6N8P!wSSGOxh z+h@8ldL7R447k;!(`|WbiOI#%5KSdT4h^SzB~Rr7p@}r9JAQX_h|I*7GAS7{hfbK+S=rb+S1p-rlD1`%F@Jf%NxmtY zlrNszt9}0Z+`L_{x7*asJuL7e>v>9H(kE$;dyf5oVo!=ZbaMQD$b1eWEDI!?row`I$w#Gp{ysf+z+tzWmsq}#-Q3>Ty}K_2YczPNYzud0m^1sGHk7{~^okOo?# O3QXPz?;_b{!~g(hDe`mx diff --git a/toolkit/mozapps/update/tests/data/partial_log_failure b/toolkit/mozapps/update/tests/data/partial_log_failure index 982e39b46a8..8cea74a757a 100644 --- a/toolkit/mozapps/update/tests/data/partial_log_failure +++ b/toolkit/mozapps/update/tests/data/partial_log_failure @@ -1,186 +1,186 @@ UPDATE TYPE partial +PREPARE ADD searchplugins/searchpluginstext0 +PREPARE PATCH searchplugins/searchpluginspng1.png +PREPARE PATCH searchplugins/searchpluginspng0.png PREPARE ADD precomplete -PREPARE ADD a/b/searchplugins/searchpluginstext0 -PREPARE PATCH a/b/searchplugins/searchpluginspng1.png -PREPARE PATCH a/b/searchplugins/searchpluginspng0.png -PREPARE PATCH a/b/exe0.exe -PREPARE ADD a/b/distribution/extensions/extensions1/extensions1text0 -PREPARE PATCH a/b/distribution/extensions/extensions1/extensions1png1.png -PREPARE PATCH a/b/distribution/extensions/extensions1/extensions1png0.png -PREPARE ADD a/b/distribution/extensions/extensions0/extensions0text0 -PREPARE PATCH a/b/distribution/extensions/extensions0/extensions0png1.png -PREPARE PATCH a/b/distribution/extensions/extensions0/extensions0png0.png -PREPARE PATCH a/b/0/0exe0.exe -PREPARE ADD a/b/0/00/00text0 -PREPARE PATCH a/b/0/00/00png0.png -PREPARE ADD a/b/2/20/20text0 -PREPARE ADD a/b/2/20/20png0.png -PREPARE ADD a/b/0/00/00text2 -PREPARE REMOVEFILE a/b/1/10/10text0 -PREPARE REMOVEFILE a/b/0/00/00text1 -PREPARE REMOVEDIR a/b/9/99/ -PREPARE REMOVEDIR a/b/9/99/ -PREPARE REMOVEDIR a/b/9/98/ -PREPARE REMOVEFILE a/b/9/97/970/97xtext0 -PREPARE REMOVEFILE a/b/9/97/970/97xtext1 -PREPARE REMOVEDIR a/b/9/97/970/ -PREPARE REMOVEFILE a/b/9/97/971/97xtext0 -PREPARE REMOVEFILE a/b/9/97/971/97xtext1 -PREPARE REMOVEDIR a/b/9/97/971/ -PREPARE REMOVEDIR a/b/9/97/ -PREPARE REMOVEFILE a/b/9/96/96text0 -PREPARE REMOVEFILE a/b/9/96/96text1 -PREPARE REMOVEDIR a/b/9/96/ -PREPARE REMOVEDIR a/b/9/95/ -PREPARE REMOVEDIR a/b/9/95/ -PREPARE REMOVEDIR a/b/9/94/ -PREPARE REMOVEDIR a/b/9/94/ -PREPARE REMOVEDIR a/b/9/93/ -PREPARE REMOVEDIR a/b/9/92/ -PREPARE REMOVEDIR a/b/9/91/ -PREPARE REMOVEDIR a/b/9/90/ -PREPARE REMOVEDIR a/b/9/90/ -PREPARE REMOVEDIR a/b/8/89/ -PREPARE REMOVEDIR a/b/8/89/ -PREPARE REMOVEDIR a/b/8/88/ -PREPARE REMOVEFILE a/b/8/87/870/87xtext0 -PREPARE REMOVEFILE a/b/8/87/870/87xtext1 -PREPARE REMOVEDIR a/b/8/87/870/ -PREPARE REMOVEFILE a/b/8/87/871/87xtext0 -PREPARE REMOVEFILE a/b/8/87/871/87xtext1 -PREPARE REMOVEDIR a/b/8/87/871/ -PREPARE REMOVEDIR a/b/8/87/ -PREPARE REMOVEFILE a/b/8/86/86text0 -PREPARE REMOVEFILE a/b/8/86/86text1 -PREPARE REMOVEDIR a/b/8/86/ -PREPARE REMOVEDIR a/b/8/85/ -PREPARE REMOVEDIR a/b/8/85/ -PREPARE REMOVEDIR a/b/8/84/ -PREPARE REMOVEDIR a/b/8/84/ -PREPARE REMOVEDIR a/b/8/83/ -PREPARE REMOVEDIR a/b/8/82/ -PREPARE REMOVEDIR a/b/8/81/ -PREPARE REMOVEDIR a/b/8/80/ -PREPARE REMOVEDIR a/b/8/80/ -PREPARE REMOVEFILE a/b/7/70/7xtest.exe -PREPARE REMOVEFILE a/b/7/70/7xtext0 -PREPARE REMOVEFILE a/b/7/70/7xtext1 -PREPARE REMOVEDIR a/b/7/70/ -PREPARE REMOVEFILE a/b/7/71/7xtest.exe -PREPARE REMOVEFILE a/b/7/71/7xtext0 -PREPARE REMOVEFILE a/b/7/71/7xtext1 -PREPARE REMOVEDIR a/b/7/71/ -PREPARE REMOVEDIR a/b/7/ -PREPARE REMOVEDIR a/b/6/ -PREPARE REMOVEFILE a/b/5/5text1 -PREPARE REMOVEFILE a/b/5/5text0 -PREPARE REMOVEFILE a/b/5/5test.exe -PREPARE REMOVEFILE a/b/5/5text0 -PREPARE REMOVEFILE a/b/5/5text1 -PREPARE REMOVEDIR a/b/5/ -PREPARE REMOVEFILE a/b/4/4text1 -PREPARE REMOVEFILE a/b/4/4text0 -PREPARE REMOVEDIR a/b/4/ -PREPARE REMOVEFILE a/b/3/3text1 -PREPARE REMOVEFILE a/b/3/3text0 -PREPARE REMOVEDIR a/b/1/10/ -PREPARE REMOVEDIR a/b/1/ +PREPARE PATCH exe0.exe +PREPARE ADD distribution/extensions/extensions1/extensions1text0 +PREPARE PATCH distribution/extensions/extensions1/extensions1png1.png +PREPARE PATCH distribution/extensions/extensions1/extensions1png0.png +PREPARE ADD distribution/extensions/extensions0/extensions0text0 +PREPARE PATCH distribution/extensions/extensions0/extensions0png1.png +PREPARE PATCH distribution/extensions/extensions0/extensions0png0.png +PREPARE PATCH 0/0exe0.exe +PREPARE ADD 0/00/00text0 +PREPARE PATCH 0/00/00png0.png +PREPARE ADD 2/20/20text0 +PREPARE ADD 2/20/20png0.png +PREPARE ADD 0/00/00text2 +PREPARE REMOVEFILE 1/10/10text0 +PREPARE REMOVEFILE 0/00/00text1 +PREPARE REMOVEDIR 9/99/ +PREPARE REMOVEDIR 9/99/ +PREPARE REMOVEDIR 9/98/ +PREPARE REMOVEFILE 9/97/970/97xtext0 +PREPARE REMOVEFILE 9/97/970/97xtext1 +PREPARE REMOVEDIR 9/97/970/ +PREPARE REMOVEFILE 9/97/971/97xtext0 +PREPARE REMOVEFILE 9/97/971/97xtext1 +PREPARE REMOVEDIR 9/97/971/ +PREPARE REMOVEDIR 9/97/ +PREPARE REMOVEFILE 9/96/96text0 +PREPARE REMOVEFILE 9/96/96text1 +PREPARE REMOVEDIR 9/96/ +PREPARE REMOVEDIR 9/95/ +PREPARE REMOVEDIR 9/95/ +PREPARE REMOVEDIR 9/94/ +PREPARE REMOVEDIR 9/94/ +PREPARE REMOVEDIR 9/93/ +PREPARE REMOVEDIR 9/92/ +PREPARE REMOVEDIR 9/91/ +PREPARE REMOVEDIR 9/90/ +PREPARE REMOVEDIR 9/90/ +PREPARE REMOVEDIR 8/89/ +PREPARE REMOVEDIR 8/89/ +PREPARE REMOVEDIR 8/88/ +PREPARE REMOVEFILE 8/87/870/87xtext0 +PREPARE REMOVEFILE 8/87/870/87xtext1 +PREPARE REMOVEDIR 8/87/870/ +PREPARE REMOVEFILE 8/87/871/87xtext0 +PREPARE REMOVEFILE 8/87/871/87xtext1 +PREPARE REMOVEDIR 8/87/871/ +PREPARE REMOVEDIR 8/87/ +PREPARE REMOVEFILE 8/86/86text0 +PREPARE REMOVEFILE 8/86/86text1 +PREPARE REMOVEDIR 8/86/ +PREPARE REMOVEDIR 8/85/ +PREPARE REMOVEDIR 8/85/ +PREPARE REMOVEDIR 8/84/ +PREPARE REMOVEDIR 8/84/ +PREPARE REMOVEDIR 8/83/ +PREPARE REMOVEDIR 8/82/ +PREPARE REMOVEDIR 8/81/ +PREPARE REMOVEDIR 8/80/ +PREPARE REMOVEDIR 8/80/ +PREPARE REMOVEFILE 7/70/7xtest.exe +PREPARE REMOVEFILE 7/70/7xtext0 +PREPARE REMOVEFILE 7/70/7xtext1 +PREPARE REMOVEDIR 7/70/ +PREPARE REMOVEFILE 7/71/7xtest.exe +PREPARE REMOVEFILE 7/71/7xtext0 +PREPARE REMOVEFILE 7/71/7xtext1 +PREPARE REMOVEDIR 7/71/ +PREPARE REMOVEDIR 7/ +PREPARE REMOVEDIR 6/ +PREPARE REMOVEFILE 5/5text1 +PREPARE REMOVEFILE 5/5text0 +PREPARE REMOVEFILE 5/5test.exe +PREPARE REMOVEFILE 5/5text0 +PREPARE REMOVEFILE 5/5text1 +PREPARE REMOVEDIR 5/ +PREPARE REMOVEFILE 4/4text1 +PREPARE REMOVEFILE 4/4text0 +PREPARE REMOVEDIR 4/ +PREPARE REMOVEFILE 3/3text1 +PREPARE REMOVEFILE 3/3text0 +PREPARE REMOVEDIR 1/10/ +PREPARE REMOVEDIR 1/ +EXECUTE ADD searchplugins/searchpluginstext0 +EXECUTE PATCH searchplugins/searchpluginspng1.png +EXECUTE PATCH searchplugins/searchpluginspng0.png EXECUTE ADD precomplete -EXECUTE ADD a/b/searchplugins/searchpluginstext0 -EXECUTE PATCH a/b/searchplugins/searchpluginspng1.png -EXECUTE PATCH a/b/searchplugins/searchpluginspng0.png -EXECUTE PATCH a/b/exe0.exe -EXECUTE ADD a/b/distribution/extensions/extensions1/extensions1text0 -EXECUTE PATCH a/b/distribution/extensions/extensions1/extensions1png1.png -EXECUTE PATCH a/b/distribution/extensions/extensions1/extensions1png0.png -EXECUTE ADD a/b/distribution/extensions/extensions0/extensions0text0 -EXECUTE PATCH a/b/distribution/extensions/extensions0/extensions0png1.png -EXECUTE PATCH a/b/distribution/extensions/extensions0/extensions0png0.png -EXECUTE PATCH a/b/0/0exe0.exe +EXECUTE PATCH exe0.exe +EXECUTE ADD distribution/extensions/extensions1/extensions1text0 +EXECUTE PATCH distribution/extensions/extensions1/extensions1png1.png +EXECUTE PATCH distribution/extensions/extensions1/extensions1png0.png +EXECUTE ADD distribution/extensions/extensions0/extensions0text0 +EXECUTE PATCH distribution/extensions/extensions0/extensions0png1.png +EXECUTE PATCH distribution/extensions/extensions0/extensions0png0.png +EXECUTE PATCH 0/0exe0.exe LoadSourceFile: destination file size 776 does not match expected size 79872 LoadSourceFile failed ### execution failed +FINISH ADD searchplugins/searchpluginstext0 +FINISH PATCH searchplugins/searchpluginspng1.png +FINISH PATCH searchplugins/searchpluginspng0.png FINISH ADD precomplete -FINISH ADD a/b/searchplugins/searchpluginstext0 -FINISH PATCH a/b/searchplugins/searchpluginspng1.png -FINISH PATCH a/b/searchplugins/searchpluginspng0.png -FINISH PATCH a/b/exe0.exe -FINISH ADD a/b/distribution/extensions/extensions1/extensions1text0 -backup_restore: backup file doesn't exist: a/b/distribution/extensions/extensions1/extensions1text0.moz-backup -FINISH PATCH a/b/distribution/extensions/extensions1/extensions1png1.png -FINISH PATCH a/b/distribution/extensions/extensions1/extensions1png0.png -FINISH ADD a/b/distribution/extensions/extensions0/extensions0text0 -FINISH PATCH a/b/distribution/extensions/extensions0/extensions0png1.png -FINISH PATCH a/b/distribution/extensions/extensions0/extensions0png0.png -FINISH PATCH a/b/0/0exe0.exe -backup_restore: backup file doesn't exist: a/b/0/0exe0.exe.moz-backup -FINISH ADD a/b/0/00/00text0 -backup_restore: backup file doesn't exist: a/b/0/00/00text0.moz-backup -FINISH PATCH a/b/0/00/00png0.png -backup_restore: backup file doesn't exist: a/b/0/00/00png0.png.moz-backup -FINISH ADD a/b/2/20/20text0 -backup_restore: backup file doesn't exist: a/b/2/20/20text0.moz-backup -FINISH ADD a/b/2/20/20png0.png -backup_restore: backup file doesn't exist: a/b/2/20/20png0.png.moz-backup -FINISH ADD a/b/0/00/00text2 -backup_restore: backup file doesn't exist: a/b/0/00/00text2.moz-backup -FINISH REMOVEFILE a/b/1/10/10text0 -backup_restore: backup file doesn't exist: a/b/1/10/10text0.moz-backup -FINISH REMOVEFILE a/b/0/00/00text1 -backup_restore: backup file doesn't exist: a/b/0/00/00text1.moz-backup -FINISH REMOVEFILE a/b/9/97/970/97xtext0 -backup_restore: backup file doesn't exist: a/b/9/97/970/97xtext0.moz-backup -FINISH REMOVEFILE a/b/9/97/970/97xtext1 -backup_restore: backup file doesn't exist: a/b/9/97/970/97xtext1.moz-backup -FINISH REMOVEFILE a/b/9/97/971/97xtext0 -backup_restore: backup file doesn't exist: a/b/9/97/971/97xtext0.moz-backup -FINISH REMOVEFILE a/b/9/97/971/97xtext1 -backup_restore: backup file doesn't exist: a/b/9/97/971/97xtext1.moz-backup -FINISH REMOVEFILE a/b/9/96/96text0 -backup_restore: backup file doesn't exist: a/b/9/96/96text0.moz-backup -FINISH REMOVEFILE a/b/9/96/96text1 -backup_restore: backup file doesn't exist: a/b/9/96/96text1.moz-backup -FINISH REMOVEFILE a/b/8/87/870/87xtext0 -backup_restore: backup file doesn't exist: a/b/8/87/870/87xtext0.moz-backup -FINISH REMOVEFILE a/b/8/87/870/87xtext1 -backup_restore: backup file doesn't exist: a/b/8/87/870/87xtext1.moz-backup -FINISH REMOVEFILE a/b/8/87/871/87xtext0 -backup_restore: backup file doesn't exist: a/b/8/87/871/87xtext0.moz-backup -FINISH REMOVEFILE a/b/8/87/871/87xtext1 -backup_restore: backup file doesn't exist: a/b/8/87/871/87xtext1.moz-backup -FINISH REMOVEFILE a/b/8/86/86text0 -backup_restore: backup file doesn't exist: a/b/8/86/86text0.moz-backup -FINISH REMOVEFILE a/b/8/86/86text1 -backup_restore: backup file doesn't exist: a/b/8/86/86text1.moz-backup -FINISH REMOVEFILE a/b/7/70/7xtest.exe -backup_restore: backup file doesn't exist: a/b/7/70/7xtest.exe.moz-backup -FINISH REMOVEFILE a/b/7/70/7xtext0 -backup_restore: backup file doesn't exist: a/b/7/70/7xtext0.moz-backup -FINISH REMOVEFILE a/b/7/70/7xtext1 -backup_restore: backup file doesn't exist: a/b/7/70/7xtext1.moz-backup -FINISH REMOVEFILE a/b/7/71/7xtest.exe -backup_restore: backup file doesn't exist: a/b/7/71/7xtest.exe.moz-backup -FINISH REMOVEFILE a/b/7/71/7xtext0 -backup_restore: backup file doesn't exist: a/b/7/71/7xtext0.moz-backup -FINISH REMOVEFILE a/b/7/71/7xtext1 -backup_restore: backup file doesn't exist: a/b/7/71/7xtext1.moz-backup -FINISH REMOVEFILE a/b/5/5text1 -backup_restore: backup file doesn't exist: a/b/5/5text1.moz-backup -FINISH REMOVEFILE a/b/5/5text0 -backup_restore: backup file doesn't exist: a/b/5/5text0.moz-backup -FINISH REMOVEFILE a/b/5/5test.exe -backup_restore: backup file doesn't exist: a/b/5/5test.exe.moz-backup -FINISH REMOVEFILE a/b/5/5text0 -backup_restore: backup file doesn't exist: a/b/5/5text0.moz-backup -FINISH REMOVEFILE a/b/5/5text1 -backup_restore: backup file doesn't exist: a/b/5/5text1.moz-backup -FINISH REMOVEFILE a/b/4/4text1 -backup_restore: backup file doesn't exist: a/b/4/4text1.moz-backup -FINISH REMOVEFILE a/b/4/4text0 -backup_restore: backup file doesn't exist: a/b/4/4text0.moz-backup -FINISH REMOVEFILE a/b/3/3text1 -backup_restore: backup file doesn't exist: a/b/3/3text1.moz-backup -FINISH REMOVEFILE a/b/3/3text0 -backup_restore: backup file doesn't exist: a/b/3/3text0.moz-backup +FINISH PATCH exe0.exe +FINISH ADD distribution/extensions/extensions1/extensions1text0 +backup_restore: backup file doesn't exist: distribution/extensions/extensions1/extensions1text0.moz-backup +FINISH PATCH distribution/extensions/extensions1/extensions1png1.png +FINISH PATCH distribution/extensions/extensions1/extensions1png0.png +FINISH ADD distribution/extensions/extensions0/extensions0text0 +FINISH PATCH distribution/extensions/extensions0/extensions0png1.png +FINISH PATCH distribution/extensions/extensions0/extensions0png0.png +FINISH PATCH 0/0exe0.exe +backup_restore: backup file doesn't exist: 0/0exe0.exe.moz-backup +FINISH ADD 0/00/00text0 +backup_restore: backup file doesn't exist: 0/00/00text0.moz-backup +FINISH PATCH 0/00/00png0.png +backup_restore: backup file doesn't exist: 0/00/00png0.png.moz-backup +FINISH ADD 2/20/20text0 +backup_restore: backup file doesn't exist: 2/20/20text0.moz-backup +FINISH ADD 2/20/20png0.png +backup_restore: backup file doesn't exist: 2/20/20png0.png.moz-backup +FINISH ADD 0/00/00text2 +backup_restore: backup file doesn't exist: 0/00/00text2.moz-backup +FINISH REMOVEFILE 1/10/10text0 +backup_restore: backup file doesn't exist: 1/10/10text0.moz-backup +FINISH REMOVEFILE 0/00/00text1 +backup_restore: backup file doesn't exist: 0/00/00text1.moz-backup +FINISH REMOVEFILE 9/97/970/97xtext0 +backup_restore: backup file doesn't exist: 9/97/970/97xtext0.moz-backup +FINISH REMOVEFILE 9/97/970/97xtext1 +backup_restore: backup file doesn't exist: 9/97/970/97xtext1.moz-backup +FINISH REMOVEFILE 9/97/971/97xtext0 +backup_restore: backup file doesn't exist: 9/97/971/97xtext0.moz-backup +FINISH REMOVEFILE 9/97/971/97xtext1 +backup_restore: backup file doesn't exist: 9/97/971/97xtext1.moz-backup +FINISH REMOVEFILE 9/96/96text0 +backup_restore: backup file doesn't exist: 9/96/96text0.moz-backup +FINISH REMOVEFILE 9/96/96text1 +backup_restore: backup file doesn't exist: 9/96/96text1.moz-backup +FINISH REMOVEFILE 8/87/870/87xtext0 +backup_restore: backup file doesn't exist: 8/87/870/87xtext0.moz-backup +FINISH REMOVEFILE 8/87/870/87xtext1 +backup_restore: backup file doesn't exist: 8/87/870/87xtext1.moz-backup +FINISH REMOVEFILE 8/87/871/87xtext0 +backup_restore: backup file doesn't exist: 8/87/871/87xtext0.moz-backup +FINISH REMOVEFILE 8/87/871/87xtext1 +backup_restore: backup file doesn't exist: 8/87/871/87xtext1.moz-backup +FINISH REMOVEFILE 8/86/86text0 +backup_restore: backup file doesn't exist: 8/86/86text0.moz-backup +FINISH REMOVEFILE 8/86/86text1 +backup_restore: backup file doesn't exist: 8/86/86text1.moz-backup +FINISH REMOVEFILE 7/70/7xtest.exe +backup_restore: backup file doesn't exist: 7/70/7xtest.exe.moz-backup +FINISH REMOVEFILE 7/70/7xtext0 +backup_restore: backup file doesn't exist: 7/70/7xtext0.moz-backup +FINISH REMOVEFILE 7/70/7xtext1 +backup_restore: backup file doesn't exist: 7/70/7xtext1.moz-backup +FINISH REMOVEFILE 7/71/7xtest.exe +backup_restore: backup file doesn't exist: 7/71/7xtest.exe.moz-backup +FINISH REMOVEFILE 7/71/7xtext0 +backup_restore: backup file doesn't exist: 7/71/7xtext0.moz-backup +FINISH REMOVEFILE 7/71/7xtext1 +backup_restore: backup file doesn't exist: 7/71/7xtext1.moz-backup +FINISH REMOVEFILE 5/5text1 +backup_restore: backup file doesn't exist: 5/5text1.moz-backup +FINISH REMOVEFILE 5/5text0 +backup_restore: backup file doesn't exist: 5/5text0.moz-backup +FINISH REMOVEFILE 5/5test.exe +backup_restore: backup file doesn't exist: 5/5test.exe.moz-backup +FINISH REMOVEFILE 5/5text0 +backup_restore: backup file doesn't exist: 5/5text0.moz-backup +FINISH REMOVEFILE 5/5text1 +backup_restore: backup file doesn't exist: 5/5text1.moz-backup +FINISH REMOVEFILE 4/4text1 +backup_restore: backup file doesn't exist: 4/4text1.moz-backup +FINISH REMOVEFILE 4/4text0 +backup_restore: backup file doesn't exist: 4/4text0.moz-backup +FINISH REMOVEFILE 3/3text1 +backup_restore: backup file doesn't exist: 3/3text1.moz-backup +FINISH REMOVEFILE 3/3text0 +backup_restore: backup file doesn't exist: 3/3text0.moz-backup failed: 42 calling QuitProgressUI diff --git a/toolkit/mozapps/update/tests/data/partial_log_failure_mac b/toolkit/mozapps/update/tests/data/partial_log_failure_mac new file mode 100644 index 00000000000..e76115144ae --- /dev/null +++ b/toolkit/mozapps/update/tests/data/partial_log_failure_mac @@ -0,0 +1,186 @@ +UPDATE TYPE partial +PREPARE ADD Contents/Resources/searchplugins/searchpluginstext0 +PREPARE PATCH Contents/Resources/searchplugins/searchpluginspng1.png +PREPARE PATCH Contents/Resources/searchplugins/searchpluginspng0.png +PREPARE ADD Contents/Resources/precomplete +PREPARE ADD Contents/Resources/distribution/extensions/extensions1/extensions1text0 +PREPARE PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png1.png +PREPARE PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png0.png +PREPARE ADD Contents/Resources/distribution/extensions/extensions0/extensions0text0 +PREPARE PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png1.png +PREPARE PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png0.png +PREPARE PATCH Contents/Resources/0/0exe0.exe +PREPARE ADD Contents/Resources/0/00/00text0 +PREPARE PATCH Contents/Resources/0/00/00png0.png +PREPARE PATCH Contents/MacOS/exe0.exe +PREPARE ADD Contents/Resources/2/20/20text0 +PREPARE ADD Contents/Resources/2/20/20png0.png +PREPARE ADD Contents/Resources/0/00/00text2 +PREPARE REMOVEFILE Contents/Resources/1/10/10text0 +PREPARE REMOVEFILE Contents/Resources/0/00/00text1 +PREPARE REMOVEDIR Contents/Resources/9/99/ +PREPARE REMOVEDIR Contents/Resources/9/99/ +PREPARE REMOVEDIR Contents/Resources/9/98/ +PREPARE REMOVEFILE Contents/Resources/9/97/970/97xtext0 +PREPARE REMOVEFILE Contents/Resources/9/97/970/97xtext1 +PREPARE REMOVEDIR Contents/Resources/9/97/970/ +PREPARE REMOVEFILE Contents/Resources/9/97/971/97xtext0 +PREPARE REMOVEFILE Contents/Resources/9/97/971/97xtext1 +PREPARE REMOVEDIR Contents/Resources/9/97/971/ +PREPARE REMOVEDIR Contents/Resources/9/97/ +PREPARE REMOVEFILE Contents/Resources/9/96/96text0 +PREPARE REMOVEFILE Contents/Resources/9/96/96text1 +PREPARE REMOVEDIR Contents/Resources/9/96/ +PREPARE REMOVEDIR Contents/Resources/9/95/ +PREPARE REMOVEDIR Contents/Resources/9/95/ +PREPARE REMOVEDIR Contents/Resources/9/94/ +PREPARE REMOVEDIR Contents/Resources/9/94/ +PREPARE REMOVEDIR Contents/Resources/9/93/ +PREPARE REMOVEDIR Contents/Resources/9/92/ +PREPARE REMOVEDIR Contents/Resources/9/91/ +PREPARE REMOVEDIR Contents/Resources/9/90/ +PREPARE REMOVEDIR Contents/Resources/9/90/ +PREPARE REMOVEDIR Contents/Resources/8/89/ +PREPARE REMOVEDIR Contents/Resources/8/89/ +PREPARE REMOVEDIR Contents/Resources/8/88/ +PREPARE REMOVEFILE Contents/Resources/8/87/870/87xtext0 +PREPARE REMOVEFILE Contents/Resources/8/87/870/87xtext1 +PREPARE REMOVEDIR Contents/Resources/8/87/870/ +PREPARE REMOVEFILE Contents/Resources/8/87/871/87xtext0 +PREPARE REMOVEFILE Contents/Resources/8/87/871/87xtext1 +PREPARE REMOVEDIR Contents/Resources/8/87/871/ +PREPARE REMOVEDIR Contents/Resources/8/87/ +PREPARE REMOVEFILE Contents/Resources/8/86/86text0 +PREPARE REMOVEFILE Contents/Resources/8/86/86text1 +PREPARE REMOVEDIR Contents/Resources/8/86/ +PREPARE REMOVEDIR Contents/Resources/8/85/ +PREPARE REMOVEDIR Contents/Resources/8/85/ +PREPARE REMOVEDIR Contents/Resources/8/84/ +PREPARE REMOVEDIR Contents/Resources/8/84/ +PREPARE REMOVEDIR Contents/Resources/8/83/ +PREPARE REMOVEDIR Contents/Resources/8/82/ +PREPARE REMOVEDIR Contents/Resources/8/81/ +PREPARE REMOVEDIR Contents/Resources/8/80/ +PREPARE REMOVEDIR Contents/Resources/8/80/ +PREPARE REMOVEFILE Contents/Resources/7/70/7xtest.exe +PREPARE REMOVEFILE Contents/Resources/7/70/7xtext0 +PREPARE REMOVEFILE Contents/Resources/7/70/7xtext1 +PREPARE REMOVEDIR Contents/Resources/7/70/ +PREPARE REMOVEFILE Contents/Resources/7/71/7xtest.exe +PREPARE REMOVEFILE Contents/Resources/7/71/7xtext0 +PREPARE REMOVEFILE Contents/Resources/7/71/7xtext1 +PREPARE REMOVEDIR Contents/Resources/7/71/ +PREPARE REMOVEDIR Contents/Resources/7/ +PREPARE REMOVEDIR Contents/Resources/6/ +PREPARE REMOVEFILE Contents/Resources/5/5text1 +PREPARE REMOVEFILE Contents/Resources/5/5text0 +PREPARE REMOVEFILE Contents/Resources/5/5test.exe +PREPARE REMOVEFILE Contents/Resources/5/5text0 +PREPARE REMOVEFILE Contents/Resources/5/5text1 +PREPARE REMOVEDIR Contents/Resources/5/ +PREPARE REMOVEFILE Contents/Resources/4/4text1 +PREPARE REMOVEFILE Contents/Resources/4/4text0 +PREPARE REMOVEDIR Contents/Resources/4/ +PREPARE REMOVEFILE Contents/Resources/3/3text1 +PREPARE REMOVEFILE Contents/Resources/3/3text0 +PREPARE REMOVEDIR Contents/Resources/1/10/ +PREPARE REMOVEDIR Contents/Resources/1/ +EXECUTE ADD Contents/Resources/searchplugins/searchpluginstext0 +EXECUTE PATCH Contents/Resources/searchplugins/searchpluginspng1.png +EXECUTE PATCH Contents/Resources/searchplugins/searchpluginspng0.png +EXECUTE ADD Contents/Resources/precomplete +EXECUTE ADD Contents/Resources/distribution/extensions/extensions1/extensions1text0 +EXECUTE PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png1.png +EXECUTE PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png0.png +EXECUTE ADD Contents/Resources/distribution/extensions/extensions0/extensions0text0 +EXECUTE PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png1.png +EXECUTE PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png0.png +EXECUTE PATCH Contents/Resources/0/0exe0.exe +LoadSourceFile: destination file size 776 does not match expected size 79872 +LoadSourceFile failed +### execution failed +FINISH ADD Contents/Resources/searchplugins/searchpluginstext0 +FINISH PATCH Contents/Resources/searchplugins/searchpluginspng1.png +FINISH PATCH Contents/Resources/searchplugins/searchpluginspng0.png +FINISH ADD Contents/Resources/precomplete +FINISH ADD Contents/Resources/distribution/extensions/extensions1/extensions1text0 +backup_restore: backup file doesn't exist: Contents/Resources/distribution/extensions/extensions1/extensions1text0.moz-backup +FINISH PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png1.png +FINISH PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png0.png +FINISH ADD Contents/Resources/distribution/extensions/extensions0/extensions0text0 +FINISH PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png1.png +FINISH PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png0.png +FINISH PATCH Contents/Resources/0/0exe0.exe +backup_restore: backup file doesn't exist: Contents/Resources/0/0exe0.exe.moz-backup +FINISH ADD Contents/Resources/0/00/00text0 +backup_restore: backup file doesn't exist: Contents/Resources/0/00/00text0.moz-backup +FINISH PATCH Contents/Resources/0/00/00png0.png +backup_restore: backup file doesn't exist: Contents/Resources/0/00/00png0.png.moz-backup +FINISH PATCH Contents/MacOS/exe0.exe +backup_restore: backup file doesn't exist: Contents/MacOS/exe0.exe.moz-backup +FINISH ADD Contents/Resources/2/20/20text0 +backup_restore: backup file doesn't exist: Contents/Resources/2/20/20text0.moz-backup +FINISH ADD Contents/Resources/2/20/20png0.png +backup_restore: backup file doesn't exist: Contents/Resources/2/20/20png0.png.moz-backup +FINISH ADD Contents/Resources/0/00/00text2 +backup_restore: backup file doesn't exist: Contents/Resources/0/00/00text2.moz-backup +FINISH REMOVEFILE Contents/Resources/1/10/10text0 +backup_restore: backup file doesn't exist: Contents/Resources/1/10/10text0.moz-backup +FINISH REMOVEFILE Contents/Resources/0/00/00text1 +backup_restore: backup file doesn't exist: Contents/Resources/0/00/00text1.moz-backup +FINISH REMOVEFILE Contents/Resources/9/97/970/97xtext0 +backup_restore: backup file doesn't exist: Contents/Resources/9/97/970/97xtext0.moz-backup +FINISH REMOVEFILE Contents/Resources/9/97/970/97xtext1 +backup_restore: backup file doesn't exist: Contents/Resources/9/97/970/97xtext1.moz-backup +FINISH REMOVEFILE Contents/Resources/9/97/971/97xtext0 +backup_restore: backup file doesn't exist: Contents/Resources/9/97/971/97xtext0.moz-backup +FINISH REMOVEFILE Contents/Resources/9/97/971/97xtext1 +backup_restore: backup file doesn't exist: Contents/Resources/9/97/971/97xtext1.moz-backup +FINISH REMOVEFILE Contents/Resources/9/96/96text0 +backup_restore: backup file doesn't exist: Contents/Resources/9/96/96text0.moz-backup +FINISH REMOVEFILE Contents/Resources/9/96/96text1 +backup_restore: backup file doesn't exist: Contents/Resources/9/96/96text1.moz-backup +FINISH REMOVEFILE Contents/Resources/8/87/870/87xtext0 +backup_restore: backup file doesn't exist: Contents/Resources/8/87/870/87xtext0.moz-backup +FINISH REMOVEFILE Contents/Resources/8/87/870/87xtext1 +backup_restore: backup file doesn't exist: Contents/Resources/8/87/870/87xtext1.moz-backup +FINISH REMOVEFILE Contents/Resources/8/87/871/87xtext0 +backup_restore: backup file doesn't exist: Contents/Resources/8/87/871/87xtext0.moz-backup +FINISH REMOVEFILE Contents/Resources/8/87/871/87xtext1 +backup_restore: backup file doesn't exist: Contents/Resources/8/87/871/87xtext1.moz-backup +FINISH REMOVEFILE Contents/Resources/8/86/86text0 +backup_restore: backup file doesn't exist: Contents/Resources/8/86/86text0.moz-backup +FINISH REMOVEFILE Contents/Resources/8/86/86text1 +backup_restore: backup file doesn't exist: Contents/Resources/8/86/86text1.moz-backup +FINISH REMOVEFILE Contents/Resources/7/70/7xtest.exe +backup_restore: backup file doesn't exist: Contents/Resources/7/70/7xtest.exe.moz-backup +FINISH REMOVEFILE Contents/Resources/7/70/7xtext0 +backup_restore: backup file doesn't exist: Contents/Resources/7/70/7xtext0.moz-backup +FINISH REMOVEFILE Contents/Resources/7/70/7xtext1 +backup_restore: backup file doesn't exist: Contents/Resources/7/70/7xtext1.moz-backup +FINISH REMOVEFILE Contents/Resources/7/71/7xtest.exe +backup_restore: backup file doesn't exist: Contents/Resources/7/71/7xtest.exe.moz-backup +FINISH REMOVEFILE Contents/Resources/7/71/7xtext0 +backup_restore: backup file doesn't exist: Contents/Resources/7/71/7xtext0.moz-backup +FINISH REMOVEFILE Contents/Resources/7/71/7xtext1 +backup_restore: backup file doesn't exist: Contents/Resources/7/71/7xtext1.moz-backup +FINISH REMOVEFILE Contents/Resources/5/5text1 +backup_restore: backup file doesn't exist: Contents/Resources/5/5text1.moz-backup +FINISH REMOVEFILE Contents/Resources/5/5text0 +backup_restore: backup file doesn't exist: Contents/Resources/5/5text0.moz-backup +FINISH REMOVEFILE Contents/Resources/5/5test.exe +backup_restore: backup file doesn't exist: Contents/Resources/5/5test.exe.moz-backup +FINISH REMOVEFILE Contents/Resources/5/5text0 +backup_restore: backup file doesn't exist: Contents/Resources/5/5text0.moz-backup +FINISH REMOVEFILE Contents/Resources/5/5text1 +backup_restore: backup file doesn't exist: Contents/Resources/5/5text1.moz-backup +FINISH REMOVEFILE Contents/Resources/4/4text1 +backup_restore: backup file doesn't exist: Contents/Resources/4/4text1.moz-backup +FINISH REMOVEFILE Contents/Resources/4/4text0 +backup_restore: backup file doesn't exist: Contents/Resources/4/4text0.moz-backup +FINISH REMOVEFILE Contents/Resources/3/3text1 +backup_restore: backup file doesn't exist: Contents/Resources/3/3text1.moz-backup +FINISH REMOVEFILE Contents/Resources/3/3text0 +backup_restore: backup file doesn't exist: Contents/Resources/3/3text0.moz-backup +failed: 42 +calling QuitProgressUI diff --git a/toolkit/mozapps/update/tests/data/partial_log_success b/toolkit/mozapps/update/tests/data/partial_log_success index ab1eba3fa4f..0f47e384f34 100644 --- a/toolkit/mozapps/update/tests/data/partial_log_success +++ b/toolkit/mozapps/update/tests/data/partial_log_success @@ -1,273 +1,273 @@ UPDATE TYPE partial +PREPARE ADD searchplugins/searchpluginstext0 +PREPARE PATCH searchplugins/searchpluginspng1.png +PREPARE PATCH searchplugins/searchpluginspng0.png PREPARE ADD precomplete -PREPARE ADD a/b/searchplugins/searchpluginstext0 -PREPARE PATCH a/b/searchplugins/searchpluginspng1.png -PREPARE PATCH a/b/searchplugins/searchpluginspng0.png -PREPARE PATCH a/b/exe0.exe -PREPARE ADD a/b/distribution/extensions/extensions1/extensions1text0 -PREPARE PATCH a/b/distribution/extensions/extensions1/extensions1png1.png -PREPARE PATCH a/b/distribution/extensions/extensions1/extensions1png0.png -PREPARE ADD a/b/distribution/extensions/extensions0/extensions0text0 -PREPARE PATCH a/b/distribution/extensions/extensions0/extensions0png1.png -PREPARE PATCH a/b/distribution/extensions/extensions0/extensions0png0.png -PREPARE PATCH a/b/0/0exe0.exe -PREPARE ADD a/b/0/00/00text0 -PREPARE PATCH a/b/0/00/00png0.png -PREPARE ADD a/b/2/20/20text0 -PREPARE ADD a/b/2/20/20png0.png -PREPARE ADD a/b/0/00/00text2 -PREPARE REMOVEFILE a/b/1/10/10text0 -PREPARE REMOVEFILE a/b/0/00/00text1 -PREPARE REMOVEDIR a/b/9/99/ -PREPARE REMOVEDIR a/b/9/99/ -PREPARE REMOVEDIR a/b/9/98/ -PREPARE REMOVEFILE a/b/9/97/970/97xtext0 -PREPARE REMOVEFILE a/b/9/97/970/97xtext1 -PREPARE REMOVEDIR a/b/9/97/970/ -PREPARE REMOVEFILE a/b/9/97/971/97xtext0 -PREPARE REMOVEFILE a/b/9/97/971/97xtext1 -PREPARE REMOVEDIR a/b/9/97/971/ -PREPARE REMOVEDIR a/b/9/97/ -PREPARE REMOVEFILE a/b/9/96/96text0 -PREPARE REMOVEFILE a/b/9/96/96text1 -PREPARE REMOVEDIR a/b/9/96/ -PREPARE REMOVEDIR a/b/9/95/ -PREPARE REMOVEDIR a/b/9/95/ -PREPARE REMOVEDIR a/b/9/94/ -PREPARE REMOVEDIR a/b/9/94/ -PREPARE REMOVEDIR a/b/9/93/ -PREPARE REMOVEDIR a/b/9/92/ -PREPARE REMOVEDIR a/b/9/91/ -PREPARE REMOVEDIR a/b/9/90/ -PREPARE REMOVEDIR a/b/9/90/ -PREPARE REMOVEDIR a/b/8/89/ -PREPARE REMOVEDIR a/b/8/89/ -PREPARE REMOVEDIR a/b/8/88/ -PREPARE REMOVEFILE a/b/8/87/870/87xtext0 -PREPARE REMOVEFILE a/b/8/87/870/87xtext1 -PREPARE REMOVEDIR a/b/8/87/870/ -PREPARE REMOVEFILE a/b/8/87/871/87xtext0 -PREPARE REMOVEFILE a/b/8/87/871/87xtext1 -PREPARE REMOVEDIR a/b/8/87/871/ -PREPARE REMOVEDIR a/b/8/87/ -PREPARE REMOVEFILE a/b/8/86/86text0 -PREPARE REMOVEFILE a/b/8/86/86text1 -PREPARE REMOVEDIR a/b/8/86/ -PREPARE REMOVEDIR a/b/8/85/ -PREPARE REMOVEDIR a/b/8/85/ -PREPARE REMOVEDIR a/b/8/84/ -PREPARE REMOVEDIR a/b/8/84/ -PREPARE REMOVEDIR a/b/8/83/ -PREPARE REMOVEDIR a/b/8/82/ -PREPARE REMOVEDIR a/b/8/81/ -PREPARE REMOVEDIR a/b/8/80/ -PREPARE REMOVEDIR a/b/8/80/ -PREPARE REMOVEFILE a/b/7/70/7xtest.exe -PREPARE REMOVEFILE a/b/7/70/7xtext0 -PREPARE REMOVEFILE a/b/7/70/7xtext1 -PREPARE REMOVEDIR a/b/7/70/ -PREPARE REMOVEFILE a/b/7/71/7xtest.exe -PREPARE REMOVEFILE a/b/7/71/7xtext0 -PREPARE REMOVEFILE a/b/7/71/7xtext1 -PREPARE REMOVEDIR a/b/7/71/ -PREPARE REMOVEDIR a/b/7/ -PREPARE REMOVEDIR a/b/6/ -PREPARE REMOVEFILE a/b/5/5text1 -PREPARE REMOVEFILE a/b/5/5text0 -PREPARE REMOVEFILE a/b/5/5test.exe -PREPARE REMOVEFILE a/b/5/5text0 -PREPARE REMOVEFILE a/b/5/5text1 -PREPARE REMOVEDIR a/b/5/ -PREPARE REMOVEFILE a/b/4/4text1 -PREPARE REMOVEFILE a/b/4/4text0 -PREPARE REMOVEDIR a/b/4/ -PREPARE REMOVEFILE a/b/3/3text1 -PREPARE REMOVEFILE a/b/3/3text0 -PREPARE REMOVEDIR a/b/1/10/ -PREPARE REMOVEDIR a/b/1/ +PREPARE PATCH exe0.exe +PREPARE ADD distribution/extensions/extensions1/extensions1text0 +PREPARE PATCH distribution/extensions/extensions1/extensions1png1.png +PREPARE PATCH distribution/extensions/extensions1/extensions1png0.png +PREPARE ADD distribution/extensions/extensions0/extensions0text0 +PREPARE PATCH distribution/extensions/extensions0/extensions0png1.png +PREPARE PATCH distribution/extensions/extensions0/extensions0png0.png +PREPARE PATCH 0/0exe0.exe +PREPARE ADD 0/00/00text0 +PREPARE PATCH 0/00/00png0.png +PREPARE ADD 2/20/20text0 +PREPARE ADD 2/20/20png0.png +PREPARE ADD 0/00/00text2 +PREPARE REMOVEFILE 1/10/10text0 +PREPARE REMOVEFILE 0/00/00text1 +PREPARE REMOVEDIR 9/99/ +PREPARE REMOVEDIR 9/99/ +PREPARE REMOVEDIR 9/98/ +PREPARE REMOVEFILE 9/97/970/97xtext0 +PREPARE REMOVEFILE 9/97/970/97xtext1 +PREPARE REMOVEDIR 9/97/970/ +PREPARE REMOVEFILE 9/97/971/97xtext0 +PREPARE REMOVEFILE 9/97/971/97xtext1 +PREPARE REMOVEDIR 9/97/971/ +PREPARE REMOVEDIR 9/97/ +PREPARE REMOVEFILE 9/96/96text0 +PREPARE REMOVEFILE 9/96/96text1 +PREPARE REMOVEDIR 9/96/ +PREPARE REMOVEDIR 9/95/ +PREPARE REMOVEDIR 9/95/ +PREPARE REMOVEDIR 9/94/ +PREPARE REMOVEDIR 9/94/ +PREPARE REMOVEDIR 9/93/ +PREPARE REMOVEDIR 9/92/ +PREPARE REMOVEDIR 9/91/ +PREPARE REMOVEDIR 9/90/ +PREPARE REMOVEDIR 9/90/ +PREPARE REMOVEDIR 8/89/ +PREPARE REMOVEDIR 8/89/ +PREPARE REMOVEDIR 8/88/ +PREPARE REMOVEFILE 8/87/870/87xtext0 +PREPARE REMOVEFILE 8/87/870/87xtext1 +PREPARE REMOVEDIR 8/87/870/ +PREPARE REMOVEFILE 8/87/871/87xtext0 +PREPARE REMOVEFILE 8/87/871/87xtext1 +PREPARE REMOVEDIR 8/87/871/ +PREPARE REMOVEDIR 8/87/ +PREPARE REMOVEFILE 8/86/86text0 +PREPARE REMOVEFILE 8/86/86text1 +PREPARE REMOVEDIR 8/86/ +PREPARE REMOVEDIR 8/85/ +PREPARE REMOVEDIR 8/85/ +PREPARE REMOVEDIR 8/84/ +PREPARE REMOVEDIR 8/84/ +PREPARE REMOVEDIR 8/83/ +PREPARE REMOVEDIR 8/82/ +PREPARE REMOVEDIR 8/81/ +PREPARE REMOVEDIR 8/80/ +PREPARE REMOVEDIR 8/80/ +PREPARE REMOVEFILE 7/70/7xtest.exe +PREPARE REMOVEFILE 7/70/7xtext0 +PREPARE REMOVEFILE 7/70/7xtext1 +PREPARE REMOVEDIR 7/70/ +PREPARE REMOVEFILE 7/71/7xtest.exe +PREPARE REMOVEFILE 7/71/7xtext0 +PREPARE REMOVEFILE 7/71/7xtext1 +PREPARE REMOVEDIR 7/71/ +PREPARE REMOVEDIR 7/ +PREPARE REMOVEDIR 6/ +PREPARE REMOVEFILE 5/5text1 +PREPARE REMOVEFILE 5/5text0 +PREPARE REMOVEFILE 5/5test.exe +PREPARE REMOVEFILE 5/5text0 +PREPARE REMOVEFILE 5/5text1 +PREPARE REMOVEDIR 5/ +PREPARE REMOVEFILE 4/4text1 +PREPARE REMOVEFILE 4/4text0 +PREPARE REMOVEDIR 4/ +PREPARE REMOVEFILE 3/3text1 +PREPARE REMOVEFILE 3/3text0 +PREPARE REMOVEDIR 1/10/ +PREPARE REMOVEDIR 1/ +EXECUTE ADD searchplugins/searchpluginstext0 +EXECUTE PATCH searchplugins/searchpluginspng1.png +EXECUTE PATCH searchplugins/searchpluginspng0.png EXECUTE ADD precomplete -EXECUTE ADD a/b/searchplugins/searchpluginstext0 -EXECUTE PATCH a/b/searchplugins/searchpluginspng1.png -EXECUTE PATCH a/b/searchplugins/searchpluginspng0.png -EXECUTE PATCH a/b/exe0.exe -EXECUTE ADD a/b/distribution/extensions/extensions1/extensions1text0 -EXECUTE PATCH a/b/distribution/extensions/extensions1/extensions1png1.png -EXECUTE PATCH a/b/distribution/extensions/extensions1/extensions1png0.png -EXECUTE ADD a/b/distribution/extensions/extensions0/extensions0text0 -EXECUTE PATCH a/b/distribution/extensions/extensions0/extensions0png1.png -EXECUTE PATCH a/b/distribution/extensions/extensions0/extensions0png0.png -EXECUTE PATCH a/b/0/0exe0.exe -EXECUTE ADD a/b/0/00/00text0 -EXECUTE PATCH a/b/0/00/00png0.png -EXECUTE ADD a/b/2/20/20text0 -EXECUTE ADD a/b/2/20/20png0.png -EXECUTE ADD a/b/0/00/00text2 -EXECUTE REMOVEFILE a/b/1/10/10text0 -EXECUTE REMOVEFILE a/b/0/00/00text1 -EXECUTE REMOVEDIR a/b/9/99/ -EXECUTE REMOVEDIR a/b/9/99/ -EXECUTE REMOVEDIR a/b/9/98/ -EXECUTE REMOVEFILE a/b/9/97/970/97xtext0 -EXECUTE REMOVEFILE a/b/9/97/970/97xtext1 -EXECUTE REMOVEDIR a/b/9/97/970/ -EXECUTE REMOVEFILE a/b/9/97/971/97xtext0 -EXECUTE REMOVEFILE a/b/9/97/971/97xtext1 -EXECUTE REMOVEDIR a/b/9/97/971/ -EXECUTE REMOVEDIR a/b/9/97/ -EXECUTE REMOVEFILE a/b/9/96/96text0 -EXECUTE REMOVEFILE a/b/9/96/96text1 -EXECUTE REMOVEDIR a/b/9/96/ -EXECUTE REMOVEDIR a/b/9/95/ -EXECUTE REMOVEDIR a/b/9/95/ -EXECUTE REMOVEDIR a/b/9/94/ -EXECUTE REMOVEDIR a/b/9/94/ -EXECUTE REMOVEDIR a/b/9/93/ -EXECUTE REMOVEDIR a/b/9/92/ -EXECUTE REMOVEDIR a/b/9/91/ -EXECUTE REMOVEDIR a/b/9/90/ -EXECUTE REMOVEDIR a/b/9/90/ -EXECUTE REMOVEDIR a/b/8/89/ -EXECUTE REMOVEDIR a/b/8/89/ -EXECUTE REMOVEDIR a/b/8/88/ -EXECUTE REMOVEFILE a/b/8/87/870/87xtext0 -EXECUTE REMOVEFILE a/b/8/87/870/87xtext1 -EXECUTE REMOVEDIR a/b/8/87/870/ -EXECUTE REMOVEFILE a/b/8/87/871/87xtext0 -EXECUTE REMOVEFILE a/b/8/87/871/87xtext1 -EXECUTE REMOVEDIR a/b/8/87/871/ -EXECUTE REMOVEDIR a/b/8/87/ -EXECUTE REMOVEFILE a/b/8/86/86text0 -EXECUTE REMOVEFILE a/b/8/86/86text1 -EXECUTE REMOVEDIR a/b/8/86/ -EXECUTE REMOVEDIR a/b/8/85/ -EXECUTE REMOVEDIR a/b/8/85/ -EXECUTE REMOVEDIR a/b/8/84/ -EXECUTE REMOVEDIR a/b/8/84/ -EXECUTE REMOVEDIR a/b/8/83/ -EXECUTE REMOVEDIR a/b/8/82/ -EXECUTE REMOVEDIR a/b/8/81/ -EXECUTE REMOVEDIR a/b/8/80/ -EXECUTE REMOVEDIR a/b/8/80/ -EXECUTE REMOVEFILE a/b/7/70/7xtest.exe -EXECUTE REMOVEFILE a/b/7/70/7xtext0 -EXECUTE REMOVEFILE a/b/7/70/7xtext1 -EXECUTE REMOVEDIR a/b/7/70/ -EXECUTE REMOVEFILE a/b/7/71/7xtest.exe -EXECUTE REMOVEFILE a/b/7/71/7xtext0 -EXECUTE REMOVEFILE a/b/7/71/7xtext1 -EXECUTE REMOVEDIR a/b/7/71/ -EXECUTE REMOVEDIR a/b/7/ -EXECUTE REMOVEDIR a/b/6/ -EXECUTE REMOVEFILE a/b/5/5text1 -EXECUTE REMOVEFILE a/b/5/5text0 -EXECUTE REMOVEFILE a/b/5/5test.exe -EXECUTE REMOVEFILE a/b/5/5text0 +EXECUTE PATCH exe0.exe +EXECUTE ADD distribution/extensions/extensions1/extensions1text0 +EXECUTE PATCH distribution/extensions/extensions1/extensions1png1.png +EXECUTE PATCH distribution/extensions/extensions1/extensions1png0.png +EXECUTE ADD distribution/extensions/extensions0/extensions0text0 +EXECUTE PATCH distribution/extensions/extensions0/extensions0png1.png +EXECUTE PATCH distribution/extensions/extensions0/extensions0png0.png +EXECUTE PATCH 0/0exe0.exe +EXECUTE ADD 0/00/00text0 +EXECUTE PATCH 0/00/00png0.png +EXECUTE ADD 2/20/20text0 +EXECUTE ADD 2/20/20png0.png +EXECUTE ADD 0/00/00text2 +EXECUTE REMOVEFILE 1/10/10text0 +EXECUTE REMOVEFILE 0/00/00text1 +EXECUTE REMOVEDIR 9/99/ +EXECUTE REMOVEDIR 9/99/ +EXECUTE REMOVEDIR 9/98/ +EXECUTE REMOVEFILE 9/97/970/97xtext0 +EXECUTE REMOVEFILE 9/97/970/97xtext1 +EXECUTE REMOVEDIR 9/97/970/ +EXECUTE REMOVEFILE 9/97/971/97xtext0 +EXECUTE REMOVEFILE 9/97/971/97xtext1 +EXECUTE REMOVEDIR 9/97/971/ +EXECUTE REMOVEDIR 9/97/ +EXECUTE REMOVEFILE 9/96/96text0 +EXECUTE REMOVEFILE 9/96/96text1 +EXECUTE REMOVEDIR 9/96/ +EXECUTE REMOVEDIR 9/95/ +EXECUTE REMOVEDIR 9/95/ +EXECUTE REMOVEDIR 9/94/ +EXECUTE REMOVEDIR 9/94/ +EXECUTE REMOVEDIR 9/93/ +EXECUTE REMOVEDIR 9/92/ +EXECUTE REMOVEDIR 9/91/ +EXECUTE REMOVEDIR 9/90/ +EXECUTE REMOVEDIR 9/90/ +EXECUTE REMOVEDIR 8/89/ +EXECUTE REMOVEDIR 8/89/ +EXECUTE REMOVEDIR 8/88/ +EXECUTE REMOVEFILE 8/87/870/87xtext0 +EXECUTE REMOVEFILE 8/87/870/87xtext1 +EXECUTE REMOVEDIR 8/87/870/ +EXECUTE REMOVEFILE 8/87/871/87xtext0 +EXECUTE REMOVEFILE 8/87/871/87xtext1 +EXECUTE REMOVEDIR 8/87/871/ +EXECUTE REMOVEDIR 8/87/ +EXECUTE REMOVEFILE 8/86/86text0 +EXECUTE REMOVEFILE 8/86/86text1 +EXECUTE REMOVEDIR 8/86/ +EXECUTE REMOVEDIR 8/85/ +EXECUTE REMOVEDIR 8/85/ +EXECUTE REMOVEDIR 8/84/ +EXECUTE REMOVEDIR 8/84/ +EXECUTE REMOVEDIR 8/83/ +EXECUTE REMOVEDIR 8/82/ +EXECUTE REMOVEDIR 8/81/ +EXECUTE REMOVEDIR 8/80/ +EXECUTE REMOVEDIR 8/80/ +EXECUTE REMOVEFILE 7/70/7xtest.exe +EXECUTE REMOVEFILE 7/70/7xtext0 +EXECUTE REMOVEFILE 7/70/7xtext1 +EXECUTE REMOVEDIR 7/70/ +EXECUTE REMOVEFILE 7/71/7xtest.exe +EXECUTE REMOVEFILE 7/71/7xtext0 +EXECUTE REMOVEFILE 7/71/7xtext1 +EXECUTE REMOVEDIR 7/71/ +EXECUTE REMOVEDIR 7/ +EXECUTE REMOVEDIR 6/ +EXECUTE REMOVEFILE 5/5text1 +EXECUTE REMOVEFILE 5/5text0 +EXECUTE REMOVEFILE 5/5test.exe +EXECUTE REMOVEFILE 5/5text0 file cannot be removed because it does not exist; skipping -EXECUTE REMOVEFILE a/b/5/5text1 +EXECUTE REMOVEFILE 5/5text1 file cannot be removed because it does not exist; skipping -EXECUTE REMOVEDIR a/b/5/ -EXECUTE REMOVEFILE a/b/4/4text1 -EXECUTE REMOVEFILE a/b/4/4text0 -EXECUTE REMOVEDIR a/b/4/ -EXECUTE REMOVEFILE a/b/3/3text1 -EXECUTE REMOVEFILE a/b/3/3text0 -EXECUTE REMOVEDIR a/b/1/10/ -EXECUTE REMOVEDIR a/b/1/ +EXECUTE REMOVEDIR 5/ +EXECUTE REMOVEFILE 4/4text1 +EXECUTE REMOVEFILE 4/4text0 +EXECUTE REMOVEDIR 4/ +EXECUTE REMOVEFILE 3/3text1 +EXECUTE REMOVEFILE 3/3text0 +EXECUTE REMOVEDIR 1/10/ +EXECUTE REMOVEDIR 1/ +FINISH ADD searchplugins/searchpluginstext0 +FINISH PATCH searchplugins/searchpluginspng1.png +FINISH PATCH searchplugins/searchpluginspng0.png FINISH ADD precomplete -FINISH ADD a/b/searchplugins/searchpluginstext0 -FINISH PATCH a/b/searchplugins/searchpluginspng1.png -FINISH PATCH a/b/searchplugins/searchpluginspng0.png -FINISH PATCH a/b/exe0.exe -FINISH ADD a/b/distribution/extensions/extensions1/extensions1text0 -FINISH PATCH a/b/distribution/extensions/extensions1/extensions1png1.png -FINISH PATCH a/b/distribution/extensions/extensions1/extensions1png0.png -FINISH ADD a/b/distribution/extensions/extensions0/extensions0text0 -FINISH PATCH a/b/distribution/extensions/extensions0/extensions0png1.png -FINISH PATCH a/b/distribution/extensions/extensions0/extensions0png0.png -FINISH PATCH a/b/0/0exe0.exe -FINISH ADD a/b/0/00/00text0 -FINISH PATCH a/b/0/00/00png0.png -FINISH ADD a/b/2/20/20text0 -FINISH ADD a/b/2/20/20png0.png -FINISH ADD a/b/0/00/00text2 -FINISH REMOVEFILE a/b/1/10/10text0 -FINISH REMOVEFILE a/b/0/00/00text1 -FINISH REMOVEDIR a/b/9/99/ -FINISH REMOVEDIR a/b/9/99/ +FINISH PATCH exe0.exe +FINISH ADD distribution/extensions/extensions1/extensions1text0 +FINISH PATCH distribution/extensions/extensions1/extensions1png1.png +FINISH PATCH distribution/extensions/extensions1/extensions1png0.png +FINISH ADD distribution/extensions/extensions0/extensions0text0 +FINISH PATCH distribution/extensions/extensions0/extensions0png1.png +FINISH PATCH distribution/extensions/extensions0/extensions0png0.png +FINISH PATCH 0/0exe0.exe +FINISH ADD 0/00/00text0 +FINISH PATCH 0/00/00png0.png +FINISH ADD 2/20/20text0 +FINISH ADD 2/20/20png0.png +FINISH ADD 0/00/00text2 +FINISH REMOVEFILE 1/10/10text0 +FINISH REMOVEFILE 0/00/00text1 +FINISH REMOVEDIR 9/99/ +FINISH REMOVEDIR 9/99/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/9/98/ -FINISH REMOVEFILE a/b/9/97/970/97xtext0 -FINISH REMOVEFILE a/b/9/97/970/97xtext1 -FINISH REMOVEDIR a/b/9/97/970/ -FINISH REMOVEFILE a/b/9/97/971/97xtext0 -FINISH REMOVEFILE a/b/9/97/971/97xtext1 -FINISH REMOVEDIR a/b/9/97/971/ -FINISH REMOVEDIR a/b/9/97/ -FINISH REMOVEFILE a/b/9/96/96text0 -FINISH REMOVEFILE a/b/9/96/96text1 -FINISH REMOVEDIR a/b/9/96/ -FINISH REMOVEDIR a/b/9/95/ -FINISH REMOVEDIR a/b/9/95/ +FINISH REMOVEDIR 9/98/ +FINISH REMOVEFILE 9/97/970/97xtext0 +FINISH REMOVEFILE 9/97/970/97xtext1 +FINISH REMOVEDIR 9/97/970/ +FINISH REMOVEFILE 9/97/971/97xtext0 +FINISH REMOVEFILE 9/97/971/97xtext1 +FINISH REMOVEDIR 9/97/971/ +FINISH REMOVEDIR 9/97/ +FINISH REMOVEFILE 9/96/96text0 +FINISH REMOVEFILE 9/96/96text1 +FINISH REMOVEDIR 9/96/ +FINISH REMOVEDIR 9/95/ +FINISH REMOVEDIR 9/95/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/9/94/ -FINISH REMOVEDIR a/b/9/94/ +FINISH REMOVEDIR 9/94/ +FINISH REMOVEDIR 9/94/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/9/93/ -FINISH REMOVEDIR a/b/9/92/ -removing directory: a/b/9/92/, rv: 0 -FINISH REMOVEDIR a/b/9/91/ -removing directory: a/b/9/91/, rv: 0 -FINISH REMOVEDIR a/b/9/90/ -FINISH REMOVEDIR a/b/9/90/ +FINISH REMOVEDIR 9/93/ +FINISH REMOVEDIR 9/92/ +removing directory: 9/92/, rv: 0 +FINISH REMOVEDIR 9/91/ +removing directory: 9/91/, rv: 0 +FINISH REMOVEDIR 9/90/ +FINISH REMOVEDIR 9/90/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/8/89/ -FINISH REMOVEDIR a/b/8/89/ +FINISH REMOVEDIR 8/89/ +FINISH REMOVEDIR 8/89/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/8/88/ -FINISH REMOVEFILE a/b/8/87/870/87xtext0 -FINISH REMOVEFILE a/b/8/87/870/87xtext1 -FINISH REMOVEDIR a/b/8/87/870/ -FINISH REMOVEFILE a/b/8/87/871/87xtext0 -FINISH REMOVEFILE a/b/8/87/871/87xtext1 -FINISH REMOVEDIR a/b/8/87/871/ -FINISH REMOVEDIR a/b/8/87/ -FINISH REMOVEFILE a/b/8/86/86text0 -FINISH REMOVEFILE a/b/8/86/86text1 -FINISH REMOVEDIR a/b/8/86/ -FINISH REMOVEDIR a/b/8/85/ -FINISH REMOVEDIR a/b/8/85/ +FINISH REMOVEDIR 8/88/ +FINISH REMOVEFILE 8/87/870/87xtext0 +FINISH REMOVEFILE 8/87/870/87xtext1 +FINISH REMOVEDIR 8/87/870/ +FINISH REMOVEFILE 8/87/871/87xtext0 +FINISH REMOVEFILE 8/87/871/87xtext1 +FINISH REMOVEDIR 8/87/871/ +FINISH REMOVEDIR 8/87/ +FINISH REMOVEFILE 8/86/86text0 +FINISH REMOVEFILE 8/86/86text1 +FINISH REMOVEDIR 8/86/ +FINISH REMOVEDIR 8/85/ +FINISH REMOVEDIR 8/85/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/8/84/ -FINISH REMOVEDIR a/b/8/84/ +FINISH REMOVEDIR 8/84/ +FINISH REMOVEDIR 8/84/ directory no longer exists; skipping -FINISH REMOVEDIR a/b/8/83/ -FINISH REMOVEDIR a/b/8/82/ -removing directory: a/b/8/82/, rv: 0 -FINISH REMOVEDIR a/b/8/81/ -removing directory: a/b/8/81/, rv: 0 -FINISH REMOVEDIR a/b/8/80/ -FINISH REMOVEDIR a/b/8/80/ +FINISH REMOVEDIR 8/83/ +FINISH REMOVEDIR 8/82/ +removing directory: 8/82/, rv: 0 +FINISH REMOVEDIR 8/81/ +removing directory: 8/81/, rv: 0 +FINISH REMOVEDIR 8/80/ +FINISH REMOVEDIR 8/80/ directory no longer exists; skipping -FINISH REMOVEFILE a/b/7/70/7xtest.exe -FINISH REMOVEFILE a/b/7/70/7xtext0 -FINISH REMOVEFILE a/b/7/70/7xtext1 -FINISH REMOVEDIR a/b/7/70/ -FINISH REMOVEFILE a/b/7/71/7xtest.exe -FINISH REMOVEFILE a/b/7/71/7xtext0 -FINISH REMOVEFILE a/b/7/71/7xtext1 -FINISH REMOVEDIR a/b/7/71/ -FINISH REMOVEDIR a/b/7/ -FINISH REMOVEDIR a/b/6/ -FINISH REMOVEFILE a/b/5/5text1 -FINISH REMOVEFILE a/b/5/5text0 -FINISH REMOVEFILE a/b/5/5test.exe -FINISH REMOVEDIR a/b/5/ -FINISH REMOVEFILE a/b/4/4text1 -FINISH REMOVEFILE a/b/4/4text0 -FINISH REMOVEDIR a/b/4/ -FINISH REMOVEFILE a/b/3/3text1 -FINISH REMOVEFILE a/b/3/3text0 -FINISH REMOVEDIR a/b/1/10/ -FINISH REMOVEDIR a/b/1/ +FINISH REMOVEFILE 7/70/7xtest.exe +FINISH REMOVEFILE 7/70/7xtext0 +FINISH REMOVEFILE 7/70/7xtext1 +FINISH REMOVEDIR 7/70/ +FINISH REMOVEFILE 7/71/7xtest.exe +FINISH REMOVEFILE 7/71/7xtext0 +FINISH REMOVEFILE 7/71/7xtext1 +FINISH REMOVEDIR 7/71/ +FINISH REMOVEDIR 7/ +FINISH REMOVEDIR 6/ +FINISH REMOVEFILE 5/5text1 +FINISH REMOVEFILE 5/5text0 +FINISH REMOVEFILE 5/5test.exe +FINISH REMOVEDIR 5/ +FINISH REMOVEFILE 4/4text1 +FINISH REMOVEFILE 4/4text0 +FINISH REMOVEDIR 4/ +FINISH REMOVEFILE 3/3text1 +FINISH REMOVEFILE 3/3text0 +FINISH REMOVEDIR 1/10/ +FINISH REMOVEDIR 1/ succeeded calling QuitProgressUI diff --git a/toolkit/mozapps/update/tests/data/partial_log_success_mac b/toolkit/mozapps/update/tests/data/partial_log_success_mac new file mode 100644 index 00000000000..cb9181107ac --- /dev/null +++ b/toolkit/mozapps/update/tests/data/partial_log_success_mac @@ -0,0 +1,273 @@ +UPDATE TYPE partial +PREPARE ADD Contents/Resources/searchplugins/searchpluginstext0 +PREPARE PATCH Contents/Resources/searchplugins/searchpluginspng1.png +PREPARE PATCH Contents/Resources/searchplugins/searchpluginspng0.png +PREPARE ADD Contents/Resources/precomplete +PREPARE ADD Contents/Resources/distribution/extensions/extensions1/extensions1text0 +PREPARE PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png1.png +PREPARE PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png0.png +PREPARE ADD Contents/Resources/distribution/extensions/extensions0/extensions0text0 +PREPARE PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png1.png +PREPARE PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png0.png +PREPARE PATCH Contents/Resources/0/0exe0.exe +PREPARE ADD Contents/Resources/0/00/00text0 +PREPARE PATCH Contents/Resources/0/00/00png0.png +PREPARE PATCH Contents/MacOS/exe0.exe +PREPARE ADD Contents/Resources/2/20/20text0 +PREPARE ADD Contents/Resources/2/20/20png0.png +PREPARE ADD Contents/Resources/0/00/00text2 +PREPARE REMOVEFILE Contents/Resources/1/10/10text0 +PREPARE REMOVEFILE Contents/Resources/0/00/00text1 +PREPARE REMOVEDIR Contents/Resources/9/99/ +PREPARE REMOVEDIR Contents/Resources/9/99/ +PREPARE REMOVEDIR Contents/Resources/9/98/ +PREPARE REMOVEFILE Contents/Resources/9/97/970/97xtext0 +PREPARE REMOVEFILE Contents/Resources/9/97/970/97xtext1 +PREPARE REMOVEDIR Contents/Resources/9/97/970/ +PREPARE REMOVEFILE Contents/Resources/9/97/971/97xtext0 +PREPARE REMOVEFILE Contents/Resources/9/97/971/97xtext1 +PREPARE REMOVEDIR Contents/Resources/9/97/971/ +PREPARE REMOVEDIR Contents/Resources/9/97/ +PREPARE REMOVEFILE Contents/Resources/9/96/96text0 +PREPARE REMOVEFILE Contents/Resources/9/96/96text1 +PREPARE REMOVEDIR Contents/Resources/9/96/ +PREPARE REMOVEDIR Contents/Resources/9/95/ +PREPARE REMOVEDIR Contents/Resources/9/95/ +PREPARE REMOVEDIR Contents/Resources/9/94/ +PREPARE REMOVEDIR Contents/Resources/9/94/ +PREPARE REMOVEDIR Contents/Resources/9/93/ +PREPARE REMOVEDIR Contents/Resources/9/92/ +PREPARE REMOVEDIR Contents/Resources/9/91/ +PREPARE REMOVEDIR Contents/Resources/9/90/ +PREPARE REMOVEDIR Contents/Resources/9/90/ +PREPARE REMOVEDIR Contents/Resources/8/89/ +PREPARE REMOVEDIR Contents/Resources/8/89/ +PREPARE REMOVEDIR Contents/Resources/8/88/ +PREPARE REMOVEFILE Contents/Resources/8/87/870/87xtext0 +PREPARE REMOVEFILE Contents/Resources/8/87/870/87xtext1 +PREPARE REMOVEDIR Contents/Resources/8/87/870/ +PREPARE REMOVEFILE Contents/Resources/8/87/871/87xtext0 +PREPARE REMOVEFILE Contents/Resources/8/87/871/87xtext1 +PREPARE REMOVEDIR Contents/Resources/8/87/871/ +PREPARE REMOVEDIR Contents/Resources/8/87/ +PREPARE REMOVEFILE Contents/Resources/8/86/86text0 +PREPARE REMOVEFILE Contents/Resources/8/86/86text1 +PREPARE REMOVEDIR Contents/Resources/8/86/ +PREPARE REMOVEDIR Contents/Resources/8/85/ +PREPARE REMOVEDIR Contents/Resources/8/85/ +PREPARE REMOVEDIR Contents/Resources/8/84/ +PREPARE REMOVEDIR Contents/Resources/8/84/ +PREPARE REMOVEDIR Contents/Resources/8/83/ +PREPARE REMOVEDIR Contents/Resources/8/82/ +PREPARE REMOVEDIR Contents/Resources/8/81/ +PREPARE REMOVEDIR Contents/Resources/8/80/ +PREPARE REMOVEDIR Contents/Resources/8/80/ +PREPARE REMOVEFILE Contents/Resources/7/70/7xtest.exe +PREPARE REMOVEFILE Contents/Resources/7/70/7xtext0 +PREPARE REMOVEFILE Contents/Resources/7/70/7xtext1 +PREPARE REMOVEDIR Contents/Resources/7/70/ +PREPARE REMOVEFILE Contents/Resources/7/71/7xtest.exe +PREPARE REMOVEFILE Contents/Resources/7/71/7xtext0 +PREPARE REMOVEFILE Contents/Resources/7/71/7xtext1 +PREPARE REMOVEDIR Contents/Resources/7/71/ +PREPARE REMOVEDIR Contents/Resources/7/ +PREPARE REMOVEDIR Contents/Resources/6/ +PREPARE REMOVEFILE Contents/Resources/5/5text1 +PREPARE REMOVEFILE Contents/Resources/5/5text0 +PREPARE REMOVEFILE Contents/Resources/5/5test.exe +PREPARE REMOVEFILE Contents/Resources/5/5text0 +PREPARE REMOVEFILE Contents/Resources/5/5text1 +PREPARE REMOVEDIR Contents/Resources/5/ +PREPARE REMOVEFILE Contents/Resources/4/4text1 +PREPARE REMOVEFILE Contents/Resources/4/4text0 +PREPARE REMOVEDIR Contents/Resources/4/ +PREPARE REMOVEFILE Contents/Resources/3/3text1 +PREPARE REMOVEFILE Contents/Resources/3/3text0 +PREPARE REMOVEDIR Contents/Resources/1/10/ +PREPARE REMOVEDIR Contents/Resources/1/ +EXECUTE ADD Contents/Resources/searchplugins/searchpluginstext0 +EXECUTE PATCH Contents/Resources/searchplugins/searchpluginspng1.png +EXECUTE PATCH Contents/Resources/searchplugins/searchpluginspng0.png +EXECUTE ADD Contents/Resources/precomplete +EXECUTE ADD Contents/Resources/distribution/extensions/extensions1/extensions1text0 +EXECUTE PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png1.png +EXECUTE PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png0.png +EXECUTE ADD Contents/Resources/distribution/extensions/extensions0/extensions0text0 +EXECUTE PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png1.png +EXECUTE PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png0.png +EXECUTE PATCH Contents/Resources/0/0exe0.exe +EXECUTE ADD Contents/Resources/0/00/00text0 +EXECUTE PATCH Contents/Resources/0/00/00png0.png +EXECUTE PATCH Contents/MacOS/exe0.exe +EXECUTE ADD Contents/Resources/2/20/20text0 +EXECUTE ADD Contents/Resources/2/20/20png0.png +EXECUTE ADD Contents/Resources/0/00/00text2 +EXECUTE REMOVEFILE Contents/Resources/1/10/10text0 +EXECUTE REMOVEFILE Contents/Resources/0/00/00text1 +EXECUTE REMOVEDIR Contents/Resources/9/99/ +EXECUTE REMOVEDIR Contents/Resources/9/99/ +EXECUTE REMOVEDIR Contents/Resources/9/98/ +EXECUTE REMOVEFILE Contents/Resources/9/97/970/97xtext0 +EXECUTE REMOVEFILE Contents/Resources/9/97/970/97xtext1 +EXECUTE REMOVEDIR Contents/Resources/9/97/970/ +EXECUTE REMOVEFILE Contents/Resources/9/97/971/97xtext0 +EXECUTE REMOVEFILE Contents/Resources/9/97/971/97xtext1 +EXECUTE REMOVEDIR Contents/Resources/9/97/971/ +EXECUTE REMOVEDIR Contents/Resources/9/97/ +EXECUTE REMOVEFILE Contents/Resources/9/96/96text0 +EXECUTE REMOVEFILE Contents/Resources/9/96/96text1 +EXECUTE REMOVEDIR Contents/Resources/9/96/ +EXECUTE REMOVEDIR Contents/Resources/9/95/ +EXECUTE REMOVEDIR Contents/Resources/9/95/ +EXECUTE REMOVEDIR Contents/Resources/9/94/ +EXECUTE REMOVEDIR Contents/Resources/9/94/ +EXECUTE REMOVEDIR Contents/Resources/9/93/ +EXECUTE REMOVEDIR Contents/Resources/9/92/ +EXECUTE REMOVEDIR Contents/Resources/9/91/ +EXECUTE REMOVEDIR Contents/Resources/9/90/ +EXECUTE REMOVEDIR Contents/Resources/9/90/ +EXECUTE REMOVEDIR Contents/Resources/8/89/ +EXECUTE REMOVEDIR Contents/Resources/8/89/ +EXECUTE REMOVEDIR Contents/Resources/8/88/ +EXECUTE REMOVEFILE Contents/Resources/8/87/870/87xtext0 +EXECUTE REMOVEFILE Contents/Resources/8/87/870/87xtext1 +EXECUTE REMOVEDIR Contents/Resources/8/87/870/ +EXECUTE REMOVEFILE Contents/Resources/8/87/871/87xtext0 +EXECUTE REMOVEFILE Contents/Resources/8/87/871/87xtext1 +EXECUTE REMOVEDIR Contents/Resources/8/87/871/ +EXECUTE REMOVEDIR Contents/Resources/8/87/ +EXECUTE REMOVEFILE Contents/Resources/8/86/86text0 +EXECUTE REMOVEFILE Contents/Resources/8/86/86text1 +EXECUTE REMOVEDIR Contents/Resources/8/86/ +EXECUTE REMOVEDIR Contents/Resources/8/85/ +EXECUTE REMOVEDIR Contents/Resources/8/85/ +EXECUTE REMOVEDIR Contents/Resources/8/84/ +EXECUTE REMOVEDIR Contents/Resources/8/84/ +EXECUTE REMOVEDIR Contents/Resources/8/83/ +EXECUTE REMOVEDIR Contents/Resources/8/82/ +EXECUTE REMOVEDIR Contents/Resources/8/81/ +EXECUTE REMOVEDIR Contents/Resources/8/80/ +EXECUTE REMOVEDIR Contents/Resources/8/80/ +EXECUTE REMOVEFILE Contents/Resources/7/70/7xtest.exe +EXECUTE REMOVEFILE Contents/Resources/7/70/7xtext0 +EXECUTE REMOVEFILE Contents/Resources/7/70/7xtext1 +EXECUTE REMOVEDIR Contents/Resources/7/70/ +EXECUTE REMOVEFILE Contents/Resources/7/71/7xtest.exe +EXECUTE REMOVEFILE Contents/Resources/7/71/7xtext0 +EXECUTE REMOVEFILE Contents/Resources/7/71/7xtext1 +EXECUTE REMOVEDIR Contents/Resources/7/71/ +EXECUTE REMOVEDIR Contents/Resources/7/ +EXECUTE REMOVEDIR Contents/Resources/6/ +EXECUTE REMOVEFILE Contents/Resources/5/5text1 +EXECUTE REMOVEFILE Contents/Resources/5/5text0 +EXECUTE REMOVEFILE Contents/Resources/5/5test.exe +EXECUTE REMOVEFILE Contents/Resources/5/5text0 +file cannot be removed because it does not exist; skipping +EXECUTE REMOVEFILE Contents/Resources/5/5text1 +file cannot be removed because it does not exist; skipping +EXECUTE REMOVEDIR Contents/Resources/5/ +EXECUTE REMOVEFILE Contents/Resources/4/4text1 +EXECUTE REMOVEFILE Contents/Resources/4/4text0 +EXECUTE REMOVEDIR Contents/Resources/4/ +EXECUTE REMOVEFILE Contents/Resources/3/3text1 +EXECUTE REMOVEFILE Contents/Resources/3/3text0 +EXECUTE REMOVEDIR Contents/Resources/1/10/ +EXECUTE REMOVEDIR Contents/Resources/1/ +FINISH ADD Contents/Resources/searchplugins/searchpluginstext0 +FINISH PATCH Contents/Resources/searchplugins/searchpluginspng1.png +FINISH PATCH Contents/Resources/searchplugins/searchpluginspng0.png +FINISH ADD Contents/Resources/precomplete +FINISH ADD Contents/Resources/distribution/extensions/extensions1/extensions1text0 +FINISH PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png1.png +FINISH PATCH Contents/Resources/distribution/extensions/extensions1/extensions1png0.png +FINISH ADD Contents/Resources/distribution/extensions/extensions0/extensions0text0 +FINISH PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png1.png +FINISH PATCH Contents/Resources/distribution/extensions/extensions0/extensions0png0.png +FINISH PATCH Contents/Resources/0/0exe0.exe +FINISH ADD Contents/Resources/0/00/00text0 +FINISH PATCH Contents/Resources/0/00/00png0.png +FINISH PATCH Contents/MacOS/exe0.exe +FINISH ADD Contents/Resources/2/20/20text0 +FINISH ADD Contents/Resources/2/20/20png0.png +FINISH ADD Contents/Resources/0/00/00text2 +FINISH REMOVEFILE Contents/Resources/1/10/10text0 +FINISH REMOVEFILE Contents/Resources/0/00/00text1 +FINISH REMOVEDIR Contents/Resources/9/99/ +FINISH REMOVEDIR Contents/Resources/9/99/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/9/98/ +FINISH REMOVEFILE Contents/Resources/9/97/970/97xtext0 +FINISH REMOVEFILE Contents/Resources/9/97/970/97xtext1 +FINISH REMOVEDIR Contents/Resources/9/97/970/ +FINISH REMOVEFILE Contents/Resources/9/97/971/97xtext0 +FINISH REMOVEFILE Contents/Resources/9/97/971/97xtext1 +FINISH REMOVEDIR Contents/Resources/9/97/971/ +FINISH REMOVEDIR Contents/Resources/9/97/ +FINISH REMOVEFILE Contents/Resources/9/96/96text0 +FINISH REMOVEFILE Contents/Resources/9/96/96text1 +FINISH REMOVEDIR Contents/Resources/9/96/ +FINISH REMOVEDIR Contents/Resources/9/95/ +FINISH REMOVEDIR Contents/Resources/9/95/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/9/94/ +FINISH REMOVEDIR Contents/Resources/9/94/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/9/93/ +FINISH REMOVEDIR Contents/Resources/9/92/ +removing directory: Contents/Resources/9/92/, rv: 0 +FINISH REMOVEDIR Contents/Resources/9/91/ +removing directory: Contents/Resources/9/91/, rv: 0 +FINISH REMOVEDIR Contents/Resources/9/90/ +FINISH REMOVEDIR Contents/Resources/9/90/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/8/89/ +FINISH REMOVEDIR Contents/Resources/8/89/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/8/88/ +FINISH REMOVEFILE Contents/Resources/8/87/870/87xtext0 +FINISH REMOVEFILE Contents/Resources/8/87/870/87xtext1 +FINISH REMOVEDIR Contents/Resources/8/87/870/ +FINISH REMOVEFILE Contents/Resources/8/87/871/87xtext0 +FINISH REMOVEFILE Contents/Resources/8/87/871/87xtext1 +FINISH REMOVEDIR Contents/Resources/8/87/871/ +FINISH REMOVEDIR Contents/Resources/8/87/ +FINISH REMOVEFILE Contents/Resources/8/86/86text0 +FINISH REMOVEFILE Contents/Resources/8/86/86text1 +FINISH REMOVEDIR Contents/Resources/8/86/ +FINISH REMOVEDIR Contents/Resources/8/85/ +FINISH REMOVEDIR Contents/Resources/8/85/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/8/84/ +FINISH REMOVEDIR Contents/Resources/8/84/ +directory no longer exists; skipping +FINISH REMOVEDIR Contents/Resources/8/83/ +FINISH REMOVEDIR Contents/Resources/8/82/ +removing directory: Contents/Resources/8/82/, rv: 0 +FINISH REMOVEDIR Contents/Resources/8/81/ +removing directory: Contents/Resources/8/81/, rv: 0 +FINISH REMOVEDIR Contents/Resources/8/80/ +FINISH REMOVEDIR Contents/Resources/8/80/ +directory no longer exists; skipping +FINISH REMOVEFILE Contents/Resources/7/70/7xtest.exe +FINISH REMOVEFILE Contents/Resources/7/70/7xtext0 +FINISH REMOVEFILE Contents/Resources/7/70/7xtext1 +FINISH REMOVEDIR Contents/Resources/7/70/ +FINISH REMOVEFILE Contents/Resources/7/71/7xtest.exe +FINISH REMOVEFILE Contents/Resources/7/71/7xtext0 +FINISH REMOVEFILE Contents/Resources/7/71/7xtext1 +FINISH REMOVEDIR Contents/Resources/7/71/ +FINISH REMOVEDIR Contents/Resources/7/ +FINISH REMOVEDIR Contents/Resources/6/ +FINISH REMOVEFILE Contents/Resources/5/5text1 +FINISH REMOVEFILE Contents/Resources/5/5text0 +FINISH REMOVEFILE Contents/Resources/5/5test.exe +FINISH REMOVEDIR Contents/Resources/5/ +FINISH REMOVEFILE Contents/Resources/4/4text1 +FINISH REMOVEFILE Contents/Resources/4/4text0 +FINISH REMOVEDIR Contents/Resources/4/ +FINISH REMOVEFILE Contents/Resources/3/3text1 +FINISH REMOVEFILE Contents/Resources/3/3text0 +FINISH REMOVEDIR Contents/Resources/1/10/ +FINISH REMOVEDIR Contents/Resources/1/ +succeeded +calling QuitProgressUI diff --git a/toolkit/mozapps/update/tests/data/partial_mac.mar b/toolkit/mozapps/update/tests/data/partial_mac.mar new file mode 100644 index 0000000000000000000000000000000000000000..5a702ed4af2686d2c5e1d0553d929a067df0b4df GIT binary patch literal 11172 zcmeG?2UJr@*DnPON-qk5Kxm;UBr#$`4T{ttQgi_oLJ1}cA(8|TRDwv84xt4^YEX1h z0Y#(;2ndTxu@?js1r-&PqSWu9>#zR%>p8!>=lo~?!<;vF-kWmg&YijU&Al_0hBi0= zz@!47f=)h|Kt4wZu=iHga69+VhCL1Cv5brCwsYy_Co8r-<{G31PF1P$3n}R@7gl#= zZc;v!3roaVJE^L=kp%Q4qaj^Bd2LxwlFKz^^(=Jk*W%wTx_S{`svd7&Nwu^N0LX@dj=(bU% z+fvKNTH5VQQ{JGU7mn|oiL^c!({R^u$)(%?mG}Yo50|5w41<=&XgQ)g(p%k#RNIW3 zmyVrjzrMe@pjCVOfy3OBsetRF$(`DZkhC!62Kk%`ul(q|@z$+1n7Yn2orA}Yk4d@7 zR3Pvdq{m_$lypBV75I}E)Vb83;l`v=JUy4OC`=Zh4QBnbVWT5;HO|lhW9y(^q__$Y zq<3=w@vX4g9t1QE*wEiiCPJ-!iPx$HfiD5O4PSIDt7Cq~GM zqsdfJ;fvUnr(~)fv=3INKbIGIzW{+fZX}ma2oBWO9dH#oh*6F=uS(grt)p0uBqiH$ z5f|p?YhDy8ZLOJ`<9O$MdhYqt*JZjjufE{MX(To5A1gE`D0*v~sJRBN&tr^SmP;!s zDJea>p{)01Z^)BOi#^G2^I7@(C#*#E*@B789akEED`M!JVz8XF&ia@=imE)e?!?=| z;t&|cUV*P(f#DY*x%=+xOll(g(2V%ury@h*Gnea^sP$fdMeMLU-_}0OY zj|#}(MHedux{vIeT=PuTE2Eqq(C5h_B)M7+oUh72=`UZO098I8!{o^et73WjOB2rF zE_CmvPxLYi!%Abix>D_Nu`7Ldb@k^u*0);HN-gzWN|&XfjyC%0D6hR2=TtQ<*!vK> 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 K{mm%xz<&U^(|s2J literal 0 HcmV?d00001 diff --git a/toolkit/mozapps/update/tests/data/partial_precomplete b/toolkit/mozapps/update/tests/data/partial_precomplete index def7413fcf4..3ec201463a6 100644 --- a/toolkit/mozapps/update/tests/data/partial_precomplete +++ b/toolkit/mozapps/update/tests/data/partial_precomplete @@ -1,20 +1,19 @@ -remove "a/b/searchplugins/searchpluginstext0" -remove "a/b/searchplugins/searchpluginspng1.png" -remove "a/b/searchplugins/searchpluginspng0.png" -remove "a/b/removed-files" -remove "a/b/exe0.exe" -remove "a/b/2/20/20text0" -remove "a/b/2/20/20png0.png" -remove "a/b/0/0exe0.exe" -remove "a/b/0/00/00text2" -remove "a/b/0/00/00text0" -remove "a/b/0/00/00png0.png" -rmdir "a/b/searchplugins/" -rmdir "a/b/defaults/pref/" -rmdir "a/b/defaults/" -rmdir "a/b/2/20/" -rmdir "a/b/2/" -rmdir "a/b/0/00/" -rmdir "a/b/0/" -rmdir "a/b/" -rmdir "a/" +remove "searchplugins/searchpluginstext0" +remove "searchplugins/searchpluginspng1.png" +remove "searchplugins/searchpluginspng0.png" +remove "removed-files" +remove "precomplete" +remove "exe0.exe" +remove "2/20/20text0" +remove "2/20/20png0.png" +remove "0/0exe0.exe" +remove "0/00/00text2" +remove "0/00/00text0" +remove "0/00/00png0.png" +rmdir "searchplugins/" +rmdir "defaults/pref/" +rmdir "defaults/" +rmdir "2/20/" +rmdir "2/" +rmdir "0/00/" +rmdir "0/" diff --git a/toolkit/mozapps/update/tests/data/partial_precomplete_mac b/toolkit/mozapps/update/tests/data/partial_precomplete_mac new file mode 100644 index 00000000000..c65b6e4e38d --- /dev/null +++ b/toolkit/mozapps/update/tests/data/partial_precomplete_mac @@ -0,0 +1,22 @@ +remove "Contents/Resources/searchplugins/searchpluginstext0" +remove "Contents/Resources/searchplugins/searchpluginspng1.png" +remove "Contents/Resources/searchplugins/searchpluginspng0.png" +remove "Contents/Resources/removed-files" +remove "Contents/Resources/precomplete" +remove "Contents/Resources/2/20/20text0" +remove "Contents/Resources/2/20/20png0.png" +remove "Contents/Resources/0/0exe0.exe" +remove "Contents/Resources/0/00/00text2" +remove "Contents/Resources/0/00/00text0" +remove "Contents/Resources/0/00/00png0.png" +remove "Contents/MacOS/exe0.exe" +rmdir "Contents/Resources/searchplugins/" +rmdir "Contents/Resources/defaults/pref/" +rmdir "Contents/Resources/defaults/" +rmdir "Contents/Resources/2/20/" +rmdir "Contents/Resources/2/" +rmdir "Contents/Resources/0/00/" +rmdir "Contents/Resources/0/" +rmdir "Contents/Resources/" +rmdir "Contents/MacOS/" +rmdir "Contents/" diff --git a/toolkit/mozapps/update/tests/data/partial_removed-files_mac b/toolkit/mozapps/update/tests/data/partial_removed-files_mac new file mode 100644 index 00000000000..955dc5b340b --- /dev/null +++ b/toolkit/mozapps/update/tests/data/partial_removed-files_mac @@ -0,0 +1,41 @@ +Contents/Resources/text0 +Contents/Resources/text1 +Contents/Resources/3/3text0 +Contents/Resources/3/3text1 +Contents/Resources/4/exe0.exe +Contents/Resources/4/4text0 +Contents/Resources/4/4text1 +Contents/Resources/4/ +Contents/Resources/5/5text0 +Contents/Resources/5/5text1 +Contents/Resources/5/* +Contents/Resources/6/ +Contents/Resources/7/* +Contents/Resources/8/80/ +Contents/Resources/8/81/ +Contents/Resources/8/82/ +Contents/Resources/8/83/ +Contents/Resources/8/84/ +Contents/Resources/8/85/* +Contents/Resources/8/86/* +Contents/Resources/8/87/* +Contents/Resources/8/88/* +Contents/Resources/8/89/* +Contents/Resources/8/80/ +Contents/Resources/8/84/* +Contents/Resources/8/85/* +Contents/Resources/8/89/ +Contents/Resources/9/90/ +Contents/Resources/9/91/ +Contents/Resources/9/92/ +Contents/Resources/9/93/ +Contents/Resources/9/94/ +Contents/Resources/9/95/* +Contents/Resources/9/96/* +Contents/Resources/9/97/* +Contents/Resources/9/98/* +Contents/Resources/9/99/* +Contents/Resources/9/90/ +Contents/Resources/9/94/* +Contents/Resources/9/95/* +Contents/Resources/9/99/ diff --git a/toolkit/mozapps/update/tests/shared.js b/toolkit/mozapps/update/tests/shared.js index 889bbc761de..3c06dd7f767 100644 --- a/toolkit/mozapps/update/tests/shared.js +++ b/toolkit/mozapps/update/tests/shared.js @@ -582,22 +582,6 @@ function getGREDir() { return Services.dirsvc.get(NS_GRE_DIR, AUS_Ci.nsIFile); } -/** - * Get the "updated" directory inside the directory where we apply the - * staged updates. - * @return The active updates directory inside the updated directory, as a - * nsIFile object. - */ -function getUpdatedDir() { - let dir = getAppBaseDir(); -#ifdef XP_MACOSX - dir = dir.parent.parent; // the bundle directory -#endif - dir.append(DIR_UPDATED); - logTestInfo("updated directory path: " + dir.path); - return dir; -} - /** * Logs TEST-INFO messages. * diff --git a/toolkit/mozapps/update/tests/unit_aus_update/downloadAndHashCheckMar.js b/toolkit/mozapps/update/tests/unit_aus_update/downloadAndHashCheckMar.js index 615baa39ba7..f42a6e30cec 100644 --- a/toolkit/mozapps/update/tests/unit_aus_update/downloadAndHashCheckMar.js +++ b/toolkit/mozapps/update/tests/unit_aus_update/downloadAndHashCheckMar.js @@ -7,9 +7,6 @@ var gNextRunFunc; var gExpectedStatusResult; function run_test() { - // This test needs access to omni.ja to read the update.locale file so don't - // use a custom directory for the application directory. - gUseTestAppDir = false; setupTestCommon(); logTestInfo("testing mar download and mar hash verification"); diff --git a/toolkit/mozapps/update/tests/unit_aus_update/head_update.js b/toolkit/mozapps/update/tests/unit_aus_update/head_update.js index f68292310ac..5c05d24bab8 100644 --- a/toolkit/mozapps/update/tests/unit_aus_update/head_update.js +++ b/toolkit/mozapps/update/tests/unit_aus_update/head_update.js @@ -6,10 +6,7 @@ const INSTALL_LOCALE = "@AB_CD@"; const MOZ_APP_NAME = "@MOZ_APP_NAME@"; const BIN_SUFFIX = "@BIN_SUFFIX@"; -#ifdef XP_WIN // MOZ_APP_VENDOR is optional. -// On Windows, if MOZ_APP_VENDOR is not defined the updates directory will be -// located under %LOCALAPPDATA%\@MOZ_APP_BASENAME@\updates\TaskBarID #ifdef MOZ_APP_VENDOR const MOZ_APP_VENDOR = "@MOZ_APP_VENDOR@"; #else @@ -18,7 +15,6 @@ const MOZ_APP_VENDOR = ""; // MOZ_APP_BASENAME is not optional for tests. const MOZ_APP_BASENAME = "@MOZ_APP_BASENAME@"; -#endif // XP_WIN const APP_INFO_NAME = "XPCShell"; const APP_INFO_VENDOR = "Mozilla"; @@ -64,6 +60,32 @@ const IS_TOOLKIT_GONK = true; const IS_TOOLKIT_GONK = false; #endif +#ifdef XP_MACOSX +const DIR_MACOS = "Contents/MacOS/"; +const DIR_RESOURCES = "Contents/Resources/"; +const FILE_COMPLETE_MAR = "complete_mac.mar"; +const FILE_PARTIAL_MAR = "partial_mac.mar"; +const LOG_COMPLETE_SUCCESS = "complete_log_success_mac"; +const LOG_PARTIAL_SUCCESS = "partial_log_success_mac"; +const LOG_PARTIAL_FAILURE = "partial_log_failure_mac"; +const FILE_COMPLETE_PRECOMPLETE = "complete_precomplete_mac"; +const FILE_PARTIAL_PRECOMPLETE = "partial_precomplete_mac"; +const FILE_COMPLETE_REMOVEDFILES = "complete_removed-files_mac"; +const FILE_PARTIAL_REMOVEDFILES = "partial_removed-files_mac"; +#else +const DIR_MACOS = ""; +const DIR_RESOURCES = ""; +const FILE_COMPLETE_MAR = "complete.mar"; +const FILE_PARTIAL_MAR = "partial.mar"; +const LOG_COMPLETE_SUCCESS = "complete_log_success"; +const LOG_PARTIAL_SUCCESS = "partial_log_success"; +const LOG_PARTIAL_FAILURE = "partial_log_failure"; +const FILE_COMPLETE_PRECOMPLETE = "complete_precomplete"; +const FILE_PARTIAL_PRECOMPLETE = "partial_precomplete"; +const FILE_COMPLETE_REMOVEDFILES = "complete_removed-files"; +const FILE_PARTIAL_REMOVEDFILES = "partial_removed-files"; +#endif + const USE_EXECV = IS_UNIX && !IS_MACOSX; #ifdef MOZ_VERIFY_MAR_SIGNATURE @@ -76,20 +98,14 @@ const URL_HOST = "http://localhost"; const FILE_APP_BIN = MOZ_APP_NAME + APP_BIN_SUFFIX; const FILE_COMPLETE_EXE = "complete.exe"; -const FILE_COMPLETE_MAR = "complete.mar"; const FILE_HELPER_BIN = "TestAUSHelper" + BIN_SUFFIX; const FILE_MAINTENANCE_SERVICE_BIN = "maintenanceservice.exe"; const FILE_MAINTENANCE_SERVICE_INSTALLER_BIN = "maintenanceservice_installer.exe"; const FILE_OLD_VERSION_MAR = "old_version.mar"; const FILE_PARTIAL_EXE = "partial.exe"; -const FILE_PARTIAL_MAR = "partial.mar"; const FILE_UPDATER_BIN = "updater" + BIN_SUFFIX; const FILE_WRONG_CHANNEL_MAR = "wrong_product_channel.mar"; -const LOG_COMPLETE_SUCCESS = "complete_log_success"; -const LOG_PARTIAL_SUCCESS = "partial_log_success"; -const LOG_PARTIAL_FAILURE = "partial_log_failure"; - const LOG_SWITCH_SUCCESS = "rename_file: proceeding to rename the directory\n" + "rename_file: proceeding to rename the directory\n" + "Now, remove the tmpDir\n" + @@ -209,9 +225,9 @@ var gTestFilesCommon = [ { description : "Should never change", fileName : FILE_UPDATE_SETTINGS_INI, - relPathDir : "a/b/", - originalContents : "ShouldNotBeReplaced\n", - compareContents : "ShouldNotBeReplaced\n", + relPathDir : DIR_RESOURCES, + originalContents : UPDATE_SETTINGS_CONTENTS, + compareContents : UPDATE_SETTINGS_CONTENTS, originalFile : null, compareFile : null, originalPerms : 0o767, @@ -219,7 +235,7 @@ var gTestFilesCommon = [ }, { description : "Should never change", fileName : "channel-prefs.js", - relPathDir : "a/b/defaults/pref/", + relPathDir : DIR_RESOURCES + "defaults/pref/", originalContents : "ShouldNotBeReplaced\n", compareContents : "ShouldNotBeReplaced\n", originalFile : null, @@ -234,17 +250,17 @@ var gTestFilesCompleteSuccess = [ { description : "Added by update.manifest (add)", fileName : "precomplete", - relPathDir : "", + relPathDir : DIR_RESOURCES, originalContents : null, compareContents : null, - originalFile : "partial_precomplete", - compareFile : "complete_precomplete", + originalFile : FILE_PARTIAL_PRECOMPLETE, + compareFile : FILE_COMPLETE_PRECOMPLETE, originalPerms : 0o666, comparePerms : 0o644 }, { description : "Added by update.manifest (add)", fileName : "searchpluginstext0", - relPathDir : "a/b/searchplugins/", + relPathDir : DIR_RESOURCES + "searchplugins/", originalContents : "ToBeReplacedWithFromComplete\n", compareContents : "FromComplete\n", originalFile : null, @@ -254,7 +270,7 @@ var gTestFilesCompleteSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "searchpluginspng1.png", - relPathDir : "a/b/searchplugins/", + relPathDir : DIR_RESOURCES + "searchplugins/", originalContents : null, compareContents : null, originalFile : null, @@ -264,7 +280,7 @@ var gTestFilesCompleteSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "searchpluginspng0.png", - relPathDir : "a/b/searchplugins/", + relPathDir : DIR_RESOURCES + "searchplugins/", originalContents : null, compareContents : null, originalFile : "partial.png", @@ -274,18 +290,18 @@ var gTestFilesCompleteSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "removed-files", - relPathDir : "a/b/", + relPathDir : DIR_RESOURCES, originalContents : null, compareContents : null, - originalFile : "partial_removed-files", - compareFile : "complete_removed-files", + originalFile : FILE_PARTIAL_REMOVEDFILES, + compareFile : FILE_COMPLETE_REMOVEDFILES, originalPerms : 0o666, comparePerms : 0o644 }, { description : "Added by update.manifest if the parent directory " + "exists (add-if)", fileName : "extensions1text0", - relPathDir : "a/b/distribution/extensions/extensions1/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions1/", originalContents : null, compareContents : "FromComplete\n", originalFile : null, @@ -296,7 +312,7 @@ var gTestFilesCompleteSuccess = [ description : "Added by update.manifest if the parent directory " + "exists (add-if)", fileName : "extensions1png1.png", - relPathDir : "a/b/distribution/extensions/extensions1/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions1/", originalContents : null, compareContents : null, originalFile : "partial.png", @@ -307,7 +323,7 @@ var gTestFilesCompleteSuccess = [ description : "Added by update.manifest if the parent directory " + "exists (add-if)", fileName : "extensions1png0.png", - relPathDir : "a/b/distribution/extensions/extensions1/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions1/", originalContents : null, compareContents : null, originalFile : null, @@ -318,7 +334,7 @@ var gTestFilesCompleteSuccess = [ description : "Added by update.manifest if the parent directory " + "exists (add-if)", fileName : "extensions0text0", - relPathDir : "a/b/distribution/extensions/extensions0/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions0/", originalContents : "ToBeReplacedWithFromComplete\n", compareContents : "FromComplete\n", originalFile : null, @@ -329,7 +345,7 @@ var gTestFilesCompleteSuccess = [ description : "Added by update.manifest if the parent directory " + "exists (add-if)", fileName : "extensions0png1.png", - relPathDir : "a/b/distribution/extensions/extensions0/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions0/", originalContents : null, compareContents : null, originalFile : null, @@ -340,7 +356,7 @@ var gTestFilesCompleteSuccess = [ description : "Added by update.manifest if the parent directory " + "exists (add-if)", fileName : "extensions0png0.png", - relPathDir : "a/b/distribution/extensions/extensions0/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions0/", originalContents : null, compareContents : null, originalFile : null, @@ -350,7 +366,7 @@ var gTestFilesCompleteSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "exe0.exe", - relPathDir : "a/b/", + relPathDir : DIR_MACOS, originalContents : null, compareContents : null, originalFile : FILE_HELPER_BIN, @@ -360,7 +376,7 @@ var gTestFilesCompleteSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "10text0", - relPathDir : "a/b/1/10/", + relPathDir : DIR_RESOURCES + "1/10/", originalContents : "ToBeReplacedWithFromComplete\n", compareContents : "FromComplete\n", originalFile : null, @@ -370,7 +386,7 @@ var gTestFilesCompleteSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "0exe0.exe", - relPathDir : "a/b/0/", + relPathDir : DIR_RESOURCES + "0/", originalContents : null, compareContents : null, originalFile : FILE_HELPER_BIN, @@ -380,7 +396,7 @@ var gTestFilesCompleteSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "00text1", - relPathDir : "a/b/0/00/", + relPathDir : DIR_RESOURCES + "0/00/", originalContents : "ToBeReplacedWithFromComplete\n", compareContents : "FromComplete\n", originalFile : null, @@ -390,7 +406,7 @@ var gTestFilesCompleteSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "00text0", - relPathDir : "a/b/0/00/", + relPathDir : DIR_RESOURCES + "0/00/", originalContents : "ToBeReplacedWithFromComplete\n", compareContents : "FromComplete\n", originalFile : null, @@ -400,7 +416,7 @@ var gTestFilesCompleteSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "00png0.png", - relPathDir : "a/b/0/00/", + relPathDir : DIR_RESOURCES + "0/00/", originalContents : null, compareContents : null, originalFile : null, @@ -410,7 +426,7 @@ var gTestFilesCompleteSuccess = [ }, { description : "Removed by precomplete (remove)", fileName : "20text0", - relPathDir : "a/b/2/20/", + relPathDir : DIR_RESOURCES + "2/20/", originalContents : "ToBeDeleted\n", compareContents : null, originalFile : null, @@ -420,7 +436,7 @@ var gTestFilesCompleteSuccess = [ }, { description : "Removed by precomplete (remove)", fileName : "20png0.png", - relPathDir : "a/b/2/20/", + relPathDir : DIR_RESOURCES + "2/20/", originalContents : "ToBeDeleted\n", compareContents : null, originalFile : null, @@ -438,17 +454,17 @@ var gTestFilesPartialSuccess = [ { description : "Added by update.manifest (add)", fileName : "precomplete", - relPathDir : "", + relPathDir : DIR_RESOURCES, originalContents : null, compareContents : null, - originalFile : "complete_precomplete", - compareFile : "partial_precomplete", + originalFile : FILE_COMPLETE_PRECOMPLETE, + compareFile : FILE_PARTIAL_PRECOMPLETE, originalPerms : 0o666, comparePerms : 0o644 }, { description : "Added by update.manifest (add)", fileName : "searchpluginstext0", - relPathDir : "a/b/searchplugins/", + relPathDir : DIR_RESOURCES + "searchplugins/", originalContents : "ToBeReplacedWithFromPartial\n", compareContents : "FromPartial\n", originalFile : null, @@ -459,7 +475,7 @@ var gTestFilesPartialSuccess = [ description : "Patched by update.manifest if the file exists " + "(patch-if)", fileName : "searchpluginspng1.png", - relPathDir : "a/b/searchplugins/", + relPathDir : DIR_RESOURCES + "searchplugins/", originalContents : null, compareContents : null, originalFile : "complete.png", @@ -470,7 +486,7 @@ var gTestFilesPartialSuccess = [ description : "Patched by update.manifest if the file exists " + "(patch-if)", fileName : "searchpluginspng0.png", - relPathDir : "a/b/searchplugins/", + relPathDir : DIR_RESOURCES + "searchplugins/", originalContents : null, compareContents : null, originalFile : "complete.png", @@ -481,7 +497,7 @@ var gTestFilesPartialSuccess = [ description : "Added by update.manifest if the parent directory " + "exists (add-if)", fileName : "extensions1text0", - relPathDir : "a/b/distribution/extensions/extensions1/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions1/", originalContents : null, compareContents : "FromPartial\n", originalFile : null, @@ -492,7 +508,7 @@ var gTestFilesPartialSuccess = [ description : "Patched by update.manifest if the parent directory " + "exists (patch-if)", fileName : "extensions1png1.png", - relPathDir : "a/b/distribution/extensions/extensions1/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions1/", originalContents : null, compareContents : null, originalFile : "complete.png", @@ -503,7 +519,7 @@ var gTestFilesPartialSuccess = [ description : "Patched by update.manifest if the parent directory " + "exists (patch-if)", fileName : "extensions1png0.png", - relPathDir : "a/b/distribution/extensions/extensions1/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions1/", originalContents : null, compareContents : null, originalFile : "complete.png", @@ -514,7 +530,7 @@ var gTestFilesPartialSuccess = [ description : "Added by update.manifest if the parent directory " + "exists (add-if)", fileName : "extensions0text0", - relPathDir : "a/b/distribution/extensions/extensions0/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions0/", originalContents : "ToBeReplacedWithFromPartial\n", compareContents : "FromPartial\n", originalFile : null, @@ -525,7 +541,7 @@ var gTestFilesPartialSuccess = [ description : "Patched by update.manifest if the parent directory " + "exists (patch-if)", fileName : "extensions0png1.png", - relPathDir : "a/b/distribution/extensions/extensions0/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions0/", originalContents : null, compareContents : null, originalFile : "complete.png", @@ -536,7 +552,7 @@ var gTestFilesPartialSuccess = [ description : "Patched by update.manifest if the parent directory " + "exists (patch-if)", fileName : "extensions0png0.png", - relPathDir : "a/b/distribution/extensions/extensions0/", + relPathDir : DIR_RESOURCES + "distribution/extensions/extensions0/", originalContents : null, compareContents : null, originalFile : "complete.png", @@ -546,7 +562,7 @@ var gTestFilesPartialSuccess = [ }, { description : "Patched by update.manifest (patch)", fileName : "exe0.exe", - relPathDir : "a/b/", + relPathDir : DIR_MACOS, originalContents : null, compareContents : null, originalFile : FILE_COMPLETE_EXE, @@ -556,7 +572,7 @@ var gTestFilesPartialSuccess = [ }, { description : "Patched by update.manifest (patch)", fileName : "0exe0.exe", - relPathDir : "a/b/0/", + relPathDir : DIR_RESOURCES + "0/", originalContents : null, compareContents : null, originalFile : FILE_COMPLETE_EXE, @@ -566,7 +582,7 @@ var gTestFilesPartialSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "00text0", - relPathDir : "a/b/0/00/", + relPathDir : DIR_RESOURCES + "0/00/", originalContents : "ToBeReplacedWithFromPartial\n", compareContents : "FromPartial\n", originalFile : null, @@ -576,7 +592,7 @@ var gTestFilesPartialSuccess = [ }, { description : "Patched by update.manifest (patch)", fileName : "00png0.png", - relPathDir : "a/b/0/00/", + relPathDir : DIR_RESOURCES + "0/00/", originalContents : null, compareContents : null, originalFile : "complete.png", @@ -586,7 +602,7 @@ var gTestFilesPartialSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "20text0", - relPathDir : "a/b/2/20/", + relPathDir : DIR_RESOURCES + "2/20/", originalContents : null, compareContents : "FromPartial\n", originalFile : null, @@ -596,7 +612,7 @@ var gTestFilesPartialSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "20png0.png", - relPathDir : "a/b/2/20/", + relPathDir : DIR_RESOURCES + "2/20/", originalContents : null, compareContents : null, originalFile : null, @@ -606,7 +622,7 @@ var gTestFilesPartialSuccess = [ }, { description : "Added by update.manifest (add)", fileName : "00text2", - relPathDir : "a/b/0/00/", + relPathDir : DIR_RESOURCES + "0/00/", originalContents : null, compareContents : "FromPartial\n", originalFile : null, @@ -616,7 +632,7 @@ var gTestFilesPartialSuccess = [ }, { description : "Removed by update.manifest (remove)", fileName : "10text0", - relPathDir : "a/b/1/10/", + relPathDir : DIR_RESOURCES + "1/10/", originalContents : "ToBeDeleted\n", compareContents : null, originalFile : null, @@ -626,7 +642,7 @@ var gTestFilesPartialSuccess = [ }, { description : "Removed by update.manifest (remove)", fileName : "00text1", - relPathDir : "a/b/0/00/", + relPathDir : DIR_RESOURCES + "0/00/", originalContents : "ToBeDeleted\n", compareContents : null, originalFile : null, @@ -695,101 +711,101 @@ gTestFilesPartialSuccess = gTestFilesPartialSuccess.concat(gTestFilesCommon); */ var gTestDirsCommon = [ { - relPathDir : "a/b/3/", + relPathDir : DIR_RESOURCES + "3/", dirRemoved : false, files : ["3text0", "3text1"], filesRemoved : true }, { - relPathDir : "a/b/4/", + relPathDir : DIR_RESOURCES + "4/", dirRemoved : true, files : ["4text0", "4text1"], filesRemoved : true }, { - relPathDir : "a/b/5/", + relPathDir : DIR_RESOURCES + "5/", dirRemoved : true, files : ["5test.exe", "5text0", "5text1"], filesRemoved : true }, { - relPathDir : "a/b/6/", + relPathDir : DIR_RESOURCES + "6/", dirRemoved : true }, { - relPathDir : "a/b/7/", + relPathDir : DIR_RESOURCES + "7/", dirRemoved : true, files : ["7text0", "7text1"], subDirs : ["70/", "71/"], subDirFiles : ["7xtest.exe", "7xtext0", "7xtext1"] }, { - relPathDir : "a/b/8/", + relPathDir : DIR_RESOURCES + "8/", dirRemoved : false }, { - relPathDir : "a/b/8/80/", + relPathDir : DIR_RESOURCES + "8/80/", dirRemoved : true }, { - relPathDir : "a/b/8/81/", + relPathDir : DIR_RESOURCES + "8/81/", dirRemoved : false, files : ["81text0", "81text1"] }, { - relPathDir : "a/b/8/82/", + relPathDir : DIR_RESOURCES + "8/82/", dirRemoved : false, subDirs : ["820/", "821/"] }, { - relPathDir : "a/b/8/83/", + relPathDir : DIR_RESOURCES + "8/83/", dirRemoved : true }, { - relPathDir : "a/b/8/84/", + relPathDir : DIR_RESOURCES + "8/84/", dirRemoved : true }, { - relPathDir : "a/b/8/85/", + relPathDir : DIR_RESOURCES + "8/85/", dirRemoved : true }, { - relPathDir : "a/b/8/86/", + relPathDir : DIR_RESOURCES + "8/86/", dirRemoved : true, files : ["86text0", "86text1"] }, { - relPathDir : "a/b/8/87/", + relPathDir : DIR_RESOURCES + "8/87/", dirRemoved : true, subDirs : ["870/", "871/"], subDirFiles : ["87xtext0", "87xtext1"] }, { - relPathDir : "a/b/8/88/", + relPathDir : DIR_RESOURCES + "8/88/", dirRemoved : true }, { - relPathDir : "a/b/8/89/", + relPathDir : DIR_RESOURCES + "8/89/", dirRemoved : true }, { - relPathDir : "a/b/9/90/", + relPathDir : DIR_RESOURCES + "9/90/", dirRemoved : true }, { - relPathDir : "a/b/9/91/", + relPathDir : DIR_RESOURCES + "9/91/", dirRemoved : false, files : ["91text0", "91text1"] }, { - relPathDir : "a/b/9/92/", + relPathDir : DIR_RESOURCES + "9/92/", dirRemoved : false, subDirs : ["920/", "921/"] }, { - relPathDir : "a/b/9/93/", + relPathDir : DIR_RESOURCES + "9/93/", dirRemoved : true }, { - relPathDir : "a/b/9/94/", + relPathDir : DIR_RESOURCES + "9/94/", dirRemoved : true }, { - relPathDir : "a/b/9/95/", + relPathDir : DIR_RESOURCES + "9/95/", dirRemoved : true }, { - relPathDir : "a/b/9/96/", + relPathDir : DIR_RESOURCES + "9/96/", dirRemoved : true, files : ["96text0", "96text1"] }, { - relPathDir : "a/b/9/97/", + relPathDir : DIR_RESOURCES + "9/97/", dirRemoved : true, subDirs : ["970/", "971/"], subDirFiles : ["97xtext0", "97xtext1"] }, { - relPathDir : "a/b/9/98/", + relPathDir : DIR_RESOURCES + "9/98/", dirRemoved : true }, { - relPathDir : "a/b/9/99/", + relPathDir : DIR_RESOURCES + "9/99/", dirRemoved : true }]; @@ -798,11 +814,11 @@ var gTestDirsCommon = [ var gTestDirsCompleteSuccess = [ { description : "Removed by precomplete (rmdir)", - relPathDir : "a/b/2/20/", + relPathDir : DIR_RESOURCES + "2/20/", dirRemoved : true }, { description : "Removed by precomplete (rmdir)", - relPathDir : "a/b/2/", + relPathDir : DIR_RESOURCES + "2/", dirRemoved : true }]; @@ -814,28 +830,17 @@ gTestDirsCompleteSuccess = gTestDirsCommon.concat(gTestDirsCompleteSuccess); var gTestDirsPartialSuccess = [ { description : "Removed by update.manifest (rmdir)", - relPathDir : "a/b/1/10/", + relPathDir : DIR_RESOURCES + "1/10/", dirRemoved : true }, { description : "Removed by update.manifest (rmdir)", - relPathDir : "a/b/1/", + relPathDir : DIR_RESOURCES + "1/", dirRemoved : true }]; // Concatenate the common files to the beginning of the array. gTestDirsPartialSuccess = gTestDirsCommon.concat(gTestDirsPartialSuccess); -// Extra directories to check for existence for both complete and partial -// updates. Whether they exist or not is set when calling setupUpdaterTest. -var gTestExtraDirs = [ -{ - relPathDir : DIR_UPDATED, - dirExists : false -}, { - relPathDir : DIR_TOBEDELETED, - dirExists : false -}]; - // This makes it possible to run most tests on xulrunner where the update // channel default preference is not set. if (MOZ_APP_NAME == "xulrunner") { @@ -905,11 +910,11 @@ function setupTestCommon() { // it is defined as a function. adjustGeneralPaths(); - // Remove the updates directory on Windows which is located outside of the - // application directory after the call to adjustGeneralPaths has set it up. - // Since the test hasn't ran yet and the directory shouldn't exist finished - // this is non-fatal for the test. - if (IS_WIN) { + // Remove the updates directory on Windows and Mac OS X which is located + // outside of the application directory after the call to adjustGeneralPaths + // has set it up. Since the test hasn't ran yet and the directory shouldn't + // exist this is non-fatal for the test. + if (IS_WIN || IS_MACOSX) { let updatesDir = getMockUpdRootD(); if (updatesDir.exists()) { logTestInfo("attempting to remove directory. Path: " + updatesDir.path); @@ -992,8 +997,8 @@ function cleanupTestCommon() { } // The updates directory is located outside of the application directory on - // Windows so it also needs to be removed. - if (IS_WIN) { + // Windows and Mac so it also needs to be removed. + if (IS_WIN || IS_MACOSX) { let updatesDir = getMockUpdRootD(); // Try to remove the directory used to apply updates. Since the test has // already finished this is non-fatal for the test. @@ -1191,12 +1196,59 @@ function getApplyDirPath() { * exist or the function will throw. * @return The nsIFile for the file in the directory where the update will be * applied. + * @throws If aAllowNonexistent is not specified or is false and the file or + * directory does not exist. */ function getApplyDirFile(aRelPath, aAllowNonexistent) { let relpath = getApplyDirPath() + (aRelPath ? aRelPath : ""); return do_get_file(relpath, aAllowNonexistent); } +/** + * Helper function for getting the nsIFile for a file in the directory where the + * update will be staged. + * + * The files for the update are located two directories below the stage + * directory since Mac OS X sets the last modified time for the root directory + * to the current time and if the update changes any files in the root directory + * then it wouldn't be possible to test (bug 600098). + * + * @param aRelPath (optional) + * The relative path to the file or directory to get from the root of + * the stage directory. If not specified the stage directory will be + * returned. + * @param aAllowNonexistent (optional) + * Whether the file must exist. If false or not specified the file must + * exist or the function will throw. + * @return The nsIFile for the file in the directory where the update will be + * staged. + * @throws If aAllowNonexistent is not specified or is false and the file or + * directory does not exist. + */ +function getStageDirFile(aRelPath, aAllowNonexistent) { + if (IS_MACOSX) { + let file = getMockUpdRootD(); + file.append(DIR_UPDATES); + file.append(DIR_PATCH); + file.append(DIR_UPDATED); + if (aRelPath) { + let pathParts = aRelPath.split("/"); + for (let i = 0; i < pathParts.length; i++) { + if (pathParts[i]) { + file.append(pathParts[i]); + } + } + } + if (!aAllowNonexistent && !file.exists()) { + do_throw(file.path + " does not exist"); + } + return file; + } + + let relpath = getApplyDirPath() + DIR_UPDATED + "/" + (aRelPath ? aRelPath : ""); + return do_get_file(relpath, aAllowNonexistent); +} + /** * Helper function for getting the relative path to the directory where the * test data files are located. @@ -1224,15 +1276,6 @@ function getTestDirFile(aRelPath) { return do_get_file(relpath, false); } -/** - * Helper function for getting the directory that was updated. This can either - * be the directory where the application binary is located or the directory - * that contains the staged update. - */ -function getUpdatedDirPath() { - return getApplyDirPath() + (gStageUpdate ? DIR_UPDATED + "/" : ""); -} - #ifdef XP_WIN XPCOMUtils.defineLazyGetter(this, "gInstallDirPathHash", function test_gInstallDirPathHash() { @@ -1330,7 +1373,7 @@ function getMockUpdRootD() { let appDir = Services.dirsvc.get(XRE_EXECUTABLE_FILE, AUS_Ci.nsIFile).parent; let appDirPath = appDir.path; - var relPathUpdates = ""; + let relPathUpdates = ""; if (gInstallDirPathHash && (MOZ_APP_VENDOR || MOZ_APP_BASENAME)) { relPathUpdates += (MOZ_APP_VENDOR ? MOZ_APP_VENDOR : MOZ_APP_BASENAME) + "\\" + DIR_UPDATES + "\\" + gInstallDirPathHash; @@ -1358,12 +1401,48 @@ function getMockUpdRootD() { relPathUpdates += "\\" + MOZ_APP_NAME; } - var updatesDir = AUS_Cc["@mozilla.org/file/local;1"]. + let updatesDir = AUS_Cc["@mozilla.org/file/local;1"]. createInstance(AUS_Ci.nsILocalFile); updatesDir.initWithPath(localAppDataDir.path + "\\" + relPathUpdates); logTestInfo("returning UpdRootD Path: " + updatesDir.path); return updatesDir; } +#elif XP_MACOSX +/** + * Helper function for getting the update root directory used by the tests. This + * returns the same directory as returned by nsXREDirProvider::GetUpdateRootDir + * in nsXREDirProvider.cpp so an application will be able to find the update + * when running a test that launches the application. + */ +function getMockUpdRootD() { + let userLibDir = Services.dirsvc.get("ULibDir", AUS_Ci.nsILocalFile); + let appDir = Services.dirsvc.get(XRE_EXECUTABLE_FILE, AUS_Ci.nsIFile). + parent.parent.parent; + let appDirPath = appDir.path; + appDirPath = appDirPath.substr(0, appDirPath.length - 4); + + let relPathUpdates = ""; + if (MOZ_APP_VENDOR || MOZ_APP_BASENAME) { + relPathUpdates += (MOZ_APP_VENDOR ? MOZ_APP_VENDOR : MOZ_APP_BASENAME) + + "/" + DIR_UPDATES + appDirPath; + } + + if (!relPathUpdates) { + if (MOZ_APP_VENDOR && MOZ_APP_BASENAME) { + relPathUpdates += MOZ_APP_VENDOR + "/" + MOZ_APP_BASENAME; + } else { + relPathUpdates += MOZ_APP_BASENAME; + } + relPathUpdates += "/" + MOZ_APP_NAME; + } + + let updatesDir = AUS_Cc["@mozilla.org/file/local;1"]. + createInstance(AUS_Ci.nsILocalFile); + + updatesDir.initWithPath(userLibDir.path + "/Caches/" + relPathUpdates); + logTestInfo("returning UpdRootD Path: " + updatesDir.path); + return updatesDir; +} #else /** * Helper function for getting the update root directory used by the tests. This @@ -1376,30 +1455,6 @@ function getMockUpdRootD() { } #endif -/** - * Helper function for getting the nsIFile for the directory where the update - * has been applied. - * - * This will be the same as getApplyDirFile for foreground updates, but will - * point to a different file for the case of staged updates. - * - * Functions which attempt to access the files in the updated directory should - * be using this instead of getApplyDirFile. - * - * @param aRelPath (optional) - * The relative path to the file or directory to get from the root of - * the test's directory. If not specified the test's directory will be - * returned. - * @param aAllowNonexistent (optional) - * Whether the file must exist. If false or not specified the file must - * exist or the function will throw. - * @return The nsIFile for the directory where the update has been applied. - */ -function getTargetDirFile(aRelPath, aAllowNonexistent) { - let relpath = getUpdatedDirPath() + (aRelPath ? aRelPath : ""); - return do_get_file(relpath, aAllowNonexistent); -} - if (IS_WIN) { const kLockFileName = "updated.update_in_progress.lock"; /** @@ -1453,7 +1508,7 @@ if (IS_WIN) { */ function runUpdate(aExpectedExitValue, aExpectedStatus, aCallback) { // Copy the updater binary to the updates directory. - let binDir = gGREDirOrig.clone(); + let binDir = gAppDirOrig.clone(); let updater = binDir.clone(); updater.append("updater.app"); if (!updater.exists()) { @@ -1479,24 +1534,30 @@ function runUpdate(aExpectedExitValue, aExpectedStatus, aCallback) { let applyToDir = getApplyDirFile(null, true); let applyToDirPath = applyToDir.path; - if (gStageUpdate || gSwitchApp) { - applyToDirPath += "/" + DIR_UPDATED + "/"; - } + + let stageDir = getStageDirFile(null, true); + let stageDirPath = stageDir.path; if (IS_WIN) { // Convert to native path applyToDirPath = applyToDirPath.replace(/\//g, "\\"); + stageDirPath = stageDirPath.replace(/\//g, "\\"); } - let callbackApp = getApplyDirFile("a/b/" + gCallbackBinFile); + let callbackApp = getApplyDirFile(DIR_RESOURCES + gCallbackBinFile); callbackApp.permissions = PERMS_DIRECTORY; - let args = [updatesDir.path, applyToDirPath, 0]; + let args = [updatesDir.path, applyToDirPath]; if (gStageUpdate) { - args[2] = -1; + args[2] = stageDirPath; + args[3] = -1; } else { if (gSwitchApp) { - args[2] = "0/replace"; + args[2] = stageDirPath; + args[3] = "0/replace"; + } else { + args[2] = applyToDirPath; + args[3] = "0"; } args = args.concat([callbackApp.parent.path, callbackApp.path]); args = args.concat(gCallbackArgs); @@ -1692,11 +1753,11 @@ function setupAppFilesAsync() { /** * Helper function for setting up the application files required to launch the - * application for the updater tests by either copying or creating symlinks for + * application for the updater tests by either copying or creating symlinks to * the files. */ function setupAppFiles() { - logTestInfo("start - copying or creating symlinks for application files " + + logTestInfo("start - copying or creating symlinks to application files " + "for the test"); let srcDir = getCurrentProcessDir(); @@ -1713,12 +1774,19 @@ function setupAppFiles() { // Required files for the application or the test that aren't listed in the // dependentlibs.list file. - let fileRelPaths = [FILE_APP_BIN, FILE_UPDATER_BIN, - "application.ini", "dependentlibs.list"]; + let fileRelPaths = [ { src: FILE_APP_BIN }, + { src: FILE_UPDATER_BIN} ]; + if (IS_MACOSX) { + fileRelPaths.push( { src: "../Resources/application.ini", dst: "../Resources/application.ini" } ); + fileRelPaths.push( { src: "../Resources/dependentlibs.list", dst: "../Resources/dependentlibs.list" } ); + } else { + fileRelPaths.push( { src: "application.ini" } ); + fileRelPaths.push( { src: "dependentlibs.list" } ); + } // On Linux the updater.png must also be copied if (IS_UNIX && !IS_MACOSX) { - fileRelPaths.push("icons/updater.png"); + fileRelPaths.push( { src: "icons/updater.png" } ); } // Read the dependent libs file leafnames from the dependentlibs.list file @@ -1734,16 +1802,17 @@ function setupAppFiles() { let line = {}; do { hasMore = istream.readLine(line); - fileRelPaths.push(line.value); + fileRelPaths.push( { src: line.value } ); } while(hasMore); istream.close(); fileRelPaths.forEach(function CMAF_FLN_FE(aFileRelPath) { - copyFileToTestAppDir(aFileRelPath); + copyFileToTestAppDir(aFileRelPath.src, aFileRelPath.dst ? aFileRelPath.dst + : null); }); - logTestInfo("finish - copying or creating symlinks for application files " + + logTestInfo("finish - copying or creating symlinks to application files " + "for the test"); } @@ -1753,10 +1822,12 @@ function setupAppFiles() { * * @param aFileRelPath * The relative path of the file to copy. + * @param aDestFileRelPath (optional) + * The relative path of the destination file. */ -function copyFileToTestAppDir(aFileRelPath) { +function copyFileToTestAppDir(aFileRelPath, aDestFileRelPath) { let fileRelPath = aFileRelPath; - let srcFile = gGREDirOrig.clone(); + let srcFile = gAppDirOrig.clone(); let pathParts = fileRelPath.split("/"); for (let i = 0; i < pathParts.length; i++) { if (pathParts[i]) { @@ -1768,7 +1839,7 @@ function copyFileToTestAppDir(aFileRelPath) { logTestInfo("unable to copy file since it doesn't exist! Checking if " + fileRelPath + ".app exists. Path: " + srcFile.path); - srcFile = gGREDirOrig.clone(); + srcFile = gAppDirOrig.clone(); for (let i = 0; i < pathParts.length; i++) { if (pathParts[i]) { srcFile.append(pathParts[i] + (pathParts.length - 1 == i ? ".app" : "")); @@ -1787,7 +1858,9 @@ function copyFileToTestAppDir(aFileRelPath) { let shouldSymlink = (pathParts[pathParts.length - 1] == "XUL" || fileRelPath.substr(fileRelPath.length - 3) == ".so" || fileRelPath.substr(fileRelPath.length - 6) == ".dylib"); - let destFile = getApplyDirFile(DIR_BIN_REL_PATH + fileRelPath, true); + let destFile = getApplyDirFile(DIR_BIN_REL_PATH + + (aDestFileRelPath ? aDestFileRelPath + : fileRelPath), true); if (!shouldSymlink) { if (!destFile.exists()) { try { @@ -1862,8 +1935,8 @@ function attemptServiceInstall() { * The initial value of update.status. * @param aExpectedStatus * The expected value of update.status when the test finishes. - * @param aCheckSvcLog - * Whether the service log should be checked (optional). + * @param aCheckSvcLog (optional) + * Whether the service log should be checked. */ function runUpdateUsingService(aInitialStatus, aExpectedStatus, aCheckSvcLog) { // Check the service logs for a successful update @@ -1968,7 +2041,6 @@ function runUpdateUsingService(aInitialStatus, aExpectedStatus, aCheckSvcLog) { gServiceLaunchedCallbackLog = appArgsLogPath.replace(/^"|"$/g, ""); let updatesDir = getUpdatesPatchDir(); - let file = updatesDir.clone(); writeStatusFile(aInitialStatus); // sanity check @@ -2095,7 +2167,7 @@ function waitForHelperSleep() { gTimeoutRuns++; // Give the lock file process time to lock the file before updating otherwise // this test can fail intermittently on Windows debug builds. - let output = getApplyDirFile("a/b/output", true); + let output = getApplyDirFile(DIR_RESOURCES + "output", true); if (readFile(output) != "sleeping\n") { if (gTimeoutRuns > MAX_TIMEOUT_RUNS) { do_throw("Exceeded MAX_TIMEOUT_RUNS while waiting for the helper to " + @@ -2127,7 +2199,7 @@ function waitForHelperSleep() { function waitForHelperFinished() { // Give the lock file process time to lock the file before updating otherwise // this test can fail intermittently on Windows debug builds. - let output = getApplyDirFile("a/b/output", true); + let output = getApplyDirFile(DIR_RESOURCES + "output", true); if (readFile(output) != "finished\n") { do_timeout(TEST_HELPER_TIMEOUT, waitForHelperFinished); return; @@ -2143,11 +2215,11 @@ function waitForHelperFinished() { */ function waitForHelperFinishFileUnlock() { try { - let output = getApplyDirFile("a/b/output", true); + let output = getApplyDirFile(DIR_RESOURCES + "output", true); if (output.exists()) { output.remove(false); } - let input = getApplyDirFile("a/b/input", true); + let input = getApplyDirFile(DIR_RESOURCES + "input", true); if (input.exists()) { input.remove(false); } @@ -2164,7 +2236,7 @@ function waitForHelperFinishFileUnlock() { * Helper function to tell the helper to finish and exit its sleep state. */ function setupHelperFinish() { - let input = getApplyDirFile("a/b/input", true); + let input = getApplyDirFile(DIR_RESOURCES + "input", true); writeFile(input, "finish\n"); waitForHelperFinished(); } @@ -2176,7 +2248,7 @@ function setupHelperFinish() { * @param aMarFile * The mar file for the update test. */ -function setupUpdaterTest(aMarFile, aUpdatedDirExists, aToBeDeletedDirExists) { +function setupUpdaterTest(aMarFile) { let updatesPatchDir = getUpdatesPatchDir(); if (!updatesPatchDir.exists()) { updatesPatchDir.create(AUS_Ci.nsIFile.DIRECTORY_TYPE, PERMS_DIRECTORY); @@ -2185,10 +2257,8 @@ function setupUpdaterTest(aMarFile, aUpdatedDirExists, aToBeDeletedDirExists) { let mar = getTestDirFile(aMarFile); mar.copyToFollowingLinks(updatesPatchDir, FILE_UPDATE_ARCHIVE); - createUpdateSettingsINI(); - let helperBin = getTestDirFile(FILE_HELPER_BIN); - let afterApplyBinDir = getApplyDirFile("a/b/", true); + let afterApplyBinDir = getApplyDirFile(DIR_RESOURCES, true); helperBin.copyToFollowingLinks(afterApplyBinDir, gCallbackBinFile); helperBin.copyToFollowingLinks(afterApplyBinDir, gPostUpdateBinFile); @@ -2258,9 +2328,6 @@ function setupUpdaterTest(aMarFile, aUpdatedDirExists, aToBeDeletedDirExists) { }); } }); - - gTestExtraDirs[0].dirExists = aUpdatedDirExists; - gTestExtraDirs[1].dirExists = IS_WIN ? aToBeDeletedDirExists : false; } /** @@ -2271,7 +2338,7 @@ function createUpdateSettingsINI() { let updateSettingsIni = getApplyDirFile(null, true); if (IS_MACOSX) { updateSettingsIni.append("Contents"); - updateSettingsIni.append("MacOS"); + updateSettingsIni.append("Resources"); } updateSettingsIni.append(FILE_UPDATE_SETTINGS_INI); writeFile(updateSettingsIni, UPDATE_SETTINGS_CONTENTS); @@ -2300,15 +2367,15 @@ function createUpdaterINI(aIsExeAsync) { } let updaterIniContents = "[PostUpdateMac]\n" + - "ExeRelPath=a/b/" + gPostUpdateBinFile + "\n" + + "ExeRelPath=" + DIR_RESOURCES + gPostUpdateBinFile + "\n" + exeArg + exeAsync + "\n" + "[PostUpdateWin]\n" + - "ExeRelPath=a/b/" + gPostUpdateBinFile + "\n" + + "ExeRelPath=" + gPostUpdateBinFile + "\n" + exeArg + exeAsync; - let updaterIni = getApplyDirFile((IS_MACOSX ? "Contents/MacOS/" : "") + + let updaterIni = getApplyDirFile((IS_MACOSX ? "Contents/Resources/" : "") + FILE_UPDATER_INI, true); writeFile(updaterIni, updaterIniContents); } @@ -2321,6 +2388,10 @@ function createUpdaterINI(aIsExeAsync) { * The log file to compare the update log with. */ function checkUpdateLogContents(aCompareLogFile) { + if (IS_UNIX && !IS_MACOSX) { + // Sorting on Linux is different so skip checking the logs for now. + return; + } let updateLog = getUpdatesPatchDir(); updateLog.append(FILE_UPDATE_LOG); let updateLogContents = readFileBytes(updateLog); @@ -2328,14 +2399,14 @@ function checkUpdateLogContents(aCompareLogFile) { // The channel-prefs.js is defined in gTestFilesCommon which will always be // located to the end of gTestFiles. if (gTestFiles.length > 1 && - gTestFiles[gTestFiles.length - 1].fileName == "channel-prefs.js" && - !gTestFiles[gTestFiles.length - 1].originalContents) { - updateLogContents = updateLogContents.replace(/.* a\/b\/defaults\/.*/g, ""); + gTestFiles[gTestFiles.length - 1].fileName == "channel-prefs.js" && + !gTestFiles[gTestFiles.length - 1].originalContents) { + updateLogContents = updateLogContents.replace(/.*defaults\/.*/g, ""); } if (gTestFiles.length > 2 && - gTestFiles[gTestFiles.length - 2].fileName == FILE_UPDATE_SETTINGS_INI && - !gTestFiles[gTestFiles.length - 2].originalContents) { - updateLogContents = updateLogContents.replace(/.* a\/b\/update-settings.ini.*/g, ""); + gTestFiles[gTestFiles.length - 2].fileName == FILE_UPDATE_SETTINGS_INI && + !gTestFiles[gTestFiles.length - 2].originalContents) { + updateLogContents = updateLogContents.replace(/.*update-settings.ini.*/g, ""); } if (gStageUpdate) { // Skip the staged update messages @@ -2346,8 +2417,9 @@ function checkUpdateLogContents(aCompareLogFile) { updateLogContents = updateLogContents.replace(/Performing a replace request/, ""); } // Skip the source/destination lines since they contain absolute paths. - updateLogContents = updateLogContents.replace(/SOURCE DIRECTORY.*/g, ""); - updateLogContents = updateLogContents.replace(/DESTINATION DIRECTORY.*/g, ""); + updateLogContents = updateLogContents.replace(/PATCH DIRECTORY.*/g, ""); + updateLogContents = updateLogContents.replace(/INSTALLATION DIRECTORY.*/g, ""); + updateLogContents = updateLogContents.replace(/WORKING DIRECTORY.*/g, ""); // Skip lines that log failed attempts to open the callback executable. updateLogContents = updateLogContents.replace(/NS_main: callback app file .*/g, ""); if (gSwitchApp) { @@ -2368,7 +2440,7 @@ function checkUpdateLogContents(aCompareLogFile) { updateLogContents = updateLogContents.replace(/non-fatal error /g, ""); // The FindFile results when enumerating the filesystem on Windows is not // determistic so the results matching the following need to be ignored. - updateLogContents = updateLogContents.replace(/.* a\/b\/7\/7text.*\n/g, ""); + updateLogContents = updateLogContents.replace(/.*7\/7text.*\n/g, ""); // Remove consecutive newlines updateLogContents = updateLogContents.replace(/\n+/g, "\n"); // Remove leading and trailing newlines @@ -2387,14 +2459,14 @@ function checkUpdateLogContents(aCompareLogFile) { // The channel-prefs.js is defined in gTestFilesCommon which will always be // located to the end of gTestFiles. if (gTestFiles.length > 1 && - gTestFiles[gTestFiles.length - 1].fileName == "channel-prefs.js" && - !gTestFiles[gTestFiles.length - 1].originalContents) { - compareLogContents = compareLogContents.replace(/.* a\/b\/defaults\/.*/g, ""); + gTestFiles[gTestFiles.length - 1].fileName == "channel-prefs.js" && + !gTestFiles[gTestFiles.length - 1].originalContents) { + compareLogContents = compareLogContents.replace(/.*defaults\/.*/g, ""); } if (gTestFiles.length > 2 && - gTestFiles[gTestFiles.length - 2].fileName == FILE_UPDATE_SETTINGS_INI && - !gTestFiles[gTestFiles.length - 2].originalContents) { - compareLogContents = compareLogContents.replace(/.* a\/b\/update-settings.ini.*/g, ""); + gTestFiles[gTestFiles.length - 2].fileName == FILE_UPDATE_SETTINGS_INI && + !gTestFiles[gTestFiles.length - 2].originalContents) { + compareLogContents = compareLogContents.replace(/.*update-settings.ini.*/g, ""); } // Remove leading and trailing newlines compareLogContents = compareLogContents.replace(/\n+/g, "\n"); @@ -2435,12 +2507,23 @@ function checkUpdateLogContains(aCheckString) { /** * Helper function for updater binary tests for verifying the state of files and * directories after a successful update. + * + * @param aGetFileFunc + * The function used to get the files in the directory to be checked. + * @param aStageDirExists + * If true the staging directory will be tested for existence and if + * false the staging directory will be tested for non-existence. + * @param aToBeDeletedDirExists + * On Windows, if true the tobedeleted directory will be tested for + * existence and if false the tobedeleted directory will be tested for + * non-existence. On all othere platforms it will be tested for + * non-existence. */ -function checkFilesAfterUpdateSuccess() { +function checkFilesAfterUpdateSuccess(aGetFileFunc, aStageDirExists, + aToBeDeletedDirExists) { logTestInfo("testing contents of files after a successful update"); gTestFiles.forEach(function CFAUS_TF_FE(aTestFile) { - let testFile = getTargetDirFile(aTestFile.relPathDir + aTestFile.fileName, - true); + let testFile = aGetFileFunc(aTestFile.relPathDir + aTestFile.fileName, true); logTestInfo("testing file: " + testFile.path); if (aTestFile.compareFile || aTestFile.compareContents) { do_check_true(testFile.exists()); @@ -2482,7 +2565,7 @@ function checkFilesAfterUpdateSuccess() { logTestInfo("testing operations specified in removed-files were performed " + "after a successful update"); gTestDirs.forEach(function CFAUS_TD_FE(aTestDir) { - let testDir = getTargetDirFile(aTestDir.relPathDir, true); + let testDir = aGetFileFunc(aTestDir.relPathDir, true); logTestInfo("testing directory: " + testDir.path); if (aTestDir.dirRemoved) { do_check_false(testDir.exists()); @@ -2491,7 +2574,7 @@ function checkFilesAfterUpdateSuccess() { if (aTestDir.files) { aTestDir.files.forEach(function CFAUS_TD_F_FE(aTestFile) { - let testFile = getTargetDirFile(aTestDir.relPathDir + aTestFile, true); + let testFile = aGetFileFunc(aTestDir.relPathDir + aTestFile, true); logTestInfo("testing directory file: " + testFile.path); if (aTestDir.filesRemoved) { do_check_false(testFile.exists()); @@ -2503,12 +2586,13 @@ function checkFilesAfterUpdateSuccess() { if (aTestDir.subDirs) { aTestDir.subDirs.forEach(function CFAUS_TD_SD_FE(aSubDir) { - let testSubDir = getTargetDirFile(aTestDir.relPathDir + aSubDir, true); + let testSubDir = aGetFileFunc(aTestDir.relPathDir + aSubDir, true); logTestInfo("testing sub-directory: " + testSubDir.path); do_check_true(testSubDir.exists()); if (aTestDir.subDirFiles) { aTestDir.subDirFiles.forEach(function CFAUS_TD_SDF_FE(aTestFile) { - let testFile = getTargetDirFile(aTestDir.relPathDir + aSubDir + aTestFile, true); + let testFile = aGetFileFunc(aTestDir.relPathDir + + aSubDir + aTestFile, true); logTestInfo("testing sub-directory file: " + testFile.path); do_check_true(testFile.exists()); }); @@ -2518,21 +2602,30 @@ function checkFilesAfterUpdateSuccess() { } }); - checkFilesAfterUpdateCommon(); + checkFilesAfterUpdateCommon(aGetFileFunc, aStageDirExists, + aToBeDeletedDirExists); } /** * Helper function for updater binary tests for verifying the state of files and * directories after a failed update. * - * @param aGetDirectory: the function used to get the files in the target directory. - * Pass getApplyDirFile if you want to test the case of a failed switch request. + * @param aGetFileFunc + * the function used to get the files in the directory to be checked. + * @param aStageDirExists + * If true the staging directory will be tested for existence and if + * false the staging directory will be tested for non-existence. + * @param aToBeDeletedDirExists + * On Windows, if true the tobedeleted directory will be tested for + * existence and if false the tobedeleted directory will be tested for + * non-existence. On all othere platforms it will be tested for + * non-existence. */ -function checkFilesAfterUpdateFailure(aGetDirectory) { - let getdir = aGetDirectory || getTargetDirFile; +function checkFilesAfterUpdateFailure(aGetFileFunc, aStageDirExists, + aToBeDeletedDirExists) { logTestInfo("testing contents of files after a failed update"); gTestFiles.forEach(function CFAUF_TF_FE(aTestFile) { - let testFile = getdir(aTestFile.relPathDir + aTestFile.fileName, true); + let testFile = aGetFileFunc(aTestFile.relPathDir + aTestFile.fileName, true); logTestInfo("testing file: " + testFile.path); if (aTestFile.compareFile || aTestFile.compareContents) { do_check_true(testFile.exists()); @@ -2574,13 +2667,13 @@ function checkFilesAfterUpdateFailure(aGetDirectory) { logTestInfo("testing operations specified in removed-files were not " + "performed after a failed update"); gTestDirs.forEach(function CFAUF_TD_FE(aTestDir) { - let testDir = getdir(aTestDir.relPathDir, true); + let testDir = aGetFileFunc(aTestDir.relPathDir, true); logTestInfo("testing directory: " + testDir.path); do_check_true(testDir.exists()); if (aTestDir.files) { aTestDir.files.forEach(function CFAUS_TD_F_FE(aTestFile) { - let testFile = getdir(aTestDir.relPathDir + aTestFile, true); + let testFile = aGetFileFunc(aTestDir.relPathDir + aTestFile, true); logTestInfo("testing directory file: " + testFile.path); do_check_true(testFile.exists()); }); @@ -2588,13 +2681,13 @@ function checkFilesAfterUpdateFailure(aGetDirectory) { if (aTestDir.subDirs) { aTestDir.subDirs.forEach(function CFAUS_TD_SD_FE(aSubDir) { - let testSubDir = getdir(aTestDir.relPathDir + aSubDir, true); + let testSubDir = aGetFileFunc(aTestDir.relPathDir + aSubDir, true); logTestInfo("testing sub-directory: " + testSubDir.path); do_check_true(testSubDir.exists()); if (aTestDir.subDirFiles) { aTestDir.subDirFiles.forEach(function CFAUS_TD_SDF_FE(aTestFile) { - let testFile = getdir(aTestDir.relPathDir + aSubDir + aTestFile, - true); + let testFile = aGetFileFunc(aTestDir.relPathDir + + aSubDir + aTestFile, true); logTestInfo("testing sub-directory file: " + testFile.path); do_check_true(testFile.exists()); }); @@ -2603,42 +2696,65 @@ function checkFilesAfterUpdateFailure(aGetDirectory) { } }); - checkFilesAfterUpdateCommon(); + checkFilesAfterUpdateCommon(aGetFileFunc, aStageDirExists, + aToBeDeletedDirExists); } /** * Helper function for updater binary tests for verifying the state of common * files and directories after a successful or failed update. + * + * @param aGetFileFunc + * the function used to get the files in the directory to be checked. + * @param aStageDirExists + * If true the staging directory will be tested for existence and if + * false the staging directory will be tested for non-existence. + * @param aToBeDeletedDirExists + * On Windows, if true the tobedeleted directory will be tested for + * existence and if false the tobedeleted directory will be tested for + * non-existence. On all othere platforms it will be tested for + * non-existence. */ -function checkFilesAfterUpdateCommon() { +function checkFilesAfterUpdateCommon(aGetFileFunc, aStageDirExists, + aToBeDeletedDirExists) { logTestInfo("testing extra directories"); - gTestExtraDirs.forEach(function CFAUC_TED_FE(aTestExtraDir) { - let testDir = getTargetDirFile(aTestExtraDir.relPathDir, true); - logTestInfo("testing directory: " + testDir.path); - if (aTestExtraDir.dirExists) { - do_check_true(testDir.exists()); - } else { - do_check_false(testDir.exists()); - } - }); + + let stageDir = getStageDirFile(null, true); + logTestInfo("testing directory should " + + (aStageDirExists ? "" : "not ") + + "exist: " + stageDir.path); + do_check_eq(stageDir.exists(), aStageDirExists); + + let toBeDeletedDirExists = IS_WIN ? aToBeDeletedDirExists : false; + let toBeDeletedDir = getApplyDirFile(DIR_TOBEDELETED, true); + logTestInfo("testing directory should " + + (toBeDeletedDirExists ? "" : "not ") + + "exist: " + toBeDeletedDir.path); + do_check_eq(toBeDeletedDir.exists(), toBeDeletedDirExists); logTestInfo("testing updating directory doesn't exist in the application " + - "directory"); - let updatingDir = getTargetDirFile("updating", true); + "directory"); + let updatingDir = getApplyDirFile("updating", true); do_check_false(updatingDir.exists()); - if (gStageUpdate) { - logTestInfo("testing updating directory doesn't exist in the updated " + - "directory"); - updatingDir = getApplyDirFile("updating", true); - do_check_false(updatingDir.exists()); - - // This should never exist since the update was applied to the updated - // directory and the files should never be in use. - logTestInfo("testing tobedeleted directory doesn't exist in the updated " + + if (stageDir.exists()) { + logTestInfo("testing updating directory doesn't exist in the staging " + "directory"); - let toBeDeletedDir = getApplyDirFile(DIR_TOBEDELETED, true); - do_check_false(toBeDeletedDir.exists()); + updatingDir = stageDir.clone(); + updatingDir.append("updating"); + do_check_false(updatingDir.exists()); + } + + logTestInfo("testing backup files should not be left behind in the " + + "application directory"); + let applyToDir = getApplyDirFile(null, true); + checkFilesInDirRecursive(applyToDir, checkForBackupFiles); + + if (stageDir.exists()) { + logTestInfo("testing backup files should not be left behind in the " + + "staging directory"); + let applyToDir = getApplyDirFile(null, true); + checkFilesInDirRecursive(stageDir, checkForBackupFiles); } logTestInfo("testing patch files should not be left behind"); @@ -2648,10 +2764,6 @@ function checkFilesAfterUpdateCommon() { let entry = entries.getNext().QueryInterface(AUS_Ci.nsIFile); do_check_neq(getFileExtension(entry), "patch"); } - - logTestInfo("testing backup files should not be left behind"); - let applyToDir = getTargetDirFile(null, true); - checkFilesInDirRecursive(applyToDir, checkForBackupFiles); } /** @@ -2660,7 +2772,7 @@ function checkFilesAfterUpdateCommon() { * the callback application. */ function checkCallbackAppLog() { - let appLaunchLog = getApplyDirFile("a/b/" + gCallbackArgs[1], true); + let appLaunchLog = getApplyDirFile(DIR_RESOURCES + gCallbackArgs[1], true); if (!appLaunchLog.exists()) { do_timeout(TEST_HELPER_TIMEOUT, checkCallbackAppLog); return; @@ -2697,7 +2809,7 @@ function checkCallbackAppLog() { * The string to append to the post update test helper binary path. */ function getPostUpdateFile(aSuffix) { - return getApplyDirFile("a/b/" + gPostUpdateBinFile + aSuffix, true); + return getApplyDirFile(DIR_RESOURCES + gPostUpdateBinFile + aSuffix, true); } /** @@ -2708,7 +2820,7 @@ function checkPostUpdateAppLog() { gTimeoutRuns++; let postUpdateLog = getPostUpdateFile(".log"); if (!postUpdateLog.exists()) { - logTestInfo("postUpdateLog does not exist"); + logTestInfo("postUpdateLog does not exist. Path: " + postUpdateLog.path); if (gTimeoutRuns > MAX_TIMEOUT_RUNS) { do_throw("Exceeded MAX_TIMEOUT_RUNS while waiting for the post update " + "process to create the post update log. Path: " + diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyDirLockedStageFailure_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyDirLockedStageFailure_win.js index dce102e2df4..e85933b1534 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyDirLockedStageFailure_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyDirLockedStageFailure_win.js @@ -17,10 +17,14 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(false); + if (IS_WIN) { + Services.prefs.setBoolPref(PREF_APP_UPDATE_SERVICE_ENABLED, false); + } + let channel = Services.prefs.getCharPref(PREF_APP_UPDATE_CHANNEL); let patches = getLocalPatchString(null, null, null, null, null, "true", STATE_PENDING); @@ -40,6 +44,16 @@ function run_test() { } function setupAppFilesFinished() { + // For Mac OS X set the last modified time for the root directory to a date in + // the past to test that the last modified time is updated on a successful + // update (bug 600098). + if (IS_MACOSX) { + let now = Date.now(); + let yesterday = now - (1000 * 60 * 60 * 24); + let applyToDir = getApplyDirFile(); + applyToDir.lastModifiedTime = yesterday; + } + stageUpdate(); } @@ -67,12 +81,13 @@ function checkUpdateApplied() { } function finishTest() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { // Check that the post update process was not launched. do_check_false(getPostUpdateFile(".running").exists()); } do_check_eq(readStatusState(), STATE_PENDING); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); unlockDirectory(getAppBaseDir()); waitForFilesInUse(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateAppBinInUseStageSuccess_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateAppBinInUseStageSuccess_win.js index 63c9556db46..f7a127fe7e9 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateAppBinInUseStageSuccess_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateAppBinInUseStageSuccess_win.js @@ -18,7 +18,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(true); @@ -112,14 +112,10 @@ function checkUpdateApplied() { // Don't proceed until the last update log has been created. let log; - if (IS_WIN) { + if (IS_WIN || IS_MACOSX) { log = getUpdatesDir(); } else { - log = getUpdatedDir(); - if (IS_MACOSX) { - log.append("Contents"); - log.append("MacOS"); - } + log = getStageDirFile(null, true); log.append(DIR_UPDATES); } log.append(FILE_LAST_LOG); @@ -133,32 +129,22 @@ function checkUpdateApplied() { return; } - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { // Check that the post update process was not launched when staging an // update. do_check_false(getPostUpdateFile(".running").exists()); } - let updatedDir = getUpdatedDir(); - logTestInfo("testing " + updatedDir.path + " should exist"); - do_check_true(updatedDir.exists()); + checkFilesAfterUpdateSuccess(getStageDirFile, true, false); - // On Windows, make sure not to use the maintenance service for switching - // the app. - if (IS_WIN) { - writeStatusFile(STATE_APPLIED); - do_check_eq(readStatusState(), STATE_APPLIED); - } - - log = getUpdatesDir(); - log.append("0"); + log = getUpdatesPatchDir(); log.append(FILE_UPDATE_LOG); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); log = getUpdatesDir(); log.append(FILE_LAST_LOG); - if (IS_WIN) { + if (IS_WIN || IS_MACOSX) { logTestInfo("testing " + log.path + " should exist"); do_check_true(log.exists()); } else { @@ -171,41 +157,27 @@ function checkUpdateApplied() { logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - let updatesDir = getUpdatedDir(); - if (IS_MACOSX) { - updatesDir.append("Contents"); - updatesDir.append("MacOS"); - } - updatesDir.append("updates"); - log = updatesDir.clone(); - log.append("0"); - log.append(FILE_UPDATE_LOG); + let updatesDir = getStageDirFile(DIR_UPDATES + "/0", true); + logTestInfo("testing " + updatesDir.path + " shouldn't exist"); + do_check_false(updatesDir.exists()); + + log = getStageDirFile(DIR_UPDATES + "/0/" + FILE_UPDATE_LOG, true); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - if (!IS_WIN) { - log = updatesDir.clone(); - log.append(FILE_LAST_LOG); + log = getStageDirFile(DIR_UPDATES + "/" + FILE_LAST_LOG, true); + if (IS_WIN || IS_MACOSX) { + logTestInfo("testing " + log.path + " shouldn't exist"); + do_check_false(log.exists()); + } else { logTestInfo("testing " + log.path + " should exist"); do_check_true(log.exists()); } - log = updatesDir.clone(); - log.append(FILE_BACKUP_LOG); + log = getStageDirFile(DIR_UPDATES + "/" + FILE_BACKUP_LOG, true); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - updatesDir.append("0"); - logTestInfo("testing " + updatesDir.path + " shouldn't exist"); - do_check_false(updatesDir.exists()); - - // On Windows, make sure not to use the maintenance service for switching - // the app. - if (IS_WIN) { - writeStatusFile(STATE_APPLIED); - do_check_eq(readStatusState(), STATE_APPLIED); - } - // Switch the application to the staged application that was updated by // launching the application. do_timeout(TEST_CHECK_TIMEOUT, launchAppToApplyUpdate); @@ -216,7 +188,7 @@ function checkUpdateApplied() { * support launching post update process. */ function checkUpdateFinished() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateFinished; checkPostUpdateAppLog(); } else { @@ -246,7 +218,7 @@ function finishCheckUpdateFinished() { // Don't proceed until the application was switched out with the staged update // successfully. - let updatedDir = getUpdatedDir(); + let updatedDir = getStageDirFile(null, true); if (updatedDir.exists()) { if (gTimeoutRuns > MAX_TIMEOUT_RUNS) { do_throw("Exceeded while waiting for updated dir to not exist. Path: " + @@ -285,26 +257,23 @@ function finishCheckUpdateFinished() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); checkCallbackAppLog(); - let log = getUpdatesDir(); - log.append("0"); + standardInit(); + + let update = gUpdateManager.getUpdateAt(0); + do_check_eq(update.state, STATE_SUCCEEDED); + + let updatesDir = getUpdatesPatchDir(); + logTestInfo("testing " + updatesDir.path + " should exist"); + do_check_true(updatesDir.exists()); + + let log = getUpdatesPatchDir(); log.append(FILE_UPDATE_LOG); - if (IS_WIN) { - // On Windows, this log file is written to the AppData directory, and will - // therefore exist. - logTestInfo("testing " + log.path + " should exist"); - do_check_true(log.exists()); - } else { - logTestInfo("testing " + log.path + " shouldn't exist"); - do_check_false(log.exists()); - } + logTestInfo("testing " + log.path + " shouldn't exist"); + do_check_false(log.exists()); log = getUpdatesDir(); log.append(FILE_LAST_LOG); @@ -313,13 +282,8 @@ function finishCheckUpdateFinished() { log = getUpdatesDir(); log.append(FILE_BACKUP_LOG); - logTestInfo("testing " + log.path + " shouldn't exist"); - do_check_false(log.exists()); - - let updatesDir = getUpdatesDir(); - updatesDir.append("0"); - logTestInfo("testing " + updatesDir.path + " should exist"); - do_check_true(updatesDir.exists()); + logTestInfo("testing " + log.path + " should exist"); + do_check_true(log.exists()); waitForFilesInUse(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateStageSuccess.js b/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateStageSuccess.js index b8112dcdd5a..abc1a31bada 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateStageSuccess.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateStageSuccess.js @@ -16,7 +16,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(false); @@ -87,14 +87,10 @@ function checkUpdateApplied() { // Don't proceed until the last update log has been created. let log; - if (IS_WIN) { + if (IS_WIN || IS_MACOSX) { log = getUpdatesDir(); } else { - log = getUpdatedDir(); - if (IS_MACOSX) { - log.append("Contents"); - log.append("MacOS"); - } + log = getStageDirFile(null, true); log.append(DIR_UPDATES); } log.append(FILE_LAST_LOG); @@ -108,32 +104,22 @@ function checkUpdateApplied() { return; } - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { // Check that the post update process was not launched when staging an // update. do_check_false(getPostUpdateFile(".running").exists()); } - let updatedDir = getUpdatedDir(); - logTestInfo("testing " + updatedDir.path + " should exist"); - do_check_true(updatedDir.exists()); + checkFilesAfterUpdateSuccess(getStageDirFile, true, false); - // On Windows, make sure not to use the maintenance service for switching - // the app. - if (IS_WIN) { - writeStatusFile(STATE_APPLIED); - do_check_eq(readStatusState(), STATE_APPLIED); - } - - log = getUpdatesDir(); - log.append("0"); + log = getUpdatesPatchDir(); log.append(FILE_UPDATE_LOG); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); log = getUpdatesDir(); log.append(FILE_LAST_LOG); - if (IS_WIN) { + if (IS_WIN || IS_MACOSX) { logTestInfo("testing " + log.path + " should exist"); do_check_true(log.exists()); } else { @@ -146,41 +132,27 @@ function checkUpdateApplied() { logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - let updatesDir = getUpdatedDir(); - if (IS_MACOSX) { - updatesDir.append("Contents"); - updatesDir.append("MacOS"); - } - updatesDir.append("updates"); - log = updatesDir.clone(); - log.append("0"); - log.append(FILE_UPDATE_LOG); + let updatesDir = getStageDirFile(DIR_UPDATES + "/0", true); + logTestInfo("testing " + updatesDir.path + " shouldn't exist"); + do_check_false(updatesDir.exists()); + + log = getStageDirFile(DIR_UPDATES + "/0/" + FILE_UPDATE_LOG, true); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - if (!IS_WIN) { - log = updatesDir.clone(); - log.append(FILE_LAST_LOG); + log = getStageDirFile(DIR_UPDATES + "/" + FILE_LAST_LOG, true); + if (IS_WIN || IS_MACOSX) { + logTestInfo("testing " + log.path + " shouldn't exist"); + do_check_false(log.exists()); + } else { logTestInfo("testing " + log.path + " should exist"); do_check_true(log.exists()); } - log = updatesDir.clone(); - log.append(FILE_BACKUP_LOG); + log = getStageDirFile(DIR_UPDATES + "/" + FILE_BACKUP_LOG, true); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - updatesDir.append("0"); - logTestInfo("testing " + updatesDir.path + " shouldn't exist"); - do_check_false(updatesDir.exists()); - - // On Windows, make sure not to use the maintenance service for switching - // the app. - if (IS_WIN) { - writeStatusFile(STATE_APPLIED); - do_check_eq(readStatusState(), STATE_APPLIED); - } - // Switch the application to the staged application that was updated by // launching the application. do_timeout(TEST_CHECK_TIMEOUT, launchAppToApplyUpdate); @@ -191,7 +163,7 @@ function checkUpdateApplied() { * support launching post update process. */ function checkUpdateFinished() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateApplied; checkPostUpdateAppLog(); } else { @@ -220,7 +192,7 @@ function finishCheckUpdateApplied() { // Don't proceed until the application was switched out with the staged update // successfully. - let updatedDir = getUpdatedDir(); + let updatedDir = getStageDirFile(null, true); if (updatedDir.exists()) { if (gTimeoutRuns > MAX_TIMEOUT_RUNS) { do_throw("Exceeded while waiting for updated dir to not exist. Path: " + @@ -259,27 +231,25 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - gSwitchApp = true; - checkUpdateLogContents(); - } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + gSwitchApp = true; + checkUpdateLogContents(); + gSwitchApp = false; checkCallbackAppLog(); - let log = getUpdatesDir(); - log.append("0"); + standardInit(); + + let update = gUpdateManager.getUpdateAt(0); + do_check_eq(update.state, STATE_SUCCEEDED); + + let updatesDir = getUpdatesPatchDir(); + logTestInfo("testing " + updatesDir.path + " should exist"); + do_check_true(updatesDir.exists()); + + let log = getUpdatesPatchDir(); log.append(FILE_UPDATE_LOG); - if (IS_WIN) { - // On Windows, this log file is written to the AppData directory, and will - // therefore exist. - logTestInfo("testing " + log.path + " should exist"); - do_check_true(log.exists()); - } else { - logTestInfo("testing " + log.path + " shouldn't exist"); - do_check_false(log.exists()); - } + logTestInfo("testing " + log.path + " shouldn't exist"); + do_check_false(log.exists()); log = getUpdatesDir(); log.append(FILE_LAST_LOG); @@ -288,13 +258,13 @@ function finishCheckUpdateApplied() { log = getUpdatesDir(); log.append(FILE_BACKUP_LOG); - logTestInfo("testing " + log.path + " shouldn't exist"); - do_check_false(log.exists()); - - let updatesDir = getUpdatesDir(); - updatesDir.append("0"); - logTestInfo("testing " + updatesDir.path + " should exist"); - do_check_true(updatesDir.exists()); + if (IS_WIN || IS_MACOSX) { + logTestInfo("testing " + log.path + " should exist"); + do_check_true(log.exists()); + } else { + logTestInfo("testing " + log.path + " shouldn't exist"); + do_check_false(log.exists()); + } waitForFilesInUse(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateSuccess.js b/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateSuccess.js index 73acec07701..9063d6084f4 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateSuccess.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marAppApplyUpdateSuccess.js @@ -16,7 +16,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(); @@ -52,7 +52,7 @@ function setupAppFilesFinished() { * support launching post update process. */ function checkUpdateFinished() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateFinished; checkPostUpdateAppLog(); } else { @@ -120,12 +120,8 @@ function finishCheckUpdateFinished() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); checkCallbackAppLog(); standardInit(); @@ -133,6 +129,10 @@ function finishCheckUpdateFinished() { let update = gUpdateManager.getUpdateAt(0); do_check_eq(update.state, STATE_SUCCEEDED); + let updatesPatchDir = getUpdatesPatchDir(); + logTestInfo("testing " + updatesPatchDir.path + " should exist"); + do_check_true(updatesPatchDir.exists()); + log = getUpdatesPatchDir(); log.append(FILE_UPDATE_LOG); logTestInfo("testing " + log.path + " shouldn't exist"); @@ -148,9 +148,5 @@ function finishCheckUpdateFinished() { logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - let updatesPatchDir = getUpdatesPatchDir(); - logTestInfo("testing " + updatesPatchDir.path + " should exist"); - do_check_true(updatesPatchDir.exists()); - waitForFilesInUse(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseFallbackStageFailureComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseFallbackStageFailureComplete_win.js index cb36b61aa5c..40d6da251fc 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseFallbackStageFailureComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseFallbackStageFailureComplete_win.js @@ -10,11 +10,11 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch the callback helper application so it is in use during the update. - let callbackApp = getApplyDirFile("a/b/" + gCallbackBinFile); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let callbackApp = getApplyDirFile(DIR_RESOURCES + gCallbackBinFile); + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let callbackAppProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -38,7 +38,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageFailureComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageFailureComplete_win.js index d6b42345f81..7c4657e25da 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageFailureComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageFailureComplete_win.js @@ -10,11 +10,11 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, true, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch the callback helper application so it is in use during the update. - let callbackApp = getApplyDirFile("a/b/" + gCallbackBinFile); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let callbackApp = getApplyDirFile(DIR_RESOURCES + gCallbackBinFile); + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let callbackAppProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -39,7 +39,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageSuccessComplete_unix.js b/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageSuccessComplete_unix.js index 0fb96146944..4d20792cfb4 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageSuccessComplete_unix.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseStageSuccessComplete_unix.js @@ -8,8 +8,13 @@ function run_test() { gStageUpdate = true; setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; + gTestFiles[gTestFiles.length - 1].originalContents = null; + gTestFiles[gTestFiles.length - 1].compareContents = "FromComplete\n"; + gTestFiles[gTestFiles.length - 1].comparePerms = 0o644; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); + + createUpdaterINI(false); // For Mac OS X set the last modified time for the root directory to a date in // the past to test that the last modified time is updated on a successful @@ -17,14 +22,32 @@ function run_test() { if (IS_MACOSX) { let now = Date.now(); let yesterday = now - (1000 * 60 * 60 * 24); - let applyToDir = getApplyDirFile(null, true); + let applyToDir = getApplyDirFile(); applyToDir.lastModifiedTime = yesterday; } + if (IS_UNIX) { + removeSymlink(); + createSymlink(); + do_register_cleanup(removeSymlink); + gTestFiles.splice(gTestFiles.length - 3, 0, + { + description : "Readable symlink", + fileName : "link", + relPathDir : DIR_RESOURCES, + originalContents : "test", + compareContents : "test", + originalFile : null, + compareFile : null, + originalPerms : 0o666, + comparePerms : 0o666 + }); + } + // Launch the callback helper application so it is in use during the update - let callbackApp = getApplyDirFile("a/b/" + gCallbackBinFile); + let callbackApp = getApplyDirFile(DIR_RESOURCES + gCallbackBinFile); callbackApp.permissions = PERMS_DIRECTORY; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let callbackAppProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -37,16 +60,14 @@ function run_test() { function doUpdate() { runUpdate(0, STATE_APPLIED, null); - if (IS_MACOSX) { - logTestInfo("testing last modified time on the apply to directory has " + - "changed after a successful update (bug 600098)"); - let now = Date.now(); - let applyToDir = getApplyDirFile(null, true); - let timeDiff = Math.abs(applyToDir.lastModifiedTime - now); - do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); - } + checkFilesAfterUpdateSuccess(getStageDirFile, true, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - checkFilesAfterUpdateSuccess(); + if (IS_WIN || IS_MACOSX) { + // Check that the post update process was not launched when staging an + // update. + do_check_false(getPostUpdateFile(".running").exists()); + } // Switch the application to the staged application that was updated. gStageUpdate = false; @@ -56,20 +77,77 @@ function doUpdate() { }); } +/** + * Checks if the post update binary was properly launched for the platforms that + * support launching post update process. + */ function checkUpdateApplied() { - let applyToDir = getApplyDirFile(); + if (IS_WIN || IS_MACOSX) { + gCheckFunc = finishCheckUpdateApplied; + checkPostUpdateAppLog(); + } else { + finishCheckUpdateApplied(); + } +} + +/** + * Checks if the update has finished and if it has finished performs checks for + * the test. + */ +function finishCheckUpdateApplied() { if (IS_MACOSX) { logTestInfo("testing last modified time on the apply to directory has " + "changed after a successful update (bug 600098)"); let now = Date.now(); + let applyToDir = getApplyDirFile(); let timeDiff = Math.abs(applyToDir.lastModifiedTime - now); do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); setupHelperFinish(); } function checkUpdate() { + if (IS_UNIX) { + checkSymlink(); + } + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); checkCallbackAppLog(); } + +function runHelperProcess(args) { + let helperBin = getTestDirFile(FILE_HELPER_BIN); + let process = AUS_Cc["@mozilla.org/process/util;1"]. + createInstance(AUS_Ci.nsIProcess); + process.init(helperBin); + logTestInfo("Running " + helperBin.path + " " + args.join(" ")); + process.run(true, args, args.length); + do_check_eq(process.exitValue, 0); +} + +function createSymlink() { + let args = ["setup-symlink", "moz-foo", "moz-bar", "target", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link"]; + runHelperProcess(args); + getApplyDirFile(DIR_RESOURCES + "link", false).permissions = 0o666; + + args = ["setup-symlink", "moz-foo2", "moz-bar2", "target2", + getApplyDirFile().path +"/" + DIR_RESOURCES + "link2", "change-perm"]; + runHelperProcess(args); +} + +function removeSymlink() { + let args = ["remove-symlink", "moz-foo", "moz-bar", "target", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link"]; + runHelperProcess(args); + args = ["remove-symlink", "moz-foo2", "moz-bar2", "target2", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link2"]; + runHelperProcess(args); +} + +function checkSymlink() { + let args = ["check-symlink", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link"]; + runHelperProcess(args); +} diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseSuccessComplete.js b/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseSuccessComplete.js index eaa8d5f3922..450720dfa26 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseSuccessComplete.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marAppInUseSuccessComplete.js @@ -8,12 +8,12 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch the callback helper application so it is in use during the update. - let callbackApp = getApplyDirFile("a/b/" + gCallbackBinFile); + let callbackApp = getApplyDirFile(DIR_RESOURCES + gCallbackBinFile); callbackApp.permissions = PERMS_DIRECTORY; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let callbackAppProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -51,11 +51,7 @@ function checkUpdate() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppStageSuccessComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppStageSuccessComplete_win.js index cdfec5b3d73..dd19b8d3ce0 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppStageSuccessComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppStageSuccessComplete_win.js @@ -9,7 +9,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); gCallbackBinFile = "exe0.exe"; @@ -22,6 +22,6 @@ function run_test() { } function checkUpdateApplied() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppStageSuccessPartial_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppStageSuccessPartial_win.js index 2b7621a8c83..7d483381fdc 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppStageSuccessPartial_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppStageSuccessPartial_win.js @@ -9,7 +9,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); gCallbackBinFile = "exe0.exe"; @@ -22,6 +22,6 @@ function run_test() { } function checkUpdateApplied() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppSuccessComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppSuccessComplete_win.js index 3ae75d780cc..d147dd9cef0 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppSuccessComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppSuccessComplete_win.js @@ -8,7 +8,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); gCallbackBinFile = "exe0.exe"; @@ -16,6 +16,6 @@ function run_test() { } function checkUpdateApplied() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppSuccessPartial_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppSuccessPartial_win.js index 5893f9f9ae4..f1f153c562a 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppSuccessPartial_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marCallbackAppSuccessPartial_win.js @@ -8,7 +8,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); gCallbackBinFile = "exe0.exe"; @@ -16,6 +16,6 @@ function run_test() { } function checkUpdateApplied() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFailurePartial.js b/toolkit/mozapps/update/tests/unit_base_updater/marFailurePartial.js index 9be5fb13c4b..98cb9c96b70 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFailurePartial.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFailurePartial.js @@ -11,7 +11,7 @@ function run_test() { gTestFiles[11].originalFile = "partial.png"; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); createUpdaterINI(); @@ -34,7 +34,7 @@ function run_test() { * the test. */ function checkUpdateApplied() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { // Check that the post update process was not launched. do_check_false(getPostUpdateFile(".running").exists()); } @@ -48,11 +48,7 @@ function checkUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateFailure(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_PARTIAL_FAILURE); - } - + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_PARTIAL_FAILURE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseFallbackStageFailureComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseFallbackStageFailureComplete_win.js index 1d05a316e5a..af360e2ae0e 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseFallbackStageFailureComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseFallbackStageFailureComplete_win.js @@ -10,12 +10,12 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[13].relPathDir + gTestFiles[13].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -39,7 +39,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseFallbackStageFailurePartial_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseFallbackStageFailurePartial_win.js index 46511e5ce50..f847be95397 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseFallbackStageFailurePartial_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseFallbackStageFailurePartial_win.js @@ -10,12 +10,12 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[11].relPathDir + gTestFiles[11].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -39,7 +39,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseStageFailureComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseStageFailureComplete_win.js index 76110f2331e..7b417147f56 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseStageFailureComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseStageFailureComplete_win.js @@ -10,12 +10,12 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, true, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[13].relPathDir + gTestFiles[13].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -40,7 +40,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseStageFailurePartial_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseStageFailurePartial_win.js index c1299b0adea..448caf5a35e 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseStageFailurePartial_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseStageFailurePartial_win.js @@ -10,12 +10,12 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, true, false); + setupUpdaterTest(FILE_PARTIAL_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[11].relPathDir + gTestFiles[11].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -40,7 +40,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseSuccessComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseSuccessComplete_win.js index 95bbd162830..83ca06c52e3 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseSuccessComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseSuccessComplete_win.js @@ -8,12 +8,12 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, true); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[13].relPathDir + gTestFiles[13].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -32,7 +32,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, true); checkUpdateLogContains(ERR_BACKUP_DISCARD); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseSuccessPartial_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseSuccessPartial_win.js index b5aafa18f0a..41c856f09ac 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseSuccessPartial_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileInUseSuccessPartial_win.js @@ -8,12 +8,12 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, true); + setupUpdaterTest(FILE_PARTIAL_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[11].relPathDir + gTestFiles[11].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -32,7 +32,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, true); checkUpdateLogContains(ERR_BACKUP_DISCARD); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFailureComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFailureComplete_win.js index 88485a1084e..a785f60b0cd 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFailureComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFailureComplete_win.js @@ -9,19 +9,21 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[3].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[3].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -40,7 +42,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFailurePartial_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFailurePartial_win.js index 45174865f21..6318f4e902c 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFailurePartial_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFailurePartial_win.js @@ -9,19 +9,21 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[2].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[2].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -40,7 +42,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_UNABLE_OPEN_DEST); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFallbackStageFailureComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFallbackStageFailureComplete_win.js index f6acc5e04ec..28e0ebff539 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFallbackStageFailureComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFallbackStageFailureComplete_win.js @@ -10,19 +10,21 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[3].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[3].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -46,7 +48,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFallbackStageFailurePartial_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFallbackStageFailurePartial_win.js index 7656b030bdc..6a73a435ec9 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFallbackStageFailurePartial_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedFallbackStageFailurePartial_win.js @@ -10,19 +10,21 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[2].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[2].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -46,7 +48,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedStageFailureComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedStageFailureComplete_win.js index b4c665d9d8b..4e3ea512a4d 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedStageFailureComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedStageFailureComplete_win.js @@ -10,19 +10,21 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, true, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[3].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[3].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -47,7 +49,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedStageFailurePartial_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedStageFailurePartial_win.js index 074dd5fe2e5..b2b9a4c9323 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedStageFailurePartial_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marFileLockedStageFailurePartial_win.js @@ -10,19 +10,21 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, true, false); + setupUpdaterTest(FILE_PARTIAL_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[2].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[2].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -47,7 +49,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseFallbackStageFailureComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseFallbackStageFailureComplete_win.js index 6aae0cd864f..b197f143e48 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseFallbackStageFailureComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseFallbackStageFailureComplete_win.js @@ -11,7 +11,7 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[4].relPathDir + gTestDirs[4].subDirs[0] + @@ -26,7 +26,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[4].subDirFiles[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -50,7 +50,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseFallbackStageFailurePartial_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseFallbackStageFailurePartial_win.js index 9e991fa6553..77eaeae5faf 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseFallbackStageFailurePartial_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseFallbackStageFailurePartial_win.js @@ -11,7 +11,7 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[2].relPathDir + gTestDirs[2].files[0]); @@ -24,7 +24,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[2].files[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -48,7 +48,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseStageFailureComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseStageFailureComplete_win.js index 96f18810780..d7fa3e7463d 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseStageFailureComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseStageFailureComplete_win.js @@ -11,7 +11,7 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, true, false); + setupUpdaterTest(FILE_COMPLETE_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[4].relPathDir + gTestDirs[4].subDirs[0] + @@ -26,7 +26,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[4].subDirFiles[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -51,7 +51,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseStageFailurePartial_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseStageFailurePartial_win.js index 184345a59df..5c9a520da0f 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseStageFailurePartial_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseStageFailurePartial_win.js @@ -11,7 +11,7 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, true, false); + setupUpdaterTest(FILE_PARTIAL_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[2].relPathDir + gTestDirs[2].files[0]); @@ -24,7 +24,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[2].files[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -49,7 +49,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseSuccessComplete_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseSuccessComplete_win.js index eaa13b7b68e..5d57cb03377 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseSuccessComplete_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseSuccessComplete_win.js @@ -8,7 +8,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, true); + setupUpdaterTest(FILE_COMPLETE_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[4].relPathDir + gTestDirs[4].subDirs[0] + @@ -23,7 +23,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[4].subDirFiles[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -42,7 +42,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, true); checkUpdateLogContains(ERR_BACKUP_DISCARD); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseSuccessPartial_win.js b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseSuccessPartial_win.js index 592ad643c28..da4b3a23bc7 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseSuccessPartial_win.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marRMRFDirFileInUseSuccessPartial_win.js @@ -8,7 +8,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, true); + setupUpdaterTest(FILE_PARTIAL_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[2].relPathDir + gTestDirs[2].files[0]); @@ -21,7 +21,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[2].files[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -40,7 +40,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, true); checkUpdateLogContains(ERR_BACKUP_DISCARD); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marStageFailurePartial.js b/toolkit/mozapps/update/tests/unit_base_updater/marStageFailurePartial.js index 349845484a7..12feb4ab6be 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marStageFailurePartial.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marStageFailurePartial.js @@ -12,7 +12,7 @@ function run_test() { gTestFiles[11].originalFile = "partial.png"; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, true, false); + setupUpdaterTest(FILE_PARTIAL_MAR); createUpdaterINI(true); @@ -34,27 +34,12 @@ function run_test() { * the test. */ function checkUpdateApplied() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { // Check that the post update process was not launched. do_check_false(getPostUpdateFile(".running").exists()); } - if (IS_MACOSX) { - logTestInfo("testing last modified time on the apply to directory has " + - "changed after a successful update (bug 600098)"); - let now = Date.now(); - let applyToDir = getApplyDirFile(); - let timeDiff = Math.abs(applyToDir.lastModifiedTime - now); - do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); - } - - gStageUpdate = false; - checkFilesAfterUpdateFailure(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - gStageUpdate = true; - checkUpdateLogContents(LOG_PARTIAL_FAILURE); - } - + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); + checkUpdateLogContents(LOG_PARTIAL_FAILURE); waitForFilesInUse(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js b/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js index 73f27e7b6e6..40c3f66ba71 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js @@ -5,41 +5,6 @@ /* General Complete MAR File Staged Patch Apply Test */ -function runHelperProcess(args) { - let helperBin = getTestDirFile(FILE_HELPER_BIN); - let process = AUS_Cc["@mozilla.org/process/util;1"]. - createInstance(AUS_Ci.nsIProcess); - process.init(helperBin); - logTestInfo("Running " + helperBin.path + " " + args.join(" ")); - process.run(true, args, args.length); - do_check_eq(process.exitValue, 0); -} - -function createSymlink() { - let args = ["setup-symlink", "moz-foo", "moz-bar", "target", - getApplyDirFile().path + "/a/b/link"]; - runHelperProcess(args); - getApplyDirFile("a/b/link", false).permissions = 0o666; - - args = ["setup-symlink", "moz-foo2", "moz-bar2", "target2", - getApplyDirFile().path + "/a/b/link2", "change-perm"]; - runHelperProcess(args); -} - -function removeSymlink() { - let args = ["remove-symlink", "moz-foo", "moz-bar", "target", - getApplyDirFile().path + "/a/b/link"]; - runHelperProcess(args); - args = ["remove-symlink", "moz-foo2", "moz-bar2", "target2", - getApplyDirFile().path + "/a/b/link2"]; - runHelperProcess(args); -} - -function checkSymlink() { - let args = ["check-symlink", getApplyDirFile().path + "/a/b/link"]; - runHelperProcess(args); -} - function run_test() { gStageUpdate = true; setupTestCommon(); @@ -48,7 +13,7 @@ function run_test() { gTestFiles[gTestFiles.length - 1].compareContents = "FromComplete\n"; gTestFiles[gTestFiles.length - 1].comparePerms = 0o644; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(false); @@ -62,14 +27,17 @@ function run_test() { applyToDir.lastModifiedTime = yesterday; } - if (IS_UNIX) { + // Don't test symlinks on Mac OS X in this test since it tends to timeout. + // It is tested on Mac OS X in marAppInUseStageSuccessComplete_unix.js + if (IS_UNIX && !IS_MACOSX) { removeSymlink(); createSymlink(); do_register_cleanup(removeSymlink); - gTestFiles.push({ + gTestFiles.splice(gTestFiles.length - 3, 0, + { description : "Readable symlink", fileName : "link", - relPathDir : "a/b/", + relPathDir : DIR_RESOURCES, originalContents : "test", compareContents : "test", originalFile : null, @@ -81,22 +49,10 @@ function run_test() { runUpdate(0, STATE_APPLIED, null); - if (IS_MACOSX) { - logTestInfo("testing last modified time on the apply to directory has " + - "changed after a successful update (bug 600098)"); - let now = Date.now(); - let applyToDir = getApplyDirFile(); - let timeDiff = Math.abs(applyToDir.lastModifiedTime - now); - do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); - } + checkFilesAfterUpdateSuccess(getStageDirFile, true, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - } - - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { // Check that the post update process was not launched when staging an // update. do_check_false(getPostUpdateFile(".running").exists()); @@ -115,7 +71,7 @@ function run_test() { * support launching post update process. */ function checkUpdateApplied() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateApplied; checkPostUpdateAppLog(); } else { @@ -137,13 +93,46 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - if (IS_UNIX) { + if (IS_UNIX && !IS_MACOSX) { checkSymlink(); - } else { - // Sorting on Linux is different so skip this check for now. - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); checkCallbackAppLog(); } + +function runHelperProcess(args) { + let helperBin = getTestDirFile(FILE_HELPER_BIN); + let process = AUS_Cc["@mozilla.org/process/util;1"]. + createInstance(AUS_Ci.nsIProcess); + process.init(helperBin); + logTestInfo("Running " + helperBin.path + " " + args.join(" ")); + process.run(true, args, args.length); + do_check_eq(process.exitValue, 0); +} + +function createSymlink() { + let args = ["setup-symlink", "moz-foo", "moz-bar", "target", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link"]; + runHelperProcess(args); + getApplyDirFile(DIR_RESOURCES + "link", false).permissions = 0o666; + + args = ["setup-symlink", "moz-foo2", "moz-bar2", "target2", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link2", "change-perm"]; + runHelperProcess(args); +} + +function removeSymlink() { + let args = ["remove-symlink", "moz-foo", "moz-bar", "target", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link"]; + runHelperProcess(args); + args = ["remove-symlink", "moz-foo2", "moz-bar2", "target2", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link2"]; + runHelperProcess(args); +} + +function checkSymlink() { + let args = ["check-symlink", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link"]; + runHelperProcess(args); +} diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessPartial.js b/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessPartial.js index d05bcf86dae..7a193b06e53 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessPartial.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessPartial.js @@ -13,7 +13,7 @@ function run_test() { gTestFiles[gTestFiles.length - 2].compareContents = "FromPartial\n"; gTestFiles[gTestFiles.length - 2].comparePerms = 0o644; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); createUpdaterINI(false); @@ -29,22 +29,10 @@ function run_test() { runUpdate(0, STATE_APPLIED, null); - if (IS_MACOSX) { - logTestInfo("testing last modified time on the apply to directory has " + - "changed after a successful update (bug 600098)"); - let now = Date.now(); - let applyToDir = getApplyDirFile(); - let timeDiff = Math.abs(applyToDir.lastModifiedTime - now); - do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); - } + checkFilesAfterUpdateSuccess(getStageDirFile, true, false); + checkUpdateLogContents(LOG_PARTIAL_SUCCESS); - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_PARTIAL_SUCCESS); - } - - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { // Check that the post update process was not launched when staging an // update. do_check_false(getPostUpdateFile(".running").exists()); @@ -63,7 +51,7 @@ function run_test() { * support launching post update process. */ function checkUpdateApplied() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateApplied; checkPostUpdateAppLog(); } else { @@ -85,11 +73,7 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_PARTIAL_SUCCESS); - } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_PARTIAL_SUCCESS); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marSuccessComplete.js b/toolkit/mozapps/update/tests/unit_base_updater/marSuccessComplete.js index 64fcd90dbed..10824b7c0a8 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marSuccessComplete.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marSuccessComplete.js @@ -9,7 +9,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(); @@ -31,7 +31,7 @@ function run_test() { * support launching post update process. */ function checkUpdateApplied() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateApplied; checkPostUpdateAppLog(); } else { @@ -53,11 +53,7 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marSuccessPartial.js b/toolkit/mozapps/update/tests/unit_base_updater/marSuccessPartial.js index 511caf9227e..3da7d7ff214 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marSuccessPartial.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marSuccessPartial.js @@ -15,7 +15,7 @@ function run_test() { gTestFiles[gTestFiles.length - 2].compareContents = "FromPartial\n"; gTestFiles[gTestFiles.length - 2].comparePerms = 0o644; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); createUpdaterINI(true); @@ -37,7 +37,7 @@ function run_test() { * support launching post update process. */ function checkUpdateApplied() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateApplied; checkPostUpdateAppLog(); } else { @@ -59,11 +59,7 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_PARTIAL_SUCCESS); - } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_PARTIAL_SUCCESS); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marVersionDowngrade.js b/toolkit/mozapps/update/tests/unit_base_updater/marVersionDowngrade.js index f3693d483b3..0dce2aa5d3c 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marVersionDowngrade.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marVersionDowngrade.js @@ -15,7 +15,7 @@ function run_test() { // application return code and update.status result. gTestFiles = gTestFilesCommon; gTestDirs = []; - setupUpdaterTest(FILE_OLD_VERSION_MAR, false, false); + setupUpdaterTest(FILE_OLD_VERSION_MAR); createUpdaterINI(true); @@ -31,11 +31,11 @@ function run_test() { * the test. */ function checkUpdateApplied() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { // Check that the post update process was not launched. do_check_false(getPostUpdateFile(".running").exists()); } - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); doTestFinish(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marWrongChannel.js b/toolkit/mozapps/update/tests/unit_base_updater/marWrongChannel.js index 9e8c2508990..7552e4ddbbf 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marWrongChannel.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marWrongChannel.js @@ -15,7 +15,7 @@ function run_test() { // application return code and update.status result. gTestFiles = gTestFilesCommon; gTestDirs = []; - setupUpdaterTest(FILE_WRONG_CHANNEL_MAR, false, false); + setupUpdaterTest(FILE_WRONG_CHANNEL_MAR); createUpdaterINI(); @@ -31,11 +31,11 @@ function run_test() { * the test. */ function checkUpdateApplied() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { // Check that the post update process was not launched. do_check_false(getPostUpdateFile(".running").exists()); } - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); doTestFinish(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/bootstrapSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/bootstrapSvc.js index 6bf30d7d45b..ffa207ebbe6 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/bootstrapSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/bootstrapSvc.js @@ -14,7 +14,7 @@ function run_test() { // application return code and update.status result. gTestFiles = gTestFilesCommon; gTestDirs = []; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); setupAppFilesAsync(); } @@ -24,7 +24,7 @@ function setupAppFilesFinished() { } function checkUpdateFinished() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); // We need to check the service log even though this is a bootstrap // because the app bin could be in use by this test by the time the next diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyDirLockedStageFailureSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyDirLockedStageFailureSvc_win.js index 412bababd05..869c3634bec 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyDirLockedStageFailureSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyDirLockedStageFailureSvc_win.js @@ -21,10 +21,14 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(false); + if (IS_WIN) { + Services.prefs.setBoolPref(PREF_APP_UPDATE_SERVICE_ENABLED, true); + } + let channel = Services.prefs.getCharPref(PREF_APP_UPDATE_CHANNEL); let patches = getLocalPatchString(null, null, null, null, null, "true", STATE_PENDING_SVC); @@ -44,6 +48,16 @@ function run_test() { } function setupAppFilesFinished() { + // For Mac OS X set the last modified time for the root directory to a date in + // the past to test that the last modified time is updated on a successful + // update (bug 600098). + if (IS_MACOSX) { + let now = Date.now(); + let yesterday = now - (1000 * 60 * 60 * 24); + let applyToDir = getApplyDirFile(); + applyToDir.lastModifiedTime = yesterday; + } + stageUpdate(); } @@ -71,12 +85,15 @@ function checkUpdateApplied() { } function finishTest() { - if (IS_MACOSX || IS_WIN) { - // Check that the post update process was not launched. - do_check_false(getPostUpdateFile(".running").exists()); + if (IS_WIN || IS_MACOSX) { + let running = getPostUpdateFile(".running"); + logTestInfo("checking that the post update process running file doesn't " + + "exist. Path: " + running.path); + do_check_false(running.exists()); } do_check_eq(readStatusState(), STATE_PENDING); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); unlockDirectory(getAppBaseDir()); waitForFilesInUse(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateAppBinInUseStageSuccessSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateAppBinInUseStageSuccessSvc_win.js index 3a2d49d6ed3..e3c65f6f681 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateAppBinInUseStageSuccessSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateAppBinInUseStageSuccessSvc_win.js @@ -22,7 +22,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(true); @@ -116,14 +116,10 @@ function checkUpdateApplied() { // Don't proceed until the last update log has been created. let log; - if (IS_WIN) { + if (IS_WIN || IS_MACOSX) { log = getUpdatesDir(); } else { - log = getUpdatedDir(); - if (IS_MACOSX) { - log.append("Contents"); - log.append("MacOS"); - } + log = getStageDirFile(null, true); log.append(DIR_UPDATES); } log.append(FILE_LAST_LOG); @@ -137,32 +133,23 @@ function checkUpdateApplied() { return; } - if (IS_MACOSX || IS_WIN) { - // Check that the post update process was not launched when staging an - // update. - do_check_false(getPostUpdateFile(".running").exists()); + if (IS_WIN || IS_MACOSX) { + let running = getPostUpdateFile(".running"); + logTestInfo("checking that the post update process running file doesn't " + + "exist. Path: " + running.path); + do_check_false(running.exists()); } - let updatedDir = getUpdatedDir(); - logTestInfo("testing " + updatedDir.path + " should exist"); - do_check_true(updatedDir.exists()); + checkFilesAfterUpdateSuccess(getStageDirFile, true, false); - // On Windows, make sure not to use the maintenance service for switching - // the app. - if (IS_WIN) { - writeStatusFile(STATE_APPLIED); - do_check_eq(readStatusState(), STATE_APPLIED); - } - - log = getUpdatesDir(); - log.append("0"); + log = getUpdatesPatchDir(); log.append(FILE_UPDATE_LOG); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); log = getUpdatesDir(); log.append(FILE_LAST_LOG); - if (IS_WIN) { + if (IS_WIN || IS_MACOSX) { logTestInfo("testing " + log.path + " should exist"); do_check_true(log.exists()); } else { @@ -175,34 +162,27 @@ function checkUpdateApplied() { logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - let updatesDir = getUpdatedDir(); - if (IS_MACOSX) { - updatesDir.append("Contents"); - updatesDir.append("MacOS"); - } - updatesDir.append("updates"); - log = updatesDir.clone(); - log.append("0"); - log.append(FILE_UPDATE_LOG); + let updatesDir = getStageDirFile(DIR_UPDATES + "/0", true); + logTestInfo("testing " + updatesDir.path + " shouldn't exist"); + do_check_false(updatesDir.exists()); + + log = getStageDirFile(DIR_UPDATES + "/0/" + FILE_UPDATE_LOG, true); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - if (!IS_WIN) { - log = updatesDir.clone(); - log.append(FILE_LAST_LOG); + log = getStageDirFile(DIR_UPDATES + "/" + FILE_LAST_LOG, true); + if (IS_WIN || IS_MACOSX) { + logTestInfo("testing " + log.path + " shouldn't exist"); + do_check_false(log.exists()); + } else { logTestInfo("testing " + log.path + " should exist"); do_check_true(log.exists()); } - log = updatesDir.clone(); - log.append(FILE_BACKUP_LOG); + log = getStageDirFile(DIR_UPDATES + "/" + FILE_BACKUP_LOG, true); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - updatesDir.append("0"); - logTestInfo("testing " + updatesDir.path + " shouldn't exist"); - do_check_false(updatesDir.exists()); - // Switch the application to the staged application that was updated by // launching the application. do_timeout(TEST_CHECK_TIMEOUT, launchAppToApplyUpdate); @@ -213,7 +193,7 @@ function checkUpdateApplied() { * support launching post update process. */ function checkUpdateFinished() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateFinished; checkPostUpdateAppLog(); } else { @@ -243,7 +223,7 @@ function finishCheckUpdateFinished() { // Don't proceed until the application was switched out with the staged update // successfully. - let updatedDir = getUpdatedDir(); + let updatedDir = getStageDirFile(null, true); if (updatedDir.exists()) { if (gTimeoutRuns > MAX_TIMEOUT_RUNS) { do_throw("Exceeded while waiting for updated dir to not exist. Path: " + @@ -282,26 +262,30 @@ function finishCheckUpdateFinished() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); + if (IS_WIN || IS_MACOSX) { + let running = getPostUpdateFile(".running"); + logTestInfo("checking that the post update process running file exists. " + + "Path: " + running.path); + do_check_true(running.exists()); } + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); checkCallbackAppLog(); - let log = getUpdatesDir(); - log.append("0"); + standardInit(); + + let update = gUpdateManager.getUpdateAt(0); + do_check_eq(update.state, STATE_SUCCEEDED); + + let updatesDir = getUpdatesPatchDir(); + logTestInfo("testing " + updatesDir.path + " should exist"); + do_check_true(updatesDir.exists()); + + let log = getUpdatesPatchDir(); log.append(FILE_UPDATE_LOG); - if (IS_WIN) { - // On Windows, this log file is written to the AppData directory, and will - // therefore exist. - logTestInfo("testing " + log.path + " should exist"); - do_check_true(log.exists()); - } else { - logTestInfo("testing " + log.path + " shouldn't exist"); - do_check_false(log.exists()); - } + logTestInfo("testing " + log.path + " shouldn't exist"); + do_check_false(log.exists()); log = getUpdatesDir(); log.append(FILE_LAST_LOG); @@ -310,13 +294,8 @@ function finishCheckUpdateFinished() { log = getUpdatesDir(); log.append(FILE_BACKUP_LOG); - logTestInfo("testing " + log.path + " shouldn't exist"); - do_check_false(log.exists()); - - let updatesDir = getUpdatesDir(); - updatesDir.append("0"); - logTestInfo("testing " + updatesDir.path + " should exist"); - do_check_true(updatesDir.exists()); + logTestInfo("testing " + log.path + " should exist"); + do_check_true(log.exists()); waitForFilesInUse(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateStageSuccessSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateStageSuccessSvc.js index 73e69b687a7..a75131b2db7 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateStageSuccessSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateStageSuccessSvc.js @@ -20,7 +20,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(false); @@ -91,14 +91,10 @@ function checkUpdateApplied() { // Don't proceed until the last update log has been created. let log; - if (IS_WIN) { + if (IS_WIN || IS_MACOSX) { log = getUpdatesDir(); } else { - log = getUpdatedDir(); - if (IS_MACOSX) { - log.append("Contents"); - log.append("MacOS"); - } + log = getStageDirFile(null, true); log.append(DIR_UPDATES); } log.append(FILE_LAST_LOG); @@ -112,25 +108,23 @@ function checkUpdateApplied() { return; } - if (IS_MACOSX || IS_WIN) { - // Check that the post update process was not launched when staging an - // update. - do_check_false(getPostUpdateFile(".running").exists()); + if (IS_WIN || IS_MACOSX) { + let running = getPostUpdateFile(".running"); + logTestInfo("checking that the post update process running file doesn't " + + "exist. Path: " + running.path); + do_check_false(running.exists()); } - let updatedDir = getUpdatedDir(); - logTestInfo("testing " + updatedDir.path + " should exist"); - do_check_true(updatedDir.exists()); + checkFilesAfterUpdateSuccess(getStageDirFile, true, false); - log = getUpdatesDir(); - log.append("0"); + log = getUpdatesPatchDir(); log.append(FILE_UPDATE_LOG); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); log = getUpdatesDir(); log.append(FILE_LAST_LOG); - if (IS_WIN) { + if (IS_WIN || IS_MACOSX) { logTestInfo("testing " + log.path + " should exist"); do_check_true(log.exists()); } else { @@ -143,41 +137,27 @@ function checkUpdateApplied() { logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - let updatesDir = getUpdatedDir(); - if (IS_MACOSX) { - updatesDir.append("Contents"); - updatesDir.append("MacOS"); - } - updatesDir.append("updates"); - log = updatesDir.clone(); - log.append("0"); - log.append(FILE_UPDATE_LOG); + let updatesDir = getStageDirFile(DIR_UPDATES + "/0", true); + logTestInfo("testing " + updatesDir.path + " shouldn't exist"); + do_check_false(updatesDir.exists()); + + log = getStageDirFile(DIR_UPDATES + "/0/" + FILE_UPDATE_LOG, true); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - if (!IS_WIN) { - log = updatesDir.clone(); - log.append(FILE_LAST_LOG); + log = getStageDirFile(DIR_UPDATES + "/" + FILE_LAST_LOG, true); + if (IS_WIN || IS_MACOSX) { + logTestInfo("testing " + log.path + " shouldn't exist"); + do_check_false(log.exists()); + } else { logTestInfo("testing " + log.path + " should exist"); do_check_true(log.exists()); } - log = updatesDir.clone(); - log.append(FILE_BACKUP_LOG); + log = getStageDirFile(DIR_UPDATES + "/" + FILE_BACKUP_LOG, true); logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - updatesDir.append("0"); - logTestInfo("testing " + updatesDir.path + " shouldn't exist"); - do_check_false(updatesDir.exists()); - - // On Windows, make sure not to use the maintenance service for switching - // the app. - if (IS_WIN) { - writeStatusFile(STATE_APPLIED); - do_check_eq(readStatusState(), STATE_APPLIED); - } - // Switch the application to the staged application that was updated by // launching the application. do_timeout(TEST_CHECK_TIMEOUT, launchAppToApplyUpdate); @@ -188,7 +168,7 @@ function checkUpdateApplied() { * support launching post update process. */ function checkUpdateFinished() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateApplied; checkPostUpdateAppLog(); } else { @@ -217,7 +197,7 @@ function finishCheckUpdateApplied() { // Don't proceed until the application was switched out with the staged update // successfully. - let updatedDir = getUpdatedDir(); + let updatedDir = getStageDirFile(null, true); if (updatedDir.exists()) { if (gTimeoutRuns > MAX_TIMEOUT_RUNS) { do_throw("Exceeded while waiting for updated dir to not exist. Path: " + @@ -256,27 +236,32 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - gSwitchApp = true; - checkUpdateLogContents(); + if (IS_WIN || IS_MACOSX) { + let running = getPostUpdateFile(".running"); + logTestInfo("checking that the post update process running file exists. " + + "Path: " + running.path); + do_check_true(running.exists()); } + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + gSwitchApp = true; + checkUpdateLogContents(); + gSwitchApp = false; checkCallbackAppLog(); - let log = getUpdatesDir(); - log.append("0"); + standardInit(); + + let update = gUpdateManager.getUpdateAt(0); + do_check_eq(update.state, STATE_SUCCEEDED); + + let updatesDir = getUpdatesPatchDir(); + logTestInfo("testing " + updatesDir.path + " should exist"); + do_check_true(updatesDir.exists()); + + let log = getUpdatesPatchDir(); log.append(FILE_UPDATE_LOG); - if (IS_WIN) { - // On Windows, this log file is written to the AppData directory, and will - // therefore exist. - logTestInfo("testing " + log.path + " should exist"); - do_check_true(log.exists()); - } else { - logTestInfo("testing " + log.path + " shouldn't exist"); - do_check_false(log.exists()); - } + logTestInfo("testing " + log.path + " shouldn't exist"); + do_check_false(log.exists()); log = getUpdatesDir(); log.append(FILE_LAST_LOG); @@ -285,13 +270,13 @@ function finishCheckUpdateApplied() { log = getUpdatesDir(); log.append(FILE_BACKUP_LOG); - logTestInfo("testing " + log.path + " shouldn't exist"); - do_check_false(log.exists()); - - let updatesDir = getUpdatesDir(); - updatesDir.append("0"); - logTestInfo("testing " + updatesDir.path + " should exist"); - do_check_true(updatesDir.exists()); + if (IS_WIN || IS_MACOSX) { + logTestInfo("testing " + log.path + " should exist"); + do_check_true(log.exists()); + } else { + logTestInfo("testing " + log.path + " shouldn't exist"); + do_check_false(log.exists()); + } waitForFilesInUse(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateSuccessSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateSuccessSvc.js index 15e6e669d8a..e324966f39a 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateSuccessSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marAppApplyUpdateSuccessSvc.js @@ -20,7 +20,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(); @@ -56,7 +56,7 @@ function setupAppFilesFinished() { * support launching post update process. */ function checkUpdateFinished() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateFinished; checkPostUpdateAppLog(); } else { @@ -124,12 +124,8 @@ function finishCheckUpdateFinished() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); checkCallbackAppLog(); standardInit(); @@ -137,6 +133,10 @@ function finishCheckUpdateFinished() { let update = gUpdateManager.getUpdateAt(0); do_check_eq(update.state, STATE_SUCCEEDED); + let updatesPatchDir = getUpdatesPatchDir(); + logTestInfo("testing " + updatesPatchDir.path + " should exist"); + do_check_true(updatesPatchDir.exists()); + log = getUpdatesPatchDir(); log.append(FILE_UPDATE_LOG); logTestInfo("testing " + log.path + " shouldn't exist"); @@ -152,9 +152,5 @@ function finishCheckUpdateFinished() { logTestInfo("testing " + log.path + " shouldn't exist"); do_check_false(log.exists()); - let updatesPatchDir = getUpdatesPatchDir(); - logTestInfo("testing " + updatesPatchDir.path + " should exist"); - do_check_true(updatesPatchDir.exists()); - waitForFilesInUse(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseFallbackStageFailureCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseFallbackStageFailureCompleteSvc_win.js index 80344dbcef0..dc3dcc81086 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseFallbackStageFailureCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseFallbackStageFailureCompleteSvc_win.js @@ -14,11 +14,11 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch the callback helper application so it is in use during the update. - let callbackApp = getApplyDirFile("a/b/" + gCallbackBinFile); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let callbackApp = getApplyDirFile(DIR_RESOURCES + gCallbackBinFile); + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let callbackAppProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -48,7 +48,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseStageFailureCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseStageFailureCompleteSvc_win.js index 53e7496b325..1d5d3c516b4 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseStageFailureCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseStageFailureCompleteSvc_win.js @@ -14,11 +14,11 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, true, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch the callback helper application so it is in use during the update. - let callbackApp = getApplyDirFile("a/b/" + gCallbackBinFile); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let callbackApp = getApplyDirFile(DIR_RESOURCES + gCallbackBinFile); + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let callbackAppProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -49,7 +49,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseSuccessCompleteSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseSuccessCompleteSvc.js index 4e4e587c29a..552fd2d953d 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseSuccessCompleteSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marAppInUseSuccessCompleteSvc.js @@ -12,12 +12,12 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch the callback helper application so it is in use during the update. - let callbackApp = getApplyDirFile("a/b/" + gCallbackBinFile); + let callbackApp = getApplyDirFile(DIR_RESOURCES + gCallbackBinFile); callbackApp.permissions = PERMS_DIRECTORY; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let callbackAppProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -59,11 +59,7 @@ function checkUpdate() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); checkCallbackServiceLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppStageSuccessCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppStageSuccessCompleteSvc_win.js index 6123b300fda..c698b885b7e 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppStageSuccessCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppStageSuccessCompleteSvc_win.js @@ -13,7 +13,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); gCallbackBinFile = "exe0.exe"; @@ -32,6 +32,6 @@ function checkUpdateFinished() { } function checkUpdateApplied() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppStageSuccessPartialSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppStageSuccessPartialSvc_win.js index f81680c61d9..ab1d753e489 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppStageSuccessPartialSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppStageSuccessPartialSvc_win.js @@ -13,7 +13,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); gCallbackBinFile = "exe0.exe"; @@ -32,6 +32,6 @@ function checkUpdateFinished() { } function checkUpdateApplied() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppSuccessCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppSuccessCompleteSvc_win.js index bc8ccbfb14d..c09ac63fc86 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppSuccessCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppSuccessCompleteSvc_win.js @@ -12,7 +12,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); gCallbackBinFile = "exe0.exe"; @@ -24,6 +24,6 @@ function setupAppFilesFinished() { } function checkUpdateFinished() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); checkCallbackServiceLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppSuccessPartialSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppSuccessPartialSvc_win.js index 57f11773979..639743f3c3a 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppSuccessPartialSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marCallbackAppSuccessPartialSvc_win.js @@ -12,7 +12,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); gCallbackBinFile = "exe0.exe"; @@ -24,6 +24,6 @@ function setupAppFilesFinished() { } function checkUpdateFinished() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); checkCallbackServiceLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFailurePartialSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/marFailurePartialSvc.js index cde917a1696..525ded0aa06 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFailurePartialSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFailurePartialSvc.js @@ -15,7 +15,7 @@ function run_test() { gTestFiles[11].originalFile = "partial.png"; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); createUpdaterINI(); @@ -41,11 +41,6 @@ function setupAppFilesFinished() { * the test. */ function checkUpdateFinished() { - if (IS_MACOSX || IS_WIN) { - // Check that the post update process was not launched. - do_check_false(getPostUpdateFile(".running").exists()); - } - if (IS_MACOSX) { logTestInfo("testing last modified time on the apply to directory has " + "changed after a successful update (bug 600098)"); @@ -55,11 +50,14 @@ function checkUpdateFinished() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateFailure(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_PARTIAL_FAILURE); + if (IS_WIN || IS_MACOSX) { + let running = getPostUpdateFile(".running"); + logTestInfo("checking that the post update process running file doesn't " + + "exist. Path: " + running.path); + do_check_false(running.exists()); } + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_PARTIAL_FAILURE); checkCallbackServiceLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseFallbackStageFailureCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseFallbackStageFailureCompleteSvc_win.js index fd1a412cbf7..2fa86e79887 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseFallbackStageFailureCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseFallbackStageFailureCompleteSvc_win.js @@ -14,12 +14,12 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[13].relPathDir + gTestFiles[13].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -49,7 +49,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseFallbackStageFailurePartialSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseFallbackStageFailurePartialSvc_win.js index 5096880c29e..1463df65be0 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseFallbackStageFailurePartialSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseFallbackStageFailurePartialSvc_win.js @@ -14,12 +14,12 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[11].relPathDir + gTestFiles[11].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -49,7 +49,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseStageFailureCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseStageFailureCompleteSvc_win.js index 59c32e8f817..f8c7a6a5808 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseStageFailureCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseStageFailureCompleteSvc_win.js @@ -14,12 +14,12 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, true, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[13].relPathDir + gTestFiles[13].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -50,7 +50,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseStageFailurePartialSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseStageFailurePartialSvc_win.js index 6f556d8b12a..a52aa937d85 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseStageFailurePartialSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseStageFailurePartialSvc_win.js @@ -14,12 +14,12 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, true, false); + setupUpdaterTest(FILE_PARTIAL_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[11].relPathDir + gTestFiles[11].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -50,7 +50,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseSuccessCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseSuccessCompleteSvc_win.js index 5e857aa51b2..a535ac0c6a6 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseSuccessCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseSuccessCompleteSvc_win.js @@ -12,12 +12,12 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, true); + setupUpdaterTest(FILE_COMPLETE_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[13].relPathDir + gTestFiles[13].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -40,7 +40,7 @@ function checkUpdateFinished() { } function checkUpdate() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, true); checkUpdateLogContains(ERR_BACKUP_DISCARD); checkCallbackServiceLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseSuccessPartialSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseSuccessPartialSvc_win.js index f657a5ae41d..68ffdff58dc 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseSuccessPartialSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileInUseSuccessPartialSvc_win.js @@ -12,12 +12,12 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, true); + setupUpdaterTest(FILE_PARTIAL_MAR); // Launch an existing file so it is in use during the update. let fileInUseBin = getApplyDirFile(gTestFiles[11].relPathDir + gTestFiles[11].fileName); - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -40,7 +40,7 @@ function checkUpdateFinished() { } function checkUpdate() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, true); checkUpdateLogContains(ERR_BACKUP_DISCARD); checkCallbackServiceLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFailureCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFailureCompleteSvc_win.js index 0d3e2803320..ed22b1d4803 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFailureCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFailureCompleteSvc_win.js @@ -13,19 +13,21 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[3].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[3].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -48,7 +50,7 @@ function checkUpdateFinished() { } function checkUpdate() { - checkFilesAfterUpdateFailure(); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackServiceLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFailurePartialSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFailurePartialSvc_win.js index 6ca66144dab..d4562a9e2ae 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFailurePartialSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFailurePartialSvc_win.js @@ -13,19 +13,21 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[2].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[2].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -48,7 +50,7 @@ function checkUpdateFinished() { } function checkUpdate() { - checkFilesAfterUpdateFailure(); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_UNABLE_OPEN_DEST); checkCallbackServiceLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFallbackStageFailureCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFallbackStageFailureCompleteSvc_win.js index 1df9d5941d3..7612db3874b 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFallbackStageFailureCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFallbackStageFailureCompleteSvc_win.js @@ -14,19 +14,21 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[3].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[3].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -56,7 +58,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFallbackStageFailurePartialSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFallbackStageFailurePartialSvc_win.js index 1bcd57ad4e3..366bb3632eb 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFallbackStageFailurePartialSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedFallbackStageFailurePartialSvc_win.js @@ -14,19 +14,21 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[2].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[2].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -56,7 +58,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedStageFailureCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedStageFailureCompleteSvc_win.js index 81f08de4924..4600150eb01 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedStageFailureCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedStageFailureCompleteSvc_win.js @@ -14,19 +14,21 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, true, false); + setupUpdaterTest(FILE_COMPLETE_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[3].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[3].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -57,7 +59,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedStageFailurePartialSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedStageFailurePartialSvc_win.js index 6471ee2cd28..6b318375a2f 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedStageFailurePartialSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marFileLockedStageFailurePartialSvc_win.js @@ -14,19 +14,21 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, true, false); + setupUpdaterTest(FILE_PARTIAL_MAR); // Exclusively lock an existing file so it is in use during the update. let helperBin = getTestDirFile(FILE_HELPER_BIN); - let helperDestDir = getApplyDirFile("a/b/"); + let helperDestDir = getApplyDirFile(DIR_RESOURCES); helperBin.copyTo(helperDestDir, FILE_HELPER_BIN); - helperBin = getApplyDirFile("a/b/" + FILE_HELPER_BIN); + helperBin = getApplyDirFile(DIR_RESOURCES + FILE_HELPER_BIN); // Strip off the first two directories so the path has to be from the helper's // working directory. let lockFileRelPath = gTestFiles[2].relPathDir.split("/"); - lockFileRelPath = lockFileRelPath.slice(2); + if (IS_MACOSX) { + lockFileRelPath = lockFileRelPath.slice(2); + } lockFileRelPath = lockFileRelPath.join("/") + "/" + gTestFiles[2].fileName; - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT, lockFileRelPath]; let lockFileProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -57,7 +59,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseFallbackStageFailureCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseFallbackStageFailureCompleteSvc_win.js index ee3461bf9fd..f6729e06a11 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseFallbackStageFailureCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseFallbackStageFailureCompleteSvc_win.js @@ -15,7 +15,7 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[4].relPathDir + gTestDirs[4].subDirs[0] + @@ -30,7 +30,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[4].subDirFiles[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -60,7 +60,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseFallbackStageFailurePartialSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseFallbackStageFailurePartialSvc_win.js index e61ea57ade5..176b55ba57e 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseFallbackStageFailurePartialSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseFallbackStageFailurePartialSvc_win.js @@ -15,7 +15,7 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[2].relPathDir + gTestDirs[2].files[0]); @@ -28,7 +28,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[2].files[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -58,7 +58,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, false, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseStageFailureCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseStageFailureCompleteSvc_win.js index 0e0a04c0804..a63644cfa4e 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseStageFailureCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseStageFailureCompleteSvc_win.js @@ -15,7 +15,7 @@ function run_test() { gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_COMPLETE_MAR, true, false); + setupUpdaterTest(FILE_COMPLETE_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[4].relPathDir + gTestDirs[4].subDirs[0] + @@ -30,7 +30,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[4].subDirFiles[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -61,7 +61,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseStageFailurePartialSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseStageFailurePartialSvc_win.js index 69d4a70c536..cc8067c8f08 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseStageFailurePartialSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseStageFailurePartialSvc_win.js @@ -15,7 +15,7 @@ function run_test() { gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, true, false); + setupUpdaterTest(FILE_PARTIAL_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[2].relPathDir + gTestDirs[2].files[0]); @@ -28,7 +28,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[2].files[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -59,7 +59,7 @@ function checkUpdateApplied() { } function checkUpdate() { - checkFilesAfterUpdateFailure(getApplyDirFile); + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); checkUpdateLogContains(ERR_RENAME_FILE); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseSuccessCompleteSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseSuccessCompleteSvc_win.js index d1e8e2f07e3..3d042a672e8 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseSuccessCompleteSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseSuccessCompleteSvc_win.js @@ -12,7 +12,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, true); + setupUpdaterTest(FILE_COMPLETE_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[4].relPathDir + gTestDirs[4].subDirs[0] + @@ -27,7 +27,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[4].subDirFiles[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -50,7 +50,7 @@ function checkUpdateFinished() { } function checkUpdate() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, true); checkUpdateLogContains(ERR_BACKUP_DISCARD); checkCallbackServiceLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseSuccessPartialSvc_win.js b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseSuccessPartialSvc_win.js index 9cf920911f4..b62c2af4f7a 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseSuccessPartialSvc_win.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marRMRFDirFileInUseSuccessPartialSvc_win.js @@ -12,7 +12,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesPartialSuccess; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, true); + setupUpdaterTest(FILE_PARTIAL_MAR); let fileInUseBin = getApplyDirFile(gTestDirs[2].relPathDir + gTestDirs[2].files[0]); @@ -25,7 +25,7 @@ function run_test() { helperBin.copyTo(fileInUseDir, gTestDirs[2].files[0]); // Launch an existing file so it is in use during the update. - let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", + let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s", HELPER_SLEEP_TIMEOUT]; let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"]. createInstance(AUS_Ci.nsIProcess); @@ -48,7 +48,7 @@ function checkUpdateFinished() { } function checkUpdate() { - checkFilesAfterUpdateSuccess(); + checkFilesAfterUpdateSuccess(getApplyDirFile, false, true); checkUpdateLogContains(ERR_BACKUP_DISCARD); checkCallbackServiceLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marStageFailurePartialSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/marStageFailurePartialSvc.js index 6cc3bc1d091..71500f69fa7 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marStageFailurePartialSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marStageFailurePartialSvc.js @@ -16,7 +16,7 @@ function run_test() { gTestFiles[11].originalFile = "partial.png"; gTestDirs = gTestDirsPartialSuccess; setTestFilesAndDirsForFailure(); - setupUpdaterTest(FILE_PARTIAL_MAR, true, false); + setupUpdaterTest(FILE_PARTIAL_MAR); createUpdaterINI(true); @@ -42,27 +42,14 @@ function setupAppFilesFinished() { * the test. */ function checkUpdateFinished() { - if (IS_MACOSX || IS_WIN) { - // Check that the post update process was not launched. - do_check_false(getPostUpdateFile(".running").exists()); - } - - if (IS_MACOSX) { - logTestInfo("testing last modified time on the apply to directory has " + - "changed after a successful update (bug 600098)"); - let now = Date.now(); - let applyToDir = getApplyDirFile(); - let timeDiff = Math.abs(applyToDir.lastModifiedTime - now); - do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); - } - - gStageUpdate = false; - checkFilesAfterUpdateFailure(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - gStageUpdate = true; - checkUpdateLogContents(LOG_PARTIAL_FAILURE); + if (IS_WIN || IS_MACOSX) { + let running = getPostUpdateFile(".running"); + logTestInfo("checking that the post update process running file doesn't " + + "exist. Path: " + running.path); + do_check_false(running.exists()); } + checkFilesAfterUpdateFailure(getApplyDirFile, true, false); + checkUpdateLogContents(LOG_PARTIAL_FAILURE); waitForFilesInUse(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js index 1d98e93ca59..7f797883b63 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js @@ -5,41 +5,6 @@ /* General Complete MAR File Staged Patch Apply Test */ -function runHelperProcess(args) { - let helperBin = getTestDirFile(FILE_HELPER_BIN); - let process = AUS_Cc["@mozilla.org/process/util;1"]. - createInstance(AUS_Ci.nsIProcess); - process.init(helperBin); - logTestInfo("Running " + helperBin.path + " " + args.join(" ")); - process.run(true, args, args.length); - do_check_eq(process.exitValue, 0); -} - -function createSymlink() { - let args = ["setup-symlink", "moz-foo", "moz-bar", "target", - getApplyDirFile().path + "/a/b/link"]; - runHelperProcess(args); - getApplyDirFile("a/b/link", false).permissions = 0o666; - - args = ["setup-symlink", "moz-foo2", "moz-bar2", "target2", - getApplyDirFile().path + "/a/b/link2", "change-perm"]; - runHelperProcess(args); -} - -function removeSymlink() { - let args = ["remove-symlink", "moz-foo", "moz-bar", "target", - getApplyDirFile().path + "/a/b/link"]; - runHelperProcess(args); - args = ["remove-symlink", "moz-foo2", "moz-bar2", "target2", - getApplyDirFile().path + "/a/b/link2"]; - runHelperProcess(args); -} - -function checkSymlink() { - let args = ["check-symlink", getApplyDirFile().path + "/a/b/link"]; - runHelperProcess(args); -} - function run_test() { if (!shouldRunServiceTest()) { return; @@ -52,7 +17,7 @@ function run_test() { gTestFiles[gTestFiles.length - 1].compareContents = "FromComplete\n"; gTestFiles[gTestFiles.length - 1].comparePerms = 0o644; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(false); @@ -66,14 +31,17 @@ function run_test() { applyToDir.lastModifiedTime = yesterday; } - if (IS_UNIX) { + // Don't test symlinks on Mac OS X in this test since it tends to timeout. + // It is tested on Mac OS X in marAppInUseStageSuccessComplete_unix.js + if (IS_UNIX && !IS_MACOSX) { removeSymlink(); createSymlink(); do_register_cleanup(removeSymlink); - gTestFiles.push({ + gTestFiles.splice(gTestFiles.length - 3, 0, + { description : "Readable symlink", fileName : "link", - relPathDir : "a/b/", + relPathDir : DIR_RESOURCES, originalContents : "test", compareContents : "test", originalFile : null, @@ -91,31 +59,22 @@ function setupAppFilesFinished() { } function checkUpdateFinished() { - if (IS_MACOSX) { - logTestInfo("testing last modified time on the apply to directory has " + - "changed after a successful update (bug 600098)"); - let now = Date.now(); - let applyToDir = getApplyDirFile(); - let timeDiff = Math.abs(applyToDir.lastModifiedTime - now); - do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); - } + checkFilesAfterUpdateSuccess(getStageDirFile, true, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - } - - if (IS_MACOSX || IS_WIN) { - // Check that the post update process was not launched when staging an - // update. - do_check_false(getPostUpdateFile(".running").exists()); + if (IS_WIN || IS_MACOSX) { + let running = getPostUpdateFile(".running"); + logTestInfo("checking that the post update process running file doesn't " + + "exist. Path: " + running.path); + do_check_false(running.exists()); } // Switch the application to the staged application that was updated. gStageUpdate = false; gSwitchApp = true; - runUpdate(0, STATE_SUCCEEDED); + do_timeout(TEST_CHECK_TIMEOUT, function() { + runUpdate(0, STATE_SUCCEEDED); + }); } /** @@ -123,7 +82,7 @@ function checkUpdateFinished() { * support launching post update process. */ function checkUpdateApplied() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateApplied; checkPostUpdateAppLog(); } else { @@ -145,13 +104,53 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - if (IS_UNIX) { - checkSymlink(); - } else { - // Sorting on Linux is different so skip this check for now. - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); + if (IS_WIN || IS_MACOSX) { + let running = getPostUpdateFile(".running"); + logTestInfo("checking that the post update process running file exists. " + + "Path: " + running.path); + do_check_true(running.exists()); } + if (IS_UNIX && !IS_MACOSX) { + checkSymlink(); + } + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); checkCallbackAppLog(); } + +function runHelperProcess(args) { + let helperBin = getTestDirFile(FILE_HELPER_BIN); + let process = AUS_Cc["@mozilla.org/process/util;1"]. + createInstance(AUS_Ci.nsIProcess); + process.init(helperBin); + logTestInfo("Running " + helperBin.path + " " + args.join(" ")); + process.run(true, args, args.length); + do_check_eq(process.exitValue, 0); +} + +function createSymlink() { + let args = ["setup-symlink", "moz-foo", "moz-bar", "target", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link"]; + runHelperProcess(args); + getApplyDirFile(DIR_RESOURCES + "link", false).permissions = 0o666; + + args = ["setup-symlink", "moz-foo2", "moz-bar2", "target2", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link2", "change-perm"]; + runHelperProcess(args); +} + +function removeSymlink() { + let args = ["remove-symlink", "moz-foo", "moz-bar", "target", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link"]; + runHelperProcess(args); + args = ["remove-symlink", "moz-foo2", "moz-bar2", "target2", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link2"]; + runHelperProcess(args); +} + +function checkSymlink() { + let args = ["check-symlink", + getApplyDirFile().path + "/" + DIR_RESOURCES + "link"]; + runHelperProcess(args); +} diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessPartialSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessPartialSvc.js index b35334f54a3..90383e32939 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessPartialSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessPartialSvc.js @@ -17,7 +17,7 @@ function run_test() { gTestFiles[gTestFiles.length - 2].compareContents = "FromPartial\n"; gTestFiles[gTestFiles.length - 2].comparePerms = 0o644; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); createUpdaterINI(false); @@ -39,31 +39,22 @@ function setupAppFilesFinished() { } function checkUpdateFinished() { - if (IS_MACOSX) { - logTestInfo("testing last modified time on the apply to directory has " + - "changed after a successful update (bug 600098)"); - let now = Date.now(); - let applyToDir = getApplyDirFile(); - let timeDiff = Math.abs(applyToDir.lastModifiedTime - now); - do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); - } + checkFilesAfterUpdateSuccess(getStageDirFile, true, false); + checkUpdateLogContents(LOG_PARTIAL_SUCCESS); - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_PARTIAL_SUCCESS); - } - - if (IS_MACOSX || IS_WIN) { - // Check that the post update process was not launched when staging an - // update. - do_check_false(getPostUpdateFile(".running").exists()); + if (IS_WIN || IS_MACOSX) { + let running = getPostUpdateFile(".running"); + logTestInfo("checking that the post update process running file doesn't " + + "exist. Path: " + running.path); + do_check_false(running.exists()); } // Switch the application to the staged application that was updated. gStageUpdate = false; gSwitchApp = true; - runUpdate(0, STATE_SUCCEEDED); + do_timeout(TEST_CHECK_TIMEOUT, function() { + runUpdate(0, STATE_SUCCEEDED); + }); } /** @@ -71,7 +62,7 @@ function checkUpdateFinished() { * support launching post update process. */ function checkUpdateApplied() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateApplied; checkPostUpdateAppLog(); } else { @@ -93,11 +84,14 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_PARTIAL_SUCCESS); + if (IS_WIN || IS_MACOSX) { + let running = getPostUpdateFile(".running"); + logTestInfo("checking that the post update process running file exists. " + + "Path: " + running.path); + do_check_true(running.exists()); } + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_PARTIAL_SUCCESS); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marSuccessCompleteSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/marSuccessCompleteSvc.js index f5ae59db450..ef953bf3714 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marSuccessCompleteSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marSuccessCompleteSvc.js @@ -13,7 +13,7 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; - setupUpdaterTest(FILE_COMPLETE_MAR, false, false); + setupUpdaterTest(FILE_COMPLETE_MAR); createUpdaterINI(); @@ -39,7 +39,7 @@ function setupAppFilesFinished() { * support launching post update process. */ function checkUpdateFinished() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateFinished; checkPostUpdateAppLog(); } else { @@ -61,11 +61,7 @@ function finishCheckUpdateFinished() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); - } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS); checkCallbackServiceLog(); } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marSuccessPartialSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/marSuccessPartialSvc.js index 5fa726a5cff..c8cc76930b1 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marSuccessPartialSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marSuccessPartialSvc.js @@ -19,7 +19,7 @@ function run_test() { gTestFiles[gTestFiles.length - 2].compareContents = "FromPartial\n"; gTestFiles[gTestFiles.length - 2].comparePerms = 0o644; gTestDirs = gTestDirsPartialSuccess; - setupUpdaterTest(FILE_PARTIAL_MAR, false, false); + setupUpdaterTest(FILE_PARTIAL_MAR); createUpdaterINI(true); @@ -45,7 +45,7 @@ function setupAppFilesFinished() { * support launching post update process. */ function checkUpdateFinished() { - if (IS_MACOSX || IS_WIN) { + if (IS_WIN || IS_MACOSX) { gCheckFunc = finishCheckUpdateFinished; checkPostUpdateAppLog(); } else { @@ -67,11 +67,7 @@ function finishCheckUpdateFinished() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } - checkFilesAfterUpdateSuccess(); - // Sorting on Linux is different so skip this check for now. - if (!IS_UNIX) { - checkUpdateLogContents(LOG_PARTIAL_SUCCESS); - } - + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); + checkUpdateLogContents(LOG_PARTIAL_SUCCESS); checkCallbackServiceLog(); } From 1b2658d18f11c9b54cf6c9adff230aedec168bc8 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:52:18 -0700 Subject: [PATCH 26/60] Mac v2 signing - Bug 1068439 - Move the distribution directory from Content/MacOS to Contents/Resources on app update due to v2 signing requirements. r=spohl --- .../tests/unit_aus_update/head_update.js | 90 ++++++------------- .../marStageSuccessComplete.js | 20 +++++ .../marStageSuccessPartial.js | 40 ++++++++- .../unit_base_updater/marSuccessComplete.js | 38 +++++++- .../unit_base_updater/marSuccessPartial.js | 20 +++++ toolkit/mozapps/update/updater/updater.cpp | 40 ++++++++- 6 files changed, 179 insertions(+), 69 deletions(-) diff --git a/toolkit/mozapps/update/tests/unit_aus_update/head_update.js b/toolkit/mozapps/update/tests/unit_aus_update/head_update.js index 5c05d24bab8..5be41784036 100644 --- a/toolkit/mozapps/update/tests/unit_aus_update/head_update.js +++ b/toolkit/mozapps/update/tests/unit_aus_update/head_update.js @@ -654,61 +654,6 @@ var gTestFilesPartialSuccess = [ // Concatenate the common files to the end of the array. gTestFilesPartialSuccess = gTestFilesPartialSuccess.concat(gTestFilesCommon); -/** - * The mar files used for the updater tests contain the following remove - * operations. - * - * partial and complete test mar remove operations - * ----------------------------------------------- - * remove "text1" - * remove "text0" - * rmrfdir "9/99/" - * rmdir "9/99/" - * rmrfdir "9/98/" - * rmrfdir "9/97/" - * rmrfdir "9/96/" - * rmrfdir "9/95/" - * rmrfdir "9/95/" - * rmrfdir "9/94/" - * rmdir "9/94/" - * rmdir "9/93/" - * rmdir "9/92/" - * rmdir "9/91/" - * rmdir "9/90/" - * rmdir "9/90/" - * rmrfdir "8/89/" - * rmdir "8/89/" - * rmrfdir "8/88/" - * rmrfdir "8/87/" - * rmrfdir "8/86/" - * rmrfdir "8/85/" - * rmrfdir "8/85/" - * rmrfdir "8/84/" - * rmdir "8/84/" - * rmdir "8/83/" - * rmdir "8/82/" - * rmdir "8/81/" - * rmdir "8/80/" - * rmdir "8/80/" - * rmrfdir "7/" - * rmdir "6/" - * remove "5/text1" - * remove "5/text0" - * rmrfdir "5/" - * remove "4/text1" - * remove "4/text0" - * remove "4/exe0.exe" - * rmdir "4/" - * remove "3/text1" - * remove "3/text0" - * - * partial test mar additional remove operations - * --------------------------------------------- - * remove "0/00/00text1" - * remove "1/10/10text0" - * rmdir "1/10/" - * rmdir "1/" - */ var gTestDirsCommon = [ { relPathDir : DIR_RESOURCES + "3/", @@ -1112,6 +1057,21 @@ function setTestFilesAndDirsForFailure() { }); } +/** + * Helper function for updater binary tests that prevents the distribution + * directory files from being created. + */ +function preventDistributionFiles() { + gTestFiles = gTestFiles.filter(function(aTestFile) { + return aTestFile.relPathDir.indexOf("distribution/") == -1; + }); + + gTestDirs = gTestDirs.filter(function(aTestDir) { + return aTestDir.relPathDir.indexOf("distribution/") == -1; + }); +} + + /** * Initializes the most commonly used settings and creates an instance of the * update service stub. @@ -2386,8 +2346,11 @@ function createUpdaterINI(aIsExeAsync) { * * @param aCompareLogFile * The log file to compare the update log with. + * @param aExcludeDistributionDir + * Removes lines containing the distribution directory from the log + * file to compare the update log with. */ -function checkUpdateLogContents(aCompareLogFile) { +function checkUpdateLogContents(aCompareLogFile, aExcludeDistributionDir) { if (IS_UNIX && !IS_MACOSX) { // Sorting on Linux is different so skip checking the logs for now. return; @@ -2422,16 +2385,14 @@ function checkUpdateLogContents(aCompareLogFile) { updateLogContents = updateLogContents.replace(/WORKING DIRECTORY.*/g, ""); // Skip lines that log failed attempts to open the callback executable. updateLogContents = updateLogContents.replace(/NS_main: callback app file .*/g, ""); + if (IS_MACOSX) { + // Skip lines that log moving the distribution directory for Mac v2 signing. + updateLogContents = updateLogContents.replace(/Moving old [^\n]*\nrename_file: .*/g, ""); + updateLogContents = updateLogContents.replace(/New distribution directory .*/g, ""); + } if (gSwitchApp) { // Remove the lines which contain absolute paths updateLogContents = updateLogContents.replace(/^Begin moving.*$/mg, ""); - if (IS_MACOSX) { - // Remove the entire section about moving the precomplete file as it contains - // absolute paths. - updateLogContents = updateLogContents.replace(/\n/g, "%%%EOL%%%"); - updateLogContents = updateLogContents.replace(/Moving the precomplete file.*Finished moving the precomplete file/, ""); - updateLogContents = updateLogContents.replace(/%%%EOL%%%/g, "\n"); - } } updateLogContents = updateLogContents.replace(/\r/g, ""); // Replace error codes since they are different on each platform. @@ -2468,6 +2429,9 @@ function checkUpdateLogContents(aCompareLogFile) { !gTestFiles[gTestFiles.length - 2].originalContents) { compareLogContents = compareLogContents.replace(/.*update-settings.ini.*/g, ""); } + if (aExcludeDistributionDir) { + compareLogContents = compareLogContents.replace(/.*distribution\/.*/g, ""); + } // Remove leading and trailing newlines compareLogContents = compareLogContents.replace(/\n+/g, "\n"); // Remove leading and trailing newlines diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js b/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js index 40c3f66ba71..ab4307ed50d 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessComplete.js @@ -14,6 +14,15 @@ function run_test() { gTestFiles[gTestFiles.length - 1].comparePerms = 0o644; gTestDirs = gTestDirsCompleteSuccess; setupUpdaterTest(FILE_COMPLETE_MAR); + if (IS_MACOSX) { + // Create files in the old distribution directory location to verify that + // the directory and its contents are removed when there is a distribution + // directory in the new location. + let testFile = getApplyDirFile(DIR_MACOS + "distribution/testFile", true); + writeFile(testFile, "test\n"); + testFile = getApplyDirFile(DIR_MACOS + "distribution/test1/testFile", true); + writeFile(testFile, "test\n"); + } createUpdaterINI(false); @@ -93,6 +102,17 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } + if (IS_MACOSX) { + logTestInfo("testing that the distribution directory is removed from the " + + "old location when there is a distribution directory in the " + + "new location"); + let distributionDir = getApplyDirFile(DIR_MACOS + "distribution", true); + logTestInfo("testing " + distributionDir.path + " shouldn't exist"); + do_check_false(distributionDir.exists()); + + checkUpdateLogContains("removing old distribution directory"); + } + if (IS_UNIX && !IS_MACOSX) { checkSymlink(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessPartial.js b/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessPartial.js index 7a193b06e53..ef4c407ffc9 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessPartial.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marStageSuccessPartial.js @@ -13,7 +13,16 @@ function run_test() { gTestFiles[gTestFiles.length - 2].compareContents = "FromPartial\n"; gTestFiles[gTestFiles.length - 2].comparePerms = 0o644; gTestDirs = gTestDirsPartialSuccess; + preventDistributionFiles(); setupUpdaterTest(FILE_PARTIAL_MAR); + if (IS_MACOSX) { + // Create files in the old distribution directory location to verify that + // the directory and its contents are moved to the new location on update. + let testFile = getApplyDirFile(DIR_MACOS + "distribution/testFile", true); + writeFile(testFile, "test\n"); + testFile = getApplyDirFile(DIR_MACOS + "distribution/test/testFile", true); + writeFile(testFile, "test\n"); + } createUpdaterINI(false); @@ -30,7 +39,7 @@ function run_test() { runUpdate(0, STATE_APPLIED, null); checkFilesAfterUpdateSuccess(getStageDirFile, true, false); - checkUpdateLogContents(LOG_PARTIAL_SUCCESS); + checkUpdateLogContents(LOG_PARTIAL_SUCCESS, true); if (IS_WIN || IS_MACOSX) { // Check that the post update process was not launched when staging an @@ -73,7 +82,34 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } + let distributionDir = getApplyDirFile(DIR_RESOURCES + "distribution", true); + if (IS_MACOSX) { + logTestInfo("testing that the distribution directory is moved from the " + + "old location to the new location"); + logTestInfo("testing " + distributionDir.path + " should exist"); + do_check_true(distributionDir.exists()); + + let testFile = getApplyDirFile(DIR_RESOURCES + "distribution/testFile", true); + logTestInfo("testing " + testFile.path + " should exist"); + do_check_true(testFile.exists()); + + testFile = getApplyDirFile(DIR_RESOURCES + "distribution/test/testFile", true); + logTestInfo("testing " + testFile.path + " should exist"); + do_check_true(testFile.exists()); + + distributionDir = getApplyDirFile(DIR_MACOS + "distribution", true); + logTestInfo("testing " + distributionDir.path + " shouldn't exist"); + do_check_false(distributionDir.exists()); + + checkUpdateLogContains("Moving old distribution directory to new location"); + } else { + logTestInfo("testing that files aren't added with an add-if instruction " + + "when the file's destination directory doesn't exist"); + logTestInfo("testing " + distributionDir.path + " shouldn't exist"); + do_check_false(distributionDir.exists()); + } + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); - checkUpdateLogContents(LOG_PARTIAL_SUCCESS); + checkUpdateLogContents(LOG_PARTIAL_SUCCESS, true); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marSuccessComplete.js b/toolkit/mozapps/update/tests/unit_base_updater/marSuccessComplete.js index 10824b7c0a8..a7c6ff3a252 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marSuccessComplete.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marSuccessComplete.js @@ -9,7 +9,16 @@ function run_test() { setupTestCommon(); gTestFiles = gTestFilesCompleteSuccess; gTestDirs = gTestDirsCompleteSuccess; + preventDistributionFiles(); setupUpdaterTest(FILE_COMPLETE_MAR); + if (IS_MACOSX) { + // Create files in the old distribution directory location to verify that + // the directory and its contents are moved to the new location on update. + let testFile = getApplyDirFile(DIR_MACOS + "distribution/testFile", true); + writeFile(testFile, "test\n"); + testFile = getApplyDirFile(DIR_MACOS + "distribution/test/testFile", true); + writeFile(testFile, "test\n"); + } createUpdaterINI(); @@ -53,7 +62,34 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } + let distributionDir = getApplyDirFile(DIR_RESOURCES + "distribution", true); + if (IS_MACOSX) { + logTestInfo("testing that the distribution directory is moved from the " + + "old location to the new location"); + logTestInfo("testing " + distributionDir.path + " should exist"); + do_check_true(distributionDir.exists()); + + let testFile = getApplyDirFile(DIR_RESOURCES + "distribution/testFile", true); + logTestInfo("testing " + testFile.path + " should exist"); + do_check_true(testFile.exists()); + + testFile = getApplyDirFile(DIR_RESOURCES + "distribution/test/testFile", true); + logTestInfo("testing " + testFile.path + " should exist"); + do_check_true(testFile.exists()); + + distributionDir = getApplyDirFile(DIR_MACOS + "distribution", true); + logTestInfo("testing " + distributionDir.path + " shouldn't exist"); + do_check_false(distributionDir.exists()); + + checkUpdateLogContains("Moving old distribution directory to new location"); + } else { + logTestInfo("testing that files aren't added with an add-if instruction " + + "when the file's destination directory doesn't exist"); + logTestInfo("testing " + distributionDir.path + " shouldn't exist"); + do_check_false(distributionDir.exists()); + } + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); - checkUpdateLogContents(LOG_COMPLETE_SUCCESS); + checkUpdateLogContents(LOG_COMPLETE_SUCCESS, true); checkCallbackAppLog(); } diff --git a/toolkit/mozapps/update/tests/unit_base_updater/marSuccessPartial.js b/toolkit/mozapps/update/tests/unit_base_updater/marSuccessPartial.js index 3da7d7ff214..ad64c6722a3 100644 --- a/toolkit/mozapps/update/tests/unit_base_updater/marSuccessPartial.js +++ b/toolkit/mozapps/update/tests/unit_base_updater/marSuccessPartial.js @@ -16,6 +16,15 @@ function run_test() { gTestFiles[gTestFiles.length - 2].comparePerms = 0o644; gTestDirs = gTestDirsPartialSuccess; setupUpdaterTest(FILE_PARTIAL_MAR); + if (IS_MACOSX) { + // Create files in the old distribution directory location to verify that + // the directory and its contents are removed when there is a distribution + // directory in the new location. + let testFile = getApplyDirFile(DIR_MACOS + "distribution/testFile", true); + writeFile(testFile, "test\n"); + testFile = getApplyDirFile(DIR_MACOS + "distribution/test/testFile", true); + writeFile(testFile, "test\n"); + } createUpdaterINI(true); @@ -59,6 +68,17 @@ function finishCheckUpdateApplied() { do_check_true(timeDiff < MAC_MAX_TIME_DIFFERENCE); } + if (IS_MACOSX) { + logTestInfo("testing that the distribution directory is removed from the " + + "old location when there is a distribution directory in the " + + "new location"); + let distributionDir = getApplyDirFile(DIR_MACOS + "distribution", true); + logTestInfo("testing " + distributionDir.path + " shouldn't exist"); + do_check_false(distributionDir.exists()); + + checkUpdateLogContains("removing old distribution directory"); + } + checkFilesAfterUpdateSuccess(getApplyDirFile, false, false); checkUpdateLogContents(LOG_PARTIAL_SUCCESS); checkCallbackAppLog(); diff --git a/toolkit/mozapps/update/updater/updater.cpp b/toolkit/mozapps/update/updater/updater.cpp index 6c266aa7ec8..358f9c646ed 100644 --- a/toolkit/mozapps/update/updater/updater.cpp +++ b/toolkit/mozapps/update/updater/updater.cpp @@ -2678,12 +2678,12 @@ int NS_main(int argc, NS_tchar **argv) } } - // If we didn't want to use the service at all, or if an update was - // already happening, or launching the service command failed, then + // If we didn't want to use the service at all, or if an update was + // already happening, or launching the service command failed, then // launch the elevated updater.exe as we do without the service. // We don't launch the elevated updater in the case that we did have // write access all along because in that case the only reason we're - // using the service is because we are testing. + // using the service is because we are testing. if (!useService && !noServiceFallback && updateLockFileHandle == INVALID_HANDLE_VALUE) { SHELLEXECUTEINFO sinfo; @@ -3020,6 +3020,40 @@ int NS_main(int argc, NS_tchar **argv) } // end the extra level of scope for the GonkAutoMounter #endif +#ifdef XP_MACOSX + // When the update is successful move the distribution directory from + // Contents/MacOS to Contents/Resources and if both exist delete the + // directory under Contents/MacOS (see Bug 1068439). + if (gSucceeded) { + NS_tchar oldDistDir[MAXPATHLEN]; + NS_tsnprintf(oldDistDir, sizeof(oldDistDir)/sizeof(oldDistDir[0]), + NS_T("%s/Contents/MacOS/distribution"), gInstallDirPath); + int rv = NS_taccess(oldDistDir, F_OK); + if (!rv) { + NS_tchar newDistDir[MAXPATHLEN]; + NS_tsnprintf(newDistDir, sizeof(newDistDir)/sizeof(newDistDir[0]), + NS_T("%s/Contents/Resources/distribution"), gInstallDirPath); + rv = NS_taccess(newDistDir, F_OK); + if (!rv) { + LOG(("New distribution directory already exists... removing old " \ + "distribution directory: " LOG_S, oldDistDir)); + rv = ensure_remove_recursive(oldDistDir); + if (rv) { + LOG(("Removing old distribution directory failed - err: %d", rv)); + } + } else { + LOG(("Moving old distribution directory to new location. src: " LOG_S \ + ", dst:" LOG_S, oldDistDir, newDistDir)); + rv = rename_file(oldDistDir, newDistDir, true); + if (rv) { + LOG(("Moving old distribution directory to new location failed - " \ + "err: %d", rv)); + } + } + } + } +#endif /* XP_MACOSX */ + LogFinish(); if (argc > callbackIndex) { From f6aad009a3ede10473c4d19f5c7ef5a8860d9a54 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:52:21 -0700 Subject: [PATCH 27/60] Mac v2 signing - Bug 1070661 - Error setting access/modification time on application bundle. r=spohl --- toolkit/mozapps/update/updater/updater.cpp | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/toolkit/mozapps/update/updater/updater.cpp b/toolkit/mozapps/update/updater/updater.cpp index 358f9c646ed..6d782fb0cfb 100644 --- a/toolkit/mozapps/update/updater/updater.cpp +++ b/toolkit/mozapps/update/updater/updater.cpp @@ -2188,20 +2188,11 @@ UpdateThreadFunc(void *param) } else { #ifdef XP_MACOSX - // If the update was successful we need to update the timestamp - // on the top-level Mac OS X bundle directory so that Mac OS X's - // Launch Services picks up any major changes. Here we assume that - // the current working directory is the top-level bundle directory. - char* cwd = getcwd(nullptr, 0); - if (cwd) { - if (utimes(cwd, nullptr) != 0) { - LOG(("Couldn't set access/modification time on application bundle.")); - } - free(cwd); - } - else { - LOG(("Couldn't get current working directory for setting " - "access/modification time on application bundle.")); + // If the update was successful we need to update the timestamp on the + // top-level Mac OS X bundle directory so that Mac OS X's Launch Services + // picks up any major changes when the bundle is updated. + if (!sStagedUpdate && utimes(gInstallDirPath, nullptr) != 0) { + LOG(("Couldn't set access/modification time on application bundle.")); } #endif From ee9b0cb6960fdcf6702ef4d32506f503702e6bb0 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:52:32 -0700 Subject: [PATCH 28/60] Mac v2 signing - Temporary workaround for Bug 1070148 - Copy maintenance service binary into its install directory when the installed binary is different. r=bbondy --- .../tests/unit_aus_update/head_update.js | 182 +++++++++++------- .../marStageSuccessCompleteSvc.js | 2 +- .../marStageSuccessPartialSvc.js | 2 +- 3 files changed, 119 insertions(+), 67 deletions(-) diff --git a/toolkit/mozapps/update/tests/unit_aus_update/head_update.js b/toolkit/mozapps/update/tests/unit_aus_update/head_update.js index 5be41784036..4663179f555 100644 --- a/toolkit/mozapps/update/tests/unit_aus_update/head_update.js +++ b/toolkit/mozapps/update/tests/unit_aus_update/head_update.js @@ -1237,6 +1237,32 @@ function getTestDirFile(aRelPath) { } #ifdef XP_WIN +function getSpecialFolderDir(aCSIDL) { + AUS_Cu.import("resource://gre/modules/ctypes.jsm"); + let lib = ctypes.open("shell32"); + let SHGetSpecialFolderPath = lib.declare("SHGetSpecialFolderPathW", + ctypes.winapi_abi, + ctypes.bool, /* bool(return) */ + ctypes.int32_t, /* HWND hwndOwner */ + ctypes.char16_t.ptr, /* LPTSTR lpszPath */ + ctypes.int32_t, /* int csidl */ + ctypes.bool /* BOOL fCreate */); + + let aryPath = ctypes.char16_t.array()(260); + let rv = SHGetSpecialFolderPath(0, aryPath, aCSIDL, false); + lib.close(); + + let path = aryPath.readString(); // Convert the c-string to js-string + if (!path) { + return null; + } + logTestInfo("SHGetSpecialFolderPath returned path: " + path); + let dir = AUS_Cc["@mozilla.org/file/local;1"]. + createInstance(AUS_Ci.nsILocalFile); + dir.initWithPath(path); + return dir; +} + XPCOMUtils.defineLazyGetter(this, "gInstallDirPathHash", function test_gInstallDirPathHash() { // Figure out where we should check for a cached hash value @@ -1274,51 +1300,13 @@ XPCOMUtils.defineLazyGetter(this, "gInstallDirPathHash", XPCOMUtils.defineLazyGetter(this, "gLocalAppDataDir", function test_gLocalAppDataDir() { const CSIDL_LOCAL_APPDATA = 0x1c; - - AUS_Cu.import("resource://gre/modules/ctypes.jsm"); - let lib = ctypes.open("shell32"); - let SHGetSpecialFolderPath = lib.declare("SHGetSpecialFolderPathW", - ctypes.winapi_abi, - ctypes.bool, /* bool(return) */ - ctypes.int32_t, /* HWND hwndOwner */ - ctypes.char16_t.ptr, /* LPTSTR lpszPath */ - ctypes.int32_t, /* int csidl */ - ctypes.bool /* BOOL fCreate */); - - let aryPathLocalAppData = ctypes.char16_t.array()(260); - let rv = SHGetSpecialFolderPath(0, aryPathLocalAppData, CSIDL_LOCAL_APPDATA, false); - lib.close(); - - let pathLocalAppData = aryPathLocalAppData.readString(); // Convert the c-string to js-string - let updatesDir = AUS_Cc["@mozilla.org/file/local;1"]. - createInstance(AUS_Ci.nsILocalFile); - updatesDir.initWithPath(pathLocalAppData); - return updatesDir; + return getSpecialFolderDir(CSIDL_LOCAL_APPDATA); }); XPCOMUtils.defineLazyGetter(this, "gProgFilesDir", function test_gProgFilesDir() { const CSIDL_PROGRAM_FILES = 0x26; - - AUS_Cu.import("resource://gre/modules/ctypes.jsm"); - let lib = ctypes.open("shell32"); - let SHGetSpecialFolderPath = lib.declare("SHGetSpecialFolderPathW", - ctypes.winapi_abi, - ctypes.bool, /* bool(return) */ - ctypes.int32_t, /* HWND hwndOwner */ - ctypes.char16_t.ptr, /* LPTSTR lpszPath */ - ctypes.int32_t, /* int csidl */ - ctypes.bool /* BOOL fCreate */); - - let aryPathProgFiles = ctypes.char16_t.array()(260); - let rv = SHGetSpecialFolderPath(0, aryPathProgFiles, CSIDL_PROGRAM_FILES, false); - lib.close(); - - let pathProgFiles = aryPathProgFiles.readString(); // Convert the c-string to js-string - let progFilesDir = AUS_Cc["@mozilla.org/file/local;1"]. - createInstance(AUS_Ci.nsILocalFile); - progFilesDir.initWithPath(pathProgFiles); - return progFilesDir; + return getSpecialFolderDir(CSIDL_PROGRAM_FILES); }); /** @@ -1339,7 +1327,7 @@ function getMockUpdRootD() { "\\" + DIR_UPDATES + "\\" + gInstallDirPathHash; } - if (!relPathUpdates) { + if (!relPathUpdates && progFilesDir) { if (appDirPath.length > progFilesDir.path.length) { if (appDirPath.substr(0, progFilesDir.path.length) == progFilesDir.path) { if (MOZ_APP_VENDOR && MOZ_APP_BASENAME) { @@ -1591,14 +1579,15 @@ function stageUpdate() { * * @param aFirstTest * Whether this is the first test within the test. + * @param aSkipTest + * Whether to skip this test if the installed maintenance service + * isn't the same as the build's maintenance service. This is a + * temporary workaround until all build systems grant write access to + * the maintenance service install directory so the tests can copy the + * version of the maintenance service that should be tests. * @return true if the test should run and false if it shouldn't. */ -function shouldRunServiceTest(aFirstTest) { - // In case the machine is running an old maintenance service or if it - // is not installed, and permissions exist to install it. Then install - // the newer bin that we have. - attemptServiceInstall(); - +function shouldRunServiceTest(aFirstTest, aSkipTest) { let binDir = getGREDir(); let updaterBin = binDir.clone(); updaterBin.append(FILE_UPDATER_BIN); @@ -1664,7 +1653,11 @@ function shouldRunServiceTest(aFirstTest) { do_throw("this test can only run on builds with signed binaries."); } #endif - return true; + + // In case the machine is running an old maintenance service or if it + // is not installed, and permissions exist to install it. Then install + // the newer bin that we have since all of the other checks passed. + return attemptServiceInstall(aSkipTest); } /** @@ -1864,27 +1857,86 @@ function copyFileToTestAppDir(aFileRelPath, aDestFileRelPath) { * This is useful for XP where we have permission to upgrade in case an * older service installer exists. Also if the user manually installed into * a unprivileged location. + * + * @param aSkipTest + * Whether to skip this test if the installed maintenance service + * isn't the same as the build's maintenance service. This is a + * temporary workaround until all build systems grant write access to + * the maintenance service install directory so the tests can copy the + * version of the maintenance service that should be tests. */ -function attemptServiceInstall() { - var version = AUS_Cc["@mozilla.org/system-info;1"] - .getService(AUS_Ci.nsIPropertyBag2) - .getProperty("version"); - var isVistaOrHigher = (parseFloat(version) >= 6.0); - if (isVistaOrHigher) { - return; +function attemptServiceInstall(aSkipTest) { + const CSIDL_PROGRAM_FILES = 0x26; + const CSIDL_PROGRAM_FILESX86 = 0x2A; + // This will return an empty string on our Win XP build systems. + let maintSvcDir = getSpecialFolderDir(CSIDL_PROGRAM_FILESX86); + if (maintSvcDir) { + maintSvcDir.append("Mozilla Maintenance Service"); + logTestInfo("using CSIDL_PROGRAM_FILESX86 - maintenance service install " + + "directory path: " + maintSvcDir.path); + } + if (!maintSvcDir || !maintSvcDir.exists()) { + maintSvcDir = getSpecialFolderDir(CSIDL_PROGRAM_FILES); + if (maintSvcDir) { + maintSvcDir.append("Mozilla Maintenance Service"); + logTestInfo("using CSIDL_PROGRAM_FILES - maintenance service install " + + "directory path: " + maintSvcDir.path); + } + } + if (!maintSvcDir || !maintSvcDir.exists()) { + do_throw("maintenance service install directory doesn't exist!"); + } + let oldMaintSvcBin = maintSvcDir.clone(); + oldMaintSvcBin.append(FILE_MAINTENANCE_SERVICE_BIN); + if (!oldMaintSvcBin.exists()) { + do_throw("maintenance service install directory binary doesn't exist! " + + "Path: " + oldMaintSvcBin.path); + } + let buildMaintSvcBin = getGREDir(); + buildMaintSvcBin.append(FILE_MAINTENANCE_SERVICE_BIN); + if (readFileBytes(oldMaintSvcBin) == readFileBytes(buildMaintSvcBin)) { + logTestInfo("installed maintenance service binary is the same as the " + + "build's maintenance service binary"); + return true; + } + let backupMaintSvcBin = maintSvcDir.clone(); + backupMaintSvcBin.append(FILE_MAINTENANCE_SERVICE_BIN + ".backup"); + try { + if (backupMaintSvcBin.exists()) { + backupMaintSvcBin.remove(false); + } + oldMaintSvcBin.moveTo(maintSvcDir, FILE_MAINTENANCE_SERVICE_BIN + ".backup"); + buildMaintSvcBin.copyTo(maintSvcDir, FILE_MAINTENANCE_SERVICE_BIN); + backupMaintSvcBin.remove(false); + return true; + } catch (e) { + // Restore the original file in case the moveTo was successful. + if (backupMaintSvcBin.exists()) { + oldMaintSvcBin = maintSvcDir.clone(); + oldMaintSvcBin.append(FILE_MAINTENANCE_SERVICE_BIN); + if (!oldMaintSvcBin.exists()) { + backupMaintSvcBin.moveTo(maintSvcDir, FILE_MAINTENANCE_SERVICE_BIN); + } + } + logTestInfo("unable to copy new maintenance service into the " + + "maintenance service directory: " + maintSvcDir.path + ", " + + "Exception: " + e); } - let binDir = getGREDir(); - let installerFile = binDir.clone(); - installerFile.append(FILE_MAINTENANCE_SERVICE_INSTALLER_BIN); - if (!installerFile.exists()) { - do_throw(FILE_MAINTENANCE_SERVICE_INSTALLER_BIN + " not found."); + let version = AUS_Cc["@mozilla.org/system-info;1"]. + getService(AUS_Ci.nsIPropertyBag2). + getProperty("version"); + var isWin7OrBelow = (parseFloat(version) <= 6.1); + // The account running the tests on Win XP and Win 7 build systems have write + // access to the maintenance service directory so throw if copying the + // maintenance service binary fails. This should always throw after write + // access is provided on all Windows build slaves in bug 1067756. + if (isWin7OrBelow) { + do_throw("The account running the tests on Win 7 and below build systems " + + "should have write access to the maintenance service directory!"); } - let installerProcess = AUS_Cc["@mozilla.org/process/util;1"]. - createInstance(AUS_Ci.nsIProcess); - installerProcess.init(installerFile); - logTestInfo("starting installer process..."); - installerProcess.run(true, [], 0); + + return aSkipTest ? false : true; } /** diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js index 7f797883b63..b1599d928bd 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessCompleteSvc.js @@ -6,7 +6,7 @@ /* General Complete MAR File Staged Patch Apply Test */ function run_test() { - if (!shouldRunServiceTest()) { + if (!shouldRunServiceTest(false, true)) { return; } diff --git a/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessPartialSvc.js b/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessPartialSvc.js index 90383e32939..bf15453438c 100644 --- a/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessPartialSvc.js +++ b/toolkit/mozapps/update/tests/unit_service_updater/marStageSuccessPartialSvc.js @@ -6,7 +6,7 @@ /* General Partial MAR File Staged Patch Apply Test */ function run_test() { - if (!shouldRunServiceTest()) { + if (!shouldRunServiceTest(false, true)) { return; } From a016777c82701873b0645b7b3b0f3cc3b1f469ed Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:52:36 -0700 Subject: [PATCH 29/60] Mac v2 signing - Bug 1070149 - Add explicit file removals for channel-prefs.js, update-settings.ini, and precomplete files. r=spohl --- browser/installer/removed-files.in | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/browser/installer/removed-files.in b/browser/installer/removed-files.in index 196b2a72f3e..cede0485ed5 100644 --- a/browser/installer/removed-files.in +++ b/browser/installer/removed-files.in @@ -64,7 +64,7 @@ # Equals Contents/Resources/ on Mac OX X and is an empty string on other # platforms. -# File Removals +# Common File Removals # This is located under the "distribution/" directory and it was added before # Firefox 27 @DIR_MACOS@distribution/extensions/testpilot@labs.mozilla.com.xpi @@ -79,7 +79,17 @@ #endif #endif -# Directory removals +# Mac OS X v2 signing removals +#ifdef XP_MACOSX + precomplete + @DIR_MACOS@active-update.xml + @DIR_MACOS@update-settings.ini + @DIR_MACOS@updates.xml + @DIR_MACOS@defaults/* + @DIR_MACOS@updates/* +#endif + +# Common Directory removals @DIR_MACOS@chrome/ #ifdef XP_UNIX #ifndef XP_MACOSX From 7d5d1cd77e54934418fcc2796643d307e735ae6e Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:52:40 -0700 Subject: [PATCH 30/60] Mac v2 signing - Bug 1070863 - The preprocessed channel-prefs.js file needs to be the same for each build. r=ted --- browser/app/Makefile.in | 2 +- browser/app/profile/channel-prefs.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/browser/app/Makefile.in b/browser/app/Makefile.in index c5a126e6a28..60d7839ad6c 100644 --- a/browser/app/Makefile.in +++ b/browser/app/Makefile.in @@ -76,7 +76,7 @@ ifndef LIBXUL_SDK # channel-prefs.js is handled separate from other prefs due to bug 756325 libs:: $(srcdir)/profile/channel-prefs.js $(NSINSTALL) -D $(DIST)/bin/defaults/pref - $(call py_action,preprocessor,$(PREF_PPFLAGS) $(ACDEFINES) $^ -o $(DIST)/bin/defaults/pref/channel-prefs.js) + $(call py_action,preprocessor,-Fsubstitution $(PREF_PPFLAGS) $(ACDEFINES) $^ -o $(DIST)/bin/defaults/pref/channel-prefs.js) endif libs:: $(srcdir)/blocklist.xml diff --git a/browser/app/profile/channel-prefs.js b/browser/app/profile/channel-prefs.js index feb27c1a3aa..633c489f3c2 100644 --- a/browser/app/profile/channel-prefs.js +++ b/browser/app/profile/channel-prefs.js @@ -1,4 +1,3 @@ -#filter substitution /* 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/. */ From 5f62c99fe49ad954927e7e0be56eb28cf46873fa Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:52:44 -0700 Subject: [PATCH 31/60] Mac v2 signing - Bug 1071134 - Fix command line help for updater. r=spohl --- toolkit/mozapps/update/updater/updater.cpp | 28 ++++++++++++---------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/toolkit/mozapps/update/updater/updater.cpp b/toolkit/mozapps/update/updater/updater.cpp index 6d782fb0cfb..5675547a6e5 100644 --- a/toolkit/mozapps/update/updater/updater.cpp +++ b/toolkit/mozapps/update/updater/updater.cpp @@ -2227,19 +2227,21 @@ int NS_main(int argc, NS_tchar **argv) InitProgressUI(&argc, &argv); // To process an update the updater command line must at a minimum have the - // directory path containing the updater.mar file to process as the first argument - // and the directory to apply the update to as the second argument. When the - // updater is launched by another process the PID of the parent process should be - // provided in the optional third argument and the updater will wait on the parent - // process to exit if the value is non-zero and the process is present. This is - // necessary due to not being able to update files that are in use on Windows. The - // optional fourth argument is the callback's working directory and the optional - // fifth argument is the callback path. The callback is the application to launch - // after updating and it will be launched when these arguments are provided - // whether the update was successful or not. All remaining arguments are optional - // and are passed to the callback when it is launched. - if (argc < 3) { - fprintf(stderr, "Usage: updater update-dir apply-to-dir [wait-pid [callback-working-dir callback-path args...]]\n"); + // directory path containing the updater.mar file to process as the first + // argument, the install directory as the second argument, and the directory + // to apply the update to as the third argument. When the updater is launched + // by another process the PID of the parent process should be provided in the + // optional fourth argument and the updater will wait on the parent process to + // exit if the value is non-zero and the process is present. This is necessary + // due to not being able to update files that are in use on Windows. The + // optional fifth argument is the callback's working directory and the + // optional sixth argument is the callback path. The callback is the + // application to launch after updating and it will be launched when these + // arguments are provided whether the update was successful or not. All + // remaining arguments are optional and are passed to the callback when it is + // launched. + if (argc < 4) { + fprintf(stderr, "Usage: updater patch-dir install-dir apply-to-dir [wait-pid [callback-working-dir callback-path args...]]\n"); return 1; } From d441a04b8a768fdfdad691ea1ba2164676d225c0 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:52:48 -0700 Subject: [PATCH 32/60] Mac v2 signing - Bug 1071465 - old precomplete file is not removed on update. r=spohl --- browser/installer/removed-files.in | 1 - toolkit/mozapps/update/updater/updater.cpp | 10 ++++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/browser/installer/removed-files.in b/browser/installer/removed-files.in index cede0485ed5..e8f336f2769 100644 --- a/browser/installer/removed-files.in +++ b/browser/installer/removed-files.in @@ -81,7 +81,6 @@ # Mac OS X v2 signing removals #ifdef XP_MACOSX - precomplete @DIR_MACOS@active-update.xml @DIR_MACOS@update-settings.ini @DIR_MACOS@updates.xml diff --git a/toolkit/mozapps/update/updater/updater.cpp b/toolkit/mozapps/update/updater/updater.cpp index 5675547a6e5..3af884f362a 100644 --- a/toolkit/mozapps/update/updater/updater.cpp +++ b/toolkit/mozapps/update/updater/updater.cpp @@ -3014,10 +3014,16 @@ int NS_main(int argc, NS_tchar **argv) #endif #ifdef XP_MACOSX - // When the update is successful move the distribution directory from + // When the update is successful remove the precomplete file in the root of + // the application bundle and move the distribution directory from // Contents/MacOS to Contents/Resources and if both exist delete the // directory under Contents/MacOS (see Bug 1068439). - if (gSucceeded) { + if (gSucceeded && !sStagedUpdate) { + NS_tchar oldPrecomplete[MAXPATHLEN]; + NS_tsnprintf(oldPrecomplete, sizeof(oldPrecomplete)/sizeof(oldPrecomplete[0]), + NS_T("%s/precomplete"), gInstallDirPath); + NS_tremove(oldPrecomplete); + NS_tchar oldDistDir[MAXPATHLEN]; NS_tsnprintf(oldDistDir, sizeof(oldDistDir)/sizeof(oldDistDir[0]), NS_T("%s/Contents/MacOS/distribution"), gInstallDirPath); From ff438766391e71f5059f104910ac99e5ccf4007b Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:52:59 -0700 Subject: [PATCH 33/60] Mac v2 signing - Bug 1072554 - Remove update directories when running xpcshell tests. r=spohl --- .../tests/unit_aus_update/head_update.js | 55 ++++++++++++------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/toolkit/mozapps/update/tests/unit_aus_update/head_update.js b/toolkit/mozapps/update/tests/unit_aus_update/head_update.js index 4663179f555..61673ff3c49 100644 --- a/toolkit/mozapps/update/tests/unit_aus_update/head_update.js +++ b/toolkit/mozapps/update/tests/unit_aus_update/head_update.js @@ -942,7 +942,7 @@ function cleanupTestCommon() { } // The updates directory is located outside of the application directory on - // Windows and Mac so it also needs to be removed. + // Windows and Mac OS X so it also needs to be removed. if (IS_WIN || IS_MACOSX) { let updatesDir = getMockUpdRootD(); // Try to remove the directory used to apply updates. Since the test has @@ -955,6 +955,26 @@ function cleanupTestCommon() { logTestInfo("non-fatal error removing directory. Path: " + updatesDir.path + ", Exception: " + e); } + if (IS_MACOSX) { + let updatesRootDir = gUpdatesRootDir.clone(); + while (updatesRootDir.path != updatesDir.path) { + if (updatesDir.exists()) { + logTestInfo("attempting to remove directory. Path: " + + updatesDir.path); + try { + // Try to remove the directory without the recursive flag set + // since the top level directory has already had its contents + // removed and the parent directory might still be used by a + // different test. + updatesDir.remove(false); + } catch (e) { + logTestInfo("non-fatal error removing directory. Path: " + + updatesDir.path + ", Exception: " + e); + } + } + updatesDir = updatesDir.parent; + } + } } } @@ -1356,6 +1376,19 @@ function getMockUpdRootD() { return updatesDir; } #elif XP_MACOSX +XPCOMUtils.defineLazyGetter(this, "gUpdatesRootDir", + function test_gUpdatesRootDir() { + let dir = Services.dirsvc.get("ULibDir", AUS_Ci.nsILocalFile); + dir.append("Caches"); + if (MOZ_APP_VENDOR || MOZ_APP_BASENAME) { + dir.append(MOZ_APP_VENDOR ? MOZ_APP_VENDOR : MOZ_APP_BASENAME); + } else { + dir.append("Mozilla"); + } + dir.append(DIR_UPDATES); + return dir; +}); + /** * Helper function for getting the update root directory used by the tests. This * returns the same directory as returned by nsXREDirProvider::GetUpdateRootDir @@ -1363,31 +1396,15 @@ function getMockUpdRootD() { * when running a test that launches the application. */ function getMockUpdRootD() { - let userLibDir = Services.dirsvc.get("ULibDir", AUS_Ci.nsILocalFile); let appDir = Services.dirsvc.get(XRE_EXECUTABLE_FILE, AUS_Ci.nsIFile). parent.parent.parent; let appDirPath = appDir.path; appDirPath = appDirPath.substr(0, appDirPath.length - 4); - let relPathUpdates = ""; - if (MOZ_APP_VENDOR || MOZ_APP_BASENAME) { - relPathUpdates += (MOZ_APP_VENDOR ? MOZ_APP_VENDOR : MOZ_APP_BASENAME) + - "/" + DIR_UPDATES + appDirPath; - } - - if (!relPathUpdates) { - if (MOZ_APP_VENDOR && MOZ_APP_BASENAME) { - relPathUpdates += MOZ_APP_VENDOR + "/" + MOZ_APP_BASENAME; - } else { - relPathUpdates += MOZ_APP_BASENAME; - } - relPathUpdates += "/" + MOZ_APP_NAME; - } - + let pathUpdates = gUpdatesRootDir.path + appDirPath; let updatesDir = AUS_Cc["@mozilla.org/file/local;1"]. createInstance(AUS_Ci.nsILocalFile); - - updatesDir.initWithPath(userLibDir.path + "/Caches/" + relPathUpdates); + updatesDir.initWithPath(pathUpdates); logTestInfo("returning UpdRootD Path: " + updatesDir.path); return updatesDir; } From c04372fc719793c93e826705b6e232f2c650a74d Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:53:03 -0700 Subject: [PATCH 34/60] Mac v2 signing - Bug 1072716 - Update B2G removed-files.in for mac v2 signing. r=mwu --- b2g/installer/removed-files.in | 53 ++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/b2g/installer/removed-files.in b/b2g/installer/removed-files.in index f29a2f9c092..8b4a451dfc3 100644 --- a/b2g/installer/removed-files.in +++ b/b2g/installer/removed-files.in @@ -1,24 +1,45 @@ -README.txt -@DLL_PREFIX@mozutils@DLL_SUFFIX@ -jssubloader/ +# Due to Apple Mac OS X packaging requirements files that are in the same +# directory on other platforms must be located in different directories on +# Mac OS X. The following defines allow specifying the Mac OS X 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. + +# Mac OS X v2 signing removals #ifdef XP_MACOSX -run-mozilla.sh + @DIR_MACOS@active-update.xml + @DIR_MACOS@update-settings.ini + @DIR_MACOS@updates.xml + @DIR_MACOS@defaults/* + @DIR_MACOS@updates/* +#endif + +@DIR_MACOS@README.txt +@DIR_MACOS@@DLL_PREFIX@mozutils@DLL_SUFFIX@ +@DIR_MACOS@jssubloader/ +#ifdef XP_MACOSX +@DIR_MACOS@run-mozilla.sh #endif #ifdef XP_WIN mozcrt19.dll mozcpp19.dll #endif -defaults/preferences/services-sync.js -defaults/preferences/healthreport-prefs.js -components/dom_sms.xpt -components/dom_webspeech.xpt +@DIR_MACOS@defaults/preferences/services-sync.js +@DIR_MACOS@defaults/preferences/healthreport-prefs.js +@DIR_MACOS@components/dom_sms.xpt +@DIR_MACOS@components/dom_webspeech.xpt #ifdef MOZ_FOLD_LIBS -@DLL_PREFIX@nspr4@DLL_SUFFIX@ -@DLL_PREFIX@plds4@DLL_SUFFIX@ -@DLL_PREFIX@plc4@DLL_SUFFIX@ -@DLL_PREFIX@ssl3@DLL_SUFFIX@ -@DLL_PREFIX@smime3@DLL_SUFFIX@ -@DLL_PREFIX@nssutil3@DLL_SUFFIX@ -@DLL_PREFIX@mozsqlite3@DLL_SUFFIX@ +@DIR_MACOS@@DLL_PREFIX@nspr4@DLL_SUFFIX@ +@DIR_MACOS@@DLL_PREFIX@plds4@DLL_SUFFIX@ +@DIR_MACOS@@DLL_PREFIX@plc4@DLL_SUFFIX@ +@DIR_MACOS@@DLL_PREFIX@ssl3@DLL_SUFFIX@ +@DIR_MACOS@@DLL_PREFIX@smime3@DLL_SUFFIX@ +@DIR_MACOS@@DLL_PREFIX@nssutil3@DLL_SUFFIX@ +@DIR_MACOS@@DLL_PREFIX@mozsqlite3@DLL_SUFFIX@ #endif -@DLL_PREFIX@xpcom@DLL_SUFFIX@ +@DIR_MACOS@@DLL_PREFIX@xpcom@DLL_SUFFIX@ From e310d17f977af1930879abf1d7ddc662d182fa33 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:53:07 -0700 Subject: [PATCH 35/60] Mac v2 signing - Bug 1072722 - With older clients the new maintenance service checks the updated directory's updater.exe when verifying the updater.exe for replace requests. r=spohl --- toolkit/components/maintenanceservice/workmonitor.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/toolkit/components/maintenanceservice/workmonitor.cpp b/toolkit/components/maintenanceservice/workmonitor.cpp index 3615650ea6f..1aa6c7fb1b6 100644 --- a/toolkit/components/maintenanceservice/workmonitor.cpp +++ b/toolkit/components/maintenanceservice/workmonitor.cpp @@ -125,8 +125,7 @@ static bool IsOldCommandline(int argc, LPWSTR *argv) { return argc == 4 && !wcscmp(argv[3], L"-1") || - !wcscmp(argv[3], L"0/replace") || - IsDigits(argv[3]); + argc >= 4 && (wcsstr(argv[3], L"/replace") || IsDigits(argv[3])); } /** @@ -411,7 +410,8 @@ ProcessSoftwareUpdateCommand(DWORD argc, LPWSTR *argv) } if (result && !updaterIsCorrect) { - LOG_WARN(("The updaters do not match, updater will not run.")); + LOG_WARN(("The updaters do not match, updater will not run.\n" + "Path 1: %ls\nPath 2: %ls", argv[0], installDirUpdater)); result = FALSE; } From 2d05ec774976438d1222654ddc04739bba21621f Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:53:11 -0700 Subject: [PATCH 36/60] Mac v2 signing - Bug 1074000 - Update xpcshell-tests for new OSX v2 bundle structure to run on comm-central. r=jmaher --- testing/testsuite-targets.mk | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/testing/testsuite-targets.mk b/testing/testsuite-targets.mk index 7c98e9b12a6..0415871da8b 100644 --- a/testing/testsuite-targets.mk +++ b/testing/testsuite-targets.mk @@ -289,6 +289,12 @@ jstestbrowser: GARBAGE += $(addsuffix .log,$(MOCHITESTS) reftest crashtest jstestbrowser) +ifeq ($(OS_ARCH),Darwin) +xpcshell_path = $(TARGET_DIST)/$(MOZ_MACBUNDLE_NAME)/Contents/MacOS/xpcshell +else +xpcshell_path = $(LIBXUL_DIST)/bin/xpcshell +endif + # Execute all xpcshell tests in the directories listed in the manifest. # See also config/rules.mk 'xpcshell-tests' target for local execution. # Usage: |make [TEST_PATH=...] [EXTRA_TEST_ARGS=...] xpcshell-tests|. @@ -309,7 +315,7 @@ xpcshell-tests: --xunit-suite-name=xpcshell \ $(SYMBOLS_PATH) \ $(TEST_PATH_ARG) $(EXTRA_TEST_ARGS) \ - $(LIBXUL_DIST)/bin/xpcshell + $(xpcshell_path) B2G_XPCSHELL = \ rm -f ./@.log && \ From 69516d96825379fe6201647318a70e76aedd3435 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Mon, 29 Sep 2014 11:53:15 -0700 Subject: [PATCH 37/60] Mac v2 signing - Bug 1074044 - Force add instead of patch the removed-files file. r=bhearsum --- .../make_incremental_update.sh | 13 ++++++-- .../make_incremental_updates.py | 30 ++++++++++++------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/tools/update-packaging/make_incremental_update.sh b/tools/update-packaging/make_incremental_update.sh index 20a9881f19d..b00427f2e96 100755 --- a/tools/update-packaging/make_incremental_update.sh +++ b/tools/update-packaging/make_incremental_update.sh @@ -40,8 +40,17 @@ check_for_forced_update() { return 0; fi - if [ "${forced_file_chk##*.}" = "chk" ] - then + if [ "$forced_file_chk" = "removed-files" ]; then + ## "true" *giggle* + return 0; + fi + + if [ "$forced_file_chk" = "Contents/Resources/removed-files" ]; then + ## "true" *giggle* + return 0; + fi + + if [ "${forced_file_chk##*.}" = "chk" ]; then ## "true" *giggle* return 0; fi diff --git a/tools/update-packaging/make_incremental_updates.py b/tools/update-packaging/make_incremental_updates.py index f571a7168a6..922fb9697c4 100755 --- a/tools/update-packaging/make_incremental_updates.py +++ b/tools/update-packaging/make_incremental_updates.py @@ -304,7 +304,7 @@ def process_explicit_remove_files(dir_path, patch_info): list_file_path = os.path.join(dir_path, "Contents/Resources/removed-files") if (os.path.exists(list_file_path)): - list_file = open(list_file_path,"r") # throws if doesn't exist + list_file = bz2.BZ2File(list_file_path,"r") # throws if doesn't exist lines = [] for line in list_file: @@ -331,17 +331,25 @@ def create_partial_patch(from_dir_path, to_dir_path, patch_filename, shas, patch # Create a list of the forced updates forced_list = forced_updates.strip().split('|') # Require that the precomplete file is included in the complete update - if "precomplete" not in to_file_set: - # The check with \ file separators allows tests for Mac to run on Windows - if "Contents/Resources/precomplete" not in to_file_set and "Contents\Resources\precomplete" not in to_file_set: - raise Exception, "missing precomplete file in: "+to_dir_path - else: - if "Contents/Resources/precomplete" in to_file_set: - forced_list.append("Contents/Resources/precomplete") - else: - forced_list.append("Contents\Resources\precomplete") - else: + if "precomplete" in to_file_set: forced_list.append("precomplete") + elif "Contents/Resources/precomplete" in to_file_set: + forced_list.append("Contents/Resources/precomplete") + # The check with \ file separators allows tests for Mac to run on Windows + elif "Contents\Resources\precomplete" in to_file_set: + forced_list.append("Contents\Resources\precomplete") + else: + raise Exception, "missing precomplete file in: "+to_dir_path + + if "removed-files" in to_file_set: + forced_list.append("removed-files") + elif "Contents/Resources/removed-files" in to_file_set: + forced_list.append("Contents/Resources/removed-files") + # The check with \ file separators allows tests for Mac to run on Windows + elif "Contents\Resources\\removed-files" in to_file_set: + forced_list.append("Contents\Resources\\removed-files") + else: + raise Exception, "missing removed-files file in: "+to_dir_path # Files which exist in both sets need to be patched patch_filenames = list(from_file_set.intersection(to_file_set)) From e32b4e0ee4159557fc58e993d4ee83cc7423b75b Mon Sep 17 00:00:00 2001 From: Gavin Sharp Date: Thu, 18 Sep 2014 15:20:38 -0700 Subject: [PATCH 38/60] Bug 1031018: Add a "Tools->Apps" menu item pointing to marketplace, r=MattN --HG-- extra : rebase_source : f1ff6847c646dcba9d6001e79bb285ac35f27298 --- browser/app/profile/firefox.js | 2 ++ browser/base/content/browser-menubar.inc | 4 ++++ browser/base/content/browser.js | 5 +++++ browser/locales/en-US/chrome/browser/browser.dtd | 2 ++ 4 files changed, 13 insertions(+) diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index bd9625ec606..aef21b2d56a 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -1737,3 +1737,5 @@ pref("experiments.supported", true); // Enable the OpenH264 plugin support in the addon manager. pref("media.gmp-gmpopenh264.provider.enabled", true); + +pref("browser.apps.URL", "https://marketplace.firefox.com/discovery/"); diff --git a/browser/base/content/browser-menubar.inc b/browser/base/content/browser-menubar.inc index 2fb1a37ee57..f6f1ad32945 100644 --- a/browser/base/content/browser-menubar.inc +++ b/browser/base/content/browser-menubar.inc @@ -470,6 +470,10 @@ accesskey="&addons.accesskey;" key="key_openAddons" command="Tools:Addons"/> + #ifdef MOZ_SERVICES_SYNC + + From f154ce92c9ab77b82557f5a4886b2d4bc5c7021a Mon Sep 17 00:00:00 2001 From: Gavin Sharp Date: Fri, 19 Sep 2014 12:36:11 -0700 Subject: [PATCH 39/60] Bug 1031019: add "Apps" toolbar button that points to Marketplace, r=jared/Gijs --HG-- extra : rebase_source : 32c104884c9a6116efd3911d8145b61b8aa5711b --- .../customizableui/CustomizableWidgets.jsm | 15 ++++++++++++++- .../customizableWidgets.properties | 3 +++ browser/modules/BrowserUITelemetry.jsm | 1 + browser/themes/linux/Toolbar-inverted.png | Bin 10691 -> 10934 bytes browser/themes/linux/Toolbar.png | Bin 14312 -> 14685 bytes browser/themes/linux/menuPanel.png | Bin 15384 -> 16379 bytes browser/themes/osx/Toolbar-inverted.png | Bin 26916 -> 27541 bytes browser/themes/osx/Toolbar-inverted@2x.png | Bin 64829 -> 66363 bytes browser/themes/osx/Toolbar-yosemite.png | Bin 16672 -> 17075 bytes browser/themes/osx/Toolbar-yosemite@2x.png | Bin 38547 -> 39521 bytes browser/themes/osx/Toolbar.png | Bin 26256 -> 26878 bytes browser/themes/osx/Toolbar@2x.png | Bin 70645 -> 72242 bytes browser/themes/osx/browser.css | 12 ++++++++++++ browser/themes/osx/menuPanel-yosemite.png | Bin 21149 -> 21638 bytes browser/themes/osx/menuPanel-yosemite@2x.png | Bin 47568 -> 48582 bytes browser/themes/osx/menuPanel.png | Bin 27739 -> 28452 bytes browser/themes/osx/menuPanel@2x.png | Bin 63907 -> 65475 bytes browser/themes/shared/browser.inc | 2 +- browser/themes/shared/menupanel.inc.css | 5 +++++ browser/themes/shared/toolbarbuttons.inc.css | 9 +++++++++ browser/themes/windows/Toolbar-XP.png | Bin 15785 -> 16162 bytes browser/themes/windows/Toolbar-aero.png | Bin 15103 -> 15450 bytes browser/themes/windows/Toolbar-inverted.png | Bin 10691 -> 10934 bytes browser/themes/windows/Toolbar-lunaSilver.png | Bin 15392 -> 15737 bytes browser/themes/windows/Toolbar.png | Bin 6010 -> 6136 bytes browser/themes/windows/menuPanel-aero.png | Bin 31148 -> 31974 bytes browser/themes/windows/menuPanel.png | Bin 15384 -> 15700 bytes 27 files changed, 45 insertions(+), 2 deletions(-) diff --git a/browser/components/customizableui/CustomizableWidgets.jsm b/browser/components/customizableui/CustomizableWidgets.jsm index 56b60c45445..09e936852f5 100644 --- a/browser/components/customizableui/CustomizableWidgets.jsm +++ b/browser/components/customizableui/CustomizableWidgets.jsm @@ -150,7 +150,8 @@ function clearSubview(aSubview) { parent.appendChild(aSubview); } -const CustomizableWidgets = [{ +const CustomizableWidgets = [ + { id: "history-panelmenu", type: "view", viewId: "PanelUI-history", @@ -923,6 +924,18 @@ const CustomizableWidgets = [{ }); return node; } + }, { + id: "web-apps-button", + label: "web-apps-button.label", + tooltiptext: "web-apps-button.tooltiptext", + onCommand: function(aEvent) { + let win = aEvent.target && + aEvent.target.ownerDocument && + aEvent.target.ownerDocument.defaultView; + if (win && typeof win.BrowserOpenApps == "function") { + win.BrowserOpenApps(); + } + } }]; #ifdef XP_WIN diff --git a/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties b/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties index 28a312ffbc5..da49dc4ad5d 100644 --- a/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties +++ b/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties @@ -102,3 +102,6 @@ loop-call-button.tooltiptext = Invite someone to talk panic-button.label = Forget panic-button.tooltiptext = Forget about some browsing history + +web-apps-button.label = Apps +web-apps-button.tooltiptext = Discover Apps diff --git a/browser/modules/BrowserUITelemetry.jsm b/browser/modules/BrowserUITelemetry.jsm index 2dade17b430..2d4d1be4fbd 100644 --- a/browser/modules/BrowserUITelemetry.jsm +++ b/browser/modules/BrowserUITelemetry.jsm @@ -96,6 +96,7 @@ XPCOMUtils.defineLazyGetter(this, "PALETTE_ITEMS", function() { "email-link-button", "sync-button", "tabview-button", + "web-apps-button", ]; let panelPlacements = DEFAULT_AREA_PLACEMENTS["PanelUI-contents"]; diff --git a/browser/themes/linux/Toolbar-inverted.png b/browser/themes/linux/Toolbar-inverted.png index b421a09ab5767f0f01acbd1a89b90b17e2265eba..4de1dc2a1ce5e333d07c8f9807c839968861d426 100644 GIT binary patch literal 10934 zcmYj%bx<5W(Dvc(6nA%bJ)l5wC=_=JMGI|lJsgS`3KTgGFV5kv1&Wo!-HJo8J6vCW z?|k3P`%fmBJhPciHk<6T8>_3Wiib^w4FCY})ZV;)3jiR)UivJU=r1i~6t4{c;0jWE ztzh7b^e+g@^Of>dFpUar2rgInh(HTtc+A(|0BoiLCZU+GeGDT7Oafi6Kk`sq2lxwQG-3YgS#N}aoMed_*LJ?%Bk{~b76go}l4p|iEuMql5pXJUWM zNuBn|QUBCGoBVF6Qg2pQF3xRt+@j#{@u@K8=ek#>|8~?h8(Bo?#~v@N?bQX*aypJN zH0by}5S-7fqKZc&I{`BS+S|VK=k+ zES7OimOhi(8uTQU#Rv73+Qxgl92^{D6Wv+z?4O_1x4p!--Hx`NyLakzP8jo$eqb)5 z%lR%-u8i(c=@7tDyQggb`ZeBWGrJAGBiL;%qVsy_1vFP29%&3KXb5fr|bopaQsOsa-p$S>Jkr9`moh#W_K1%t`Cux=tC!C+4pF1~9r9bIFkr-+a`y~^G#;kWGCgQmA){+11axA~0vA7o||6Lxz2j1?g zqdGGMo2NI}`NgAlb0%+;m6hja4mP=wa~$1QjSf=i9sXpIAXF-RR4^8z_6q;xY0=3$ z9ZpF0OsvVNfxvV~GPZD%EVg_aCe=t&jEdj(hhj=eGp1D+XXT%-(KL z%be-vh;l{0f6D&!n6mlvJEqwAF`SJ>swThYeu*yjscg5U1gzRzw&S%^3Cj)y6QB9a zoAyP_2Sh4gs`v3)eGTC-F;>QWa>jYDYA$>00*9}V(DersQ(N#RMcdBAwc%kE94zH^ z7Z!KEH!S7BuslWl^oW%BAxxVbGE)Ek0N&`Fw;zlA3;5g6_hf)gsj1}S@~1mb%eCUs z41TNOiHYtQ&wX9(#7t_7Mf8x|6SPNTTN#;-D=n6n2gWKir=UJl+W+C%X;^2tjx9-1-TY3d8|?JPUPbB;qjH7xVxH~ zbdu-sQe#0!hp=C=g_@2mqA!W(TDY3PG?@6P_9JF!m@t-PAKEN2XVCqh&avzIPpt?j zmDk;u)x+uMp;lX&=Iy244pSXjX~K|<>03pKV41kWjH<`w)Jyb@wrb~{3WR33LS4;D z7khPaSd9Vb@!qgIREdfI>o1qxM+_6?YM%;AEH7&E+e1$LNJmSN zy{r!BaZ~>D$Vwa{LkPT%$7VH(_u8NmF8k?wY+c+J9_f1+qi$m6-thzSK0I%5?QO|w z<;4`es#$T!7*t(b!hKbQcl~a)(#6pDm*|m?FuW?8J-1mMe;BInW$L`TCTAP4$Oml( z_2s<5m=Ln)G}V0r+W&0b#IOL^--v6HFrj{U{GKmz)b3a~w|p8TfKT<>yH5EG2+^nt zixacl>m;C*tyqJ2(j{A

#8wb($&|| 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 VGgGLBqyqnq)ReVfS1VeF{SPnWA#?x$ literal 10691 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 g%n`i;x?eURdZUPGmgxS6uS)5)$HDN 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 E1IPfZv;Y7A literal 14312 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 literal 15384 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 diff --git a/browser/themes/osx/Toolbar-inverted.png b/browser/themes/osx/Toolbar-inverted.png index 924558794d8d26694c5f0e2cf1c5644f1017da82..d4c07143290933707daeced8d9b61a51efac86bd 100644 GIT binary patch literal 27541 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 literal 26916 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π407$(hYF!#5>kA=B5&@YEe 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�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 Cj6LxH diff --git a/browser/themes/osx/Toolbar-yosemite.png b/browser/themes/osx/Toolbar-yosemite.png index 29f1337689abfbe4ef2143e0fa634da572e689d3..fb9f82677aaeb78baacf6b617766a64542999302 100644 GIT binary patch literal 17075 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 SgJb_ZQdUrtFO&Tc_}>6Epdk_f literal 16672 zcmb8$bx>U0wkZ0>-Gf^bJh;0w9)bo9F2UX1H4r2~f_rdxhu{H%yIXK;yrGfT-`?lc z-S5_^_wM}z3aGW3)w8FJIeue)QB#q}LMKB9003C;6=XgF0Px+gpA}G%Vc&6Q?{onG z$%FSYAWd($(`=Mh!oi2vO^j$0*3vW?JSjw*nQGLxhIoYbZ#stJkq~X(l}0l${fI{A zPt?UjkkLd{Mv@{>s{_1)e=CQ}0v`i(zJK+hw#s=Gz0O*1=*V&-xb8Uc5zn&lw7ke! zX5REU$o|Cqkm9c>PM@2kI#TjiV zI~FUWS0Gc7c)t0t1)umz`zH8F&IdUMd6^*I_pLXcT-eWulaw$C@*CY3X;Ju9Qx;4B z^R|Ry6{5=rrhKxwCWqfniTH{nh+E;`)ljH{6HGd`r3s1;28JmB6l-3V4*?zVnIB(b z>SQgTN;ry}&mc80*eXO4Zny}lj5F#`K%w-4 z6$QlTClKucB7Tv^MJ!_PIIUmiUvFA8f{H3ANxh2iZ6CeK2D78~d4qdVoPZng_Hnd5 zWd;`;T`16_n%12dm#kTCZ`R6i6|`%uS@+3giz;4Bo*oYHBtiG|-;)VA1Z2@pv%#3z z2Q~)-@fXPM>}}Q%my3Yq=q8u>(9M)!g4ms|6Ex^KJ`~auF4_>bt+j-oq}^YlYnp6T z-v17j8;sQm_!2QfERn#blJlOdRZeU4aMlm#f3kdM)CTUu*feai)gt)KPwNFwk(Hkn zyPe?tE;``{TwEsd%*&gPfun~PCb(im1LmR!&6W>hAqmMf&yq7z`V!CaBIk#&(dKnG zWuCb9F_guZAZ8PYoKzHOh>%I6@Y}ML4AFI^y8Lht>LD;8bdc5HxLj}XEIl(h!`lu1 z-p`TA+4ix86jY@D0|{mG#O*LK3mY1`qcQ&PEqV}h_x=7W6w8~Z)O)pl3ukd0 z6T8c7hXtq(DbP9E?0F3XzUM6PiucRLU~kQ%Rgil0zQ2}|y6lipiUNl2S>9aIMq_Nh zgr&nFoy-1zTdHw zaCQa?L>#40HK^aZ9Hzc_emKZ&(Yb-_#Bvy!O!i9;()j1+>9;uI2xiN1B(_?AQkZsr zN-XBubyHKi^dm$R7g%$aR_(s0?`q0A59N{c_ZGkIa6h_I{@qm>rXlG%Km%^aW||Z} zsq~w+!$Z4#LSX7ZPCU;4 zW?CMKO~!k;(J(3QmwiOnxTY0vr@Z3^n{81}^9jp>`Jop!Cu{}V^g1`yh8@k!_nLZR z0!mn1*o|RtueQa^d)-Br1h(KO0)Dz|$w&lD=7{Asgq71-XHbdxiel_YuWJ0@Zd`sE zZw5x*4M|=){P@)UYnWW~XVXSiN!OvN{R)l|l33v0?VP(oi;R+w}%!2#-ztsc;d!0)v#yg#x=e8XfzJ zpi6Fzk9Jx5YO_NHYEt<9W>C+HEU{tZTt`ibdCVsKxp}>^{6WXd<4H}Bb_4^~EaKuH zDhB_cr_15;pocNz4RpMoQHgc8wG$E1sZn6M+6mTuV~mQ!HF&$uuKSHVB1q{YMzS|@nNlfePhp=q7y_`T-_UrGgS3@*vdK;?h#Cyjj8e{OoMd+2D$ zOrxFq&_=!hcFb}nU2H#f-Ea7zybV9VZ~5I;O?8j5EKTONKDnJ*QQdC)QRW44bgoR} zgiO628UFg29}z6Zo55u+_q>DO-AH&b@cu(L2Z9S1LJGPXhGW{k-59Wz?r`$CFwfroX(fxY}Fs&X3?IQ2xGid^60GFu?~Q=Eh}i*<710z=j3Jiw)M zYFTVW9C!xw$BN7ode(xoAcz-Woftx%7Dx8W;{xS6ERoh)m{&;a{t91ciuVKn5%KrJlOR!oSlu;i^geL( z)G0c0^yap6^(4VL*P2VtOCcLbpAeqqcx6tbNwJ<$M)x8a(t&Eg8gdj`54Oq~7P zxsM<=DlJ989R0QT^vZZ3uz{3>X8uVG@wof(xPsWcNdJ6YnmRGX08T=BT3KM7H%a9d zYTu`Gaj+dl&F+6xl*+EIKHX%uxX8>Adke|&J8w(%3)I;SN89|({B+11AnSjc*B24L zorOuX35y@rPOhRSR17n6VwqA|Bv~6#oX9F(!q)CLfY?P*SmX=+jnw3?7~vPFsH~#> zWx7nc?_Jr12l@B|4kohsYT_9uHyTZKpUFd76LBo+f^lw&)fazRIg+?IdRo1?8oxVR z#VIrjFv)@9=75}5Ri{dx@aVqc#yVMy_V1*0_k@@dCXK zw!0Bc6)DT#NHLKcNLq8F2U`eo?@3Ux3)k-R#=SRV1@L8Va?Lq1UM@5qg9x)cb#N)% z&T9JZ%Y=H+*YPj}ko$?BeMN20Yc{dkInY$PMNn716{FdJD7d3H=3=QweF_9(Y-}hy zDPM>z9_VZKGyXtbpC50rv}D3`bB$07BAgl_%1pi@{rree`noH=$*RVWi&LBvx6^`T zi$C#V(akOb1x|tiE|<}dL46y-7D`Kgz7rjHI(cSI?(2-9C*nG9kR~=-|DH(-Aw-lYSE?gZJ$f z0QiuA^l6e^)F>Q~!B>%fMQ`K@L_&Dz)6J}ET$rGtnVP7)SdtZvSah`sOVpV%sZ;(wE$ z<9fGx!=msObn~UVhRd$6LH<{5g7~q=pKQMdQwnVQUw?Y)sv*hCfy0;mz4_q`TCtZ% z+MBxRchRMRkl~u(8=Wir8rvrjMz77Czh~PQj+WZtLaM2K)xVWj3hjLxnNVYO*q!^2rU z1TzVZC9n?vb*u*k@v?xm;NEws2n&ZOCf_q(mEnd0Ygui#xpws@;odiSsv}bo^)ua8 zPd97S?;y;m%-Vg(w9;a01~P`5z|=KT%LLjZ(7>x0w`=txi`X3jZalUBEI>7#dyf-0 z7AvX?l#*&3*p@VlrUj2i+XUwGA?der5-`B70pZtV8eUYocAx~ z``N2>tDK|af??)Yf;EbpB! zAXqR#OQZ5m04W^e{Ia3#(BXN$_G!!pr(!6bIXw04V{C4kSR3Ym>{yM{(VlM*A{T`s z)g$Fau|J1n1Nc5Ds+GhpXF7B+mN@q~=03a{yDT7xOL$GOlgyOJ3GtCsF7Lw|n^n$S z3Ij%kFX8!-2*+g=QSiryrhz0Bi8at|D)fA1#E7k7maj}AljfhQ#_fj#9CJ&D|A|53 zGZ}n3$gFq`fTet;HAz7Y;apk$FH#H|hc z=7CH1Hvl&l8`*sY`E`C4GX9L;E?$YO4u0*H?Vrhm&4{jV{pV38M^1P^+`XG8TUdYr zSy?nG6N|{9Ls{037UGYGg$&1Gdvmk-T*XtX(*kV zI&i04<^fnevg!t%sfOo9^bA4{Om{}=Op>ls1JIfhxC_{U^nQI~UfVUgL_96|17KZr z@*iMS%@uzZ9ha7TyQyT$Pl0Z97~WJb5(k;A<_k!Zn!Q({T}jem9oA=-3rN z&Xu@6xeQGWeC}@FP1>q<1UX-8>4$xoFzQ4eD2Q#*h@MI;*ONo}!&gHRD=Jmig;=6IMY)Hxy0lV{6(&y$#IC z_n{X(ua?RPJL+|de@r-cyu2u;{btE~0k6WmKlYkTGLWC?a4}{XBT(0S$Wd;IqTk9~1RZrx5r z*t{#2&A-WBD}+CiZ0grTPtI5im<{JZE~Wn+E+j4T8J|UI`Q5P;$HZc7q<5y_2b#^? z47U&-gPACPN%exf_*kXgNUNRUv(z z>!(0|%XOC2Tyjge@*@&9OI)$}KSz|f?f+?eJ@2@M1 z0xPI7_!H+&Iq=XePQ*N}_@_T-;zb@%QU{YKS!|^v$_v9naRml{x7T9jOqDtH7(eAoni?KHeGXd- zR+|mp?0YXfjb=iVphPt(Pban9%{My&YELma&WiiEO`&PbQyr3`u!!HmT5Bsb91Kl1 zLbd!%&|T6^5^h)$+&fGz2bpjsCO;M`<@Y>Ys)l75HnM#u2GDqwBM&^Met)Bd$~;Kx zxx+0UP8W7SXP+$h&bdof!n|ze_)fdS_4qwjNM8$9CEp;LRy4ka3pyeASNE||$^}13 z=?h}i&9xgLw70%ZIe6t&U{KmML^JisS=M`B11(%Y2_O<~^%!vS!zJb^ucL|x+xL{VUf6W2BTcW)#Kg9mDEDyn6Met%iEVO%8xbh3Il>5< z@5K)5{mz=Ql6yv(u(O06d>)lk%b^fmW2FL%&8#C@a`G9{o?bT%)`sA>X59r6NET~O ziu+02_;2g-sfqUAC3UJ0)_}GCV6Hh2QlP*R6=f&8ox(5tnHUBUb$0N2E`*h!8}UiA zsaT<$U7KMSV8QE+sN0K6i-$qo$#QILD2R~_tv(=GzMzu55V;`n|($klrtw54LE@M-v8sVoK z!D&v3QcuY2)7#rX1}i(!%4D68^8c!y1P26&{8J6Kp z@dSrBH}m7S-sxGHei}k-CIqOKaM!%KibnkF#a5O(mOj>iMp2v+XQ!_%*@Uuk-n{8& z9pws}%F7)h;c1JAcqJ{!0Jq@mlJT4?@Cm|li$q}0=h>~NIC&u5zYsrk?j$-UzOXk4 zG7zn>Q5D1;D5T)cGw4jR+9v-CP+#(`{BFFjw91E~Q|UvxMlW7s?trjUXy(1rXmhZ` z&80jRoP9Y}by%y6*;KH^ig`2WR2|@tKz$~#D5*k z34$e|WYpdRme#!c2gNnlNHxM@>$ahF<$!??%#-5KQzWt>r)-(5RUz#VBcb9NE4}TL zg$Bo=CAXgE@gCXjv5V-Y>~wa(%im;Gy`wztoyYlgcijVyfm+RBoNF&Fm-pw#YEONO zC9UBcc09sMq_!9ud!j^(MWcc3QKLAsuCmw~q;~!(|_a<3$~m!7X>WNH{G9 z_@c}1@ADQmMsDYJ#=Hz)j1?etA3|Li{fS^(`V5n$kq^V6pWntp#5l?zMYVimoVH@* zbZAcy^3M2OW2M4H9D*(?LWtOT`BfDs6;<$;_Hi`I34fVK-KWlYl*{SCAoUIb$j%}^ zJCO8uI#{-~isy$@)#vkO`&k<`KQfmVGP;;P#xShq@QZ2lP%U6OrwE$pNtbpjfhM;* zw`oX$3!m~FkNLEsm*JnJ{N0t99s`}pMUIaUvk+3#;t!dJt36MKl-wb>PXQ}(VMqvC z|Bg0hoHqmRZ(FdUHzZi%?Y=PvNFhSZ(~G0tzd8*kL77o+U+z5>6CXJ-5Ko|W@l5)N zJ7#M}@A|sckVo&2X03RuiE5V0#9tQls@-TR<~lw)9USMO4A4huD=6F`H|#&W>3-}4 zr;5Y9{t7xA0t>I-FZR6LS~kRVSGT7p9&DB;S|ozsX_PWrF56a!&V}w92i(q&__u_& zgHZ|=3mk`{^=sws1)$}d>`lTr;SUk z(Xt|#f`djd7SvD?md&Rec3T!fcV?Rx-c+IYawdYzT`PV%NS!gXKv_o`pbGUG6BYaoeOQH zRzSvXSQWKF*}2#-8LYW=Sb$9=uvHts+waJFfjB}Dd9!~8kE41C#nX?YY6)JV%@hK6 zvDE=v5NZ#p@-$5v2`esui9=vy3 z>R03-i0g|I+$zI2C9cj=p=Dj}J>x0}Ta4qCN)~DS-J+LjFn7X=JPVUi$YGK24r%c= z6pq(XXf^n%i1y4x|QDK^-k6`NJ`Ln zw>H6}hJvUA9C}Nqh|F*R}v~{c93-Mr|phOI#P}ur;v;{mboYZ|bB2ld+!oZj3 zLG*e;R;^D(ft`foIvo#E3FinqhR$^QXwF*e;r{;AQEtCfn~#k!(?ZZ1z&6hdj9Eh1 zn{K{HAz$6^w|ZH29Y22IN?VrVA{anhd6sB@fJQ-|=Rp^bE2q`|z8_J;!TS@+;_uXhlu}4oQu&VwTYM({vZG z>DN)@^Vf-?Z9k882Ta;29TD+-zwAi9tLROsxI!1u6|;Za>q>PG;{y~v(BqAx(XxsI`*26tNatZ6xTfy5um%ZM7&8yeCkqH1aX=0zloG5?G zwgo-01x{F}kurpp&U zgoM_gGB3px)l@DrD?O%6tMl_{K1KoZfu_cjuyQEiYmp1VZ~*9y++zP(v@wb{(BOc! zCnR1fNTeg)-J*7NvoqT^T0jgUf=j#-(e3+;7^~Gi%?pg2>l>VOV!@r=jUL#sl4yG3 zCee#V?L-}jvZ7jz`n1ci2THxwzRP za2^ch>^S71VKXQ+tX|QQg(CA)3d&WrE@OT!pXDszb%D-&{r*z4Pt6NGhZ6SlZvvPx6OVbB z*jCcq8aYA@YjjY_7zw?8@O^s*AGatXYYEm|dxeHjED_uB=c^XXQ>6J?fA{G@CtLcW zDN3ZIFAXnv6oo_^8n0AJz5xzX(>)V&^Sz%+zG4*f0#%05Kx~OjN>q!cxKlCD?>dkZgTVW5sbD25OwtU(6!;5&q?OZ-!`8UeslkadOPi-bDzT9Yht;KQt{E33OD-#74 zTh`4m=q$S3wYG`Z*P}k>n%rK<>2qI3$iPo{9@fRO*RqAxw9ukYp`zj{vwvkP^NaJd&?ezA^DP^2Dl>MBlRZxteR*<-Gy2Rn(6Zx?ajsVWqqZg3OTDKL=H{? zQx|E6w$i7lVI8mV{}oU`qsN4I?o%v9!1*O#yAIArn|0gK$P(}pKvYBQlKfbYbA$A( zpr|J$z=V*5@GjUpB{J&m%vy>p3Gpv2AQ}@=KkU_+g~(zsvF;>q_#*+H((7+RTZELt zC~-*wLyo2}>EIe@z-igQfKLJrVaQkuVFMAo*Ra1JK!fQ%m!>j`ubT762ZdgOnf-C} zx9oJY@*FEeIZTi-!-s%_k_V5sCr)rKG@WAh!9WJGmH^!shR;#&S$g0`rJd3cDoknC z;0QtZoH(JZ))enY&S(}>5P73;Xw;Y(VQZMl@lXpe|8LI|W{9+;D0T#hIak9tQS7e) zM2~AYNkCD?$%G`O@KI+>Q_ za2=X({TE!47t=mEW_jv>o3T4#U(BS)`T&WX|IxU^gohjOdI%@m^=^C;Tf?6NM*C-h z?}6(u;NGgz5KtTP`fNuru7Vx*e8ZUQeespi84ua4}Ry4UZ^EqGRd)9z;?-O!lKMR0G9xHqkMP(ihW1L)Y&_8V@mYU5%x< z=pKZcLZBjO3P;|0Z`9@M;U}BG_a`SRDn=S21y>fC}d3qFY!J7m#Aa=F#Tyvq~!hrlWP zW$k$bX??B(sn{?!WkOU+m)3Z#t-)^8HWY%>s*|2yCYM24_^ri`)DYHa9FgG^HdfX(`xi@nTxmb^JP7|7tMS$@ z*1H+Ki-m@J*W6hZk*el`VX`~w+-HT2?u6za{kWc)f@Vx8Eg^ru-0B$BfMo8rj5YHL#Dq<~YVSW?RO>dLpld1WC0L&qkFkp5R7G6+(9M8B)JXThcBh36Z2!8J(=(VGp<*D93DbNRyVKwe@D#pcY$K-nAq6i(mo=VC%dp>k^dQ(!3+Jdafj;(uDqLny$EoL zjj|1AvEd7VHQEh2wtTp$q7G3y!QQQ7?prWaUWwYB5=xV8+U;fx%IT|w<|g%H22fxcxy!Sy(TcQm-@tHg zn_{Sh8xoATtgCo@BtY_`(DK&%0+$k%>=kub)dKtKe4$BdVLw0kZhegDfYOJ05QfR= zB3|dXFZDklU=LCtI>a)Q@PJ;f1SM zK-0B=`*pEp=>6lHXjS%bl6&5PxWeqsMw?mTGDrZdu!Q9punVhq>B-`TCSQ|Zz>kF2 zRZ_uw96hlQDYmS2M2Q2L+u#Eu-`;6cy-$A<&jimyeIVOW7{@{%SXUFAWk2c;ytY3Ay>BXU05pFSRBO7)7j>DfCA&(FwVy{yRRjAoZ-G9vd>2)(AAz)F-KTlZbww4kfKgq_%p z#{afmX39>(7vv&Z|MY)sH%TCbw=wgr{{KX~vrGO*#?t+Qi}JhH2Fkl}?|N=o12a7& zgIm1^P8&K}R7eT#a&oS#p9xEK*$k(kh5y(t(>%1WM)J+Axdt)Df9fvQEbk{G^F2ez zM+W{-CeqOfnrBu>5u6Sn%?!aIxPi45( zmXaDx?If(^f!t+%QEcqu6A*2QTu$ViK1kYM>C2OYilCGKNxZC`#_!Al{xBIdW045z zWQ4cpM|rs0>JwD*9?^3>5%E)O^&WHtFGArnQn(m<*PBDAF4)mHJhC1RD~M+{DXPxb zjTq|?Hi_1P)cDHg>>QMl$RDz-s$+duiV>ARv~a1fMqY;U{O-^DQSBVFvfcL!!}`aaJX}a@Z!YhLS0w_rbzs$Hx@8#DR2_rJmf3*PH9qH;cT) z#offRKdHIGv0drx-Sb37VzZObP`GD2*TFdw2GNb%E^N2krJ%y~QVRMgMb^!Q_UB0- z#Qn{=-2|v0r&J;Z@*l$MLgLJF%bcI@l||xKV5o#x^v?A>`AOn(jK1})i85RPPqpDR zVFYmJAK+q2$F24`CTqXhkX(=sNSj^BKU@j>?;1J%}7O7N7qI7&{$#F14}l9cUtpC} zux=%;Oqx5wC5;Mshp=!(5%KX{8Npn&p$PuYPgf1eXq*6{-Jt83exx*@eXle^R9lJ*_3{0eE?P2;cFE%-HZ zX@le;fsuHJ__8bfe`tvp(LTO4E#2ON6+F4#s!39c{lN)Cxbl$LcCwE3Pu4e;S@sE> zFV|}NMBtn&ZtV3#xBn(<$Yqw!NvCjDcAleyT~_FB$y}!tir}z|9P};Ah_0m3VfC)s zfDlNwow{3$(@-r{ASEL&20tMG+?S=k1jLQ?kyePsE7FL;>4~14Af$(F!8Jjt9?lB zGLB~n)^+DJd3j;NjlkZL99C3ELOeD3Oo@o*Lp@Ls21n=!smbAY-ue}YW=O3a#>5)a z@o#=LaHaDP^1OOfN>l>h3wt8~T-4P=adk)PHc7gomsqbi{4V&^saZ>Mu;aKQHna`B zvz8NzU?pS*TMj3**Q@bApL zsnOD%1)Aj+LV{4^a1-9;;w%TpKjn`%6o`Xt{?e7pxrqX2%n8PV0ZYxDtd6sT`n;VQ z$#1Ca^zK2oh~mYj zJp<^oC)FM2|8iA1tMn{hiOc6QA!5PV8{!b%G%=weaoU;E+ZIX+c;#&@E31S|N$$jx z!Jx3U2>b3Dw~v}P?HGxKgq=6^!`Gb&kwa=cJM$-Od2ua(M_1hbhxib)vZ085VB{04 zBhMkf-BULQ-g!33K&SoaC>k>qZCN_s+y8f)hKX#Ja0<|gE{2na(f>P6i@DWR(`cE&e-u3d3Acl zJpxHD|2%I7LeIVkE4tKt;rr`RYf;1_U_{mmCsq>41FZ4sQ%#={8&pdNeG z039E z}5bqE`chbsM{p8YG^_yR&1gD`lxYrdg(dNYI(T5Q!qN#ith{!CDc15 z4B6jkqydcO8q8!bwlK=!R(zJxzvZ4ot+FAROYmk!YKg*Vtelllc{_1NQ6X7FF}ujq1ol{o_+KRYp?h#;LWvl_q2FBj z9s3=uw0K=P%Hu_9rA9a~t*0X9gR4#yY{3#Ar1$@nIoCU(rawjH#64TlA$y}~6OIGVpy~!N!&c#p@%i^5Qt^i%|kP@92N>rpDm4P598x zfrn^x0{ctsN>?v&PqPc$h)i`jN1sD>oxdHuTZ=`eO4!P5bjLhU{dE0e7v`Hz59H!T zu-e>)kUHw#z1_ZIr-f%uVI+bJvqDytX zc4gzs1dqd$ih6_pH{jeo;V09H)j8FqUNnj&e3jBJ^D5eymAxjo~olNgmikugb}8$QVz>#QsNzIM|3Ju}ihY6~T3uy4|$vISk=o-F46 z@%m7T5tOH5a1_0H@!&{eDK?iXRT`_S8&!G0tI|xk`*M!OwQAl%5kD&%>vS`mXSsGUmgs~s zeFuussPHd)JJQDAn_MV zNj1t05W%EjDLw_t`1<@E7c3hVFCW5AtAUK3~x`MD)|?g!Am!?xTn4%t;)Q0re3Dr5_*4cy>Sb8T-` zKEX88vC>-Mn&rLEbm}fc-w8e0z{|>1&AL04UIU%zbVt-Ie7kW_eQ~K;;VOfxYJeCo zIyYg#q!Pt-=6{mP+H8ADm*&5>l;nDMiwM$s$>I?ipwjr}vP}1zU{`+J1RT4Qha=e%Da}TnG-?V`k|B&BE z33%_tu0vn@TMq~4Z|li|0u7HzaV$4~#)`1dJ6;0S_J{UbcWz;R5&?nRD-I={%~!)3 z31oLi-b76fEeCa&)NuHb>{nA_ICYYfu2oI{D3!`?@WAJwvp*hDaFEcWz7K^mHTZSl zLsY@6-P~PNW7(234b8jUrhnA2iFUpfXqr~9hq_m*?P29>-DdMQhPO)(4=srK?|gOW zd}~4-uj5WDM|59b=C}=9@?xi!Q4HdqDOsXf!XpC_wgwaPXvSxLKJNJsn(ioqzyz!!OCPkZZ8itTA(Y{Ea(xIJ#xkE3Q zqc=uuWNU_d)re%Kug=aXej;Faxj1$cwM-9pRv^Y6E!QGpBPFqRo3CeY3HC4piVHpQL>~XbM zsPQADAM<`?QeNwB^d?iM4ZP)RXz%%1wZ_bhCI71z$oxS2G-4^Eco#u7MUnxc(F}9t zn$-yjwRcIXwv5BXfg7_yXgWXEocO1nF8zrO!4Jg8N^K}8@F_rw*L6InurZ~l?u)MB0} z^Y4O39xOc1<3vsPv$&mOzsm44zfnsuLgOQuF;5vn!@t$j+NXD$--^uWQlQIAV=z9u zsEHI*Q`ob`8D&?R1%+u$kf+yL0=de5VUBqm2bJIQ7n|7p045~N^7`Ph_XOO9`QnjJ z2q+~AV3{`?D{3W%Ylir$4aaOy%u?tDzv1D_Bjk;~LgPCild>zt#!v1`LEzAkpIMB+ zzgmiqkl5_InG_T9an$+H`%U;-o|;SDFj7)vT; zH%Yq}U#?X$1eD1$R8 z;?Cj(zCkIOla*Jrn?WaM=99@-(Pvt!C_NB(fa{NlwOUFM&zrR_Kd++JK7_5;z3KT) z&A}lkPyPaC?)i1Em6`Pv&aLM|=E%!UIhJ;5YO3R!0Ez&Qr?C z6v3Cp{F&J9#{)|fO+xB}#6}P!)ZgyH?xkj<`n2Izw??o89w5n%7V4xM+uDb?B_n&f zfrDP3YU$imx1owz(lAL}B;U1@H5v*40I%UQaWc<^cVXA*c0x9MB9<_CT2s)vd#{Dm zFA@by>VW`2E$8am+M19o#3LE*S3cplmj*tf&$5p9o)5-%of!exPme=X`eWkylN}b{ z#{T`fzb1~>+dWRcrH66=PFdJ&Ps+YNT)g=_zK1pWz}5BpuEEG!hY=0<^-BBzUo#3^Y^b!LAh7!Jv z{whvjiJlz*@N|5pV9+U5PNlm<66zwlugbI*sAag*qdmpP-z=oxAhxn>?{C@kpNo~3sY0I{~ibeI`gKPc0T7J=fL?*Ax7Yx|c{l(VXiG?4Jo(5x7lQx@yhH+sM%!j)WC)j__Fx09 zj)-9w6VWG+(8BKWA@_#^pc<;+?E`?u|2+KJHtkqOMg}&4Kipp}*!uu}Q&>aGoh5&o ztZ8jS{^w1mdBKi`*xA|JQz#aF9F~`t*FieCarH$A_7{Qu?_l)zie0TjfPXy_V2c`) XJc{_rVteSH#(6KRB2z7868irD7YV1@ diff --git a/browser/themes/osx/Toolbar-yosemite@2x.png b/browser/themes/osx/Toolbar-yosemite@2x.png index acea9018ac17de437dde0789f4dc0c1833099b0f..b161438dcf801b8ebdebe34169ed45c9bacc3f41 100644 GIT binary patch literal 39521 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 K)UJX$KKK`k$n~B8 literal 38547 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

Zdtt#Sg&4M#XtX+h|Z>sJPB`n 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 F|3A8ofQ|qF diff --git a/browser/themes/osx/Toolbar@2x.png b/browser/themes/osx/Toolbar@2x.png index 3a5d7d4b371abd04f1f7f9e58315316784d4ca8e..2cc91dcaee2e7f8c253cc0364bf4f0cc5d85fdd4 100644 GIT binary patch literal 72242 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ⅅ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Ƭ_M~c@QgYY50sqAU?ux(B=Hj)D1UGvV!ghP{5RF0Uako#B8;0B zeu;Y!=0dC!C=t^uDH-aR9%)6UlRozi&M=gAx0IaH@jfhJLU?HErb*;t)>t!yOJ@{> z6Whe)d@tmbCt1X3rL?({lhiMvqXSw*aD?*Y-EJkB{u?QHumUy99{Pmw9is&rk3+{7 zv9*Np&1dQSXrW&$bH8O7S8GODA0^oL6nJ!Y0C%O-YJzQPIU38fb2kRlne{1*3aUvZ zx~`OP%C2a?Ft-#2@ZZN*MLLQi_MgjZoI$K>4_21Xn$!obx?yH0NIfl@Pm!-`BKF%R zLT?Ssky@vMVIcHXneyX2^-htQT@yMN!Yo=-U`HWg#3D?vW76hRzg-ba{-YUx+I}U! zpf#1Y^R>g`;~PcRs{EW6)8y3Xv1Sk8ZxRP@^IJnA>=L~Z8D2MA=?UrQUO~{Hdk7n8 z{qb!v?|o8;6G6$!DE7!ckB+;GGT|Fx6#zvM;_DkPQ?V}>ZcJzX4C1b*Ug#OW| zph}C5ZHMEMas0Ov%&&c+$D)KT;HuN`>M~0k3~36XxTY-KVKFjT0}#&&3*9tf?41;A zwz=Ftxon=52Yz;8M+E3H?cP{Q+vX3#)1NTzbc`S*z9p9to^eiHx3I}O38|g8&XU?! zM@#QG(96s43W%%NPaY}uu;GoWp!2^r{Xbvm%z`NBYLK6T2?m1Iiu%`BiPGhXO zrgfQ5i>4fX^{Y>2lBM}ru*E2S{Wsy4xa7d%vR1vf;D9aKAr?U;|Km}t@bYKl*5_|| zP>m12OP-Ayih0UXEMpr}+)$^4FN!Gn0G-io;QzZE$< zpZn%r6RAn|(K?D$$f!EJV|=vmPi_9s)PuR4xz7rTPTtWMjwpxu=VEGYqZg$R1f4PA zqRGW;x3c|yHCp_N;~c3Mk*-c2nill6LS+A0O(W|1h2R|UJpvny-nucVGOgdW+Jlg=|f>P>o1LV;Mz} zEkb0M${MooGYFM8DzaqkLbA&e)7Z*Vma)W;WnyUT%R6Hk!}#6N@A&pL6cH-{;8l0CmwndO=10oyiKPWnngJMysXnqWa!~!Dgf@nl~-& zIzQGg#q=bhOkiZI$GqmY^$&*-B;JuM<=#8^!5M zV(G@_u30HMulDmE9Il#h{UcNV4Ck5a`d<#olXIl(Y}K3nQiNozv<^+hD4aXg8BdsozeP9qPBeVf-_`FY=Wz*jUqz8S4N=RdZ{*dP;AUECF1 zxgrEE!%7ylVhYB{Q7WDdTsx_~_LhCVW_`Duz3uClnanXi4cMC+Kj=3#hEOJ3&3t-c z`4q7vb+;_XHPK{47}bOtA!Tk8I?w2al_VvBRrl51hGLA4~}oWEe+eKUq&b^ z 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 diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css index ca8b373ebfa..35a9d52c9cc 100644 --- a/browser/themes/osx/browser.css +++ b/browser/themes/osx/browser.css @@ -1131,6 +1131,13 @@ toolbar .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker > .dropmarker-ic transform: scaleX(-1); } + #web-apps-button[cui-areatype="toolbar"] { + -moz-image-region: rect(0, 1440px, 36px, 1404px); + } + + #web-apps-button[cui-areatype="toolbar"]:hover:active:not([disabled="true"]) { + -moz-image-region: rect(36px, 1440px, 72px, 1404px); + } :-moz-any(@primaryToolbarButtons@) > .toolbarbutton-icon, :-moz-any(@primaryToolbarButtons@) > .toolbarbutton-menubutton-button > .toolbarbutton-icon { @@ -1290,6 +1297,11 @@ toolbar .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker > .dropmarker-ic -moz-image-region: rect(64px, 1792px, 128px, 1728px); } + #web-apps-button[cui-areatype="menu-panel"], + toolbarpaletteitem[place="palette"] > #web-apps-button { + -moz-image-region: rect(0, 1856px, 64px, 1792px); + } + toolbaritem[sdkstylewidget="true"] > toolbarbutton { -moz-image-region: rect(0, 1664px, 64px, 1600px); } diff --git a/browser/themes/osx/menuPanel-yosemite.png b/browser/themes/osx/menuPanel-yosemite.png index 0e4d495beb1da2b3640e50de2b82af7712a5bb45..d897508a75e5870ab533226a900fbc4d282a98aa 100644 GIT binary patch literal 21638 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 JPDHLkV1lIr()0iT literal 21149 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 AA^-pY diff --git a/browser/themes/osx/menuPanel-yosemite@2x.png b/browser/themes/osx/menuPanel-yosemite@2x.png index f005b7057fc7a8bcab6873bee102aa604d747bd7..171dada2acb29f3b4a95d496644ff1097ed43706 100644 GIT binary patch literal 48582 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 JDVH({{U4v-+d2RM literal 47568 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

GUf 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 VEl%;`oLq84V;P)Zmx@60a~`o=QCAK}blB?-gVu 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 BIRgLy diff --git a/browser/themes/osx/menuPanel@2x.png b/browser/themes/osx/menuPanel@2x.png index af2daf02dae8acde18d7fbabc97b0e57ab5538c2..63a3617531c4eb811ab18ce20e3cf6fdbf6e699c 100644 GIT binary patch literal 65475 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 literal 63907 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 diff --git a/browser/themes/shared/browser.inc b/browser/themes/shared/browser.inc index 61b7d0a7fad..e5e78a9d9f0 100644 --- a/browser/themes/shared/browser.inc +++ b/browser/themes/shared/browser.inc @@ -2,7 +2,7 @@ % Note that zoom-reset-button is a bit different since it doesn't use an image and thus has the image with display: none. %define nestedButtons #zoom-out-button, #zoom-reset-button, #zoom-in-button, #cut-button, #copy-button, #paste-button -%define primaryToolbarButtons #back-button, #forward-button, #home-button, #print-button, #downloads-button, #bookmarks-menu-button, #new-tab-button, #new-window-button, #fullscreen-button, #sync-button, #feed-button, #tabview-button, #social-share-button, #open-file-button, #find-button, #developer-button, #preferences-button, #privatebrowsing-button, #save-page-button, #switch-to-metro-button, #add-ons-button, #history-panelmenu, #nav-bar-overflow-button, #PanelUI-menu-button, #characterencoding-button, #email-link-button, #sidebar-button, @nestedButtons@, #e10s-button, #panic-button +%define primaryToolbarButtons #back-button, #forward-button, #home-button, #print-button, #downloads-button, #bookmarks-menu-button, #new-tab-button, #new-window-button, #fullscreen-button, #sync-button, #feed-button, #tabview-button, #social-share-button, #open-file-button, #find-button, #developer-button, #preferences-button, #privatebrowsing-button, #save-page-button, #switch-to-metro-button, #add-ons-button, #history-panelmenu, #nav-bar-overflow-button, #PanelUI-menu-button, #characterencoding-button, #email-link-button, #sidebar-button, @nestedButtons@, #e10s-button, #panic-button, #web-apps-button %ifdef XP_MACOSX % Prior to 10.7 there wasn't a native fullscreen button so we use #restore-button to exit fullscreen diff --git a/browser/themes/shared/menupanel.inc.css b/browser/themes/shared/menupanel.inc.css index b4518d72530..0e3844cc5c1 100644 --- a/browser/themes/shared/menupanel.inc.css +++ b/browser/themes/shared/menupanel.inc.css @@ -156,6 +156,11 @@ toolbarpaletteitem[place="palette"] > #panic-button { -moz-image-region: rect(32px, 896px, 64px, 864px); } +#web-apps-button[cui-areatype="menu-panel"], +toolbarpaletteitem[place="palette"] > #web-apps-button { + -moz-image-region: rect(0, 928px, 32px, 896px); +} + toolbaritem[sdkstylewidget="true"] > toolbarbutton { -moz-image-region: rect(0, 832px, 32px, 800px); } diff --git a/browser/themes/shared/toolbarbuttons.inc.css b/browser/themes/shared/toolbarbuttons.inc.css index 3f647a428a3..36f5b465a96 100644 --- a/browser/themes/shared/toolbarbuttons.inc.css +++ b/browser/themes/shared/toolbarbuttons.inc.css @@ -190,6 +190,15 @@ toolbar[brighttext] #sync-button[status="active"]:hover:active:not([disabled="tr transform: scaleX(-1); } +#web-apps-button[cui-areatype="toolbar"] { + -moz-image-region: rect(0, 720px, 18px, 702px); +} + +%ifdef XP_MACOSX +#web-apps-button[cui-areatype="toolbar"]:hover:active:not([disabled="true"]) { + -moz-image-region: rect(18px, 720px, 36px, 702px); +} +%endif #loop-call-button > .toolbarbutton-badge-container { list-style-image: url(chrome://browser/skin/loop/toolbar.png); diff --git a/browser/themes/windows/Toolbar-XP.png b/browser/themes/windows/Toolbar-XP.png index 9ec9e721743630bbea623219394a1aa3702fc009..e91d392056effb045b2e68d54c590ad402e0d8b8 100644 GIT binary patch literal 16162 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 literal 15785 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 I3+V^^Ki@zewg3PC diff --git a/browser/themes/windows/Toolbar-aero.png b/browser/themes/windows/Toolbar-aero.png index 40e7c0d482b42fd7f289b0cd2fbfcef6fe90c286..1f096677b868f0877687dd0e90746a7451e05d93 100644 GIT binary patch literal 15450 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 literal 15103 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%0A%_uA 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 diff --git a/browser/themes/windows/Toolbar-inverted.png b/browser/themes/windows/Toolbar-inverted.png index b421a09ab5767f0f01acbd1a89b90b17e2265eba..4de1dc2a1ce5e333d07c8f9807c839968861d426 100644 GIT binary patch literal 10934 zcmYj%bx<5W(Dvc(6nA%bJ)l5wC=_=JMGI|lJsgS`3KTgGFV5kv1&Wo!-HJo8J6vCW z?|k3P`%fmBJhPciHk<6T8>_3Wiib^w4FCY})ZV;)3jiR)UivJU=r1i~6t4{c;0jWE ztzh7b^e+g@^Of>dFpUar2rgInh(HTtc+A(|0BoiLCZU+GeGDT7Oafi6Kk`sq2lxwQG-3YgS#N}aoMed_*LJ?%Bk{~b76go}l4p|iEuMql5pXJUWM zNuBn|QUBCGoBVF6Qg2pQF3xRt+@j#{@u@K8=ek#>|8~?h8(Bo?#~v@N?bQX*aypJN zH0by}5S-7fqKZc&I{`BS+S|VK=k+ zES7OimOhi(8uTQU#Rv73+Qxgl92^{D6Wv+z?4O_1x4p!--Hx`NyLakzP8jo$eqb)5 z%lR%-u8i(c=@7tDyQggb`ZeBWGrJAGBiL;%qVsy_1vFP29%&3KXb5fr|bopaQsOsa-p$S>Jkr9`moh#W_K1%t`Cux=tC!C+4pF1~9r9bIFkr-+a`y~^G#;kWGCgQmA){+11axA~0vA7o||6Lxz2j1?g zqdGGMo2NI}`NgAlb0%+;m6hja4mP=wa~$1QjSf=i9sXpIAXF-RR4^8z_6q;xY0=3$ z9ZpF0OsvVNfxvV~GPZD%EVg_aCe=t&jEdj(hhj=eGp1D+XXT%-(KL z%be-vh;l{0f6D&!n6mlvJEqwAF`SJ>swThYeu*yjscg5U1gzRzw&S%^3Cj)y6QB9a zoAyP_2Sh4gs`v3)eGTC-F;>QWa>jYDYA$>00*9}V(DersQ(N#RMcdBAwc%kE94zH^ z7Z!KEH!S7BuslWl^oW%BAxxVbGE)Ek0N&`Fw;zlA3;5g6_hf)gsj1}S@~1mb%eCUs z41TNOiHYtQ&wX9(#7t_7Mf8x|6SPNTTN#;-D=n6n2gWKir=UJl+W+C%X;^2tjx9-1-TY3d8|?JPUPbB;qjH7xVxH~ zbdu-sQe#0!hp=C=g_@2mqA!W(TDY3PG?@6P_9JF!m@t-PAKEN2XVCqh&avzIPpt?j zmDk;u)x+uMp;lX&=Iy244pSXjX~K|<>03pKV41kWjH<`w)Jyb@wrb~{3WR33LS4;D z7khPaSd9Vb@!qgIREdfI>o1qxM+_6?YM%;AEH7&E+e1$LNJmSN zy{r!BaZ~>D$Vwa{LkPT%$7VH(_u8NmF8k?wY+c+J9_f1+qi$m6-thzSK0I%5?QO|w z<;4`es#$T!7*t(b!hKbQcl~a)(#6pDm*|m?FuW?8J-1mMe;BInW$L`TCTAP4$Oml( z_2s<5m=Ln)G}V0r+W&0b#IOL^--v6HFrj{U{GKmz)b3a~w|p8TfKT<>yH5EG2+^nt zixacl>m;C*tyqJ2(j{A

#8wb($&|| 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 VGgGLBqyqnq)ReVfS1VeF{SPnWA#?x$ literal 10691 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 literal 15392 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 diff --git a/browser/themes/windows/Toolbar.png b/browser/themes/windows/Toolbar.png index ab936c17ab7e170b6899907b0666c8f49197b265..b0a70c1e487261f54ca3091c4517b15981d56a82 100644 GIT binary patch literal 6136 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 diff --git a/browser/themes/windows/menuPanel-aero.png b/browser/themes/windows/menuPanel-aero.png index c8bfa4dd3ec7ef323f5bc20a5ef2c9626df4d38a..9e6f5a184ee121fe1b698a6b06ef575543e8d737 100644 GIT binary patch literal 31974 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 diff --git a/browser/themes/windows/menuPanel.png b/browser/themes/windows/menuPanel.png index 47f9e6c19d1662dbeb2778000d3143b61ec92753..4fc27b29a8e4ecea6ea70860fe3e7b90deae0817 100644 GIT binary patch literal 15700 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 From e26df52232ee974d1fe94e42b13eca28422c0816 Mon Sep 17 00:00:00 2001 From: Mark Finkle Date: Mon, 29 Sep 2014 15:07:06 -0400 Subject: [PATCH 40/60] Bug 1071738 - Limit form autofill dropdown to a maximum of five rows r=bnicholson --- mobile/android/base/FormAssistPopup.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/mobile/android/base/FormAssistPopup.java b/mobile/android/base/FormAssistPopup.java index cb27cb6c0c4..29608238e91 100644 --- a/mobile/android/base/FormAssistPopup.java +++ b/mobile/android/base/FormAssistPopup.java @@ -60,6 +60,8 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene } private PopupType mPopupType; + private static final int MAX_VISIBLE_ROWS = 5; + private static int sAutoCompleteMinWidth; private static int sAutoCompleteRowHeight; private static int sValidationMessageHeight; @@ -260,7 +262,7 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene // Don't show the form assist popup when using fullscreen VKB InputMethodManager imm = - (InputMethodManager) GeckoAppShell.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isFullscreenMode()) return; @@ -307,9 +309,14 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene } } + int rows = mAutoCompleteList.getAdapter().getCount(); + if (rows > MAX_VISIBLE_ROWS) { + rows = MAX_VISIBLE_ROWS; + } + int popupHeight; if (mPopupType == PopupType.AUTOCOMPLETE) - popupHeight = sAutoCompleteRowHeight * mAutoCompleteList.getAdapter().getCount(); + popupHeight = sAutoCompleteRowHeight * rows; else popupHeight = sValidationMessageHeight; From 5eeddf01a2981c504b3ca4928b638c3b2f0b4091 Mon Sep 17 00:00:00 2001 From: Mark Finkle Date: Mon, 29 Sep 2014 15:07:09 -0400 Subject: [PATCH 41/60] Bug 1071738 - Formatting cleanup in FormAssistPopup.java r=bnicholson --- mobile/android/base/FormAssistPopup.java | 25 +++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/mobile/android/base/FormAssistPopup.java b/mobile/android/base/FormAssistPopup.java index 29608238e91..e105b697848 100644 --- a/mobile/android/base/FormAssistPopup.java +++ b/mobile/android/base/FormAssistPopup.java @@ -34,6 +34,7 @@ import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; +import android.widget.RelativeLayout.LayoutParams; import android.widget.TextView; import java.util.Arrays; @@ -66,8 +67,8 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene private static int sAutoCompleteRowHeight; private static int sValidationMessageHeight; private static int sValidationTextMarginTop; - private static RelativeLayout.LayoutParams sValidationTextLayoutNormal; - private static RelativeLayout.LayoutParams sValidationTextLayoutInverted; + private static LayoutParams sValidationTextLayoutNormal; + private static LayoutParams sValidationTextLayoutInverted; private static final String LOGTAG = "GeckoFormAssistPopup"; @@ -216,10 +217,10 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene sValidationTextMarginTop = (int) (mContext.getResources().getDimension(R.dimen.validation_message_margin_top)); - sValidationTextLayoutNormal = new RelativeLayout.LayoutParams(mValidationMessageText.getLayoutParams()); + sValidationTextLayoutNormal = new LayoutParams(mValidationMessageText.getLayoutParams()); sValidationTextLayoutNormal.setMargins(0, sValidationTextMarginTop, 0, 0); - sValidationTextLayoutInverted = new RelativeLayout.LayoutParams((ViewGroup.MarginLayoutParams) sValidationTextLayoutNormal); + sValidationTextLayoutInverted = new LayoutParams((ViewGroup.MarginLayoutParams) sValidationTextLayoutNormal); sValidationTextLayoutInverted.setMargins(0, 0, 0, 0); mValidationMessageArrow = (ImageView) mValidationMessage.findViewById(R.id.validation_message_arrow); @@ -263,8 +264,9 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene // Don't show the form assist popup when using fullscreen VKB InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); - if (imm.isFullscreenMode()) + if (imm.isFullscreenMode()) { return; + } // Hide/show the appropriate popup contents if (mAutoCompleteList != null) @@ -289,7 +291,7 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene int width = (int) (mW * zoom); int height = (int) (mH * zoom); - int popupWidth = RelativeLayout.LayoutParams.MATCH_PARENT; + int popupWidth = LayoutParams.MATCH_PARENT; int popupLeft = left < 0 ? 0 : left; FloatSize viewport = aMetrics.getSize(); @@ -304,8 +306,9 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene popupWidth = sAutoCompleteMinWidth; // Move the popup to the left if there isn't enough room for it. - if ((popupLeft + popupWidth) > viewport.width) + if ((popupLeft + popupWidth) > viewport.width) { popupLeft = (int) (viewport.width - popupWidth); + } } } @@ -315,10 +318,11 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene } int popupHeight; - if (mPopupType == PopupType.AUTOCOMPLETE) + if (mPopupType == PopupType.AUTOCOMPLETE) { popupHeight = sAutoCompleteRowHeight * rows; - else + } else { popupHeight = sValidationMessageHeight; + } int popupTop = top + height; @@ -353,8 +357,7 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene } } - RelativeLayout.LayoutParams layoutParams = - new RelativeLayout.LayoutParams(popupWidth, popupHeight); + LayoutParams layoutParams = new LayoutParams(popupWidth, popupHeight); layoutParams.setMargins(popupLeft, popupTop, 0, 0); setLayoutParams(layoutParams); requestLayout(); From 91da176909ee0a5cc4cb8b0c38aa57f0e1e4dd42 Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Sat, 20 Sep 2014 15:31:10 +0200 Subject: [PATCH 42/60] Bug 1073993 - Let the BrowserNewTabPreloader initialize lazily when the first new tab is opened r=jaws --- browser/modules/BrowserNewTabPreloader.jsm | 55 ++-------------------- 1 file changed, 4 insertions(+), 51 deletions(-) diff --git a/browser/modules/BrowserNewTabPreloader.jsm b/browser/modules/BrowserNewTabPreloader.jsm index ddb7759a002..305fee15aa7 100644 --- a/browser/modules/BrowserNewTabPreloader.jsm +++ b/browser/modules/BrowserNewTabPreloader.jsm @@ -23,9 +23,6 @@ const PREF_BRANCH = "browser.newtab."; // The interval between swapping in a preload docShell and kicking off the // next preload in the background. const PRELOADER_INTERVAL_MS = 600; -// The initial delay before we start preloading our first new tab page. The -// timer is started after the first 'browser-delayed-startup' has been sent. -const PRELOADER_INIT_DELAY_MS = 5000; // The number of miliseconds we'll wait after we received a notification that // causes us to update our list of browsers and tabbrowser sizes. This acts as // kind of a damper when too many events are occuring in quick succession. @@ -52,11 +49,10 @@ function clearTimer(timer) { this.BrowserNewTabPreloader = { init: function Preloader_init() { - Initializer.start(); + Preferences.init(); }, uninit: function Preloader_uninit() { - Initializer.stop(); HostFrame.destroy(); Preferences.uninit(); HiddenBrowsers.uninit(); @@ -81,47 +77,6 @@ this.BrowserNewTabPreloader = { Object.freeze(BrowserNewTabPreloader); -let Initializer = { - _timer: null, - _observing: false, - - start: function Initializer_start() { - Services.obs.addObserver(this, TOPIC_DELAYED_STARTUP, false); - this._observing = true; - }, - - stop: function Initializer_stop() { - this._timer = clearTimer(this._timer); - - if (this._observing) { - Services.obs.removeObserver(this, TOPIC_DELAYED_STARTUP); - this._observing = false; - } - }, - - observe: function Initializer_observe(aSubject, aTopic, aData) { - if (aTopic == TOPIC_DELAYED_STARTUP) { - Services.obs.removeObserver(this, TOPIC_DELAYED_STARTUP); - this._observing = false; - this._startTimer(); - } else if (aTopic == TOPIC_TIMER_CALLBACK) { - this._timer = null; - this._startPreloader(); - } - }, - - _startTimer: function Initializer_startTimer() { - this._timer = createTimer(this, PRELOADER_INIT_DELAY_MS); - }, - - _startPreloader: function Initializer_startPreloader() { - Preferences.init(); - if (Preferences.enabled) { - HiddenBrowsers.init(); - } - } -}; - let Preferences = { _enabled: null, _branch: null, @@ -153,8 +108,6 @@ let Preferences = { if (prevEnabled && !this.enabled) { HiddenBrowsers.uninit(); - } else if (!prevEnabled && this.enabled) { - HiddenBrowsers.init(); } }, }; @@ -168,7 +121,7 @@ let HiddenBrowsers = { TOPIC_XUL_WINDOW_CLOSED ], - init: function () { + _init: function () { this._browsers = new Map(); this._updateBrowserSizes(); this._topics.forEach(t => Services.obs.addObserver(this, t, false)); @@ -187,9 +140,9 @@ let HiddenBrowsers = { }, get: function (width, height) { - // We haven't been initialized, yet. + // Initialize if this is the first call. if (!this._browsers) { - return null; + this._init(); } let key = width + "x" + height; From 03d83df18afecdce63d39462c1cc90bb2db735b5 Mon Sep 17 00:00:00 2001 From: wesj Date: Mon, 29 Sep 2014 13:14:39 -0700 Subject: [PATCH 43/60] Bug 1072376 - Only set lock screen flags if we're showing on the lockscreen. r=lucasr --- mobile/android/base/BrowserApp.java | 22 +++++++++++++++------- mobile/android/base/GuestSession.java | 9 +++++++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/mobile/android/base/BrowserApp.java b/mobile/android/base/BrowserApp.java index 287a4481284..b16cc305caf 100644 --- a/mobile/android/base/BrowserApp.java +++ b/mobile/android/base/BrowserApp.java @@ -78,8 +78,8 @@ import org.mozilla.gecko.widget.GeckoActionProvider; import android.app.Activity; import android.app.AlertDialog; -import android.content.BroadcastReceiver; import android.app.KeyguardManager; +import android.content.BroadcastReceiver; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; @@ -521,14 +521,8 @@ public class BrowserApp extends GeckoApp final String args = intent.getStringExtra("args"); if (GuestSession.shouldUse(this, args)) { - GuestSession.configureWindow(getWindow()); mProfile = GeckoProfile.createGuestProfile(this); } else { - // We also allow non-guest sessions if the keyguard isn't a secure one. - final KeyguardManager manager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); - if (Versions.feature16Plus && !manager.isKeyguardSecure()) { - GuestSession.configureWindow(getWindow()); - } GeckoProfile.maybeCleanupGuestProfile(this); } @@ -757,6 +751,7 @@ public class BrowserApp extends GeckoApp final String args = getIntent().getStringExtra("args"); // If an external intent tries to start Fennec in guest mode, and it's not already // in guest mode, this will change modes before opening the url. + // NOTE: OnResume is called twice sometimes when showing on the lock screen. final boolean enableGuestSession = GuestSession.shouldUse(this, args); final boolean inGuestSession = GeckoProfile.get(this).inGuestMode(); if (enableGuestSession != inGuestSession) { @@ -765,6 +760,19 @@ public class BrowserApp extends GeckoApp return; } + final KeyguardManager manager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); + // The test machines return null for the KeyguardService, despite running Android 4.2. + if (Versions.feature11Plus && manager != null) { + // If the keyguard is showing AND we're either in guest mode or the keyguard is insecure, + // allow showing this window. We do this in onResume so that we can avoid setting these flags if the keyguard + // is not showing since it affects Android's layout of the window. + if (manager.isKeyguardLocked() && (GeckoProfile.get(this).inGuestMode() || !manager.isKeyguardSecure())) { + GuestSession.configureWindow(getWindow()); + } else { + GuestSession.unconfigureWindow(getWindow()); + } + } + EventDispatcher.getInstance().unregisterGeckoThreadListener((GeckoEventListener)this, "Prompt:ShowTop"); } diff --git a/mobile/android/base/GuestSession.java b/mobile/android/base/GuestSession.java index 538346fcdaa..ab952e11539 100644 --- a/mobile/android/base/GuestSession.java +++ b/mobile/android/base/GuestSession.java @@ -73,9 +73,14 @@ public class GuestSession { public static void configureWindow(Window window) { // In guest sessions we allow showing over the keyguard. - window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); - window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); } + + public static void unconfigureWindow(Window window) { + // In guest sessions we allow showing over the keyguard. + window.clearFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + } + private static PendingIntent getNotificationIntent(Context context) { Intent intent = new Intent(NOTIFICATION_INTENT); intent.setClass(context, BrowserApp.class); From 812993297532be510cb629c71d0ac01ddec4863b Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Mon, 29 Sep 2014 13:24:47 -0700 Subject: [PATCH 44/60] Bug 1073993 - Tiny follow-up fix to allow disabling the preloader again r=me --- browser/modules/BrowserNewTabPreloader.jsm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/browser/modules/BrowserNewTabPreloader.jsm b/browser/modules/BrowserNewTabPreloader.jsm index 305fee15aa7..fc19589a1be 100644 --- a/browser/modules/BrowserNewTabPreloader.jsm +++ b/browser/modules/BrowserNewTabPreloader.jsm @@ -59,6 +59,10 @@ this.BrowserNewTabPreloader = { }, newTab: function Preloader_newTab(aTab) { + if (!Preferences.enabled) { + return false; + } + let win = aTab.ownerDocument.defaultView; if (win.gBrowser) { let utils = win.QueryInterface(Ci.nsIInterfaceRequestor) From 87aa42169aa0d365ae83f9a7673ef654b72b18b4 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Mon, 29 Sep 2014 16:57:09 -0400 Subject: [PATCH 45/60] Backed out changesets ba4b4066c0fe and 1372b8919331 (bug 1071738) for Android crashes. CLOSED TREE --- mobile/android/base/FormAssistPopup.java | 36 +++++++++--------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/mobile/android/base/FormAssistPopup.java b/mobile/android/base/FormAssistPopup.java index e105b697848..cb27cb6c0c4 100644 --- a/mobile/android/base/FormAssistPopup.java +++ b/mobile/android/base/FormAssistPopup.java @@ -34,7 +34,6 @@ import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; -import android.widget.RelativeLayout.LayoutParams; import android.widget.TextView; import java.util.Arrays; @@ -61,14 +60,12 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene } private PopupType mPopupType; - private static final int MAX_VISIBLE_ROWS = 5; - private static int sAutoCompleteMinWidth; private static int sAutoCompleteRowHeight; private static int sValidationMessageHeight; private static int sValidationTextMarginTop; - private static LayoutParams sValidationTextLayoutNormal; - private static LayoutParams sValidationTextLayoutInverted; + private static RelativeLayout.LayoutParams sValidationTextLayoutNormal; + private static RelativeLayout.LayoutParams sValidationTextLayoutInverted; private static final String LOGTAG = "GeckoFormAssistPopup"; @@ -217,10 +214,10 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene sValidationTextMarginTop = (int) (mContext.getResources().getDimension(R.dimen.validation_message_margin_top)); - sValidationTextLayoutNormal = new LayoutParams(mValidationMessageText.getLayoutParams()); + sValidationTextLayoutNormal = new RelativeLayout.LayoutParams(mValidationMessageText.getLayoutParams()); sValidationTextLayoutNormal.setMargins(0, sValidationTextMarginTop, 0, 0); - sValidationTextLayoutInverted = new LayoutParams((ViewGroup.MarginLayoutParams) sValidationTextLayoutNormal); + sValidationTextLayoutInverted = new RelativeLayout.LayoutParams((ViewGroup.MarginLayoutParams) sValidationTextLayoutNormal); sValidationTextLayoutInverted.setMargins(0, 0, 0, 0); mValidationMessageArrow = (ImageView) mValidationMessage.findViewById(R.id.validation_message_arrow); @@ -263,10 +260,9 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene // Don't show the form assist popup when using fullscreen VKB InputMethodManager imm = - (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); - if (imm.isFullscreenMode()) { + (InputMethodManager) GeckoAppShell.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + if (imm.isFullscreenMode()) return; - } // Hide/show the appropriate popup contents if (mAutoCompleteList != null) @@ -291,7 +287,7 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene int width = (int) (mW * zoom); int height = (int) (mH * zoom); - int popupWidth = LayoutParams.MATCH_PARENT; + int popupWidth = RelativeLayout.LayoutParams.MATCH_PARENT; int popupLeft = left < 0 ? 0 : left; FloatSize viewport = aMetrics.getSize(); @@ -306,23 +302,16 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene popupWidth = sAutoCompleteMinWidth; // Move the popup to the left if there isn't enough room for it. - if ((popupLeft + popupWidth) > viewport.width) { + if ((popupLeft + popupWidth) > viewport.width) popupLeft = (int) (viewport.width - popupWidth); - } } } - int rows = mAutoCompleteList.getAdapter().getCount(); - if (rows > MAX_VISIBLE_ROWS) { - rows = MAX_VISIBLE_ROWS; - } - int popupHeight; - if (mPopupType == PopupType.AUTOCOMPLETE) { - popupHeight = sAutoCompleteRowHeight * rows; - } else { + if (mPopupType == PopupType.AUTOCOMPLETE) + popupHeight = sAutoCompleteRowHeight * mAutoCompleteList.getAdapter().getCount(); + else popupHeight = sValidationMessageHeight; - } int popupTop = top + height; @@ -357,7 +346,8 @@ public class FormAssistPopup extends RelativeLayout implements GeckoEventListene } } - LayoutParams layoutParams = new LayoutParams(popupWidth, popupHeight); + RelativeLayout.LayoutParams layoutParams = + new RelativeLayout.LayoutParams(popupWidth, popupHeight); layoutParams.setMargins(popupLeft, popupTop, 0, 0); setLayoutParams(layoutParams); requestLayout(); From daf46102ef42bd11f7d240adbf044fdbeba971b6 Mon Sep 17 00:00:00 2001 From: Mark Hammond Date: Tue, 30 Sep 2014 09:52:39 +1000 Subject: [PATCH 46/60] Bug 1073855 - fix browser_datareporting_notification tests for dialog-based prefs. r=gfritzsche --- .../test/general/browser_datareporting_notification.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/browser/base/content/test/general/browser_datareporting_notification.js b/browser/base/content/test/general/browser_datareporting_notification.js index aa8d5c21b74..c695a9fc21b 100644 --- a/browser/base/content/test/general/browser_datareporting_notification.js +++ b/browser/base/content/test/general/browser_datareporting_notification.js @@ -201,6 +201,11 @@ function test_multiple_windows() { ok(true, "Advanced preferences opened on info bar button press."); executeSoon(function soon() { prefWindowOpened = true; + // If the prefs are being displayed in a dialog we need to close it. + // If in a tab (ie, in-content prefs) it closes with the window. + if (!Services.prefs.getBoolPref("browser.preferences.inContent")) { + prefWin.close(); + } maybeFinish(); }); }, "advanced-pane-loaded", false); From dca5c8baea4229352497ed3dcdc2c19a960e3c32 Mon Sep 17 00:00:00 2001 From: Blair McBride Date: Tue, 30 Sep 2014 11:16:48 +1300 Subject: [PATCH 47/60] Bug 1073846 - Wrong URL loads after autofill of a hostname that matches a search engine. r=mak --HG-- extra : transplant_source : %D3%25%3F%83R%B7%81%DF%13nZ%1CH%D8B%B10%99%B4%B2 --- toolkit/components/places/UnifiedComplete.js | 11 ++-- .../data/engine-rel-searchform.xml | 5 ++ .../unifiedcomplete/test_searchEngine_host.js | 58 ++++++++++++++++++- .../places/tests/unifiedcomplete/xpcshell.ini | 3 + 4 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 toolkit/components/places/tests/unifiedcomplete/data/engine-rel-searchform.xml diff --git a/toolkit/components/places/UnifiedComplete.js b/toolkit/components/places/UnifiedComplete.js index 58e1a2c702c..b9bda63527c 100644 --- a/toolkit/components/places/UnifiedComplete.js +++ b/toolkit/components/places/UnifiedComplete.js @@ -711,12 +711,8 @@ Search.prototype = { // with an alias - which works like a keyword. hasFirstResult = yield this._matchSearchEngineAlias(); } - let shouldAutofill = this._shouldAutofill; - if (this.pending && !hasFirstResult && shouldAutofill) { - // Or it may look like a URL we know about from search engines. - hasFirstResult = yield this._matchSearchEngineUrl(); - } + let shouldAutofill = this._shouldAutofill; if (this.pending && !hasFirstResult && shouldAutofill) { // It may also look like a URL we know from the database. // Here we can only try to predict whether the URL autofill query is @@ -725,6 +721,11 @@ Search.prototype = { hasFirstResult = yield this._matchKnownUrl(conn, queries); } + if (this.pending && !hasFirstResult && shouldAutofill) { + // Or it may look like a URL we know about from search engines. + hasFirstResult = yield this._matchSearchEngineUrl(); + } + if (this.pending && this._enableActions && !hasFirstResult) { // If we don't have a result that matches what we know about, then // we use a fallback for things we don't know about. diff --git a/toolkit/components/places/tests/unifiedcomplete/data/engine-rel-searchform.xml b/toolkit/components/places/tests/unifiedcomplete/data/engine-rel-searchform.xml new file mode 100644 index 00000000000..f4baad28ab1 --- /dev/null +++ b/toolkit/components/places/tests/unifiedcomplete/data/engine-rel-searchform.xml @@ -0,0 +1,5 @@ + + +engine-rel-searchform.xml + + diff --git a/toolkit/components/places/tests/unifiedcomplete/test_searchEngine_host.js b/toolkit/components/places/tests/unifiedcomplete/test_searchEngine_host.js index 4192ca78586..1ed30e4b549 100644 --- a/toolkit/components/places/tests/unifiedcomplete/test_searchEngine_host.js +++ b/toolkit/components/places/tests/unifiedcomplete/test_searchEngine_host.js @@ -1,6 +1,42 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ +Cu.import("resource://testing-common/httpd.js"); + +function* addTestEngines(items) { + let httpServer = new HttpServer(); + httpServer.start(-1); + httpServer.registerDirectory("/", do_get_cwd()); + let gDataUrl = "http://localhost:" + httpServer.identity.primaryPort + "/data/"; + do_register_cleanup(() => httpServer.stop(() => {})); + + let engines = []; + + for (let item of items) { + do_print("Adding engine: " + item); + yield new Promise(resolve => { + Services.obs.addObserver(function obs(subject, topic, data) { + let engine = subject.QueryInterface(Ci.nsISearchEngine); + do_print("Observed " + data + " for " + engine.name); + if (data != "engine-added" || engine.name != item) { + return; + } + + Services.obs.removeObserver(obs, "browser-search-engine-modified"); + engines.push(engine); + resolve(); + }, "browser-search-engine-modified", false); + + do_print("`Adding engine from URL: " + gDataUrl + item); + Services.search.addEngine(gDataUrl + item, + Ci.nsISearchEngine.DATA_XML, null, false); + }); + } + + return engines; +} + + add_task(function* test_searchEngine_autoFill() { Services.search.addEngineWithDetails("MySearchEngine", "", "", "", "GET", "http://my.search.com/"); @@ -15,7 +51,7 @@ add_task(function* test_searchEngine_autoFill() { } yield promiseAddVisits(visits); addBookmark({ uri: uri, title: "Example bookmark" }); - Assert.ok(frecencyForUrl(uri) > 10000); + ok(frecencyForUrl(uri) > 10000, "Adeded URI should have expected high frecency"); do_log_info("Check search domain is autoFilled even if there's an higher frecency match"); yield check_autocomplete({ @@ -26,3 +62,23 @@ add_task(function* test_searchEngine_autoFill() { yield cleanup(); }); + +add_task(function* test_searchEngine_noautoFill() { + let engineName = "engine-rel-searchform.xml"; + let [engine] = yield addTestEngines([engineName]); + do_register_cleanup(() => Services.search.removeEngine(engine)); + equal(engine.searchForm, "http://example.com/?search"); + + Services.prefs.setBoolPref("browser.urlbar.autoFill.typed", false); + yield promiseAddVisits(NetUtil.newURI("http://example.com/my/")); + + do_print("Check search domain is not autoFilled if it matches a visited domain"); + yield check_autocomplete({ + search: "example", + autofilled: "example.com/", + completed: "example.com/" + }); + + yield cleanup(); +}); + diff --git a/toolkit/components/places/tests/unifiedcomplete/xpcshell.ini b/toolkit/components/places/tests/unifiedcomplete/xpcshell.ini index ae7fbd63c8c..f05a175f7cb 100644 --- a/toolkit/components/places/tests/unifiedcomplete/xpcshell.ini +++ b/toolkit/components/places/tests/unifiedcomplete/xpcshell.ini @@ -1,6 +1,9 @@ [DEFAULT] head = head_autocomplete.js tail = +support-files = + data/engine-rel-searchform.xml + [test_416211.js] [test_416214.js] From bf25d2da6e8cb752e08c1d5b1cd97a1dc740d848 Mon Sep 17 00:00:00 2001 From: Blair McBride Date: Tue, 30 Sep 2014 13:56:06 +1300 Subject: [PATCH 48/60] Bug 1070778 - Selecting a moz-action: result then typing more can result in "Search X for moz-action:..." item. r=mak --HG-- extra : transplant_source : P/b%9D%B6T%85%22%A8%1B%F0%18%3A%827%C2qx%F6%97 --- browser/base/content/test/general/browser.ini | 2 + .../test/general/browser_bug1070778.js | 66 +++++++++++++++++++ .../content/test/general/browser_bug556061.js | 10 +-- browser/base/content/urlbarBindings.xml | 19 ++---- toolkit/content/widgets/autocomplete.xml | 5 -- 5 files changed, 78 insertions(+), 24 deletions(-) create mode 100644 browser/base/content/test/general/browser_bug1070778.js diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index 75269e1812c..50935671bc3 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -296,6 +296,8 @@ skip-if = e10s # Bug ?????? - test directly manipulates content (directly gets e [browser_bug1015721.js] skip-if = os == 'win' || e10s # Bug 1056146 - FullZoomHelper uses promiseTabLoadEvent() which isn't e10s friendly [browser_bug1064280_changeUrlInPinnedTab.js] +[browser_bug1070778.js] +skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliability on Linux [browser_canonizeURL.js] skip-if = e10s # Bug ?????? - [JavaScript Error: "Error in AboutHome.sendAboutHomeData TypeError: target.messageManager is undefined" {file: "resource:///modules/AboutHome.jsm" line: 208}] [browser_contentAreaClick.js] diff --git a/browser/base/content/test/general/browser_bug1070778.js b/browser/base/content/test/general/browser_bug1070778.js new file mode 100644 index 00000000000..31ee7b19551 --- /dev/null +++ b/browser/base/content/test/general/browser_bug1070778.js @@ -0,0 +1,66 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function* promiseAutoComplete(inputText) { + gURLBar.focus(); + gURLBar.value = inputText.slice(0, -1); + EventUtils.synthesizeKey(inputText.slice(-1) , {}); + yield promiseSearchComplete(); +} + +function is_selected(index) { + is(gURLBar.popup.richlistbox.selectedIndex, index, `Item ${index + 1} should be selected`); +} + +add_task(function*() { + // This test is only relevant if UnifiedComplete is enabled. + if (!Services.prefs.getBoolPref("browser.urlbar.unifiedcomplete")) + return; + + let itemIds = []; + registerCleanupFunction(() => { + itemIds.forEach(PlacesUtils.bookmarks.removeItem); + }); + + let itemId = + PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId, + NetUtil.newURI("http://example.com/?q=%s"), + PlacesUtils.bookmarks.DEFAULT_INDEX, + "test"); + PlacesUtils.bookmarks.setKeywordForBookmark(itemId, "keyword"); + itemIds.push(itemId); + + // This item only needed so we can select the keyword item, select something + // else, then select the keyword item again. + itemId = + PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId, + NetUtil.newURI("http://example.com/keyword"), + PlacesUtils.bookmarks.DEFAULT_INDEX, + "keyword abc"); + itemIds.push(itemId); + + yield promiseAutoComplete("keyword a"); + + // Select keyword item + EventUtils.synthesizeKey("VK_DOWN", {}); + is_selected(0); + // Select next one (important!) + EventUtils.synthesizeKey("VK_DOWN", {}); + is_selected(1); + // Re-select keyword item + EventUtils.synthesizeKey("VK_UP", {}); + is_selected(0); + + EventUtils.synthesizeKey("b", {}); + yield promiseSearchComplete(); + + is(gURLBar.value, "keyword ab", "urlbar should have expected input"); + + let result = gURLBar.popup.richlistbox.firstChild; + isnot(result, null, "Should have first item"); + let uri = NetUtil.newURI(result.getAttribute("url")); + is(uri.spec, makeActionURI("keyword", {url: "http://example.com/?q=ab", input: "keyword ab"}).spec, "Expect correct url"); + + EventUtils.synthesizeKey("VK_ESCAPE", {}); + yield promisePopupHidden(gURLBar.popup); +}); diff --git a/browser/base/content/test/general/browser_bug556061.js b/browser/base/content/test/general/browser_bug556061.js index 98185233ec3..1a0563d5a31 100644 --- a/browser/base/content/test/general/browser_bug556061.js +++ b/browser/base/content/test/general/browser_bug556061.js @@ -31,7 +31,8 @@ let tests = [ setup: function() { gURLBar.value = testActionURL; gURLBar.valueIsTyped = true; - is(gURLBar.value, testActionURL, "gURLBar.value starts with correct value"); + is(gURLBar._value, testActionURL, "gURLBar starts with the correct real value"); + is(gURLBar.value, testURL, "gURLBar starts with the correct display value"); // Focus the urlbar so we can select it all & copy gURLBar.focus(); @@ -39,7 +40,7 @@ let tests = [ goDoCommand("cmd_copy"); }, success: function() { - is(gURLBar.value, testActionURL, "gURLBar.value didn't change when copying"); + is(gURLBar._value, testActionURL, "gURLBar.value didn't change when copying"); } }, { @@ -51,7 +52,7 @@ let tests = [ goDoCommand("cmd_copy"); }, success: function() { - is(gURLBar.value, testActionURL, "gURLBar.value didn't change when copying"); + is(gURLBar._value, testActionURL, "gURLBar.value didn't change when copying"); } }, { @@ -73,7 +74,8 @@ let tests = [ gURLBar.value = testActionURL; gURLBar.valueIsTyped = true; // Sanity check that we have the right value - is(gURLBar.value, testActionURL, "gURLBar.value starts with correct value"); + is(gURLBar._value, testActionURL, "gURLBar starts with the correct real value"); + is(gURLBar.value, testURL, "gURLBar starts with the correct display value"); // Now just select part of the value & cut that. gURLBar.selectionStart = testURL.length - 10; diff --git a/browser/base/content/urlbarBindings.xml b/browser/base/content/urlbarBindings.xml index a5feea220f4..24acdd622ed 100644 --- a/browser/base/content/urlbarBindings.xml +++ b/browser/base/content/urlbarBindings.xml @@ -125,19 +125,6 @@ "" - - - - - + + + + +

    + + + + +