mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-06-05 07:58:57 +00:00
225 lines
8.0 KiB
JavaScript
225 lines
8.0 KiB
JavaScript
/* 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/. */
|
|
|
|
let provider;
|
|
|
|
function test() {
|
|
waitForExplicitFinish();
|
|
|
|
replaceAlertsService();
|
|
registerCleanupFunction(restoreAlertsService);
|
|
|
|
let manifest = {
|
|
origin: 'http://example.com',
|
|
name: "Example Provider",
|
|
workerURL: "http://example.com/browser/toolkit/components/social/test/browser/worker_social.js"
|
|
};
|
|
|
|
SocialService.addProvider(manifest, function (p) {
|
|
// toolkit does not enable providers by default, that is handled in the
|
|
// browser, we need to enable it in our tests.
|
|
p.enabled = true;
|
|
provider = p;
|
|
runTests(tests, undefined, undefined, function () {
|
|
SocialService.disableProvider(provider.origin, finish);
|
|
});
|
|
});
|
|
}
|
|
|
|
let tests = {
|
|
testProfile: function(next) {
|
|
let expect = {
|
|
portrait: "https://example.com/portrait.jpg",
|
|
userName: "trickster",
|
|
displayName: "Kuma Lisa",
|
|
profileURL: "http://en.wikipedia.org/wiki/Kuma_Lisa"
|
|
}
|
|
function ob(aSubject, aTopic, aData) {
|
|
Services.obs.removeObserver(ob, "social:profile-changed");
|
|
is(aData, provider.origin, "update of profile from our provider");
|
|
let profile = provider.profile;
|
|
is(profile.portrait, expect.portrait, "portrait is set");
|
|
is(profile.userName, expect.userName, "userName is set");
|
|
is(profile.displayName, expect.displayName, "displayName is set");
|
|
is(profile.profileURL, expect.profileURL, "profileURL is set");
|
|
next();
|
|
}
|
|
Services.obs.addObserver(ob, "social:profile-changed", false);
|
|
let port = provider.getWorkerPort();
|
|
port.postMessage({topic: "test-profile", data: expect});
|
|
port.close();
|
|
},
|
|
|
|
testAmbientNotification: function(next) {
|
|
let expect = {
|
|
name: "test-ambient"
|
|
}
|
|
function ob(aSubject, aTopic, aData) {
|
|
Services.obs.removeObserver(ob, "social:ambient-notification-changed");
|
|
is(aData, provider.origin, "update is from our provider");
|
|
let notif = provider.ambientNotificationIcons[expect.name];
|
|
is(notif.name, expect.name, "ambientNotification reflected");
|
|
|
|
next();
|
|
}
|
|
Services.obs.addObserver(ob, "social:ambient-notification-changed", false);
|
|
let port = provider.getWorkerPort();
|
|
port.postMessage({topic: "test-ambient", data: expect});
|
|
port.close();
|
|
},
|
|
|
|
testProfileCleared: function(next) {
|
|
let sent = {
|
|
userName: ""
|
|
};
|
|
function ob(aSubject, aTopic, aData) {
|
|
Services.obs.removeObserver(ob, "social:profile-changed");
|
|
is(aData, provider.origin, "update of profile from our provider");
|
|
is(Object.keys(provider.profile).length, 0, "profile was cleared by empty username");
|
|
is(Object.keys(provider.ambientNotificationIcons).length, 0, "icons were cleared by empty username");
|
|
|
|
next();
|
|
}
|
|
Services.obs.addObserver(ob, "social:profile-changed", false);
|
|
provider.workerAPI._port.postMessage({topic: "test-profile", data: sent});
|
|
},
|
|
|
|
testNoCookies: function(next) {
|
|
// use a big, blunt stick to remove cookies.
|
|
Services.cookies.removeAll();
|
|
let port = provider.getWorkerPort();
|
|
port.onmessage = function onMessage(event) {
|
|
let {topic, data} = event.data;
|
|
if (topic == "test.cookies-get-response") {
|
|
is(data.length, 0, "got no cookies");
|
|
port.close();
|
|
next();
|
|
}
|
|
}
|
|
port.postMessage({topic: "test-initialization"});
|
|
port.postMessage({topic: "test.cookies-get"});
|
|
},
|
|
|
|
testCookies: function(next) {
|
|
let port = provider.getWorkerPort();
|
|
port.onmessage = function onMessage(event) {
|
|
let {topic, data} = event.data;
|
|
if (topic == "test.cookies-get-response") {
|
|
is(data.length, 2, "got 2 cookies");
|
|
is(data[0].name, "cheez", "cookie has the correct name");
|
|
is(data[0].value, "burger", "cookie has the correct value");
|
|
is(data[1].name, "moar", "cookie has the correct name");
|
|
is(data[1].value, "bacon", "cookie has the correct value");
|
|
Services.cookies.remove('.example.com', '/', 'cheez', false);
|
|
Services.cookies.remove('.example.com', '/', 'moar', false);
|
|
port.close();
|
|
next();
|
|
}
|
|
}
|
|
var MAX_EXPIRY = Math.pow(2, 62);
|
|
Services.cookies.add('.example.com', '/', 'cheez', 'burger', false, false, true, MAX_EXPIRY);
|
|
Services.cookies.add('.example.com', '/', 'moar', 'bacon', false, false, true, MAX_EXPIRY);
|
|
port.postMessage({topic: "test-initialization"});
|
|
port.postMessage({topic: "test.cookies-get"});
|
|
},
|
|
|
|
testWorkerReload: function(next) {
|
|
let fw = {};
|
|
Cu.import("resource://gre/modules/FrameWorker.jsm", fw);
|
|
|
|
let worker = fw.getFrameWorkerHandle(provider.workerURL, undefined, "testWorkerReload");
|
|
let port = provider.getWorkerPort();
|
|
// this observer will be fired when the worker reloads - it ensures the
|
|
// old port was closed and the new worker is functioning.
|
|
Services.obs.addObserver(function reloadObserver() {
|
|
Services.obs.removeObserver(reloadObserver, "social:provider-reload");
|
|
ok(port._closed, "old port was closed by the reload");
|
|
let newWorker = fw.getFrameWorkerHandle(provider.workerURL, undefined, "testWorkerReload - worker2");
|
|
let newPort = provider.getWorkerPort();
|
|
newPort.onmessage = function (e) {
|
|
let topic = e.data.topic;
|
|
switch (topic) {
|
|
case "test-initialization-complete":
|
|
// and we are done.
|
|
newPort.close();
|
|
next();
|
|
break;
|
|
}
|
|
}
|
|
newPort.postMessage({topic: "test-initialization"});
|
|
}, "social:provider-reload", false);
|
|
|
|
port.onmessage = function (e) {
|
|
let topic = e.data.topic;
|
|
switch (topic) {
|
|
case "test-initialization-complete":
|
|
// tell the worker to send the reload msg - that will trigger the
|
|
// frameworker to unload and for our content script's unload
|
|
// handler to post a "test-result" message.
|
|
port.postMessage({topic: "test-reload-init"});
|
|
// and the "social:provider-reload" observer should fire...
|
|
break;
|
|
}
|
|
}
|
|
port.postMessage({topic: "test-initialization"});
|
|
},
|
|
|
|
testNotificationLinks: function(next) {
|
|
let port = provider.getWorkerPort();
|
|
let data = {
|
|
id: 'an id',
|
|
body: 'the text',
|
|
action: 'link',
|
|
actionArgs: {} // will get a toURL elt during the tests...
|
|
}
|
|
let testArgs = [
|
|
// toURL, expectedLocation, expectedWhere]
|
|
["http://example.com", "http://example.com/", "tab"],
|
|
// bug 815970 - test that a mis-matched scheme gets patched up.
|
|
["https://example.com", "http://example.com/", "tab"],
|
|
// check an off-origin link is not opened.
|
|
["https://mochitest:8888/", null, null]
|
|
];
|
|
|
|
// we monkey-patch openUILinkIn
|
|
let oldopenUILinkIn = window.openUILinkIn;
|
|
registerCleanupFunction(function () {
|
|
// restore the monkey-patch
|
|
window.openUILinkIn = oldopenUILinkIn;
|
|
});
|
|
let openLocation;
|
|
let openWhere;
|
|
window.openUILinkIn = function(location, where) {
|
|
openLocation = location;
|
|
openWhere = where;
|
|
}
|
|
|
|
// the testing framework.
|
|
let toURL, expectedLocation, expectedWhere;
|
|
function nextTest() {
|
|
if (testArgs.length == 0) {
|
|
port.close();
|
|
next(); // all out of tests!
|
|
return;
|
|
}
|
|
openLocation = openWhere = null;
|
|
[toURL, expectedLocation, expectedWhere] = testArgs.shift();
|
|
data.actionArgs.toURL = toURL;
|
|
port.postMessage({topic: 'test-notification-create', data: data});
|
|
};
|
|
|
|
port.onmessage = function(evt) {
|
|
if (evt.data.topic == "did-notification-create") {
|
|
is(openLocation, expectedLocation, "url actually opened was " + openLocation);
|
|
is(openWhere, expectedWhere, "the url was opened in a " + expectedWhere);
|
|
nextTest();
|
|
}
|
|
}
|
|
// and kick off the tests.
|
|
port.postMessage({topic: "test-initialization"});
|
|
nextTest();
|
|
},
|
|
|
|
};
|