|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 // This verifies that moving an extension in the filesystem without any other |
|
6 // change still keeps updated compatibility information |
|
7 |
|
8 // The test extension uses an insecure update url. |
|
9 Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false); |
|
10 // Enable loading extensions from the user and system scopes |
|
11 Services.prefs.setIntPref("extensions.enabledScopes", |
|
12 AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_USER); |
|
13 |
|
14 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "1.9.2"); |
|
15 |
|
16 Components.utils.import("resource://testing-common/httpd.js"); |
|
17 var testserver = new HttpServer(); |
|
18 testserver.start(-1); |
|
19 gPort = testserver.identity.primaryPort; |
|
20 mapFile("/data/test_bug655254.rdf", testserver); |
|
21 |
|
22 var userDir = gProfD.clone(); |
|
23 userDir.append("extensions2"); |
|
24 userDir.append(gAppInfo.ID); |
|
25 |
|
26 var dirProvider = { |
|
27 getFile: function(aProp, aPersistent) { |
|
28 aPersistent.value = false; |
|
29 if (aProp == "XREUSysExt") |
|
30 return userDir.parent; |
|
31 return null; |
|
32 }, |
|
33 |
|
34 QueryInterface: XPCOMUtils.generateQI([AM_Ci.nsIDirectoryServiceProvider, |
|
35 AM_Ci.nsISupports]) |
|
36 }; |
|
37 Services.dirsvc.registerProvider(dirProvider); |
|
38 |
|
39 var addon1 = { |
|
40 id: "addon1@tests.mozilla.org", |
|
41 version: "1.0", |
|
42 name: "Test 1", |
|
43 updateURL: "http://localhost:" + gPort + "/data/test_bug655254.rdf", |
|
44 targetApplications: [{ |
|
45 id: "xpcshell@tests.mozilla.org", |
|
46 minVersion: "1", |
|
47 maxVersion: "1" |
|
48 }] |
|
49 }; |
|
50 |
|
51 // Set up the profile |
|
52 function run_test() { |
|
53 do_test_pending(); |
|
54 run_test_1(); |
|
55 } |
|
56 |
|
57 function end_test() { |
|
58 testserver.stop(do_test_finished); |
|
59 } |
|
60 |
|
61 function run_test_1() { |
|
62 var time = Date.now(); |
|
63 var dir = writeInstallRDFForExtension(addon1, userDir); |
|
64 setExtensionModifiedTime(dir, time); |
|
65 |
|
66 manuallyInstall(do_get_addon("test_bug655254_2"), userDir, "addon2@tests.mozilla.org"); |
|
67 |
|
68 startupManager(); |
|
69 |
|
70 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", |
|
71 "addon2@tests.mozilla.org"], function([a1, a2]) { |
|
72 do_check_neq(a1, null); |
|
73 do_check_true(a1.appDisabled); |
|
74 do_check_false(a1.isActive); |
|
75 do_check_false(isExtensionInAddonsList(userDir, a1.id)); |
|
76 |
|
77 do_check_neq(a2, null); |
|
78 do_check_false(a2.appDisabled); |
|
79 do_check_true(a2.isActive); |
|
80 do_check_false(isExtensionInAddonsList(userDir, a2.id)); |
|
81 do_check_eq(Services.prefs.getIntPref("bootstraptest.active_version"), 1); |
|
82 |
|
83 a1.findUpdates({ |
|
84 onUpdateFinished: function() { |
|
85 restartManager(); |
|
86 |
|
87 AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) { |
|
88 do_check_neq(a1, null); |
|
89 do_check_false(a1.appDisabled); |
|
90 do_check_true(a1.isActive); |
|
91 do_check_true(isExtensionInAddonsList(userDir, a1.id)); |
|
92 |
|
93 shutdownManager(); |
|
94 |
|
95 do_check_eq(Services.prefs.getIntPref("bootstraptest.active_version"), 0); |
|
96 |
|
97 userDir.parent.moveTo(gProfD, "extensions3"); |
|
98 userDir = gProfD.clone(); |
|
99 userDir.append("extensions3"); |
|
100 userDir.append(gAppInfo.ID); |
|
101 do_check_true(userDir.exists()); |
|
102 |
|
103 startupManager(false); |
|
104 |
|
105 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", |
|
106 "addon2@tests.mozilla.org"], function([a1, a2]) { |
|
107 do_check_neq(a1, null); |
|
108 do_check_false(a1.appDisabled); |
|
109 do_check_true(a1.isActive); |
|
110 do_check_true(isExtensionInAddonsList(userDir, a1.id)); |
|
111 |
|
112 do_check_neq(a2, null); |
|
113 do_check_false(a2.appDisabled); |
|
114 do_check_true(a2.isActive); |
|
115 do_check_false(isExtensionInAddonsList(userDir, a2.id)); |
|
116 do_check_eq(Services.prefs.getIntPref("bootstraptest.active_version"), 1); |
|
117 |
|
118 do_execute_soon(run_test_2); |
|
119 }); |
|
120 })); |
|
121 } |
|
122 }, AddonManager.UPDATE_WHEN_USER_REQUESTED); |
|
123 }); |
|
124 } |
|
125 |
|
126 //Set up the profile |
|
127 function run_test_2() { |
|
128 AddonManager.getAddonByID("addon2@tests.mozilla.org", callback_soon(function(a2) { |
|
129 do_check_neq(a2, null); |
|
130 do_check_false(a2.appDisabled); |
|
131 do_check_true(a2.isActive); |
|
132 do_check_false(isExtensionInAddonsList(userDir, a2.id)); |
|
133 do_check_eq(Services.prefs.getIntPref("bootstraptest.active_version"), 1); |
|
134 |
|
135 a2.userDisabled = true; |
|
136 do_check_eq(Services.prefs.getIntPref("bootstraptest.active_version"), 0); |
|
137 |
|
138 shutdownManager(); |
|
139 |
|
140 userDir.parent.moveTo(gProfD, "extensions4"); |
|
141 userDir = gProfD.clone(); |
|
142 userDir.append("extensions4"); |
|
143 userDir.append(gAppInfo.ID); |
|
144 do_check_true(userDir.exists()); |
|
145 |
|
146 startupManager(false); |
|
147 |
|
148 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", |
|
149 "addon2@tests.mozilla.org"], function([a1, a2]) { |
|
150 do_check_neq(a1, null); |
|
151 do_check_false(a1.appDisabled); |
|
152 do_check_true(a1.isActive); |
|
153 do_check_true(isExtensionInAddonsList(userDir, a1.id)); |
|
154 |
|
155 do_check_neq(a2, null); |
|
156 do_check_true(a2.userDisabled); |
|
157 do_check_false(a2.isActive); |
|
158 do_check_false(isExtensionInAddonsList(userDir, a2.id)); |
|
159 do_check_eq(Services.prefs.getIntPref("bootstraptest.active_version"), 0); |
|
160 |
|
161 end_test(); |
|
162 }); |
|
163 })); |
|
164 } |