Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
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
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 const TEST_PROVIDER_ORIGIN = 'http://example.com';
7 Cu.import("resource://gre/modules/Services.jsm");
9 function ensureProvider(workerFunction, cb) {
10 let manifest = {
11 origin: TEST_PROVIDER_ORIGIN,
12 name: "Example Provider",
13 workerURL: "http://example.com/browser/toolkit/components/social/test/browser/echo.sjs?"
14 + encodeURI("let run=" + workerFunction.toSource()) + ";run();"
15 };
17 SocialService.addProvider(manifest, function (p) {
18 cb(p);
19 });
20 }
22 function test() {
23 waitForExplicitFinish();
25 let cbPostTest = function(cb) {
26 SocialService.removeProvider(TEST_PROVIDER_ORIGIN, function() {cb()});
27 };
28 replaceAlertsService();
29 registerCleanupFunction(restoreAlertsService);
30 runTests(tests, undefined, cbPostTest);
31 }
33 let tests = {
34 testNotificationCallback: function(cbnext) {
35 let run = function() {
36 let testPort, apiPort;
37 onconnect = function(e) {
38 let port = e.ports[0];
39 port.onmessage = function(e) {
40 if (e.data.topic == "social.initialize") { // this is the api port.
41 apiPort = port;
42 } else if (e.data.topic == "test.initialize") { // test suite port.
43 testPort = port;
44 apiPort.postMessage({topic: 'social.notification-create',
45 data: {
46 id: "the id",
47 body: 'test notification',
48 action: 'callback',
49 actionArgs: { data: "something" }
50 }
51 });
52 } else if (e.data.topic == "social.notification-action") {
53 let data = e.data.data;
54 let ok = data && data.action == "callback" &&
55 data.actionArgs && e.data.data.actionArgs.data == "something";
56 testPort.postMessage({topic: "test.done", data: ok});
57 }
58 }
59 }
60 }
61 ensureProvider(run, function(provider) {
62 let observer = {
63 observedData: null,
64 observe: function(subject, topic, data) {
65 this.observedData = JSON.parse(data);
66 Services.obs.removeObserver(observer, "social-test:notification-alert");
67 }
68 }
69 Services.obs.addObserver(observer, "social-test:notification-alert", false);
71 let port = provider.getWorkerPort();
72 ok(port, "got port from worker");
73 port.onmessage = function(e) {
74 if (e.data.topic == "test.done") {
75 ok(e.data.data, "check the test worked");
76 ok(observer.observedData, "test observer fired");
77 is(observer.observedData.text, "test notification", "check the alert text is correct");
78 is(observer.observedData.title, "Example Provider", "check the alert title is correct");
79 is(observer.observedData.textClickable, true, "check the alert is clickable");
80 port.close();
81 cbnext();
82 }
83 }
84 port.postMessage({topic: "test.initialize"});
85 });
86 }
87 };