toolkit/components/social/test/xpcshell/test_SocialService.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
michael@0 3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 4
michael@0 5 Cu.import("resource://gre/modules/Services.jsm");
michael@0 6 Cu.import("resource://gre/modules/PlacesUtils.jsm");
michael@0 7
michael@0 8 function run_test() {
michael@0 9 initApp();
michael@0 10
michael@0 11 // NOTE: none of the manifests here can have a workerURL set, or we attempt
michael@0 12 // to create a FrameWorker and that fails under xpcshell...
michael@0 13 let manifests = [
michael@0 14 { // normal provider
michael@0 15 name: "provider 1",
michael@0 16 origin: "https://example1.com",
michael@0 17 sidebarURL: "https://example1.com/sidebar/",
michael@0 18 },
michael@0 19 { // provider without workerURL
michael@0 20 name: "provider 2",
michael@0 21 origin: "https://example2.com",
michael@0 22 sidebarURL: "https://example2.com/sidebar/",
michael@0 23 }
michael@0 24 ];
michael@0 25
michael@0 26 Cu.import("resource://gre/modules/SocialService.jsm");
michael@0 27 Cu.import("resource://gre/modules/MozSocialAPI.jsm");
michael@0 28
michael@0 29 let runner = new AsyncRunner();
michael@0 30 let next = runner.next.bind(runner);
michael@0 31 runner.appendIterator(testAddProviders(manifests, next));
michael@0 32 runner.appendIterator(testGetProvider(manifests, next));
michael@0 33 runner.appendIterator(testGetProviderList(manifests, next));
michael@0 34 runner.appendIterator(testAddRemoveProvider(manifests, next));
michael@0 35 runner.appendIterator(testIsSameOrigin(manifests, next));
michael@0 36 runner.appendIterator(testResolveUri (manifests, next));
michael@0 37 runner.appendIterator(testOrderedProviders(manifests, next));
michael@0 38 runner.appendIterator(testRemoveProviders(manifests, next));
michael@0 39 runner.next();
michael@0 40 }
michael@0 41
michael@0 42 function testAddProviders(manifests, next) {
michael@0 43 do_check_false(SocialService.enabled);
michael@0 44 let provider = yield SocialService.addProvider(manifests[0], next);
michael@0 45 do_check_true(SocialService.enabled);
michael@0 46 do_check_true(MozSocialAPI._enabled);
michael@0 47 do_check_false(provider.enabled);
michael@0 48 provider = yield SocialService.addProvider(manifests[1], next);
michael@0 49 do_check_false(provider.enabled);
michael@0 50 }
michael@0 51
michael@0 52 function testRemoveProviders(manifests, next) {
michael@0 53 do_check_true(SocialService.enabled);
michael@0 54 yield SocialService.removeProvider(manifests[0].origin, next);
michael@0 55 yield SocialService.removeProvider(manifests[1].origin, next);
michael@0 56 do_check_false(SocialService.enabled);
michael@0 57 }
michael@0 58
michael@0 59 function testGetProvider(manifests, next) {
michael@0 60 for (let i = 0; i < manifests.length; i++) {
michael@0 61 let manifest = manifests[i];
michael@0 62 let provider = yield SocialService.getProvider(manifest.origin, next);
michael@0 63 do_check_neq(provider, null);
michael@0 64 do_check_eq(provider.name, manifest.name);
michael@0 65 do_check_eq(provider.workerURL, manifest.workerURL);
michael@0 66 do_check_eq(provider.origin, manifest.origin);
michael@0 67 }
michael@0 68 do_check_eq((yield SocialService.getProvider("bogus", next)), null);
michael@0 69 }
michael@0 70
michael@0 71 function testGetProviderList(manifests, next) {
michael@0 72 let providers = yield SocialService.getProviderList(next);
michael@0 73 do_check_true(providers.length >= manifests.length);
michael@0 74 for (let i = 0; i < manifests.length; i++) {
michael@0 75 let providerIdx = providers.map(function (p) p.origin).indexOf(manifests[i].origin);
michael@0 76 let provider = providers[providerIdx];
michael@0 77 do_check_true(!!provider);
michael@0 78 do_check_false(provider.enabled);
michael@0 79 do_check_eq(provider.workerURL, manifests[i].workerURL);
michael@0 80 do_check_eq(provider.name, manifests[i].name);
michael@0 81 }
michael@0 82 }
michael@0 83
michael@0 84 function testAddRemoveProvider(manifests, next) {
michael@0 85 var threw;
michael@0 86 try {
michael@0 87 // Adding a provider whose origin already exists should fail
michael@0 88 SocialService.addProvider(manifests[0]);
michael@0 89 } catch (ex) {
michael@0 90 threw = ex;
michael@0 91 }
michael@0 92 do_check_neq(threw.toString().indexOf("SocialService.addProvider: provider with this origin already exists"), -1);
michael@0 93
michael@0 94 let originalProviders = yield SocialService.getProviderList(next);
michael@0 95
michael@0 96 // Check that provider installation succeeds
michael@0 97 let newProvider = yield SocialService.addProvider({
michael@0 98 name: "foo",
michael@0 99 origin: "http://example3.com"
michael@0 100 }, next);
michael@0 101 let retrievedNewProvider = yield SocialService.getProvider(newProvider.origin, next);
michael@0 102 do_check_eq(newProvider, retrievedNewProvider);
michael@0 103
michael@0 104 let providersAfter = yield SocialService.getProviderList(next);
michael@0 105 do_check_eq(providersAfter.length, originalProviders.length + 1);
michael@0 106 do_check_neq(providersAfter.indexOf(newProvider), -1);
michael@0 107
michael@0 108 // Now remove the provider
michael@0 109 yield SocialService.removeProvider(newProvider.origin, next);
michael@0 110 providersAfter = yield SocialService.getProviderList(next);
michael@0 111 do_check_eq(providersAfter.length, originalProviders.length);
michael@0 112 do_check_eq(providersAfter.indexOf(newProvider), -1);
michael@0 113 newProvider = yield SocialService.getProvider(newProvider.origin, next);
michael@0 114 do_check_true(!newProvider);
michael@0 115 }
michael@0 116
michael@0 117 function testIsSameOrigin(manifests, next) {
michael@0 118 let providers = yield SocialService.getProviderList(next);
michael@0 119 let provider = providers[0];
michael@0 120 // provider.origin is a string.
michael@0 121 do_check_true(provider.isSameOrigin(provider.origin));
michael@0 122 do_check_true(provider.isSameOrigin(Services.io.newURI(provider.origin, null, null)));
michael@0 123 do_check_true(provider.isSameOrigin(provider.origin + "/some-sub-page"));
michael@0 124 do_check_true(provider.isSameOrigin(Services.io.newURI(provider.origin + "/some-sub-page", null, null)));
michael@0 125 do_check_false(provider.isSameOrigin("http://something.com"));
michael@0 126 do_check_false(provider.isSameOrigin(Services.io.newURI("http://something.com", null, null)));
michael@0 127 do_check_false(provider.isSameOrigin("data:text/html,<p>hi"));
michael@0 128 do_check_true(provider.isSameOrigin("data:text/html,<p>hi", true));
michael@0 129 do_check_false(provider.isSameOrigin(Services.io.newURI("data:text/html,<p>hi", null, null)));
michael@0 130 do_check_true(provider.isSameOrigin(Services.io.newURI("data:text/html,<p>hi", null, null), true));
michael@0 131 // we explicitly handle null and return false
michael@0 132 do_check_false(provider.isSameOrigin(null));
michael@0 133 }
michael@0 134
michael@0 135 function testResolveUri(manifests, next) {
michael@0 136 let providers = yield SocialService.getProviderList(next);
michael@0 137 let provider = providers[0];
michael@0 138 do_check_eq(provider.resolveUri(provider.origin).spec, provider.origin + "/");
michael@0 139 do_check_eq(provider.resolveUri("foo.html").spec, provider.origin + "/foo.html");
michael@0 140 do_check_eq(provider.resolveUri("/foo.html").spec, provider.origin + "/foo.html");
michael@0 141 do_check_eq(provider.resolveUri("http://somewhereelse.com/foo.html").spec, "http://somewhereelse.com/foo.html");
michael@0 142 do_check_eq(provider.resolveUri("data:text/html,<p>hi").spec, "data:text/html,<p>hi");
michael@0 143 }
michael@0 144
michael@0 145 function testOrderedProviders(manifests, next) {
michael@0 146 let providers = yield SocialService.getProviderList(next);
michael@0 147
michael@0 148 // add visits for only one of the providers
michael@0 149 let visits = [];
michael@0 150 let startDate = Date.now() * 1000;
michael@0 151 for (let i = 0; i < 10; i++) {
michael@0 152 visits.push({
michael@0 153 uri: Services.io.newURI(providers[1].sidebarURL + i, null, null),
michael@0 154 visitDate: startDate + i
michael@0 155 });
michael@0 156 }
michael@0 157
michael@0 158 promiseAddVisits(visits).then(next);
michael@0 159 yield;
michael@0 160 let orderedProviders = yield SocialService.getOrderedProviderList(next);
michael@0 161 do_check_eq(orderedProviders[0], providers[1]);
michael@0 162 do_check_eq(orderedProviders[1], providers[0]);
michael@0 163 do_check_true(orderedProviders[0].frecency > orderedProviders[1].frecency);
michael@0 164 promiseClearHistory().then(next);
michael@0 165 yield;
michael@0 166 }

mercurial