Bug 1180901 - Test that an extension can be installed when a locked file exists in the extensions trash directory as long as the extension being installed does not touch the locked file. r=mossop
authorTrevor Rowbotham <smokey101stair@gmail.com>
Wed, 09 Sep 2015 13:44:00 +0200
changeset 294724 190b9bfc9ae281919dba6c036b641c3c7d289ae1
parent 294723 bd4e19973ec21cad1bb306701130eaf1e60035c5
child 294725 624dcded857d5ecff56ef4a668ab4cb5fe3f33f0
push id5245
push userraliiev@mozilla.com
push dateThu, 29 Oct 2015 11:30:51 +0000
treeherdermozilla-beta@dac831dc1bd0 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmossop
bugs1180901
milestone43.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1180901 - Test that an extension can be installed when a locked file exists in the extensions trash directory as long as the extension being installed does not touch the locked file. r=mossop
toolkit/mozapps/extensions/test/xpcshell/test_bug1180901_2.js
toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini
toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini
new file mode 100644
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug1180901_2.js
@@ -0,0 +1,60 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+function run_test() {
+  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
+  startupManager();
+  run_next_test();
+}
+
+add_task(function* () {
+  let profileDir = OS.Constants.Path.profileDir;
+  let trashDir = OS.Path.join(profileDir, "extensions", "trash");
+  let testFile = OS.Path.join(trashDir, "test.txt");
+
+  yield OS.File.makeDir(trashDir, {
+    from: profileDir,
+    ignoreExisting: true
+  });
+
+  let trashDirExists = yield OS.File.exists(trashDir);
+  ok(trashDirExists, "trash directory should have been created");
+
+  let file = yield OS.File.open(testFile, {create: true}, {winShare: 0});
+  let fileExists = yield OS.File.exists(testFile);
+  ok(fileExists, "test.txt should have been created in " + trashDir);
+
+  let promiseInstallStatus = new Promise((resolve, reject) => {
+    let listener = {
+      onInstallFailed: function() {
+        AddonManager.removeInstallListener(listener);
+        reject("extension installation should not have failed");
+      },
+      onInstallEnded: function() {
+        AddonManager.removeInstallListener(listener);
+        ok(true, "extension installation should not have failed");
+        resolve();
+      }
+    };
+
+    AddonManager.addInstallListener(listener);
+  });
+
+  yield promiseInstallAllFiles([do_get_addon("test_bootstrap1_1")]);
+
+  // The testFile should still exist at this point because we have not
+  // yet closed the file handle and as a result, Windows cannot remove it.
+  fileExists = yield OS.File.exists(testFile);
+  ok(fileExists, "test.txt should still exist");
+
+  // Wait for the AddonManager to tell us if the installation of the extension
+  // succeeded or not.
+  yield promiseInstallStatus;
+
+  // Cleanup
+  yield promiseShutdownManager();
+  yield file.close();
+  yield OS.File.remove(testFile);
+  yield OS.File.removeDir(trashDir);
+});
--- a/toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini
+++ b/toolkit/mozapps/extensions/test/xpcshell/xpcshell-shared.ini
@@ -289,10 +289,12 @@ run-sequentially = Uses global XCurProcD
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
 run-sequentially = Uses global XCurProcD dir.
 [test_overrideblocklist.js]
 run-sequentially = Uses global XCurProcD dir.
 [test_sourceURI.js]
 [test_webextension.js]
 [test_bootstrap_globals.js]
+[test_bug1180901_2.js]
+skip-if = os != "win"
 [test_bug1180901.js]
 skip-if = os != "win"
--- a/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini
+++ b/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini
@@ -25,9 +25,10 @@ skip-if = appname != "firefox"
 [test_provider_unsafe_access_startup.js]
 [test_shutdown.js]
 [test_system_reset.js]
 [test_XPIcancel.js]
 [test_XPIStates.js]
 
 
 
+
 [include:xpcshell-shared.ini]