diff options
Diffstat (limited to 'toolkit/components/windowcreator/test')
24 files changed, 792 insertions, 0 deletions
diff --git a/toolkit/components/windowcreator/test/320x240.ogv b/toolkit/components/windowcreator/test/320x240.ogv Binary files differnew file mode 100644 index 0000000000..093158432a --- /dev/null +++ b/toolkit/components/windowcreator/test/320x240.ogv diff --git a/toolkit/components/windowcreator/test/browser.toml b/toolkit/components/windowcreator/test/browser.toml new file mode 100644 index 0000000000..44a971ab41 --- /dev/null +++ b/toolkit/components/windowcreator/test/browser.toml @@ -0,0 +1,18 @@ +[DEFAULT] + +["browser_bug1204626.js"] +support-files = [ + "bug1204626_doc0.html", + "bug1204626_doc1.html", +] + +["browser_persist.js"] +support-files = [ + "file_persist_srcset.html", + "file_persist_svg.html", + "file_persist_picture_source.html", + "file_persist_image.png", +] + +["browser_save_form_input_state.js"] +support-files = ["file_form_state.html"] diff --git a/toolkit/components/windowcreator/test/browser_bug1204626.js b/toolkit/components/windowcreator/test/browser_bug1204626.js new file mode 100644 index 0000000000..84dbf5080a --- /dev/null +++ b/toolkit/components/windowcreator/test/browser_bug1204626.js @@ -0,0 +1,88 @@ +/* eslint-disable mozilla/no-arbitrary-setTimeout */ +"use strict"; // -*- js-indent-level: 2; indent-tabs-mode: nil -*- +const contentBase = + "https://example.com/browser/toolkit/components/windowcreator/test/"; +const chromeBase = + "chrome://mochitests/content/browser/toolkit/components/windowcreator/test/"; +const testPageURL = contentBase + "bug1204626_doc0.html"; + +function one_test(delay, continuation) { + let delayStr = delay === null ? "no delay" : "delay = " + delay + "ms"; + let browser; + + BrowserTestUtils.openNewForegroundTab(gBrowser, testPageURL).then(tab => { + browser = tab.linkedBrowser; + let persistable = browser.frameLoader; + persistable.startPersistence(null, { + onDocumentReady, + onError(status) { + ok(false, new Components.Exception("startPersistence failed", status)); + continuation(); + }, + }); + }); + + function onDocumentReady(doc) { + const nameStem = "test_bug1204626_" + Date.now(); + let wbp = Cc[ + "@mozilla.org/embedding/browser/nsWebBrowserPersist;1" + ].createInstance(Ci.nsIWebBrowserPersist); + let tmp = Services.dirsvc.get("TmpD", Ci.nsIFile); + let tmpFile = tmp.clone(); + tmpFile.append(nameStem + "_saved.html"); + let tmpDir = tmp.clone(); + tmpDir.append(nameStem + "_files"); + + registerCleanupFunction(function cleanUp() { + if (tmpFile.exists()) { + tmpFile.remove(/* recursive: */ false); + } + if (tmpDir.exists()) { + tmpDir.remove(/* recursive: */ true); + } + }); + + wbp.progressListener = { + onProgressChange() {}, + onLocationChange() {}, + onStatusChange() {}, + onSecurityChange() {}, + onContentBlockingEvent() {}, + onStateChange(_wbp, _req, state, _status) { + if ((state & Ci.nsIWebProgressListener.STATE_STOP) == 0) { + return; + } + ok(true, "Finished save (" + delayStr + ") but might have crashed."); + continuation(); + }, + }; + + function doSave() { + wbp.saveDocument(doc, tmpFile, tmpDir, null, 0, 0); + } + if (delay === null) { + doSave(); + } else { + setTimeout(doSave, delay); + } + SpecialPowers.spawn(browser, [], () => { + content.window.close(); + }); + } +} + +function test() { + waitForExplicitFinish(); + // 0ms breaks having the actor under PBrowser, but not 10ms. + // 10ms provokes the double-__delete__, but not 0ms. + // And a few others, just in case. + const testRuns = [null, 0, 10, 0, 10, 20, 50, 100]; + let i = 0; + (function next_test() { + if (i < testRuns.length) { + one_test(testRuns[i++], next_test); + } else { + finish(); + } + })(); +} diff --git a/toolkit/components/windowcreator/test/browser_persist.js b/toolkit/components/windowcreator/test/browser_persist.js new file mode 100644 index 0000000000..54ab889aac --- /dev/null +++ b/toolkit/components/windowcreator/test/browser_persist.js @@ -0,0 +1,105 @@ +"use strict"; // -*- js-indent-level: 2; indent-tabs-mode: nil -*- + +Services.scriptloader.loadSubScript( + "chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js", + this +); + +const contentBase = + "https://example.com/browser/toolkit/components/windowcreator/test/"; +const chromeBase = + "chrome://mochitests/content/browser/toolkit/components/windowcreator/test/"; + +// Checks that the source and target documents are the same. +const REFTESTS = [ + "file_persist_srcset.html", + "file_persist_picture_source.html", + "file_persist_svg.html", + // ... +]; + +async function persist(name, uri) { + return BrowserTestUtils.withNewTab(uri, async function (browser) { + // Snapshot the doc as loaded, this is our reference. + info("snapshotting reference"); + let reference = await snapshotWindow(browser); + + info("starting persistence"); + let doc = await new Promise(function (resolve) { + browser.frameLoader.startPersistence(null, { + onDocumentReady(d) { + resolve(d); + }, + onError(e) { + ok(false, "startPersistence failed: " + e); + }, + }); + }); + + let wbp = Cc[ + "@mozilla.org/embedding/browser/nsWebBrowserPersist;1" + ].createInstance(Ci.nsIWebBrowserPersist); + let tmp = Services.dirsvc.get("TmpD", Ci.nsIFile); + let tmpFile = tmp.clone(); + tmpFile.append(name + "_saved.html"); + let tmpDir = tmp.clone(); + tmpDir.append(name + "_files"); + + registerCleanupFunction(function cleanUp() { + if (tmpFile.exists()) { + tmpFile.remove(/* recursive = */ false); + } + if (tmpDir.exists()) { + tmpDir.remove(/* recursive = */ true); + } + }); + + info("persisting document"); + // Wait for the persisted document. + await new Promise(function (resolve) { + wbp.progressListener = { + onProgressChange() {}, + onLocationChange() {}, + onStatusChange() {}, + onSecurityChange() {}, + onContentBlockingEvent() {}, + onStateChange(_wbp, _req, state, _status) { + if (state & Ci.nsIWebProgressListener.STATE_STOP) { + resolve(); + } + }, + }; + + wbp.saveDocument(doc, tmpFile, tmpDir, null, 0, 0); + }); + + info("load done, loading persisted document"); + let fileUri = Services.io.newFileURI(tmpFile).spec; + let test = await BrowserTestUtils.withNewTab( + fileUri, + async function (persistedBrowser) { + info("snapshotting persisted document"); + return snapshotWindow(persistedBrowser); + } + ); + return { test, reference }; + }); +} + +add_task(async function () { + for (let filename of REFTESTS) { + let uri = contentBase + filename; + let { test, reference } = await persist(filename, uri); + let expectEqual = true; + let [same, testUri, refUri] = compareSnapshots( + test, + reference, + expectEqual + ); + ok(same, "test and references should match"); + if (!same) { + info(testUri); + info(refUri); + } + } +}); diff --git a/toolkit/components/windowcreator/test/browser_save_form_input_state.js b/toolkit/components/windowcreator/test/browser_save_form_input_state.js new file mode 100644 index 0000000000..6992c29c85 --- /dev/null +++ b/toolkit/components/windowcreator/test/browser_save_form_input_state.js @@ -0,0 +1,131 @@ +/* Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const TEST_PATH = getRootDirectory(gTestPath).replace( + "chrome://mochitests/content", + "http://example.com" +); + +var textareas = ["a-textbox", "a-prefilled-textbox"]; +var textboxes = ["a-text", "a-prefilled-text"]; + +/** + * Ported from mochitest, this test verifies that form state is saved by our + * webbrowserpersist code. See bug 293834 for context. + */ +add_task(async function checkFormStateSaved() { + await BrowserTestUtils.withNewTab( + TEST_PATH + "file_form_state.html", + async browser => { + await SpecialPowers.spawn(browser, [{ textareas, textboxes }], fillform); + let fileURISpec = await new Promise((resolve, reject) => { + let stack = Components.stack.caller; + browser.frameLoader.startPersistence(null, { + onDocumentReady(document) { + // Note that 'document' here is going to be an nsIWebBrowserPersistDocument, + // not a regular DOM document. + resolve(persistDocument(document)); + }, + onError(status) { + reject( + Components.Exception( + "saveBrowser failed asynchronously in startPersistence", + status, + stack + ) + ); + }, + }); + }); + await BrowserTestUtils.withNewTab(fileURISpec, async otherBrowser => { + await SpecialPowers.spawn( + otherBrowser, + [{ textareas, textboxes }], + checkform + ); + }); + } + ); +}); + +// eslint-disable-next-line no-shadow +function fillform({ textareas, textboxes }) { + let doc = content.document; + for (let i in textareas) { + doc.getElementById(textareas[i]).textContent += "form state"; + } + for (let i in textboxes) { + doc.getElementById(textboxes[i]).value += "form state"; + } + doc.getElementById("a-checkbox").checked = true; + doc.getElementById("radioa").checked = true; + doc.getElementById("aselect").selectedIndex = 0; +} + +// eslint-disable-next-line no-shadow +function checkform({ textareas, textboxes }) { + let doc = content.document; + for (let i in textareas) { + var textContent = doc.getElementById(textareas[i]).textContent; + Assert.ok( + /form\s+state/m.test(textContent), + "Modified textarea " + textareas[i] + " form state should be preserved!" + ); + } + for (let i in textboxes) { + var value = doc.getElementById(textboxes[i]).value; + Assert.ok( + /form\s+state/m.test(value), + "Modified textbox " + textboxes[i] + " form state should be preserved!" + ); + } + Assert.ok( + doc.getElementById("a-checkbox").checked, + "Modified checkbox checked state should be preserved!" + ); + Assert.ok( + doc.getElementById("radioa").checked, + "Modified radio checked state should be preserved!" + ); + Assert.equal( + doc.getElementById("aselect").selectedIndex, + 0, + "Modified select selected index should be preserved" + ); +} + +function getTempDir() { + return Services.dirsvc.get("TmpD", Ci.nsIFile); +} + +function persistDocument(aDoc) { + const nsIWBP = Ci.nsIWebBrowserPersist; + const persistFlags = + nsIWBP.PERSIST_FLAGS_REPLACE_EXISTING_FILES | + nsIWBP.PERSIST_FLAGS_FROM_CACHE | + nsIWBP.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION; + const encodingFlags = nsIWBP.ENCODE_FLAGS_ENCODE_BASIC_ENTITIES; + + var file = getTempDir(); + file.append("bug293834-serialized.html"); + + var persist = Cc[ + "@mozilla.org/embedding/browser/nsWebBrowserPersist;1" + ].createInstance(Ci.nsIWebBrowserPersist); + persist.progressListener = null; + persist.persistFlags = persistFlags; + const kWrapColumn = 80; + var folder = getTempDir(); + folder.append("bug293834-serialized"); + persist.saveDocument( + aDoc, + file, + folder, + "text/html", + encodingFlags, + kWrapColumn + ); + return Services.io.newFileURI(file).spec; +} diff --git a/toolkit/components/windowcreator/test/bug1170334_iframe.xml b/toolkit/components/windowcreator/test/bug1170334_iframe.xml new file mode 100644 index 0000000000..1821e07f96 --- /dev/null +++ b/toolkit/components/windowcreator/test/bug1170334_iframe.xml @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?> +<?xml-stylesheet href="bug1170334_style.css" type="text/css" title=""?>FAIL"?> +<thing/> diff --git a/toolkit/components/windowcreator/test/bug1170334_style.css b/toolkit/components/windowcreator/test/bug1170334_style.css new file mode 100644 index 0000000000..476c22b695 --- /dev/null +++ b/toolkit/components/windowcreator/test/bug1170334_style.css @@ -0,0 +1 @@ +/* This stylesheet intentionally left blank. */ diff --git a/toolkit/components/windowcreator/test/bug1204626_doc0.html b/toolkit/components/windowcreator/test/bug1204626_doc0.html new file mode 100644 index 0000000000..cbced762c3 --- /dev/null +++ b/toolkit/components/windowcreator/test/bug1204626_doc0.html @@ -0,0 +1,3 @@ +<!DOCTYPE html> +<p>This is a document, and it contains an iframe:</p> +<iframe src="bug1204626_doc1.html"></iframe> diff --git a/toolkit/components/windowcreator/test/bug1204626_doc1.html b/toolkit/components/windowcreator/test/bug1204626_doc1.html new file mode 100644 index 0000000000..cffc283d2c --- /dev/null +++ b/toolkit/components/windowcreator/test/bug1204626_doc1.html @@ -0,0 +1,5 @@ +<!DOCTYPE html> +<p>This is the document inside the iframe. <small>(Currently this +document doesn't even need to exist in order to reproduce the bug in +question, as long as the parent contains a frame, but it's probably +best not to depend on that.)</small></p> diff --git a/toolkit/components/windowcreator/test/bug449141_page.html b/toolkit/components/windowcreator/test/bug449141_page.html new file mode 100644 index 0000000000..3b8e3f550a --- /dev/null +++ b/toolkit/components/windowcreator/test/bug449141_page.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> + +<html> + <head> + <title>Nested iframe for bug 449141</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + </head> + <body> + <video src='320x240.ogv'></video> + </body> +</html> diff --git a/toolkit/components/windowcreator/test/chrome.toml b/toolkit/components/windowcreator/test/chrome.toml new file mode 100644 index 0000000000..0fdc8250e0 --- /dev/null +++ b/toolkit/components/windowcreator/test/chrome.toml @@ -0,0 +1,14 @@ +[DEFAULT] +support-files = [ + "320x240.ogv", + "bug449141_page.html", + "bug1170334_iframe.xml", + "bug1170334_style.css", +] + +["test_bug1170334_wbp_xmlstyle.html"] + +["test_bug1192654.html"] + +["test_bug449141.html"] +skip-if = ["os == 'android'"] diff --git a/toolkit/components/windowcreator/test/file_form_state.html b/toolkit/components/windowcreator/test/file_form_state.html new file mode 100644 index 0000000000..b5e4cd4ada --- /dev/null +++ b/toolkit/components/windowcreator/test/file_form_state.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> + +<html> + <head> + <title>Nested iframe for bug 293834</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + </head> + <body> + <form> + not prefilled: <input id="a-text" type="text"></input><br> + prefilled: <input id="a-prefilled-text" type="text" value="prefill "></input><br> + + <input name="a-radio" id="radioa" value="radio-a" type="radio">Should be saved checked</input><br> + <input name="a-radio" value="radio-c" type="radio" checked="true">Initially checked</input><br> + <select id="aselect"> + <option value="target">Should be saved selected</option> + <option value="default" selected="selected">Default Selected</option> + </select><br> + not prefilled: <textarea id="a-textbox"></textarea><br> + prefilled: <textarea id="a-prefilled-textbox">prefill </textarea><br> + <input id="a-checkbox" type="checkbox">Should be saved checked</input><br> + <input id="a-prefilled-checkbox" type="checkbox" checked="true">Initiallly checked</input><br> + </form> + </body> +</html> diff --git a/toolkit/components/windowcreator/test/file_persist_image.png b/toolkit/components/windowcreator/test/file_persist_image.png Binary files differnew file mode 100644 index 0000000000..820f8cace2 --- /dev/null +++ b/toolkit/components/windowcreator/test/file_persist_image.png diff --git a/toolkit/components/windowcreator/test/file_persist_picture_source.html b/toolkit/components/windowcreator/test/file_persist_picture_source.html new file mode 100644 index 0000000000..26988cbf78 --- /dev/null +++ b/toolkit/components/windowcreator/test/file_persist_picture_source.html @@ -0,0 +1,5 @@ +<!doctype html> +<picture> + <source srcset="file_persist_image.png"> + <img width=100 height=100> +</picture> diff --git a/toolkit/components/windowcreator/test/file_persist_srcset.html b/toolkit/components/windowcreator/test/file_persist_srcset.html new file mode 100644 index 0000000000..46f9318ad9 --- /dev/null +++ b/toolkit/components/windowcreator/test/file_persist_srcset.html @@ -0,0 +1,3 @@ +<!doctype html> +<img width=100 height=100 srcset="file_persist_image.png" onerror="this.alt = location.href;" alt="FAIL"> +<img width=100 height=100 srcset="file_persist_image.png 1x, file_persist_image.png 2x, file_persist_image.png 100w, file_persist_image_bad.png"> diff --git a/toolkit/components/windowcreator/test/file_persist_svg.html b/toolkit/components/windowcreator/test/file_persist_svg.html new file mode 100644 index 0000000000..55de728352 --- /dev/null +++ b/toolkit/components/windowcreator/test/file_persist_svg.html @@ -0,0 +1,5 @@ +<!doctype html> +<svg> + <image href="file_persist_image.png"/> + <image x="100" xlink:href="file_persist_image.png"/> +</svg> diff --git a/toolkit/components/windowcreator/test/mochitest.toml b/toolkit/components/windowcreator/test/mochitest.toml new file mode 100644 index 0000000000..9133e90ad7 --- /dev/null +++ b/toolkit/components/windowcreator/test/mochitest.toml @@ -0,0 +1,12 @@ +[DEFAULT] + +["test_private_window_from_content.html"] + +["test_window_open_position_constraint.html"] +skip-if = [ + "os == 'android'", + "display == 'wayland' && os_version == '22.04'", # Bug 1857074 +] + +["test_window_open_units.html"] +skip-if = ["os == 'android'"] diff --git a/toolkit/components/windowcreator/test/moz.build b/toolkit/components/windowcreator/test/moz.build new file mode 100644 index 0000000000..ce4123f4af --- /dev/null +++ b/toolkit/components/windowcreator/test/moz.build @@ -0,0 +1,9 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# 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/. + +MOCHITEST_MANIFESTS += ["mochitest.toml"] +MOCHITEST_CHROME_MANIFESTS += ["chrome.toml"] +BROWSER_CHROME_MANIFESTS += ["browser.toml"] diff --git a/toolkit/components/windowcreator/test/test_bug1170334_wbp_xmlstyle.html b/toolkit/components/windowcreator/test/test_bug1170334_wbp_xmlstyle.html new file mode 100644 index 0000000000..89c160a50f --- /dev/null +++ b/toolkit/components/windowcreator/test/test_bug1170334_wbp_xmlstyle.html @@ -0,0 +1,77 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1170334 +--> +<head> + <title>Test for Bug 1170334 (nsWebBrowserPersist vs. XML stylesheets)</title> + <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" /> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1170334">Mozilla Bug 1170334</a> +<p id="display"></p> +<pre id="results"></pre> +<div id="content"> + <iframe src="bug1170334_iframe.xml" id="iframe"></iframe> +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> +const nameStem = "test_bug1170334_" + Date.now(); +const { Ci, Cc, Cu, Cr } = SpecialPowers; +let iframe = document.getElementById("iframe"); + +SimpleTest.waitForExplicitFinish(); + +iframe.onload = function iframe_onload1() { + let doc = iframe.contentDocument; + ok(doc, "iframe content document exists"); + + let wbp = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"] + .createInstance(Ci.nsIWebBrowserPersist); + let tmp = SpecialPowers.Services.dirsvc.get("TmpD", Ci.nsIFile); + let tmpFile = tmp.clone(); + tmpFile.append(nameStem + "_iframe.xml"); + let tmpDir = tmp.clone(); + tmpDir.append(nameStem + "_files"); + + // When the document in the iframe is saved, try to load the result. + wbp.progressListener = { + onProgressChange() {}, + onLocationChange() {}, + onStatusChange() {}, + onSecurityChange() {}, + onContentBlockingEvent() {}, + onStateChange: function wbp_stateChange(_wbp, _req, state, status) { + if ((state & Ci.nsIWebProgressListener.STATE_STOP) == 0) { + return; + } + is(status, Cr.NS_OK, "nsWebBrowserPersist status"); + iframe.onload = function iframe_onload2() { + let elem = iframe.contentDocument.documentElement; + is(elem && elem.tagName, "thing", "document element tag"); + if (elem && elem.tagName == "parsererror") { + ok(false, "Parser error: " + elem.textContent); + } + + cleanUp(); + SimpleTest.finish(); + }; + iframe.src = SpecialPowers.Services.io.newFileURI(tmpFile).spec; + }, + }; + wbp.saveDocument(doc, tmpFile, tmpDir, null, 0, 0); + + function cleanUp() { + if (tmpFile.exists()) { + tmpFile.remove(/* recursive: */ false); + } + if (tmpDir.exists()) { + tmpDir.remove(/* recursive: */ true); + } + } +}; +</script> +</pre> +</body> +</html> diff --git a/toolkit/components/windowcreator/test/test_bug1192654.html b/toolkit/components/windowcreator/test/test_bug1192654.html new file mode 100644 index 0000000000..8ec01630ff --- /dev/null +++ b/toolkit/components/windowcreator/test/test_bug1192654.html @@ -0,0 +1,77 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1192654 +--> +<head> + <title>Test for Bug 1192654 (nsWebBrowser vs. nonpersistable subdocuments)</title> + <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" /> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1192654">Mozilla Bug 1192654</a> +<p id="display"></p> +<pre id="results"></pre> +<div id="content"> + <!-- The outer iframe uses a data URI for simplicity; this would + also work if it were loaded from a support file by relative + URI. The inner iframe (the one nsWebBrowserPersist traverses) + uses a data URI because data: is a non-persistable scheme and + thus triggers the bug. + --> + <iframe src="data:text/html,<iframe%20src=%22data:text/plain,Example%22>" + id="iframe"></iframe> +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> +const nameStem = "test_bug1192654_" + Date.now(); +const { Ci, Cc, Cu, Cr } = SpecialPowers; +let iframe = document.getElementById("iframe"); + +SimpleTest.waitForExplicitFinish(); + +iframe.onload = function iframe_onload1() { + let doc = iframe.contentDocument; + ok(doc, "iframe content document exists"); + + let wbp = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"] + .createInstance(Ci.nsIWebBrowserPersist); + let tmp = SpecialPowers.Services.dirsvc.get("TmpD", Ci.nsIFile); + let tmpFile = tmp.clone(); + tmpFile.append(nameStem + "_iframe.xml"); + let tmpDir = tmp.clone(); + tmpDir.append(nameStem + "_files"); + + wbp.progressListener = { + onProgressChange() {}, + onLocationChange() {}, + onStatusChange() {}, + onSecurityChange() {}, + onContentBlockingEvent() {}, + onStateChange: wbp_stateChange, + }; + SimpleTest.registerCleanupFunction(cleanUp); + + wbp.saveDocument(doc, tmpFile, tmpDir, null, 0, 0); + + function wbp_stateChange(_wbp, _req, state, status) { + if ((state & Ci.nsIWebProgressListener.STATE_STOP) == 0) { + return; + } + is(status, Cr.NS_OK, "nsWebBrowserPersist status"); + SimpleTest.finish(); + } + + function cleanUp() { + if (tmpFile.exists()) { + tmpFile.remove(/* recursive: */ false); + } + if (tmpDir.exists()) { + tmpDir.remove(/* recursive: */ true); + } + } +}; +</script> +</pre> +</body> +</html> diff --git a/toolkit/components/windowcreator/test/test_bug449141.html b/toolkit/components/windowcreator/test/test_bug449141.html new file mode 100644 index 0000000000..f178689599 --- /dev/null +++ b/toolkit/components/windowcreator/test/test_bug449141.html @@ -0,0 +1,96 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=449141 +--> +<head> + <title>Test for Bug 449141</title> + <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" /> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=449141">Mozilla Bug 449141</a> +<p id="display"> + +</p> +<pre id="results"></pre> +<div id="content" style="display: none"> + <iframe src="bug449141_page.html" id="source"></iframe> +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> +/** Test for Bug 449141 */ + +const Cc = SpecialPowers.Cc; +const Ci = SpecialPowers.Ci; + +function getTempDir() { + return SpecialPowers.Services.dirsvc.get("TmpD", Ci.nsIFile); +} + +// STATE_STOP from nsIWebProgressListener.idl +const STATE_STOP = 0x00000010; + +var progressListener = { + onProgressChange() { + /* Ignore progress callback */ + }, + onStateChange(aProgress, aRequest, aStateFlag, aStatus) { + if (aStateFlag & STATE_STOP) { + var dirExists = false; + var videoExists = false; + + var videoFile = getTempDir(); + videoFile.append(this.dirName); + dirExists = videoFile.exists(); + videoFile.append("320x240.ogv"); + videoExists = videoFile.exists(); + this.folder.remove(true); + this.file.remove(false); + ok(dirExists, "Directory containing video file should be created"); + ok(videoExists, "Video should be persisted with document"); + SimpleTest.finish(); + } + }, +}; + +function persistDocument(aDoc) { + const nsIWBP = Ci.nsIWebBrowserPersist; + const persistFlags = + nsIWBP.PERSIST_FLAGS_REPLACE_EXISTING_FILES + | nsIWBP.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION; + const encodingFlags = + nsIWBP.ENCODE_FLAGS_ENCODE_BASIC_ENTITIES; + + var id = Math.round(Math.random() * 10000); + var dirName = "bug449141_serialized" + id; + progressListener.dirName = dirName; + + var file = getTempDir(); + file.append("bug449141-serialized" + id + ".html"); + + var persist = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"] + .createInstance(Ci.nsIWebBrowserPersist); + persist.progressListener = progressListener; + persist.persistFlags = persistFlags; + const kWrapColumn = 80; + var folder = getTempDir(); + folder.append(dirName); + progressListener.folder = folder; + progressListener.file = file; + persist.saveDocument(aDoc, SpecialPowers.Services.io.newFileURI(file), + folder, + aDoc.contentType, + encodingFlags, kWrapColumn); +} + +SimpleTest.waitForExplicitFinish(); + +addLoadEvent(function() { + var srcDoc = document.getElementById("source").contentDocument; + persistDocument(srcDoc); +}); +</script> +</pre> +</body> +</html> diff --git a/toolkit/components/windowcreator/test/test_private_window_from_content.html b/toolkit/components/windowcreator/test/test_private_window_from_content.html new file mode 100644 index 0000000000..82ba0d9388 --- /dev/null +++ b/toolkit/components/windowcreator/test/test_private_window_from_content.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<script src="/tests/SimpleTest/SimpleTest.js"></script> +<script> + // Make sure that we cannot open private browsing windows from unprivileged content + var win = window.open("about:blank", "_blank", "private"); + ok(!SpecialPowers.isContentWindowPrivate(win)); + win.close(); + // Also, make sure that passing non-private doesn't make any difference either + win = window.open("about:blank", "_blank", "non-private"); + ok(!SpecialPowers.isContentWindowPrivate(win)); + win.close(); +</script> diff --git a/toolkit/components/windowcreator/test/test_window_open_position_constraint.html b/toolkit/components/windowcreator/test/test_window_open_position_constraint.html new file mode 100644 index 0000000000..80e2371ed1 --- /dev/null +++ b/toolkit/components/windowcreator/test/test_window_open_position_constraint.html @@ -0,0 +1,56 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 978847</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=978847">Mozilla Bug 978847</a> +<p id="display"></p> +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> +SimpleTest.waitForExplicitFinish(); + +SimpleTest.waitForFocus(function() { + var x; + var y; + + // window should be constrained to the screen rect, + // which we assume is less than 10000px square + var w1 = window.open("about:blank", "", "left=16000,top=16000,width=100,height=100"); + SimpleTest.waitForFocus(function() { + ok(w1.screenX < 10000 && w1.screenY < 10000, + "window should not be opened off-screen: got location " + + w1.screenX + "," + w1.screenY); + x = w1.screenX; + y = w1.screenY; + w1.close(); + + // larger window dimensions should result in a shift of the constrained location + var w2 = window.open("about:blank", "", "left=16000,top=16000,width=150,height=150"); + SimpleTest.waitForFocus(function() { + ok(w2.screenX == x - 50 && w2.screenY == y - 50, + "constrained window position did not depend on size as expected: got " + + w2.screenX + "," + w2.screenY + ", expected " + (x - 50) + "," + (y - 50)); + w2.close(); + + // now try with coordinates that are close to MAXINT, + // so adding width/height risks 32-bit integer overflow + var w3 = window.open("about:blank", "", "left=2147483600,top=2147483600,width=100,height=100"); + SimpleTest.waitForFocus(function() { + ok(w3.screenX < 10000 && w3.screenY < 10000, + "window should not be opened off-screen: got location " + + w3.screenX + "," + w3.screenY); + w3.close(); + SimpleTest.finish(); + }, w3, true); + }, w2, true); + }, w1, true); +}, window, false); + +</script> +</pre> +</body> +</html> diff --git a/toolkit/components/windowcreator/test/test_window_open_units.html b/toolkit/components/windowcreator/test/test_window_open_units.html new file mode 100644 index 0000000000..b6f75b7fe9 --- /dev/null +++ b/toolkit/components/windowcreator/test/test_window_open_units.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 594140</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <script src="/tests/SimpleTest/WindowSnapshot.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=594140">Mozilla Bug 594140</a> +<p id="display"></p> +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> +SimpleTest.waitForExplicitFinish(); + +SimpleTest.waitForFocus(function() { + SpecialPowers.setFullZoom(window, 2); + + var w = window.open("about:blank", "", "width=200,height=100"); + SimpleTest.waitForFocus(function() { + ok(w.innerWidth <= 402 && w.innerWidth >= 398, + "width (" + w.innerWidth + ") should be around twice what was requested (200)"); + ok(w.innerHeight <= 202 && w.innerHeight >= 198, + "height (" + w.innerHeight + ") should be around twice what was requested (100)"); + + SpecialPowers.setFullZoom(window, 1); + w.close(); + SimpleTest.finish(); + }, w, true); +}, window, false); + +</script> +</pre> +</body> +</html> |