diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /addon-sdk/source/test/addons/content-script-messages-latency/main.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'addon-sdk/source/test/addons/content-script-messages-latency/main.js')
-rw-r--r-- | addon-sdk/source/test/addons/content-script-messages-latency/main.js | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/addon-sdk/source/test/addons/content-script-messages-latency/main.js b/addon-sdk/source/test/addons/content-script-messages-latency/main.js new file mode 100644 index 000000000..39bd7b64b --- /dev/null +++ b/addon-sdk/source/test/addons/content-script-messages-latency/main.js @@ -0,0 +1,90 @@ +/* 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/. */ +"use strict"; + +const { PageMod } = require("sdk/page-mod"); +const tabs = require("sdk/tabs"); +const { startServerAsync } = require("./httpd"); +const { setTimeout } = require("sdk/timers"); + +const serverPort = 8099; + +exports.testContentScriptLatencyRegression = function*(assert) { + let server = startServerAsync(serverPort); + server.registerPathHandler("/", function handle(request, response) { + response.write(`<html> + <head> + <link rel="stylesheet" href="/slow.css"> + </head> + <body> + slow loading page... + </body> + </html>`); + }); + + server.registerPathHandler("/slow.css", function handle(request, response) { + response.processAsync(); + response.setHeader('Content-Type', 'text/css', false); + setTimeout(_ => { + response.write("body { background: red; }"); + response.finish(); + }, 2000); + }); + + + let pageMod; + + let worker = yield new Promise((resolve) => { + pageMod = PageMod({ + include: "http://localhost:8099/", + attachTo: "top", + contentScriptWhen: "start", + contentScript: "new " + function ContentScriptScope() { + self.port.on("a-port-message", function () { + self.port.emit("document-ready-state", document.readyState); + }); + }, + onAttach: function(w) { + resolve(w); + } + }); + + tabs.open({ + url: "http://localhost:8099/", + inBackground: true + }); + }); + + worker.port.emit("a-port-message"); + + let waitForPortMessage = new Promise((resolve) => { + worker.port.once("document-ready-state", (msg) => { + resolve(msg); + }); + }); + + let documentReadyState = yield waitForPortMessage; + + assert.notEqual( + "complete", documentReadyState, + "content script received the port message when the page was still loading" + ); + + assert.notEqual( + "uninitialized", documentReadyState, + "content script should be frozen if document.readyState is still uninitialized" + ); + + assert.ok( + ["loading", "interactive"].includes(documentReadyState), + "content script message received with document.readyState was interactive or loading" + ); + + // Cleanup. + pageMod.destroy(); + yield new Promise((resolve) => worker.tab.close(resolve)); + yield new Promise((resolve) => server.stop(resolve)); +}; + +require("sdk/test/runner").runTestsFromModule(module); |