|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this file, |
|
3 * You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 Cu.import("resource://gre/modules/Services.jsm"); |
|
6 |
|
7 const DEFAULT_PREFS = Services.prefs.getDefaultBranch("social.manifest."); |
|
8 |
|
9 function run_test() { |
|
10 // Test must run at startup for migration to occur, so we can only test |
|
11 // one migration per test file |
|
12 initApp(); |
|
13 |
|
14 // NOTE: none of the manifests here can have a workerURL set, or we attempt |
|
15 // to create a FrameWorker and that fails under xpcshell... |
|
16 let manifest = { // normal provider |
|
17 name: "provider 1", |
|
18 origin: "https://example1.com", |
|
19 builtin: true // as of fx22 this should be true for default prefs |
|
20 }; |
|
21 |
|
22 DEFAULT_PREFS.setCharPref(manifest.origin, JSON.stringify(manifest)); |
|
23 |
|
24 // Set both providers active and flag the first one as "current" |
|
25 let activeVal = Cc["@mozilla.org/supports-string;1"]. |
|
26 createInstance(Ci.nsISupportsString); |
|
27 let active = {}; |
|
28 active[manifest.origin] = 1; |
|
29 // bad.origin tests that a missing manifest does not break migration, bug 859715 |
|
30 active["bad.origin"] = 1; |
|
31 activeVal.data = JSON.stringify(active); |
|
32 Services.prefs.setComplexValue("social.activeProviders", |
|
33 Ci.nsISupportsString, activeVal); |
|
34 |
|
35 Cu.import("resource://gre/modules/SocialService.jsm"); |
|
36 |
|
37 let runner = new AsyncRunner(); |
|
38 let next = runner.next.bind(runner); |
|
39 runner.appendIterator(testMigration(manifest, next)); |
|
40 runner.next(); |
|
41 } |
|
42 |
|
43 function testMigration(manifest, next) { |
|
44 // look at social.activeProviders, we should have migrated into that, and |
|
45 // we should be set as a user level pref after migration |
|
46 do_check_false(MANIFEST_PREFS.prefHasUserValue(manifest.origin)); |
|
47 // we need to access the providers for everything to initialize |
|
48 yield SocialService.getProviderList(next); |
|
49 do_check_true(SocialService.enabled); |
|
50 do_check_true(Services.prefs.prefHasUserValue("social.activeProviders")); |
|
51 |
|
52 let activeProviders; |
|
53 let pref = Services.prefs.getComplexValue("social.activeProviders", |
|
54 Ci.nsISupportsString); |
|
55 activeProviders = JSON.parse(pref); |
|
56 do_check_true(activeProviders[manifest.origin]); |
|
57 do_check_true(MANIFEST_PREFS.prefHasUserValue(manifest.origin)); |
|
58 do_check_true(JSON.parse(DEFAULT_PREFS.getCharPref(manifest.origin)).builtin); |
|
59 |
|
60 let userPref = JSON.parse(MANIFEST_PREFS.getCharPref(manifest.origin)); |
|
61 do_check_true(parseInt(userPref.updateDate) > 0); |
|
62 // migrated providers wont have an installDate |
|
63 do_check_true(userPref.installDate === 0); |
|
64 |
|
65 // bug 859715, this should have been removed during migration |
|
66 do_check_false(!!activeProviders["bad.origin"]); |
|
67 } |