mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:30:27 +00:00
fb9b106168
- Bug 1154563 - Drop the unused argument of WorkerPrivate::Close(); r=baku (366f353f9f) - Bug 1178721 - Implement SuspendWorkersForWindow;r=khuey (a49bc9a306) - Bug 1207490 - Part 6: Remove use of expression closure from browser/devtools/. r=vporof (1c4d153319) - Bug 1198982: Don't fail the SW load for an importScripts failure. r=bkelly (948f5dca94) - Bug 1160890 - Part 1: Remove unneeded code from ImportScripts(). r=smaug (e31f7c82eb) - Bug 1160890 - Part 2: ImportScripts() should return muted errors with 3rd party scripts. r=smaug (347e54a605) - Bug 1188141: Make Worker error events not bubble. r=baku (509fd46933) - Bug 1160890, r=smaug (0ce3ee09d6) - Bug 1208687: Only discard events from the outermost queue. r=ehsan (bce722c16b) - Bug 949376 - MessageEvent::initMessageEvent, r=smaug (8878e51c91) - Bug 1214772 - Part 2: Make FetchEvent inherit from ExtendableEvent; r=bzbarsky (edff91f7fb) - Bug 1218131 - Mark FetchEvent.request as SameObject; r=bzbarsky (1f79b94838) - Bug 1188545 - Add tests for service workers' lifetime management. r=nsm (9bac3b9f2d) - Bug 1218135 - Remove FetchEvent.client; r=bzbarsky (e95e4e5326) - Bug 1218151 - Make FetchEventInit.isReload default to false; r=bzbarsky (795d597a3b) - Bug 1218621 - Keep the service worker alive while the promise passed to FetchEvent.respondWith() settles; r=catalinb (653633c136) - Bug 1212636 - Add a better error message for the content corrupcted error caused by the Promise being passed to FetchEvent.respondWith; r=bkelly (d6ebabc2f2) - Bug 1215140 P4 Make service worker respondWith() use channel ConsoleReportCollector. r=bz (0e07f364d4) - Bug 1218499 - Make FetchEvent.request nullable; r=bzbarsky (850630ea6d) - Bug 1179397 - Disallow FetchEvent.respondWith() when the dispatch flag is unset; r=jdm (2e57abf1c6) - Bug 1215140 P5 Report the line number where respondWith() was called. r=bz (484e385ce3) - Bug 1161239 - Emit a warning if the respondWith handler is resolved with a non-Object value; r=baku (cf2779f827) - Bug 1181054 - Part 1: Move FormFillIterator and FormDataParser to FetchUtil.cpp; r=bkelly (9f62174f72) - Bug 1181054 - Part 2: Refactor the code to extract an HTTP header from a buffer from FormDataParser; r=bkelly (7f57f76ce1) - Bug 1181054 - Part 3: Correctly handle upload channels that have embedded body headers when dispatching a FetchEvent; r=bkelly (ebbfac4419) - ug 1181054 - Part 4: Make fetch-event.https.html pass; r=bkelly (b2d88a3f5b) - Bug 1215140 P6 Update service worker interception error strings to include detailed parameters. r=bz (7918278f09) - Bug 1219852 P1 Extract common JS values for rejected respondWith() promises. r=bz (12a6beed6c) - Bug 1219852 P2 Report non-response values passed to FetchEvent.respondWith(). r=bz (69fdad9d5f) - Bug 1207068 - Implement ExtendableMessageEvent interface. r=baku (29fd7c1c59) - Bug 1224061: Make Event::InitEvent infallible. r=smaug Bug 1224061 followup to fix bustage. r=me on a CLOSED TREE IGNORE IDL (b4fc91b14b) - Bug 1205109 - Make pushsubscriptionchange extendable. r=mt (abb45ac864) - Bug 1207491 - Part 8: Remove use of expression closure from browser/omponents/nsBrowserContentHandler.js. r=Gijs (98dcb2cbee) - Bug 1182571: Followup bustage fix from merge fail. CLOSED TREE (5062c88996) - Bug 1213646: Allow URI_IS_UI_RESOURCE and safe about: URIs when SEC_ALLOW_CHROME is set. r=bz (6ca4e2322f) - Bug 1191645 - Use channel->asycnOpen2 in dom/base/nsSyncLoadService.cpp. r=sicking (3fbd471f6b) - Bug 1194526 - Use channel->asycnOpen2 in dom/base/nsScriptLoader.cpp (r=sicking) (7207efa45b) - Bug 1084009 - Part 1/3 - Parse sync scripts off the main thread. r=smaug (72f4d5c749) - Bug 1084009 - Part 2/3 - Only parse scripts off-main-thread on multicore systems. r=luke (ffb7e2270e) - Bug 1209193 - Cache PR_GetNumberOfProcessors when checking to do off-main-thread script compilation. r=luke (c514373ad7) - Bug 663570 - MetaCSP Part 7: CSP preload validation (r=bz) (5398116f85) - Bug 1207863 - Fix ScopeIter iterating a strict eval frame that errored out before its CallObject was allocated. (r=jorendorff) (ae38882b7c) - Bug 1223006 - Fix some typo in spidermonkey's comments. r=nbp (7d49536a0f) - Bug 1223490 - Use stable hashing for InnerViewTable; r=jonco (12b4329982)
187 lines
6.0 KiB
HTML
187 lines
6.0 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<!--
|
|
Bug 1185544: Add data delivery to the WebSocket backend.
|
|
|
|
Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/licenses/publicdomain/
|
|
|
|
-->
|
|
<head>
|
|
<title>Test for Bug 1185544</title>
|
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="text/javascript" src="/tests/dom/push/test/webpush.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
|
|
</head>
|
|
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1185544">Mozilla Bug 1185544</a>
|
|
<p id="display"></p>
|
|
<div id="content" style="display: none">
|
|
|
|
</div>
|
|
<pre id="test">
|
|
</pre>
|
|
|
|
<script class="testbody" type="text/javascript">
|
|
|
|
var registration;
|
|
|
|
function start() {
|
|
return navigator.serviceWorker.register("worker.js" + "?" + (Math.random()), {scope: "."})
|
|
.then(swr => { registration = swr; return swr; });
|
|
}
|
|
|
|
var controlledFrame;
|
|
function createControlledIFrame(swr) {
|
|
var p = new Promise(function(res, rej) {
|
|
var iframe = document.createElement('iframe');
|
|
iframe.id = "controlledFrame";
|
|
iframe.src = "http://mochi.test:8888/tests/dom/push/test/frame.html";
|
|
|
|
iframe.onload = function() {
|
|
res(swr)
|
|
}
|
|
controlledFrame = iframe;
|
|
document.body.appendChild(iframe);
|
|
});
|
|
return p;
|
|
}
|
|
|
|
function subscribe(swr) {
|
|
return swr.pushManager.subscribe();
|
|
}
|
|
|
|
function sendRequestToWorker(request) {
|
|
return new Promise((resolve, reject) => {
|
|
var channel = new MessageChannel();
|
|
channel.port1.onmessage = e => {
|
|
(e.data.error ? reject : resolve)(e.data);
|
|
};
|
|
registration.active.postMessage(request, [channel.port2]);
|
|
});
|
|
}
|
|
|
|
function comparePublicKey(pushSubscription) {
|
|
// FIXME(kitcambridge): Enable when `ServiceWorkerMessageEvent` is
|
|
// implemented (bug 1143717).
|
|
return Promise.resolve(pushSubscription);
|
|
/*
|
|
return sendRequestToWorker({ type: "publicKey" }).then(data => {
|
|
return registration.pushManager.getSubscription().then(
|
|
pushSubscription => {
|
|
isDeeply(pushSubscription.getKey("p256dh"), data,
|
|
"Mismatched key share");
|
|
return pushSubscription;
|
|
});
|
|
});
|
|
*/
|
|
}
|
|
|
|
function waitForMessage(pushSubscription, message) {
|
|
return Promise.all([
|
|
controlledFrame.contentWindow.waitOnPushMessage(pushSubscription),
|
|
webpush(pushSubscription, message),
|
|
]).then(([message]) => message);
|
|
}
|
|
|
|
function sendPushMessageFromPage(pushSubscription) {
|
|
var typedArray = new Uint8Array([226, 130, 40, 240, 40, 140, 188]);
|
|
var json = { hello: "world" };
|
|
return waitForMessage(pushSubscription, "Text message from page")
|
|
.then(message => {
|
|
is(message.data.text, "Text message from page", "Wrong text message data");
|
|
return waitForMessage(
|
|
pushSubscription,
|
|
typedArray
|
|
);
|
|
}).then(message => {
|
|
isDeeply(new Uint8Array(message.data.arrayBuffer), typedArray,
|
|
"Wrong array buffer message data");
|
|
return waitForMessage(
|
|
pushSubscription,
|
|
JSON.stringify(json)
|
|
);
|
|
}).then(message => {
|
|
ok(message.data.json.ok, "Unexpected error parsing JSON");
|
|
isDeeply(message.data.json.value, json, "Wrong JSON message data");
|
|
return waitForMessage(
|
|
pushSubscription,
|
|
""
|
|
);
|
|
}).then(message => {
|
|
ok(message, "Should include data for empty messages");
|
|
is(message.data.text, "", "Wrong text for empty message");
|
|
is(message.data.arrayBuffer.byteLength, 0, "Wrong buffer length for empty message");
|
|
ok(!message.data.json.ok, "Expected JSON parse error for empty message");
|
|
return waitForMessage(
|
|
pushSubscription,
|
|
new Uint8Array([0x48, 0x69, 0x21, 0x20, 0xf0, 0x9f, 0x91, 0x80])
|
|
);
|
|
}).then(message => {
|
|
is(message.data.text, "Hi! \ud83d\udc40", "Wrong text for message with emoji");
|
|
return new Promise((resolve, reject) => {
|
|
var reader = new FileReader();
|
|
reader.onloadend = event => {
|
|
if (reader.error) {
|
|
reject(reader.error);
|
|
} else {
|
|
resolve(reader.result);
|
|
}
|
|
};
|
|
reader.readAsText(message.data.blob);
|
|
});
|
|
}).then(text => {
|
|
is(text, "Hi! \ud83d\udc40", "Wrong blob data for message with emoji");
|
|
is(text, "Hi! \ud83d\udc40", "Wrong blob data for message with emoji");
|
|
// Send a blank message.
|
|
return Promise.all([
|
|
controlledFrame.contentWindow.waitOnPushMessage(pushSubscription),
|
|
fetch("http://mochi.test:8888/tests/dom/push/test/push-server.sjs", {
|
|
method: "PUT",
|
|
headers: {
|
|
"X-Push-Method": "POST",
|
|
"X-Push-Server": pushSubscription.endpoint,
|
|
},
|
|
}),
|
|
]).then(([message]) => message);
|
|
}).then(message => {
|
|
ok(!message.data, "Should exclude data for blank messages");
|
|
return pushSubscription;
|
|
});
|
|
}
|
|
|
|
function unsubscribe(pushSubscription) {
|
|
controlledFrame.parentNode.removeChild(controlledFrame);
|
|
controlledFrame = null;
|
|
return pushSubscription.unsubscribe();
|
|
}
|
|
|
|
function unregister() {
|
|
return registration.unregister();
|
|
}
|
|
|
|
function runTest() {
|
|
start()
|
|
.then(createControlledIFrame)
|
|
.then(subscribe)
|
|
.then(comparePublicKey)
|
|
.then(sendPushMessageFromPage)
|
|
.then(unsubscribe)
|
|
.then(unregister)
|
|
.catch(function(e) {
|
|
ok(false, "Some test failed with error " + e);
|
|
}).then(SimpleTest.finish);
|
|
}
|
|
|
|
SpecialPowers.pushPrefEnv({"set": [
|
|
["dom.push.enabled", true],
|
|
["dom.serviceWorkers.exemptFromPerDomainMax", true],
|
|
["dom.serviceWorkers.enabled", true],
|
|
["dom.serviceWorkers.testing.enabled", true]
|
|
]}, runTest);
|
|
SpecialPowers.addPermission("desktop-notification", true, document);
|
|
SimpleTest.waitForExplicitFinish();
|
|
</script>
|
|
</body>
|
|
</html>
|