summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/update/tests/data
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/update/tests/data')
-rw-r--r--toolkit/mozapps/update/tests/data/complete.exebin79872 -> 0 bytes
-rw-r--r--toolkit/mozapps/update/tests/data/complete.marbin97888 -> 0 bytes
-rw-r--r--toolkit/mozapps/update/tests/data/complete.pngbin878 -> 0 bytes
-rw-r--r--toolkit/mozapps/update/tests/data/complete_log_success_mac332
-rw-r--r--toolkit/mozapps/update/tests/data/complete_log_success_win320
-rw-r--r--toolkit/mozapps/update/tests/data/complete_mac.marbin98454 -> 0 bytes
-rw-r--r--toolkit/mozapps/update/tests/data/complete_precomplete18
-rw-r--r--toolkit/mozapps/update/tests/data/complete_precomplete_mac21
-rw-r--r--toolkit/mozapps/update/tests/data/complete_removed-files41
-rw-r--r--toolkit/mozapps/update/tests/data/complete_removed-files_mac41
-rw-r--r--toolkit/mozapps/update/tests/data/complete_update_manifest59
-rw-r--r--toolkit/mozapps/update/tests/data/old_version.marbin421 -> 0 bytes
-rw-r--r--toolkit/mozapps/update/tests/data/partial.exebin79872 -> 0 bytes
-rw-r--r--toolkit/mozapps/update/tests/data/partial.marbin10645 -> 0 bytes
-rw-r--r--toolkit/mozapps/update/tests/data/partial.pngbin776 -> 0 bytes
-rw-r--r--toolkit/mozapps/update/tests/data/partial_log_failure_mac192
-rw-r--r--toolkit/mozapps/update/tests/data/partial_log_failure_win192
-rw-r--r--toolkit/mozapps/update/tests/data/partial_log_success_mac279
-rw-r--r--toolkit/mozapps/update/tests/data/partial_log_success_win279
-rw-r--r--toolkit/mozapps/update/tests/data/partial_mac.marbin11172 -> 0 bytes
-rw-r--r--toolkit/mozapps/update/tests/data/partial_precomplete19
-rw-r--r--toolkit/mozapps/update/tests/data/partial_precomplete_mac22
-rw-r--r--toolkit/mozapps/update/tests/data/partial_removed-files41
-rw-r--r--toolkit/mozapps/update/tests/data/partial_removed-files_mac41
-rw-r--r--toolkit/mozapps/update/tests/data/partial_update_manifest63
-rw-r--r--toolkit/mozapps/update/tests/data/replace_log_success6
-rw-r--r--toolkit/mozapps/update/tests/data/shared.js632
-rw-r--r--toolkit/mozapps/update/tests/data/sharedUpdateXML.js364
-rw-r--r--toolkit/mozapps/update/tests/data/simple.marbin1031 -> 0 bytes
-rw-r--r--toolkit/mozapps/update/tests/data/wrong_product_channel.marbin421 -> 0 bytes
-rw-r--r--toolkit/mozapps/update/tests/data/xpcshellConstantsPP.js53
-rw-r--r--toolkit/mozapps/update/tests/data/xpcshellUtilsAUS.js4047
32 files changed, 0 insertions, 7062 deletions
diff --git a/toolkit/mozapps/update/tests/data/complete.exe b/toolkit/mozapps/update/tests/data/complete.exe
deleted file mode 100644
index da9cdf0cc..000000000
--- a/toolkit/mozapps/update/tests/data/complete.exe
+++ /dev/null
Binary files differ
diff --git a/toolkit/mozapps/update/tests/data/complete.mar b/toolkit/mozapps/update/tests/data/complete.mar
deleted file mode 100644
index 52306e0a2..000000000
--- a/toolkit/mozapps/update/tests/data/complete.mar
+++ /dev/null
Binary files differ
diff --git a/toolkit/mozapps/update/tests/data/complete.png b/toolkit/mozapps/update/tests/data/complete.png
deleted file mode 100644
index 2990a539f..000000000
--- a/toolkit/mozapps/update/tests/data/complete.png
+++ /dev/null
Binary files differ
diff --git a/toolkit/mozapps/update/tests/data/complete_log_success_mac b/toolkit/mozapps/update/tests/data/complete_log_success_mac
deleted file mode 100644
index 4f992a137..000000000
--- a/toolkit/mozapps/update/tests/data/complete_log_success_mac
+++ /dev/null
@@ -1,332 +0,0 @@
-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 REMOVEFILE Contents/Resources/7/7text0
-PREPARE REMOVEFILE Contents/Resources/7/7text1
-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 REMOVEFILE Contents/Resources/7/7text0
-EXECUTE REMOVEFILE Contents/Resources/7/7text1
-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 REMOVEFILE Contents/Resources/7/7text0
-FINISH REMOVEFILE Contents/Resources/7/7text1
-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_log_success_win b/toolkit/mozapps/update/tests/data/complete_log_success_win
deleted file mode 100644
index c5a03dc9d..000000000
--- a/toolkit/mozapps/update/tests/data/complete_log_success_win
+++ /dev/null
@@ -1,320 +0,0 @@
-UPDATE TYPE complete
-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 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 REMOVEFILE 7/7text0
-PREPARE REMOVEFILE 7/7text1
-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 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 REMOVEFILE 7/7text0
-EXECUTE REMOVEFILE 7/7text1
-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 5/5text1
-file cannot be removed because it does not exist; skipping
-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 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 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 9/94/
-FINISH REMOVEDIR 9/94/
-directory no longer exists; skipping
-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 8/89/
-FINISH REMOVEDIR 8/89/
-directory no longer exists; skipping
-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 8/84/
-FINISH REMOVEDIR 8/84/
-directory no longer exists; skipping
-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 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 REMOVEFILE 7/7text0
-FINISH REMOVEFILE 7/7text1
-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_mac.mar b/toolkit/mozapps/update/tests/data/complete_mac.mar
deleted file mode 100644
index ca1497f4f..000000000
--- a/toolkit/mozapps/update/tests/data/complete_mac.mar
+++ /dev/null
Binary files differ
diff --git a/toolkit/mozapps/update/tests/data/complete_precomplete b/toolkit/mozapps/update/tests/data/complete_precomplete
deleted file mode 100644
index ae7a0013f..000000000
--- a/toolkit/mozapps/update/tests/data/complete_precomplete
+++ /dev/null
@@ -1,18 +0,0 @@
-remove "searchplugins/searchpluginstext0"
-remove "searchplugins/searchpluginspng1.png"
-remove "searchplugins/searchpluginspng0.png"
-remove "removed-files"
-remove "precomplete"
-remove "exe0.exe"
-remove "1/10/10text0"
-remove "0/0exe0.exe"
-remove "0/00/00text1"
-remove "0/00/00text0"
-remove "0/00/00png0.png"
-rmdir "searchplugins/"
-rmdir "defaults/pref/"
-rmdir "defaults/"
-rmdir "1/10/"
-rmdir "1/"
-rmdir "0/00/"
-rmdir "0/"
diff --git a/toolkit/mozapps/update/tests/data/complete_precomplete_mac b/toolkit/mozapps/update/tests/data/complete_precomplete_mac
deleted file mode 100644
index 8d81a36d6..000000000
--- a/toolkit/mozapps/update/tests/data/complete_precomplete_mac
+++ /dev/null
@@ -1,21 +0,0 @@
-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/1/10/10text0"
-remove "Contents/Resources/0/0exe0.exe"
-remove "Contents/Resources/0/00/00text1"
-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/1/10/"
-rmdir "Contents/Resources/1/"
-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/complete_removed-files b/toolkit/mozapps/update/tests/data/complete_removed-files
deleted file mode 100644
index e45c43c1f..000000000
--- a/toolkit/mozapps/update/tests/data/complete_removed-files
+++ /dev/null
@@ -1,41 +0,0 @@
-text0
-text1
-3/3text0
-3/3text1
-4/exe0.exe
-4/4text0
-4/4text1
-4/
-5/5text0
-5/5text1
-5/*
-6/
-7/*
-8/80/
-8/81/
-8/82/
-8/83/
-8/84/
-8/85/*
-8/86/*
-8/87/*
-8/88/*
-8/89/*
-8/80/
-8/84/*
-8/85/*
-8/89/
-9/90/
-9/91/
-9/92/
-9/93/
-9/94/
-9/95/*
-9/96/*
-9/97/*
-9/98/*
-9/99/*
-9/90/
-9/94/*
-9/95/*
-9/99/
diff --git a/toolkit/mozapps/update/tests/data/complete_removed-files_mac b/toolkit/mozapps/update/tests/data/complete_removed-files_mac
deleted file mode 100644
index 955dc5b34..000000000
--- a/toolkit/mozapps/update/tests/data/complete_removed-files_mac
+++ /dev/null
@@ -1,41 +0,0 @@
-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/data/complete_update_manifest b/toolkit/mozapps/update/tests/data/complete_update_manifest
deleted file mode 100644
index 383a324f6..000000000
--- a/toolkit/mozapps/update/tests/data/complete_update_manifest
+++ /dev/null
@@ -1,59 +0,0 @@
-type "complete"
-add "precomplete"
-add "searchplugins/searchpluginstext0"
-add "searchplugins/searchpluginspng1.png"
-add "searchplugins/searchpluginspng0.png"
-add "removed-files"
-add-if "extensions/extensions1" "extensions/extensions1/extensions1text0"
-add-if "extensions/extensions1" "extensions/extensions1/extensions1png1.png"
-add-if "extensions/extensions1" "extensions/extensions1/extensions1png0.png"
-add-if "extensions/extensions0" "extensions/extensions0/extensions0text0"
-add-if "extensions/extensions0" "extensions/extensions0/extensions0png1.png"
-add-if "extensions/extensions0" "extensions/extensions0/extensions0png0.png"
-add "exe0.exe"
-add "1/10/10text0"
-add "0/0exe0.exe"
-add "0/00/00text1"
-add "0/00/00text0"
-add "0/00/00png0.png"
-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/5text1"
-remove "5/5text0"
-rmrfdir "5/"
-remove "4/exe0.exe"
-remove "4/4text1"
-remove "4/4text0"
-rmdir "4/"
-remove "3/3text1"
-remove "3/3text0"
diff --git a/toolkit/mozapps/update/tests/data/old_version.mar b/toolkit/mozapps/update/tests/data/old_version.mar
deleted file mode 100644
index 31550698a..000000000
--- a/toolkit/mozapps/update/tests/data/old_version.mar
+++ /dev/null
Binary files differ
diff --git a/toolkit/mozapps/update/tests/data/partial.exe b/toolkit/mozapps/update/tests/data/partial.exe
deleted file mode 100644
index 3949fd2a0..000000000
--- a/toolkit/mozapps/update/tests/data/partial.exe
+++ /dev/null
Binary files differ
diff --git a/toolkit/mozapps/update/tests/data/partial.mar b/toolkit/mozapps/update/tests/data/partial.mar
deleted file mode 100644
index 789d3d98d..000000000
--- a/toolkit/mozapps/update/tests/data/partial.mar
+++ /dev/null
Binary files differ
diff --git a/toolkit/mozapps/update/tests/data/partial.png b/toolkit/mozapps/update/tests/data/partial.png
deleted file mode 100644
index 9246f586c..000000000
--- a/toolkit/mozapps/update/tests/data/partial.png
+++ /dev/null
Binary files differ
diff --git a/toolkit/mozapps/update/tests/data/partial_log_failure_mac b/toolkit/mozapps/update/tests/data/partial_log_failure_mac
deleted file mode 100644
index 3b2933ebd..000000000
--- a/toolkit/mozapps/update/tests/data/partial_log_failure_mac
+++ /dev/null
@@ -1,192 +0,0 @@
-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 REMOVEFILE Contents/Resources/7/7text0
-PREPARE REMOVEFILE Contents/Resources/7/7text1
-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/7/7text0
-backup_restore: backup file doesn't exist: Contents/Resources/7/7text0.moz-backup
-FINISH REMOVEFILE Contents/Resources/7/7text1
-backup_restore: backup file doesn't exist: Contents/Resources/7/7text1.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: 2
-calling QuitProgressUI
diff --git a/toolkit/mozapps/update/tests/data/partial_log_failure_win b/toolkit/mozapps/update/tests/data/partial_log_failure_win
deleted file mode 100644
index e3d683dc1..000000000
--- a/toolkit/mozapps/update/tests/data/partial_log_failure_win
+++ /dev/null
@@ -1,192 +0,0 @@
-UPDATE TYPE partial
-PREPARE ADD searchplugins/searchpluginstext0
-PREPARE PATCH searchplugins/searchpluginspng1.png
-PREPARE PATCH searchplugins/searchpluginspng0.png
-PREPARE ADD precomplete
-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 REMOVEFILE 7/7text0
-PREPARE REMOVEFILE 7/7text1
-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 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 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 7/7text0
-backup_restore: backup file doesn't exist: 7/7text0.moz-backup
-FINISH REMOVEFILE 7/7text1
-backup_restore: backup file doesn't exist: 7/7text1.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: 2
-calling QuitProgressUI
diff --git a/toolkit/mozapps/update/tests/data/partial_log_success_mac b/toolkit/mozapps/update/tests/data/partial_log_success_mac
deleted file mode 100644
index fb5272ad2..000000000
--- a/toolkit/mozapps/update/tests/data/partial_log_success_mac
+++ /dev/null
@@ -1,279 +0,0 @@
-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 REMOVEFILE Contents/Resources/7/7text0
-PREPARE REMOVEFILE Contents/Resources/7/7text1
-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 REMOVEFILE Contents/Resources/7/7text0
-EXECUTE REMOVEFILE Contents/Resources/7/7text1
-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 REMOVEFILE Contents/Resources/7/7text0
-FINISH REMOVEFILE Contents/Resources/7/7text1
-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_log_success_win b/toolkit/mozapps/update/tests/data/partial_log_success_win
deleted file mode 100644
index 1f5c4b3b4..000000000
--- a/toolkit/mozapps/update/tests/data/partial_log_success_win
+++ /dev/null
@@ -1,279 +0,0 @@
-UPDATE TYPE partial
-PREPARE ADD searchplugins/searchpluginstext0
-PREPARE PATCH searchplugins/searchpluginspng1.png
-PREPARE PATCH searchplugins/searchpluginspng0.png
-PREPARE ADD precomplete
-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 REMOVEFILE 7/7text0
-PREPARE REMOVEFILE 7/7text1
-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 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 REMOVEFILE 7/7text0
-EXECUTE REMOVEFILE 7/7text1
-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 5/5text1
-file cannot be removed because it does not exist; skipping
-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 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 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 9/94/
-FINISH REMOVEDIR 9/94/
-directory no longer exists; skipping
-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 8/89/
-FINISH REMOVEDIR 8/89/
-directory no longer exists; skipping
-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 8/84/
-FINISH REMOVEDIR 8/84/
-directory no longer exists; skipping
-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 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 REMOVEFILE 7/7text0
-FINISH REMOVEFILE 7/7text1
-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_mac.mar b/toolkit/mozapps/update/tests/data/partial_mac.mar
deleted file mode 100644
index 5a702ed4a..000000000
--- a/toolkit/mozapps/update/tests/data/partial_mac.mar
+++ /dev/null
Binary files differ
diff --git a/toolkit/mozapps/update/tests/data/partial_precomplete b/toolkit/mozapps/update/tests/data/partial_precomplete
deleted file mode 100644
index 3ec201463..000000000
--- a/toolkit/mozapps/update/tests/data/partial_precomplete
+++ /dev/null
@@ -1,19 +0,0 @@
-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
deleted file mode 100644
index c65b6e4e3..000000000
--- a/toolkit/mozapps/update/tests/data/partial_precomplete_mac
+++ /dev/null
@@ -1,22 +0,0 @@
-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 b/toolkit/mozapps/update/tests/data/partial_removed-files
deleted file mode 100644
index 881311b82..000000000
--- a/toolkit/mozapps/update/tests/data/partial_removed-files
+++ /dev/null
@@ -1,41 +0,0 @@
-a/b/text0
-a/b/text1
-a/b/3/3text0
-a/b/3/3text1
-a/b/4/4exe0.exe
-a/b/4/4text0
-a/b/4/4text1
-a/b/4/
-a/b/5/5text0
-a/b/5/5text1
-a/b/5/*
-a/b/6/
-a/b/7/*
-a/b/8/80/
-a/b/8/81/
-a/b/8/82/
-a/b/8/83/
-a/b/8/84/
-a/b/8/85/*
-a/b/8/86/*
-a/b/8/87/*
-a/b/8/88/*
-a/b/8/89/*
-a/b/8/80/
-a/b/8/84/*
-a/b/8/85/*
-a/b/8/89/
-a/b/9/90/
-a/b/9/91/
-a/b/9/92/
-a/b/9/93/
-a/b/9/94/
-a/b/9/95/*
-a/b/9/96/*
-a/b/9/97/*
-a/b/9/98/*
-a/b/9/99/*
-a/b/9/90/
-a/b/9/94/*
-a/b/9/95/*
-a/b/9/99/
diff --git a/toolkit/mozapps/update/tests/data/partial_removed-files_mac b/toolkit/mozapps/update/tests/data/partial_removed-files_mac
deleted file mode 100644
index 955dc5b34..000000000
--- a/toolkit/mozapps/update/tests/data/partial_removed-files_mac
+++ /dev/null
@@ -1,41 +0,0 @@
-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/data/partial_update_manifest b/toolkit/mozapps/update/tests/data/partial_update_manifest
deleted file mode 100644
index 8d4e60ed2..000000000
--- a/toolkit/mozapps/update/tests/data/partial_update_manifest
+++ /dev/null
@@ -1,63 +0,0 @@
-type "partial"
-add "precomplete"
-add "a/b/searchplugins/searchpluginstext0"
-patch-if "a/b/searchplugins/searchpluginspng1.png" "a/b/searchplugins/searchpluginspng1.png.patch" "a/b/searchplugins/searchpluginspng1.png"
-patch-if "a/b/searchplugins/searchpluginspng0.png" "a/b/searchplugins/searchpluginspng0.png.patch" "a/b/searchplugins/searchpluginspng0.png"
-add-if "a/b/extensions/extensions1" "a/b/extensions/extensions1/extensions1text0"
-patch-if "a/b/extensions/extensions1" "a/b/extensions/extensions1/extensions1png1.png.patch" "a/b/extensions/extensions1/extensions1png1.png"
-patch-if "a/b/extensions/extensions1" "a/b/extensions/extensions1/extensions1png0.png.patch" "a/b/extensions/extensions1/extensions1png0.png"
-add-if "a/b/extensions/extensions0" "a/b/extensions/extensions0/extensions0text0"
-patch-if "a/b/extensions/extensions0" "a/b/extensions/extensions0/extensions0png1.png.patch" "a/b/extensions/extensions0/extensions0png1.png"
-patch-if "a/b/extensions/extensions0" "a/b/extensions/extensions0/extensions0png0.png.patch" "a/b/extensions/extensions0/extensions0png0.png"
-patch "a/b/exe0.exe.patch" "a/b/exe0.exe"
-patch "a/b/0/0exe0.exe.patch" "a/b/0/0exe0.exe"
-add "a/b/0/00/00text0"
-patch "a/b/0/00/00png0.png.patch" "a/b/0/00/00png0.png"
-add "a/b/2/20/20text0"
-add "a/b/2/20/20png0.png"
-add "a/b/0/00/00text2"
-remove "a/b/1/10/10text0"
-remove "a/b/0/00/00text1"
-remove "a/b/text1"
-remove "a/b/text0"
-rmrfdir "a/b/9/99/"
-rmdir "a/b/9/99/"
-rmrfdir "a/b/9/98/"
-rmrfdir "a/b/9/97/"
-rmrfdir "a/b/9/96/"
-rmrfdir "a/b/9/95/"
-rmrfdir "a/b/9/95/"
-rmrfdir "a/b/9/94/"
-rmdir "a/b/9/94/"
-rmdir "a/b/9/93/"
-rmdir "a/b/9/92/"
-rmdir "a/b/9/91/"
-rmdir "a/b/9/90/"
-rmdir "a/b/9/90/"
-rmrfdir "a/b/8/89/"
-rmdir "a/b/8/89/"
-rmrfdir "a/b/8/88/"
-rmrfdir "a/b/8/87/"
-rmrfdir "a/b/8/86/"
-rmrfdir "a/b/8/85/"
-rmrfdir "a/b/8/85/"
-rmrfdir "a/b/8/84/"
-rmdir "a/b/8/84/"
-rmdir "a/b/8/83/"
-rmdir "a/b/8/82/"
-rmdir "a/b/8/81/"
-rmdir "a/b/8/80/"
-rmdir "a/b/8/80/"
-rmrfdir "a/b/7/"
-rmdir "a/b/6/"
-remove "a/b/5/5text1"
-remove "a/b/5/5text0"
-rmrfdir "a/b/5/"
-remove "a/b/4/4text1"
-remove "a/b/4/4text0"
-remove "a/b/4/4exe0.exe"
-rmdir "a/b/4/"
-remove "a/b/3/3text1"
-remove "a/b/3/3text0"
-rmdir "a/b/1/10/"
-rmdir "a/b/1/"
diff --git a/toolkit/mozapps/update/tests/data/replace_log_success b/toolkit/mozapps/update/tests/data/replace_log_success
deleted file mode 100644
index 323f1db41..000000000
--- a/toolkit/mozapps/update/tests/data/replace_log_success
+++ /dev/null
@@ -1,6 +0,0 @@
-Performing a replace request
-rename_file: proceeding to rename the directory
-rename_file: proceeding to rename the directory
-Now, remove the tmpDir
-succeeded
-calling QuitProgressUI
diff --git a/toolkit/mozapps/update/tests/data/shared.js b/toolkit/mozapps/update/tests/data/shared.js
deleted file mode 100644
index e9a10da06..000000000
--- a/toolkit/mozapps/update/tests/data/shared.js
+++ /dev/null
@@ -1,632 +0,0 @@
-/* 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/. */
-
-/* Shared code for xpcshell and mochitests-chrome */
-/* eslint-disable no-undef */
-
-Cu.import("resource://gre/modules/FileUtils.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-const PREF_APP_UPDATE_AUTO = "app.update.auto";
-const PREF_APP_UPDATE_BACKGROUNDERRORS = "app.update.backgroundErrors";
-const PREF_APP_UPDATE_BACKGROUNDMAXERRORS = "app.update.backgroundMaxErrors";
-const PREF_APP_UPDATE_CHANNEL = "app.update.channel";
-const PREF_APP_UPDATE_DOWNLOADBACKGROUNDINTERVAL = "app.update.download.backgroundInterval";
-const PREF_APP_UPDATE_ENABLED = "app.update.enabled";
-const PREF_APP_UPDATE_IDLETIME = "app.update.idletime";
-const PREF_APP_UPDATE_LOG = "app.update.log";
-const PREF_APP_UPDATE_NOTIFIEDUNSUPPORTED = "app.update.notifiedUnsupported";
-const PREF_APP_UPDATE_PROMPTWAITTIME = "app.update.promptWaitTime";
-const PREF_APP_UPDATE_RETRYTIMEOUT = "app.update.socket.retryTimeout";
-const PREF_APP_UPDATE_SERVICE_ENABLED = "app.update.service.enabled";
-const PREF_APP_UPDATE_SILENT = "app.update.silent";
-const PREF_APP_UPDATE_SOCKET_MAXERRORS = "app.update.socket.maxErrors";
-const PREF_APP_UPDATE_STAGING_ENABLED = "app.update.staging.enabled";
-const PREF_APP_UPDATE_URL = "app.update.url";
-const PREF_APP_UPDATE_URL_DETAILS = "app.update.url.details";
-
-const PREFBRANCH_APP_UPDATE_NEVER = "app.update.never.";
-
-const PREFBRANCH_APP_PARTNER = "app.partner.";
-const PREF_DISTRIBUTION_ID = "distribution.id";
-const PREF_DISTRIBUTION_VERSION = "distribution.version";
-const PREF_TOOLKIT_TELEMETRY_ENABLED = "toolkit.telemetry.enabled";
-
-const NS_APP_PROFILE_DIR_STARTUP = "ProfDS";
-const NS_APP_USER_PROFILE_50_DIR = "ProfD";
-const NS_GRE_DIR = "GreD";
-const NS_GRE_BIN_DIR = "GreBinD";
-const NS_XPCOM_CURRENT_PROCESS_DIR = "XCurProcD";
-const XRE_EXECUTABLE_FILE = "XREExeF";
-const XRE_UPDATE_ROOT_DIR = "UpdRootD";
-
-const DIR_PATCH = "0";
-const DIR_TOBEDELETED = "tobedeleted";
-const DIR_UPDATES = "updates";
-const DIR_UPDATED = IS_MACOSX ? "Updated.app" : "updated";
-
-const FILE_ACTIVE_UPDATE_XML = "active-update.xml";
-const FILE_APPLICATION_INI = "application.ini";
-const FILE_BACKUP_UPDATE_LOG = "backup-update.log";
-const FILE_LAST_UPDATE_LOG = "last-update.log";
-const FILE_UPDATE_SETTINGS_INI = "update-settings.ini";
-const FILE_UPDATE_SETTINGS_INI_BAK = "update-settings.ini.bak";
-const FILE_UPDATER_INI = "updater.ini";
-const FILE_UPDATES_XML = "updates.xml";
-const FILE_UPDATE_LOG = "update.log";
-const FILE_UPDATE_MAR = "update.mar";
-const FILE_UPDATE_STATUS = "update.status";
-const FILE_UPDATE_TEST = "update.test";
-const FILE_UPDATE_VERSION = "update.version";
-
-const UPDATE_SETTINGS_CONTENTS = "[Settings]\n" +
- "ACCEPTED_MAR_CHANNEL_IDS=xpcshell-test\n";
-
-const PR_RDWR = 0x04;
-const PR_CREATE_FILE = 0x08;
-const PR_TRUNCATE = 0x20;
-
-const DEFAULT_UPDATE_VERSION = "999999.0";
-
-var gChannel;
-
-/* import-globals-from ../data/sharedUpdateXML.js */
-Services.scriptloader.loadSubScript(DATA_URI_SPEC + "sharedUpdateXML.js", this);
-
-const PERMS_FILE = FileUtils.PERMS_FILE;
-const PERMS_DIRECTORY = FileUtils.PERMS_DIRECTORY;
-
-const MODE_WRONLY = FileUtils.MODE_WRONLY;
-const MODE_CREATE = FileUtils.MODE_CREATE;
-const MODE_APPEND = FileUtils.MODE_APPEND;
-const MODE_TRUNCATE = FileUtils.MODE_TRUNCATE;
-
-const URI_UPDATES_PROPERTIES = "chrome://mozapps/locale/update/updates.properties";
-const gUpdateBundle = Services.strings.createBundle(URI_UPDATES_PROPERTIES);
-
-XPCOMUtils.defineLazyGetter(this, "gAUS", function test_gAUS() {
- return Cc["@mozilla.org/updates/update-service;1"].
- getService(Ci.nsIApplicationUpdateService).
- QueryInterface(Ci.nsITimerCallback).
- QueryInterface(Ci.nsIObserver).
- QueryInterface(Ci.nsIUpdateCheckListener);
-});
-
-XPCOMUtils.defineLazyServiceGetter(this, "gUpdateManager",
- "@mozilla.org/updates/update-manager;1",
- "nsIUpdateManager");
-
-XPCOMUtils.defineLazyGetter(this, "gUpdateChecker", function test_gUC() {
- return Cc["@mozilla.org/updates/update-checker;1"].
- createInstance(Ci.nsIUpdateChecker);
-});
-
-XPCOMUtils.defineLazyGetter(this, "gUP", function test_gUP() {
- return Cc["@mozilla.org/updates/update-prompt;1"].
- createInstance(Ci.nsIUpdatePrompt);
-});
-
-XPCOMUtils.defineLazyGetter(this, "gDefaultPrefBranch", function test_gDPB() {
- return Services.prefs.getDefaultBranch(null);
-});
-
-XPCOMUtils.defineLazyGetter(this, "gPrefRoot", function test_gPR() {
- return Services.prefs.getBranch(null);
-});
-
-XPCOMUtils.defineLazyServiceGetter(this, "gEnv",
- "@mozilla.org/process/environment;1",
- "nsIEnvironment");
-
-XPCOMUtils.defineLazyGetter(this, "gZipW", function test_gZipW() {
- return Cc["@mozilla.org/zipwriter;1"].
- createInstance(Ci.nsIZipWriter);
-});
-
-/* Triggers post-update processing */
-function testPostUpdateProcessing() {
- gAUS.observe(null, "test-post-update-processing", "");
-}
-
-/* Initializes the update service stub */
-function initUpdateServiceStub() {
- Cc["@mozilla.org/updates/update-service-stub;1"].
- createInstance(Ci.nsISupports);
-}
-
-/* Reloads the update metadata from disk */
-function reloadUpdateManagerData() {
- gUpdateManager.QueryInterface(Ci.nsIObserver).
- observe(null, "um-reload-update-data", "");
-}
-
-const observer = {
- observe: function(aSubject, aTopic, aData) {
- if (aTopic == "nsPref:changed" && aData == PREF_APP_UPDATE_CHANNEL) {
- let channel = gDefaultPrefBranch.getCharPref(PREF_APP_UPDATE_CHANNEL);
- if (channel != gChannel) {
- debugDump("Changing channel from " + channel + " to " + gChannel);
- gDefaultPrefBranch.setCharPref(PREF_APP_UPDATE_CHANNEL, gChannel);
- }
- }
- },
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver])
-};
-
-/**
- * Sets the app.update.channel preference.
- *
- * @param aChannel
- * The update channel.
- */
-function setUpdateChannel(aChannel) {
- gChannel = aChannel;
- debugDump("setting default pref " + PREF_APP_UPDATE_CHANNEL + " to " + gChannel);
- gDefaultPrefBranch.setCharPref(PREF_APP_UPDATE_CHANNEL, gChannel);
- gPrefRoot.addObserver(PREF_APP_UPDATE_CHANNEL, observer, false);
-}
-
-/**
- * Sets the app.update.url default preference.
- *
- * @param aURL
- * The update url. If not specified 'URL_HOST + "/update.xml"' will be
- * used.
- */
-function setUpdateURL(aURL) {
- let url = aURL ? aURL : URL_HOST + "/update.xml";
- debugDump("setting " + PREF_APP_UPDATE_URL + " to " + url);
- gDefaultPrefBranch.setCharPref(PREF_APP_UPDATE_URL, url);
-}
-
-/**
- * Returns either the active or regular update database XML file.
- *
- * @param isActiveUpdate
- * If true this will return the active-update.xml otherwise it will
- * return the updates.xml file.
- */
-function getUpdatesXMLFile(aIsActiveUpdate) {
- let file = getUpdatesRootDir();
- file.append(aIsActiveUpdate ? FILE_ACTIVE_UPDATE_XML : FILE_UPDATES_XML);
- return file;
-}
-
-/**
- * Writes the updates specified to either the active-update.xml or the
- * updates.xml.
- *
- * @param aContent
- * The updates represented as a string to write to the XML file.
- * @param isActiveUpdate
- * If true this will write to the active-update.xml otherwise it will
- * write to the updates.xml file.
- */
-function writeUpdatesToXMLFile(aContent, aIsActiveUpdate) {
- writeFile(getUpdatesXMLFile(aIsActiveUpdate), aContent);
-}
-
-/**
- * Writes the current update operation/state to a file in the patch
- * directory, indicating to the patching system that operations need
- * to be performed.
- *
- * @param aStatus
- * The status value to write.
- */
-function writeStatusFile(aStatus) {
- let file = getUpdatesPatchDir();
- file.append(FILE_UPDATE_STATUS);
- writeFile(file, aStatus + "\n");
-}
-
-/**
- * Writes the current update version to a file in the patch directory,
- * indicating to the patching system the version of the update.
- *
- * @param aVersion
- * The version value to write.
- */
-function writeVersionFile(aVersion) {
- let file = getUpdatesPatchDir();
- file.append(FILE_UPDATE_VERSION);
- writeFile(file, aVersion + "\n");
-}
-
-/**
- * Gets the root directory for the updates directory.
- *
- * @return nsIFile for the updates root directory.
- */
-function getUpdatesRootDir() {
- return Services.dirsvc.get(XRE_UPDATE_ROOT_DIR, Ci.nsIFile);
-}
-
-/**
- * Gets the updates directory.
- *
- * @return nsIFile for the updates directory.
- */
-function getUpdatesDir() {
- let dir = getUpdatesRootDir();
- dir.append(DIR_UPDATES);
- return dir;
-}
-
-/**
- * Gets the directory for update patches.
- *
- * @return nsIFile for the updates directory.
- */
-function getUpdatesPatchDir() {
- let dir = getUpdatesDir();
- dir.append(DIR_PATCH);
- return dir;
-}
-
-/**
- * Writes text to a file. This will replace existing text if the file exists
- * and create the file if it doesn't exist.
- *
- * @param aFile
- * The file to write to. Will be created if it doesn't exist.
- * @param aText
- * The text to write to the file. If there is existing text it will be
- * replaced.
- */
-function writeFile(aFile, aText) {
- let fos = Cc["@mozilla.org/network/file-output-stream;1"].
- createInstance(Ci.nsIFileOutputStream);
- if (!aFile.exists()) {
- aFile.create(Ci.nsILocalFile.NORMAL_FILE_TYPE, PERMS_FILE);
- }
- fos.init(aFile, MODE_WRONLY | MODE_CREATE | MODE_TRUNCATE, PERMS_FILE, 0);
- fos.write(aText, aText.length);
- fos.close();
-}
-
-/**
- * Reads the current update operation/state in the status file in the patch
- * directory including the error code if it is present.
- *
- * @return The status value.
- */
-function readStatusFile() {
- let file = getUpdatesPatchDir();
- file.append(FILE_UPDATE_STATUS);
-
- if (!file.exists()) {
- debugDump("update status file does not exists! Path: " + file.path);
- return STATE_NONE;
- }
-
- return readFile(file).split("\n")[0];
-}
-
-/**
- * Reads the current update operation/state in the status file in the patch
- * directory without the error code if it is present.
- *
- * @return The state value.
- */
-function readStatusState() {
- return readStatusFile().split(": ")[0];
-}
-
-/**
- * Reads the current update operation/state in the status file in the patch
- * directory with the error code.
- *
- * @return The state value.
- */
-function readStatusFailedCode() {
- return readStatusFile().split(": ")[1];
-}
-
-/**
- * Reads text from a file and returns the string.
- *
- * @param aFile
- * The file to read from.
- * @return The string of text read from the file.
- */
-function readFile(aFile) {
- let fis = Cc["@mozilla.org/network/file-input-stream;1"].
- createInstance(Ci.nsIFileInputStream);
- if (!aFile.exists()) {
- return null;
- }
- // Specifying -1 for ioFlags will open the file with the default of PR_RDONLY.
- // Specifying -1 for perm will open the file with the default of 0.
- fis.init(aFile, -1, -1, Ci.nsIFileInputStream.CLOSE_ON_EOF);
- let sis = Cc["@mozilla.org/scriptableinputstream;1"].
- createInstance(Ci.nsIScriptableInputStream);
- sis.init(fis);
- let text = sis.read(sis.available());
- sis.close();
- return text;
-}
-
-/**
- * Reads the binary contents of a file and returns it as a string.
- *
- * @param aFile
- * The file to read from.
- * @return The contents of the file as a string.
- */
-function readFileBytes(aFile) {
- debugDump("attempting to read file, path: " + aFile.path);
- let fis = Cc["@mozilla.org/network/file-input-stream;1"].
- createInstance(Ci.nsIFileInputStream);
- // Specifying -1 for ioFlags will open the file with the default of PR_RDONLY.
- // Specifying -1 for perm will open the file with the default of 0.
- fis.init(aFile, -1, -1, Ci.nsIFileInputStream.CLOSE_ON_EOF);
- let bis = Cc["@mozilla.org/binaryinputstream;1"].
- createInstance(Ci.nsIBinaryInputStream);
- bis.setInputStream(fis);
- let data = [];
- let count = fis.available();
- while (count > 0) {
- let bytes = bis.readByteArray(Math.min(65535, count));
- data.push(String.fromCharCode.apply(null, bytes));
- count -= bytes.length;
- if (bytes.length == 0) {
- throw "Nothing read from input stream!";
- }
- }
- data.join('');
- fis.close();
- return data.toString();
-}
-
-/* Returns human readable status text from the updates.properties bundle */
-function getStatusText(aErrCode) {
- return getString("check_error-" + aErrCode);
-}
-
-/* Returns a string from the updates.properties bundle */
-function getString(aName) {
- try {
- return gUpdateBundle.GetStringFromName(aName);
- } catch (e) {
- }
- return null;
-}
-
-/**
- * Gets the file extension for an nsIFile.
- *
- * @param aFile
- * The file to get the file extension for.
- * @return The file extension.
- */
-function getFileExtension(aFile) {
- return Services.io.newFileURI(aFile).QueryInterface(Ci.nsIURL).
- fileExtension;
-}
-
-/**
- * Removes the updates.xml file, active-update.xml file, and all files and
- * sub-directories in the updates directory except for the "0" sub-directory.
- * This prevents some tests from failing due to files being left behind when the
- * tests are interrupted.
- */
-function removeUpdateDirsAndFiles() {
- let file = getUpdatesXMLFile(true);
- try {
- if (file.exists()) {
- file.remove(false);
- }
- } catch (e) {
- logTestInfo("Unable to remove file. Path: " + file.path +
- ", Exception: " + e);
- }
-
- file = getUpdatesXMLFile(false);
- try {
- if (file.exists()) {
- file.remove(false);
- }
- } catch (e) {
- logTestInfo("Unable to remove file. Path: " + file.path +
- ", Exception: " + e);
- }
-
- // This fails sporadically on Mac OS X so wrap it in a try catch
- let updatesDir = getUpdatesDir();
- try {
- cleanUpdatesDir(updatesDir);
- } catch (e) {
- logTestInfo("Unable to remove files / directories from directory. Path: " +
- updatesDir.path + ", Exception: " + e);
- }
-}
-
-/**
- * Removes all files and sub-directories in the updates directory except for
- * the "0" sub-directory.
- *
- * @param aDir
- * nsIFile for the directory to be deleted.
- */
-function cleanUpdatesDir(aDir) {
- if (!aDir.exists()) {
- return;
- }
-
- let dirEntries = aDir.directoryEntries;
- while (dirEntries.hasMoreElements()) {
- let entry = dirEntries.getNext().QueryInterface(Ci.nsIFile);
-
- if (entry.isDirectory()) {
- if (entry.leafName == DIR_PATCH && entry.parent.leafName == DIR_UPDATES) {
- cleanUpdatesDir(entry);
- entry.permissions = PERMS_DIRECTORY;
- } else {
- try {
- entry.remove(true);
- return;
- } catch (e) {
- }
- cleanUpdatesDir(entry);
- entry.permissions = PERMS_DIRECTORY;
- try {
- entry.remove(true);
- } catch (e) {
- logTestInfo("cleanUpdatesDir: unable to remove directory. Path: " +
- entry.path + ", Exception: " + e);
- throw (e);
- }
- }
- } else {
- entry.permissions = PERMS_FILE;
- try {
- entry.remove(false);
- } catch (e) {
- logTestInfo("cleanUpdatesDir: unable to remove file. Path: " +
- entry.path + ", Exception: " + e);
- throw (e);
- }
- }
- }
-}
-
-/**
- * Deletes a directory and its children. First it tries nsIFile::Remove(true).
- * If that fails it will fall back to recursing, setting the appropriate
- * permissions, and deleting the current entry.
- *
- * @param aDir
- * nsIFile for the directory to be deleted.
- */
-function removeDirRecursive(aDir) {
- if (!aDir.exists()) {
- return;
- }
-
- try {
- debugDump("attempting to remove directory. Path: " + aDir.path);
- aDir.remove(true);
- return;
- } catch (e) {
- logTestInfo("non-fatal error removing directory. Exception: " + e);
- }
-
- let dirEntries = aDir.directoryEntries;
- while (dirEntries.hasMoreElements()) {
- let entry = dirEntries.getNext().QueryInterface(Ci.nsIFile);
-
- if (entry.isDirectory()) {
- removeDirRecursive(entry);
- } else {
- entry.permissions = PERMS_FILE;
- try {
- debugDump("attempting to remove file. Path: " + entry.path);
- entry.remove(false);
- } catch (e) {
- logTestInfo("error removing file. Exception: " + e);
- throw (e);
- }
- }
- }
-
- aDir.permissions = PERMS_DIRECTORY;
- try {
- debugDump("attempting to remove directory. Path: " + aDir.path);
- aDir.remove(true);
- } catch (e) {
- logTestInfo("error removing directory. Exception: " + e);
- throw (e);
- }
-}
-
-/**
- * Returns the directory for the currently running process. This is used to
- * clean up after the tests and to locate the active-update.xml and updates.xml
- * files.
- *
- * @return nsIFile for the current process directory.
- */
-function getCurrentProcessDir() {
- return Services.dirsvc.get(NS_XPCOM_CURRENT_PROCESS_DIR, Ci.nsIFile);
-}
-
-/**
- * Gets the application base directory.
- *
- * @return nsIFile object for the application base directory.
- */
-function getAppBaseDir() {
- return Services.dirsvc.get(XRE_EXECUTABLE_FILE, Ci.nsIFile).parent;
-}
-
-/**
- * Returns the Gecko Runtime Engine directory where files other than executable
- * binaries are located. On Mac OS X this will be <bundle>/Contents/Resources/
- * and the installation directory on all other platforms.
- *
- * @return nsIFile for the Gecko Runtime Engine directory.
- */
-function getGREDir() {
- return Services.dirsvc.get(NS_GRE_DIR, Ci.nsIFile);
-}
-
-/**
- * Returns the Gecko Runtime Engine Binary directory where the executable
- * binaries are located such as the updater binary (Windows and Linux) or
- * updater package (Mac OS X). On Mac OS X this will be
- * <bundle>/Contents/MacOS/ and the installation directory on all other
- * platforms.
- *
- * @return nsIFile for the Gecko Runtime Engine Binary directory.
- */
-function getGREBinDir() {
- return Services.dirsvc.get(NS_GRE_BIN_DIR, Ci.nsIFile);
-}
-
-/**
- * Logs TEST-INFO messages.
- *
- * @param aText
- * The text to log.
- * @param aCaller (optional)
- * An optional Components.stack.caller. If not specified
- * Components.stack.caller will be used.
- */
-function logTestInfo(aText, aCaller) {
- let caller = aCaller ? aCaller : Components.stack.caller;
- let now = new Date();
- let hh = now.getHours();
- let mm = now.getMinutes();
- let ss = now.getSeconds();
- let ms = now.getMilliseconds();
- let time = (hh < 10 ? "0" + hh : hh) + ":" +
- (mm < 10 ? "0" + mm : mm) + ":" +
- (ss < 10 ? "0" + ss : ss) + ":";
- if (ms < 10) {
- time += "00";
- } else if (ms < 100) {
- time += "0";
- }
- time += ms;
- let msg = time + " | TEST-INFO | " + caller.filename + " | [" + caller.name +
- " : " + caller.lineNumber + "] " + aText;
- LOG_FUNCTION(msg);
-}
-
-/**
- * Logs TEST-INFO messages when DEBUG_AUS_TEST evaluates to true.
- *
- * @param aText
- * The text to log.
- * @param aCaller (optional)
- * An optional Components.stack.caller. If not specified
- * Components.stack.caller will be used.
- */
-function debugDump(aText, aCaller) {
- if (DEBUG_AUS_TEST) {
- let caller = aCaller ? aCaller : Components.stack.caller;
- logTestInfo(aText, caller);
- }
-}
diff --git a/toolkit/mozapps/update/tests/data/sharedUpdateXML.js b/toolkit/mozapps/update/tests/data/sharedUpdateXML.js
deleted file mode 100644
index 3aa01eff4..000000000
--- a/toolkit/mozapps/update/tests/data/sharedUpdateXML.js
+++ /dev/null
@@ -1,364 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-/**
- * Helper functions for creating xml strings used by application update tests.
- *
- * !IMPORTANT - This file contains everything needed (along with dependencies)
- * by the updates.sjs file used by the mochitest-chrome tests. Since xpcshell
- * used by the http server is launched with -v 170 this file must not use
- * features greater than JavaScript 1.7.
- */
-
-/* eslint-disable no-undef */
-
-const FILE_SIMPLE_MAR = "simple.mar";
-const SIZE_SIMPLE_MAR = "1031";
-const MD5_HASH_SIMPLE_MAR = "1f8c038577bb6845d94ccec4999113ee";
-const SHA1_HASH_SIMPLE_MAR = "5d49a672c87f10f31d7e326349564a11272a028b";
-const SHA256_HASH_SIMPLE_MAR = "1aabbed5b1dd6e16e139afc5b43d479e254e0c26" +
- "3c8fb9249c0a1bb93071c5fb";
-const SHA384_HASH_SIMPLE_MAR = "26615014ea034af32ef5651492d5f493f5a7a1a48522e" +
- "d24c366442a5ec21d5ef02e23fb58d79729b8ca2f9541" +
- "99dd53";
-const SHA512_HASH_SIMPLE_MAR = "922e5ae22081795f6e8d65a3c508715c9a314054179a8" +
- "bbfe5f50dc23919ad89888291bc0a07586ab17dd0304a" +
- "b5347473601127571c66f61f5080348e05c36b";
-
-const STATE_NONE = "null";
-const STATE_DOWNLOADING = "downloading";
-const STATE_PENDING = "pending";
-const STATE_PENDING_SVC = "pending-service";
-const STATE_APPLYING = "applying";
-const STATE_APPLIED = "applied";
-const STATE_APPLIED_SVC = "applied-service";
-const STATE_SUCCEEDED = "succeeded";
-const STATE_DOWNLOAD_FAILED = "download-failed";
-const STATE_FAILED = "failed";
-
-const LOADSOURCE_ERROR_WRONG_SIZE = 2;
-const CRC_ERROR = 4;
-const READ_ERROR = 6;
-const WRITE_ERROR = 7;
-const MAR_CHANNEL_MISMATCH_ERROR = 22;
-const VERSION_DOWNGRADE_ERROR = 23;
-const SERVICE_COULD_NOT_COPY_UPDATER = 49;
-const SERVICE_INVALID_APPLYTO_DIR_STAGED_ERROR = 52;
-const SERVICE_INVALID_APPLYTO_DIR_ERROR = 54;
-const SERVICE_INVALID_INSTALL_DIR_PATH_ERROR = 55;
-const SERVICE_INVALID_WORKING_DIR_PATH_ERROR = 56;
-const INVALID_APPLYTO_DIR_STAGED_ERROR = 72;
-const INVALID_APPLYTO_DIR_ERROR = 74;
-const INVALID_INSTALL_DIR_PATH_ERROR = 75;
-const INVALID_WORKING_DIR_PATH_ERROR = 76;
-const INVALID_CALLBACK_PATH_ERROR = 77;
-const INVALID_CALLBACK_DIR_ERROR = 78;
-
-const STATE_FAILED_DELIMETER = ": ";
-
-const STATE_FAILED_LOADSOURCE_ERROR_WRONG_SIZE =
- STATE_FAILED + STATE_FAILED_DELIMETER + LOADSOURCE_ERROR_WRONG_SIZE;
-const STATE_FAILED_CRC_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + CRC_ERROR;
-const STATE_FAILED_READ_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + READ_ERROR;
-const STATE_FAILED_WRITE_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + WRITE_ERROR;
-const STATE_FAILED_MAR_CHANNEL_MISMATCH_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + MAR_CHANNEL_MISMATCH_ERROR;
-const STATE_FAILED_VERSION_DOWNGRADE_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + VERSION_DOWNGRADE_ERROR;
-const STATE_FAILED_SERVICE_COULD_NOT_COPY_UPDATER =
- STATE_FAILED + STATE_FAILED_DELIMETER + SERVICE_COULD_NOT_COPY_UPDATER
-const STATE_FAILED_SERVICE_INVALID_APPLYTO_DIR_STAGED_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + SERVICE_INVALID_APPLYTO_DIR_STAGED_ERROR;
-const STATE_FAILED_SERVICE_INVALID_APPLYTO_DIR_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + SERVICE_INVALID_APPLYTO_DIR_ERROR;
-const STATE_FAILED_SERVICE_INVALID_INSTALL_DIR_PATH_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + SERVICE_INVALID_INSTALL_DIR_PATH_ERROR;
-const STATE_FAILED_SERVICE_INVALID_WORKING_DIR_PATH_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + SERVICE_INVALID_WORKING_DIR_PATH_ERROR;
-const STATE_FAILED_INVALID_APPLYTO_DIR_STAGED_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + INVALID_APPLYTO_DIR_STAGED_ERROR;
-const STATE_FAILED_INVALID_APPLYTO_DIR_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + INVALID_APPLYTO_DIR_ERROR;
-const STATE_FAILED_INVALID_INSTALL_DIR_PATH_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + INVALID_INSTALL_DIR_PATH_ERROR;
-const STATE_FAILED_INVALID_WORKING_DIR_PATH_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + INVALID_WORKING_DIR_PATH_ERROR;
-const STATE_FAILED_INVALID_CALLBACK_PATH_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + INVALID_CALLBACK_PATH_ERROR;
-const STATE_FAILED_INVALID_CALLBACK_DIR_ERROR =
- STATE_FAILED + STATE_FAILED_DELIMETER + INVALID_CALLBACK_DIR_ERROR;
-
-/**
- * Constructs a string representing a remote update xml file.
- *
- * @param aUpdates
- * The string representing the update elements.
- * @return The string representing a remote update xml file.
- */
-function getRemoteUpdatesXMLString(aUpdates) {
- return "<?xml version=\"1.0\"?>\n" +
- "<updates>\n" +
- aUpdates +
- "</updates>\n";
-}
-
-/**
- * Constructs a string representing an update element for a remote update xml
- * file. See getUpdateString for parameter information not provided below.
- *
- * @param aPatches
- * String representing the application update patches.
- * @return The string representing an update element for an update xml file.
- */
-function getRemoteUpdateString(aPatches, aType, aName, aDisplayVersion,
- aAppVersion, aBuildID, aDetailsURL, aShowPrompt,
- aShowNeverForVersion, aPromptWaitTime,
- aBackgroundInterval, aCustom1, aCustom2) {
- return getUpdateString(aType, aName, aDisplayVersion, aAppVersion,
- aBuildID, aDetailsURL, aShowPrompt,
- aShowNeverForVersion, aPromptWaitTime,
- aBackgroundInterval, aCustom1, aCustom2) + ">\n" +
- aPatches +
- " </update>\n";
-}
-
-/**
- * Constructs a string representing a patch element for a remote update xml
- * file. See getPatchString for parameter information not provided below.
- *
- * @return The string representing a patch element for a remote update xml file.
- */
-function getRemotePatchString(aType, aURL, aHashFunction, aHashValue, aSize) {
- return getPatchString(aType, aURL, aHashFunction, aHashValue, aSize) +
- "/>\n";
-}
-
-/**
- * Constructs a string representing a local update xml file.
- *
- * @param aUpdates
- * The string representing the update elements.
- * @return The string representing a local update xml file.
- */
-function getLocalUpdatesXMLString(aUpdates) {
- if (!aUpdates || aUpdates == "") {
- return "<updates xmlns=\"http://www.mozilla.org/2005/app-update\"/>";
- }
- return ("<updates xmlns=\"http://www.mozilla.org/2005/app-update\">" +
- aUpdates +
- "</updates>").replace(/>\s+\n*</g, '><');
-}
-
-/**
- * Constructs a string representing an update element for a local update xml
- * file. See getUpdateString for parameter information not provided below.
- *
- * @param aPatches
- * String representing the application update patches.
- * @param aServiceURL (optional)
- * The update's xml url.
- * If not specified it will default to 'http://test_service/'.
- * @param aIsCompleteUpdate (optional)
- * The string 'true' if this update was a complete update or the string
- * 'false' if this update was a partial update.
- * If not specified it will default to 'true'.
- * @param aChannel (optional)
- * The update channel name.
- * If not specified it will default to the default preference value of
- * app.update.channel.
- * @param aForegroundDownload (optional)
- * The string 'true' if this update was manually downloaded or the
- * string 'false' if this update was automatically downloaded.
- * If not specified it will default to 'true'.
- * @param aPreviousAppVersion (optional)
- * The application version prior to applying the update.
- * If not specified it will not be present.
- * @return The string representing an update element for an update xml file.
- */
-function getLocalUpdateString(aPatches, aType, aName, aDisplayVersion,
- aAppVersion, aBuildID, aDetailsURL, aServiceURL,
- aInstallDate, aStatusText, aIsCompleteUpdate,
- aChannel, aForegroundDownload, aShowPrompt,
- aShowNeverForVersion, aPromptWaitTime,
- aBackgroundInterval, aPreviousAppVersion,
- aCustom1, aCustom2) {
- let serviceURL = aServiceURL ? aServiceURL : "http://test_service/";
- let installDate = aInstallDate ? aInstallDate : "1238441400314";
- let statusText = aStatusText ? aStatusText : "Install Pending";
- let isCompleteUpdate =
- typeof aIsCompleteUpdate == "string" ? aIsCompleteUpdate : "true";
- let channel = aChannel ? aChannel
- : gDefaultPrefBranch.getCharPref(PREF_APP_UPDATE_CHANNEL);
- let foregroundDownload =
- typeof aForegroundDownload == "string" ? aForegroundDownload : "true";
- let previousAppVersion = aPreviousAppVersion ? "previousAppVersion=\"" +
- aPreviousAppVersion + "\" "
- : "";
- return getUpdateString(aType, aName, aDisplayVersion, aAppVersion, aBuildID,
- aDetailsURL, aShowPrompt, aShowNeverForVersion,
- aPromptWaitTime, aBackgroundInterval, aCustom1, aCustom2) +
- " " +
- previousAppVersion +
- "serviceURL=\"" + serviceURL + "\" " +
- "installDate=\"" + installDate + "\" " +
- "statusText=\"" + statusText + "\" " +
- "isCompleteUpdate=\"" + isCompleteUpdate + "\" " +
- "channel=\"" + channel + "\" " +
- "foregroundDownload=\"" + foregroundDownload + "\">" +
- aPatches +
- " </update>";
-}
-
-/**
- * Constructs a string representing a patch element for a local update xml file.
- * See getPatchString for parameter information not provided below.
- *
- * @param aSelected (optional)
- * Whether this patch is selected represented or not. The string 'true'
- * denotes selected and the string 'false' denotes not selected.
- * If not specified it will default to the string 'true'.
- * @param aState (optional)
- * The patch's state.
- * If not specified it will default to STATE_SUCCEEDED.
- * @return The string representing a patch element for a local update xml file.
- */
-function getLocalPatchString(aType, aURL, aHashFunction, aHashValue, aSize,
- aSelected, aState) {
- let selected = typeof aSelected == "string" ? aSelected : "true";
- let state = aState ? aState : STATE_SUCCEEDED;
- return getPatchString(aType, aURL, aHashFunction, aHashValue, aSize) + " " +
- "selected=\"" + selected + "\" " +
- "state=\"" + state + "\"/>\n";
-}
-
-/**
- * Constructs a string representing an update element for a remote update xml
- * file.
- *
- * @param aType (optional)
- * The update's type which should be major or minor. If not specified it
- * will default to 'major'.
- * @param aName (optional)
- * The update's name.
- * If not specified it will default to 'App Update Test'.
- * @param aDisplayVersion (optional)
- * The update's display version.
- * If not specified it will default to 'version #' where # is the value
- * of DEFAULT_UPDATE_VERSION.
- * @param aAppVersion (optional)
- * The update's application version.
- * If not specified it will default to the value of
- * DEFAULT_UPDATE_VERSION.
- * @param aBuildID (optional)
- * The update's build id.
- * If not specified it will default to '20080811053724'.
- * @param aDetailsURL (optional)
- * The update's details url.
- * If not specified it will default to 'http://test_details/' due to due
- * to bug 470244.
- * @param aShowPrompt (optional)
- * Whether to show the prompt for the update when auto update is
- * enabled.
- * If not specified it will not be present and the update service will
- * default to false.
- * @param aShowNeverForVersion (optional)
- * Whether to show the 'No Thanks' button in the update prompt.
- * If not specified it will not be present and the update service will
- * default to false.
- * @param aPromptWaitTime (optional)
- * Override for the app.update.promptWaitTime preference.
- * @param aBackgroundInterval (optional)
- * Override for the app.update.download.backgroundInterval preference.
- * @param aCustom1 (optional)
- * A custom attribute name and attribute value to add to the xml.
- * Example: custom1_attribute="custom1 value"
- * If not specified it will not be present.
- * @param aCustom2 (optional)
- * A custom attribute name and attribute value to add to the xml.
- * Example: custom2_attribute="custom2 value"
- * If not specified it will not be present.
- * @return The string representing an update element for an update xml file.
- */
-function getUpdateString(aType, aName, aDisplayVersion, aAppVersion, aBuildID,
- aDetailsURL, aShowPrompt, aShowNeverForVersion,
- aPromptWaitTime, aBackgroundInterval, aCustom1,
- aCustom2) {
- let type = aType ? aType : "major";
- let name = aName ? aName : "App Update Test";
- let displayVersion = aDisplayVersion ? "displayVersion=\"" +
- aDisplayVersion + "\" "
- : "";
- let appVersion = "appVersion=\"" +
- (aAppVersion ? aAppVersion : DEFAULT_UPDATE_VERSION) +
- "\" ";
- let buildID = aBuildID ? aBuildID : "20080811053724";
- // XXXrstrong - not specifying a detailsURL will cause a leak due to bug 470244
-// let detailsURL = aDetailsURL ? "detailsURL=\"" + aDetailsURL + "\" " : "";
- let detailsURL = "detailsURL=\"" +
- (aDetailsURL ? aDetailsURL
- : "http://test_details/") + "\" ";
- let showPrompt = aShowPrompt ? "showPrompt=\"" + aShowPrompt + "\" " : "";
- let showNeverForVersion = aShowNeverForVersion ? "showNeverForVersion=\"" +
- aShowNeverForVersion + "\" "
- : "";
- let promptWaitTime = aPromptWaitTime ? "promptWaitTime=\"" + aPromptWaitTime +
- "\" "
- : "";
- let backgroundInterval = aBackgroundInterval ? "backgroundInterval=\"" +
- aBackgroundInterval + "\" "
- : "";
- let custom1 = aCustom1 ? aCustom1 + " " : "";
- let custom2 = aCustom2 ? aCustom2 + " " : "";
- return " <update type=\"" + type + "\" " +
- "name=\"" + name + "\" " +
- displayVersion +
- appVersion +
- detailsURL +
- showPrompt +
- showNeverForVersion +
- promptWaitTime +
- backgroundInterval +
- custom1 +
- custom2 +
- "buildID=\"" + buildID + "\"";
-}
-
-/**
- * Constructs a string representing a patch element for an update xml file.
- *
- * @param aType (optional)
- * The patch's type which should be complete or partial.
- * If not specified it will default to 'complete'.
- * @param aURL (optional)
- * The patch's url to the mar file.
- * If not specified it will default to the value of:
- * gURLData + FILE_SIMPLE_MAR
- * @param aHashFunction (optional)
- * The patch's hash function used to verify the mar file.
- * If not specified it will default to 'MD5'.
- * @param aHashValue (optional)
- * The patch's hash value used to verify the mar file.
- * If not specified it will default to the value of MD5_HASH_SIMPLE_MAR
- * which is the MD5 hash value for the file specified by FILE_SIMPLE_MAR.
- * @param aSize (optional)
- * The patch's file size for the mar file.
- * If not specified it will default to the file size for FILE_SIMPLE_MAR
- * specified by SIZE_SIMPLE_MAR.
- * @return The string representing a patch element for an update xml file.
- */
-function getPatchString(aType, aURL, aHashFunction, aHashValue, aSize) {
- let type = aType ? aType : "complete";
- let url = aURL ? aURL : gURLData + FILE_SIMPLE_MAR;
- let hashFunction = aHashFunction ? aHashFunction : "MD5";
- let hashValue = aHashValue ? aHashValue : MD5_HASH_SIMPLE_MAR;
- let size = aSize ? aSize : SIZE_SIMPLE_MAR;
- return " <patch type=\"" + type + "\" " +
- "URL=\"" + url + "\" " +
- "hashFunction=\"" + hashFunction + "\" " +
- "hashValue=\"" + hashValue + "\" " +
- "size=\"" + size + "\"";
-}
diff --git a/toolkit/mozapps/update/tests/data/simple.mar b/toolkit/mozapps/update/tests/data/simple.mar
deleted file mode 100644
index b2ccbd8d2..000000000
--- a/toolkit/mozapps/update/tests/data/simple.mar
+++ /dev/null
Binary files differ
diff --git a/toolkit/mozapps/update/tests/data/wrong_product_channel.mar b/toolkit/mozapps/update/tests/data/wrong_product_channel.mar
deleted file mode 100644
index 1e39cc214..000000000
--- a/toolkit/mozapps/update/tests/data/wrong_product_channel.mar
+++ /dev/null
Binary files differ
diff --git a/toolkit/mozapps/update/tests/data/xpcshellConstantsPP.js b/toolkit/mozapps/update/tests/data/xpcshellConstantsPP.js
deleted file mode 100644
index e5f0fce58..000000000
--- a/toolkit/mozapps/update/tests/data/xpcshellConstantsPP.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/* 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/. */
-
-/* Preprocessed constants used by xpcshell tests */
-
-const INSTALL_LOCALE = "@AB_CD@";
-const MOZ_APP_NAME = "@MOZ_APP_NAME@";
-const BIN_SUFFIX = "@BIN_SUFFIX@";
-
-// MOZ_APP_VENDOR is optional.
-#ifdef MOZ_APP_VENDOR
-const MOZ_APP_VENDOR = "@MOZ_APP_VENDOR@";
-#else
-const MOZ_APP_VENDOR = "";
-#endif
-
-// MOZ_APP_BASENAME is not optional for tests.
-const MOZ_APP_BASENAME = "@MOZ_APP_BASENAME@";
-const APP_BIN_SUFFIX = "@BIN_SUFFIX@";
-
-const APP_INFO_NAME = "XPCShell";
-const APP_INFO_VENDOR = "Mozilla";
-
-#ifdef XP_WIN
-const IS_WIN = true;
-#else
-const IS_WIN = false;
-#endif
-
-#ifdef XP_MACOSX
-const IS_MACOSX = true;
-#else
-const IS_MACOSX = false;
-#endif
-
-#ifdef XP_UNIX
-const IS_UNIX = true;
-#else
-const IS_UNIX = false;
-#endif
-
-#ifdef MOZ_VERIFY_MAR_SIGNATURE
-const MOZ_VERIFY_MAR_SIGNATURE = true;
-#else
-const MOZ_VERIFY_MAR_SIGNATURE = false;
-#endif
-
-#ifdef DISABLE_UPDATER_AUTHENTICODE_CHECK
- const IS_AUTHENTICODE_CHECK_ENABLED = false;
-#else
- const IS_AUTHENTICODE_CHECK_ENABLED = true;
-#endif
diff --git a/toolkit/mozapps/update/tests/data/xpcshellUtilsAUS.js b/toolkit/mozapps/update/tests/data/xpcshellUtilsAUS.js
deleted file mode 100644
index 9a9610dda..000000000
--- a/toolkit/mozapps/update/tests/data/xpcshellUtilsAUS.js
+++ /dev/null
@@ -1,4047 +0,0 @@
-/* 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/. */
-
-/**
- * Test log warnings that happen before the test has started
- * "Couldn't get the user appdata directory. Crash events may not be produced."
- * in nsExceptionHandler.cpp (possibly bug 619104)
- *
- * Test log warnings that happen after the test has finished
- * "OOPDeinit() without successful OOPInit()" in nsExceptionHandler.cpp
- * (bug 619104)
- * "XPCOM objects created/destroyed from static ctor/dtor" in nsTraceRefcnt.cpp
- * (possibly bug 457479)
- *
- * Other warnings printed to the test logs
- * "site security information will not be persisted" in
- * nsSiteSecurityService.cpp and the error in nsSystemInfo.cpp preceding this
- * error are due to not having a profile when running some of the xpcshell
- * tests. Since most xpcshell tests also log these errors these tests don't
- * call do_get_profile unless necessary for the test.
- * The "This method is lossy. Use GetCanonicalPath !" warning on Windows in
- * nsLocalFileWin.cpp is from the call to GetNSSProfilePath in
- * nsNSSComponent.cpp due to it using GetNativeCanonicalPath.
- * "!mMainThread" in nsThreadManager.cpp are due to using timers and it might be
- * possible to fix some or all of these in the test itself.
- * "NS_FAILED(rv)" in nsThreadUtils.cpp are due to using timers and it might be
- * possible to fix some or all of these in the test itself.
- */
-
-'use strict';
-/* eslint-disable no-undef */
-
-const { classes: Cc, interfaces: Ci, manager: Cm, results: Cr,
- utils: Cu } = Components;
-
-/* global INSTALL_LOCALE, MOZ_APP_NAME, BIN_SUFFIX, MOZ_APP_VENDOR */
-/* global MOZ_APP_BASENAME, APP_BIN_SUFFIX, APP_INFO_NAME, APP_INFO_VENDOR */
-/* global IS_WIN, IS_MACOSX, IS_UNIX, MOZ_VERIFY_MAR_SIGNATURE */
-/* global IS_AUTHENTICODE_CHECK_ENABLED */
-load("../data/xpcshellConstantsPP.js");
-
-function getLogSuffix() {
- if (IS_WIN) {
- return "_win";
- }
- if (IS_MACOSX) {
- return "_mac";
- }
- return "_linux";
-}
-
-Cu.import("resource://gre/modules/Services.jsm", this);
-Cu.import("resource://gre/modules/ctypes.jsm", this);
-
-const DIR_MACOS = IS_MACOSX ? "Contents/MacOS/" : "";
-const DIR_RESOURCES = IS_MACOSX ? "Contents/Resources/" : "";
-const TEST_FILE_SUFFIX = IS_MACOSX ? "_mac" : "";
-const FILE_COMPLETE_MAR = "complete" + TEST_FILE_SUFFIX + ".mar";
-const FILE_PARTIAL_MAR = "partial" + TEST_FILE_SUFFIX + ".mar";
-const FILE_COMPLETE_PRECOMPLETE = "complete_precomplete" + TEST_FILE_SUFFIX;
-const FILE_PARTIAL_PRECOMPLETE = "partial_precomplete" + TEST_FILE_SUFFIX;
-const FILE_COMPLETE_REMOVEDFILES = "complete_removed-files" + TEST_FILE_SUFFIX;
-const FILE_PARTIAL_REMOVEDFILES = "partial_removed-files" + TEST_FILE_SUFFIX;
-const FILE_UPDATE_IN_PROGRESS_LOCK = "updated.update_in_progress.lock";
-const COMPARE_LOG_SUFFIX = getLogSuffix();
-const LOG_COMPLETE_SUCCESS = "complete_log_success" + COMPARE_LOG_SUFFIX;
-const LOG_PARTIAL_SUCCESS = "partial_log_success" + COMPARE_LOG_SUFFIX;
-const LOG_PARTIAL_FAILURE = "partial_log_failure" + COMPARE_LOG_SUFFIX;
-const LOG_REPLACE_SUCCESS = "replace_log_success";
-
-const USE_EXECV = IS_UNIX && !IS_MACOSX;
-
-const URL_HOST = "http://localhost";
-
-const FILE_APP_BIN = MOZ_APP_NAME + APP_BIN_SUFFIX;
-const FILE_COMPLETE_EXE = "complete.exe";
-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_UPDATER_BIN = "updater" + BIN_SUFFIX;
-const FILE_WRONG_CHANNEL_MAR = "wrong_product_channel.mar";
-
-const PERFORMING_STAGED_UPDATE = "Performing a staged update";
-const CALL_QUIT = "calling QuitProgressUI";
-const REMOVE_OLD_DIST_DIR = "removing old distribution directory";
-const MOVE_OLD_DIST_DIR = "Moving old distribution directory to new location";
-const ERR_UPDATE_IN_PROGRESS = "Update already in progress! Exiting";
-const ERR_RENAME_FILE = "rename_file: failed to rename file";
-const ERR_ENSURE_COPY = "ensure_copy: failed to copy the file";
-const ERR_UNABLE_OPEN_DEST = "unable to open destination file";
-const ERR_BACKUP_DISCARD = "backup_discard: unable to remove";
-const ERR_MOVE_DESTDIR_7 = "Moving destDir to tmpDir failed, err: 7";
-const ERR_BACKUP_CREATE_7 = "backup_create failed: 7";
-const ERR_LOADSOURCEFILE_FAILED = "LoadSourceFile failed";
-
-const LOG_SVC_SUCCESSFUL_LAUNCH = "Process was started... waiting on result.";
-
-// Typical end of a message when calling assert
-const MSG_SHOULD_EQUAL = " should equal the expected value";
-const MSG_SHOULD_EXIST = "the file or directory should exist";
-const MSG_SHOULD_NOT_EXIST = "the file or directory should not exist";
-
-// All we care about is that the last modified time has changed so that Mac OS
-// X Launch Services invalidates its cache so the test allows up to one minute
-// difference in the last modified time.
-const MAC_MAX_TIME_DIFFERENCE = 60000;
-
-// How many of do_execute_soon calls to wait before the test is aborted.
-const MAX_TIMEOUT_RUNS = 20000;
-
-// Time in seconds the helper application should sleep before exiting. The
-// helper can also be made to exit by writing |finish| to its input file.
-const HELPER_SLEEP_TIMEOUT = 180;
-
-// Maximum number of milliseconds the process that is launched can run before
-// the test will try to kill it.
-const APP_TIMER_TIMEOUT = 120000;
-
-// How many of do_timeout calls using FILE_IN_USE_TIMEOUT_MS to wait before the
-// test is aborted.
-const FILE_IN_USE_MAX_TIMEOUT_RUNS = 60;
-const FILE_IN_USE_TIMEOUT_MS = 1000;
-
-const PIPE_TO_NULL = IS_WIN ? ">nul" : "> /dev/null 2>&1";
-
-const LOG_FUNCTION = do_print;
-
-const gHTTPHandlerPath = "updates.xml";
-
-// This default value will be overridden when using the http server.
-var gURLData = URL_HOST + "/";
-
-var gTestID;
-
-var gTestserver;
-
-var gRegisteredServiceCleanup;
-
-var gCheckFunc;
-var gResponseBody;
-var gResponseStatusCode = 200;
-var gRequestURL;
-var gUpdateCount;
-var gUpdates;
-var gStatusCode;
-var gStatusText;
-var gStatusResult;
-
-var gProcess;
-var gAppTimer;
-var gHandle;
-
-var gGREDirOrig;
-var gGREBinDirOrig;
-var gAppDirOrig;
-
-// Variables are used instead of contants so tests can override these values if
-// necessary.
-var gCallbackBinFile = "callback_app" + BIN_SUFFIX;
-var gCallbackArgs = ["./", "callback.log", "Test Arg 2", "Test Arg 3"];
-var gPostUpdateBinFile = "postup_app" + BIN_SUFFIX;
-var gSvcOriginalLogContents;
-var gUseTestAppDir = true;
-// Some update staging failures can remove the update. This allows tests to
-// specify that the status file and the active update should not be checked
-// after an update is staged.
-var gStagingRemovedUpdate = false;
-
-var gTimeoutRuns = 0;
-var gFileInUseTimeoutRuns = 0;
-
-// Environment related globals
-var gShouldResetEnv = undefined;
-var gAddedEnvXRENoWindowsCrashDialog = false;
-var gEnvXPCOMDebugBreak;
-var gEnvXPCOMMemLeakLog;
-var gEnvDyldLibraryPath;
-var gEnvLdLibraryPath;
-var gASanOptions;
-
-// Set to true to log additional information for debugging. To log additional
-// information for an individual test set DEBUG_AUS_TEST to true in the test's
-// run_test function.
-var DEBUG_AUS_TEST = true;
-
-const DATA_URI_SPEC = Services.io.newFileURI(do_get_file("../data", false)).spec;
-/* import-globals-from ../data/shared.js */
-Services.scriptloader.loadSubScript(DATA_URI_SPEC + "shared.js", this);
-
-var gTestFiles = [];
-var gTestDirs = [];
-
-// Common files for both successful and failed updates.
-var gTestFilesCommon = [
- {
- description: "Should never change",
- fileName: FILE_UPDATE_SETTINGS_INI,
- relPathDir: DIR_RESOURCES,
- originalContents: UPDATE_SETTINGS_CONTENTS,
- compareContents: UPDATE_SETTINGS_CONTENTS,
- originalFile: null,
- compareFile: null,
- originalPerms: 0o767,
- comparePerms: 0o767
- }, {
- description: "Should never change",
- fileName: "channel-prefs.js",
- relPathDir: DIR_RESOURCES + "defaults/pref/",
- originalContents: "ShouldNotBeReplaced\n",
- compareContents: "ShouldNotBeReplaced\n",
- originalFile: null,
- compareFile: null,
- originalPerms: 0o767,
- comparePerms: 0o767
- }];
-
- // Files for a complete successful update. This can be used for a complete
- // failed update by calling setTestFilesAndDirsForFailure.
-var gTestFilesCompleteSuccess = [
- {
- description: "Added by update.manifest (add)",
- fileName: "precomplete",
- relPathDir: DIR_RESOURCES,
- originalContents: null,
- compareContents: null,
- originalFile: FILE_PARTIAL_PRECOMPLETE,
- compareFile: FILE_COMPLETE_PRECOMPLETE,
- originalPerms: 0o666,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest (add)",
- fileName: "searchpluginstext0",
- relPathDir: DIR_RESOURCES + "searchplugins/",
- originalContents: "ToBeReplacedWithFromComplete\n",
- compareContents: "FromComplete\n",
- originalFile: null,
- compareFile: null,
- originalPerms: 0o775,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest (add)",
- fileName: "searchpluginspng1.png",
- relPathDir: DIR_RESOURCES + "searchplugins/",
- originalContents: null,
- compareContents: null,
- originalFile: null,
- compareFile: "complete.png",
- originalPerms: null,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest (add)",
- fileName: "searchpluginspng0.png",
- relPathDir: DIR_RESOURCES + "searchplugins/",
- originalContents: null,
- compareContents: null,
- originalFile: "partial.png",
- compareFile: "complete.png",
- originalPerms: 0o666,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest (add)",
- fileName: "removed-files",
- relPathDir: DIR_RESOURCES,
- originalContents: null,
- compareContents: null,
- 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: DIR_RESOURCES + "distribution/extensions/extensions1/",
- originalContents: null,
- compareContents: "FromComplete\n",
- originalFile: null,
- compareFile: null,
- originalPerms: null,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest if the parent directory exists (add-if)",
- fileName: "extensions1png1.png",
- relPathDir: DIR_RESOURCES + "distribution/extensions/extensions1/",
- originalContents: null,
- compareContents: null,
- originalFile: "partial.png",
- compareFile: "complete.png",
- originalPerms: 0o666,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest if the parent directory exists (add-if)",
- fileName: "extensions1png0.png",
- relPathDir: DIR_RESOURCES + "distribution/extensions/extensions1/",
- originalContents: null,
- compareContents: null,
- originalFile: null,
- compareFile: "complete.png",
- originalPerms: null,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest if the parent directory exists (add-if)",
- fileName: "extensions0text0",
- relPathDir: DIR_RESOURCES + "distribution/extensions/extensions0/",
- originalContents: "ToBeReplacedWithFromComplete\n",
- compareContents: "FromComplete\n",
- originalFile: null,
- compareFile: null,
- originalPerms: null,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest if the parent directory exists (add-if)",
- fileName: "extensions0png1.png",
- relPathDir: DIR_RESOURCES + "distribution/extensions/extensions0/",
- originalContents: null,
- compareContents: null,
- originalFile: null,
- compareFile: "complete.png",
- originalPerms: null,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest if the parent directory exists (add-if)",
- fileName: "extensions0png0.png",
- relPathDir: DIR_RESOURCES + "distribution/extensions/extensions0/",
- originalContents: null,
- compareContents: null,
- originalFile: null,
- compareFile: "complete.png",
- originalPerms: null,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest (add)",
- fileName: "exe0.exe",
- relPathDir: DIR_MACOS,
- originalContents: null,
- compareContents: null,
- originalFile: FILE_HELPER_BIN,
- compareFile: FILE_COMPLETE_EXE,
- originalPerms: 0o777,
- comparePerms: 0o755
- }, {
- description: "Added by update.manifest (add)",
- fileName: "10text0",
- relPathDir: DIR_RESOURCES + "1/10/",
- originalContents: "ToBeReplacedWithFromComplete\n",
- compareContents: "FromComplete\n",
- originalFile: null,
- compareFile: null,
- originalPerms: 0o767,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest (add)",
- fileName: "0exe0.exe",
- relPathDir: DIR_RESOURCES + "0/",
- originalContents: null,
- compareContents: null,
- originalFile: FILE_HELPER_BIN,
- compareFile: FILE_COMPLETE_EXE,
- originalPerms: 0o777,
- comparePerms: 0o755
- }, {
- description: "Added by update.manifest (add)",
- fileName: "00text1",
- relPathDir: DIR_RESOURCES + "0/00/",
- originalContents: "ToBeReplacedWithFromComplete\n",
- compareContents: "FromComplete\n",
- originalFile: null,
- compareFile: null,
- originalPerms: 0o677,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest (add)",
- fileName: "00text0",
- relPathDir: DIR_RESOURCES + "0/00/",
- originalContents: "ToBeReplacedWithFromComplete\n",
- compareContents: "FromComplete\n",
- originalFile: null,
- compareFile: null,
- originalPerms: 0o775,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest (add)",
- fileName: "00png0.png",
- relPathDir: DIR_RESOURCES + "0/00/",
- originalContents: null,
- compareContents: null,
- originalFile: null,
- compareFile: "complete.png",
- originalPerms: 0o776,
- comparePerms: 0o644
- }, {
- description: "Removed by precomplete (remove)",
- fileName: "20text0",
- relPathDir: DIR_RESOURCES + "2/20/",
- originalContents: "ToBeDeleted\n",
- compareContents: null,
- originalFile: null,
- compareFile: null,
- originalPerms: null,
- comparePerms: null
- }, {
- description: "Removed by precomplete (remove)",
- fileName: "20png0.png",
- relPathDir: DIR_RESOURCES + "2/20/",
- originalContents: "ToBeDeleted\n",
- compareContents: null,
- originalFile: null,
- compareFile: null,
- originalPerms: null,
- comparePerms: null
- }];
-
-// Concatenate the common files to the end of the array.
-gTestFilesCompleteSuccess = gTestFilesCompleteSuccess.concat(gTestFilesCommon);
-
-// Files for a partial successful update. This can be used for a partial failed
-// update by calling setTestFilesAndDirsForFailure.
-var gTestFilesPartialSuccess = [
- {
- description: "Added by update.manifest (add)",
- fileName: "precomplete",
- relPathDir: DIR_RESOURCES,
- originalContents: null,
- compareContents: null,
- originalFile: FILE_COMPLETE_PRECOMPLETE,
- compareFile: FILE_PARTIAL_PRECOMPLETE,
- originalPerms: 0o666,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest (add)",
- fileName: "searchpluginstext0",
- relPathDir: DIR_RESOURCES + "searchplugins/",
- originalContents: "ToBeReplacedWithFromPartial\n",
- compareContents: "FromPartial\n",
- originalFile: null,
- compareFile: null,
- originalPerms: 0o775,
- comparePerms: 0o644
- }, {
- description: "Patched by update.manifest if the file exists (patch-if)",
- fileName: "searchpluginspng1.png",
- relPathDir: DIR_RESOURCES + "searchplugins/",
- originalContents: null,
- compareContents: null,
- originalFile: "complete.png",
- compareFile: "partial.png",
- originalPerms: 0o666,
- comparePerms: 0o666
- }, {
- description: "Patched by update.manifest if the file exists (patch-if)",
- fileName: "searchpluginspng0.png",
- relPathDir: DIR_RESOURCES + "searchplugins/",
- originalContents: null,
- compareContents: null,
- originalFile: "complete.png",
- compareFile: "partial.png",
- originalPerms: 0o666,
- comparePerms: 0o666
- }, {
- description: "Added by update.manifest if the parent directory exists (add-if)",
- fileName: "extensions1text0",
- relPathDir: DIR_RESOURCES + "distribution/extensions/extensions1/",
- originalContents: null,
- compareContents: "FromPartial\n",
- originalFile: null,
- compareFile: null,
- originalPerms: null,
- comparePerms: 0o644
- }, {
- description: "Patched by update.manifest if the parent directory exists (patch-if)",
- fileName: "extensions1png1.png",
- relPathDir: DIR_RESOURCES + "distribution/extensions/extensions1/",
- originalContents: null,
- compareContents: null,
- originalFile: "complete.png",
- compareFile: "partial.png",
- originalPerms: 0o666,
- comparePerms: 0o666
- }, {
- description: "Patched by update.manifest if the parent directory exists (patch-if)",
- fileName: "extensions1png0.png",
- relPathDir: DIR_RESOURCES + "distribution/extensions/extensions1/",
- originalContents: null,
- compareContents: null,
- originalFile: "complete.png",
- compareFile: "partial.png",
- originalPerms: 0o666,
- comparePerms: 0o666
- }, {
- description: "Added by update.manifest if the parent directory exists (add-if)",
- fileName: "extensions0text0",
- relPathDir: DIR_RESOURCES + "distribution/extensions/extensions0/",
- originalContents: "ToBeReplacedWithFromPartial\n",
- compareContents: "FromPartial\n",
- originalFile: null,
- compareFile: null,
- originalPerms: 0o644,
- comparePerms: 0o644
- }, {
- description: "Patched by update.manifest if the parent directory exists (patch-if)",
- fileName: "extensions0png1.png",
- relPathDir: DIR_RESOURCES + "distribution/extensions/extensions0/",
- originalContents: null,
- compareContents: null,
- originalFile: "complete.png",
- compareFile: "partial.png",
- originalPerms: 0o644,
- comparePerms: 0o644
- }, {
- description: "Patched by update.manifest if the parent directory exists (patch-if)",
- fileName: "extensions0png0.png",
- relPathDir: DIR_RESOURCES + "distribution/extensions/extensions0/",
- originalContents: null,
- compareContents: null,
- originalFile: "complete.png",
- compareFile: "partial.png",
- originalPerms: 0o644,
- comparePerms: 0o644
- }, {
- description: "Patched by update.manifest (patch)",
- fileName: "exe0.exe",
- relPathDir: DIR_MACOS,
- originalContents: null,
- compareContents: null,
- originalFile: FILE_COMPLETE_EXE,
- compareFile: FILE_PARTIAL_EXE,
- originalPerms: 0o755,
- comparePerms: 0o755
- }, {
- description: "Patched by update.manifest (patch)",
- fileName: "0exe0.exe",
- relPathDir: DIR_RESOURCES + "0/",
- originalContents: null,
- compareContents: null,
- originalFile: FILE_COMPLETE_EXE,
- compareFile: FILE_PARTIAL_EXE,
- originalPerms: 0o755,
- comparePerms: 0o755
- }, {
- description: "Added by update.manifest (add)",
- fileName: "00text0",
- relPathDir: DIR_RESOURCES + "0/00/",
- originalContents: "ToBeReplacedWithFromPartial\n",
- compareContents: "FromPartial\n",
- originalFile: null,
- compareFile: null,
- originalPerms: 0o644,
- comparePerms: 0o644
- }, {
- description: "Patched by update.manifest (patch)",
- fileName: "00png0.png",
- relPathDir: DIR_RESOURCES + "0/00/",
- originalContents: null,
- compareContents: null,
- originalFile: "complete.png",
- compareFile: "partial.png",
- originalPerms: 0o666,
- comparePerms: 0o666
- }, {
- description: "Added by update.manifest (add)",
- fileName: "20text0",
- relPathDir: DIR_RESOURCES + "2/20/",
- originalContents: null,
- compareContents: "FromPartial\n",
- originalFile: null,
- compareFile: null,
- originalPerms: null,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest (add)",
- fileName: "20png0.png",
- relPathDir: DIR_RESOURCES + "2/20/",
- originalContents: null,
- compareContents: null,
- originalFile: null,
- compareFile: "partial.png",
- originalPerms: null,
- comparePerms: 0o644
- }, {
- description: "Added by update.manifest (add)",
- fileName: "00text2",
- relPathDir: DIR_RESOURCES + "0/00/",
- originalContents: null,
- compareContents: "FromPartial\n",
- originalFile: null,
- compareFile: null,
- originalPerms: null,
- comparePerms: 0o644
- }, {
- description: "Removed by update.manifest (remove)",
- fileName: "10text0",
- relPathDir: DIR_RESOURCES + "1/10/",
- originalContents: "ToBeDeleted\n",
- compareContents: null,
- originalFile: null,
- compareFile: null,
- originalPerms: null,
- comparePerms: null
- }, {
- description: "Removed by update.manifest (remove)",
- fileName: "00text1",
- relPathDir: DIR_RESOURCES + "0/00/",
- originalContents: "ToBeDeleted\n",
- compareContents: null,
- originalFile: null,
- compareFile: null,
- originalPerms: null,
- comparePerms: null
- }];
-
-// Concatenate the common files to the end of the array.
-gTestFilesPartialSuccess = gTestFilesPartialSuccess.concat(gTestFilesCommon);
-
-var gTestDirsCommon = [
- {
- relPathDir: DIR_RESOURCES + "3/",
- dirRemoved: false,
- files: ["3text0", "3text1"],
- filesRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "4/",
- dirRemoved: true,
- files: ["4text0", "4text1"],
- filesRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "5/",
- dirRemoved: true,
- files: ["5test.exe", "5text0", "5text1"],
- filesRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "6/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "7/",
- dirRemoved: true,
- files: ["7text0", "7text1"],
- subDirs: ["70/", "71/"],
- subDirFiles: ["7xtest.exe", "7xtext0", "7xtext1"]
- }, {
- relPathDir: DIR_RESOURCES + "8/",
- dirRemoved: false
- }, {
- relPathDir: DIR_RESOURCES + "8/80/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "8/81/",
- dirRemoved: false,
- files: ["81text0", "81text1"]
- }, {
- relPathDir: DIR_RESOURCES + "8/82/",
- dirRemoved: false,
- subDirs: ["820/", "821/"]
- }, {
- relPathDir: DIR_RESOURCES + "8/83/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "8/84/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "8/85/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "8/86/",
- dirRemoved: true,
- files: ["86text0", "86text1"]
- }, {
- relPathDir: DIR_RESOURCES + "8/87/",
- dirRemoved: true,
- subDirs: ["870/", "871/"],
- subDirFiles: ["87xtext0", "87xtext1"]
- }, {
- relPathDir: DIR_RESOURCES + "8/88/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "8/89/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "9/90/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "9/91/",
- dirRemoved: false,
- files: ["91text0", "91text1"]
- }, {
- relPathDir: DIR_RESOURCES + "9/92/",
- dirRemoved: false,
- subDirs: ["920/", "921/"]
- }, {
- relPathDir: DIR_RESOURCES + "9/93/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "9/94/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "9/95/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "9/96/",
- dirRemoved: true,
- files: ["96text0", "96text1"]
- }, {
- relPathDir: DIR_RESOURCES + "9/97/",
- dirRemoved: true,
- subDirs: ["970/", "971/"],
- subDirFiles: ["97xtext0", "97xtext1"]
- }, {
- relPathDir: DIR_RESOURCES + "9/98/",
- dirRemoved: true
- }, {
- relPathDir: DIR_RESOURCES + "9/99/",
- dirRemoved: true
- }];
-
-// Directories for a complete successful update. This array can be used for a
-// complete failed update by calling setTestFilesAndDirsForFailure.
-var gTestDirsCompleteSuccess = [
- {
- description: "Removed by precomplete (rmdir)",
- relPathDir: DIR_RESOURCES + "2/20/",
- dirRemoved: true
- }, {
- description: "Removed by precomplete (rmdir)",
- relPathDir: DIR_RESOURCES + "2/",
- dirRemoved: true
- }];
-
-// Concatenate the common files to the beginning of the array.
-gTestDirsCompleteSuccess = gTestDirsCommon.concat(gTestDirsCompleteSuccess);
-
-// Directories for a partial successful update. This array can be used for a
-// partial failed update by calling setTestFilesAndDirsForFailure.
-var gTestDirsPartialSuccess = [
- {
- description: "Removed by update.manifest (rmdir)",
- relPathDir: DIR_RESOURCES + "1/10/",
- dirRemoved: true
- }, {
- description: "Removed by update.manifest (rmdir)",
- relPathDir: DIR_RESOURCES + "1/",
- dirRemoved: true
- }];
-
-// Concatenate the common files to the beginning of the array.
-gTestDirsPartialSuccess = gTestDirsCommon.concat(gTestDirsPartialSuccess);
-
-// This makes it possible to run most tests on xulrunner where the update
-// channel default preference is not set.
-if (MOZ_APP_NAME == "xulrunner") {
- try {
- gDefaultPrefBranch.getCharPref(PREF_APP_UPDATE_CHANNEL);
- } catch (e) {
- setUpdateChannel("test_channel");
- }
-}
-
-/**
- * Helper function for setting up the test environment.
- */
-function setupTestCommon() {
- debugDump("start - general test setup");
-
- Assert.strictEqual(gTestID, undefined,
- "gTestID should be 'undefined' (setupTestCommon should " +
- "only be called once)");
-
- let caller = Components.stack.caller;
- gTestID = caller.filename.toString().split("/").pop().split(".")[0];
-
- // Tests that don't work with XULRunner.
- const XUL_RUNNER_INCOMPATIBLE = ["marAppApplyUpdateAppBinInUseStageSuccess_win",
- "marAppApplyUpdateStageSuccess",
- "marAppApplyUpdateSuccess",
- "marAppApplyUpdateAppBinInUseStageSuccessSvc_win",
- "marAppApplyUpdateStageSuccessSvc",
- "marAppApplyUpdateSuccessSvc"];
- // Replace with Array.prototype.includes when it has stabilized.
- if (MOZ_APP_NAME == "xulrunner" &&
- XUL_RUNNER_INCOMPATIBLE.indexOf(gTestID) != -1) {
- logTestInfo("Unable to run this test on xulrunner");
- return false;
- }
-
- if (IS_SERVICE_TEST && !shouldRunServiceTest()) {
- return false;
- }
-
- do_test_pending();
-
- setDefaultPrefs();
-
- // Don't attempt to show a prompt when an update finishes.
- Services.prefs.setBoolPref(PREF_APP_UPDATE_SILENT, true);
-
- gGREDirOrig = getGREDir();
- gGREBinDirOrig = getGREBinDir();
- gAppDirOrig = getAppBaseDir();
-
- let applyDir = getApplyDirFile(null, true).parent;
-
- // Try to remove the directory used to apply updates and the updates directory
- // on platforms other than Windows. Since the test hasn't ran yet and the
- // directory shouldn't exist finished this is non-fatal for the test.
- if (applyDir.exists()) {
- debugDump("attempting to remove directory. Path: " + applyDir.path);
- try {
- removeDirRecursive(applyDir);
- } catch (e) {
- logTestInfo("non-fatal error removing directory. Path: " +
- applyDir.path + ", Exception: " + e);
- // When the application doesn't exit properly it can cause the test to
- // fail again on the second run with an NS_ERROR_FILE_ACCESS_DENIED error
- // along with no useful information in the test log. To prevent this use
- // a different directory for the test when it isn't possible to remove the
- // existing test directory (bug 1294196).
- gTestID += "_new";
- logTestInfo("using a new directory for the test by changing gTestID " +
- "since there is an existing test directory that can't be " +
- "removed, gTestID: " + gTestID);
- }
- }
-
- if (IS_WIN) {
- Services.prefs.setBoolPref(PREF_APP_UPDATE_SERVICE_ENABLED,
- IS_SERVICE_TEST ? true : false);
- }
-
- // adjustGeneralPaths registers a cleanup function that calls end_test when
- // it is defined as a function.
- adjustGeneralPaths();
- // Logged once here instead of in the mock directory provider to lessen test
- // log spam.
- debugDump("Updates Directory (UpdRootD) Path: " + getMockUpdRootD().path);
-
- // This prevents a warning about not being able to find the greprefs.js file
- // from being logged.
- let grePrefsFile = getGREDir();
- if (!grePrefsFile.exists()) {
- grePrefsFile.create(Ci.nsIFile.DIRECTORY_TYPE, PERMS_DIRECTORY);
- }
- grePrefsFile.append("goanna.js");
- if (!grePrefsFile.exists()) {
- grePrefsFile.create(Ci.nsILocalFile.NORMAL_FILE_TYPE, PERMS_FILE);
- }
-
- // 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()) {
- debugDump("attempting to remove directory. Path: " + updatesDir.path);
- try {
- removeDirRecursive(updatesDir);
- } catch (e) {
- logTestInfo("non-fatal error removing directory. Path: " +
- updatesDir.path + ", Exception: " + e);
- }
- }
- }
-
- debugDump("finish - general test setup");
- return true;
-}
-
-/**
- * Nulls out the most commonly used global vars used by tests to prevent leaks
- * as needed and attempts to restore the system to its original state.
- */
-function cleanupTestCommon() {
- debugDump("start - general test cleanup");
-
- // Force the update manager to reload the update data to prevent it from
- // writing the old data to the files that have just been removed.
- reloadUpdateManagerData();
-
- if (gChannel) {
- gPrefRoot.removeObserver(PREF_APP_UPDATE_CHANNEL, observer);
- }
-
- // Call app update's observe method passing xpcom-shutdown to test that the
- // shutdown of app update runs without throwing or leaking. The observer
- // method is used directly instead of calling notifyObservers so components
- // outside of the scope of this test don't assert and thereby cause app update
- // tests to fail.
- gAUS.observe(null, "xpcom-shutdown", "");
-
- gTestserver = null;
-
- if (IS_UNIX) {
- // This will delete the launch script if it exists.
- getLaunchScript();
- }
-
- if (IS_WIN && MOZ_APP_BASENAME) {
- let appDir = getApplyDirFile(null, true);
- let vendor = MOZ_APP_VENDOR ? MOZ_APP_VENDOR : "Mozilla";
- const REG_PATH = "SOFTWARE\\" + vendor + "\\" + MOZ_APP_BASENAME +
- "\\TaskBarIDs";
- let key = Cc["@mozilla.org/windows-registry-key;1"].
- createInstance(Ci.nsIWindowsRegKey);
- try {
- key.open(Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE, REG_PATH,
- Ci.nsIWindowsRegKey.ACCESS_ALL);
- if (key.hasValue(appDir.path)) {
- key.removeValue(appDir.path);
- }
- } catch (e) {
- }
- try {
- key.open(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, REG_PATH,
- Ci.nsIWindowsRegKey.ACCESS_ALL);
- if (key.hasValue(appDir.path)) {
- key.removeValue(appDir.path);
- }
- } catch (e) {
- }
- }
-
- // The updates directory is located outside of the application directory and
- // needs to be removed on Windows and Mac OS X.
- 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.
- if (updatesDir.exists()) {
- debugDump("attempting to remove directory. Path: " + updatesDir.path);
- try {
- removeDirRecursive(updatesDir);
- } catch (e) {
- 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()) {
- debugDump("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);
- if (e == Cr.NS_ERROR_FILE_DIR_NOT_EMPTY) {
- break;
- }
- }
- }
- updatesDir = updatesDir.parent;
- }
- }
- }
- }
-
- let applyDir = getApplyDirFile(null, true).parent;
-
- // Try to remove the directory used to apply updates. Since the test has
- // already finished this is non-fatal for the test.
- if (applyDir.exists()) {
- debugDump("attempting to remove directory. Path: " + applyDir.path);
- try {
- removeDirRecursive(applyDir);
- } catch (e) {
- logTestInfo("non-fatal error removing directory. Path: " +
- applyDir.path + ", Exception: " + e);
- }
- }
-
- resetEnvironment();
-
- debugDump("finish - general test cleanup");
-}
-
-/**
- * Helper function that calls do_test_finished that tracks whether a parallel
- * run of a test passed when it runs synchronously so the log output can be
- * inspected.
- */
-function doTestFinish() {
- if (DEBUG_AUS_TEST) {
- // This prevents do_print errors from being printed by the xpcshell test
- // harness due to nsUpdateService.js logging to the console when the
- // app.update.log preference is true.
- Services.prefs.setBoolPref(PREF_APP_UPDATE_LOG, false);
- gAUS.observe(null, "nsPref:changed", PREF_APP_UPDATE_LOG);
- }
- do_execute_soon(do_test_finished);
-}
-
-/**
- * Sets the most commonly used preferences used by tests
- */
-function setDefaultPrefs() {
- Services.prefs.setBoolPref(PREF_APP_UPDATE_ENABLED, true);
- if (DEBUG_AUS_TEST) {
- // Enable Update logging
- Services.prefs.setBoolPref(PREF_APP_UPDATE_LOG, true);
- } else {
- // Some apps set this preference to true by default
- Services.prefs.setBoolPref(PREF_APP_UPDATE_LOG, false);
- }
- // In case telemetry is enabled for xpcshell tests.
- Services.prefs.setBoolPref(PREF_TOOLKIT_TELEMETRY_ENABLED, false);
-}
-
-/**
- * Helper function for updater binary tests that sets the appropriate values
- * to check for update failures.
- */
-function setTestFilesAndDirsForFailure() {
- gTestFiles.forEach(function STFADFF_Files(aTestFile) {
- aTestFile.compareContents = aTestFile.originalContents;
- aTestFile.compareFile = aTestFile.originalFile;
- aTestFile.comparePerms = aTestFile.originalPerms;
- });
-
- gTestDirs.forEach(function STFADFF_Dirs(aTestDir) {
- aTestDir.dirRemoved = false;
- if (aTestDir.filesRemoved) {
- aTestDir.filesRemoved = false;
- }
- });
-}
-
-/**
- * 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;
- });
-}
-
-/**
- * On Mac OS X this sets the last modified time for the app bundle directory to
- * a date in the past to test that the last modified time is updated when an
- * update has been successfully applied (bug 600098).
- */
-function setAppBundleModTime() {
- if (!IS_MACOSX) {
- return;
- }
- let now = Date.now();
- let yesterday = now - (1000 * 60 * 60 * 24);
- let applyToDir = getApplyDirFile();
- applyToDir.lastModifiedTime = yesterday;
-}
-
-/**
- * On Mac OS X this checks that the last modified time for the app bundle
- * directory has been updated when an update has been successfully applied
- * (bug 600098).
- */
-function checkAppBundleModTime() {
- if (!IS_MACOSX) {
- return;
- }
- let now = Date.now();
- let applyToDir = getApplyDirFile();
- let timeDiff = Math.abs(applyToDir.lastModifiedTime - now);
- Assert.ok(timeDiff < MAC_MAX_TIME_DIFFERENCE,
- "the last modified time on the apply to directory should " +
- "change after a successful update");
-}
-
-/**
- * On Mac OS X and Windows this checks if the post update '.running' file exists
- * to determine if the post update binary was launched.
- *
- * @param aShouldExist
- * Whether the post update '.running' file should exist.
- */
-function checkPostUpdateRunningFile(aShouldExist) {
- if (!IS_WIN && !IS_MACOSX) {
- return;
- }
- let postUpdateRunningFile = getPostUpdateFile(".running");
- if (aShouldExist) {
- Assert.ok(postUpdateRunningFile.exists(),
- MSG_SHOULD_EXIST + getMsgPath(postUpdateRunningFile.path));
- } else {
- Assert.ok(!postUpdateRunningFile.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(postUpdateRunningFile.path));
- }
-}
-
-/**
- * Initializes the most commonly used settings and creates an instance of the
- * update service stub.
- */
-function standardInit() {
- createAppInfo("xpcshell@tests.mozilla.org", APP_INFO_NAME, "1.0", "2.0");
- // Initialize the update service stub component
- initUpdateServiceStub();
-}
-
-/**
- * Helper function for getting the application version from the application.ini
- * file. This will look in both the GRE and the application directories for the
- * application.ini file.
- *
- * @return The version string from the application.ini file.
- */
-function getAppVersion() {
- // Read the application.ini and use its application version.
- let iniFile = gGREDirOrig.clone();
- iniFile.append(FILE_APPLICATION_INI);
- if (!iniFile.exists()) {
- iniFile = gGREBinDirOrig.clone();
- iniFile.append(FILE_APPLICATION_INI);
- }
- Assert.ok(iniFile.exists(),
- MSG_SHOULD_EXIST + getMsgPath(iniFile.path));
- let iniParser = Cc["@mozilla.org/xpcom/ini-parser-factory;1"].
- getService(Ci.nsIINIParserFactory).
- createINIParser(iniFile);
- return iniParser.getString("App", "Version");
-}
-
-/**
- * Helper function for getting the relative path to the directory where the
- * application binary is located (e.g. <test_file_leafname>/dir.app/).
- *
- * Note: The dir.app subdirectory under <test_file_leafname> is needed for
- * platforms other than Mac OS X so the tests can run in parallel due to
- * update staging creating a lock file named moz_update_in_progress.lock in
- * the parent directory of the installation directory.
- *
- * @return The relative path to the directory where application binary is
- * located.
- */
-function getApplyDirPath() {
- return gTestID + "/dir.app/";
-}
-
-/**
- * Helper function for getting the nsIFile for a file in the directory where the
- * update will be applied.
- *
- * The files for the update are located two directories below the apply to
- * 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 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 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) {
- Assert.ok(file.exists(),
- MSG_SHOULD_EXIST + getMsgPath(file.path));
- }
- 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.
- *
- * @return The relative path to the directory where the test data files are
- * located.
- */
-function getTestDirPath() {
- return "../data/";
-}
-
-/**
- * Helper function for getting the nsIFile for a file in the test data
- * directory.
- *
- * @param aRelPath (optional)
- * The relative path to the file or directory to get from the root of
- * the test's data directory. If not specified the test's data
- * directory will be returned.
- * @param aAllowNonExists (optional)
- * Whether or not to throw an error if the path exists.
- * If not specified, then false is used.
- * @return The nsIFile for the file in the test data directory.
- * @throws If the file or directory does not exist.
- */
-function getTestDirFile(aRelPath, aAllowNonExists) {
- let relpath = getTestDirPath() + (aRelPath ? aRelPath : "");
- return do_get_file(relpath, !!aAllowNonExists);
-}
-
-/**
- * Helper function for getting the nsIFile for the maintenance service
- * directory on Windows.
- *
- * @return The nsIFile for the maintenance service directory.
- */
-function getMaintSvcDir() {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- 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");
- debugDump("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");
- debugDump("using CSIDL_PROGRAM_FILES - maintenance service install " +
- "directory path: " + maintSvcDir.path);
- }
- }
- if (!maintSvcDir) {
- do_throw("Unable to find the maintenance service install directory");
- }
-
- return maintSvcDir;
-}
-
-/**
- * Get the nsILocalFile for a Windows special folder determined by the CSIDL
- * passed.
- *
- * @param aCSIDL
- * The CSIDL for the Windows special folder.
- * @return The nsILocalFile for the Windows special folder.
- * @throws If called from a platform other than Windows.
- */
-function getSpecialFolderDir(aCSIDL) {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- 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;
- }
- debugDump("SHGetSpecialFolderPath returned path: " + path);
- let dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
- dir.initWithPath(path);
- return dir;
-}
-
-XPCOMUtils.defineLazyGetter(this, "gInstallDirPathHash", function test_gIDPH() {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- // Figure out where we should check for a cached hash value
- if (!MOZ_APP_BASENAME) {
- return null;
- }
-
- let vendor = MOZ_APP_VENDOR ? MOZ_APP_VENDOR : "Mozilla";
- let appDir = getApplyDirFile(null, true);
-
- const REG_PATH = "SOFTWARE\\" + vendor + "\\" + MOZ_APP_BASENAME +
- "\\TaskBarIDs";
- let regKey = Cc["@mozilla.org/windows-registry-key;1"].
- createInstance(Ci.nsIWindowsRegKey);
- try {
- regKey.open(Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE, REG_PATH,
- Ci.nsIWindowsRegKey.ACCESS_ALL);
- regKey.writeStringValue(appDir.path, gTestID);
- return gTestID;
- } catch (e) {
- }
-
- try {
- regKey.create(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, REG_PATH,
- Ci.nsIWindowsRegKey.ACCESS_ALL);
- regKey.writeStringValue(appDir.path, gTestID);
- return gTestID;
- } catch (e) {
- logTestInfo("failed to create registry key. Registry Path: " + REG_PATH +
- ", Key Name: " + appDir.path + ", Key Value: " + gTestID +
- ", Exception " + e);
- }
- return null;
-});
-
-XPCOMUtils.defineLazyGetter(this, "gLocalAppDataDir", function test_gLADD() {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- const CSIDL_LOCAL_APPDATA = 0x1c;
- return getSpecialFolderDir(CSIDL_LOCAL_APPDATA);
-});
-
-XPCOMUtils.defineLazyGetter(this, "gProgFilesDir", function test_gPFD() {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- const CSIDL_PROGRAM_FILES = 0x26;
- return getSpecialFolderDir(CSIDL_PROGRAM_FILES);
-});
-
-/**
- * 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() {
- if (IS_WIN) {
- return getMockUpdRootDWin();
- }
-
- if (IS_MACOSX) {
- return getMockUpdRootDMac();
- }
-
- return getApplyDirFile(DIR_MACOS, true);
-}
-
-/**
- * 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 getMockUpdRootDWin() {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- let localAppDataDir = gLocalAppDataDir.clone();
- let progFilesDir = gProgFilesDir.clone();
- let appDir = Services.dirsvc.get(XRE_EXECUTABLE_FILE, Ci.nsIFile).parent;
-
- let appDirPath = appDir.path;
- let relPathUpdates = "";
- if (gInstallDirPathHash && (MOZ_APP_VENDOR || MOZ_APP_BASENAME)) {
- relPathUpdates += (MOZ_APP_VENDOR ? MOZ_APP_VENDOR : MOZ_APP_BASENAME) +
- "\\" + DIR_UPDATES + "\\" + gInstallDirPathHash;
- }
-
- 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) {
- relPathUpdates += MOZ_APP_VENDOR + "\\" + MOZ_APP_BASENAME;
- } else {
- relPathUpdates += MOZ_APP_BASENAME;
- }
- relPathUpdates += appDirPath.substr(progFilesDir.path.length);
- }
- }
- }
-
- 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 = Cc["@mozilla.org/file/local;1"].
- createInstance(Ci.nsILocalFile);
- updatesDir.initWithPath(localAppDataDir.path + "\\" + relPathUpdates);
- return updatesDir;
-}
-
-XPCOMUtils.defineLazyGetter(this, "gUpdatesRootDir", function test_gURD() {
- if (!IS_MACOSX) {
- do_throw("Mac OS X only function called by a different platform!");
- }
-
- let dir = Services.dirsvc.get("ULibDir", 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
- * in nsXREDirProvider.cpp so an application will be able to find the update
- * when running a test that launches the application.
- */
-function getMockUpdRootDMac() {
- if (!IS_MACOSX) {
- do_throw("Mac OS X only function called by a different platform!");
- }
-
- let appDir = Services.dirsvc.get(XRE_EXECUTABLE_FILE, Ci.nsIFile).
- parent.parent.parent;
- let appDirPath = appDir.path;
- appDirPath = appDirPath.substr(0, appDirPath.length - 4);
-
- let pathUpdates = gUpdatesRootDir.path + appDirPath;
- let updatesDir = Cc["@mozilla.org/file/local;1"].
- createInstance(Ci.nsILocalFile);
- updatesDir.initWithPath(pathUpdates);
- return updatesDir;
-}
-
-/**
- * Creates an update in progress lock file in the specified directory on
- * Windows.
- *
- * @param aDir
- * The nsIFile for the directory where the lock file should be created.
- */
-function createUpdateInProgressLockFile(aDir) {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- let file = aDir.clone();
- file.append(FILE_UPDATE_IN_PROGRESS_LOCK);
- file.create(file.NORMAL_FILE_TYPE, 0o444);
- file.QueryInterface(Ci.nsILocalFileWin);
- file.fileAttributesWin |= file.WFA_READONLY;
- file.fileAttributesWin &= ~file.WFA_READWRITE;
- Assert.ok(file.exists(),
- MSG_SHOULD_EXIST + getMsgPath(file.path));
- Assert.ok(!file.isWritable(),
- "the lock file should not be writeable");
-}
-
-/**
- * Removes an update in progress lock file in the specified directory on
- * Windows.
- *
- * @param aDir
- * The nsIFile for the directory where the lock file is located.
- */
-function removeUpdateInProgressLockFile(aDir) {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- let file = aDir.clone();
- file.append(FILE_UPDATE_IN_PROGRESS_LOCK);
- file.QueryInterface(Ci.nsILocalFileWin);
- file.fileAttributesWin |= file.WFA_READWRITE;
- file.fileAttributesWin &= ~file.WFA_READONLY;
- file.remove(false);
- Assert.ok(!file.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(file.path));
-}
-
-/**
- * Gets the test updater from the test data direcory.
- *
- * @return nsIFIle for the test updater.
- */
-function getTestUpdater() {
- let updater = getTestDirFile("updater.app", true);
- if (!updater.exists()) {
- updater = getTestDirFile(FILE_UPDATER_BIN);
- if (!updater.exists()) {
- do_throw("Unable to find the updater binary!");
- }
- }
- Assert.ok(updater.exists(),
- MSG_SHOULD_EXIST + getMsgPath(updater.path));
- return updater;
-}
-
-/**
- * Copies the test updater to the GRE binary directory and returns the nsIFile
- * for the copied test updater.
- *
- * @return nsIFIle for the copied test updater.
- */
-function copyTestUpdaterToBinDir() {
- let testUpdater = getTestUpdater();
- let updater = getGREBinDir();
- updater.append(testUpdater.leafName);
- if (!updater.exists()) {
- testUpdater.copyToFollowingLinks(updater.parent, updater.leafName);
- }
- return updater;
-}
-
-/**
- * Copies the test updater to the location where it will be launched to apply an
- * update and returns the nsIFile for the copied test updater.
- *
- * @return nsIFIle for the copied test updater.
- */
-function copyTestUpdaterForRunUsingUpdater() {
- if (IS_WIN) {
- return copyTestUpdaterToBinDir();
- }
-
- let testUpdater = getTestUpdater();
- let updater = getUpdatesPatchDir();
- updater.append(testUpdater.leafName);
- if (!updater.exists()) {
- testUpdater.copyToFollowingLinks(updater.parent, updater.leafName);
- }
-
- if (IS_MACOSX) {
- updater.append("Contents");
- updater.append("MacOS");
- updater.append("org.mozilla.updater");
- }
- return updater;
-}
-
-/**
- * Logs the contents of an update log and for maintenance service tests this
- * will log the contents of the latest maintenanceservice.log.
- *
- * @param aLogLeafName
- * The leaf name of the update log.
- */
-function logUpdateLog(aLogLeafName) {
- let updateLog = getUpdateLog(aLogLeafName);
- if (updateLog.exists()) {
- // xpcshell tests won't display the entire contents so log each line.
- let updateLogContents = readFileBytes(updateLog).replace(/\r\n/g, "\n");
- updateLogContents = replaceLogPaths(updateLogContents);
- let aryLogContents = updateLogContents.split("\n");
- logTestInfo("contents of " + updateLog.path + ":");
- aryLogContents.forEach(function RU_LC_FE(aLine) {
- logTestInfo(aLine);
- });
- } else {
- logTestInfo("update log doesn't exist, path: " + updateLog.path);
- }
-
- if (IS_SERVICE_TEST) {
- let serviceLog = getMaintSvcDir();
- serviceLog.append("logs");
- serviceLog.append("maintenanceservice.log");
- if (serviceLog.exists()) {
- // xpcshell tests won't display the entire contents so log each line.
- let serviceLogContents = readFileBytes(serviceLog).replace(/\r\n/g, "\n");
- serviceLogContents = replaceLogPaths(serviceLogContents);
- let aryLogContents = serviceLogContents.split("\n");
- logTestInfo("contents of " + serviceLog.path + ":");
- aryLogContents.forEach(function RU_LC_FE(aLine) {
- logTestInfo(aLine);
- });
- } else {
- logTestInfo("maintenance service log doesn't exist, path: " +
- serviceLog.path);
- }
- }
-}
-
-/**
- * Gets the maintenance service log contents.
- */
-function readServiceLogFile() {
- let file = getMaintSvcDir();
- file.append("logs");
- file.append("maintenanceservice.log");
- return readFile(file);
-}
-
-/**
- * Launches the updater binary to apply an update for updater tests.
- *
- * @param aExpectedStatus
- * The expected value of update.status when the test finishes. For
- * service tests passing STATE_PENDING or STATE_APPLIED will change the
- * value to STATE_PENDING_SVC and STATE_APPLIED_SVC respectively.
- * @param aSwitchApp
- * If true the update should switch the application with an updated
- * staged application and if false the update should be applied to the
- * installed application.
- * @param aExpectedExitValue
- * The expected exit value from the updater binary for non-service
- * tests.
- * @param aCheckSvcLog
- * Whether the service log should be checked for service tests.
- * @param aPatchDirPath (optional)
- * When specified the patch directory path to use for invalid argument
- * tests otherwise the normal path will be used.
- * @param aInstallDirPath (optional)
- * When specified the install directory path to use for invalid
- * argument tests otherwise the normal path will be used.
- * @param aApplyToDirPath (optional)
- * When specified the apply to / working directory path to use for
- * invalid argument tests otherwise the normal path will be used.
- * @param aCallbackPath (optional)
- * When specified the callback path to use for invalid argument tests
- * otherwise the normal path will be used.
- */
-function runUpdate(aExpectedStatus, aSwitchApp, aExpectedExitValue, aCheckSvcLog,
- aPatchDirPath, aInstallDirPath, aApplyToDirPath,
- aCallbackPath) {
- let isInvalidArgTest = !!aPatchDirPath || !!aInstallDirPath ||
- !!aApplyToDirPath || aCallbackPath;
-
- let svcOriginalLog;
- if (IS_SERVICE_TEST) {
- copyFileToTestAppDir(FILE_MAINTENANCE_SERVICE_BIN, false);
- copyFileToTestAppDir(FILE_MAINTENANCE_SERVICE_INSTALLER_BIN, false);
- if (aCheckSvcLog) {
- svcOriginalLog = readServiceLogFile();
- }
- }
-
- // Copy the updater binary to the directory where it will apply updates.
- let updateBin = copyTestUpdaterForRunUsingUpdater();
- Assert.ok(updateBin.exists(),
- MSG_SHOULD_EXIST + getMsgPath(updateBin.path));
-
- let updatesDirPath = aPatchDirPath || getUpdatesPatchDir().path;
- let installDirPath = aInstallDirPath || getApplyDirFile(null, true).path;
- let applyToDirPath = aApplyToDirPath || getApplyDirFile(null, true).path;
- let stageDirPath = aApplyToDirPath || getStageDirFile(null, true).path;
-
- let callbackApp = getApplyDirFile(DIR_RESOURCES + gCallbackBinFile);
- callbackApp.permissions = PERMS_DIRECTORY;
-
- setAppBundleModTime();
-
- let args = [updatesDirPath, installDirPath];
- if (aSwitchApp) {
- args[2] = stageDirPath;
- args[3] = "0/replace";
- } else {
- args[2] = applyToDirPath;
- args[3] = "0";
- }
-
- let launchBin = IS_SERVICE_TEST && isInvalidArgTest ? callbackApp : updateBin;
-
- if (!isInvalidArgTest) {
- args = args.concat([callbackApp.parent.path, callbackApp.path]);
- args = args.concat(gCallbackArgs);
- } else if (IS_SERVICE_TEST) {
- args = ["launch-service", updateBin.path].concat(args);
- } else if (aCallbackPath) {
- args = args.concat([callbackApp.parent.path, aCallbackPath]);
- }
-
- debugDump("launching the program: " + launchBin.path + " " + args.join(" "));
-
- if (aSwitchApp && !isInvalidArgTest) {
- // We want to set the env vars again
- gShouldResetEnv = undefined;
- }
-
- setEnvironment();
-
- let process = Cc["@mozilla.org/process/util;1"].
- createInstance(Ci.nsIProcess);
- process.init(launchBin);
- process.run(true, args, args.length);
-
- resetEnvironment();
-
- let status = readStatusFile();
- if ((!IS_SERVICE_TEST && process.exitValue != aExpectedExitValue) ||
- status != aExpectedStatus) {
- if (process.exitValue != aExpectedExitValue) {
- logTestInfo("updater exited with unexpected value! Got: " +
- process.exitValue + ", Expected: " + aExpectedExitValue);
- }
- if (status != aExpectedStatus) {
- logTestInfo("update status is not the expected status! Got: " + status +
- ", Expected: " + aExpectedStatus);
- }
- logUpdateLog(FILE_LAST_UPDATE_LOG);
- }
-
- if (!IS_SERVICE_TEST) {
- Assert.equal(process.exitValue, aExpectedExitValue,
- "the process exit value" + MSG_SHOULD_EQUAL);
- }
- Assert.equal(status, aExpectedStatus,
- "the update status" + MSG_SHOULD_EQUAL);
-
- if (IS_SERVICE_TEST && aCheckSvcLog) {
- let contents = readServiceLogFile();
- Assert.notEqual(contents, svcOriginalLog,
- "the contents of the maintenanceservice.log should not " +
- "be the same as the original contents");
- if (!isInvalidArgTest) {
- Assert.notEqual(contents.indexOf(LOG_SVC_SUCCESSFUL_LAUNCH), -1,
- "the contents of the maintenanceservice.log should " +
- "contain the successful launch string");
- }
- }
-
- do_execute_soon(runUpdateFinished);
-}
-
-/**
- * Launches the helper binary synchronously with the specified arguments for
- * updater tests.
- *
- * @param aArgs
- * The arguments to pass to the helper binary.
- * @return the process exit value returned by the helper binary.
- */
-function runTestHelperSync(aArgs) {
- let helperBin = getTestDirFile(FILE_HELPER_BIN);
- let process = Cc["@mozilla.org/process/util;1"].
- createInstance(Ci.nsIProcess);
- process.init(helperBin);
- debugDump("Running " + helperBin.path + " " + aArgs.join(" "));
- process.run(true, aArgs, aArgs.length);
- return process.exitValue;
-}
-
-/**
- * Creates a symlink for updater tests.
- */
-function createSymlink() {
- let args = ["setup-symlink", "moz-foo", "moz-bar", "target",
- getApplyDirFile().path + "/" + DIR_RESOURCES + "link"];
- let exitValue = runTestHelperSync(args);
- Assert.equal(exitValue, 0,
- "the helper process exit value should be 0");
- getApplyDirFile(DIR_RESOURCES + "link", false).permissions = 0o666;
- args = ["setup-symlink", "moz-foo2", "moz-bar2", "target2",
- getApplyDirFile().path + "/" + DIR_RESOURCES + "link2", "change-perm"];
- exitValue = runTestHelperSync(args);
- Assert.equal(exitValue, 0,
- "the helper process exit value should be 0");
-}
-
-/**
- * Removes a symlink for updater tests.
- */
-function removeSymlink() {
- let args = ["remove-symlink", "moz-foo", "moz-bar", "target",
- getApplyDirFile().path + "/" + DIR_RESOURCES + "link"];
- let exitValue = runTestHelperSync(args);
- Assert.equal(exitValue, 0,
- "the helper process exit value should be 0");
- args = ["remove-symlink", "moz-foo2", "moz-bar2", "target2",
- getApplyDirFile().path + "/" + DIR_RESOURCES + "link2"];
- exitValue = runTestHelperSync(args);
- Assert.equal(exitValue, 0,
- "the helper process exit value should be 0");
-}
-
-/**
- * Checks a symlink for updater tests.
- */
-function checkSymlink() {
- let args = ["check-symlink",
- getApplyDirFile().path + "/" + DIR_RESOURCES + "link"];
- let exitValue = runTestHelperSync(args);
- Assert.equal(exitValue, 0,
- "the helper process exit value should be 0");
-}
-
-/**
- * Sets the active update and related information for updater tests.
- */
-function setupActiveUpdate() {
- let state = IS_SERVICE_TEST ? STATE_PENDING_SVC : STATE_PENDING;
- let channel = gDefaultPrefBranch.getCharPref(PREF_APP_UPDATE_CHANNEL);
- let patches = getLocalPatchString(null, null, null, null, null, "true",
- state);
- let updates = getLocalUpdateString(patches, null, null, null, null, null,
- null, null, null, null, "true", channel);
- writeUpdatesToXMLFile(getLocalUpdatesXMLString(updates), true);
- writeVersionFile(DEFAULT_UPDATE_VERSION);
- writeStatusFile(state);
- reloadUpdateManagerData();
- Assert.ok(!!gUpdateManager.activeUpdate,
- "the active update should be defined");
-}
-
-/**
- * Gets the specified update log.
- *
- * @param aLogLeafName
- * The leaf name of the log to get.
- * @return nsIFile for the update log.
- */
-function getUpdateLog(aLogLeafName) {
- let updateLog = getUpdatesDir();
- if (aLogLeafName == FILE_UPDATE_LOG) {
- updateLog.append(DIR_PATCH);
- }
- updateLog.append(aLogLeafName);
- return updateLog;
-}
-
-/**
- * The update-staged observer for the call to nsIUpdateProcessor:processUpdate.
- */
-const gUpdateStagedObserver = {
- observe: function(aSubject, aTopic, aData) {
- debugDump("observe called with topic: " + aTopic + ", data: " + aData);
- if (aTopic == "update-staged") {
- Services.obs.removeObserver(gUpdateStagedObserver, "update-staged");
- // The environment is reset after the update-staged observer topic because
- // processUpdate in nsIUpdateProcessor uses a new thread and clearing the
- // environment immediately after calling processUpdate can clear the
- // environment before the updater is launched.
- resetEnvironment();
- // Use do_execute_soon to prevent any failures from propagating to the
- // update service.
- do_execute_soon(checkUpdateStagedState.bind(null, aData));
- }
- },
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver])
-};
-
-/**
- * Stages an update using nsIUpdateProcessor:processUpdate for updater tests.
- *
- * @param aCheckSvcLog
- * Whether the service log should be checked for service tests.
- */
-function stageUpdate(aCheckSvcLog) {
- debugDump("start - attempting to stage update");
-
- if (IS_SERVICE_TEST && aCheckSvcLog) {
- gSvcOriginalLogContents = readServiceLogFile();
- }
-
- Services.obs.addObserver(gUpdateStagedObserver, "update-staged", false);
-
- setAppBundleModTime();
- setEnvironment();
- // Stage the update.
- Cc["@mozilla.org/updates/update-processor;1"].
- createInstance(Ci.nsIUpdateProcessor).
- processUpdate(gUpdateManager.activeUpdate);
-
- // The environment is not reset here because processUpdate in
- // nsIUpdateProcessor uses a new thread and clearing the environment
- // immediately after calling processUpdate can clear the environment before
- // the updater is launched. Instead it is reset after the update-staged
- // observer topic.
-
- debugDump("finish - attempting to stage update");
-}
-
-/**
- * Checks that the update state is correct as well as the expected files are
- * present after staging and update for updater tests and then calls
- * stageUpdateFinished.
- *
- * @param aUpdateState
- * The update state received by the observer notification.
- */
-function checkUpdateStagedState(aUpdateState) {
- if (IS_WIN) {
- if (IS_SERVICE_TEST) {
- waitForServiceStop(false);
- } else {
- let updater = getApplyDirFile(FILE_UPDATER_BIN, true);
- if (isFileInUse(updater)) {
- do_timeout(FILE_IN_USE_TIMEOUT_MS,
- checkUpdateStagedState.bind(null, aUpdateState));
- return;
- }
- }
- }
-
- Assert.equal(aUpdateState, STATE_AFTER_STAGE,
- "the notified state" + MSG_SHOULD_EQUAL);
-
- if (!gStagingRemovedUpdate) {
- Assert.equal(readStatusState(), STATE_AFTER_STAGE,
- "the status file state" + MSG_SHOULD_EQUAL);
-
- Assert.equal(gUpdateManager.activeUpdate.state, STATE_AFTER_STAGE,
- "the update state" + MSG_SHOULD_EQUAL);
- }
-
- Assert.equal(gUpdateManager.updateCount, 1,
- "the update manager updateCount attribute" + MSG_SHOULD_EQUAL);
- Assert.equal(gUpdateManager.getUpdateAt(0).state, STATE_AFTER_STAGE,
- "the update state" + MSG_SHOULD_EQUAL);
-
- let log = getUpdateLog(FILE_LAST_UPDATE_LOG);
- Assert.ok(log.exists(),
- MSG_SHOULD_EXIST + getMsgPath(log.path));
-
- log = getUpdateLog(FILE_UPDATE_LOG);
- Assert.ok(!log.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(log.path));
-
- log = getUpdateLog(FILE_BACKUP_UPDATE_LOG);
- Assert.ok(!log.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(log.path));
-
- let stageDir = getStageDirFile(null, true);
- if (STATE_AFTER_STAGE == STATE_APPLIED ||
- STATE_AFTER_STAGE == STATE_APPLIED_SVC) {
- Assert.ok(stageDir.exists(),
- MSG_SHOULD_EXIST + getMsgPath(stageDir.path));
- } else {
- Assert.ok(!stageDir.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(stageDir.path));
- }
-
- if (IS_SERVICE_TEST && gSvcOriginalLogContents !== undefined) {
- let contents = readServiceLogFile();
- Assert.notEqual(contents, gSvcOriginalLogContents,
- "the contents of the maintenanceservice.log should not " +
- "be the same as the original contents");
- Assert.notEqual(contents.indexOf(LOG_SVC_SUCCESSFUL_LAUNCH), -1,
- "the contents of the maintenanceservice.log should " +
- "contain the successful launch string");
- }
-
- do_execute_soon(stageUpdateFinished);
-}
-
-/**
- * Helper function to check whether the maintenance service updater tests should
- * run. See bug 711660 for more details.
- *
- * @return true if the test should run and false if it shouldn't.
- */
-function shouldRunServiceTest() {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- let binDir = getGREBinDir();
- let updaterBin = binDir.clone();
- updaterBin.append(FILE_UPDATER_BIN);
- Assert.ok(updaterBin.exists(),
- MSG_SHOULD_EXIST + ", leafName: " + updaterBin.leafName);
-
- let updaterBinPath = updaterBin.path;
- if (/ /.test(updaterBinPath)) {
- updaterBinPath = '"' + updaterBinPath + '"';
- }
-
- let isBinSigned = isBinarySigned(updaterBinPath);
-
- const REG_PATH = "SOFTWARE\\Mozilla\\MaintenanceService\\" +
- "3932ecacee736d366d6436db0f55bce4";
- let key = Cc["@mozilla.org/windows-registry-key;1"].
- createInstance(Ci.nsIWindowsRegKey);
- try {
- key.open(Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE, REG_PATH,
- Ci.nsIWindowsRegKey.ACCESS_READ | key.WOW64_64);
- } catch (e) {
- // The build system could sign the files and not have the test registry key
- // in which case we should fail the test if the updater binary is signed so
- // the build system can be fixed by adding the registry key.
- if (IS_AUTHENTICODE_CHECK_ENABLED) {
- Assert.ok(!isBinSigned,
- "the updater.exe binary should not be signed when the test " +
- "registry key doesn't exist (if it is, build system " +
- "configuration bug?)");
- }
-
- logTestInfo("this test can only run on the buildbot build system at this " +
- "time");
- return false;
- }
-
- // Check to make sure the service is installed
- let args = ["wait-for-service-stop", "MozillaMaintenance", "10"];
- let exitValue = runTestHelperSync(args);
- Assert.notEqual(exitValue, 0xEE, "the maintenance service should be " +
- "installed (if not, build system configuration bug?)");
-
- if (IS_AUTHENTICODE_CHECK_ENABLED) {
- // The test registry key exists and IS_AUTHENTICODE_CHECK_ENABLED is true
- // so the binaries should be signed. To run the test locally
- // DISABLE_UPDATER_AUTHENTICODE_CHECK can be defined.
- Assert.ok(isBinSigned,
- "the updater.exe binary should be signed (if not, build system " +
- "configuration bug?)");
- }
-
- // 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();
-}
-
-/**
- * Helper function to check whether the a binary is signed.
- *
- * @param aBinPath
- * The path to the file to check if it is signed.
- * @return true if the file is signed and false if it isn't.
- */
-function isBinarySigned(aBinPath) {
- let args = ["check-signature", aBinPath];
- let exitValue = runTestHelperSync(args);
- if (exitValue != 0) {
- logTestInfo("binary is not signed. " + FILE_HELPER_BIN + " returned " +
- exitValue + " for file " + aBinPath);
- return false;
- }
- return true;
-}
-
-/**
- * Helper function for asynchronously setting up the application files required
- * to launch the application for the updater tests by either copying or creating
- * symlinks for the files. This is needed for Windows debug builds which can
- * lock a file that is being copied so that the tests can run in parallel. After
- * the files have been copied the setupUpdaterTestFinished function will be
- * called.
- */
-function setupAppFilesAsync() {
- gTimeoutRuns++;
- try {
- setupAppFiles();
- } catch (e) {
- if (gTimeoutRuns > MAX_TIMEOUT_RUNS) {
- do_throw("Exceeded MAX_TIMEOUT_RUNS while trying to setup application " +
- "files! Exception: " + e);
- }
- do_execute_soon(setupAppFilesAsync);
- return;
- }
-
- do_execute_soon(setupUpdaterTestFinished);
-}
-
-/**
- * Helper function for setting up the application files required to launch the
- * application for the updater tests by either copying or creating symlinks to
- * the files.
- */
-function setupAppFiles() {
- debugDump("start - copying or creating symlinks to application files " +
- "for the test");
-
- let destDir = getApplyDirFile(null, true);
- if (!destDir.exists()) {
- try {
- destDir.create(Ci.nsIFile.DIRECTORY_TYPE, PERMS_DIRECTORY);
- } catch (e) {
- logTestInfo("unable to create directory! Path: " + destDir.path +
- ", Exception: " + e);
- do_throw(e);
- }
- }
-
- // Required files for the application or the test that aren't listed in the
- // dependentlibs.list file.
- let appFiles = [{relPath: FILE_APP_BIN,
- inGreDir: false},
- {relPath: FILE_APPLICATION_INI,
- inGreDir: true},
- {relPath: "dependentlibs.list",
- inGreDir: true}];
-
- // On Linux the updater.png must also be copied
- if (IS_UNIX && !IS_MACOSX) {
- appFiles.push({relPath: "icons/updater.png",
- inGreDir: true});
- }
-
- // Read the dependent libs file leafnames from the dependentlibs.list file
- // into the array.
- let deplibsFile = gGREDirOrig.clone();
- deplibsFile.append("dependentlibs.list");
- let fis = Cc["@mozilla.org/network/file-input-stream;1"].
- createInstance(Ci.nsIFileInputStream);
- fis.init(deplibsFile, 0x01, 0o444, Ci.nsIFileInputStream.CLOSE_ON_EOF);
- fis.QueryInterface(Ci.nsILineInputStream);
-
- let hasMore;
- let line = {};
- do {
- hasMore = fis.readLine(line);
- appFiles.push({relPath: line.value,
- inGreDir: false});
- } while (hasMore);
-
- fis.close();
-
- appFiles.forEach(function CMAF_FLN_FE(aAppFile) {
- copyFileToTestAppDir(aAppFile.relPath, aAppFile.inGreDir);
- });
-
- copyTestUpdaterToBinDir();
-
- debugDump("finish - copying or creating symlinks to application files " +
- "for the test");
-}
-
-/**
- * Copies the specified files from the dist/bin directory into the test's
- * application directory.
- *
- * @param aFileRelPath
- * The relative path to the source and the destination of the file to
- * copy.
- * @param aInGreDir
- * Whether the file is located in the GRE directory which is
- * <bundle>/Contents/Resources on Mac OS X and is the installation
- * directory on all other platforms. If false the file must be in the
- * GRE Binary directory which is <bundle>/Contents/MacOS on Mac OS X
- * and is the installation directory on on all other platforms.
- */
-function copyFileToTestAppDir(aFileRelPath, aInGreDir) {
- // gGREDirOrig and gGREBinDirOrig must always be cloned when changing its
- // properties
- let srcFile = aInGreDir ? gGREDirOrig.clone() : gGREBinDirOrig.clone();
- let destFile = aInGreDir ? getGREDir() : getGREBinDir();
- let fileRelPath = aFileRelPath;
- let pathParts = fileRelPath.split("/");
- for (let i = 0; i < pathParts.length; i++) {
- if (pathParts[i]) {
- srcFile.append(pathParts[i]);
- destFile.append(pathParts[i]);
- }
- }
-
- if (IS_MACOSX && !srcFile.exists()) {
- debugDump("unable to copy file since it doesn't exist! Checking if " +
- fileRelPath + ".app exists. Path: " + srcFile.path);
- // gGREDirOrig and gGREBinDirOrig must always be cloned when changing its
- // properties
- srcFile = aInGreDir ? gGREDirOrig.clone() : gGREBinDirOrig.clone();
- destFile = aInGreDir ? getGREDir() : getGREBinDir();
- for (let i = 0; i < pathParts.length; i++) {
- if (pathParts[i]) {
- srcFile.append(pathParts[i] + (pathParts.length - 1 == i ? ".app" : ""));
- destFile.append(pathParts[i] + (pathParts.length - 1 == i ? ".app" : ""));
- }
- }
- fileRelPath = fileRelPath + ".app";
- }
- Assert.ok(srcFile.exists(),
- MSG_SHOULD_EXIST + ", leafName: " + srcFile.leafName);
-
- // Symlink libraries. Note that the XUL library on Mac OS X doesn't have a
- // file extension and shouldSymlink will always be false on Windows.
- let shouldSymlink = (pathParts[pathParts.length - 1] == "XUL" ||
- fileRelPath.substr(fileRelPath.length - 3) == ".so" ||
- fileRelPath.substr(fileRelPath.length - 6) == ".dylib");
- if (!shouldSymlink) {
- if (!destFile.exists()) {
- try {
- srcFile.copyToFollowingLinks(destFile.parent, destFile.leafName);
- } catch (e) {
- // Just in case it is partially copied
- if (destFile.exists()) {
- try {
- destFile.remove(true);
- } catch (ex) {
- logTestInfo("unable to remove file that failed to copy! Path: " +
- destFile.path);
- }
- }
- do_throw("Unable to copy file! Path: " + srcFile.path +
- ", Exception: " + ex);
- }
- }
- } else {
- try {
- if (destFile.exists()) {
- destFile.remove(false);
- }
- let ln = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
- ln.initWithPath("/bin/ln");
- let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
- process.init(ln);
- let args = ["-s", srcFile.path, destFile.path];
- process.run(true, args, args.length);
- Assert.ok(destFile.isSymlink(),
- destFile.leafName + " should be a symlink");
- } catch (e) {
- do_throw("Unable to create symlink for file! Path: " + srcFile.path +
- ", Exception: " + e);
- }
- }
-}
-
-/**
- * Attempts to upgrade the maintenance service if permissions are allowed.
- * 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.
- *
- * @return true if the installed service is from this build. If the installed
- * service is not from this build the test will fail instead of
- * returning false.
- */
-function attemptServiceInstall() {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- let maintSvcDir = getMaintSvcDir();
- Assert.ok(maintSvcDir.exists(),
- MSG_SHOULD_EXIST + ", leafName: " + maintSvcDir.leafName);
- let oldMaintSvcBin = maintSvcDir.clone();
- oldMaintSvcBin.append(FILE_MAINTENANCE_SERVICE_BIN);
- Assert.ok(oldMaintSvcBin.exists(),
- MSG_SHOULD_EXIST + ", leafName: " + oldMaintSvcBin.leafName);
- let buildMaintSvcBin = getGREBinDir();
- buildMaintSvcBin.append(FILE_MAINTENANCE_SERVICE_BIN);
- if (readFileBytes(oldMaintSvcBin) == readFileBytes(buildMaintSvcBin)) {
- debugDump("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);
- } 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);
- }
- }
- Assert.ok(false, "should be able copy the test maintenance service to " +
- "the maintenance service directory (if not, build system " +
- "configuration bug?), path: " + maintSvcDir.path);
- }
-
- return true;
-}
-
-/**
- * Waits for the applications that are launched by the maintenance service to
- * stop.
- */
-function waitServiceApps() {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- // maintenanceservice_installer.exe is started async during updates.
- waitForApplicationStop("maintenanceservice_installer.exe");
- // maintenanceservice_tmp.exe is started async from the service installer.
- waitForApplicationStop("maintenanceservice_tmp.exe");
- // In case the SCM thinks the service is stopped, but process still exists.
- waitForApplicationStop("maintenanceservice.exe");
-}
-
-/**
- * Waits for the maintenance service to stop.
- */
-function waitForServiceStop(aFailTest) {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- waitServiceApps();
- debugDump("waiting for the maintenance service to stop if necessary");
- // Use the helper bin to ensure the service is stopped. If not stopped, then
- // wait for the service to stop (at most 120 seconds).
- let args = ["wait-for-service-stop", "MozillaMaintenance", "120"];
- let exitValue = runTestHelperSync(args);
- Assert.notEqual(exitValue, 0xEE,
- "the maintenance service should exist");
- if (exitValue != 0) {
- if (aFailTest) {
- Assert.ok(false, "the maintenance service should stop, process exit " +
- "value: " + exitValue);
- }
- logTestInfo("maintenance service did not stop which may cause test " +
- "failures later, process exit value: " + exitValue);
- } else {
- debugDump("service stopped");
- }
- waitServiceApps();
-}
-
-/**
- * Waits for the specified application to stop.
- *
- * @param aApplication
- * The application binary name to wait until it has stopped.
- */
-function waitForApplicationStop(aApplication) {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- debugDump("waiting for " + aApplication + " to stop if necessary");
- // Use the helper bin to ensure the application is stopped. If not stopped,
- // then wait for it to stop (at most 120 seconds).
- let args = ["wait-for-application-exit", aApplication, "120"];
- let exitValue = runTestHelperSync(args);
- Assert.equal(exitValue, 0,
- "the process should have stopped, process name: " +
- aApplication);
-}
-
-
-/**
- * Gets the platform specific shell binary that is launched using nsIProcess and
- * in turn launches a binary used for the test (e.g. application, updater,
- * etc.). A shell is used so debug console output can be redirected to a file so
- * it doesn't end up in the test log.
- *
- * @return nsIFile for the shell binary to launch using nsIProcess.
- */
-function getLaunchBin() {
- let launchBin;
- if (IS_WIN) {
- launchBin = Services.dirsvc.get("WinD", Ci.nsIFile);
- launchBin.append("System32");
- launchBin.append("cmd.exe");
- } else {
- launchBin = Cc["@mozilla.org/file/local;1"].
- createInstance(Ci.nsILocalFile);
- launchBin.initWithPath("/bin/sh");
- }
- Assert.ok(launchBin.exists(),
- MSG_SHOULD_EXIST + getMsgPath(launchBin.path));
-
- return launchBin;
-}
-
-
-/**
- * Locks a Windows directory.
- *
- * @param aDirPath
- * The test file object that describes the file to make in use.
- */
-function lockDirectory(aDirPath) {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- debugDump("start - locking installation directory");
- const LPCWSTR = ctypes.char16_t.ptr;
- const DWORD = ctypes.uint32_t;
- const LPVOID = ctypes.voidptr_t;
- const GENERIC_READ = 0x80000000;
- const FILE_SHARE_READ = 1;
- const FILE_SHARE_WRITE = 2;
- const OPEN_EXISTING = 3;
- const FILE_FLAG_BACKUP_SEMANTICS = 0x02000000;
- const INVALID_HANDLE_VALUE = LPVOID(0xffffffff);
- let kernel32 = ctypes.open("kernel32");
- let CreateFile = kernel32.declare("CreateFileW", ctypes.default_abi,
- LPVOID, LPCWSTR, DWORD, DWORD,
- LPVOID, DWORD, DWORD, LPVOID);
- gHandle = CreateFile(aDirPath, GENERIC_READ,
- FILE_SHARE_READ | FILE_SHARE_WRITE, LPVOID(0),
- OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, LPVOID(0));
- Assert.notEqual(gHandle.toString(), INVALID_HANDLE_VALUE.toString(),
- "the handle should not equal INVALID_HANDLE_VALUE");
- kernel32.close();
- debugDump("finish - locking installation directory");
-}
-
-/**
- * Launches the test helper binary to make it in use for updater tests and then
- * calls waitForHelperSleep.
- *
- * @param aTestFile
- * The test file object that describes the file to make in use.
- */
-function runHelperFileInUse(aRelPath, aCopyTestHelper) {
- logTestInfo("aRelPath: " + aRelPath);
- // Launch an existing file so it is in use during the update.
- let helperBin = getTestDirFile(FILE_HELPER_BIN);
- let fileInUseBin = getApplyDirFile(aRelPath);
- if (aCopyTestHelper) {
- fileInUseBin.remove(false);
- helperBin.copyTo(fileInUseBin.parent, fileInUseBin.leafName);
- }
- fileInUseBin.permissions = PERMS_DIRECTORY;
- let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s",
- HELPER_SLEEP_TIMEOUT];
- let fileInUseProcess = Cc["@mozilla.org/process/util;1"].
- createInstance(Ci.nsIProcess);
- fileInUseProcess.init(fileInUseBin);
- fileInUseProcess.run(false, args, args.length);
-
- do_execute_soon(waitForHelperSleep);
-}
-
-/**
- * Launches the test helper binary and locks a file specified on the command
- * line for updater tests and then calls waitForHelperSleep.
- *
- * @param aTestFile
- * The test file object that describes the file to lock.
- */
-function runHelperLockFile(aTestFile) {
- // Exclusively lock an existing file so it is in use during the update.
- let helperBin = getTestDirFile(FILE_HELPER_BIN);
- let helperDestDir = getApplyDirFile(DIR_RESOURCES);
- helperBin.copyTo(helperDestDir, 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 = aTestFile.relPathDir.split("/");
- if (IS_MACOSX) {
- lockFileRelPath = lockFileRelPath.slice(2);
- }
- lockFileRelPath = lockFileRelPath.join("/") + "/" + aTestFile.fileName;
- let args = [getApplyDirPath() + DIR_RESOURCES, "input", "output", "-s",
- HELPER_SLEEP_TIMEOUT, lockFileRelPath];
- let helperProcess = Cc["@mozilla.org/process/util;1"].
- createInstance(Ci.nsIProcess);
- helperProcess.init(helperBin);
- helperProcess.run(false, args, args.length);
-
- do_execute_soon(waitForHelperSleep);
-}
-
-/**
- * Helper function that waits until the helper has completed its operations and
- * calls waitForHelperSleepFinished when it is finished.
- */
-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(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 " +
- "finish its operation. Path: " + output.path);
- }
- // Uses do_timeout instead of do_execute_soon to lessen log spew.
- do_timeout(FILE_IN_USE_TIMEOUT_MS, waitForHelperSleep);
- return;
- }
- try {
- output.remove(false);
- } catch (e) {
- if (gTimeoutRuns > MAX_TIMEOUT_RUNS) {
- do_throw("Exceeded MAX_TIMEOUT_RUNS while waiting for the helper " +
- "message file to no longer be in use. Path: " + output.path);
- }
- debugDump("failed to remove file. Path: " + output.path);
- // Uses do_timeout instead of do_execute_soon to lessen log spew.
- do_timeout(FILE_IN_USE_TIMEOUT_MS, waitForHelperSleep);
- return;
- }
- waitForHelperSleepFinished();
-}
-
-/**
- * Helper function that waits until the helper has finished its operations
- * before calling waitForHelperFinishFileUnlock to verify that the helper's
- * input and output directories are no longer in use.
- */
-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(DIR_RESOURCES + "output", true);
- if (readFile(output) != "finished\n") {
- // Uses do_timeout instead of do_execute_soon to lessen log spew.
- do_timeout(FILE_IN_USE_TIMEOUT_MS, waitForHelperFinished);
- return;
- }
- // Give the lock file process time to unlock the file before deleting the
- // input and output files.
- waitForHelperFinishFileUnlock();
-}
-
-/**
- * Helper function that waits until the helper's input and output files are no
- * longer in use before calling waitForHelperExitFinished.
- */
-function waitForHelperFinishFileUnlock() {
- try {
- let output = getApplyDirFile(DIR_RESOURCES + "output", true);
- if (output.exists()) {
- output.remove(false);
- }
- let input = getApplyDirFile(DIR_RESOURCES + "input", true);
- if (input.exists()) {
- input.remove(false);
- }
- } catch (e) {
- // Give the lock file process time to unlock the file before deleting the
- // input and output files.
- do_execute_soon(waitForHelperFinishFileUnlock);
- return;
- }
- do_execute_soon(waitForHelperExitFinished);
-}
-
-/**
- * Helper function to tell the helper to finish and exit its sleep state.
- */
-function waitForHelperExit() {
- let input = getApplyDirFile(DIR_RESOURCES + "input", true);
- writeFile(input, "finish\n");
- waitForHelperFinished();
-}
-
-/**
- * Helper function for updater binary tests that creates the files and
- * directories used by the test.
- *
- * @param aMarFile
- * The mar file for the update test.
- * @param aPostUpdateAsync
- * When null the updater.ini is not created otherwise this parameter
- * is passed to createUpdaterINI.
- * @param aPostUpdateExeRelPathPrefix
- * When aPostUpdateAsync null this value is ignored otherwise it is
- * passed to createUpdaterINI.
- */
-function setupUpdaterTest(aMarFile, aPostUpdateAsync,
- aPostUpdateExeRelPathPrefix = "") {
- let updatesPatchDir = getUpdatesPatchDir();
- if (!updatesPatchDir.exists()) {
- updatesPatchDir.create(Ci.nsIFile.DIRECTORY_TYPE, PERMS_DIRECTORY);
- }
- // Copy the mar that will be applied
- let mar = getTestDirFile(aMarFile);
- mar.copyToFollowingLinks(updatesPatchDir, FILE_UPDATE_MAR);
-
- let helperBin = getTestDirFile(FILE_HELPER_BIN);
- helperBin.permissions = PERMS_DIRECTORY;
- let afterApplyBinDir = getApplyDirFile(DIR_RESOURCES, true);
- helperBin.copyToFollowingLinks(afterApplyBinDir, gCallbackBinFile);
- helperBin.copyToFollowingLinks(afterApplyBinDir, gPostUpdateBinFile);
-
- gTestFiles.forEach(function SUT_TF_FE(aTestFile) {
- if (aTestFile.originalFile || aTestFile.originalContents) {
- let testDir = getApplyDirFile(aTestFile.relPathDir, true);
- if (!testDir.exists()) {
- testDir.create(Ci.nsIFile.DIRECTORY_TYPE, PERMS_DIRECTORY);
- }
-
- let testFile;
- if (aTestFile.originalFile) {
- testFile = getTestDirFile(aTestFile.originalFile);
- testFile.copyToFollowingLinks(testDir, aTestFile.fileName);
- testFile = getApplyDirFile(aTestFile.relPathDir + aTestFile.fileName);
- } else {
- testFile = getApplyDirFile(aTestFile.relPathDir + aTestFile.fileName,
- true);
- writeFile(testFile, aTestFile.originalContents);
- }
-
- // Skip these tests on Windows since chmod doesn't really set permissions
- // on Windows.
- if (!IS_WIN && aTestFile.originalPerms) {
- testFile.permissions = aTestFile.originalPerms;
- // Store the actual permissions on the file for reference later after
- // setting the permissions.
- if (!aTestFile.comparePerms) {
- aTestFile.comparePerms = testFile.permissions;
- }
- }
- }
- });
-
- // Add the test directory that will be updated for a successful update or left
- // in the initial state for a failed update.
- gTestDirs.forEach(function SUT_TD_FE(aTestDir) {
- let testDir = getApplyDirFile(aTestDir.relPathDir, true);
- if (!testDir.exists()) {
- testDir.create(Ci.nsIFile.DIRECTORY_TYPE, PERMS_DIRECTORY);
- }
-
- if (aTestDir.files) {
- aTestDir.files.forEach(function SUT_TD_F_FE(aTestFile) {
- let testFile = getApplyDirFile(aTestDir.relPathDir + aTestFile, true);
- if (!testFile.exists()) {
- testFile.create(Ci.nsIFile.NORMAL_FILE_TYPE, PERMS_FILE);
- }
- });
- }
-
- if (aTestDir.subDirs) {
- aTestDir.subDirs.forEach(function SUT_TD_SD_FE(aSubDir) {
- let testSubDir = getApplyDirFile(aTestDir.relPathDir + aSubDir, true);
- if (!testSubDir.exists()) {
- testSubDir.create(Ci.nsIFile.DIRECTORY_TYPE, PERMS_DIRECTORY);
- }
-
- if (aTestDir.subDirFiles) {
- aTestDir.subDirFiles.forEach(function SUT_TD_SDF_FE(aTestFile) {
- let testFile = getApplyDirFile(aTestDir.relPathDir + aSubDir + aTestFile, true);
- if (!testFile.exists()) {
- testFile.create(Ci.nsIFile.NORMAL_FILE_TYPE, PERMS_FILE);
- }
- });
- }
- });
- }
- });
-
- setupActiveUpdate();
-
- if (aPostUpdateAsync !== null) {
- createUpdaterINI(aPostUpdateAsync, aPostUpdateExeRelPathPrefix);
- }
-
- setupAppFilesAsync();
-}
-
-/**
- * Helper function for updater binary tests that creates the update-settings.ini
- * file.
- */
-function createUpdateSettingsINI() {
- let ini = getApplyDirFile(DIR_RESOURCES + FILE_UPDATE_SETTINGS_INI, true);
- writeFile(ini, UPDATE_SETTINGS_CONTENTS);
-}
-
-/**
- * Helper function for updater binary tests that creates the updater.ini
- * file.
- *
- * @param aIsExeAsync
- * True or undefined if the post update process should be async. If
- * undefined ExeAsync will not be added to the updater.ini file in
- * order to test the default launch behavior which is async.
- * @param aExeRelPathPrefix
- * A string to prefix the ExeRelPath values in the updater.ini.
- */
-function createUpdaterINI(aIsExeAsync, aExeRelPathPrefix) {
- let exeArg = "ExeArg=post-update-async\n";
- let exeAsync = "";
- if (aIsExeAsync !== undefined) {
- if (aIsExeAsync) {
- exeAsync = "ExeAsync=true\n";
- } else {
- exeArg = "ExeArg=post-update-sync\n";
- exeAsync = "ExeAsync=false\n";
- }
- }
-
- if (aExeRelPathPrefix && IS_WIN) {
- aExeRelPathPrefix = aExeRelPathPrefix.replace("/", "\\");
- }
-
- let exeRelPathMac = "ExeRelPath=" + aExeRelPathPrefix + DIR_RESOURCES +
- gPostUpdateBinFile + "\n";
- let exeRelPathWin = "ExeRelPath=" + aExeRelPathPrefix + gPostUpdateBinFile + "\n";
- let updaterIniContents = "[Strings]\n" +
- "Title=Update Test\n" +
- "Info=Running update test " + gTestID + "\n\n" +
- "[PostUpdateMac]\n" +
- exeRelPathMac +
- exeArg +
- exeAsync +
- "\n" +
- "[PostUpdateWin]\n" +
- exeRelPathWin +
- exeArg +
- exeAsync;
- let updaterIni = getApplyDirFile(DIR_RESOURCES + FILE_UPDATER_INI, true);
- writeFile(updaterIni, updaterIniContents);
-}
-
-/**
- * Gets the message log path used for assert checks to lessen the length printed
- * to the log file.
- *
- * @param aPath
- * The path to shorten for the log file.
- * @return the message including the shortened path for the log file.
- */
-function getMsgPath(aPath) {
- return ", path: " + replaceLogPaths(aPath);
-}
-
-/**
- * Helper function that replaces the common part of paths in the update log's
- * contents with <test_dir_path> for paths to the the test directory and
- * <update_dir_path> for paths to the update directory. This is needed since
- * Assert.equal will truncate what it prints to the xpcshell log file.
- *
- * @param aLogContents
- * The update log file's contents.
- * @return the log contents with the paths replaced.
- */
-function replaceLogPaths(aLogContents) {
- let logContents = aLogContents;
- // Remove the majority of the path up to the test directory. This is needed
- // since Assert.equal won't print long strings to the test logs.
- let testDirPath = do_get_file(gTestID, false).path;
- if (IS_WIN) {
- // Replace \\ with \\\\ so the regexp works.
- testDirPath = testDirPath.replace(/\\/g, "\\\\");
- }
- logContents = logContents.replace(new RegExp(testDirPath, "g"),
- "<test_dir_path>/" + gTestID);
- let updatesDirPath = getMockUpdRootD().path;
- if (IS_WIN) {
- // Replace \\ with \\\\ so the regexp works.
- updatesDirPath = updatesDirPath.replace(/\\/g, "\\\\");
- }
- logContents = logContents.replace(new RegExp(updatesDirPath, "g"),
- "<update_dir_path>/" + gTestID);
- if (IS_WIN) {
- // Replace \ with /
- logContents = logContents.replace(/\\/g, "/");
- }
- return logContents;
-}
-
-/**
- * Helper function for updater binary tests for verifying the contents of the
- * update log after a successful update.
- *
- * @param aCompareLogFile
- * The log file to compare the update log with.
- * @param aStaged
- * If the update log file is for a staged update.
- * @param aReplace
- * If the update log file is for a replace update.
- * @param aExcludeDistDir
- * Removes lines containing the distribution directory from the log
- * file to compare the update log with.
- */
-function checkUpdateLogContents(aCompareLogFile, aStaged = false,
- aReplace = false, aExcludeDistDir = false) {
- if (IS_UNIX && !IS_MACOSX) {
- // The order that files are returned when enumerating the file system on
- // Linux is not deterministic so skip checking the logs.
- return;
- }
-
- let updateLog = getUpdateLog(FILE_LAST_UPDATE_LOG);
- let updateLogContents = readFileBytes(updateLog);
-
- // The channel-prefs.js is defined in gTestFilesCommon which will always be
- // located to the end of gTestFiles when it is present.
- if (gTestFiles.length > 1 &&
- 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(/.*update-settings.ini.*/g, "");
- }
-
- // Skip the source/destination lines since they contain absolute paths.
- // These could be changed to relative paths using <test_dir_path> and
- // <update_dir_path>
- 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 (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 (IS_WIN) {
- // The FindFile results when enumerating the filesystem on Windows is not
- // determistic so the results matching the following need to be fixed.
- let re = new RegExp("([^\n]* 7\/7text1[^\n]*)\n" +
- "([^\n]* 7\/7text0[^\n]*)\n", "g");
- updateLogContents = updateLogContents.replace(re, "$2\n$1\n");
- }
-
- if (aReplace) {
- // Remove the lines which contain absolute paths
- updateLogContents = updateLogContents.replace(/^Begin moving.*$/mg, "");
- updateLogContents = updateLogContents.replace(/^ensure_remove: failed to remove file: .*$/mg, "");
- updateLogContents = updateLogContents.replace(/^ensure_remove_recursive: unable to remove directory: .*$/mg, "");
- updateLogContents = updateLogContents.replace(/^Removing tmpDir failed, err: -1$/mg, "");
- updateLogContents = updateLogContents.replace(/^remove_recursive_on_reboot: .*$/mg, "");
- }
-
- // Remove carriage returns.
- updateLogContents = updateLogContents.replace(/\r/g, "");
- // Replace error codes since they are different on each platform.
- updateLogContents = updateLogContents.replace(/, err:.*\n/g, "\n");
- // Replace to make the log parsing happy.
- updateLogContents = updateLogContents.replace(/non-fatal error /g, "");
- // Remove consecutive newlines
- updateLogContents = updateLogContents.replace(/\n+/g, "\n");
- // Remove leading and trailing newlines
- updateLogContents = updateLogContents.replace(/^\n|\n$/g, "");
- // Replace the log paths with <test_dir_path> and <update_dir_path>
- updateLogContents = replaceLogPaths(updateLogContents);
-
- let compareLogContents = "";
- if (aCompareLogFile) {
- compareLogContents = readFileBytes(getTestDirFile(aCompareLogFile));
- }
-
- if (aStaged) {
- compareLogContents = PERFORMING_STAGED_UPDATE + "\n" + compareLogContents;
- }
-
- // 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(/.*defaults\/.*/g, "");
- }
-
- if (gTestFiles.length > 2 &&
- gTestFiles[gTestFiles.length - 2].fileName == FILE_UPDATE_SETTINGS_INI &&
- !gTestFiles[gTestFiles.length - 2].originalContents) {
- compareLogContents = compareLogContents.replace(/.*update-settings.ini.*/g, "");
- }
-
- if (aExcludeDistDir) {
- compareLogContents = compareLogContents.replace(/.*distribution\/.*/g, "");
- }
-
- // Remove leading and trailing newlines
- compareLogContents = compareLogContents.replace(/\n+/g, "\n");
- // Remove leading and trailing newlines
- compareLogContents = compareLogContents.replace(/^\n|\n$/g, "");
-
- // Don't write the contents of the file to the log to reduce log spam
- // unless there is a failure.
- if (compareLogContents == updateLogContents) {
- Assert.ok(true, "the update log contents" + MSG_SHOULD_EQUAL);
- } else {
- logTestInfo("the update log contents are not correct");
- logUpdateLog(FILE_LAST_UPDATE_LOG);
- let aryLog = updateLogContents.split("\n");
- let aryCompare = compareLogContents.split("\n");
- // Pushing an empty string to both arrays makes it so either array's length
- // can be used in the for loop below without going out of bounds.
- aryLog.push("");
- aryCompare.push("");
- // xpcshell tests won't display the entire contents so log the first
- // incorrect line.
- for (let i = 0; i < aryLog.length; ++i) {
- if (aryLog[i] != aryCompare[i]) {
- logTestInfo("the first incorrect line in the update log is: " +
- aryLog[i]);
- Assert.equal(aryLog[i], aryCompare[i],
- "the update log contents" + MSG_SHOULD_EQUAL);
- }
- }
- // This should never happen!
- do_throw("Unable to find incorrect update log contents!");
- }
-}
-
-/**
- * Helper function to check if the update log contains a string.
- *
- * @param aCheckString
- * The string to check if the update log contains.
- */
-function checkUpdateLogContains(aCheckString) {
- let updateLog = getUpdateLog(FILE_LAST_UPDATE_LOG);
- let updateLogContents = readFileBytes(updateLog).replace(/\r\n/g, "\n");
- updateLogContents = replaceLogPaths(updateLogContents);
- Assert.notEqual(updateLogContents.indexOf(aCheckString), -1,
- "the update log contents should contain value: " +
- 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(aGetFileFunc, aStageDirExists = false,
- aToBeDeletedDirExists = false) {
- debugDump("testing contents of files after a successful update");
- gTestFiles.forEach(function CFAUS_TF_FE(aTestFile) {
- let testFile = aGetFileFunc(aTestFile.relPathDir + aTestFile.fileName, true);
- debugDump("testing file: " + testFile.path);
- if (aTestFile.compareFile || aTestFile.compareContents) {
- Assert.ok(testFile.exists(),
- MSG_SHOULD_EXIST + getMsgPath(testFile.path));
-
- // Skip these tests on Windows since chmod doesn't really set permissions
- // on Windows.
- if (!IS_WIN && aTestFile.comparePerms) {
- // Check if the permssions as set in the complete mar file are correct.
- Assert.equal(testFile.permissions & 0xfff,
- aTestFile.comparePerms & 0xfff,
- "the file permissions" + MSG_SHOULD_EQUAL);
- }
-
- let fileContents1 = readFileBytes(testFile);
- let fileContents2 = aTestFile.compareFile ?
- readFileBytes(getTestDirFile(aTestFile.compareFile)) :
- aTestFile.compareContents;
- // Don't write the contents of the file to the log to reduce log spam
- // unless there is a failure.
- if (fileContents1 == fileContents2) {
- Assert.ok(true, "the file contents" + MSG_SHOULD_EQUAL);
- } else {
- Assert.equal(fileContents1, fileContents2,
- "the file contents" + MSG_SHOULD_EQUAL);
- }
- } else {
- Assert.ok(!testFile.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(testFile.path));
- }
- });
-
- debugDump("testing operations specified in removed-files were performed " +
- "after a successful update");
- gTestDirs.forEach(function CFAUS_TD_FE(aTestDir) {
- let testDir = aGetFileFunc(aTestDir.relPathDir, true);
- debugDump("testing directory: " + testDir.path);
- if (aTestDir.dirRemoved) {
- Assert.ok(!testDir.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(testDir.path));
- } else {
- Assert.ok(testDir.exists(),
- MSG_SHOULD_EXIST + getMsgPath(testDir.path));
-
- if (aTestDir.files) {
- aTestDir.files.forEach(function CFAUS_TD_F_FE(aTestFile) {
- let testFile = aGetFileFunc(aTestDir.relPathDir + aTestFile, true);
- if (aTestDir.filesRemoved) {
- Assert.ok(!testFile.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(testFile.path));
- } else {
- Assert.ok(testFile.exists(),
- MSG_SHOULD_EXIST + getMsgPath(testFile.path));
- }
- });
- }
-
- if (aTestDir.subDirs) {
- aTestDir.subDirs.forEach(function CFAUS_TD_SD_FE(aSubDir) {
- let testSubDir = aGetFileFunc(aTestDir.relPathDir + aSubDir, true);
- Assert.ok(testSubDir.exists(),
- MSG_SHOULD_EXIST + getMsgPath(testSubDir.path));
- if (aTestDir.subDirFiles) {
- aTestDir.subDirFiles.forEach(function CFAUS_TD_SDF_FE(aTestFile) {
- let testFile = aGetFileFunc(aTestDir.relPathDir +
- aSubDir + aTestFile, true);
- Assert.ok(testFile.exists(),
- MSG_SHOULD_EXIST + getMsgPath(testFile.path));
- });
- }
- });
- }
- }
- });
-
- checkFilesAfterUpdateCommon(aGetFileFunc, aStageDirExists,
- aToBeDeletedDirExists);
-}
-
-/**
- * Helper function for updater binary tests for verifying the state of files and
- * directories after a 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 checkFilesAfterUpdateFailure(aGetFileFunc, aStageDirExists = false,
- aToBeDeletedDirExists = false) {
- debugDump("testing contents of files after a failed update");
- gTestFiles.forEach(function CFAUF_TF_FE(aTestFile) {
- let testFile = aGetFileFunc(aTestFile.relPathDir + aTestFile.fileName, true);
- debugDump("testing file: " + testFile.path);
- if (aTestFile.compareFile || aTestFile.compareContents) {
- Assert.ok(testFile.exists(),
- MSG_SHOULD_EXIST + getMsgPath(testFile.path));
-
- // Skip these tests on Windows since chmod doesn't really set permissions
- // on Windows.
- if (!IS_WIN && aTestFile.comparePerms) {
- // Check the original permssions are retained on the file.
- Assert.equal(testFile.permissions & 0xfff,
- aTestFile.comparePerms & 0xfff,
- "the file permissions" + MSG_SHOULD_EQUAL);
- }
-
- let fileContents1 = readFileBytes(testFile);
- let fileContents2 = aTestFile.compareFile ?
- readFileBytes(getTestDirFile(aTestFile.compareFile)) :
- aTestFile.compareContents;
- // Don't write the contents of the file to the log to reduce log spam
- // unless there is a failure.
- if (fileContents1 == fileContents2) {
- Assert.ok(true, "the file contents" + MSG_SHOULD_EQUAL);
- } else {
- Assert.equal(fileContents1, fileContents2,
- "the file contents" + MSG_SHOULD_EQUAL);
- }
- } else {
- Assert.ok(!testFile.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(testFile.path));
- }
- });
-
- debugDump("testing operations specified in removed-files were not " +
- "performed after a failed update");
- gTestDirs.forEach(function CFAUF_TD_FE(aTestDir) {
- let testDir = aGetFileFunc(aTestDir.relPathDir, true);
- Assert.ok(testDir.exists(),
- MSG_SHOULD_EXIST + getMsgPath(testDir.path));
-
- if (aTestDir.files) {
- aTestDir.files.forEach(function CFAUS_TD_F_FE(aTestFile) {
- let testFile = aGetFileFunc(aTestDir.relPathDir + aTestFile, true);
- Assert.ok(testFile.exists(),
- MSG_SHOULD_EXIST + getMsgPath(testFile.path));
- });
- }
-
- if (aTestDir.subDirs) {
- aTestDir.subDirs.forEach(function CFAUS_TD_SD_FE(aSubDir) {
- let testSubDir = aGetFileFunc(aTestDir.relPathDir + aSubDir, true);
- Assert.ok(testSubDir.exists(),
- MSG_SHOULD_EXIST + getMsgPath(testSubDir.path));
- if (aTestDir.subDirFiles) {
- aTestDir.subDirFiles.forEach(function CFAUS_TD_SDF_FE(aTestFile) {
- let testFile = aGetFileFunc(aTestDir.relPathDir +
- aSubDir + aTestFile, true);
- Assert.ok(testFile.exists(),
- MSG_SHOULD_EXIST + getMsgPath(testFile.path));
- });
- }
- });
- }
- });
-
- 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(aGetFileFunc, aStageDirExists,
- aToBeDeletedDirExists) {
- debugDump("testing extra directories");
- let stageDir = getStageDirFile(null, true);
- if (aStageDirExists) {
- Assert.ok(stageDir.exists(),
- MSG_SHOULD_EXIST + getMsgPath(stageDir.path));
- } else {
- Assert.ok(!stageDir.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(stageDir.path));
- }
-
- let toBeDeletedDirExists = IS_WIN ? aToBeDeletedDirExists : false;
- let toBeDeletedDir = getApplyDirFile(DIR_TOBEDELETED, true);
- if (toBeDeletedDirExists) {
- Assert.ok(toBeDeletedDir.exists(),
- MSG_SHOULD_EXIST + getMsgPath(toBeDeletedDir.path));
- } else {
- Assert.ok(!toBeDeletedDir.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(toBeDeletedDir.path));
- }
-
- let updatingDir = getApplyDirFile("updating", true);
- Assert.ok(!updatingDir.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(updatingDir.path));
-
- if (stageDir.exists()) {
- updatingDir = stageDir.clone();
- updatingDir.append("updating");
- Assert.ok(!updatingDir.exists(),
- MSG_SHOULD_NOT_EXIST + getMsgPath(updatingDir.path));
- }
-
- debugDump("testing backup files should not be left behind in the " +
- "application directory");
- let applyToDir = getApplyDirFile(null, true);
- checkFilesInDirRecursive(applyToDir, checkForBackupFiles);
-
- if (stageDir.exists()) {
- debugDump("testing backup files should not be left behind in the " +
- "staging directory");
- applyToDir = getApplyDirFile(null, true);
- checkFilesInDirRecursive(stageDir, checkForBackupFiles);
- }
-}
-
-/**
- * Helper function for updater binary tests for verifying the contents of the
- * updater callback application log which should contain the arguments passed to
- * the callback application.
- */
-function checkCallbackLog() {
- let appLaunchLog = getApplyDirFile(DIR_RESOURCES + gCallbackArgs[1], true);
- if (!appLaunchLog.exists()) {
- // Uses do_timeout instead of do_execute_soon to lessen log spew.
- do_timeout(FILE_IN_USE_TIMEOUT_MS, checkCallbackLog);
- return;
- }
-
- let expectedLogContents = gCallbackArgs.join("\n") + "\n";
- let logContents = readFile(appLaunchLog);
- // It is possible for the log file contents check to occur before the log file
- // contents are completely written so wait until the contents are the expected
- // value. If the contents are never the expected value then the test will
- // fail by timing out after gTimeoutRuns is greater than MAX_TIMEOUT_RUNS or
- // the test harness times out the test.
- if (logContents != expectedLogContents) {
- gTimeoutRuns++;
- if (gTimeoutRuns > MAX_TIMEOUT_RUNS) {
- logTestInfo("callback log contents are not correct");
- // This file doesn't contain full paths so there is no need to call
- // replaceLogPaths.
- let aryLog = logContents.split("\n");
- let aryCompare = expectedLogContents.split("\n");
- // Pushing an empty string to both arrays makes it so either array's length
- // can be used in the for loop below without going out of bounds.
- aryLog.push("");
- aryCompare.push("");
- // xpcshell tests won't display the entire contents so log the incorrect
- // line.
- for (let i = 0; i < aryLog.length; ++i) {
- if (aryLog[i] != aryCompare[i]) {
- logTestInfo("the first incorrect line in the callback log is: " +
- aryLog[i]);
- Assert.equal(aryLog[i], aryCompare[i],
- "the callback log contents" + MSG_SHOULD_EQUAL);
- }
- }
- // This should never happen!
- do_throw("Unable to find incorrect callback log contents!");
- }
- // Uses do_timeout instead of do_execute_soon to lessen log spew.
- do_timeout(FILE_IN_USE_TIMEOUT_MS, checkCallbackLog);
- return;
- }
- Assert.ok(true, "the callback log contents" + MSG_SHOULD_EQUAL);
-
- waitForFilesInUse();
-}
-
-/**
- * Helper function for updater binary tests for getting the log and running
- * files created by the test helper binary file when called with the post-update
- * command line argument.
- *
- * @param aSuffix
- * The string to append to the post update test helper binary path.
- */
-function getPostUpdateFile(aSuffix) {
- return getApplyDirFile(DIR_RESOURCES + gPostUpdateBinFile + aSuffix, true);
-}
-
-/**
- * Checks the contents of the updater post update binary log. When completed
- * checkPostUpdateAppLogFinished will be called.
- */
-function checkPostUpdateAppLog() {
- // Only Mac OS X and Windows support post update.
- if (IS_MACOSX || IS_WIN) {
- gTimeoutRuns++;
- let postUpdateLog = getPostUpdateFile(".log");
- if (!postUpdateLog.exists()) {
- debugDump("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: " +
- postUpdateLog.path);
- }
- do_execute_soon(checkPostUpdateAppLog);
- return;
- }
-
- let logContents = readFile(postUpdateLog);
- // It is possible for the log file contents check to occur before the log file
- // contents are completely written so wait until the contents are the expected
- // value. If the contents are never the expected value then the test will
- // fail by timing out after gTimeoutRuns is greater than MAX_TIMEOUT_RUNS or
- // the test harness times out the test.
- if (logContents != "post-update\n") {
- if (gTimeoutRuns > MAX_TIMEOUT_RUNS) {
- do_throw("Exceeded MAX_TIMEOUT_RUNS while waiting for the post update " +
- "process to create the expected contents in the post update log. Path: " +
- postUpdateLog.path);
- }
- do_execute_soon(checkPostUpdateAppLog);
- return;
- }
- Assert.ok(true, "the post update log contents" + MSG_SHOULD_EQUAL);
- }
-
- do_execute_soon(checkPostUpdateAppLogFinished);
-}
-
-/**
- * Helper function to check if a file is in use on Windows by making a copy of
- * a file and attempting to delete the original file. If the deletion is
- * successful the copy of the original file is renamed to the original file's
- * name and if the deletion is not successful the copy of the original file is
- * deleted.
- *
- * @param aFile
- * An nsIFile for the file to be checked if it is in use.
- * @return true if the file can't be deleted and false otherwise.
- */
-function isFileInUse(aFile) {
- if (!IS_WIN) {
- do_throw("Windows only function called by a different platform!");
- }
-
- if (!aFile.exists()) {
- debugDump("file does not exist, path: " + aFile.path);
- return false;
- }
-
- let fileBak = aFile.parent;
- fileBak.append(aFile.leafName + ".bak");
- try {
- if (fileBak.exists()) {
- fileBak.remove(false);
- }
- aFile.copyTo(aFile.parent, fileBak.leafName);
- aFile.remove(false);
- fileBak.moveTo(aFile.parent, aFile.leafName);
- debugDump("file is not in use, path: " + aFile.path);
- return false;
- } catch (e) {
- debugDump("file in use, path: " + aFile.path + ", exception: " + e);
- try {
- if (fileBak.exists()) {
- fileBak.remove(false);
- }
- } catch (ex) {
- logTestInfo("unable to remove backup file, path: " +
- fileBak.path + ", exception: " + ex);
- }
- }
- return true;
-}
-
-/**
- * Waits until files that are in use that break tests are no longer in use and
- * then calls doTestFinish to end the test.
- */
-function waitForFilesInUse() {
- if (IS_WIN) {
- let fileNames = [FILE_APP_BIN, FILE_UPDATER_BIN,
- FILE_MAINTENANCE_SERVICE_INSTALLER_BIN];
- for (let i = 0; i < fileNames.length; ++i) {
- let file = getApplyDirFile(fileNames[i], true);
- if (isFileInUse(file)) {
- do_timeout(FILE_IN_USE_TIMEOUT_MS, waitForFilesInUse);
- return;
- }
- }
- }
-
- debugDump("calling doTestFinish");
- doTestFinish();
-}
-
-/**
- * Helper function for updater binary tests for verifying there are no update
- * backup files left behind after an update.
- *
- * @param aFile
- * An nsIFile to check if it has moz-backup for its extension.
- */
-function checkForBackupFiles(aFile) {
- Assert.notEqual(getFileExtension(aFile), "moz-backup",
- "the file's extension should not equal moz-backup" +
- getMsgPath(aFile.path));
-}
-
-/**
- * Helper function for updater binary tests for recursively enumerating a
- * directory and calling a callback function with the file as a parameter for
- * each file found.
- *
- * @param aDir
- * A nsIFile for the directory to be deleted
- * @param aCallback
- * A callback function that will be called with the file as a
- * parameter for each file found.
- */
-function checkFilesInDirRecursive(aDir, aCallback) {
- if (!aDir.exists()) {
- do_throw("Directory must exist!");
- }
-
- let dirEntries = aDir.directoryEntries;
- while (dirEntries.hasMoreElements()) {
- let entry = dirEntries.getNext().QueryInterface(Ci.nsIFile);
-
- if (entry.exists()) {
- if (entry.isDirectory()) {
- checkFilesInDirRecursive(entry, aCallback);
- } else {
- aCallback(entry);
- }
- }
- }
-}
-
-
-/**
- * Helper function to override the update prompt component to verify whether it
- * is called or not.
- *
- * @param aCallback
- * The callback to call if the update prompt component is called.
- */
-function overrideUpdatePrompt(aCallback) {
- Cu.import("resource://testing-common/MockRegistrar.jsm");
- MockRegistrar.register("@mozilla.org/updates/update-prompt;1", UpdatePrompt, [aCallback]);
-}
-
-function UpdatePrompt(aCallback) {
- this._callback = aCallback;
-
- let fns = ["checkForUpdates", "showUpdateAvailable", "showUpdateDownloaded",
- "showUpdateError", "showUpdateHistory", "showUpdateInstalled"];
-
- fns.forEach(function UP_fns(aPromptFn) {
- UpdatePrompt.prototype[aPromptFn] = function() {
- if (!this._callback) {
- return;
- }
-
- let callback = this._callback[aPromptFn];
- if (!callback) {
- return;
- }
-
- callback.apply(this._callback,
- Array.prototype.slice.call(arguments));
- };
- });
-}
-
-UpdatePrompt.prototype = {
- flags: Ci.nsIClassInfo.SINGLETON,
- getScriptableHelper: () => null,
- getInterfaces: function(aCount) {
- let interfaces = [Ci.nsISupports, Ci.nsIUpdatePrompt];
- aCount.value = interfaces.length;
- return interfaces;
- },
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIClassInfo, Ci.nsIUpdatePrompt])
-};
-
-/* Update check listener */
-const updateCheckListener = {
- onProgress: function UCL_onProgress(aRequest, aPosition, aTotalSize) {
- },
-
- onCheckComplete: function UCL_onCheckComplete(aRequest, aUpdates, aUpdateCount) {
- gRequestURL = aRequest.channel.originalURI.spec;
- gUpdateCount = aUpdateCount;
- gUpdates = aUpdates;
- debugDump("url = " + gRequestURL + ", " +
- "request.status = " + aRequest.status + ", " +
- "updateCount = " + aUpdateCount);
- // Use a timeout to allow the XHR to complete
- do_execute_soon(gCheckFunc);
- },
-
- onError: function UCL_onError(aRequest, aUpdate) {
- gRequestURL = aRequest.channel.originalURI.spec;
- gStatusCode = aRequest.status;
- if (gStatusCode == 0) {
- gStatusCode = aRequest.channel.QueryInterface(Ci.nsIRequest).status;
- }
- gStatusText = aUpdate.statusText ? aUpdate.statusText : null;
- debugDump("url = " + gRequestURL + ", " +
- "request.status = " + gStatusCode + ", " +
- "update.statusText = " + gStatusText);
- // Use a timeout to allow the XHR to complete
- do_execute_soon(gCheckFunc.bind(null, aRequest, aUpdate));
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIUpdateCheckListener])
-};
-
-/* Update download listener - nsIRequestObserver */
-const downloadListener = {
- onStartRequest: function DL_onStartRequest(aRequest, aContext) {
- },
-
- onProgress: function DL_onProgress(aRequest, aContext, aProgress, aMaxProgress) {
- },
-
- onStatus: function DL_onStatus(aRequest, aContext, aStatus, aStatusText) {
- },
-
- onStopRequest: function DL_onStopRequest(aRequest, aContext, aStatus) {
- gStatusResult = aStatus;
- // Use a timeout to allow the request to complete
- do_execute_soon(gCheckFunc);
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIRequestObserver,
- Ci.nsIProgressEventSink])
-};
-
-/**
- * Helper for starting the http server used by the tests
- */
-function start_httpserver() {
- let dir = getTestDirFile();
- debugDump("http server directory path: " + dir.path);
-
- if (!dir.isDirectory()) {
- do_throw("A file instead of a directory was specified for HttpServer " +
- "registerDirectory! Path: " + dir.path);
- }
-
- let { HttpServer } = Cu.import("resource://testing-common/httpd.js", {});
- gTestserver = new HttpServer();
- gTestserver.registerDirectory("/", dir);
- gTestserver.registerPathHandler("/" + gHTTPHandlerPath, pathHandler);
- gTestserver.start(-1);
- let testserverPort = gTestserver.identity.primaryPort;
- gURLData = URL_HOST + ":" + testserverPort + "/";
- debugDump("http server port = " + testserverPort);
-}
-
-/**
- * Custom path handler for the http server
- *
- * @param aMetadata
- * The http metadata for the request.
- * @param aResponse
- * The http response for the request.
- */
-function pathHandler(aMetadata, aResponse) {
- aResponse.setHeader("Content-Type", "text/xml", false);
- aResponse.setStatusLine(aMetadata.httpVersion, gResponseStatusCode, "OK");
- aResponse.bodyOutputStream.write(gResponseBody, gResponseBody.length);
-}
-
-/**
- * Helper for stopping the http server used by the tests
- *
- * @param aCallback
- * The callback to call after stopping the http server.
- */
-function stop_httpserver(aCallback) {
- Assert.ok(!!aCallback, "the aCallback parameter should be defined");
- gTestserver.stop(aCallback);
-}
-
-/**
- * Creates an nsIXULAppInfo
- *
- * @param aID
- * The ID of the test application
- * @param aName
- * A name for the test application
- * @param aVersion
- * The version of the application
- * @param aPlatformVersion
- * The gecko version of the application
- */
-function createAppInfo(aID, aName, aVersion, aPlatformVersion) {
- const XULAPPINFO_CONTRACTID = "@mozilla.org/xre/app-info;1";
- const XULAPPINFO_CID = Components.ID("{c763b610-9d49-455a-bbd2-ede71682a1ac}");
- let ifaces = [Ci.nsIXULAppInfo, Ci.nsIXULRuntime];
- if (IS_WIN) {
- ifaces.push(Ci.nsIWinAppHelper);
- }
- const XULAppInfo = {
- vendor: APP_INFO_VENDOR,
- name: aName,
- ID: aID,
- version: aVersion,
- appBuildID: "2007010101",
- platformVersion: aPlatformVersion,
- platformBuildID: "2007010101",
- inSafeMode: false,
- logConsoleErrors: true,
- OS: "XPCShell",
- XPCOMABI: "noarch-spidermonkey",
-
- QueryInterface: XPCOMUtils.generateQI(ifaces)
- };
-
- const XULAppInfoFactory = {
- createInstance: function(aOuter, aIID) {
- if (aOuter == null) {
- return XULAppInfo.QueryInterface(aIID);
- }
- throw Cr.NS_ERROR_NO_AGGREGATION;
- }
- };
-
- let registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
- registrar.registerFactory(XULAPPINFO_CID, "XULAppInfo",
- XULAPPINFO_CONTRACTID, XULAppInfoFactory);
-}
-
-/**
- * Returns the platform specific arguments used by nsIProcess when launching
- * the application.
- *
- * @param aExtraArgs (optional)
- * An array of extra arguments to append to the default arguments.
- * @return an array of arguments to be passed to nsIProcess.
- *
- * Note: a shell is necessary to pipe the application's console output which
- * would otherwise pollute the xpcshell log.
- *
- * Command line arguments used when launching the application:
- * -no-remote prevents shell integration from being affected by an existing
- * application process.
- * -test-process-updates makes the application exit after being relaunched by
- * the updater.
- * the platform specific string defined by PIPE_TO_NULL to output both stdout
- * and stderr to null. This is needed to prevent output from the application
- * from ending up in the xpchsell log.
- */
-function getProcessArgs(aExtraArgs) {
- if (!aExtraArgs) {
- aExtraArgs = [];
- }
-
- let appBinPath = getApplyDirFile(DIR_MACOS + FILE_APP_BIN, false).path;
- if (/ /.test(appBinPath)) {
- appBinPath = '"' + appBinPath + '"';
- }
-
- let args;
- if (IS_UNIX) {
- let launchScript = getLaunchScript();
- // Precreate the script with executable permissions
- launchScript.create(Ci.nsILocalFile.NORMAL_FILE_TYPE, PERMS_DIRECTORY);
-
- let scriptContents = "#! /bin/sh\n";
- scriptContents += appBinPath + " -no-remote -test-process-updates " +
- aExtraArgs.join(" ") + " " + PIPE_TO_NULL;
- writeFile(launchScript, scriptContents);
- debugDump("created " + launchScript.path + " containing:\n" +
- scriptContents);
- args = [launchScript.path];
- } else {
- args = ["/D", "/Q", "/C", appBinPath, "-no-remote", "-test-process-updates"].
- concat(aExtraArgs).concat([PIPE_TO_NULL]);
- }
- return args;
-}
-
-/**
- * Gets a file path for the application to dump its arguments into. This is used
- * to verify that a callback application is launched.
- *
- * @return the file for the application to dump its arguments into.
- */
-function getAppArgsLogPath() {
- let appArgsLog = do_get_file("/" + gTestID + "_app_args_log", true);
- if (appArgsLog.exists()) {
- appArgsLog.remove(false);
- }
- let appArgsLogPath = appArgsLog.path;
- if (/ /.test(appArgsLogPath)) {
- appArgsLogPath = '"' + appArgsLogPath + '"';
- }
- return appArgsLogPath;
-}
-
-/**
- * Gets the nsIFile reference for the shell script to launch the application. If
- * the file exists it will be removed by this function.
- *
- * @return the nsIFile for the shell script to launch the application.
- */
-function getLaunchScript() {
- let launchScript = do_get_file("/" + gTestID + "_launch.sh", true);
- if (launchScript.exists()) {
- launchScript.remove(false);
- }
- return launchScript;
-}
-
-/**
- * Makes GreD, XREExeF, and UpdRootD point to unique file system locations so
- * xpcshell tests can run in parallel and to keep the environment clean.
- */
-function adjustGeneralPaths() {
- let dirProvider = {
- getFile: function AGP_DP_getFile(aProp, aPersistent) {
- aPersistent.value = true;
- switch (aProp) {
- case NS_GRE_DIR:
- if (gUseTestAppDir) {
- return getApplyDirFile(DIR_RESOURCES, true);
- }
- break;
- case NS_GRE_BIN_DIR:
- if (gUseTestAppDir) {
- return getApplyDirFile(DIR_MACOS, true);
- }
- break;
- case XRE_EXECUTABLE_FILE:
- if (gUseTestAppDir) {
- return getApplyDirFile(DIR_MACOS + FILE_APP_BIN, true);
- }
- break;
- case XRE_UPDATE_ROOT_DIR:
- return getMockUpdRootD();
- }
- return null;
- },
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIDirectoryServiceProvider])
- };
- let ds = Services.dirsvc.QueryInterface(Ci.nsIDirectoryService);
- ds.QueryInterface(Ci.nsIProperties).undefine(NS_GRE_DIR);
- ds.QueryInterface(Ci.nsIProperties).undefine(NS_GRE_BIN_DIR);
- ds.QueryInterface(Ci.nsIProperties).undefine(XRE_EXECUTABLE_FILE);
- ds.registerProvider(dirProvider);
- do_register_cleanup(function AGP_cleanup() {
- debugDump("start - unregistering directory provider");
-
- if (gAppTimer) {
- debugDump("start - cancel app timer");
- gAppTimer.cancel();
- gAppTimer = null;
- debugDump("finish - cancel app timer");
- }
-
- if (gProcess && gProcess.isRunning) {
- debugDump("start - kill process");
- try {
- gProcess.kill();
- } catch (e) {
- debugDump("kill process failed. Exception: " + e);
- }
- gProcess = null;
- debugDump("finish - kill process");
- }
-
- if (gHandle) {
- try {
- debugDump("start - closing handle");
- let kernel32 = ctypes.open("kernel32");
- let CloseHandle = kernel32.declare("CloseHandle", ctypes.default_abi,
- ctypes.bool, /* return*/
- ctypes.voidptr_t /* handle*/);
- if (!CloseHandle(gHandle)) {
- debugDump("call to CloseHandle failed");
- }
- kernel32.close();
- gHandle = null;
- debugDump("finish - closing handle");
- } catch (e) {
- debugDump("call to CloseHandle failed. Exception: " + e);
- }
- }
-
- // Call end_test first before the directory provider is unregistered
- if (typeof end_test == typeof Function) {
- debugDump("calling end_test");
- end_test();
- }
-
- ds.unregisterProvider(dirProvider);
- cleanupTestCommon();
-
- debugDump("finish - unregistering directory provider");
- });
-}
-
-/**
- * The timer callback to kill the process if it takes too long.
- */
-const gAppTimerCallback = {
- notify: function TC_notify(aTimer) {
- gAppTimer = null;
- if (gProcess.isRunning) {
- logTestInfo("attempting to kill process");
- gProcess.kill();
- }
- Assert.ok(false, "launch application timer expired");
- },
- QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback])
-};
-
-/**
- * Launches an application to apply an update.
- */
-function runUpdateUsingApp(aExpectedStatus) {
- /**
- * The observer for the call to nsIProcess:runAsync. When completed
- * runUpdateFinished will be called.
- */
- const processObserver = {
- observe: function PO_observe(aSubject, aTopic, aData) {
- debugDump("topic: " + aTopic + ", process exitValue: " +
- gProcess.exitValue);
- resetEnvironment();
- if (gAppTimer) {
- gAppTimer.cancel();
- gAppTimer = null;
- }
- Assert.equal(gProcess.exitValue, 0,
- "the application process exit value should be 0");
- Assert.equal(aTopic, "process-finished",
- "the application process observer topic should be " +
- "process-finished");
-
- if (IS_SERVICE_TEST) {
- waitForServiceStop(false);
- }
-
- do_execute_soon(afterAppExits);
- },
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver])
- };
-
- function afterAppExits() {
- gTimeoutRuns++;
-
- if (IS_WIN) {
- waitForApplicationStop(FILE_UPDATER_BIN);
- }
-
- let status;
- try {
- status = readStatusFile();
- } catch (e) {
- logTestInfo("error reading status file, exception: " + e);
- }
- // Don't proceed until the update's status is the expected value.
- if (status != aExpectedStatus) {
- if (gTimeoutRuns > MAX_TIMEOUT_RUNS) {
- logUpdateLog(FILE_UPDATE_LOG);
- do_throw("Exceeded MAX_TIMEOUT_RUNS while waiting for the update " +
- "status to equal: " +
- aExpectedStatus +
- ", current status: " + status);
- } else {
- do_timeout(FILE_IN_USE_TIMEOUT_MS, afterAppExits);
- }
- return;
- }
-
- // Don't check for an update log when the code in nsUpdateDriver.cpp skips
- // updating.
- if (aExpectedStatus != STATE_PENDING &&
- aExpectedStatus != STATE_PENDING_SVC &&
- aExpectedStatus != STATE_APPLIED &&
- aExpectedStatus != STATE_APPLIED_SVC) {
- // Don't proceed until the update log has been created.
- let log = getUpdateLog(FILE_UPDATE_LOG);
- if (!log.exists()) {
- if (gTimeoutRuns > MAX_TIMEOUT_RUNS) {
- do_throw("Exceeded MAX_TIMEOUT_RUNS while waiting for the update " +
- "log to be created. Path: " + log.path);
- }
- do_timeout(FILE_IN_USE_TIMEOUT_MS, afterAppExits);
- return;
- }
- }
-
- do_execute_soon(runUpdateFinished);
- }
-
- debugDump("start - launching application to apply update");
-
- let appBin = getApplyDirFile(DIR_MACOS + FILE_APP_BIN, false);
-
- let launchBin = getLaunchBin();
- let args = getProcessArgs();
- debugDump("launching " + launchBin.path + " " + args.join(" "));
-
- gProcess = Cc["@mozilla.org/process/util;1"].
- createInstance(Ci.nsIProcess);
- gProcess.init(launchBin);
-
- gAppTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
- gAppTimer.initWithCallback(gAppTimerCallback, APP_TIMER_TIMEOUT,
- Ci.nsITimer.TYPE_ONE_SHOT);
-
- setEnvironment();
- debugDump("launching application");
- gProcess.runAsync(args, args.length, processObserver);
-
- debugDump("finish - launching application to apply update");
-}
-
-/**
- * Sets the environment that will be used by the application process when it is
- * launched.
- */
-function setEnvironment() {
- // Prevent setting the environment more than once.
- if (gShouldResetEnv !== undefined) {
- return;
- }
-
- gShouldResetEnv = true;
-
- // See bug 1279108.
- if (gEnv.exists("ASAN_OPTIONS")) {
- gASanOptions = gEnv.get("ASAN_OPTIONS");
- gEnv.set("ASAN_OPTIONS", gASanOptions + ":detect_leaks=0");
- } else {
- gEnv.set("ASAN_OPTIONS", "detect_leaks=0");
- }
-
- if (IS_WIN && !gEnv.exists("XRE_NO_WINDOWS_CRASH_DIALOG")) {
- gAddedEnvXRENoWindowsCrashDialog = true;
- debugDump("setting the XRE_NO_WINDOWS_CRASH_DIALOG environment " +
- "variable to 1... previously it didn't exist");
- gEnv.set("XRE_NO_WINDOWS_CRASH_DIALOG", "1");
- }
-
- if (IS_UNIX) {
- let appGreBinDir = gGREBinDirOrig.clone();
- let envGreBinDir = Cc["@mozilla.org/file/local;1"].
- createInstance(Ci.nsILocalFile);
- let shouldSetEnv = true;
- if (IS_MACOSX) {
- if (gEnv.exists("DYLD_LIBRARY_PATH")) {
- gEnvDyldLibraryPath = gEnv.get("DYLD_LIBRARY_PATH");
- envGreBinDir.initWithPath(gEnvDyldLibraryPath);
- if (envGreBinDir.path == appGreBinDir.path) {
- gEnvDyldLibraryPath = null;
- shouldSetEnv = false;
- }
- }
-
- if (shouldSetEnv) {
- debugDump("setting DYLD_LIBRARY_PATH environment variable value to " +
- appGreBinDir.path);
- gEnv.set("DYLD_LIBRARY_PATH", appGreBinDir.path);
- }
- } else {
- if (gEnv.exists("LD_LIBRARY_PATH")) {
- gEnvLdLibraryPath = gEnv.get("LD_LIBRARY_PATH");
- envGreBinDir.initWithPath(gEnvLdLibraryPath);
- if (envGreBinDir.path == appGreBinDir.path) {
- gEnvLdLibraryPath = null;
- shouldSetEnv = false;
- }
- }
-
- if (shouldSetEnv) {
- debugDump("setting LD_LIBRARY_PATH environment variable value to " +
- appGreBinDir.path);
- gEnv.set("LD_LIBRARY_PATH", appGreBinDir.path);
- }
- }
- }
-
- if (gEnv.exists("XPCOM_MEM_LEAK_LOG")) {
- gEnvXPCOMMemLeakLog = gEnv.get("XPCOM_MEM_LEAK_LOG");
- debugDump("removing the XPCOM_MEM_LEAK_LOG environment variable... " +
- "previous value " + gEnvXPCOMMemLeakLog);
- gEnv.set("XPCOM_MEM_LEAK_LOG", "");
- }
-
- if (gEnv.exists("XPCOM_DEBUG_BREAK")) {
- gEnvXPCOMDebugBreak = gEnv.get("XPCOM_DEBUG_BREAK");
- debugDump("setting the XPCOM_DEBUG_BREAK environment variable to " +
- "warn... previous value " + gEnvXPCOMDebugBreak);
- } else {
- debugDump("setting the XPCOM_DEBUG_BREAK environment variable to " +
- "warn... previously it didn't exist");
- }
-
- gEnv.set("XPCOM_DEBUG_BREAK", "warn");
-
- if (IS_SERVICE_TEST) {
- debugDump("setting MOZ_NO_SERVICE_FALLBACK environment variable to 1");
- gEnv.set("MOZ_NO_SERVICE_FALLBACK", "1");
- }
-}
-
-/**
- * Sets the environment back to the original values after launching the
- * application.
- */
-function resetEnvironment() {
- // Prevent resetting the environment more than once.
- if (gShouldResetEnv !== true) {
- return;
- }
-
- gShouldResetEnv = false;
-
- // Restore previous ASAN_OPTIONS if there were any.
- gEnv.set("ASAN_OPTIONS", gASanOptions ? gASanOptions : "");
-
- if (gEnvXPCOMMemLeakLog) {
- debugDump("setting the XPCOM_MEM_LEAK_LOG environment variable back to " +
- gEnvXPCOMMemLeakLog);
- gEnv.set("XPCOM_MEM_LEAK_LOG", gEnvXPCOMMemLeakLog);
- }
-
- if (gEnvXPCOMDebugBreak) {
- debugDump("setting the XPCOM_DEBUG_BREAK environment variable back to " +
- gEnvXPCOMDebugBreak);
- gEnv.set("XPCOM_DEBUG_BREAK", gEnvXPCOMDebugBreak);
- } else if (gEnv.exists("XPCOM_DEBUG_BREAK")) {
- debugDump("clearing the XPCOM_DEBUG_BREAK environment variable");
- gEnv.set("XPCOM_DEBUG_BREAK", "");
- }
-
- if (IS_UNIX) {
- if (IS_MACOSX) {
- if (gEnvDyldLibraryPath) {
- debugDump("setting DYLD_LIBRARY_PATH environment variable value " +
- "back to " + gEnvDyldLibraryPath);
- gEnv.set("DYLD_LIBRARY_PATH", gEnvDyldLibraryPath);
- } else if (gEnvDyldLibraryPath !== null) {
- debugDump("removing DYLD_LIBRARY_PATH environment variable");
- gEnv.set("DYLD_LIBRARY_PATH", "");
- }
- } else if (gEnvLdLibraryPath) {
- debugDump("setting LD_LIBRARY_PATH environment variable value back " +
- "to " + gEnvLdLibraryPath);
- gEnv.set("LD_LIBRARY_PATH", gEnvLdLibraryPath);
- } else if (gEnvLdLibraryPath !== null) {
- debugDump("removing LD_LIBRARY_PATH environment variable");
- gEnv.set("LD_LIBRARY_PATH", "");
- }
- }
-
- if (IS_WIN && gAddedEnvXRENoWindowsCrashDialog) {
- debugDump("removing the XRE_NO_WINDOWS_CRASH_DIALOG environment " +
- "variable");
- gEnv.set("XRE_NO_WINDOWS_CRASH_DIALOG", "");
- }
-
- if (IS_SERVICE_TEST) {
- debugDump("removing MOZ_NO_SERVICE_FALLBACK environment variable");
- gEnv.set("MOZ_NO_SERVICE_FALLBACK", "");
- }
-}