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 /dom/browser-element/mochitest | |
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 'dom/browser-element/mochitest')
313 files changed, 11980 insertions, 0 deletions
diff --git a/dom/browser-element/mochitest/async.js b/dom/browser-element/mochitest/async.js new file mode 100644 index 000000000..d0007fa09 --- /dev/null +++ b/dom/browser-element/mochitest/async.js @@ -0,0 +1,78 @@ +/* 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/. */ + +/* + * This is an approximate implementation of ES7's async-await pattern. + * see: https://github.com/tc39/ecmascript-asyncawait + * + * It allows for simple creation of async function and "tasks". + * + * For example: + * + * var myThinger = { + * doAsynThing: async(function*(url){ + * var result = yield fetch(url); + * return process(result); + * }); + * } + * + * And Task-like things can be created as follows: + * + * var myTask = async(function*{ + * var result = yield fetch(url); + * return result; + * }); + * //returns a promise + * + * myTask().then(doSomethingElse); + * + */ + +(function(exports) { + "use strict"; + function async(func, self) { + return function asyncFunction() { + const functionArgs = Array.from(arguments); + return new Promise(function(resolve, reject) { + var gen; + if (typeof func !== "function") { + reject(new TypeError("Expected a Function.")); + } + //not a generator, wrap it. + if (func.constructor.name !== "GeneratorFunction") { + gen = (function*() { + return func.apply(self, functionArgs); + }()); + } else { + gen = func.apply(self, functionArgs); + } + try { + step(gen.next(undefined)); + } catch (err) { + reject(err); + } + + function step({value, done}) { + if (done) { + return resolve(value); + } + if (value instanceof Promise) { + return value.then( + result => step(gen.next(result)), + error => { + try { + step(gen.throw(error)); + } catch (err) { + throw err; + } + } + ).catch(err => reject(err)); + } + step(gen.next(value)); + } + }); + }; + } + exports.async = async; +}(this || self)); diff --git a/dom/browser-element/mochitest/audio.ogg b/dom/browser-element/mochitest/audio.ogg Binary files differnew file mode 100644 index 000000000..44ab64f81 --- /dev/null +++ b/dom/browser-element/mochitest/audio.ogg diff --git a/dom/browser-element/mochitest/browserElementTestHelpers.js b/dom/browser-element/mochitest/browserElementTestHelpers.js new file mode 100644 index 000000000..004b25333 --- /dev/null +++ b/dom/browser-element/mochitest/browserElementTestHelpers.js @@ -0,0 +1,306 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Helpers for managing the browser frame preferences. +"use strict"; + +function _getPath() { + return window.location.pathname + .substring(0, window.location.pathname.lastIndexOf('/')) + .replace("/priority", ""); +} + +const browserElementTestHelpers = { + _getBoolPref: function(pref) { + try { + return SpecialPowers.getBoolPref(pref); + } + catch (e) { + return undefined; + } + }, + + _setPref: function(pref, value) { + this.lockTestReady(); + if (value !== undefined && value !== null) { + SpecialPowers.pushPrefEnv({'set': [[pref, value]]}, this.unlockTestReady.bind(this)); + } else { + SpecialPowers.pushPrefEnv({'clear': [[pref]]}, this.unlockTestReady.bind(this)); + } + }, + + _setPrefs: function() { + this.lockTestReady(); + SpecialPowers.pushPrefEnv({'set': Array.slice(arguments)}, this.unlockTestReady.bind(this)); + }, + + _testReadyLockCount: 0, + _firedTestReady: false, + lockTestReady: function() { + this._testReadyLockCount++; + }, + + unlockTestReady: function() { + this._testReadyLockCount--; + if (this._testReadyLockCount == 0 && !this._firedTestReady) { + this._firedTestReady = true; + dispatchEvent(new Event("testready")); + } + }, + + enableProcessPriorityManager: function() { + this._setPrefs( + ['dom.ipc.processPriorityManager.BACKGROUND.LRUPoolLevels', 2], + ['dom.ipc.processPriorityManager.BACKGROUND_PERCEIVABLE.LRUPoolLevels', 2], + ['dom.ipc.processPriorityManager.testMode', true], + ['dom.ipc.processPriorityManager.enabled', true] + ); + }, + + setClipboardPlainTextOnlyPref: function(value) { + this._setPref('clipboard.plainTextOnly', value); + }, + + setEnabledPref: function(value) { + this._setPrefs(['dom.mozBrowserFramesEnabled', value], + ['network.disable.ipc.security', value]); + }, + + setupAccessibleCaretPref: function() { + this._setPref('layout.accessiblecaret.enabled', true); + // Disable hide carets for mouse input for select-all tests so that we can + // get mozbrowsercaretstatechanged events. + this._setPref('layout.accessiblecaret.hide_carets_for_mouse_input', false); + }, + + getOOPByDefaultPref: function() { + return this._getBoolPref("dom.ipc.browser_frames.oop_by_default"); + }, + + addPermission: function() { + this.lockTestReady(); + SpecialPowers.pushPermissions( + [{'type': "browser", 'allow': 1, 'context': document}], + this.unlockTestReady.bind(this)); + }, + + _observers: [], + + // This function is a wrapper which lets you register an observer to one of + // the process priority manager's test-only topics. observerFn should be a + // function which takes (subject, topic, data). + // + // We'll clean up any observers you add at the end of the test. + addProcessPriorityObserver: function(processPriorityTopic, observerFn) { + var topic = "process-priority-manager:TEST-ONLY:" + processPriorityTopic; + + // SpecialPowers appears to require that the observer be an object, not a + // function. + var observer = { + observe: observerFn + }; + + SpecialPowers.addObserver(observer, topic, /* weak = */ false); + this._observers.push([observer, topic]); + }, + + cleanUp: function() { + for (var i = 0; i < this._observers.length; i++) { + SpecialPowers.removeObserver(this._observers[i][0], + this._observers[i][1]); + } + }, + + // Some basically-empty pages from different domains you can load. + 'emptyPage1': 'http://example.com' + _getPath() + '/file_empty.html', + 'fileEmptyPage1': 'file_empty.html', + 'emptyPage2': 'http://example.org' + _getPath() + '/file_empty.html', + 'emptyPage3': 'http://test1.example.org' + _getPath() + '/file_empty.html', + 'focusPage': 'http://example.org' + _getPath() + '/file_focus.html', +}; + +// Returns a promise which is resolved when a subprocess is created. The +// argument to resolve() is the childID of the subprocess. +function expectProcessCreated(/* optional */ initialPriority) { + return new Promise(function(resolve, reject) { + var observed = false; + browserElementTestHelpers.addProcessPriorityObserver( + "process-created", + function(subject, topic, data) { + // Don't run this observer twice, so we don't ok(true) twice. (It's fine + // to resolve a promise twice; the second resolve() call does nothing.) + if (observed) { + return; + } + observed = true; + + var childID = parseInt(data); + ok(true, 'Got new process, id=' + childID); + if (initialPriority) { + expectPriorityChange(childID, initialPriority).then(function() { + resolve(childID); + }); + } else { + resolve(childID); + } + } + ); + }); +} + +// Just like expectProcessCreated(), except we'll call ok(false) if a second +// process is created. +function expectOnlyOneProcessCreated(/* optional */ initialPriority) { + var p = expectProcessCreated(initialPriority); + p.then(function() { + expectProcessCreated().then(function(childID) { + ok(false, 'Got unexpected process creation, childID=' + childID); + }); + }); + return p; +} + +// Returns a promise which is resolved or rejected the next time the process +// childID changes its priority. We resolve if the priority matches +// expectedPriority, and we reject otherwise. + +function expectPriorityChange(childID, expectedPriority) { + return new Promise(function(resolve, reject) { + var observed = false; + browserElementTestHelpers.addProcessPriorityObserver( + 'process-priority-set', + function(subject, topic, data) { + if (observed) { + return; + } + + var [id, priority] = data.split(":"); + if (id != childID) { + return; + } + + // Make sure we run the is() calls in this observer only once, otherwise + // we'll expect /every/ priority change to match expectedPriority. + observed = true; + + is(priority, expectedPriority, + 'Expected priority of childID ' + childID + + ' to change to ' + expectedPriority); + + if (priority == expectedPriority) { + resolve(); + } else { + reject(); + } + } + ); + }); +} + +// Returns a promise which is resolved or rejected the next time the +// process childID changes its priority. We resolve if the expectedPriority +// matches the priority and the LRU parameter matches expectedLRU and we +// reject otherwise. + +function expectPriorityWithLRUSet(childID, expectedPriority, expectedLRU) { + return new Promise(function(resolve, reject) { + var observed = false; + browserElementTestHelpers.addProcessPriorityObserver( + 'process-priority-with-LRU-set', + function(subject, topic, data) { + if (observed) { + return; + } + + var [id, priority, lru] = data.split(":"); + if (id != childID) { + return; + } + + // Make sure we run the is() calls in this observer only once, + // otherwise we'll expect /every/ priority/LRU change to match + // expectedPriority/expectedLRU. + observed = true; + + is(lru, expectedLRU, + 'Expected LRU ' + lru + + ' of childID ' + childID + + ' to change to ' + expectedLRU); + + if ((priority == expectedPriority) && (lru == expectedLRU)) { + resolve(); + } else { + reject(); + } + } + ); + }); +} + +// Returns a promise which is resolved the first time the given iframe fires +// the mozbrowser##eventName event. +function expectMozbrowserEvent(iframe, eventName) { + return new Promise(function(resolve, reject) { + iframe.addEventListener('mozbrowser' + eventName, function handler(e) { + iframe.removeEventListener('mozbrowser' + eventName, handler); + resolve(e); + }); + }); +} + +// Set some prefs: +// +// * browser.pagethumbnails.capturing_disabled: true +// +// Disable tab view; it seriously messes us up. +// +// * dom.ipc.browser_frames.oop_by_default +// +// Enable or disable OOP-by-default depending on the test's filename. You +// can still force OOP on or off with <iframe mozbrowser remote=true/false>, +// at least until bug 756376 lands. +// +// * dom.ipc.tabs.disabled: false +// +// Allow us to create OOP frames. Even if they're not the default, some +// "in-process" tests create OOP frames. +// +// * network.disable.ipc.security: true +// +// Disable the networking security checks; our test harness just tests +// browser elements without sticking them in apps, and the security checks +// dislike that. +// +// Unfortunately setting network.disable.ipc.security to false before the +// child process(es) created by this test have shut down can cause us to +// assert and kill the child process. That doesn't cause the tests to fail, +// but it's still scary looking. So we just set the pref to true and never +// pop that value. We'll rely on the tests which test IPC security to set +// it to false. +// +// * security.mixed_content.block_active_content: false +// +// Disable mixed active content blocking, so that tests can confirm that mixed +// content results in a broken security state. + +(function() { + var oop = location.pathname.indexOf('_inproc_') == -1; + + browserElementTestHelpers.lockTestReady(); + SpecialPowers.setBoolPref("network.disable.ipc.security", true); + SpecialPowers.pushPrefEnv({set: [["browser.pagethumbnails.capturing_disabled", true], + ["dom.ipc.browser_frames.oop_by_default", oop], + ["dom.ipc.tabs.disabled", false], + ["security.mixed_content.block_active_content", false]]}, + browserElementTestHelpers.unlockTestReady.bind(browserElementTestHelpers)); +})(); + +addEventListener('unload', function() { + browserElementTestHelpers.cleanUp(); +}); + +// Wait for the load event before unlocking the test-ready event. +browserElementTestHelpers.lockTestReady(); +addEventListener('load', function() { + SimpleTest.executeSoon(browserElementTestHelpers.unlockTestReady.bind(browserElementTestHelpers)); +}); diff --git a/dom/browser-element/mochitest/browserElement_ActiveStateChange.js b/dom/browser-element/mochitest/browserElement_ActiveStateChange.js new file mode 100644 index 000000000..cfbc1cb1e --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_ActiveStateChange.js @@ -0,0 +1,108 @@ +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +var fileURL = 'chrome://mochitests/content/chrome/dom/browser-element/mochitest/file_browserElement_ActiveStateChange.html'; +var generator = runTests(); +var testFrame; +var ac; + +function assert(aVal, aMessage) { + return (!aVal) ? error(aMessage) : 0; +} + +function error(aMessage) { + ok(false, "Error : " + aMessage); + finish(); +} + +function continueTest() { + try { + generator.next(); + } catch (e if e instanceof StopIteration) { + error("Stop test because of exception!"); + } +} + +function finish() { + document.body.removeChild(testFrame); + SimpleTest.finish(); +} + +function setCommand(aArg) { + assert(!!ac, "Audio channel doesn't exist!"); + info("# Command = " + aArg); + + testFrame.src = fileURL + '#' + aArg; + var expectedActive = false; + switch (aArg) { + case 'play': + expectedActive = true; + break; + case 'pause': + expectedActive = false; + break; + default : + error("Undefined command!"); + } + + ac.onactivestatechanged = () => { + ac.onactivestatechanged = null; + ac.isActive().onsuccess = (e) => { + is(expectedActive, e.target.result, + "Correct active state = " + expectedActive); + continueTest(); + } + }; +} + +function runTests() { + setCommand('play'); + yield undefined; + + setCommand('pause'); + yield undefined; + + finish(); + yield undefined; +} + +function setupTestFrame() { + testFrame = document.createElement('iframe'); + testFrame.setAttribute('mozbrowser', 'true'); + testFrame.src = fileURL; + + function loadend() { + testFrame.removeEventListener('mozbrowserloadend', loadend); + ok("allowedAudioChannels" in testFrame, "allowedAudioChannels exist"); + var channels = testFrame.allowedAudioChannels; + is(channels.length, 9, "9 audio channel by default"); + + ac = channels[0]; + + ok(ac instanceof BrowserElementAudioChannel, "Correct class"); + ok("isActive" in ac, "isActive exists"); + ok("onactivestatechanged" in ac, "onactivestatechanged exists"); + + generator.next(); + } + + function alertError(e) { + testFrame.removeEventListener('mozbrowsershowmodalprompt', alertError); + var message = e.detail.message + error(message); + } + + testFrame.addEventListener('mozbrowserloadend', loadend); + testFrame.addEventListener('mozbrowsershowmodalprompt', alertError); + document.body.appendChild(testFrame); +} + +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set': [["b2g.system_startup_url", window.location.href]]}, + function() { + SimpleTest.executeSoon(setupTestFrame); + }); +}); + diff --git a/dom/browser-element/mochitest/browserElement_Alert.js b/dom/browser-element/mochitest/browserElement_Alert.js new file mode 100644 index 000000000..3c7c50720 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Alert.js @@ -0,0 +1,304 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that alert works. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +var numPendingChildTests = 0; +var iframe; +var mm; + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + mm = SpecialPowers.getBrowserFrameMessageManager(iframe); + mm.addMessageListener('test-success', function(msg) { + numPendingChildTests--; + ok(true, SpecialPowers.wrap(msg).json); + }); + mm.addMessageListener('test-fail', function(msg) { + numPendingChildTests--; + ok(false, SpecialPowers.wrap(msg).json); + }); + + // Wait for the initial load to finish, then navigate the page, then wait + // for that load to finish, then start test1. + iframe.addEventListener('mozbrowserloadend', function loadend() { + iframe.removeEventListener('mozbrowserloadend', loadend); + iframe.src = browserElementTestHelpers.emptyPage1; + + iframe.addEventListener('mozbrowserloadend', function loadend2() { + iframe.removeEventListener('mozbrowserloadend', loadend2); + SimpleTest.executeSoon(test1); + }); + }); + +} + +function test1() { + iframe.addEventListener('mozbrowsershowmodalprompt', test2); + + // Do window.alert within the iframe, then modify the global |testState| + // after the alert. + var script = 'data:,\ + this.testState = 0; \ + content.alert("Hello, world!"); \ + this.testState = 1; \ + '; + + mm.loadFrameScript(script, /* allowDelayedLoad = */ false); + + // Triggers a mozbrowsershowmodalprompt event, which sends us down to test2. +} + +// test2 is a mozbrowsershowmodalprompt listener. +function test2(e) { + iframe.removeEventListener("mozbrowsershowmodalprompt", test2); + + is(e.detail.message, 'Hello, world!'); + e.preventDefault(); // cause the alert to block. + + SimpleTest.executeSoon(function() { test2a(e); }); +} + +function test2a(e) { + // The iframe should be blocked on the alert call at the moment, so testState + // should still be 0. + var script = 'data:,\ + if (this.testState === 0) { \ + sendAsyncMessage("test-success", "1: Correct testState"); \ + } \ + else { \ + sendAsyncMessage("test-fail", "1: Wrong testState: " + this.testState); \ + }'; + + mm.loadFrameScript(script, /* allowDelayedLoad = */ false); + numPendingChildTests++; + + waitForPendingTests(function() { test3(e); }); +} + +function test3(e) { + // Now unblock the iframe and check that the script completed. + e.detail.unblock(); + + var script2 = 'data:,\ + if (this.testState === 1) { \ + sendAsyncMessage("test-success", "2: Correct testState"); \ + } \ + else { \ + sendAsyncMessage("test-try-again", "2: Wrong testState (for now): " + this.testState); \ + }'; + + // Urgh. e.unblock() didn't necessarily unblock us immediately, so we have + // to spin and wait. + function onTryAgain() { + SimpleTest.executeSoon(function() { + //dump('onTryAgain\n'); + mm.loadFrameScript(script2, /* allowDelayedLoad = */ false); + }); + } + + mm.addMessageListener('test-try-again', onTryAgain); + numPendingChildTests++; + + onTryAgain(); + waitForPendingTests(function() { + mm.removeMessageListener('test-try-again', onTryAgain); + test4(); + }); +} + +function test4() { + // Navigate the iframe while an alert is pending. This shouldn't screw + // things up. + + iframe.addEventListener("mozbrowsershowmodalprompt", test5); + + var script = 'data:,content.alert("test4");'; + mm.loadFrameScript(script, /* allowDelayedLoad = */ false); +} + +// test4 is a mozbrowsershowmodalprompt listener. +function test5(e) { + iframe.removeEventListener('mozbrowsershowmodalprompt', test5); + + is(e.detail.message, 'test4'); + e.preventDefault(); // cause the page to block. + + SimpleTest.executeSoon(test5a); +} + +function test5a() { + iframe.addEventListener('mozbrowserloadend', test5b); + iframe.src = browserElementTestHelpers.emptyPage2; +} + +function test5b() { + iframe.removeEventListener('mozbrowserloadend', test5b); + SimpleTest.executeSoon(test6); +} + +// Test nested alerts +var promptBlockers = []; +function test6() { + iframe.addEventListener("mozbrowsershowmodalprompt", test6a); + + var script = 'data:,\ + this.testState = 0; \ + content.alert(1); \ + this.testState = 3; \ + '; + mm.loadFrameScript(script, /* allowDelayedLoad = */ false); +} + +function test6a(e) { + iframe.removeEventListener("mozbrowsershowmodalprompt", test6a); + + is(e.detail.message, '1'); + e.preventDefault(); // cause the alert to block. + promptBlockers.push(e); + + SimpleTest.executeSoon(test6b); +} + +function test6b() { + var script = 'data:,\ + if (this.testState === 0) { \ + sendAsyncMessage("test-success", "1: Correct testState"); \ + } \ + else { \ + sendAsyncMessage("test-fail", "1: Wrong testState: " + this.testState); \ + }'; + mm.loadFrameScript(script, /* allowDelayedLoad = */ false); + numPendingChildTests++; + + waitForPendingTests(test6c); +} + +function test6c() { + iframe.addEventListener("mozbrowsershowmodalprompt", test6d); + + var script = 'data:,\ + this.testState = 1; \ + content.alert(2); \ + this.testState = 2; \ + '; + mm.loadFrameScript(script, /* allowDelayedLoad = */ false); +} + +function test6d(e) { + iframe.removeEventListener("mozbrowsershowmodalprompt", test6d); + + is(e.detail.message, '2'); + e.preventDefault(); // cause the alert to block. + promptBlockers.push(e); + + SimpleTest.executeSoon(test6e); +} + +function test6e() { + var script = 'data:,\ + if (this.testState === 1) { \ + sendAsyncMessage("test-success", "2: Correct testState"); \ + } \ + else { \ + sendAsyncMessage("test-fail", "2: Wrong testState: " + this.testState); \ + }'; + mm.loadFrameScript(script, /* allowDelayedLoad = */ false); + numPendingChildTests++; + + waitForPendingTests(test6f); +} + +function test6f() { + var e = promptBlockers.pop(); + // Now unblock the iframe and check that the script completed. + e.detail.unblock(); + + var script2 = 'data:,\ + if (this.testState === 2) { \ + sendAsyncMessage("test-success", "3: Correct testState"); \ + } \ + else { \ + sendAsyncMessage("test-try-again", "3: Wrong testState (for now): " + this.testState); \ + }'; + + // Urgh. e.unblock() didn't necessarily unblock us immediately, so we have + // to spin and wait. + function onTryAgain() { + SimpleTest.executeSoon(function() { + //dump('onTryAgain\n'); + mm.loadFrameScript(script2, /* allowDelayedLoad = */ false); + }); + } + + mm.addMessageListener('test-try-again', onTryAgain); + numPendingChildTests++; + + onTryAgain(); + waitForPendingTests(function() { + mm.removeMessageListener('test-try-again', onTryAgain); + test6g(); + }); +} + +function test6g() { + var e = promptBlockers.pop(); + // Now unblock the iframe and check that the script completed. + e.detail.unblock(); + + var script2 = 'data:,\ + if (this.testState === 3) { \ + sendAsyncMessage("test-success", "4: Correct testState"); \ + } \ + else { \ + sendAsyncMessage("test-try-again", "4: Wrong testState (for now): " + this.testState); \ + }'; + + // Urgh. e.unblock() didn't necessarily unblock us immediately, so we have + // to spin and wait. + function onTryAgain() { + SimpleTest.executeSoon(function() { + //dump('onTryAgain\n'); + mm.loadFrameScript(script2, /* allowDelayedLoad = */ false); + }); + } + + mm.addMessageListener('test-try-again', onTryAgain); + numPendingChildTests++; + + onTryAgain(); + waitForPendingTests(function() { + mm.removeMessageListener('test-try-again', onTryAgain); + test6h(); + }); +} + +function test6h() { + SimpleTest.finish(); +} + +var prevNumPendingTests = null; +function waitForPendingTests(next) { + if (numPendingChildTests !== prevNumPendingTests) { + dump("Waiting for end; " + numPendingChildTests + " pending tests\n"); + prevNumPendingTests = numPendingChildTests; + } + + if (numPendingChildTests > 0) { + SimpleTest.executeSoon(function() { waitForPendingTests(next); }); + return; + } + + prevNumPendingTests = null; + next(); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_AlertInFrame.js b/dom/browser-element/mochitest/browserElement_AlertInFrame.js new file mode 100644 index 000000000..e9b606154 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_AlertInFrame.js @@ -0,0 +1,24 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that alert works from inside an <iframe> inside an <iframe mozbrowser>. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + is(e.detail.message, 'Hello'); + SimpleTest.finish(); + }); + + iframe.src = 'file_browserElement_AlertInFrame.html'; + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_AudioChannel.js b/dom/browser-element/mochitest/browserElement_AudioChannel.js new file mode 100644 index 000000000..20f7b4e47 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_AudioChannel.js @@ -0,0 +1,199 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 1113086 - tests for AudioChannel API into BrowserElement + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +function noaudio() { + info("Test : no-audio"); + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + iframe.src = 'chrome://mochitests/content/chrome/dom/browser-element/mochitest/file_empty.html'; + + function noaudio_loadend() { + ok("mute" in iframe, "iframe.mute exists"); + ok("unmute" in iframe, "iframe.unmute exists"); + ok("getMuted" in iframe, "iframe.getMuted exists"); + ok("getVolume" in iframe, "iframe.getVolume exists"); + ok("setVolume" in iframe, "iframe.setVolume exists"); + + ok("allowedAudioChannels" in iframe, "allowedAudioChannels exist"); + var channels = iframe.allowedAudioChannels; + is(channels.length, 9, "9 audio channel by default"); + + var ac = channels[0]; + + ok(ac instanceof BrowserElementAudioChannel, "Correct class"); + ok("getVolume" in ac, "ac.getVolume exists"); + ok("setVolume" in ac, "ac.setVolume exists"); + ok("getMuted" in ac, "ac.getMuted exists"); + ok("setMuted" in ac, "ac.setMuted exists"); + ok("isActive" in ac, "ac.isActive exists"); + + new Promise(function(r, rr) { + var req = ac.getVolume(); + ok(req instanceof DOMRequest, "This is a domRequest."); + req.onsuccess = function(e) { + is(e.target.result, 1.0, "The default volume should be 1.0"); + r(); + } + }) + + .then(function() { + return new Promise(function(resolve) { + iframe.mute(); + iframe.getMuted() + .then(result => is(result, true, "iframe.getMuted should be true.")) + .then(resolve); + }); + }) + + .then(function() { + return new Promise(function(resolve) { + iframe.unmute(); + iframe.getMuted() + .then(result => is(result, false, "iframe.getMuted should be false.")) + .then(resolve); + }); + }) + + .then(function() { + return new Promise(function(resolve) { + iframe.setVolume(0); + iframe.getVolume() + .then(result => is(result, 0, "iframe.getVolume should be 0.")) + .then(resolve); + }); + }) + + .then(function() { + return new Promise(function(resolve) { + iframe.setVolume(1); + iframe.getVolume() + .then(result => is(result, 1, "iframe.getVolume should be 1.")) + .then(resolve); + }); + }) + + .then(function() { + return new Promise(function(r, rr) { + ac.getMuted().onsuccess = function(e) { + is(e.target.result, false, "The default muted value should be false"); + r(); + } + }); + }) + + .then(function() { + return new Promise(function(r, rr) { + ac.setVolume(0.8).onsuccess = function() { r(); } + }); + }) + + .then(function() { + return new Promise(function(r, rr) { + ac.getVolume().onsuccess = function(e) { + // the actual value is 0.800000011920929.. + ok(Math.abs(0.8 - e.target.result) < 0.01, "The new volume should be 0.8: " + e.target.result); + r(); + } + }); + }) + + .then(function() { + return new Promise(function(r, rr) { + ac.setVolume(1.0).onsuccess = function() { r(); } + }); + }) + + .then(function() { + return new Promise(function(r, rr) { + ac.setMuted(true).onsuccess = function() { r(); } + }); + }) + + .then(function() { + return new Promise(function(r, rr) { + ac.getMuted().onsuccess = function(e) { + is(e.target.result, true, "The new muted value should be true"); + r(); + } + }); + }) + + .then(function() { + return new Promise(function(r, rr) { + ac.isActive().onsuccess = function(e) { + is(e.target.result, false, "ac.isActive is false: no audio element active."); + r(); + } + }); + }) + + .then(runTests); + } + + iframe.addEventListener('mozbrowserloadend', noaudio_loadend); + document.body.appendChild(iframe); +} + +function audio() { + info("Test : audio"); + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + iframe.src = 'chrome://mochitests/content/chrome/dom/browser-element/mochitest/iframe_file_audio.html'; + + function audio_loadend() { + ok("mute" in iframe, "iframe.mute exists"); + ok("unmute" in iframe, "iframe.unmute exists"); + ok("getMuted" in iframe, "iframe.getMuted exists"); + ok("getVolume" in iframe, "iframe.getVolume exists"); + ok("setVolume" in iframe, "iframe.setVolume exists"); + + ok("allowedAudioChannels" in iframe, "allowedAudioChannels exist"); + var channels = iframe.allowedAudioChannels; + is(channels.length, 9, "9 audio channel by default"); + + var ac = channels[0]; + + ok(ac instanceof BrowserElementAudioChannel, "Correct class"); + ok("getVolume" in ac, "ac.getVolume exists"); + ok("setVolume" in ac, "ac.setVolume exists"); + ok("getMuted" in ac, "ac.getMuted exists"); + ok("setMuted" in ac, "ac.setMuted exists"); + ok("isActive" in ac, "ac.isActive exists"); + + ac.onactivestatechanged = function() { + ok(true, "activestatechanged event received."); + ac.onactivestatechanged = null; + document.body.removeChild(iframe); + runTests(); + } + } + + iframe.addEventListener('mozbrowserloadend', audio_loadend); + document.body.appendChild(iframe); +} + +var tests = [ noaudio, audio ]; + +function runTests() { + if (tests.length == 0) { + SimpleTest.finish(); + return; + } + + var test = tests.shift(); + test(); +} + +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set': [["b2g.system_startup_url", window.location.href]]}, + function() { + SimpleTest.executeSoon(runTests); + }); +}); diff --git a/dom/browser-element/mochitest/browserElement_AudioChannelMutedByDefault.js b/dom/browser-element/mochitest/browserElement_AudioChannelMutedByDefault.js new file mode 100644 index 000000000..897c4318a --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_AudioChannelMutedByDefault.js @@ -0,0 +1,103 @@ +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +var fileURL = 'chrome://mochitests/content/chrome/dom/browser-element/mochitest/file_browserElement_AudioChannelMutedByDefault.html'; +var testFrame; +var ac; + +function alertListener(e) { + var message = e.detail.message + if (/^OK/.exec(message)) { + ok(true, "Message from file : " + message); + } else if (/^KO/.exec(message)) { + error(message); + } else if (/DONE/.exec(message)) { + ok(true, "Audio playback success!"); + finish(); + } else { + error("Undefined event."); + } +} + +function assert(aVal, aMessage) { + return (!aVal) ? error(aMessage) : 0; +} + +function error(aMessage) { + ok(false, "Error : " + aMessage); + finish(); +} + +function finish() { + testFrame.removeEventListener('mozbrowsershowmodalprompt', alertListener); + document.body.removeChild(testFrame); + SimpleTest.finish(); +} + +function setCommand(aArg) { + assert(!!ac, "Audio channel doesn't exist!"); + info("# Command = " + aArg); + testFrame.src = fileURL + '#' + aArg; + + switch (aArg) { + case 'play': + ac.onactivestatechanged = () => { + ac.onactivestatechanged = null; + ok(true, "activestatechanged event received."); + + new Promise(function(r, rr) { + ac.getMuted().onsuccess = function(e) { + is(e.target.result, true, "Muted channel by default"); + r(); + } + }).then(function() { + ac.setMuted(false).onsuccess = function(e) { + ok(true, "Unmuted the channel."); + } + }); + }; + break; + default : + error("Undefined command!"); + } +} + +function runTests() { + setCommand('play'); +} + +function setupTestFrame() { + testFrame = document.createElement('iframe'); + testFrame.setAttribute('mozbrowser', 'true'); + testFrame.src = fileURL; + + function loadend() { + testFrame.removeEventListener('mozbrowserloadend', loadend); + ok("allowedAudioChannels" in testFrame, "allowedAudioChannels exist"); + var channels = testFrame.allowedAudioChannels; + is(channels.length, 9, "9 audio channel by default"); + + ac = channels[0]; + ok(ac instanceof BrowserElementAudioChannel, "Correct class"); + ok("getMuted" in ac, "ac.getMuted exists"); + ok("setMuted" in ac, "ac.setMuted exists"); + ok("onactivestatechanged" in ac, "onactivestatechanged exists"); + + runTests(); + } + + info("Set EventListeners."); + testFrame.addEventListener('mozbrowsershowmodalprompt', alertListener); + testFrame.addEventListener('mozbrowserloadend', loadend); + document.body.appendChild(testFrame); +} + +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set': [["b2g.system_startup_url", window.location.href], + ["dom.audiochannel.mutedByDefault", true]]}, + function() { + SimpleTest.executeSoon(setupTestFrame); + }); +}); diff --git a/dom/browser-element/mochitest/browserElement_AudioChannelSeeking.js b/dom/browser-element/mochitest/browserElement_AudioChannelSeeking.js new file mode 100644 index 000000000..f354a9d82 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_AudioChannelSeeking.js @@ -0,0 +1,128 @@ +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +var fileURL = 'chrome://mochitests/content/chrome/dom/browser-element/mochitest/file_browserElement_AudioChannelSeeking.html'; +var generator = runTests(); +var testFrame; +var ac; + +function alertListener(e) { + var message = e.detail.message + if (/^OK/.exec(message)) { + ok(true, "Message from file : " + message); + continueTest(); + } else if (/^KO/.exec(message)) { + error(message); + } else if (/^INFO/.exec(message)) { + info("Message from file : " + message); + } else { + error("Undefined event."); + } +} + +function assert(aVal, aMessage) { + return (!aVal) ? error(aMessage) : 0; +} + +function error(aMessage) { + ok(false, "Error : " + aMessage); + finish(); +} + +function continueTest() { + try { + generator.next(); + } catch (e if e instanceof StopIteration) { + error("Stop test because of exception!"); + } +} + +function finish() { + testFrame.removeEventListener('mozbrowsershowmodalprompt', alertListener); + ok(true, "Remove event-listener."); + document.body.removeChild(testFrame); + ok(true, "Remove test-frame from document."); + SimpleTest.finish(); +} + +function setCommand(aArg) { + assert(!!ac, "Audio channel doesn't exist!"); + info("# Command = " + aArg); + testFrame.src = fileURL + '#' + aArg; + + switch (aArg) { + case 'play': + ac.onactivestatechanged = () => { + ac.onactivestatechanged = null; + ok(true, "Receive onactivestatechanged after audio started."); + continueTest(); + }; + break; + case 'seeking': + ac.onactivestatechanged = () => { + ac.onactivestatechanged = null; + error("Should not receive onactivestatechanged during seeking!"); + }; + break; + case 'pause': + ac.onactivestatechanged = null; + break; + default : + error("Undefined command!"); + } +} + +function runTests() { + setCommand('play'); + yield undefined; + + setCommand('seeking'); + yield undefined; + + setCommand('seeking'); + yield undefined; + + setCommand('seeking'); + yield undefined; + + setCommand('pause'); + yield undefined; + + finish(); + yield undefined; +} + +function setupTestFrame() { + testFrame = document.createElement('iframe'); + testFrame.setAttribute('mozbrowser', 'true'); + testFrame.src = fileURL; + + function loadend() { + testFrame.removeEventListener('mozbrowserloadend', loadend); + ok("allowedAudioChannels" in testFrame, "allowedAudioChannels exist"); + var channels = testFrame.allowedAudioChannels; + is(channels.length, 9, "9 audio channel by default"); + + ac = channels[0]; + ok(ac instanceof BrowserElementAudioChannel, "Correct class"); + ok("onactivestatechanged" in ac, "onactivestatechanged exists"); + + continueTest(); + } + + testFrame.addEventListener('mozbrowsershowmodalprompt', alertListener); + testFrame.addEventListener('mozbrowserloadend', loadend); + ok(true, "Add event-listeners."); + + document.body.appendChild(testFrame); + ok(true, "Append test-frame to document."); +} + +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set': [["b2g.system_startup_url", window.location.href]]}, + function() { + SimpleTest.executeSoon(setupTestFrame); + }); +}); diff --git a/dom/browser-element/mochitest/browserElement_AudioChannel_nested.js b/dom/browser-element/mochitest/browserElement_AudioChannel_nested.js new file mode 100644 index 000000000..2ed432b2a --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_AudioChannel_nested.js @@ -0,0 +1,69 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 1113086 - tests for AudioChannel API into BrowserElement + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +function runTests() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + var listener = function(e) { + var message = e.detail.message; + if (/^OK/.exec(message)) { + ok(true, "Message from app: " + message); + } else if (/^KO/.exec(message)) { + ok(false, "Message from app: " + message); + } else if (/DONE/.exec(message)) { + ok(true, "Messaging from app complete"); + iframe.removeEventListener('mozbrowsershowmodalprompt', listener); + SimpleTest.finish(); + } + } + + function audio_loadend() { + ok("mute" in iframe, "iframe.mute exists"); + ok("unmute" in iframe, "iframe.unmute exists"); + ok("getMuted" in iframe, "iframe.getMuted exists"); + ok("getVolume" in iframe, "iframe.getVolume exists"); + ok("setVolume" in iframe, "iframe.setVolume exists"); + + ok("allowedAudioChannels" in iframe, "allowedAudioChannels exist"); + var channels = iframe.allowedAudioChannels; + is(channels.length, 9, "9 audio channel by default"); + + var ac = channels[0]; + + ok(ac instanceof BrowserElementAudioChannel, "Correct class"); + ok("getVolume" in ac, "ac.getVolume exists"); + ok("setVolume" in ac, "ac.setVolume exists"); + ok("getMuted" in ac, "ac.getMuted exists"); + ok("setMuted" in ac, "ac.setMuted exists"); + ok("isActive" in ac, "ac.isActive exists"); + + info("Setting the volume..."); + ac.setVolume(0.5); + + ac.onactivestatechanged = function() { + ok(true, "activestatechanged event received."); + ac.onactivestatechanged = null; + } + } + + iframe.addEventListener('mozbrowserloadend', audio_loadend); + iframe.addEventListener('mozbrowsershowmodalprompt', listener, false); + document.body.appendChild(iframe); + + iframe.src = 'chrome://mochitests/content/chrome/dom/browser-element/mochitest/file_browserElement_AudioChannel_nested.html'; +} + +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set': [["b2g.system_startup_url", window.location.href]]}, + function() { + SimpleTest.executeSoon(runTests); + }); +}); diff --git a/dom/browser-element/mochitest/browserElement_AudioPlayback.js b/dom/browser-element/mochitest/browserElement_AudioPlayback.js new file mode 100644 index 000000000..bcbe89cb1 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_AudioPlayback.js @@ -0,0 +1,75 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test the mozbrowseraudioplaybackchange event is fired correctly. +'use strict'; + +const { Services } = SpecialPowers.Cu.import('resource://gre/modules/Services.jsm'); + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +/** + * Content script passed to the child iframe + */ +function playAudioScript() { + var audio = new content.Audio(); + content.document.body.appendChild(audio); + audio.oncanplay = function() { + audio.play(); + }; + audio.src = 'audio.ogg'; +} + +/** + * Creates a simple mozbrowser frame + */ +function createFrame() { + let iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + return iframe; +} + +function runTest() { + SimpleTest.waitForExplicitFinish(); + + let iframe = createFrame(); + let iframe2 = createFrame(); + + // When the first iframe is finished loading inject a script to create + // an audio element and play it. + iframe.addEventListener('mozbrowserloadend', () => { + let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); + mm.loadFrameScript('data:,(' + playAudioScript.toString() + ')();', false); + }); + + // Two events should come in, when the audio starts, and stops playing. + // The first one should have a detail of 'active' and the second one + // should have a detail of 'inactive-pause'. + let expectedNextData = 'active'; + iframe.addEventListener('mozbrowseraudioplaybackchange', (e) => { + is(e.detail, expectedNextData, 'Audio detail should be correct') + is(e.target, iframe, 'event target should be the first iframe') + if (e.detail === 'inactive-pause') { + SimpleTest.finish(); + } + expectedNextData = 'inactive-pause'; + }); + + // Make sure an event only goes to the first iframe. + iframe2.addEventListener('mozbrowseraudioplaybackchange', (e) => { + ok(false, + 'mozbrowseraudioplaybackchange should dispatch to the correct browser'); + }); + + // Load a simple page to get the process started. + iframe.src = browserElementTestHelpers.fileEmptyPage1; +} + +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set': [["b2g.system_startup_url", window.location.href]]}, + function() { + SimpleTest.executeSoon(runTest); + }); +}); diff --git a/dom/browser-element/mochitest/browserElement_Auth.js b/dom/browser-element/mochitest/browserElement_Auth.js new file mode 100644 index 000000000..ef95409be --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Auth.js @@ -0,0 +1,246 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that auth prompt works. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +const { NetUtil } = SpecialPowers.Cu.import('resource://gre/modules/NetUtil.jsm'); + +function testFail(msg) { + ok(false, JSON.stringify(msg)); +} + +var iframe; + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + // Wait for the initial load to finish, then navigate the page, then start test + // by loading SJS with http 401 response. + iframe.addEventListener('mozbrowserloadend', function loadend() { + iframe.removeEventListener('mozbrowserloadend', loadend); + iframe.addEventListener('mozbrowserusernameandpasswordrequired', testHttpAuthCancel); + SimpleTest.executeSoon(function() { + // Use absolute path because we need to specify host. + iframe.src = 'http://test/tests/dom/browser-element/mochitest/file_http_401_response.sjs'; + }); + }); +} + +function testHttpAuthCancel(e) { + iframe.removeEventListener("mozbrowserusernameandpasswordrequired", testHttpAuthCancel); + // Will cancel authentication, but prompt should not be shown again. Instead, + // we will be led to fail message + iframe.addEventListener("mozbrowserusernameandpasswordrequired", testFail); + iframe.addEventListener("mozbrowsertitlechange", function onTitleChange(e) { + iframe.removeEventListener("mozbrowsertitlechange", onTitleChange); + iframe.removeEventListener("mozbrowserusernameandpasswordrequired", testFail); + is(e.detail, 'http auth failed', 'expected authentication to fail'); + iframe.addEventListener('mozbrowserusernameandpasswordrequired', testHttpAuth); + SimpleTest.executeSoon(function() { + // Use absolute path because we need to specify host. + iframe.src = 'http://test/tests/dom/browser-element/mochitest/file_http_401_response.sjs'; + }); + }); + + is(e.detail.realm, 'http_realm', 'expected realm matches'); + is(e.detail.host, 'http://test', 'expected host matches'); + is(e.detail.path, + '/tests/dom/browser-element/mochitest/file_http_401_response.sjs', + 'expected path matches'); + e.preventDefault(); + + SimpleTest.executeSoon(function() { + e.detail.cancel(); + }); +} + +function testHttpAuth(e) { + iframe.removeEventListener("mozbrowserusernameandpasswordrequired", testHttpAuth); + + // Will authenticate with correct password, prompt should not be + // called again. + iframe.addEventListener("mozbrowserusernameandpasswordrequired", testFail); + iframe.addEventListener("mozbrowsertitlechange", function onTitleChange(e) { + iframe.removeEventListener("mozbrowsertitlechange", onTitleChange); + iframe.removeEventListener("mozbrowserusernameandpasswordrequired", testFail); + is(e.detail, 'http auth success', 'expect authentication to succeed'); + SimpleTest.executeSoon(testProxyAuth); + }); + + is(e.detail.realm, 'http_realm', 'expected realm matches'); + is(e.detail.host, 'http://test', 'expected host matches'); + is(e.detail.path, + '/tests/dom/browser-element/mochitest/file_http_401_response.sjs', + 'expected path matches'); + is(e.detail.isProxy, false, 'expected isProxy is false'); + e.preventDefault(); + + SimpleTest.executeSoon(function() { + e.detail.authenticate("httpuser", "httppass"); + }); +} + +function testProxyAuth(e) { + // The testingSJS simulates the 407 proxy authentication required response + // for proxy server, which will trigger the browser element to send prompt + // event with proxy infomation. + var testingSJS = 'http://test/tests/dom/browser-element/mochitest/file_http_407_response.sjs'; + var mozproxy; + + function onUserNameAndPasswordRequired(e) { + iframe.removeEventListener("mozbrowserusernameandpasswordrequired", + onUserNameAndPasswordRequired); + iframe.addEventListener("mozbrowsertitlechange", function onTitleChange(e) { + iframe.removeEventListener("mozbrowsertitlechange", onTitleChange); + iframe.removeEventListener("mozbrowserusernameandpasswordrequired", testFail); + is(e.detail, 'http auth success', 'expect authentication to succeed'); + SimpleTest.executeSoon(testAuthJarNoInterfere); + }); + + is(e.detail.realm, 'http_realm', 'expected realm matches'); + is(e.detail.host, mozproxy, 'expected host matches'); + is(e.detail.path, + '/tests/dom/browser-element/mochitest/file_http_407_response.sjs', + 'expected path matches'); + is(e.detail.isProxy, true, 'expected isProxy is true'); + e.preventDefault(); + + SimpleTest.executeSoon(function() { + e.detail.authenticate("proxyuser", "proxypass"); + }); + } + + // Resolve proxy information used by the test suite, we need it to validate + // whether the proxy information delivered with the prompt event is correct. + var resolveCallback = SpecialPowers.wrapCallbackObject({ + QueryInterface: function (iid) { + const interfaces = [Ci.nsIProtocolProxyCallback, Ci.nsISupports]; + + if (!interfaces.some( function(v) { return iid.equals(v) } )) { + throw SpecialPowers.Cr.NS_ERROR_NO_INTERFACE; + } + return this; + }, + + onProxyAvailable: function (req, channel, pi, status) { + isnot(pi, null, 'expected proxy information available'); + if (pi) { + mozproxy = "moz-proxy://" + pi.host + ":" + pi.port; + } + iframe.addEventListener("mozbrowserusernameandpasswordrequired", + onUserNameAndPasswordRequired); + + iframe.src = testingSJS; + } + }); + + var channel = NetUtil.newChannel({ + uri: testingSJS, + loadUsingSystemPrincipal: true + }); + + var pps = SpecialPowers.Cc["@mozilla.org/network/protocol-proxy-service;1"] + .getService(); + + pps.asyncResolve(channel, 0, resolveCallback); +} + +function testAuthJarNoInterfere(e) { + var authMgr = SpecialPowers.Cc['@mozilla.org/network/http-auth-manager;1'] + .getService(SpecialPowers.Ci.nsIHttpAuthManager); + var secMan = SpecialPowers.Cc["@mozilla.org/scriptsecuritymanager;1"] + .getService(SpecialPowers.Ci.nsIScriptSecurityManager); + var ioService = SpecialPowers.Cc["@mozilla.org/network/io-service;1"] + .getService(SpecialPowers.Ci.nsIIOService); + var uri = ioService.newURI("http://test/tests/dom/browser-element/mochitest/file_http_401_response.sjs", null, null); + + // Set a bunch of auth data that should not conflict with the correct auth data already + // stored in the cache. + var attrs = {appId: 1}; + var principal = secMan.createCodebasePrincipal(uri, attrs); + authMgr.setAuthIdentity('http', 'test', -1, 'basic', 'http_realm', + 'tests/dom/browser-element/mochitest/file_http_401_response.sjs', + '', 'httpuser', 'wrongpass', false, principal); + attrs = {appId: 1, inIsolatedMozBrowser: true}; + principal = secMan.createCodebasePrincipal(uri, attrs); + authMgr.setAuthIdentity('http', 'test', -1, 'basic', 'http_realm', + 'tests/dom/browser-element/mochitest/file_http_401_response.sjs', + '', 'httpuser', 'wrongpass', false, principal); + principal = secMan.createCodebasePrincipal(uri, {}); + authMgr.setAuthIdentity('http', 'test', -1, 'basic', 'http_realm', + 'tests/dom/browser-element/mochitest/file_http_401_response.sjs', + '', 'httpuser', 'wrongpass', false, principal); + + // Will authenticate with correct password, prompt should not be + // called again. + iframe.addEventListener("mozbrowserusernameandpasswordrequired", testFail); + iframe.addEventListener("mozbrowsertitlechange", function onTitleChange(e) { + iframe.removeEventListener("mozbrowsertitlechange", onTitleChange); + iframe.removeEventListener("mozbrowserusernameandpasswordrequired", testFail); + is(e.detail, 'http auth success', 'expected authentication success'); + SimpleTest.executeSoon(testAuthJarInterfere); + }); + + // Once more with feeling. Ensure that our new auth data doesn't interfere with this mozbrowser's + // auth data. + iframe.src = 'http://test/tests/dom/browser-element/mochitest/file_http_401_response.sjs'; +} + +function testAuthJarInterfere(e) { + var authMgr = SpecialPowers.Cc['@mozilla.org/network/http-auth-manager;1'] + .getService(SpecialPowers.Ci.nsIHttpAuthManager); + var secMan = SpecialPowers.Cc["@mozilla.org/scriptsecuritymanager;1"] + .getService(SpecialPowers.Ci.nsIScriptSecurityManager); + var ioService = SpecialPowers.Cc["@mozilla.org/network/io-service;1"] + .getService(SpecialPowers.Ci.nsIIOService); + var uri = ioService.newURI("http://test/tests/dom/browser-element/mochitest/file_http_401_response.sjs", null, null); + + // Set some auth data that should overwrite the successful stored details. + var principal = secMan.createCodebasePrincipal(uri, {inIsolatedMozBrowser: true}); + authMgr.setAuthIdentity('http', 'test', -1, 'basic', 'http_realm', + 'tests/dom/browser-element/mochitest/file_http_401_response.sjs', + '', 'httpuser', 'wrongpass', false, principal); + + // Will authenticate with correct password, prompt should not be + // called again. + var gotusernamepasswordrequired = false; + function onUserNameAndPasswordRequired() { + gotusernamepasswordrequired = true; + } + iframe.addEventListener("mozbrowserusernameandpasswordrequired", + onUserNameAndPasswordRequired); + iframe.addEventListener("mozbrowsertitlechange", function onTitleChange(e) { + iframe.removeEventListener("mozbrowsertitlechange", onTitleChange); + iframe.removeEventListener("mozbrowserusernameandpasswordrequired", + onUserNameAndPasswordRequired); + ok(gotusernamepasswordrequired, + "Should have dispatched mozbrowserusernameandpasswordrequired event"); + testFinish(); + }); + + // Once more with feeling. Ensure that our new auth data interferes with this mozbrowser's + // auth data. + iframe.src = 'http://test/tests/dom/browser-element/mochitest/file_http_401_response.sjs'; +} + +function testFinish() { + // Clear login information stored in password manager. + var authMgr = SpecialPowers.Cc['@mozilla.org/network/http-auth-manager;1'] + .getService(SpecialPowers.Ci.nsIHttpAuthManager); + authMgr.clearAll(); + + var pwmgr = SpecialPowers.Cc["@mozilla.org/login-manager;1"] + .getService(SpecialPowers.Ci.nsILoginManager); + pwmgr.removeAllLogins(); + + SimpleTest.finish(); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_BackForward.js b/dom/browser-element/mochitest/browserElement_BackForward.js new file mode 100644 index 000000000..26b6344c4 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_BackForward.js @@ -0,0 +1,104 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 741755 - Test that canGo{Back,Forward} and go{Forward,Back} work with +// <iframe mozbrowser>. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +var iframe; +function addOneShotIframeEventListener(event, fn) { + function wrapper(e) { + iframe.removeEventListener(event, wrapper); + fn(e); + }; + + iframe.addEventListener(event, wrapper); +} + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + addOneShotIframeEventListener('mozbrowserloadend', function() { + SimpleTest.executeSoon(test2); + }); + + iframe.src = browserElementTestHelpers.emptyPage1; + document.body.appendChild(iframe); +} + +function checkCanGoBackAndForward(canGoBack, canGoForward, nextTest) { + var seenCanGoBackResult = false; + iframe.getCanGoBack().onsuccess = function(e) { + is(seenCanGoBackResult, false, "onsuccess handler shouldn't be called twice."); + seenCanGoBackResult = true; + is(e.target.result, canGoBack); + maybeRunNextTest(); + }; + + var seenCanGoForwardResult = false; + iframe.getCanGoForward().onsuccess = function(e) { + is(seenCanGoForwardResult, false, "onsuccess handler shouldn't be called twice."); + seenCanGoForwardResult = true; + is(e.target.result, canGoForward); + maybeRunNextTest(); + }; + + function maybeRunNextTest() { + if (seenCanGoBackResult && seenCanGoForwardResult) { + nextTest(); + } + } +} + +function test2() { + checkCanGoBackAndForward(false, false, test3); +} + +function test3() { + addOneShotIframeEventListener('mozbrowserloadend', function() { + checkCanGoBackAndForward(true, false, test4); + }); + + SimpleTest.executeSoon(function() { + iframe.src = browserElementTestHelpers.emptyPage2; + }); +} + +function test4() { + addOneShotIframeEventListener('mozbrowserlocationchange', function(e) { + is(e.detail.url, browserElementTestHelpers.emptyPage3); + is(e.detail.canGoBack, true); + is(e.detail.canGoForward, false); + checkCanGoBackAndForward(true, false, test5); + }); + + SimpleTest.executeSoon(function() { + iframe.src = browserElementTestHelpers.emptyPage3; + }); +} + +function test5() { + addOneShotIframeEventListener('mozbrowserlocationchange', function(e) { + is(e.detail.url, browserElementTestHelpers.emptyPage2); + is(e.detail.canGoBack, true); + is(e.detail.canGoForward, true); + checkCanGoBackAndForward(true, true, test6); + }); + iframe.goBack(); +} + +function test6() { + addOneShotIframeEventListener('mozbrowserlocationchange', function(e) { + is(e.detail.url, browserElementTestHelpers.emptyPage1); + is(e.detail.canGoBack, false); + is(e.detail.canGoForward, true); + checkCanGoBackAndForward(false, true, SimpleTest.finish); + }); + iframe.goBack(); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_BadScreenshot.js b/dom/browser-element/mochitest/browserElement_BadScreenshot.js new file mode 100644 index 000000000..7b194da86 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_BadScreenshot.js @@ -0,0 +1,71 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 800170 - Test that we get errors when we pass bad arguments to +// mozbrowser's getScreenshot. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +var iframe; +var numPendingTests = 0; + +// Call iframe.getScreenshot with the given args. If expectSuccess is true, we +// expect the screenshot's onsuccess handler to fire. Otherwise, we expect +// getScreenshot() to throw an exception. +function checkScreenshotResult(expectSuccess, args) { + var req; + try { + req = iframe.getScreenshot.apply(iframe, args); + } + catch(e) { + ok(!expectSuccess, "getScreenshot(" + JSON.stringify(args) + ") threw an exception."); + return; + } + + numPendingTests++; + req.onsuccess = function() { + ok(expectSuccess, "getScreenshot(" + JSON.stringify(args) + ") succeeded."); + numPendingTests--; + if (numPendingTests == 0) { + SimpleTest.finish(); + } + }; + + // We never expect to see onerror. + req.onerror = function() { + ok(false, "getScreenshot(" + JSON.stringify(args) + ") ran onerror."); + numPendingTests--; + if (numPendingTests == 0) { + SimpleTest.finish(); + } + }; +} + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + iframe.src = 'data:text/html,<html>' + + '<body style="background:green">hello</body></html>'; + + iframe.addEventListener('mozbrowserfirstpaint', function() { + // This one should succeed. + checkScreenshotResult(true, [100, 100]); + + // These should fail. + checkScreenshotResult(false, []); + checkScreenshotResult(false, [100]); + checkScreenshotResult(false, ['a', 100]); + checkScreenshotResult(false, [100, 'a']); + checkScreenshotResult(false, [-1, 100]); + checkScreenshotResult(false, [100, -1]); + + if (numPendingTests == 0) { + SimpleTest.finish(); + } + }); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_BrowserWindowNamespace.js b/dom/browser-element/mochitest/browserElement_BrowserWindowNamespace.js new file mode 100644 index 000000000..87c4a216c --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_BrowserWindowNamespace.js @@ -0,0 +1,57 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 780351 - Test that mozbrowser does /not/ divide the window name namespace. +// Multiple mozbrowsers inside the same app are like multiple browser tabs; +// they share a window name namespace. + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + + // Two mozbrowser frames with the same code both do the same + // window.open("foo", "bar") call. We should only get one + // mozbrowseropenwindow event. + + iframe1.addEventListener('mozbrowseropenwindow', function(e) { + ok(true, "Got first mozbrowseropenwindow event."); + document.body.appendChild(e.detail.frameElement); + + e.detail.frameElement.addEventListener('mozbrowserlocationchange', function(e) { + if (e.detail.url == "http://example.com/#2") { + ok(true, "Got locationchange to http://example.com/#2"); + SimpleTest.finish(); + } + else { + ok(true, "Got locationchange to " + e.detail.url); + } + }); + + SimpleTest.executeSoon(function() { + var iframe2 = document.createElement('iframe'); + // Make sure that iframe1 and iframe2 are in the same TabGroup by linking + // them through opener. Right now this API requires chrome privileges, as + // it is on MozFrameLoaderOwner. + SpecialPowers.wrap(iframe2).presetOpenerWindow(iframe1.contentWindow); + iframe2.setAttribute('mozbrowser', 'true'); + + iframe2.addEventListener('mozbrowseropenwindow', function(e) { + ok(false, "Got second mozbrowseropenwindow event."); + }); + + document.body.appendChild(iframe2); + iframe2.src = 'file_browserElement_BrowserWindowNamespace.html#2'; + }); + }); + + document.body.appendChild(iframe1); + iframe1.src = 'file_browserElement_BrowserWindowNamespace.html#1'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_BrowserWindowResize.js b/dom/browser-element/mochitest/browserElement_BrowserWindowResize.js new file mode 100644 index 000000000..420b4bc34 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_BrowserWindowResize.js @@ -0,0 +1,51 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 891763 - Test the mozbrowserresize event +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var srcResizeTo = "data:text/html, \ + <script type='application/javascript'> \ + window.resizeTo(300, 300); \ + <\/script> \ + "; + + var srcResizeBy = "data:text/html, \ + <script type='application/javascript'> \ + window.resizeBy(-100, -100); \ + <\/script> \ + "; + + var count = 0; + function checkSize(iframe) { + count++; + is(iframe.clientWidth, 400, "iframe width does not change"); + is(iframe.clientHeight, 400, "iframe height does not change"); + if (count == 2) { + SimpleTest.finish(); + } + } + + function testIFrameWithSrc(src) { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + iframe.style = "border:none; width:400px; height:400px;"; + iframe.src = src; + iframe.addEventListener("mozbrowserresize", function (e) { + is(e.detail.width, 300, "Received correct resize event width"); + is(e.detail.height, 300, "Received correct resize event height"); + SimpleTest.executeSoon(checkSize.bind(undefined, iframe)); + }); + document.body.appendChild(iframe); + } + + testIFrameWithSrc(srcResizeTo); + testIFrameWithSrc(srcResizeBy); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_Close.js b/dom/browser-element/mochitest/browserElement_Close.js new file mode 100644 index 000000000..57bdf384d --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Close.js @@ -0,0 +1,24 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that window.close() works. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + iframe.addEventListener("mozbrowserclose", function(e) { + ok(true, "got mozbrowserclose event."); + SimpleTest.finish(); + }); + + iframe.src = "data:text/html,<html><body><script>window.close()</scr"+"ipt></body></html>"; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_CloseFromOpener.js b/dom/browser-element/mochitest/browserElement_CloseFromOpener.js new file mode 100644 index 000000000..65ea4d1b7 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_CloseFromOpener.js @@ -0,0 +1,33 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 764718 - Test that window.close() works from the opener window. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + iframe.addEventListener('mozbrowseropenwindow', function(e) { + ok(true, "got openwindow event."); + document.body.appendChild(e.detail.frameElement); + + e.detail.frameElement.addEventListener("mozbrowserclose", function(e) { + ok(true, "got mozbrowserclose event."); + SimpleTest.finish(); + }); + }); + + + document.body.appendChild(iframe); + + // file_browserElement_CloseFromOpener opens a new window and then calls + // close() on it. + iframe.src = "file_browserElement_CloseFromOpener.html"; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_ContextmenuEvents.js b/dom/browser-element/mochitest/browserElement_ContextmenuEvents.js new file mode 100644 index 000000000..66aa8e015 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_ContextmenuEvents.js @@ -0,0 +1,351 @@ +'use strict'; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.setClipboardPlainTextOnlyPref(false); +browserElementTestHelpers.addPermission(); + +var audioUrl = 'http://mochi.test:8888/tests/dom/browser-element/mochitest/audio.ogg'; +var videoUrl = 'http://mochi.test:8888/tests/dom/browser-element/mochitest/short-video.ogv'; + +function runTests() { + createIframe(function onIframeLoaded() { + checkEmptyContextMenu(); + }); +} + +function checkEmptyContextMenu() { + sendContextMenuTo('body', function onContextMenu(detail) { + is(detail.contextmenu, null, 'Body context clicks have no context menu'); + + checkInnerContextMenu(); + }); +} + +function checkInnerContextMenu() { + sendContextMenuTo('#inner-link', function onContextMenu(detail) { + is(detail.systemTargets.length, 1, 'Includes anchor data'); + is(detail.contextmenu.items.length, 3, 'Inner clicks trigger correct customized menu'); + is(detail.contextmenu.items[0].label, 'foo', 'Customized menu has a "foo" menu item'); + is(detail.contextmenu.items[1].label, 'bar', 'Customized menu has a "bar" menu item'); + is(detail.contextmenu.items[2].id, 'copy-link', '#inner-link has a copy-link menu item'); + is(detail.contextmenu.customized, true, 'Make sure contextmenu has customized items'); + + var target = detail.systemTargets[0]; + is(target.nodeName, 'A', 'Reports correct nodeName'); + is(target.data.uri, 'foo.html', 'Reports correct uri'); + is(target.data.text, 'Menu 1', 'Reports correct link text'); + + checkCustomContextMenu(); + }); +} + +function checkCustomContextMenu() { + sendContextMenuTo('#menu1-trigger', function onContextMenu(detail) { + is(detail.contextmenu.items.length, 2, 'trigger custom contextmenu'); + + checkNestedContextMenu(); + }); +} + +function checkNestedContextMenu() { + sendContextMenuTo('#menu2-trigger', function onContextMenu(detail) { + var innerMenu = detail.contextmenu.items.filter(function(x) { + return x.type === 'menu'; + }); + is(detail.systemTargets.length, 2, 'Includes two systemTargets'); + is(detail.systemTargets[0].nodeName, 'IMG', 'Includes "IMG" node'); + is(detail.systemTargets[0].data.uri, 'example.png', 'Img data has the correct uri'); + is(detail.systemTargets[1].nodeName, 'A', 'Includes "A" node'); + is(detail.systemTargets[1].data.uri, 'bar.html', 'Anchor has the correct uri'); + ok(innerMenu.length > 0, 'Menu contains a nested menu'); + + is(detail.contextmenu.items.length, 4, 'We have correct # of menu items') + is(detail.contextmenu.customized, true, 'Make sure contextmenu has customized items'); + is(detail.contextmenu.items[0].label, 'outer', 'Customized menu has an "outer" menu item'); + is(detail.contextmenu.items[1].label, 'submenu', 'Customized menu has an "submenu" menu item'); + is(detail.contextmenu.items[2].id, 'copy-link', 'Has a copy-link menu item'); + is(detail.contextmenu.items[3].id, 'copy-image', 'Has a copy-image menu item'); + checkPreviousContextMenuHandler(); + }); +} + + // Finished testing the data passed to the contextmenu handler, + // now we start selecting contextmenu items +function checkPreviousContextMenuHandler() { + // This is previously triggered contextmenu data, since we have + // fired subsequent contextmenus this should not be mistaken + // for a current menuitem + var detail = previousContextMenuDetail; + var previousId = detail.contextmenu.items[0].id; + checkContextMenuCallbackForId(detail, previousId, function onCallbackFired(label) { + is(label, null, 'Callback label should be empty since this handler is old'); + + checkCurrentContextMenuHandler(); + }); +} + +function checkCurrentContextMenuHandler() { + // This triggers a current menuitem + var detail = currentContextMenuDetail; + + var innerMenu = detail.contextmenu.items.filter(function(x) { + return x.type === 'menu'; + }); + + var currentId = innerMenu[0].items[1].id; + checkContextMenuCallbackForId(detail, currentId, function onCallbackFired(label) { + is(label, 'inner 2', 'Callback label should be set correctly'); + + checkAgainCurrentContextMenuHandler(); + }); +} + +function checkAgainCurrentContextMenuHandler() { + // Once an item it selected, subsequent selections are ignored + var detail = currentContextMenuDetail; + + var innerMenu = detail.contextmenu.items.filter(function(x) { + return x.type === 'menu'; + }); + + var currentId = innerMenu[0].items[1].id; + checkContextMenuCallbackForId(detail, currentId, function onCallbackFired(label) { + is(label, null, 'Callback label should be empty since this handler has already been used'); + + checkCallbackWithPreventDefault(); + }); +}; + +// Finished testing callbacks if the embedder calls preventDefault() on the +// mozbrowsercontextmenu event, now we start checking for some cases where the embedder +// does not want to call preventDefault() for some reasons. +function checkCallbackWithPreventDefault() { + sendContextMenuTo('#menu1-trigger', function onContextMenu(detail) { + var id = detail.contextmenu.items[0].id; + checkContextMenuCallbackForId(detail, id, function onCallbackFired(label) { + is(label, 'foo', 'Callback label should be set correctly'); + + checkCallbackWithoutPreventDefault(); + }); + }); +} + +function checkCallbackWithoutPreventDefault() { + sendContextMenuTo('#menu1-trigger', function onContextMenu(detail) { + var id = detail.contextmenu.items[0].id; + checkContextMenuCallbackForId(detail, id, function onCallbackFired(label) { + is(label, null, 'Callback label should be null'); + + checkImageContextMenu(); + }); + }, /* ignorePreventDefault */ true); +} + +function checkImageContextMenu() { + sendContextMenuTo('#menu3-trigger', function onContextMenu(detail) { + var target = detail.systemTargets[0]; + is(target.nodeName, 'IMG', 'Reports correct nodeName'); + is(target.data.uri, 'example.png', 'Reports correct uri'); + is(detail.contextmenu.items.length, 1, 'Reports correct # of menu items'); + is(detail.contextmenu.items[0].id, 'copy-image', 'IMG has a copy-image menu item'); + is(detail.contextmenu.customized, false, 'Make sure we do not have customized items'); + + checkVideoContextMenu(); + }, /* ignorePreventDefault */ true); +} + +function checkVideoContextMenu() { + sendContextMenuTo('#menu4-trigger', function onContextMenu(detail) { + var target = detail.systemTargets[0]; + is(target.nodeName, 'VIDEO', 'Reports correct nodeName'); + is(target.data.uri, videoUrl, 'Reports uri correctly in data'); + is(target.data.hasVideo, true, 'Video data in video tag does "hasVideo"'); + + checkAudioContextMenu(); + }, /* ignorePreventDefault */ true); +} + +function checkAudioContextMenu() { + sendContextMenuTo('#menu6-trigger', function onContextMenu(detail) { + var target = detail.systemTargets[0]; + is(target.nodeName, 'AUDIO', 'Reports correct nodeName'); + is(target.data.uri, audioUrl, 'Reports uri correctly in data'); + + checkAudioinVideoContextMenu(); + }, /* ignorePreventDefault */ true); +} + +function checkAudioinVideoContextMenu() { + sendSrcTo('#menu5-trigger', audioUrl, function onSrcSet() { + sendContextMenuTo('#menu5-trigger', function onContextMenu(detail) { + var target = detail.systemTargets[0]; + is(target.nodeName, 'VIDEO', 'Reports correct nodeName'); + is(target.data.uri, audioUrl, 'Reports uri correctly in data'); + is(target.data.hasVideo, false, 'Audio data in video tag reports no "hasVideo"'); + + checkFormNoMethod(); + }, /* ignorePreventDefault */ true); + }); +} + +function checkFormNoMethod() { + sendContextMenuTo('#menu7-trigger', function onContextMenu(detail) { + var target = detail.systemTargets[0]; + is(target.nodeName, 'INPUT', 'Reports correct nodeName'); + is(target.data.method, 'get', 'Reports correct method'); + is(target.data.action, 'no_method', 'Reports correct action url'); + is(target.data.name, 'input1', 'Reports correct input name'); + + checkFormGetMethod(); + }, /* ignorePreventDefault */ true); +} + +function checkFormGetMethod() { + sendContextMenuTo('#menu8-trigger', function onContextMenu(detail) { + var target = detail.systemTargets[0]; + is(target.nodeName, 'INPUT', 'Reports correct nodeName'); + is(target.data.method, 'get', 'Reports correct method'); + is(target.data.action, 'http://example.com/get_method', 'Reports correct action url'); + is(target.data.name, 'input2', 'Reports correct input name'); + + checkFormPostMethod(); + }, /* ignorePreventDefault */ true); +} + +function checkFormPostMethod() { + sendContextMenuTo('#menu9-trigger', function onContextMenu(detail) { + var target = detail.systemTargets[0]; + is(target.nodeName, 'INPUT', 'Reports correct nodeName'); + is(target.data.method, 'post', 'Reports correct method'); + is(target.data.action, 'post_method', 'Reports correct action url'); + is(target.data.name, 'input3', 'Reports correct input name'); + + SimpleTest.finish(); + }, /* ignorePreventDefault */ true); +} + +/* Helpers */ +var mm = null; +var previousContextMenuDetail = null; +var currentContextMenuDetail = null; + +function sendSrcTo(selector, src, callback) { + mm.sendAsyncMessage('setsrc', { 'selector': selector, 'src': src }); + mm.addMessageListener('test:srcset', function onSrcSet(msg) { + mm.removeMessageListener('test:srcset', onSrcSet); + callback(); + }); +} + +function sendContextMenuTo(selector, callback, ignorePreventDefault) { + iframe.addEventListener('mozbrowsercontextmenu', function oncontextmenu(e) { + iframe.removeEventListener(e.type, oncontextmenu); + + // The embedder should call preventDefault() on the event if it will handle + // it. Not calling preventDefault() means it won't handle the event and + // should not be able to deal with context menu callbacks. + if (ignorePreventDefault !== true) { + e.preventDefault(); + } + + // Keep a reference to previous/current contextmenu event details. + previousContextMenuDetail = currentContextMenuDetail; + currentContextMenuDetail = e.detail; + + setTimeout(function() { callback(e.detail); }); + }); + + mm.sendAsyncMessage('contextmenu', { 'selector': selector }); +} + +function checkContextMenuCallbackForId(detail, id, callback) { + mm.addMessageListener('test:callbackfired', function onCallbackFired(msg) { + mm.removeMessageListener('test:callbackfired', onCallbackFired); + + msg = SpecialPowers.wrap(msg); + setTimeout(function() { callback(msg.data.label); }); + }); + + detail.contextMenuItemSelected(id); +} + + +var iframe = null; +function createIframe(callback) { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + iframe.src = 'data:text/html,<html>' + + '<body>' + + '<menu type="context" id="menu1" label="firstmenu">' + + '<menuitem label="foo" onclick="window.onContextMenuCallbackFired(event)"></menuitem>' + + '<menuitem label="bar" onclick="window.onContextMenuCallbackFired(event)"></menuitem>' + + '</menu>' + + '<menu type="context" id="menu2" label="secondmenu">' + + '<menuitem label="outer" onclick="window.onContextMenuCallbackFired(event)"></menuitem>' + + '<menu label="submenu">' + + '<menuitem label="inner 1"></menuitem>' + + '<menuitem label="inner 2" onclick="window.onContextMenuCallbackFired(event)"></menuitem>' + + '</menu>' + + '</menu>' + + '<div id="menu1-trigger" contextmenu="menu1"><a id="inner-link" href="foo.html">Menu 1</a></div>' + + '<a href="bar.html" contextmenu="menu2"><img id="menu2-trigger" src="example.png" /></a>' + + '<img id="menu3-trigger" src="example.png" />' + + '<video id="menu4-trigger" src="' + videoUrl + '"></video>' + + '<video id="menu5-trigger" preload="metadata"></video>' + + '<audio id="menu6-trigger" src="' + audioUrl + '"></audio>' + + '<form action="no_method"><input id="menu7-trigger" name="input1"></input></form>' + + '<form action="http://example.com/get_method" method="get"><input id="menu8-trigger" name="input2"></input></form>' + + '<form action="post_method" method="post"><input id="menu9-trigger" name="input3"></input></form>' + + '</body></html>'; + document.body.appendChild(iframe); + + // The following code will be included in the child + // ========================================================================= + function iframeScript() { + addMessageListener('contextmenu', function onContextMenu(msg) { + var document = content.document; + var evt = document.createEvent('HTMLEvents'); + evt.initEvent('contextmenu', true, true); + document.querySelector(msg.data.selector).dispatchEvent(evt); + }); + + addMessageListener('setsrc', function onContextMenu(msg) { + var wrappedTarget = content.document.querySelector(msg.data.selector); + var target = XPCNativeWrapper.unwrap(wrappedTarget); + target.addEventListener('loadedmetadata', function() { + sendAsyncMessage('test:srcset'); + }); + target.src = msg.data.src; + }); + + addMessageListener('browser-element-api:call', function onCallback(msg) { + if (msg.data.msg_name != 'fire-ctx-callback') + return; + + /* Use setTimeout in order to react *after* the platform */ + content.setTimeout(function() { + sendAsyncMessage('test:callbackfired', { label: label }); + label = null; + }); + }); + + var label = null; + XPCNativeWrapper.unwrap(content).onContextMenuCallbackFired = function(e) { + label = e.target.getAttribute('label'); + }; + } + // ========================================================================= + + iframe.addEventListener('mozbrowserloadend', function onload(e) { + iframe.removeEventListener(e.type, onload); + mm = SpecialPowers.getBrowserFrameMessageManager(iframe); + mm.loadFrameScript('data:,(' + iframeScript.toString() + ')();', false); + + // Now we're ready, let's start testing. + callback(); + }); +} + +addEventListener('testready', runTests); diff --git a/dom/browser-element/mochitest/browserElement_CookiesNotThirdParty.js b/dom/browser-element/mochitest/browserElement_CookiesNotThirdParty.js new file mode 100644 index 000000000..32f877786 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_CookiesNotThirdParty.js @@ -0,0 +1,51 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 806127 - Test that cookies set by <iframe mozbrowser> are not considered +// third-party. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + const innerPage = 'http://example.com/tests/dom/browser-element/mochitest/file_browserElement_CookiesNotThirdParty.html'; + + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + if (e.detail.message == 'next') { + iframe.src = innerPage + '?step=2'; + return; + } + + if (e.detail.message.startsWith('success:')) { + ok(true, e.detail.message); + return; + } + + if (e.detail.message.startsWith('failure:')) { + ok(false, e.detail.message); + return; + } + + if (e.detail.message == 'finish') { + SimpleTest.finish(); + } + }); + + // innerPage will set a cookie and then alert('next'). We'll load + // innerPage?step=2. That page will check that the cooke exists (despite the + // fact that we've disabled third-party cookies) and alert('success:') or + // alert('failure:'), as appropriate. Finally, the page will + // alert('finish'); + iframe.src = innerPage; + document.body.appendChild(iframe); +} + +// Disable third-party cookies for this test. +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set': [['network.cookie.cookieBehavior', 1]]}, runTest); +}); diff --git a/dom/browser-element/mochitest/browserElement_CopyPaste.js b/dom/browser-element/mochitest/browserElement_CopyPaste.js new file mode 100644 index 000000000..b23feef59 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_CopyPaste.js @@ -0,0 +1,339 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that "cut, copy, paste, selectall" and caretstatechanged event works from inside an <iframe mozbrowser>. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +SimpleTest.requestFlakyTimeout("untriaged"); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.setupAccessibleCaretPref(); +browserElementTestHelpers.addPermission(); +const { Services } = SpecialPowers.Cu.import('resource://gre/modules/Services.jsm'); + +var gTextarea = null; +var mm; +var iframeOuter; +var iframeInner; +var state = 0; +var stateMeaning; +var defaultData; +var pasteData; +var focusScript; +var createEmbededFrame = false; +var testSelectionChange = false; + +function copyToClipboard(str) { + gTextarea.value = str; + SpecialPowers.wrap(gTextarea).editor.selectAll(); + SpecialPowers.wrap(gTextarea).editor.copy(); +} + +function getScriptForGetContent() { + var script = 'data:,\ + var elt = content.document.getElementById("text"); \ + var txt = ""; \ + if (elt) { \ + if (elt.tagName === "DIV" || elt.tagName === "BODY") { \ + txt = elt.textContent; \ + } else { \ + txt = elt.value; \ + } \ + } \ + sendAsyncMessage("content-text", txt);'; + return script; +} + +function getScriptForSetFocus() { + var script = 'data:,' + focusScript + 'sendAsyncMessage("content-focus")'; + return script; +} + +function runTest() { + iframeOuter = document.createElement('iframe'); + iframeOuter.setAttribute('mozbrowser', 'true'); + if (createEmbededFrame) { + iframeOuter.src = "file_empty.html"; + } + document.body.appendChild(iframeOuter); + + gTextarea = document.createElement('textarea'); + document.body.appendChild(gTextarea); + + iframeOuter.addEventListener("mozbrowserloadend", function onloadend(e) { + iframeOuter.removeEventListener("mozbrowserloadend", onloadend); + + if (createEmbededFrame) { + var contentWin = SpecialPowers.wrap(iframeOuter) + .QueryInterface(SpecialPowers.Ci.nsIFrameLoaderOwner) + .frameLoader.docShell.contentViewer.DOMDocument.defaultView; + var contentDoc = contentWin.document; + iframeInner = contentDoc.createElement('iframe'); + iframeInner.setAttribute('mozbrowser', true); + iframeInner.setAttribute('remote', 'false'); + contentDoc.body.appendChild(iframeInner); + iframeInner.addEventListener("mozbrowserloadend", function onloadendinner(e) { + iframeInner.removeEventListener("mozbrowserloadend", onloadendinner); + mm = SpecialPowers.getBrowserFrameMessageManager(iframeInner); + dispatchTest(e); + }); + } else { + iframeInner = iframeOuter; + mm = SpecialPowers.getBrowserFrameMessageManager(iframeInner); + dispatchTest(e); + } + }); +} + +function doCommand(cmd) { + var COMMAND_MAP = { + 'cut': 'cmd_cut', + 'copy': 'cmd_copyAndCollapseToEnd', + 'paste': 'cmd_paste', + 'selectall': 'cmd_selectAll' + }; + var script = 'data:,docShell.doCommand("' + COMMAND_MAP[cmd] + '");'; + mm.loadFrameScript(script, false); +} + +function dispatchTest(e) { + iframeInner.addEventListener("mozbrowserloadend", function onloadend2(e) { + iframeInner.removeEventListener("mozbrowserloadend", onloadend2); + iframeInner.focus(); + SimpleTest.executeSoon(function() { testSelectAll(e); }); + }); + + switch (state) { + case 0: // test for textarea + defaultData = "Test for selection change event"; + pasteData = "from parent "; + iframeInner.src = "data:text/html,<html><body>" + + "<textarea id='text'>" + defaultData + "</textarea>" + + "</body>" + + "</html>"; + stateMeaning = " (test: textarea)"; + focusScript = "var elt=content.document.getElementById('text');elt.focus();elt.select();"; + break; + case 1: // test for input text + defaultData = "Test for selection change event"; + pasteData = "from parent "; + iframeInner.src = "data:text/html,<html><body>" + + "<input type='text' id='text' value='" + defaultData + "'>" + + "</body>" + + "</html>"; + stateMeaning = " (test: <input type=text>)"; + focusScript = "var elt=content.document.getElementById('text');elt.focus();elt.select();"; + break; + case 2: // test for input number + defaultData = "12345"; + pasteData = "67890"; + iframeInner.src = "data:text/html,<html><body>" + + "<input type='number' id='text' value='" + defaultData + "'>" + + "</body>" + + "</html>"; + stateMeaning = " (test: <input type=number>)"; + focusScript = "var elt=content.document.getElementById('text');elt.focus();elt.select();"; + break; + case 3: // test for div contenteditable + defaultData = "Test for selection change event"; + pasteData = "from parent "; + iframeInner.src = "data:text/html,<html><body>" + + "<div contenteditable='true' id='text'>" + defaultData + "</div>" + + "</body>" + + "</html>"; + stateMeaning = " (test: content editable div)"; + focusScript = "var elt=content.document.getElementById('text');elt.focus();"; + break; + case 4: // test for normal div + defaultData = "Test for selection change event"; + pasteData = "from parent "; + iframeInner.src = "data:text/html,<html><body>" + + "<div id='text'>" + defaultData + "</div>" + + "</body>" + + "</html>"; + stateMeaning = " (test: normal div)"; + focusScript = "var elt=content.document.getElementById('text');elt.focus();"; + break; + case 5: // test for normal div with designMode:on + defaultData = "Test for selection change event"; + pasteData = "from parent "; + iframeInner.src = "data:text/html,<html><body id='text'>" + + defaultData + + "</body>" + + "<script>document.designMode='on';</script>" + + "</html>"; + stateMeaning = " (test: normal div with designMode:on)"; + focusScript = "var elt=content.document.getElementById('text');elt.focus();"; + break; + default: + if (createEmbededFrame || browserElementTestHelpers.getOOPByDefaultPref()) { + SimpleTest.finish(); + } else { + createEmbededFrame = true; + + // clean up and run test again. + document.body.removeChild(iframeOuter); + document.body.removeChild(gTextarea); + state = 0; + runTest(); + } + break; + } +} + +function isChildProcess() { + return SpecialPowers.Cc["@mozilla.org/xre/app-info;1"] + .getService(SpecialPowers.Ci.nsIXULRuntime) + .processType != SpecialPowers.Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT; +} + +function testSelectAll(e) { + // Skip mozbrowser test if we're at child process. + if (!isChildProcess()) { + let eventName = "mozbrowsercaretstatechanged"; + iframeOuter.addEventListener(eventName, function caretchangeforselectall(e) { + iframeOuter.removeEventListener(eventName, caretchangeforselectall, true); + ok(true, "got mozbrowsercaretstatechanged event." + stateMeaning); + ok(e.detail, "event.detail is not null." + stateMeaning); + ok(e.detail.width != 0, "event.detail.width is not zero" + stateMeaning); + ok(e.detail.height != 0, "event.detail.height is not zero" + stateMeaning); + SimpleTest.executeSoon(function() { testCopy1(e); }); + }, true); + } + + mm.addMessageListener('content-focus', function messageforfocus(msg) { + mm.removeMessageListener('content-focus', messageforfocus); + // test selectall command, after calling this the caretstatechanged event should be fired. + doCommand('selectall'); + if (isChildProcess()) { + SimpleTest.executeSoon(function() { testCopy1(e); }); + } + }); + + mm.loadFrameScript(getScriptForSetFocus(), false); +} + +function testCopy1(e) { + // Right now we're at "selectall" state, so we can test copy commnad by + // calling doCommand + copyToClipboard(""); + let setup = function() { + doCommand("copy"); + }; + + let nextTest = function(success) { + ok(success, "copy command works" + stateMeaning); + SimpleTest.executeSoon(function() { testPaste1(e); }); + }; + + let success = function() { + nextTest(true); + } + + let fail = function() { + nextTest(false); + } + + let compareData = defaultData; + SimpleTest.waitForClipboard(compareData, setup, success, fail); +} + +function testPaste1(e) { + // Next test paste command, first we copy to global clipboard in parent side. + // Then paste it to child side. + copyToClipboard(pasteData); + + doCommand('selectall'); + doCommand("paste"); + SimpleTest.executeSoon(function() { testPaste2(e); }); +} + +function testPaste2(e) { + mm.addMessageListener('content-text', function messageforpaste(msg) { + mm.removeMessageListener('content-text', messageforpaste); + if (state == 4) { + // normal div cannot paste, so the content remain unchange + ok(SpecialPowers.wrap(msg).json === defaultData, "paste command works" + stateMeaning); + } else if (state == 3 && browserElementTestHelpers.getOOPByDefaultPref()) { + // Something weird when we doCommand with content editable element in OOP. Mark this case as todo + todo(false, "paste command works" + stateMeaning); + } else { + ok(SpecialPowers.wrap(msg).json === pasteData, "paste command works" + stateMeaning); + } + SimpleTest.executeSoon(function() { testCut1(e); }); + }); + + mm.loadFrameScript(getScriptForGetContent(), false); +} + +function testCut1(e) { + // Clean clipboard first + copyToClipboard(""); + let setup = function() { + doCommand("selectall"); + doCommand("cut"); + }; + + let nextTest = function(success) { + if (state == 3 && browserElementTestHelpers.getOOPByDefaultPref()) { + // Something weird when we doCommand with content editable element in OOP. + todo(false, "cut function works" + stateMeaning); + } else { + ok(success, "cut function works" + stateMeaning); + } + SimpleTest.executeSoon(function() { testCut2(e); }); + }; + + let success = function() { + nextTest(true); + } + + let fail = function() { + nextTest(false); + } + + let compareData = pasteData; + // Something weird when we doCommand with content editable element in OOP. + // Always true in this case + // Normal div case cannot cut, always true as well. + if ((state == 3 && browserElementTestHelpers.getOOPByDefaultPref()) || + state == 4) { + compareData = function() { return true; } + } + + SimpleTest.waitForClipboard(compareData, setup, success, fail); +} + +function testCut2(e) { + mm.addMessageListener('content-text', function messageforcut(msg) { + mm.removeMessageListener('content-text', messageforcut); + // normal div cannot cut + if (state == 4) { + ok(SpecialPowers.wrap(msg).json !== "", "cut command works" + stateMeaning); + } else if (state == 3 && browserElementTestHelpers.getOOPByDefaultPref()) { + // Something weird when we doCommand with content editable element in OOP. Mark this case as todo + todo(false, "cut command works" + stateMeaning); + } else { + ok(SpecialPowers.wrap(msg).json === "", "cut command works" + stateMeaning); + } + + state++; + dispatchTest(e); + }); + + mm.loadFrameScript(getScriptForGetContent(), false); +} + +// Give our origin permission to open browsers, and remove it when the test is complete. +var principal = SpecialPowers.wrap(document).nodePrincipal; +var context = { url: SpecialPowers.wrap(principal.URI).spec, + originAttributes: { + appId: principal.appId, + inIsolatedMozBrowser: true }}; + +addEventListener('testready', function() { + SpecialPowers.pushPermissions([ + {type: 'browser', allow: 1, context: context} + ], runTest); +}); + diff --git a/dom/browser-element/mochitest/browserElement_DOMRequestError.js b/dom/browser-element/mochitest/browserElement_DOMRequestError.js new file mode 100644 index 000000000..040cb81fd --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_DOMRequestError.js @@ -0,0 +1,62 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test if DOMRequest returned by an iframe gets an error callback when +// the iframe is not in the DOM. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +function runTest() { + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + iframe1.src = 'data:text/html,<html>' + + '<body style="background:green">hello</body></html>'; + document.body.appendChild(iframe1); + + function testIframe(beforeRun, isErrorExpected, nextTest) { + return function() { + var error = false; + if (beforeRun) + beforeRun(); + function testEnd() { + is(isErrorExpected, error); + SimpleTest.executeSoon(nextTest); + } + + var domRequest = iframe1.getScreenshot(1000, 1000); + domRequest.onsuccess = function(e) { + testEnd(); + } + domRequest.onerror = function(e) { + error = true; + testEnd(); + } + }; + } + + function iframeLoadedHandler() { + iframe1.removeEventListener('mozbrowserloadend', iframeLoadedHandler); + // Test 1: iframe is in the DOM. + // Test 2: iframe is removed from the DOM. + // Test 3: iframe is added back into the DOM. + var test3 = testIframe( + function() { + document.body.appendChild(iframe1); + }, false, + function() { + SimpleTest.finish(); + }) + ; + var test2 = testIframe(function() { + document.body.removeChild(iframe1); + }, true, test3); + var test1 = testIframe(null, false, test2); + SimpleTest.executeSoon(test1); + } + + iframe1.addEventListener('mozbrowserloadend', iframeLoadedHandler); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_DataURI.js b/dom/browser-element/mochitest/browserElement_DataURI.js new file mode 100644 index 000000000..f57f4566a --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_DataURI.js @@ -0,0 +1,68 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that data: URIs work with mozbrowserlocationchange events. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + iframe1.id = 'iframe1'; + iframe1.addEventListener('mozbrowserloadend', function if1_loadend() { + iframe1.removeEventListener('mozbrowserloadend', if1_loadend); + ok(true, 'Got first loadend event.'); + SimpleTest.executeSoon(runTest2); + }); + iframe1.src = browserElementTestHelpers.emptyPage1; + document.body.appendChild(iframe1); + + var iframe2 = document.createElement('iframe'); + iframe2.id = 'iframe2'; + document.body.appendChild(iframe2); +} + +function runTest2() { + var iframe1 = document.getElementById('iframe1'); + var iframe2 = document.getElementById('iframe2'); + + var sawLoadEnd = false; + var sawLocationChange = false; + + iframe1.addEventListener('mozbrowserlocationchange', function(e) { + ok(e.isTrusted, 'Event should be trusted.'); + ok(!sawLocationChange, 'Just one locationchange event.'); + ok(!sawLoadEnd, 'locationchange before load.'); + is(e.detail.url, 'data:text/html,1', "event's reported location"); + sawLocationChange = true; + }); + + iframe1.addEventListener('mozbrowserloadend', function() { + ok(sawLocationChange, 'Loadend after locationchange.'); + ok(!sawLoadEnd, 'Just one loadend event.'); + sawLoadEnd = true; + }); + + function iframe2Load() { + if (!sawLoadEnd || !sawLocationChange) { + // Spin if iframe1 hasn't loaded yet. + SimpleTest.executeSoon(iframe2Load); + return; + } + ok(true, 'Got iframe2 load.'); + SimpleTest.finish(); + } + iframe2.addEventListener('load', iframe2Load); + + + iframe1.src = 'data:text/html,1'; + + // Load something into iframe2 to check that it doesn't trigger a + // locationchange for our iframe1 listener. + iframe2.src = browserElementTestHelpers.emptyPage2; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_DocumentFirstPaint.js b/dom/browser-element/mochitest/browserElement_DocumentFirstPaint.js new file mode 100644 index 000000000..16618829e --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_DocumentFirstPaint.js @@ -0,0 +1,69 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 829486 - Add mozdocumentbrowserfirstpaint event. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +var iframe; + +function runTestQueue(queue) { + if (queue.length == 0) { + SimpleTest.finish(); + return; + } + + var gotFirstPaint = false; + var gotFirstLocationChange = false; + var test = queue.shift(); + + function runNext() { + iframe.removeEventListener('mozbrowserdocumentfirstpaint', documentfirstpainthandler); + iframe.removeEventListener('mozbrowserloadend', loadendhandler); + runTestQueue(queue); + } + + function documentfirstpainthandler(e) { + ok(!gotFirstPaint, "Got firstpaint only once"); + gotFirstPaint = true; + if (gotFirstLocationChange) { + runNext(); + } + } + + function loadendhandler(e) { + gotFirstLocationChange = true; + if (gotFirstPaint) { + runNext(); + } + } + + iframe.addEventListener('mozbrowserdocumentfirstpaint', documentfirstpainthandler); + iframe.addEventListener('mozbrowserloadend', loadendhandler); + + test(); +} + +function testChangeLocation() { + iframe.src = browserElementTestHelpers.emptyPage1 + "?2"; +} + +function testReload() { + iframe.reload(); +} + +function testFirstLoad() { + document.body.appendChild(iframe); + iframe.src = browserElementTestHelpers.emptyPage1; +} + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + runTestQueue([testFirstLoad, testReload, testChangeLocation]); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_Download.js b/dom/browser-element/mochitest/browserElement_Download.js new file mode 100644 index 000000000..965387657 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Download.js @@ -0,0 +1,37 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 983747 - Test 'download' method on iframe. + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +var iframe; +var downloadURL = 'http://test/tests/dom/browser-element/mochitest/file_download_bin.sjs'; + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + iframe.addEventListener('mozbrowserloadend', loadend); + iframe.src = 'data:text/html,<html><body>hello</body></html>'; + iframe.setAttribute('remote', 'true'); + + document.body.appendChild(iframe); +} + +function loadend() { + var req = iframe.download(downloadURL, { filename: 'test.bin' }); + req.onsuccess = function() { + ok(true, 'Download finished as expected.'); + SimpleTest.finish(); + } + req.onerror = function() { + ok(false, 'Expected no error, got ' + req.error); + } +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_ErrorSecurity.js b/dom/browser-element/mochitest/browserElement_ErrorSecurity.js new file mode 100644 index 000000000..c13a37140 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_ErrorSecurity.js @@ -0,0 +1,58 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 764718 - Test that mozbrowsererror works for a security error. + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +var iframe = null; +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + checkForDnsError(); +} + +function checkForDnsError() { + iframe.addEventListener("mozbrowsererror", function onDnsError(e) { + iframe.removeEventListener(e.type, onDnsError); + ok(true, "Got mozbrowsererror event."); + ok(e.detail.type == "dnsNotFound", "Event's detail has a |type| param with the value '" + e.detail.type + "'."); + + checkForExpiredCertificateError(); + }); + + iframe.src = "http://this_is_not_a_domain.example.com"; +} + +function checkForExpiredCertificateError() { + iframe.addEventListener("mozbrowsererror", function onCertError(e) { + iframe.removeEventListener(e.type, onCertError); + ok(true, "Got mozbrowsererror event."); + ok(e.detail.type == "certerror", "Event's detail has a |type| param with the value '" + e.detail.type + "'."); + + checkForNoCertificateError(); + }); + + iframe.src = "https://expired.example.com"; +} + + +function checkForNoCertificateError() { + iframe.addEventListener("mozbrowsererror", function onCertError(e) { + iframe.removeEventListener(e.type, onCertError); + ok(true, "Got mozbrowsererror event."); + ok(e.detail.type == "certerror", "Event's detail has a |type| param with the value '" + e.detail.type + "'."); + + SimpleTest.finish(); + }); + + iframe.src = "https://nocert.example.com"; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_ExecuteScript.js b/dom/browser-element/mochitest/browserElement_ExecuteScript.js new file mode 100644 index 000000000..901964999 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_ExecuteScript.js @@ -0,0 +1,119 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 1174733 - Browser API: iframe.executeScript + +'use strict'; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +function runTest() { + + const origin = 'http://example.org'; + const url = 'http://example.org/tests/dom/browser-element/mochitest/file_browserElement_ExecuteScript.html'; + + // Test if all key=>value pairs in o1 are present in o2. + const c = (o1, o2) => Object.keys(o1).every(k => o1[k] == o2[k]); + + let scriptId = 0; + + const bail = () => { + ok(false, `scriptId: ${scriptId++}`); + } + + SpecialPowers.pushPermissions([ + {type: 'browser', allow: 1, context: document}, + {type: 'browser:universalxss', allow: 1, context: document} + ], function() { + let iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + iframe.addEventListener('mozbrowserloadend', function onload() { + iframe.removeEventListener('mozbrowserloadend', onload); + onReady(iframe); + }); + iframe.src = url; + document.body.appendChild(iframe); + }); + + + function onReady(iframe) { + iframe.executeScript('4 + 4', {url}).then(rv => { + is(rv, 8, `scriptId: ${scriptId++}`); + return iframe.executeScript('(() => {return {a:42}})()', {url}) + }, bail).then(rv => { + ok(c(rv, {a:42}), `scriptId: ${scriptId++}`); + return iframe.executeScript('(() => {return {a:42}})()', {origin}) + }, bail).then(rv => { + ok(c(rv, {a:42}), `scriptId: ${scriptId++}`); + return iframe.executeScript('(() => {return {a:42}})()', {origin, url}) + }, bail).then(rv => { + ok(c(rv, {a:42}), `scriptId: ${scriptId++}`); + return iframe.executeScript(` + new Promise((resolve, reject) => { + resolve(document.body.textContent.trim()); + }); + `, {url}) + }, bail).then(rv => { + is(rv, 'foo', `scriptId: ${scriptId++}`); + return iframe.executeScript(` + new Promise((resolve, reject) => { + resolve({a:43,b:34}); + }); + `, {url}) + }, bail).then(rv => { + ok(c(rv, {a:43,b:34}), `scriptId: ${scriptId++}`); + return iframe.executeScript(` + … syntax error + `, {url}); + }, bail).then(bail, (error) => { + is(error.name, 'SyntaxError: illegal character', `scriptId: ${scriptId++}`); + return iframe.executeScript(` + window + `, {url}); + }).then(bail, (error) => { + is(error.name, 'Script last expression must be a promise or a JSON object', `scriptId: ${scriptId++}`); + return iframe.executeScript(` + new Promise((resolve, reject) => { + reject('BOOM'); + }); + `, {url}); + }).then(bail, (error) => { + is(error.name, 'BOOM', `scriptId: ${scriptId++}`); + return iframe.executeScript(` + new Promise((resolve, reject) => { + resolve(window); + }); + `, {url}); + }).then(bail, (error) => { + is(error.name, 'Value returned (resolve) by promise is not a valid JSON object', `scriptId: ${scriptId++}`); + return iframe.executeScript('window.btoa("a")', {url}) + }, bail).then(rv => { + ok(c(rv, 'YQ=='), `scriptId: ${scriptId++}`); + return iframe.executeScript('window.wrappedJSObject.btoa("a")', {url}) + }, bail).then(bail, (error) => { + is(error.name, 'TypeError: window.wrappedJSObject is undefined', `scriptId: ${scriptId++}`); + return iframe.executeScript('42', {}) + }).then(bail, error => { + is(error.name, 'InvalidAccessError', `scriptId: ${scriptId++}`); + return iframe.executeScript('42'); + }).then(bail, error => { + is(error.name, 'InvalidAccessError', `scriptId: ${scriptId++}`); + return iframe.executeScript('43', { url: 'http://foo.com' }); + }).then(bail, (error) => { + is(error.name, 'URL mismatches', `scriptId: ${scriptId++}`); + return iframe.executeScript('43', { url: '_' }); + }, bail).then(bail, (error) => { + is(error.name, 'Malformed URL', `scriptId: ${scriptId++}`); + return iframe.executeScript('43', { origin: 'http://foo.com' }); + }, bail).then(bail, (error) => { + is(error.name, 'Origin mismatches', `scriptId: ${scriptId++}`); + return iframe.executeScript('43', { origin: 'https://example.org' }); + }, bail).then(bail, (error) => { + is(error.name, 'Origin mismatches', `scriptId: ${scriptId++}`); + SimpleTest.finish(); + }); + } +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_ExposableURI.js b/dom/browser-element/mochitest/browserElement_ExposableURI.js new file mode 100644 index 000000000..435e11a80 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_ExposableURI.js @@ -0,0 +1,55 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 795317: Test that the browser element sanitizes its URIs by removing the +// "unexposable" parts before sending them in the locationchange event. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +var iframe; + +function testPassword() { + function locationchange(e) { + var uri = e.detail.url; + is(uri, 'http://mochi.test:8888/tests/dom/browser-element/mochitest/file_empty.html', + "Username and password shouldn't be exposed in uri."); + SimpleTest.finish(); + } + + iframe.addEventListener('mozbrowserlocationchange', locationchange); + iframe.src = "http://iamuser:iampassword@mochi.test:8888/tests/dom/browser-element/mochitest/file_empty.html"; +} + +function testWyciwyg() { + var locationChangeCount = 0; + + function locationchange(e) { + // locationChangeCount: + // 0 - the first load. + // 1 - after document.write(). + if (locationChangeCount == 0) { + locationChangeCount ++; + } else if (locationChangeCount == 1) { + var uri = e.detail.url; + is(uri, 'http://mochi.test:8888/tests/dom/browser-element/mochitest/file_wyciwyg.html', "Scheme in string shouldn't be wyciwyg"); + iframe.removeEventListener('mozbrowserlocationchange', locationchange); + SimpleTest.executeSoon(testPassword); + } + } + + // file_wyciwyg.html calls document.write() to create a wyciwyg channel. + iframe.src = 'file_wyciwyg.html'; + iframe.addEventListener('mozbrowserlocationchange', locationchange); +} + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + testWyciwyg(); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_Find.js b/dom/browser-element/mochitest/browserElement_Find.js new file mode 100644 index 000000000..3a4968119 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Find.js @@ -0,0 +1,145 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 1163961 - Test search API + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +function runTest() { + + let iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + iframe.src = 'data:text/html,foo bar foo XXX Foo BAR foobar foobar'; + + const once = (eventName) => { + return new Promise((resolve) => { + iframe.addEventListener(eventName, function onEvent(...args) { + iframe.removeEventListener(eventName, onEvent); + resolve(...args); + }); + }); + } + + // Test if all key=>value pairs in o1 are present in o2. + const c = (o1, o2) => Object.keys(o1).every(k => o1[k] == o2[k]); + + let testCount = 0; + + once('mozbrowserloadend').then(() => { + iframe.findAll('foo', 'case-insensitive'); + return once('mozbrowserfindchange'); + }).then(({detail}) => { + ok(c(detail, { + msg_name: "findchange", + active: true, + searchString: 'foo', + searchLimit: 1000, + activeMatchOrdinal: 1, + numberOfMatches: 5, + }), `test ${testCount++}`); + iframe.findNext('forward'); + return once('mozbrowserfindchange'); + }).then(({detail}) => { + ok(c(detail, { + msg_name: "findchange", + active: true, + searchString: 'foo', + searchLimit: 1000, + activeMatchOrdinal: 2, + numberOfMatches: 5, + }), `test ${testCount++}`); + iframe.findNext('backward'); + return once('mozbrowserfindchange'); + }).then(({detail}) => { + ok(c(detail, { + msg_name: "findchange", + active: true, + searchString: 'foo', + searchLimit: 1000, + activeMatchOrdinal: 1, + numberOfMatches: 5, + }), `test ${testCount++}`); + iframe.findAll('xxx', 'case-sensitive'); + return once('mozbrowserfindchange'); + }).then(({detail}) => { + ok(c(detail, { + msg_name: "findchange", + active: true, + searchString: 'xxx', + searchLimit: 1000, + activeMatchOrdinal: 0, + numberOfMatches: 0, + }), `test ${testCount++}`); + iframe.findAll('bar', 'case-insensitive'); + return once('mozbrowserfindchange'); + }).then(({detail}) => { + ok(c(detail, { + msg_name: "findchange", + active: true, + searchString: 'bar', + searchLimit: 1000, + activeMatchOrdinal: 1, + numberOfMatches: 4, + }), `test ${testCount++}`); + iframe.findNext('forward'); + return once('mozbrowserfindchange'); + }).then(({detail}) => { + ok(c(detail, { + msg_name: "findchange", + active: true, + searchString: 'bar', + searchLimit: 1000, + activeMatchOrdinal: 2, + numberOfMatches: 4, + }), `test ${testCount++}`); + iframe.findNext('forward'); + return once('mozbrowserfindchange'); + }).then(({detail}) => { + ok(c(detail, { + msg_name: "findchange", + active: true, + searchString: 'bar', + searchLimit: 1000, + activeMatchOrdinal: 3, + numberOfMatches: 4, + }), `test ${testCount++}`); + iframe.findNext('forward'); + return once('mozbrowserfindchange'); + }).then(({detail}) => { + ok(c(detail, { + msg_name: "findchange", + active: true, + searchString: 'bar', + searchLimit: 1000, + activeMatchOrdinal: 4, + numberOfMatches: 4, + }), `test ${testCount++}`); + iframe.findNext('forward'); + return once('mozbrowserfindchange'); + }).then(({detail}) => { + ok(c(detail, { + msg_name: "findchange", + active: true, + searchString: 'bar', + searchLimit: 1000, + activeMatchOrdinal: 1, + numberOfMatches: 4, + }), `test ${testCount++}`); + iframe.clearMatch(); + return once('mozbrowserfindchange'); + }).then(({detail}) => { + ok(c(detail, { + msg_name: "findchange", + active: false + }), `test ${testCount++}`); + SimpleTest.finish(); + }); + + document.body.appendChild(iframe); + +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_FirstPaint.js b/dom/browser-element/mochitest/browserElement_FirstPaint.js new file mode 100644 index 000000000..ad67abc3a --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_FirstPaint.js @@ -0,0 +1,43 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 787378 - Add mozbrowserfirstpaint event. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + var gotFirstPaint = false; + var gotFirstLocationChange = false; + iframe.addEventListener('mozbrowserfirstpaint', function(e) { + ok(!gotFirstPaint, "Got only one first paint."); + gotFirstPaint = true; + + if (gotFirstLocationChange) { + iframe.src = browserElementTestHelpers.emptyPage1 + '?2'; + } + }); + + iframe.addEventListener('mozbrowserlocationchange', function(e) { + if (e.detail.url == browserElementTestHelpers.emptyPage1) { + gotFirstLocationChange = true; + if (gotFirstPaint) { + iframe.src = browserElementTestHelpers.emptyPage1 + '?2'; + } + } + else if (e.detail.url.endsWith('?2')) { + SimpleTest.finish(); + } + }); + + document.body.appendChild(iframe); + + iframe.src = browserElementTestHelpers.emptyPage1; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_ForwardName.js b/dom/browser-element/mochitest/browserElement_ForwardName.js new file mode 100644 index 000000000..326c1ef24 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_ForwardName.js @@ -0,0 +1,43 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 781320 - Test that the name in <iframe mozbrowser name="foo"> is +// forwarded down to remote mozbrowsers. + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + iframe.setAttribute('name', 'foo'); + + iframe.addEventListener("mozbrowseropenwindow", function(e) { + ok(false, 'Got mozbrowseropenwindow, but should not have.'); + }); + + iframe.addEventListener('mozbrowserlocationchange', function(e) { + ok(true, "Got locationchange to " + e.detail.url); + if (e.detail.url.endsWith("ForwardName.html#finish")) { + SimpleTest.finish(); + } + }); + + // The file sends us messages via alert() that start with "success:" or + // "failure:". + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + ok(e.detail.message.startsWith('success:'), e.detail.message); + }); + + document.body.appendChild(iframe); + + // This file does window.open('file_browserElement_ForwardName.html#finish', + // 'foo'); That should open in the curent window, because the window should + // be named foo. + iframe.src = 'file_browserElement_ForwardName.html'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_FrameWrongURI.js b/dom/browser-element/mochitest/browserElement_FrameWrongURI.js new file mode 100644 index 000000000..c3f37b4c8 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_FrameWrongURI.js @@ -0,0 +1,52 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 804446 - Test that window.open(javascript:..) works with <iframe mozbrowser>. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframeJS = document.createElement('iframe'); + iframeJS.setAttribute('mozbrowser', 'true'); + + iframeJS.addEventListener('mozbrowserloadstart', function(e) { + ok(false, "This should not happen!"); + }); + + iframeJS.addEventListener('mozbrowserloadend', function(e) { + ok(false, "This should not happen!"); + }); + + iframeJS.src = 'javascript:alert("Foo");'; + document.body.appendChild(iframeJS); + + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + var gotPopup = false; + iframe.addEventListener('mozbrowseropenwindow', function(e) { + is(gotPopup, false, 'Should get just one popup.'); + gotPopup = true; + + document.body.appendChild(e.detail.frameElement); + }); + + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + ok(gotPopup, 'Got mozbrowseropenwindow event before showmodalprompt event.'); + if (e.detail.message.indexOf("success") == 0) { + ok(true, e.detail.message); + SimpleTest.finish(); + } + else { + ok(false, "Got invalid message: " + e.detail.message); + } + }); + + iframe.src = 'file_browserElement_FrameWrongURI.html'; + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_GetContentDimensions.js b/dom/browser-element/mochitest/browserElement_GetContentDimensions.js new file mode 100644 index 000000000..722c42b77 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_GetContentDimensions.js @@ -0,0 +1,66 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 757859 - Test the getContentDimensions functionality of mozbrowser + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +var resizeContent = function() { + var innerBox = content.document.getElementById('abox'); + innerBox.style.width = '800px'; + innerBox.style.height = '800px'; +} + +function runTest() { + + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + + var iframeWidth = 400; + var iframeHeight = 400; + var numIframeLoaded = 0; + var numResizeEvents = 0; + var mm; + + iframe1.src = 'data:text/html,<html><body><div id=\'abox\' ' + + 'style=\'background:blue;width:200px;height:200px\'>test</div></body></html>'; + iframe1.style.width = iframeWidth + 'px'; + iframe1.style.height = iframeHeight + 'px'; + document.body.appendChild(iframe1); + + function iframeScrollAreaChanged(e) { + numResizeEvents++; + if (numResizeEvents === 1) { + ok(true, 'Resize event when changing content size'); + ok(e.detail.width > iframeWidth, 'Iframes content is larger than iframe'); + ok(e.detail.height > iframeHeight, 'Iframes content is larger than iframe'); + iframe1.src = 'data:text/html,<html><body><div id=\'abox\' ' + + 'style=\'background:blue;width:200px;height:200px\'>test</div></body></html>'; + } else if (numResizeEvents === 2) { + ok(true, 'Resize event when changing src'); + iframe1.removeEventListener('mozbrowserresize', iframeScrollAreaChanged); + SimpleTest.finish(); + } + } + + function iframeLoadedHandler() { + iframe1.removeEventListener('mozbrowserloadend', iframeLoadedHandler); + mm = SpecialPowers.getBrowserFrameMessageManager(iframe1); + iframe1.getContentDimensions().onsuccess = function(e) { + ok(typeof e.target.result.width === 'number', 'Received width'); + ok(typeof e.target.result.height === 'number', 'Received height'); + ok(e.target.result.height <= iframeHeight, 'Iframes content is smaller than iframe'); + ok(e.target.result.width <= iframeWidth, 'Iframes content is smaller than iframe'); + iframe1.addEventListener('mozbrowserscrollareachanged', iframeScrollAreaChanged); + mm.loadFrameScript('data:,(' + resizeContent.toString() + ')();', false); + } + } + + iframe1.addEventListener('mozbrowserloadend', iframeLoadedHandler); +} + +addEventListener('load', function() { + SimpleTest.executeSoon(runTest); +}); diff --git a/dom/browser-element/mochitest/browserElement_GetScreenshot.js b/dom/browser-element/mochitest/browserElement_GetScreenshot.js new file mode 100644 index 000000000..75d70f04c --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_GetScreenshot.js @@ -0,0 +1,117 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test the getScreenshot property for mozbrowser +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +function runTest() { + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + + iframe1.src = 'data:text/html,<html>' + + '<body style="background:green">hello</body></html>'; + document.body.appendChild(iframe1); + + var screenshotImageDatas = []; + + function screenshotTaken(aScreenshotImageData) { + screenshotImageDatas.push(aScreenshotImageData); + + if (screenshotImageDatas.length === 1) { + ok(true, 'Got initial non blank screenshot'); + + var view = aScreenshotImageData.data; + if (view[3] !== 255) { + ok(false, 'The first pixel of initial screenshot is not opaque'); + SimpleTest.finish(); + return; + } + ok(true, 'Verified the first pixel of initial screenshot is opaque'); + + iframe1.src = 'data:text/html,<html>' + + '<body style="background:transparent">hello</body></html>'; + + iframe1.addEventListener('mozbrowserloadend', ()=>takeScreenshot('image/png')); + + } + else if (screenshotImageDatas.length === 2) { + ok(true, 'Got updated screenshot after source page changed'); + + var view = aScreenshotImageData.data; + if (view[3] !== 0) { + // The case here will always fail when oop'd on Firefox Desktop, + // but not on B2G Emulator + // See https://bugzil.la/878003#c20 + + var isB2G = (navigator.platform === ''); + info('navigator.platform: ' + navigator.platform); + if (!isB2G && browserElementTestHelpers.getOOPByDefaultPref()) { + todo(false, 'The first pixel of updated screenshot is not transparent'); + } else { + ok(false, 'The first pixel of updated screenshot is not transparent'); + } + SimpleTest.finish(); + return; + } + + ok(true, 'Verified the first pixel of updated screenshot is transparent'); + SimpleTest.finish(); + } + } + + // We continually take screenshots until we get one that we are + // happy with. + function takeScreenshot(mimeType) { + function gotImage(e) { + // |this| is the Image. + + URL.revokeObjectURL(this.src); + + if (e.type === 'error' || !this.width || !this.height) { + ok(false, "load image error"); + SimpleTest.finish(); + return; + } + + var canvas = document.createElement('canvas'); + canvas.width = canvas.height = 1000; + var ctx = canvas.getContext('2d'); + ctx.drawImage(this, 0, 0); + var imageData = ctx.getImageData(0, 0, 1000, 1000); + + screenshotTaken(imageData); + } + + function getScreenshotImageData(e) { + var blob = e.target.result; + if (blob.type !== mimeType) { + ok(false, 'MIME type of screenshot taken incorrect'); + SimpleTest.finish(); + } + + if (blob.size === 0) { + ok(false, "get screenshot image error"); + SimpleTest.finish(); + } + + var img = new Image(); + img.src = URL.createObjectURL(blob); + img.onload = img.onerror = gotImage; + } + + iframe1.getScreenshot(1000, 1000, mimeType).onsuccess = + getScreenshotImageData; + } + + function iframeLoadedHandler(e) { + iframe1.removeEventListener('mozbrowserloadend', iframeLoadedHandler); + takeScreenshot('image/jpeg'); + } + + iframe1.addEventListener('mozbrowserloadend', iframeLoadedHandler); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_GetScreenshotDppx.js b/dom/browser-element/mochitest/browserElement_GetScreenshotDppx.js new file mode 100644 index 000000000..1d61f6afc --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_GetScreenshotDppx.js @@ -0,0 +1,107 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test the getScreenshot property for mozbrowser +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +function runTest() { + var dppxPref = 'layout.css.devPixelsPerPx'; + var cssPixelWidth = 600; + var cssPixelHeight = 400; + + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('width', cssPixelWidth); + iframe1.setAttribute('height', cssPixelHeight); + iframe1.setAttribute('mozbrowser', 'true'); + + iframe1.src = 'data:text/html,<html><body>hello</body></html>'; + document.body.appendChild(iframe1); + + var images = []; + + function screenshotTaken(image) { + images.push(image); + if (images.length === 1) { + ok(true, 'Got initial non blank screenshot'); + + if (image.width !== cssPixelWidth || image.height !== cssPixelHeight) { + ok(false, 'The pixel width of the image received is not correct'); + SimpleTest.finish(); + return; + } + ok(true, 'The pixel width of the image received is correct'); + + SpecialPowers.pushPrefEnv( + {'set': [['layout.css.devPixelsPerPx', 2]]}, takeScreenshot); + } + else if (images.length === 2) { + ok(true, 'Got updated screenshot after source page changed'); + + if (image.width !== cssPixelWidth * 2 || + image.height !== cssPixelHeight * 2) { + ok(false, 'The pixel width of the 2dppx image received is not correct'); + SimpleTest.finish(); + return; + } + ok(true, 'The pixel width of the 2dppx image received is correct'); + SimpleTest.finish(); + } + } + + function takeScreenshot() { + function gotImage(e) { + // |this| is the Image. + + URL.revokeObjectURL(this.src); + + if (e.type === 'error' || !this.width || !this.height) { + tryAgain(); + + return; + } + + screenshotTaken(this); + } + + function tryAgain() { + if (--attempts === 0) { + ok(false, 'Timed out waiting for correct screenshot'); + SimpleTest.finish(); + } else { + setTimeout(function() { + iframe1.getScreenshot(cssPixelWidth, cssPixelHeight).onsuccess = + getScreenshotImageData; + }, 200); + } + } + + function getScreenshotImageData(e) { + var blob = e.target.result; + if (blob.size === 0) { + tryAgain(); + + return; + } + + var img = new Image(); + img.src = URL.createObjectURL(blob); + img.onload = img.onerror = gotImage; + } + + var attempts = 10; + iframe1.getScreenshot(cssPixelWidth, cssPixelHeight).onsuccess = + getScreenshotImageData; + } + + function iframeLoadedHandler() { + SpecialPowers.pushPrefEnv( + {'set': [['layout.css.devPixelsPerPx', 1]]}, takeScreenshot); + } + + iframe1.addEventListener('mozbrowserloadend', iframeLoadedHandler); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_Iconchange.js b/dom/browser-element/mochitest/browserElement_Iconchange.js new file mode 100644 index 000000000..367a2de15 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Iconchange.js @@ -0,0 +1,129 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that the onmozbrowsericonchange event works. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function createHtml(link) { + return 'data:text/html,<html><head>' + link + '<body></body></html>'; +} + +function createLink(name, sizes, rel) { + var s = sizes ? 'sizes="' + sizes + '"' : ''; + if (!rel) { + rel = 'icon'; + } + return '<link rel="' + rel + '" type="image/png" ' + s + + ' href="http://example.com/' + name + '.png">'; +} + +function runTest() { + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe1); + + // iframe2 is a red herring; we modify its favicon but don't listen for + // iconchanges; we want to make sure that its iconchange events aren't + // picked up by the listener on iframe1. + var iframe2 = document.createElement('iframe'); + iframe2.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe2); + + // iframe3 is another red herring. It's not a mozbrowser, so we shouldn't + // get any iconchange events on it. + var iframe3 = document.createElement('iframe'); + document.body.appendChild(iframe3); + + var numIconChanges = 0; + + iframe1.addEventListener('mozbrowsericonchange', function(e) { + + numIconChanges++; + + if (numIconChanges == 1) { + is(e.detail.href, 'http://example.com/myicon.png'); + + // We should recieve iconchange events when the user creates new links + // to a favicon, but only when we listen for them + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.title='New title';", + /* allowDelayedLoad = */ false); + + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<link rel=ICON href=http://example.com/newicon.png>')", + /* allowDelayedLoad = */ false); + + SpecialPowers.getBrowserFrameMessageManager(iframe2) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<link rel=ICON href=http://example.com/newicon.png>')", + /* allowDelayedLoad = */ false); + } + else if (numIconChanges == 2) { + is(e.detail.href, 'http://example.com/newicon.png'); + + // Full new pages should trigger iconchange events + iframe1.src = createHtml(createLink('3rdicon')); + } + else if (numIconChanges == 3) { + is(e.detail.href, 'http://example.com/3rdicon.png'); + + // the rel attribute can have various space seperated values, make + // sure we only pick up correct values for 'icon' + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<link rel=shortcuticon href=http://example.com/newicon.png>')", + /* allowDelayedLoad = */ false); + // Test setting a page with multiple links elements + iframe1.src = createHtml(createLink('another') + createLink('icon')); + } + else if (numIconChanges == 4) { + is(e.detail.href, 'http://example.com/another.png'); + // 2 events will be triggered by previous test, wait for next + } + else if (numIconChanges == 5) { + is(e.detail.href, 'http://example.com/icon.png'); + + // Make sure icon check is case insensitive + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<link rel=ICON href=http://example.com/ucaseicon.png>')", + /* allowDelayedLoad = */ false); + } + else if (numIconChanges == 6) { + is(e.detail.href, 'http://example.com/ucaseicon.png'); + iframe1.src = createHtml(createLink('testsize', '50x50', 'icon')); + } + else if (numIconChanges == 7) { + is(e.detail.href, 'http://example.com/testsize.png'); + is(e.detail.sizes, '50x50'); + iframe1.src = createHtml(createLink('testapple1', '100x100', 'apple-touch-icon')); + } else if (numIconChanges == 8) { + is(e.detail.href, 'http://example.com/testapple1.png'); + is(e.detail.rel, 'apple-touch-icon'); + is(e.detail.sizes, '100x100'); + + iframe1.src = createHtml(createLink('testapple2', '100x100', 'apple-touch-icon-precomposed')); + } else if (numIconChanges == 9) { + is(e.detail.href, 'http://example.com/testapple2.png'); + is(e.detail.rel, 'apple-touch-icon-precomposed'); + is(e.detail.sizes, '100x100'); + SimpleTest.finish(); + } else { + ok(false, 'Too many iconchange events.'); + } + }); + + iframe3.addEventListener('mozbrowsericonchange', function(e) { + ok(false, 'Should not get a iconchange event for iframe3.'); + }); + + + iframe1.src = createHtml(createLink('myicon')); + // We should not recieve icon change events for either of the below iframes + iframe2.src = createHtml(createLink('myicon')); + iframe3.src = createHtml(createLink('myicon')); + +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_LoadEvents.js b/dom/browser-element/mochitest/browserElement_LoadEvents.js new file mode 100644 index 000000000..8b43d8e75 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_LoadEvents.js @@ -0,0 +1,120 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that an iframe with the |mozbrowser| attribute emits mozbrowserloadX +// events when this page is in the whitelist. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + // Load emptypage1 into the iframe, wait for that to finish loading, then + // call runTest2. + // + // This should trigger loadstart, locationchange, and loadend events. + + var seenLoadEnd = false; + var seenLoadStart = false; + var seenLocationChange = false; + + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + iframe.id = 'iframe'; + iframe.src = 'http://example.com/tests/dom/browser-element/mochitest/file_browserElement_LoadEvents.html'; + + function loadstart(e) { + ok(e.isTrusted, 'Event should be trusted.'); + ok(!seenLoadEnd, 'loadstart before loadend.'); + ok(!seenLoadStart, 'Just one loadstart event.'); + ok(!seenLocationChange, 'loadstart before locationchange.'); + seenLoadStart = true; + } + + function locationchange(e) { + ok(e.isTrusted, 'Event should be trusted.'); + ok(!seenLocationChange, 'Just one locationchange event.'); + seenLocationChange = true; + ok(seenLoadStart, 'Location change after load start.'); + ok(!seenLoadEnd, 'Location change before load end.'); + ok(e.detail.url, browserElementTestHelpers.emptyPage1, "event's reported location"); + } + + function loadend(e) { + ok(e.isTrusted, 'Event should be trusted.'); + ok(seenLoadStart, 'loadend after loadstart.'); + ok(!seenLoadEnd, 'Just one loadend event.'); + ok(seenLocationChange, 'loadend after locationchange.'); + is(e.detail.backgroundColor, 'rgb(0, 128, 0)', 'Expected background color reported') + seenLoadEnd = true; + } + + iframe.addEventListener('mozbrowserloadstart', loadstart); + iframe.addEventListener('mozbrowserlocationchange', locationchange); + iframe.addEventListener('mozbrowserloadend', loadend); + + function waitForAllCallbacks() { + if (!seenLoadStart || !seenLoadEnd) { + SimpleTest.executeSoon(waitForAllCallbacks); + return; + } + + iframe.removeEventListener('mozbrowserloadstart', loadstart); + iframe.removeEventListener('mozbrowserlocationchange', locationchange); + iframe.removeEventListener('mozbrowserloadend', loadend); + runTest2(); + } + + document.body.appendChild(iframe); + waitForAllCallbacks(); +} + +function runTest2() { + var seenLoadStart = false; + var seenLoadEnd = false; + var seenLocationChange = false; + + // Add this event listener to the document; the events should bubble. + document.addEventListener('mozbrowserloadstart', function(e) { + ok(e.isTrusted, 'Event should be trusted.'); + ok(!seenLoadStart, 'Just one loadstart event.'); + seenLoadStart = true; + ok(!seenLoadEnd, 'Got mozbrowserloadstart before loadend.'); + ok(!seenLocationChange, 'Got mozbrowserloadstart before locationchange.'); + }); + + var iframe = document.getElementById('iframe'); + iframe.addEventListener('mozbrowserlocationchange', function(e) { + ok(e.isTrusted, 'Event should be trusted.'); + ok(!seenLocationChange, 'Just one locationchange event.'); + seenLocationChange = true; + ok(seenLoadStart, 'Location change after load start.'); + ok(!seenLoadEnd, 'Location change before load end.'); + ok(e.detail.url, browserElementTestHelpers.emptyPage2, "event's reported location"); + }); + + iframe.addEventListener('mozbrowserloadend', function(e) { + ok(e.isTrusted, 'Event should be trusted.'); + ok(!seenLoadEnd, 'Just one load end event.'); + seenLoadEnd = true; + ok(seenLoadStart, 'Load end after load start.'); + ok(seenLocationChange, 'Load end after location change.'); + is(e.detail.backgroundColor, 'transparent', 'Expected background color reported') + }); + + iframe.src = browserElementTestHelpers.emptyPage2; + + function waitForAllCallbacks() { + if (!seenLoadStart || !seenLoadEnd || !seenLocationChange) { + SimpleTest.executeSoon(waitForAllCallbacks); + return; + } + + SimpleTest.finish(); + } + + waitForAllCallbacks(); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_Manifestchange.js b/dom/browser-element/mochitest/browserElement_Manifestchange.js new file mode 100644 index 000000000..22cf8fe7c --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Manifestchange.js @@ -0,0 +1,96 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that the onmozbrowsermanifestchange event works. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function createHtml(manifest) { + return 'data:text/html,<html xmlns:xml="http://www.w3.org/XML/1998/namespace"><head>' + manifest + '<body></body></html>'; +} + +function createManifest(href) { + return '<link rel="manifest" href="' + href + '">'; +} + +function runTest() { + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe1); + + // iframe2 is a red herring; we modify its manifest link elements but don't + // listen for manifestchanges; we want to make sure that its manifestchange + // events aren't picked up by the listener on iframe1. + var iframe2 = document.createElement('iframe'); + iframe2.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe2); + + // iframe3 is another red herring. It's not a mozbrowser, so we shouldn't + // get any manifestchange events on it. + var iframe3 = document.createElement('iframe'); + document.body.appendChild(iframe3); + + var numManifestChanges = 0; + + iframe1.addEventListener('mozbrowsermanifestchange', function(e) { + + numManifestChanges++; + + if (numManifestChanges == 1) { + is(e.detail.href, 'manifest.1', 'manifest.1 matches'); + + // We should receive manifestchange events when the user creates new + // manifests + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.title='New title';", + /* allowDelayedLoad = */ false); + + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<link rel=manifest href=manifest.2>')", + /* allowDelayedLoad = */ false); + + SpecialPowers.getBrowserFrameMessageManager(iframe2) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<link rel=manifest href=manifest.2>')", + /* allowDelayedLoad = */ false); + } + else if (numManifestChanges == 2) { + is(e.detail.href, 'manifest.2', 'manifest.2 matches'); + + // Full new pages should trigger manifestchange events + iframe1.src = createHtml(createManifest('manifest.3')); + } + else if (numManifestChanges == 3) { + is(e.detail.href, 'manifest.3', 'manifest.3 matches'); + + // Test setting a page with multiple manifest link elements + iframe1.src = createHtml(createManifest('manifest.4a') + createManifest('manifest.4b')); + } + else if (numManifestChanges == 4) { + is(e.detail.href, 'manifest.4a', 'manifest.4a matches'); + // 2 events will be triggered by previous test, wait for next + } + else if (numManifestChanges == 5) { + is(e.detail.href, 'manifest.4b', 'manifest.4b matches'); + SimpleTest.finish(); + } else { + ok(false, 'Too many manifestchange events.'); + } + }); + + iframe3.addEventListener('mozbrowsermanifestchange', function(e) { + ok(false, 'Should not get a manifestchange event for iframe3.'); + }); + + + iframe1.src = createHtml(createManifest('manifest.1')); + // We should not receive manifest change events for either of the below iframes + iframe2.src = createHtml(createManifest('manifest.1')); + iframe3.src = createHtml(createManifest('manifest.1')); + +} + +addEventListener('testready', runTest); + diff --git a/dom/browser-element/mochitest/browserElement_Metachange.js b/dom/browser-element/mochitest/browserElement_Metachange.js new file mode 100644 index 000000000..7789a3e18 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Metachange.js @@ -0,0 +1,177 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that the onmozbrowsermetachange event works. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function createHtml(meta) { + return 'data:text/html,<html xmlns:xml="http://www.w3.org/XML/1998/namespace"><head>' + meta + '<body></body></html>'; +} + +function createHtmlWithLang(meta, lang) { + return 'data:text/html,<html xmlns:xml="http://www.w3.org/XML/1998/namespace" lang="' + lang + '"><head>' + meta + '<body></body></html>'; +} + +function createMeta(name, content) { + return '<meta name="' + name + '" content="' + content + '">'; +} + +function createMetaWithLang(name, content, lang) { + return '<meta name="' + name + '" content="' + content + '" lang="' + lang + '">'; +} + +function createMetaWithProperty(property, content) { + return '<meta property="' + property + '" content="' + content + '">'; +} + +function runTest() { + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe1); + + // iframe2 is a red herring; we modify its meta elements but don't listen for + // metachanges; we want to make sure that its metachange events aren't + // picked up by the listener on iframe1. + var iframe2 = document.createElement('iframe'); + iframe2.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe2); + + // iframe3 is another red herring. It's not a mozbrowser, so we shouldn't + // get any metachange events on it. + var iframe3 = document.createElement('iframe'); + document.body.appendChild(iframe3); + + var numMetaChanges = 0; + + iframe1.addEventListener('mozbrowsermetachange', function(e) { + + numMetaChanges++; + + if (numMetaChanges == 1) { + is(e.detail.name, 'application-name'); + is(e.detail.content, 'foobar'); + + // We should recieve metachange events when the user creates new metas + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.title='New title';", + /* allowDelayedLoad = */ false); + + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<meta name=application-name content=new_foobar>')", + /* allowDelayedLoad = */ false); + + SpecialPowers.getBrowserFrameMessageManager(iframe2) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<meta name=application-name content=new_foobar>')", + /* allowDelayedLoad = */ false); + } + else if (numMetaChanges == 2) { + is(e.detail.name, 'application-name', 'name matches'); + is(e.detail.content, 'new_foobar', 'content matches'); + ok(!("lang" in e.detail), 'lang not present'); + + // Full new pages should trigger metachange events + iframe1.src = createHtml(createMeta('application-name', '3rd_foobar')); + } + else if (numMetaChanges == 3) { + is(e.detail.name, 'application-name', 'name matches'); + is(e.detail.content, '3rd_foobar', 'content matches'); + ok(!("lang" in e.detail), 'lang not present'); + + // Test setting a page with multiple meta elements + iframe1.src = createHtml(createMeta('application-name', 'foobar_1') + createMeta('application-name', 'foobar_2')); + } + else if (numMetaChanges == 4) { + is(e.detail.name, 'application-name', 'name matches'); + is(e.detail.content, 'foobar_1', 'content matches'); + ok(!("lang" in e.detail), 'lang not present'); + // 2 events will be triggered by previous test, wait for next + } + else if (numMetaChanges == 5) { + is(e.detail.name, 'application-name', 'name matches'); + is(e.detail.content, 'foobar_2', 'content matches'); + ok(!("lang" in e.detail), 'lang not present'); + + // Test the language + iframe1.src = createHtml(createMetaWithLang('application-name', 'foobar_lang_1', 'en')); + } + else if (numMetaChanges == 6) { + is(e.detail.name, 'application-name', 'name matches'); + is(e.detail.content, 'foobar_lang_1', 'content matches'); + is(e.detail.lang, 'en', 'language matches'); + + // Test the language in the ancestor element + iframe1.src = createHtmlWithLang(createMeta('application-name', 'foobar_lang_2'), 'es'); + } + else if (numMetaChanges == 7) { + is(e.detail.name, 'application-name', 'name matches'); + is(e.detail.content, 'foobar_lang_2', 'content matches'); + is(e.detail.lang, 'es', 'language matches'); + + // Test the language in the ancestor element + iframe1.src = createHtmlWithLang(createMetaWithLang('application-name', 'foobar_lang_3', 'it'), 'fi'); + } + else if (numMetaChanges == 8) { + is(e.detail.name, 'application-name', 'name matches'); + is(e.detail.content, 'foobar_lang_3', 'content matches'); + is(e.detail.lang, 'it', 'language matches'); + + // Test the content-language + iframe1.src = "http://test/tests/dom/browser-element/mochitest/file_browserElement_Metachange.sjs?ru"; + } + else if (numMetaChanges == 9) { + is(e.detail.name, 'application-name', 'name matches'); + is(e.detail.content, 'sjs', 'content matches'); + is(e.detail.lang, 'ru', 'language matches'); + + // Test the content-language + iframe1.src = "http://test/tests/dom/browser-element/mochitest/file_browserElement_Metachange.sjs?ru|dk"; + } + else if (numMetaChanges == 10) { + is(e.detail.name, 'application-name', 'name matches'); + is(e.detail.content, 'sjs', 'content matches'); + is(e.detail.lang, 'dk', 'language matches'); + + // Test Open Graph property + iframe1.src = createHtml(createMetaWithProperty('og:description', 'Fascinating article')); + + // We should not get event if property doesn't start with 'og:' + iframe3.src = createHtml(createMetaWithProperty('go:description', 'Fascinating article')); + } + else if (numMetaChanges == 11) { + is(e.detail.name, 'og:description', 'property name matches'); + is(e.detail.content, 'Fascinating article', 'content matches'); + + // Sometimes 'name' is used instead of 'property'. Verify that works. + iframe1.src = createHtml(createMeta('og:title', 'One weird trick!')); + + // We should not get event if property doesn't start with 'og:' + iframe3.src = createHtml(createMeta('go:title', 'One weird trick!')); + } + else if (numMetaChanges == 12) { + is(e.detail.name, 'og:title', 'property name matches'); + is(e.detail.content, 'One weird trick!', 'content matches'); + + // Test the language + SimpleTest.finish(); + } else { + ok(false, 'Too many metachange events.'); + } + }); + + iframe3.addEventListener('mozbrowsermetachange', function(e) { + ok(false, 'Should not get a metachange event for iframe3.'); + }); + + + iframe1.src = createHtml(createMeta('application-name', 'foobar')); + // We should not recieve meta change events for either of the below iframes + iframe2.src = createHtml(createMeta('application-name', 'foobar')); + iframe3.src = createHtml(createMeta('application-name', 'foobar')); + +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_NextPaint.js b/dom/browser-element/mochitest/browserElement_NextPaint.js new file mode 100644 index 000000000..749a8efe3 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_NextPaint.js @@ -0,0 +1,43 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 808231 - Add mozbrowsernextpaint event. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + // Add a first listener that we'll remove shortly after. + iframe.addNextPaintListener(wrongListener); + + var gotFirstNextPaintEvent = false; + iframe.addNextPaintListener(function () { + ok(!gotFirstNextPaintEvent, 'got the first nextpaint event'); + + // Make sure we're only called once. + gotFirstNextPaintEvent = true; + + iframe.addNextPaintListener(function () { + info('got the second nextpaint event'); + SimpleTest.finish(); + }); + + // Force the iframe to repaint. + SimpleTest.executeSoon(() => iframe.src += '#next'); + }); + + // Remove the first listener to make sure it's not called. + iframe.removeNextPaintListener(wrongListener); + iframe.src = 'file_browserElement_NextPaint.html'; +} + +function wrongListener() { + ok(false, 'first listener should have been removed'); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_NoAudioTrack.js b/dom/browser-element/mochitest/browserElement_NoAudioTrack.js new file mode 100644 index 000000000..47f0fd524 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_NoAudioTrack.js @@ -0,0 +1,96 @@ +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +var fileURL = 'chrome://mochitests/content/chrome/dom/browser-element/mochitest/file_browserElement_NoAudioTrack.html'; +var generator = runTests(); +var testFrame; + +function alertListener(e) { + var message = e.detail.message; + if (/^OK/.exec(message)) { + ok(true, "Message from file : " + message); + continueTest(); + } else if (/^KO/.exec(message)) { + error(message); + } else { + error("Undefined event."); + } +} + +function error(aMessage) { + ok(false, "Error : " + aMessage); + finish(); +} + +function continueTest() { + try { + generator.next(); + } catch (e if e instanceof StopIteration) { + error("Stop test because of exception!"); + } +} + +function finish() { + testFrame.removeEventListener('mozbrowsershowmodalprompt', alertListener); + ok(true, "Remove event-listener."); + document.body.removeChild(testFrame); + ok(true, "Remove test-frame from document."); + SimpleTest.finish(); +} + +function setCommand(aArg) { + info("# Command = " + aArg); + testFrame.src = fileURL + '#' + aArg; +} + +function runTests() { + setCommand('play'); + yield undefined; + + // wait a second to make sure that onactivestatechanged isn't dispatched. + setCommand('idle'); + yield undefined; + + finish(); + yield undefined; +} + +function setupTestFrame() { + testFrame = document.createElement('iframe'); + testFrame.setAttribute('mozbrowser', 'true'); + testFrame.src = fileURL; + + function loadend() { + testFrame.removeEventListener('mozbrowserloadend', loadend); + ok("allowedAudioChannels" in testFrame, "allowedAudioChannels exist"); + var channels = testFrame.allowedAudioChannels; + is(channels.length, 9, "9 audio channel by default"); + + var ac = channels[0]; + ok(ac instanceof BrowserElementAudioChannel, "Correct class"); + ok("onactivestatechanged" in ac, "onactivestatechanged exists"); + + ac.onactivestatechanged = () => { + ac.onactivestatechanged = null; + ok(true, "Should receive onactivestatechanged!"); + }; + + continueTest(); + } + + testFrame.addEventListener('mozbrowserloadend', loadend); + testFrame.addEventListener('mozbrowsershowmodalprompt', alertListener); + ok(true, "Add event-listeners."); + + document.body.appendChild(testFrame); + ok(true, "Append test-frame to document."); +} + +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set': [["b2g.system_startup_url", window.location.href]]}, + function() { + SimpleTest.executeSoon(setupTestFrame); + }); +}); diff --git a/dom/browser-element/mochitest/browserElement_OpenMixedProcess.js b/dom/browser-element/mochitest/browserElement_OpenMixedProcess.js new file mode 100644 index 000000000..c5cde7f50 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_OpenMixedProcess.js @@ -0,0 +1,105 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 776129 - If a window w calls window.open, the resultant window should be +// remote iff w is remote. +// +// <iframe mozbrowser> can be default-OOP or default-in-process. But we can +// override this default by setting remote=true or remote=false on the iframe. +// +// This bug arises when we are default-in-process and a OOP iframe calls +// window.open, or when we're default-OOP and an in-process iframe calls +// window.open. In either case, if the opened iframe gets the default +// remotness, it will not match its opener's remoteness, which is bad. +// +// Since the name of the test determines the OOP-by-default pref, the "inproc" +// version of this test opens an OOP frame, and the "oop" version opens an +// in-process frame. Enjoy. :) + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +function runTest() { + // We're going to open a remote frame if OOP off by default. If OOP is on by + // default, we're going to open an in-process frame. + var remote = !browserElementTestHelpers.getOOPByDefaultPref(); + + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + iframe.setAttribute('remote', remote); + + // The page we load does window.open, then checks some things and reports + // back using alert(). Finally, it calls alert('finish'). + // + // Bug 776129 in particular manifests itself such that the popup frame loads + // and the tests in file_browserElement_OpenMixedProcess pass, but the + // content of the frame is invisible. To catch this case, we take a + // screenshot after we load the content into the popup, and ensure that it's + // not blank. + var popup; + iframe.addEventListener('mozbrowseropenwindow', function(e) { + popup = document.body.appendChild(e.detail.frameElement); + }); + + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + if (e.detail.message.startsWith('pass')) { + ok(true, e.detail.message); + } + else if (e.detail.message.startsWith('fail')) { + ok(false, e.detail.message); + } + else if (e.detail.message == 'finish') { + // We assume here that iframe is completely blank, and spin until popup's + // screenshot is not the same as iframe. + iframe.getScreenshot(1000, 1000).onsuccess = function(e) { + var fr = new FileReader(); + fr.onloadend = function() { test2(popup, fr.result); }; + fr.readAsArrayBuffer(e.target.result); + }; + } + else { + ok(false, e.detail.message, "Unexpected message!"); + } + }); + + document.body.appendChild(iframe); + iframe.src = 'file_browserElement_OpenMixedProcess.html'; +} + +function arrayBuffersEqual(a, b) { + var x = new Int8Array(a); + var y = new Int8Array(b); + if (x.length != y.length) { + return false; + } + + for (var i = 0; i < x.length; i++) { + if (x[i] != y[i]) { + return false; + } + } + + return true; +} + +function test2(popup, blankScreenshotArrayBuffer) { + // Take screenshots of popup until it doesn't equal blankScreenshot (or we + // time out). + popup.getScreenshot(1000, 1000).onsuccess = function(e) { + var fr = new FileReader(); + fr.onloadend = function() { + if (!arrayBuffersEqual(blankScreenshotArrayBuffer, fr.result)) { + ok(true, "Finally got a non-blank screenshot."); + SimpleTest.finish(); + return; + } + + SimpleTest.executeSoon(function() { test2(popup, blankScreenshot) }); + }; + fr.readAsArrayBuffer(e.target.result); + }; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_OpenNamed.js b/dom/browser-element/mochitest/browserElement_OpenNamed.js new file mode 100644 index 000000000..aed5617e9 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_OpenNamed.js @@ -0,0 +1,57 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 742944 - In <iframe mozbrowser>, test that if we call window.open twice +// with the same name, we get only one mozbrowseropenwindow event. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +var iframe; +var popupFrame; +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + var gotPopup = false; + iframe.addEventListener('mozbrowseropenwindow', function(e) { + is(gotPopup, false, 'Should get just one popup.'); + gotPopup = true; + popupFrame = e.detail.frameElement; + is(popupFrame.getAttribute('name'), 'OpenNamed'); + + // Called when file_browserElement_OpenNamed2.html loads into popupFrame. + popupFrame.addEventListener('mozbrowsershowmodalprompt', function promptlistener(e) { + popupFrame.removeEventListener('mozbrowsershowmodalprompt', promptlistener); + + ok(gotPopup, 'Got openwindow event before showmodalprompt event.'); + is(e.detail.message, 'success: loaded'); + SimpleTest.executeSoon(test2); + }); + + document.body.appendChild(popupFrame); + }); + + // OpenNamed.html will call + // + // window.open('file_browserElement_OpenNamed2.html', 'OpenNamed'). + // + // Once that popup loads, we reload OpenNamed.html. That will call + // window.open again, but we shouldn't get another openwindow event, because + // we're opening into the same named window. + iframe.src = 'file_browserElement_OpenNamed.html'; + document.body.appendChild(iframe); +} + +function test2() { + popupFrame.addEventListener('mozbrowsershowmodalprompt', function(e) { + is(e.detail.message, 'success: loaded'); + SimpleTest.finish(); + }); + + iframe.src = 'file_browserElement_OpenNamed.html?test2'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_OpenTab.js b/dom/browser-element/mochitest/browserElement_OpenTab.js new file mode 100644 index 000000000..d01927e9b --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_OpenTab.js @@ -0,0 +1,69 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 1144015 - test middle/ctrl/cmd-click on a link. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + let iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + let x = 2; + let y = 2; + // First we force a reflow so that getChildProcessOffset actually returns + // meaningful data. + iframe.getBoundingClientRect(); + // We need to make sure the event coordinates are actually inside the iframe, + // relative to the chome window. + let tabParent = SpecialPowers.wrap(iframe) + .QueryInterface(SpecialPowers.Ci.nsIFrameLoaderOwner) + .frameLoader.tabParent; + if (tabParent) { + let offsetX = {}; + let offsetY = {}; + tabParent.getChildProcessOffset(offsetX, offsetY); + x -= offsetX.value; + y -= offsetY.value; + } + + let sendCtrlClick = () => { + let nsIDOMWindowUtils = SpecialPowers.Ci.nsIDOMWindowUtils; + let mod = nsIDOMWindowUtils.MODIFIER_META | + nsIDOMWindowUtils.MODIFIER_CONTROL; + iframe.sendMouseEvent('mousedown', x, y, 0, 1, mod); + iframe.sendMouseEvent('mouseup', x, y, 0, 1, mod); + } + + let onCtrlClick = e => { + is(e.detail.url, 'http://example.com/', 'URL matches'); + iframe.removeEventListener('mozbrowseropentab', onCtrlClick); + iframe.addEventListener('mozbrowseropentab', onMiddleClick); + sendMiddleClick(); + } + + let sendMiddleClick = () => { + iframe.sendMouseEvent('mousedown', x, y, 1, 1, 0); + iframe.sendMouseEvent('mouseup', x, y, 1, 1, 0); + } + + let onMiddleClick = e => { + is(e.detail.url, 'http://example.com/', 'URL matches'); + iframe.removeEventListener('mozbrowseropentab', onMiddleClick); + SimpleTest.finish(); + } + + iframe.addEventListener('mozbrowserloadend', e => { + iframe.addEventListener('mozbrowseropentab', onCtrlClick); + sendCtrlClick(); + }); + + + iframe.src = 'data:text/html,<body style="margin:0"><a href="http://example.com"><span>click here</span></a></body>'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_OpenWindow.js b/dom/browser-element/mochitest/browserElement_OpenWindow.js new file mode 100644 index 000000000..65de11a26 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_OpenWindow.js @@ -0,0 +1,58 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 742944 - Test that window.open works with <iframe mozbrowser>. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + var gotPopup = false; + iframe.addEventListener('mozbrowseropenwindow', function(e) { + is(gotPopup, false, 'Should get just one popup.'); + gotPopup = true; + + document.body.appendChild(e.detail.frameElement); + + ok(/file_browserElement_Open2\.html$/.test(e.detail.url), + "Popup's URL (got " + e.detail.url + ")"); + is(e.detail.name, "name"); + is(e.detail.features, "dialog=1"); + }); + + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + ok(gotPopup, 'Got mozbrowseropenwindow event before showmodalprompt event.'); + if (e.detail.message.indexOf("success:") == 0) { + ok(true, e.detail.message); + } + else if (e.detail.message.indexOf("failure:") == 0) { + ok(false, e.detail.message); + } + else if (e.detail.message == "finish") { + SimpleTest.finish(); + } + else { + ok(false, "Got invalid message: " + e.detail.message); + } + }); + + /** + * file_browserElementOpen1 does + * + * window.open('file_browserElement_Open2.html', 'name', 'dialog=1') + * + * then adds an event listener to the opened window and waits for onload. + * + * Onload, we fire a few alerts saying "success:REASON" or "failure:REASON". + * Finally, we fire a "finish" alert, which ends the test. + */ + iframe.src = 'file_browserElement_Open1.html'; + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_OpenWindowDifferentOrigin.js b/dom/browser-element/mochitest/browserElement_OpenWindowDifferentOrigin.js new file mode 100644 index 000000000..650ef17f5 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_OpenWindowDifferentOrigin.js @@ -0,0 +1,41 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 769182 - window.open to a different origin should load the page. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + iframe.addEventListener('mozbrowseropenwindow', function(e) { + ok(true, 'Got first window.open call'); + + e.detail.frameElement.addEventListener('mozbrowseropenwindow', function(e) { + ok(true, 'Got second window.open call'); + document.body.appendChild(e.detail.frameElement); + }); + + e.detail.frameElement.addEventListener('mozbrowsershowmodalprompt', function(e) { + ok(true, 'Got alert from second window.'); + SimpleTest.finish(); + }); + + document.body.appendChild(e.detail.frameElement); + }); + + // DifferentOrigin.html?1 calls + // + // window.open('http://example.com/.../DifferentOrigin.html?2'), + // + // which calls alert(). + + iframe.src = 'http://example.org/tests/dom/browser-element/mochitest/file_browserElement_OpenWindowDifferentOrigin.html?1'; + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_OpenWindowEmpty.js b/dom/browser-element/mochitest/browserElement_OpenWindowEmpty.js new file mode 100644 index 000000000..6b8dd0340 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_OpenWindowEmpty.js @@ -0,0 +1,31 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 1216937 - Test that window.open with null/empty URL should use +// about:blank as default + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + var gotPopup = false; + iframe.addEventListener('mozbrowseropenwindow', function(e) { + is(gotPopup, false, 'Should get just one popup.'); + gotPopup = true; + + is(e.detail.url, 'about:blank', "Popup's has correct URL"); + e.preventDefault(); + + SimpleTest.finish(); + }); + + iframe.src = 'file_browserElement_OpenWindowEmpty.html'; + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_OpenWindowInFrame.js b/dom/browser-element/mochitest/browserElement_OpenWindowInFrame.js new file mode 100644 index 000000000..5559bbcb8 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_OpenWindowInFrame.js @@ -0,0 +1,65 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 766871 - Test that window.open works from an <iframe> within <iframe mozbrowser>. +// +// This is basically the same as browserElement_OpenWindow, except that instead +// of loading file_browserElement_Open1.html directly inside the <iframe +// mozbrowser>, we load file_browserElement_OpenWindowInFrame.html into the +// mozbrowser. OpenWindowInFrame loads file_browserElement_Open1.html inside +// an iframe. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + var gotPopup = false; + iframe.addEventListener('mozbrowseropenwindow', function(e) { + is(gotPopup, false, 'Should get just one popup.'); + gotPopup = true; + + document.body.appendChild(e.detail.frameElement); + + ok(/file_browserElement_Open2\.html$/.test(e.detail.url), + "Popup's URL (got " + e.detail.url + ")"); + is(e.detail.name, "name"); + is(e.detail.features, "dialog=1"); + }); + + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + ok(gotPopup, 'Got mozbrowseropenwindow event before showmodalprompt event.'); + if (e.detail.message.indexOf("success:") == 0) { + ok(true, e.detail.message); + } + else if (e.detail.message.indexOf("failure:") == 0) { + ok(false, e.detail.message); + } + else if (e.detail.message == "finish") { + SimpleTest.finish(); + } + else { + ok(false, "Got invalid message: " + e.detail.message); + } + }); + + /** + * file_browserElement_OpenWindowInFrame.html loads + * file_browserElement_Open1.html in an iframe. Open1.html does + * + * window.open('file_browserElement_Open2.html', 'name', 'dialog=1') + * + * then adds an event listener to the opened window and waits for onload. + * + * Onload, we fire a few alerts saying "success:REASON" or "failure:REASON". + * Finally, we fire a "finish" alert, which ends the test. + */ + iframe.src = 'file_browserElement_OpenWindowInFrame.html'; + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_OpenWindowRejected.js b/dom/browser-element/mochitest/browserElement_OpenWindowRejected.js new file mode 100644 index 000000000..f5ef97260 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_OpenWindowRejected.js @@ -0,0 +1,44 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 742944 - Do window.open from inside <iframe mozbrowser>. But then +// reject the call. This shouldn't cause problems (crashes, leaks). + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + iframe.addEventListener('mozbrowseropenwindow', function(e) { + ok(e.detail.url.indexOf('does_not_exist.html') != -1, + 'Opened URL; got ' + e.detail.url); + is(e.detail.name, ''); + is(e.detail.features, ''); + + // Don't add e.detail.frameElement to the DOM, so the window.open is + // effectively blocked. + e.preventDefault(); + }); + + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + var msg = e.detail.message; + if (msg.indexOf('success:') == 0) { + ok(true, msg); + } + else if (msg == 'finish') { + SimpleTest.finish(); + } + else { + ok(false, msg); + } + }); + + iframe.src = 'file_browserElement_OpenWindowRejected.html'; + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_OpenWindowRejected2.js b/dom/browser-element/mochitest/browserElement_OpenWindowRejected2.js new file mode 100644 index 000000000..acea6813e --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_OpenWindowRejected2.js @@ -0,0 +1,47 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 742944 - Do window.open from inside <iframe mozbrowser>. But then +// reject the call. This shouldn't cause problems (crashes, leaks). +// +// This is the same as OpenWindowRejected, except we "reject" the popup by not +// adding the iframe element to our DOM, instead of by not calling +// preventDefault() on the event. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + iframe.addEventListener('mozbrowseropenwindow', function(e) { + ok(e.detail.url.indexOf('does_not_exist.html') != -1, + 'Opened URL; got ' + e.detail.url); + is(e.detail.name, ''); + is(e.detail.features, ''); + + // Call preventDefault, but don't add the iframe to the DOM. This still + // amounts to rejecting the popup. + e.preventDefault(); + }); + + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + var msg = e.detail.message; + if (msg.indexOf('success:') == 0) { + ok(true, msg); + } + else if (msg == 'finish') { + SimpleTest.finish(); + } + else { + ok(false, msg); + } + }); + + iframe.src = 'file_browserElement_OpenWindowRejected.html'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_Opensearch.js b/dom/browser-element/mochitest/browserElement_Opensearch.js new file mode 100644 index 000000000..8df44d2a9 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Opensearch.js @@ -0,0 +1,109 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that the onmozbrowseropensearch event works. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function createHtml(link) { + return 'data:text/html,<html><head>' + link + '<body></body></html>'; +} + +function createLink(name) { + return '<link rel="search" title="Test OpenSearch" type="application/opensearchdescription+xml" href="http://example.com/' + name + '.xml">'; +} + +function runTest() { + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe1); + + // iframe2 is a red herring; we modify its link but don't listen for + // opensearch; we want to make sure that its opensearch events aren't + // picked up by the listener on iframe1. + var iframe2 = document.createElement('iframe'); + iframe2.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe2); + + // iframe3 is another red herring. It's not a mozbrowser, so we shouldn't + // get any opensearch events on it. + var iframe3 = document.createElement('iframe'); + document.body.appendChild(iframe3); + + var numLinkChanges = 0; + + iframe1.addEventListener('mozbrowseropensearch', function(e) { + + numLinkChanges++; + + if (numLinkChanges == 1) { + is(e.detail.title, 'Test OpenSearch'); + is(e.detail.href, 'http://example.com/mysearch.xml'); + + // We should recieve opensearch events when the user creates new links + // to a search engine, but only when we listen for them + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.title='New title';", + /* allowDelayedLoad = */ false); + + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<link rel=SEARCH type=application/opensearchdescription+xml href=http://example.com/newsearch.xml>')", + /* allowDelayedLoad = */ false); + + SpecialPowers.getBrowserFrameMessageManager(iframe2) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<link rel=SEARCH type=application/opensearchdescription+xml href=http://example.com/newsearch.xml>')", + /* allowDelayedLoad = */ false); + } + else if (numLinkChanges == 2) { + is(e.detail.href, 'http://example.com/newsearch.xml'); + + // Full new pages should trigger opensearch events + iframe1.src = createHtml(createLink('3rdsearch')); + } + else if (numLinkChanges == 3) { + is(e.detail.href, 'http://example.com/3rdsearch.xml'); + + // the rel attribute can have various space seperated values, make + // sure we only pick up correct values for 'opensearch' + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<link rel=someopensearch type=application/opensearchdescription+xml href=http://example.com/newsearch.xml>')", + /* allowDelayedLoad = */ false); + // Test setting a page with multiple links elements + iframe1.src = createHtml(createLink('another') + createLink('search')); + } + else if (numLinkChanges == 4) { + is(e.detail.href, 'http://example.com/another.xml'); + // 2 events will be triggered by previous test, wait for next + } + else if (numLinkChanges == 5) { + is(e.detail.href, 'http://example.com/search.xml'); + + // Make sure opensearch check is case insensitive + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.head.insertAdjacentHTML('beforeend', '<link rel=SEARCH type=application/opensearchdescription+xml href=http://example.com/ucasesearch.xml>')", + /* allowDelayedLoad = */ false); + } + else if (numLinkChanges == 6) { + is(e.detail.href, 'http://example.com/ucasesearch.xml'); + SimpleTest.finish(); + } else { + ok(false, 'Too many opensearch events.'); + } + }); + + iframe3.addEventListener('mozbrowseropensearch', function(e) { + ok(false, 'Should not get a opensearch event for iframe3.'); + }); + + + iframe1.src = createHtml(createLink('mysearch')); + // We should not recieve opensearch change events for either of the below iframes + iframe2.src = createHtml(createLink('mysearch')); + iframe3.src = createHtml(createLink('mysearch')); + +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_PrivateBrowsing.js b/dom/browser-element/mochitest/browserElement_PrivateBrowsing.js new file mode 100644 index 000000000..c32edcc37 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_PrivateBrowsing.js @@ -0,0 +1,49 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that the mozprivatebrowsing attribute works. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function createFrame(aIsPrivate) { + var iframe = document.createElement("iframe"); + iframe.setAttribute('mozbrowser', 'true'); + if (aIsPrivate) { + iframe.setAttribute("mozprivatebrowsing", "true"); + } + return iframe; +} + +function createTest(aIsPrivate, aExpected, aClearStorage) { + info("createTest " + aIsPrivate + " " + aExpected); + return new Promise(function(resolve, reject) { + var iframe = createFrame(aIsPrivate); + document.body.appendChild(iframe); + + iframe.addEventListener("mozbrowsershowmodalprompt", function(e) { + is(e.detail.message, aExpected, "Checking localstorage"); + resolve(); + }); + + var src = "file_browserElement_PrivateBrowsing.html"; + iframe.src = aClearStorage ? src + "?clear=true" : src; + + }); +} + +function runTest() { + // We first create a iframe in non private browsing mode, set up some + // localstorage, reopen it to check that we get the previously set value. + // Finally, open it in private browsing mode and check that localstorage + // is clear. + createTest(false, "CLEAR", true) + .then(() => { return createTest(false, "EMPTY", false); }) + .then(() => { return createTest(false, "bar", false); }) + .then(() => { return createTest(true, "EMPTY", false); }) + .then(SimpleTest.finish); +} + +addEventListener("testready", runTest); diff --git a/dom/browser-element/mochitest/browserElement_PromptCheck.js b/dom/browser-element/mochitest/browserElement_PromptCheck.js new file mode 100644 index 000000000..d6edde09f --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_PromptCheck.js @@ -0,0 +1,59 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that alertCheck (i.e., alert with the opportunity to opt out of future +// alerts), promptCheck, and confirmCheck work. We do this by spamming +// alerts/prompts/confirms from inside an <iframe mozbrowser>. +// +// At the moment, we treat alertCheck/promptCheck/confirmCheck just like a +// normal alert. But it's different to nsIPrompt! + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() +{ + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + var numPrompts = 0; + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + is(e.detail.message, String(numPrompts), "prompt message"); + if (numPrompts / 10 < 1) { + is(e.detail.promptType, 'alert'); + } + else if (numPrompts / 10 < 2) { + is(e.detail.promptType, 'confirm'); + } + else { + is(e.detail.promptType, 'prompt'); + } + + numPrompts++; + if (numPrompts == 30) { + SimpleTest.finish(); + } + }); + + iframe.src = + 'data:text/html,<html><body><script>\ + addEventListener("load", function() { \ + setTimeout(function() { \ + var i = 0; \ + for (; i < 10; i++) { alert(i); } \ + for (; i < 20; i++) { confirm(i); } \ + for (; i < 30; i++) { prompt(i); } \ + }); \ + }); \ + </scr' + 'ipt></body></html>'; +} + +// The test harness sets dom.successive_dialog_time_limit to 0 for some bizarre +// reason. That's not normal usage, and it keeps us from testing alertCheck! +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set': [['dom.successive_dialog_time_limit', 10]]}, runTest); +}); diff --git a/dom/browser-element/mochitest/browserElement_PromptConfirm.js b/dom/browser-element/mochitest/browserElement_PromptConfirm.js new file mode 100644 index 000000000..c01836a25 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_PromptConfirm.js @@ -0,0 +1,87 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that prompt and confirm work. In particular, we're concerned that we +// get correct return values out of them. +// +// We use alert() to communicate the return values of prompt/confirm back to +// ourselves. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + var prompts = [ + {msg: '1', type: 'alert', rv: 42, expected: 'undefined'}, + {msg: '2', type: 'confirm', rv: true, expected: 'true'}, + {msg: '3', type: 'confirm', rv: false, expected: 'false'}, + + // rv == 42 should be coerced to 'true' for confirm. + {msg: '4', type: 'confirm', rv: 42, expected: 'true'}, + {msg: '5', type: 'prompt', rv: 'worked', expected: 'worked'}, + {msg: '6', type: 'prompt', rv: null, expected: 'null'}, + {msg: '7', type: 'prompt', rv: '', expected: ''} + ]; + + iframe.addEventListener("mozbrowsershowmodalprompt", function(e) { + var curPrompt = prompts[0]; + if (!curPrompt.waitingForResponse) { + curPrompt.waitingForResponse = true; + + is(e.detail.message, curPrompt.msg, "prompt message"); + is(e.detail.promptType, curPrompt.type, "prompt type"); + + if (e.detail.promptType == 'prompt') { + ok(e.detail.returnValue === null, "prompt's returnValue should be null"); + is(e.detail.initialValue, "initial", "prompt's initial value."); + } + else { + ok(e.detail.returnValue === undefined, + "Other than for prompt, shouldn't have initial value."); + } + + // Block the child until we call e.detail.unblock(). + e.preventDefault(); + + SimpleTest.executeSoon(function() { + e.detail.returnValue = curPrompt.rv; + e.detail.unblock(); + }); + } + else { + prompts.shift(); + + // |e| now corresponds to an alert() containing the return value we just + // sent for this prompt. + + is(e.detail.message, 'RESULT:' + curPrompt.expected, + "expected rv for msg " + curPrompt.msg); + + if (prompts.length == 0) { + SimpleTest.finish(); + } + } + }); + + iframe.src = + 'data:text/html,<html><body><script>\ + function sendVal(val) { \ + alert("RESULT:" + val); \ + } \ + sendVal(alert("1")); \ + sendVal(confirm("2")); \ + sendVal(confirm("3")); \ + sendVal(confirm("4")); \ + sendVal(prompt("5", "initial")); \ + sendVal(prompt("6", "initial")); \ + sendVal(prompt("7", "initial")); \ + </scr' + 'ipt></body></html>'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_Proxy.js b/dom/browser-element/mochitest/browserElement_Proxy.js new file mode 100644 index 000000000..227b40c5f --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Proxy.js @@ -0,0 +1,163 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + let frameUrl = SimpleTest.getTestFileURL('/file_empty.html'); + SpecialPowers.pushPermissions([{ + type: 'browser:embedded-system-app', + allow: true, + context: { + url: frameUrl, + originAttributes: { + inIsolatedMozBrowser: true + } + } + },{ + type: 'browser', + allow: true, + context: { + url: frameUrl, + originAttributes: { + inIsolatedMozBrowser: true + } + } + }], createFrame); +} + +var frame; +var mm; + +function createFrame() { + let loadEnd = function() { + // The frame script running in the frame where the input is hosted. + let appFrameScript = function appFrameScript() { + let i = 1; + + addMessageListener('test:next', function() { + try { + switch (i) { + case 1: + content.document.addEventListener( + 'visibilitychange', function fn() { + content.document.removeEventListener('visibilitychange', fn); + sendAsyncMessage('test:done', { + ok: true, + msg: 'setVisible()' + }); + }); + + // Test a no return method + content.navigator.mozBrowserElementProxy.setVisible(false); + + break; + case 2: + // Test a DOMRequest method + var req = content.navigator.mozBrowserElementProxy.getVisible(); + req.onsuccess = function() { + sendAsyncMessage('test:done', { + ok: true, + msg: 'getVisible()' + }); + }; + + req.onerror = function() { + sendAsyncMessage('test:done', { + ok: false, + msg: 'getVisible() DOMRequest return error.' + }); + }; + + break; + case 3: + // Test an unimplemented method + try { + content.navigator.mozBrowserElementProxy.getActive(); + sendAsyncMessage('test:done', { + ok: false, + msg: 'getActive() should throw.' + }); + + } catch (e) { + sendAsyncMessage('test:done', { + ok: true, + msg: 'getActive() throws.' + }); + } + + break; + case 4: + content.navigator.mozBrowserElementProxy + .addEventListener( + 'mozbrowserlocationchange', + function() { + content.navigator.mozBrowserElementProxy + .onmozbrowserlocationchange = null; + + sendAsyncMessage('test:done', { + ok: true, + msg: 'mozbrowserlocationchange' + }); + }); + + // Test event + content.location.hash = '#foo'; + + break; + } + } catch (e) { + sendAsyncMessage('test:done', { + ok: false, msg: 'thrown: ' + e.toString() }); + } + + i++; + }); + + sendAsyncMessage('test:done', {}); + } + + mm = SpecialPowers.getBrowserFrameMessageManager(frame); + mm.loadFrameScript('data:,(' + encodeURIComponent(appFrameScript.toString()) + ')();', false); + mm.addMessageListener("test:done", next); + }; + + frame = document.createElement('iframe'); + frame.setAttribute('mozbrowser', 'true'); + frame.src = 'file_empty.html'; + document.body.appendChild(frame); + frame.addEventListener('mozbrowserloadend', loadEnd); +} + +var i = 0; +function next(msg) { + let wrappedMsg = SpecialPowers.wrap(msg); + let isOK = wrappedMsg.data.ok; + let msgString = wrappedMsg.data.msg; + + switch (i) { + case 0: + mm.sendAsyncMessage('test:next'); + break; + + case 1: + case 2: + case 3: + ok(isOK, msgString); + mm.sendAsyncMessage('test:next'); + break; + + case 4: + ok(isOK, msgString); + SimpleTest.finish(); + break; + } + + i++; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_PurgeHistory.js b/dom/browser-element/mochitest/browserElement_PurgeHistory.js new file mode 100644 index 000000000..4815f03e7 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_PurgeHistory.js @@ -0,0 +1,87 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 807056 - [Browser] Clear History doesn't clear back/forward history in open tabs +// <iframe mozbrowser>. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +var iframe; +function addOneShotIframeEventListener(event, fn) { + function wrapper(e) { + iframe.removeEventListener(event, wrapper); + fn(e); + }; + + iframe.addEventListener(event, wrapper); +} + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + // FIXME: Bug 1270790 + iframe.setAttribute('remote', 'true'); + + addOneShotIframeEventListener('mozbrowserloadend', function() { + SimpleTest.executeSoon(test2); + }); + + iframe.src = browserElementTestHelpers.emptyPage1; + document.body.appendChild(iframe); +} + +function purgeHistory(nextTest) { + var seenCanGoBackResult = false; + var seenCanGoForwardResult = false; + + iframe.purgeHistory().onsuccess = function(e) { + ok(true, "The history has been purged"); + + iframe.getCanGoBack().onsuccess = function(e) { + is(e.target.result, false, "Iframe cannot go back"); + seenCanGoBackResult = true; + maybeRunNextTest(); + }; + + iframe.getCanGoForward().onsuccess = function(e) { + is(e.target.result, false, "Iframe cannot go forward"); + seenCanGoForwardResult = true; + maybeRunNextTest(); + }; + }; + + function maybeRunNextTest() { + if (seenCanGoBackResult && seenCanGoForwardResult) { + nextTest(); + } + } +} + +function test2() { + purgeHistory(test3); +} + +function test3() { + addOneShotIframeEventListener('mozbrowserloadend', function() { + purgeHistory(test4); + }); + + SimpleTest.executeSoon(function() { + iframe.src = browserElementTestHelpers.emptyPage2; + }); +} + +function test4() { + addOneShotIframeEventListener('mozbrowserlocationchange', function(e) { + is(e.detail.url, browserElementTestHelpers.emptyPage3); + purgeHistory(SimpleTest.finish); + }); + + SimpleTest.executeSoon(function() { + iframe.src = browserElementTestHelpers.emptyPage3; + }); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_Reload.js b/dom/browser-element/mochitest/browserElement_Reload.js new file mode 100644 index 000000000..9ef6d8e7e --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Reload.js @@ -0,0 +1,59 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 741717 - Test the reload ability of <iframe mozbrowser>. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +var iframeScript = function() { + sendAsyncMessage('test:innerHTML', { + data: XPCNativeWrapper.unwrap(content).document.body.innerHTML + }); +} + +var mm; +var iframe; +var loadedEvents = 0; +var countAcc; + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + iframe.addEventListener('mozbrowserloadend', mozbrowserLoaded); + + iframe.src = 'file_bug741717.sjs'; + document.body.appendChild(iframe); +} + +function iframeBodyRecv(data) { + data = SpecialPowers.wrap(data); + var previousCount = countAcc; + var currentCount = parseInt(data.json.data, 10); + countAcc = currentCount; + switch (loadedEvents) { + case 1: + iframe.reload(); + break; + case 2: + ok(true, 'reload was triggered'); + ok(previousCount === currentCount, 'reload was a soft reload'); + iframe.reload(true); + break; + case 3: + ok(currentCount > previousCount, 'reload was a hard reload'); + SimpleTest.finish(); + } +} + +function mozbrowserLoaded() { + loadedEvents++; + mm = SpecialPowers.getBrowserFrameMessageManager(iframe); + mm.addMessageListener('test:innerHTML', iframeBodyRecv); + mm.loadFrameScript('data:,(' + iframeScript.toString() + ')();', false); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_ReloadPostRequest.js b/dom/browser-element/mochitest/browserElement_ReloadPostRequest.js new file mode 100644 index 000000000..614ed7c49 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_ReloadPostRequest.js @@ -0,0 +1,116 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 793644, fire an event when attempting to reloads browser element after +// POST respest. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +SimpleTest.requestFlakyTimeout("untriaged"); +browserElementTestHelpers.setEnabledPref(true); + +var iframe; +var gotConfirmRepost = false; +var doRepost = true; +var timer; +var isPostRequestSubmitted; + +function getExpectedStrings() { + let result = {}; + let bundleService = SpecialPowers.Cc['@mozilla.org/intl/stringbundle;1']. + getService(SpecialPowers.Ci.nsIStringBundleService); + let appBundle = bundleService.createBundle("chrome://global/locale/appstrings.properties"); + let brandBundle = bundleService.createBundle("chrome://branding/locale/brand.properties"); + try { + let brandName = brandBundle.GetStringFromName("brandShortName"); + result.message = appBundle.formatStringFromName("confirmRepostPrompt", + [brandName], 1); + } catch (e) { + // for the case that we don't have brandShortName + result.message = appBundle.GetStringFromName("confirmRepostPrompt"); + } + result.resend = appBundle.GetStringFromName("resendButton.label"); + + return result; +} + +function failBecauseReloaded() { + window.clearTimeout(timer); + timer = null; + iframe.removeEventListener('mozbrowserloadend', failBecauseReloaded); + ok(false, "We don't expect browser element to reload, but it did"); + SimpleTest.finish(); +}; + +function reloadDone() { + iframe.removeEventListener('mozbrowserloadend', reloadDone); + ok(gotConfirmRepost, "Didn't get confirmEx prompt before reload"); + + // Run again, with repost disallowed. + doRepost = false; + isPostRequestSubmitted = false; + iframe.src = 'file_post_request.html'; + iframe.addEventListener('mozbrowserloadend', pageLoadDone); +} + +function pageLoadDone() { + if (!isPostRequestSubmitted) { + // This loadend is done by setting url in address bar, so we don't need to + // do anything. The test page will submit a POST request. + isPostRequestSubmitted = true; + return; + } + + gotConfirmRepost = false; + iframe.removeEventListener('mozbrowserloadend', pageLoadDone); + if (doRepost) { + iframe.addEventListener('mozbrowserloadend', reloadDone); + } else { + // We don't expect browserelement to reload; use a timer to make sure + // it is not reloaded. + iframe.addEventListener('mozbrowserloadend', failBecauseReloaded); + } + iframe.reload(); +} + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + isPostRequestSubmitted = false; + iframe.src = 'file_post_request.html'; + document.body.appendChild(iframe); + + iframe.addEventListener('mozbrowserloadend', pageLoadDone); + + let expectedMessage = getExpectedStrings(); + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + if (e.detail.promptType == 'custom-prompt') { + gotConfirmRepost = true; + e.preventDefault(); + e.detail.returnValue = { + selectedButton: doRepost ? 0 : 1, + }; + is(e.detail.returnValue.checked, undefined); + is(e.detail.buttons[0].messageType, 'custom'); + is(e.detail.buttons[0].message, expectedMessage.resend); + is(e.detail.buttons[1].messageType, 'builtin'); + is(e.detail.buttons[1].message, 'cancel'); + is(e.detail.message, expectedMessage.message); + is(e.detail.buttons.length, 2); + is(e.detail.showCheckbox, false); + is(e.detail.checkboxMessage, null); + e.detail.unblock(); + + if (!doRepost) { + // To make sure the page doesn't reload in 1 sec. + timer = window.setTimeout(function() { + iframe.removeEventListener('mozbrowserloadend', failBecauseReloaded); + SimpleTest.finish(); + }, 1000); + } + } + }); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_RemoveBrowserElement.js b/dom/browser-element/mochitest/browserElement_RemoveBrowserElement.js new file mode 100644 index 000000000..583d58734 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_RemoveBrowserElement.js @@ -0,0 +1,30 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 787517: Remove iframe in the handler of showmodalprompt. This shouldn't +// cause an exception to be thrown. + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + iframe.addEventListener("mozbrowsershowmodalprompt", function(e) { + document.body.removeChild(iframe); + SimpleTest.executeSoon(function() { + ok(true); + SimpleTest.finish(); + }); + }); + + iframe.src = "data:text/html,<html><body><script>alert(\"test\")</script>" + + "</body></html>"; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_ScrollEvent.js b/dom/browser-element/mochitest/browserElement_ScrollEvent.js new file mode 100644 index 000000000..5c4b4dcf9 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_ScrollEvent.js @@ -0,0 +1,27 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that scroll event bubbles up. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + iframe.addEventListener("mozbrowserscroll", function(e) { + ok(true, "got mozbrowserscroll event."); + ok(e.detail, "event.detail is not null."); + ok(e.detail.top === 4000, "top position is correct."); + ok(e.detail.left === 4000, "left position is correct."); + SimpleTest.finish(); + }); + + iframe.src = "data:text/html,<html><body style='min-height: 5000px; min-width: 5000px;'></body><script>window.scrollTo(4000, 4000);</script></html>"; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_SecurityChange.js b/dom/browser-element/mochitest/browserElement_SecurityChange.js new file mode 100644 index 000000000..0ef64b3fa --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_SecurityChange.js @@ -0,0 +1,82 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 763694 - Test that <iframe mozbrowser> delivers proper +// mozbrowsersecuritychange events. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +const { Services } = SpecialPowers.Cu.import('resource://gre/modules/Services.jsm'); +const { UrlClassifierTestUtils } = SpecialPowers.Cu.import('resource://testing-common/UrlClassifierTestUtils.jsm', {}); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + var lastSecurityState; + iframe.addEventListener('mozbrowsersecuritychange', function(e) { + lastSecurityState = e.detail; + }); + + var filepath = 'tests/dom/browser-element/mochitest/file_browserElement_SecurityChange.html'; + + var count = 0; + iframe.addEventListener('mozbrowserloadend', function(e) { + count++; + switch (count) { + case 1: + is(lastSecurityState.state, 'secure'); + is(lastSecurityState.extendedValidation, false); + is(lastSecurityState.trackingContent, false); + is(lastSecurityState.mixedContent, false); + iframe.src = "http://example.com/" + filepath; + break; + case 2: + is(lastSecurityState.state, 'insecure'); + is(lastSecurityState.extendedValidation, false); + is(lastSecurityState.trackingContent, false); + is(lastSecurityState.mixedContent, false); + iframe.src = 'https://example.com:443/' + filepath + '?broken'; + break; + case 3: + is(lastSecurityState.state, 'broken'); + is(lastSecurityState.extendedValidation, false); + is(lastSecurityState.trackingContent, false); + is(lastSecurityState.mixedContent, true); + iframe.src = "http://example.com/" + filepath + '?tracking'; + break; + case 4: + is(lastSecurityState.state, 'insecure'); + is(lastSecurityState.extendedValidation, false); + // TODO: I'm having trouble getting the tracking protection + // test changes to be enabled in the child process, so this + // isn't currently blocked in tests, but it works when + // manually testing. + // is(lastSecurityState.trackingContent, true); + is(lastSecurityState.mixedContent, false); + SimpleTest.finish(); + } + }); + + iframe.src = "https://example.com/" + filepath; + document.body.appendChild(iframe); +} + +addEventListener('testready', function() { + SimpleTest.registerCleanupFunction(UrlClassifierTestUtils.cleanupTestTrackers); + SpecialPowers.pushPrefEnv({"set" : [ + ["privacy.trackingprotection.enabled", true], + ["privacy.trackingprotection.pbmode.enabled", false], + ["browser.safebrowsing.phishing.enabled", false], + ["browser.safebrowsing.malware.enabled", false], + ]}, () => { + SimpleTest.registerCleanupFunction(UrlClassifierTestUtils.cleanupTestTrackers); + UrlClassifierTestUtils.addTestTrackers().then(() => { + runTest(); + }); + }); +}); + diff --git a/dom/browser-element/mochitest/browserElement_SendEvent.js b/dom/browser-element/mochitest/browserElement_SendEvent.js new file mode 100644 index 000000000..a65d6f24f --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_SendEvent.js @@ -0,0 +1,85 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that sendMouseEvent dispatch events. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +function runTest() { + var iframe = document.createElement("iframe"); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + var x = 10; + var y = 10; + // First we force a reflow so that getChildProcessOffset actually returns + // meaningful data. + iframe.getBoundingClientRect(); + // We need to make sure the event coordinates are actually inside the iframe, + // relative to the chome window. + var tabParent = SpecialPowers.wrap(iframe) + .QueryInterface(SpecialPowers.Ci.nsIFrameLoaderOwner) + .frameLoader.tabParent; + if (tabParent) { + let offsetX = {}; + let offsetY = {}; + tabParent.getChildProcessOffset(offsetX, offsetY); + x -= offsetX.value; + y -= offsetY.value; + } + + iframe.addEventListener("mozbrowserloadend", function onloadend(e) { + iframe.sendMouseEvent("mousedown", x, y, 0, 1, 0); + }); + + iframe.addEventListener("mozbrowserlocationchange", function onlocchange(e) { + var a = document.createElement("a"); + a.href = e.detail.url; + + switch (a.hash) { + case "#mousedown": + ok(true, "Receive a mousedown event."); + iframe.sendMouseEvent("mousemove", x, y, 0, 0, 0); + break; + case "#mousemove": + ok(true, "Receive a mousemove event."); + iframe.sendMouseEvent("mouseup", x, y, 0, 1, 0); + break; + case "#mouseup": + ok(true, "Receive a mouseup event."); + break; + case "#click": + ok(true, "Receive a click event."); + if (SpecialPowers.getIntPref("dom.w3c_touch_events.enabled") != 0) { + iframe.sendTouchEvent("touchstart", [1], [x], [y], [2], [2], + [20], [0.5], 1, 0); + } else { + iframe.removeEventListener('mozbrowserlocationchange', onlocchange); + SimpleTest.finish(); + } + break; + case "#touchstart": + ok(true, "Receive a touchstart event."); + iframe.sendTouchEvent("touchmove", [1], [x], [y], [2], [2], + [20], [0.5], 1, 0); + case "#touchmove": + ok(true, "Receive a touchmove event."); + iframe.sendTouchEvent("touchend", [1], [x], [y], [2], [2], + [20], [0.5], 1, 0); + break; + case "#touchend": + ok(true, "Receive a touchend event."); + iframe.sendTouchEvent("touchcancel", [1], [x], [y], [2], [2], + [20], [0.5], 1, 0); + iframe.removeEventListener('mozbrowserlocationchange', onlocchange); + SimpleTest.finish(); + break; + } + }); + + iframe.src = "file_browserElement_SendEvent.html"; + +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_SetInputMethodActive.js b/dom/browser-element/mochitest/browserElement_SetInputMethodActive.js new file mode 100644 index 000000000..2b94f5cda --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_SetInputMethodActive.js @@ -0,0 +1,323 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 905573 - Add setInputMethodActive to browser elements to allow gaia +// system set the active IME app. +'use strict'; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +// We'll need to get the appId from the current document, +// it's either SpecialPowers.Ci.nsIScriptSecurityManager.NO_APP_ID when +// we are not running inside an app (e.g. Firefox Desktop), +// or the appId of Mochitest app when we are running inside that app +// (e.g. Emulator). +var currentAppId = SpecialPowers.wrap(document).nodePrincipal.appId; +var inApp = + currentAppId !== SpecialPowers.Ci.nsIScriptSecurityManager.NO_APP_ID; +// We will also need the manifest URL and set it on iframes. +var currentAppManifestURL; + +if (inApp) { + let appsService = SpecialPowers.Cc["@mozilla.org/AppsService;1"] + .getService(SpecialPowers.Ci.nsIAppsService); + + currentAppManifestURL = appsService.getManifestURLByLocalId(currentAppId); +}; + +info('appId=' + currentAppId); +info('manifestURL=' + currentAppManifestURL); + +function setup() { + let appInfo = SpecialPowers.Cc['@mozilla.org/xre/app-info;1'] + .getService(SpecialPowers.Ci.nsIXULAppInfo); + if (appInfo.name != 'B2G') { + SpecialPowers.Cu.import("resource://gre/modules/Keyboard.jsm", window); + } + + SpecialPowers.setBoolPref("dom.mozInputMethod.enabled", true); + SpecialPowers.addPermission('input-manage', true, document); +} + +function tearDown() { + SpecialPowers.setBoolPref("dom.mozInputMethod.enabled", false); + SpecialPowers.removePermission('input-manage', document); + SimpleTest.finish(); +} + +function runTest() { + createFrames(); +} + +var gInputMethodFrames = []; +var gInputFrame; + +function createFrames() { + // Create two input method iframes. + let loadendCount = 0; + let countLoadend = function() { + loadendCount++; + if (loadendCount === 3) { + setPermissions(); + } + }; + + // Create an input field to receive string from input method iframes. + gInputFrame = document.createElement('iframe'); + gInputFrame.setAttribute('mozbrowser', 'true'); + gInputFrame.src = 'file_browserElement_SetInputMethodActive.html'; + document.body.appendChild(gInputFrame); + gInputFrame.addEventListener('mozbrowserloadend', countLoadend); + + for (let i = 0; i < 2; i++) { + let frame = gInputMethodFrames[i] = document.createElement('iframe'); + frame.setAttribute('mozbrowser', 'true'); + if (currentAppManifestURL) { + frame.setAttribute('mozapp', currentAppManifestURL); + } + frame.addEventListener('mozbrowserloadend', countLoadend); + frame.src = 'file_empty.html#' + i; + document.body.appendChild(frame); + } + } + +function setPermissions() { + let permissions = [{ + type: 'input', + allow: true, + context: { + url: SimpleTest.getTestFileURL('/file_empty.html'), + originAttributes: { + appId: currentAppId, + inIsolatedMozBrowser: true + } + } + }]; + + if (inApp) { + // The current document would also need to be given access for IPC to + // recognize our permission (why)? + permissions.push({ + type: 'input', allow: true, context: document }); + } + + SpecialPowers.pushPermissions(permissions, + SimpleTest.waitForFocus.bind(SimpleTest, startTest)); +} + + function startTest() { + // The frame script running in the frame where the input is hosted. + let appFrameScript = function appFrameScript() { + let input = content.document.body.firstElementChild; + input.oninput = function() { + sendAsyncMessage('test:InputMethod:oninput', { + from: 'input', + value: this.value + }); + }; + + input.onblur = function() { + // "Expected" lost of focus since the test is finished. + if (input.value === 'hello#0#1') { + return; + } + + sendAsyncMessage('test:InputMethod:oninput', { + from: 'input', + error: true, + value: 'Unexpected lost of focus on the input frame!' + }); + }; + + input.focus(); + }; + + // Inject frame script to receive input. + let mm = SpecialPowers.getBrowserFrameMessageManager(gInputFrame); + mm.loadFrameScript('data:,(' + encodeURIComponent(appFrameScript.toString()) + ')();', false); + mm.addMessageListener("test:InputMethod:oninput", next); + + gInputMethodFrames.forEach((frame) => { + ok(frame.setInputMethodActive, 'Can access setInputMethodActive.'); + + // The frame script running in the input method frames. + let appFrameScript = function appFrameScript() { + let im = content.navigator.mozInputMethod; + im.oninputcontextchange = function() { + let ctx = im.inputcontext; + // Report back to parent frame on status of ctx gotten. + // (A setTimeout() here to ensure this always happens after + // DOMRequest succeed.) + content.setTimeout(() => { + sendAsyncMessage('test:InputMethod:imFrameMessage', { + from: 'im', + value: content.location.hash + !!ctx + }); + }); + + // If there is a context, send out the hash. + if (ctx) { + ctx.replaceSurroundingText(content.location.hash); + } + }; + }; + + // Inject frame script to receive message. + let mm = SpecialPowers.getBrowserFrameMessageManager(frame); + mm.loadFrameScript('data:,(' + encodeURIComponent(appFrameScript.toString()) + ')();', false); + mm.addMessageListener("test:InputMethod:imFrameMessage", next); + }); + + // Set focus to the input field and wait for input methods' inputting. + SpecialPowers.DOMWindowUtils.focus(gInputFrame); + + let req0 = gInputMethodFrames[0].setInputMethodActive(true); + req0.onsuccess = function() { + ok(true, 'setInputMethodActive succeeded (0).'); + }; + + req0.onerror = function() { + ok(false, 'setInputMethodActive failed (0): ' + this.error.name); + }; +} + +var gCount = 0; + +var gFrameMsgCounts = { + 'input': 0, + 'im0': 0, + 'im1': 0 +}; + +function next(msg) { + let wrappedMsg = SpecialPowers.wrap(msg); + let from = wrappedMsg.data.from; + let value = wrappedMsg.data.value; + + if (wrappedMsg.data.error) { + ok(false, wrappedMsg.data.value); + + return; + } + + let fromId = from; + if (from === 'im') { + fromId += value[1]; + } + gFrameMsgCounts[fromId]++; + + // The texts sent from the first and the second input method are '#0' and + // '#1' respectively. + switch (gCount) { + case 0: + switch (fromId) { + case 'im0': + if (gFrameMsgCounts.im0 === 1) { + is(value, '#0true', 'First frame should get the context first.'); + } else { + ok(false, 'Unexpected multiple messages from im0.') + } + + break; + + case 'im1': + is(false, 'Shouldn\'t be hearing anything from second frame.'); + + break; + + case 'input': + if (gFrameMsgCounts.input === 1) { + is(value, '#0hello', + 'Failed to get correct input from the first iframe.'); + } else { + ok(false, 'Unexpected multiple messages from input.') + } + + break; + } + + if (gFrameMsgCounts.input !== 1 || + gFrameMsgCounts.im0 !== 1 || + gFrameMsgCounts.im1 !== 0) { + return; + } + + gCount++; + + let req0 = gInputMethodFrames[0].setInputMethodActive(false); + req0.onsuccess = function() { + ok(true, 'setInputMethodActive succeeded (0).'); + }; + req0.onerror = function() { + ok(false, 'setInputMethodActive failed (0): ' + this.error.name); + }; + let req1 = gInputMethodFrames[1].setInputMethodActive(true); + req1.onsuccess = function() { + ok(true, 'setInputMethodActive succeeded (1).'); + }; + req1.onerror = function() { + ok(false, 'setInputMethodActive failed (1): ' + this.error.name); + }; + + break; + + case 1: + switch (fromId) { + case 'im0': + if (gFrameMsgCounts.im0 === 2) { + is(value, '#0false', 'First frame should have the context removed.'); + } else { + ok(false, 'Unexpected multiple messages from im0.') + } + break; + + case 'im1': + if (gFrameMsgCounts.im1 === 1) { + is(value, '#1true', 'Second frame should get the context.'); + } else { + ok(false, 'Unexpected multiple messages from im0.') + } + + break; + + case 'input': + if (gFrameMsgCounts.input === 2) { + is(value, '#0#1hello', + 'Failed to get correct input from the second iframe.'); + } else { + ok(false, 'Unexpected multiple messages from input.') + } + break; + } + + if (gFrameMsgCounts.input !== 2 || + gFrameMsgCounts.im0 !== 2 || + gFrameMsgCounts.im1 !== 1) { + return; + } + + gCount++; + + // Receive the second input from the second iframe. + // Deactive the second iframe. + let req3 = gInputMethodFrames[1].setInputMethodActive(false); + req3.onsuccess = function() { + ok(true, 'setInputMethodActive(false) succeeded (2).'); + }; + req3.onerror = function() { + ok(false, 'setInputMethodActive(false) failed (2): ' + this.error.name); + }; + break; + + case 2: + is(fromId, 'im1', 'Message sequence unexpected (3).'); + is(value, '#1false', 'Second frame should have the context removed.'); + + tearDown(); + break; + } +} + +setup(); +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_SetVisible.js b/dom/browser-element/mochitest/browserElement_SetVisible.js new file mode 100644 index 000000000..dac8d7e42 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_SetVisible.js @@ -0,0 +1,75 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test the setVisible property for mozbrowser +"use strict"; + +SimpleTest.waitForExplicitFinish(); +SimpleTest.requestFlakyTimeout("untriaged"); +browserElementTestHelpers.setEnabledPref(true); + +var iframeScript = function() { + content.document.addEventListener("visibilitychange", function() { + sendAsyncMessage('test:visibilitychange', { + hidden: content.document.hidden + }); + }, false); +} + +function runTest() { + var mm; + var numEvents = 0; + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + iframe1.src = 'data:text/html,1'; + + document.body.appendChild(iframe1); + + function recvVisibilityChanged(msg) { + msg = SpecialPowers.wrap(msg); + numEvents++; + if (numEvents === 1) { + ok(true, 'iframe recieved visibility changed'); + ok(msg.json.hidden === true, 'hidden attribute correctly set'); + iframe1.setVisible(false); + iframe1.setVisible(true); + } else if (numEvents === 2) { + ok(msg.json.hidden === false, 'hidden attribute correctly set'); + // Allow some time in case we generate too many events + setTimeout(function() { + mm.removeMessageListener('test:visibilitychange', recvVisibilityChanged); + SimpleTest.finish(); + }, 100); + } else { + ok(false, 'Too many visibilitychange events'); + } + } + + function iframeLoaded() { + testGetVisible(); + } + + function testGetVisible() { + iframe1.setVisible(false); + iframe1.getVisible().onsuccess = function(evt) { + ok(evt.target.result === false, 'getVisible() responds false after setVisible(false)'); + + iframe1.setVisible(true); + iframe1.getVisible().onsuccess = function(evt) { + ok(evt.target.result === true, 'getVisible() responds true after setVisible(true)'); + testVisibilityChanges(); + }; + }; + } + + function testVisibilityChanges() { + mm = SpecialPowers.getBrowserFrameMessageManager(iframe1); + mm.addMessageListener('test:visibilitychange', recvVisibilityChanged); + mm.loadFrameScript('data:,(' + iframeScript.toString() + ')();', false); + iframe1.setVisible(false); + } + + iframe1.addEventListener('mozbrowserloadend', iframeLoaded); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_SetVisibleFrames.js b/dom/browser-element/mochitest/browserElement_SetVisibleFrames.js new file mode 100644 index 000000000..721248ab9 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_SetVisibleFrames.js @@ -0,0 +1,89 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 762939 - Test that visibility propagates down properly through +// hierarchies of <iframe mozbrowser>. +// +// In this test, we modify the parent's visibility and check that the child's +// visibility is changed as appopriate. We test modifying the child's +// visibility in a separate testcase. + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +var iframe; + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + // Our test involves three <iframe mozbrowser>'s, parent, child1, and child2. + // child1 and child2 are contained inside parent. child1 is visibile, and + // child2 is not. + // + // For the purposes of this test, we want there to be a process barrier + // between child{1,2} and parent. Therefore parent must be a non-remote + // <iframe mozbrowser>, until bug 761935 is resolved and we can have nested + // content processes. + iframe.remote = false; + + iframe.addEventListener('mozbrowsershowmodalprompt', checkMessage); + expectMessage('parent:ready', test1); + + document.body.appendChild(iframe); + iframe.src = 'file_browserElement_SetVisibleFrames_Outer.html'; +} + +function test1() { + expectMessage('child1:hidden', getVisibleTest1); + iframe.setVisible(false); +} + +function getVisibleTest1() { + iframe.getVisible().onsuccess = function(evt) { + ok(evt.target.result === false, 'getVisible shows a hidden frame'); + test2(); + }; +} + +function test2() { + expectMessage('child1:visible', getVisibleTest2); + iframe.setVisible(true); +} + +function getVisibleTest2() { + iframe.getVisible().onsuccess = function(evt) { + ok(evt.target.result === true, 'getVisible shows a displayed frame'); + finish(); + }; +} + +function finish() { + // We need to remove this listener because when this test finishes and the + // iframe containing this document is navigated, we'll fire a + // visibilitychange(false) event on all child iframes. That's OK and + // expected, but if we don't remove our listener, then we'll end up causing + // the /next/ test to fail! + iframe.removeEventListener('mozbrowsershowmodalprompt', checkMessage); + SimpleTest.finish(); +} + +var expectedMsg = null; +var expectedMsgCallback = null; +function expectMessage(msg, next) { + expectedMsg = msg; + expectedMsgCallback = next; +} + +function checkMessage(e) { + var msg = e.detail.message; + is(msg, expectedMsg); + if (msg == expectedMsg) { + expectedMsg = null; + SimpleTest.executeSoon(function() { expectedMsgCallback() }); + } +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_SetVisibleFrames2.js b/dom/browser-element/mochitest/browserElement_SetVisibleFrames2.js new file mode 100644 index 000000000..cf841a470 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_SetVisibleFrames2.js @@ -0,0 +1,55 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 762939 - Test that setting a <iframe mozbrowser> to invisible / visible +// inside an invisible <iframe mozbrowser> doesn't trigger any events. + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + // We need remote = false here until bug 761935 is fixed; see + // SetVisibleFrames.js for an explanation. + iframe.remote = false; + + iframe.addEventListener('mozbrowserloadend', function loadEnd(e) { + iframe.removeEventListener('mozbrowserloadend', loadEnd); + iframe.setVisible(false); + iframe.src = 'file_browserElement_SetVisibleFrames2_Outer.html'; + }); + + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + if (e.detail.message == 'parent:finish') { + ok(true, "Got parent:finish"); + + // Give any extra events a chance to fire, then end the test. + SimpleTest.executeSoon(function() { + SimpleTest.executeSoon(function() { + SimpleTest.executeSoon(function() { + SimpleTest.executeSoon(function() { + SimpleTest.executeSoon(function() { + finish(); + }); + }); + }); + }); + }); + } + else { + ok(false, "Got unexpected message: " + e.detail.message); + } + }); + + document.body.appendChild(iframe); +} + +function finish() { + SimpleTest.finish(); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_Stop.js b/dom/browser-element/mochitest/browserElement_Stop.js new file mode 100644 index 000000000..67720c148 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Stop.js @@ -0,0 +1,52 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 709759 - Test the stop ability of <iframe mozbrowser>. + +// The img that is loaded will never be returned and will block +// the page from loading, the timeout ensures that the page is +// actually blocked from loading, once stop is called the +// image load will be cancaelled and mozbrowserloadend should be called. + +"use strict"; +SimpleTest.waitForExplicitFinish(); +SimpleTest.requestFlakyTimeout("untriaged"); +browserElementTestHelpers.setEnabledPref(true); + +var iframe; +var stopped = false; +var imgSrc = 'http://test/tests/dom/browser-element/mochitest/file_bug709759.sjs'; + +function runTest() { + iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + // FIXME: Bug 1270790 + iframe.setAttribute('remote', 'true'); + iframe.addEventListener('mozbrowserloadend', loadend); + iframe.src = 'data:text/html,<html>' + + '<body><img src="' + imgSrc + '" /></body></html>'; + + document.body.appendChild(iframe); + + setTimeout(function() { + stopped = true; + iframe.stop(); + }, 200); +} + +function loadend() { + ok(stopped, 'Iframes network connections were stopped'); + + // Wait 1 second and make sure there isn't a mozbrowsererror after stop(); + iframe.addEventListener('mozbrowsererror', handleError); + window.setTimeout(function() { + iframe.removeEventListener('mozbrowsererror', handleError); + SimpleTest.finish(); + }, 1000); +} + +function handleError() { + ok(false, "mozbrowsererror should not be fired"); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_TargetBlank.js b/dom/browser-element/mochitest/browserElement_TargetBlank.js new file mode 100644 index 000000000..89c2f33c1 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_TargetBlank.js @@ -0,0 +1,26 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 764718 - Test that clicking a link with _target=blank works. + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + iframe.addEventListener('mozbrowseropenwindow', function(e) { + is(e.detail.url, 'http://example.com/'); + e.preventDefault(); + SimpleTest.finish(); + }); + + iframe.src = "file_browserElement_TargetBlank.html"; + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_TargetTop.js b/dom/browser-element/mochitest/browserElement_TargetTop.js new file mode 100644 index 000000000..54bad9c42 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_TargetTop.js @@ -0,0 +1,31 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 771273 - Check that window.open(url, '_top') works properly with <iframe +// mozbrowser>. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + iframe.addEventListener('mozbrowseropenwindow', function(e) { + ok(false, 'Not expecting an openwindow event.'); + }); + + iframe.addEventListener('mozbrowserlocationchange', function(e) { + if (/file_browserElement_TargetTop.html\?2$/.test(e.detail.url)) { + ok(true, 'Got the locationchange we were looking for.'); + SimpleTest.finish(); + } + }); + + document.body.appendChild(iframe); + iframe.src = 'file_browserElement_TargetTop.html'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_ThemeColor.js b/dom/browser-element/mochitest/browserElement_ThemeColor.js new file mode 100644 index 000000000..01e9c5c36 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_ThemeColor.js @@ -0,0 +1,85 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that the onmozbrowsermetachange event for theme-color works. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + function loadFrameScript(script) { + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:," + script, + /* allowDelayedLoad = */ false); + } + + let iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + iframe1.src = "http://test/tests/dom/browser-element/mochitest/file_browserElement_ThemeColor.html"; + iframe1.addEventListener('mozbrowsermetachange', tests); + document.body.appendChild(iframe1); + + let numMetaChanges = 0; + function tests(e) { + let detail = e.detail; + + switch (numMetaChanges++) { + case 0: { + is(detail.name, 'theme-color', 'name matches'); + is(detail.content, 'pink', 'content matches'); + is(detail.type, 'added', 'type matches'); + + let script = + "var meta = content.document.head.querySelector('meta');" + + "meta.content = 'green';"; + loadFrameScript(script); + break; + } + + case 1: { + is(detail.name, 'theme-color', 'name matches'); + is(detail.content, 'green', 'content matches'); + is(detail.type, 'changed', 'type matches'); + + let script = + "var meta = content.document.createElement('meta');" + + "meta.name = 'theme-group';" + + "meta.content = 'theme-productivity';" + + "content.document.head.appendChild(meta)"; + loadFrameScript(script); + break; + } + + case 2: { + is(detail.name, 'theme-group', 'name matches'); + is(detail.content, 'theme-productivity', 'content matches'); + is(detail.type, 'added', 'type matches'); + + let script = + "var meta = content.document.head.querySelector('meta');" + + "meta.parentNode.removeChild(meta);"; + loadFrameScript(script); + break; + } + + case 3: { + is(detail.name, 'theme-color', 'name matches'); + is(detail.content, 'green', 'content matches'); + is(detail.type, 'removed', 'type matches'); + + SimpleTest.finish(); + break; + } + + default: { + ok(false, 'Too many metachange events.'); + break; + } + } + }; +} + +window.addEventListener('testready', runTest); + diff --git a/dom/browser-element/mochitest/browserElement_Titlechange.js b/dom/browser-element/mochitest/browserElement_Titlechange.js new file mode 100644 index 000000000..78c939ad8 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Titlechange.js @@ -0,0 +1,68 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that the onmozbrowsertitlechange event works. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe1); + + // iframe2 is a red herring; we modify its title but don't listen for + // titlechanges; we want to make sure that its titlechange events aren't + // picked up by the listener on iframe1. + var iframe2 = document.createElement('iframe'); + iframe2.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe2); + + // iframe3 is another red herring. It's not a mozbrowser, so we shouldn't + // get any titlechange events on it. + var iframe3 = document.createElement('iframe'); + document.body.appendChild(iframe3); + + var numTitleChanges = 0; + + iframe1.addEventListener('mozbrowsertitlechange', function(e) { + // Ignore empty titles; these come from about:blank. + if (e.detail == '') + return; + + numTitleChanges++; + + if (numTitleChanges == 1) { + is(e.detail, 'Title'); + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript("data:,content.document.title='New title';", + /* allowDelayedLoad = */ false); + SpecialPowers.getBrowserFrameMessageManager(iframe2) + .loadFrameScript("data:,content.document.title='BAD TITLE 2';", + /* allowDelayedLoad = */ false); + } + else if (numTitleChanges == 2) { + is(e.detail, 'New title'); + iframe1.src = 'data:text/html,<html><head><title>Title 3</title></head><body></body></html>'; + } + else if (numTitleChanges == 3) { + is(e.detail, 'Title 3'); + SimpleTest.finish(); + } + else { + ok(false, 'Too many titlechange events.'); + } + }); + + iframe3.addEventListener('mozbrowsertitlechange', function(e) { + ok(false, 'Should not get a titlechange event for iframe3.'); + }); + + iframe1.src = 'data:text/html,<html><head><title>Title</title></head><body></body></html>'; + iframe2.src = 'data:text/html,<html><head><title>BAD TITLE</title></head><body></body></html>'; + iframe3.src = 'data:text/html,<html><head><title>SHOULD NOT GET EVENT</title></head><body></body></html>'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_TopBarrier.js b/dom/browser-element/mochitest/browserElement_TopBarrier.js new file mode 100644 index 000000000..3bd68854c --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_TopBarrier.js @@ -0,0 +1,81 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that an <iframe mozbrowser> is a window.{top,parent,frameElement} barrier. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +var iframe; +function runTest() { + iframe = document.createElement('iframe'); + iframe.addEventListener('mozbrowserloadend', function() { + try { + outerIframeLoaded(); + } catch(e) { + dump("Got error: " + e + '\n'); + } + }); + iframe.setAttribute('mozbrowser', 'true'); + iframe.src = 'data:text/html,Outer iframe <iframe id="inner-iframe"></iframe>'; + // For kicks, this test uses a display:none iframe. This shouldn't make a + // difference in anything. + iframe.style.display = 'none'; + document.body.appendChild(iframe); +} + +var numMsgReceived = 0; +function outerIframeLoaded() { + // If you're changing the amount of is() calls in injectedScript, + // also change the number in waitForMessages accordingly + var injectedScript = + "data:,function is(a, b, desc) { \ + if (a == b) { \ + sendAsyncMessage('test:test-pass', desc); \ + } else { \ + sendAsyncMessage('test:test-fail', desc + ' ' + a + ' != ' + b); \ + } \ + } \ + is(content.window.top, content.window, 'top'); \ + is(content.window.content, content.window, 'content'); \ + is(content.window.parent, content.window, 'parent'); \ + is(content.window.frameElement, null, 'frameElement'); \ + var innerIframe = content.document.getElementById('inner-iframe'); \ + var innerWindow = innerIframe.contentWindow; \ + is(innerWindow.top, content.window, 'inner top'); \ + is(innerWindow.content, content.window, 'inner content'); \ + is(innerWindow.parent, content.window, 'inner parent'); \ + is(innerWindow.frameElement, innerIframe, 'inner frameElement');" + + var mm = SpecialPowers.getBrowserFrameMessageManager(iframe); + + function onRecvTestPass(msg) { + numMsgReceived++; + ok(true, msg.json); + } + mm.addMessageListener('test:test-pass', onRecvTestPass); + + function onRecvTestFail(msg) { + numMsgReceived++; + ok(false, msg.json); + } + mm.addMessageListener('test:test-fail', onRecvTestFail); + + mm.loadFrameScript(injectedScript, /* allowDelayedLoad = */ false); + + // 8 is the number of is() calls in injectedScript + waitForMessages(8); +} + +function waitForMessages(num) { + if (numMsgReceived < num) { + SimpleTest.executeSoon(function() { waitForMessages(num); }); + return; + } + + SimpleTest.finish(); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_Viewmode.js b/dom/browser-element/mochitest/browserElement_Viewmode.js new file mode 100644 index 000000000..51627d9a8 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_Viewmode.js @@ -0,0 +1,71 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that the onmozbrowsermetachange event for viewmode works. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + function loadFrameScript(script) { + SpecialPowers.getBrowserFrameMessageManager(iframe1) + .loadFrameScript('data:,' + script, + /* allowDelayedLoad = */ false); + } + + let iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + iframe1.src = "http://test/tests/dom/browser-element/mochitest/file_browserElement_Viewmode.html"; + iframe1.addEventListener('mozbrowsermetachange', tests); + document.body.appendChild(iframe1); + + let numMetaChanges = 0; + function tests(e) { + let detail = e.detail; + + switch (numMetaChanges++) { + case 0: { + is(detail.name, 'viewmode', 'name matches'); + is(detail.content, 'projection=stereo', 'content matches'); + is(detail.type, 'added', 'type matches'); + + let script = + "var meta = content.document.head.querySelector('meta');" + + "meta.content = 'projection=mono';"; + loadFrameScript(script); + break; + } + + case 1: { + is(detail.name, 'viewmode', 'name matches'); + is(detail.content, 'projection=mono', 'content matches'); + is(detail.type, 'changed', 'type matches'); + + let script = + "var meta = content.document.head.querySelector('meta');" + + "meta.parentNode.removeChild(meta);"; + loadFrameScript(script); + break; + } + + case 2: { + is(detail.name, 'viewmode', 'name matches'); + is(detail.content, 'projection=mono', 'content matches'); + is(detail.type, 'removed', 'type matches'); + + SimpleTest.finish(); + break; + } + + default: { + ok(false, 'Too many metachange events.'); + break; + } + } + }; +} + +window.addEventListener('testready', runTest); + diff --git a/dom/browser-element/mochitest/browserElement_VisibilityChange.js b/dom/browser-element/mochitest/browserElement_VisibilityChange.js new file mode 100644 index 000000000..d7db5f45d --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_VisibilityChange.js @@ -0,0 +1,42 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that the onmozbrowservisibilitychange event works. +'use strict'; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +var iframe1 = null; +function runTest() { + iframe1 = document.createElement('iframe'); + iframe1.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe1); + + iframe1.src = 'data:text/html,<html><head><title>Title</title></head><body></body></html>'; + checkVisibilityFalse(); +} + +function checkVisibilityFalse() { + iframe1.addEventListener('mozbrowservisibilitychange', function onvisibilitychange(e) { + iframe1.removeEventListener(e.type, onvisibilitychange); + + is(e.detail.visible, false, 'Visibility should be false'); + checkVisibilityTrue(); + }); + + iframe1.setVisible(false); +} + +function checkVisibilityTrue() { + iframe1.addEventListener('mozbrowservisibilitychange', function onvisibilitychange(e) { + iframe1.removeEventListener(e.type, onvisibilitychange); + + is(e.detail.visible, true, 'Visibility should be true'); + SimpleTest.finish(); + }); + + iframe1.setVisible(true); +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_XFrameOptions.js b/dom/browser-element/mochitest/browserElement_XFrameOptions.js new file mode 100644 index 000000000..391c2cb95 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_XFrameOptions.js @@ -0,0 +1,26 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 770239 - Test that we can load pages with X-Frame-Options: Deny inside +// <iframe mozbrowser>. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + // The page we load will fire an alert when it successfully loads. + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + ok(true, "Got alert"); + SimpleTest.finish(); + }); + + document.body.appendChild(iframe); + iframe.src = 'file_browserElement_XFrameOptions.sjs?DENY'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_XFrameOptionsAllowFrom.js b/dom/browser-element/mochitest/browserElement_XFrameOptionsAllowFrom.js new file mode 100644 index 000000000..3657d9732 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_XFrameOptionsAllowFrom.js @@ -0,0 +1,60 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 690168 - Support Allow-From notation for X-Frame-Options header. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +var initialScreenshotArrayBuffer = null; + +function arrayBuffersEqual(a, b) { + var x = new Int8Array(a); + var y = new Int8Array(b); + if (x.length != y.length) { + return false; + } + + for (var i = 0; i < x.length; i++) { + if (x[i] != y[i]) { + return false; + } + } + + return true; +} + +function runTest() { + var count = 0; + + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + iframe.height = '1000px'; + + var step1, stepfinish; + // The innermost page we load will fire an alert when it successfully loads. + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + switch (e.detail.message) { + case 'step 1': + step1 = SpecialPowers.snapshotWindow(iframe.contentWindow); + break; + case 'step 2': + ok(false, 'cross origin page loaded'); + break; + case 'finish': + // The page has now attempted to load the X-Frame-Options page; take + // another screenshot. + stepfinish = SpecialPowers.snapshotWindow(iframe.contentWindow); + ok(step1.toDataURL() == stepfinish.toDataURL(), "Screenshots should be identical"); + SimpleTest.finish(); + } + }); + + document.body.appendChild(iframe); + + iframe.src = 'http://example.com/tests/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.html'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_XFrameOptionsDeny.js b/dom/browser-element/mochitest/browserElement_XFrameOptionsDeny.js new file mode 100644 index 000000000..bf307cc19 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_XFrameOptionsDeny.js @@ -0,0 +1,63 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 770239 - Test that X-Frame-Options will correctly block a page inside a +// subframe of <iframe mozbrowser>. +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +var initialScreenshotArrayBuffer; + +function arrayBuffersEqual(a, b) { + var x = new Int8Array(a); + var y = new Int8Array(b); + if (x.length != y.length) { + return false; + } + + for (var i = 0; i < x.length; i++) { + if (x[i] != y[i]) { + return false; + } + } + + return true; +} + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + // Our child will create two iframes, so make sure this iframe is big enough + // to show both of them without scrolling, so taking a screenshot gets both + // frames. + iframe.height = '1000px'; + + var step1, stepfinish; + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + switch (e.detail.message) { + case 'step 1': + step1 = SpecialPowers.snapshotWindow(iframe.contentWindow); + break; + case 'step 2': + // The page has now attempted to load the X-Frame-Options page; take + // another screenshot. + stepfinish = SpecialPowers.snapshotWindow(iframe.contentWindow); + ok(step1.toDataURL() == stepfinish.toDataURL(), "Screenshots should be identical"); + SimpleTest.finish(); + break; + } + }); + + document.body.appendChild(iframe); + + // Load this page from a different origin than ourselves. This page will, in + // turn, load a child from mochi.test:8888, our origin, with X-Frame-Options: + // SAMEORIGIN. That load should be denied. + iframe.src = 'http://example.com/tests/dom/browser-element/mochitest/file_browserElement_XFrameOptionsDeny.html'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_XFrameOptionsSameOrigin.js b/dom/browser-element/mochitest/browserElement_XFrameOptionsSameOrigin.js new file mode 100644 index 000000000..35e4ca8f0 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_XFrameOptionsSameOrigin.js @@ -0,0 +1,28 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Bug 770239 - Load an X-Frame-Options: SAMEORIGIN page inside an <iframe> +// inside <iframe mozbrowser>. The two iframes will have the same origin, but +// this page will be of a different origin. The load should succeed. + +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + // The innermost page we load will fire an alert when it successfully loads. + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + ok(true, "Got alert"); + SimpleTest.finish(); + }); + + document.body.appendChild(iframe); + iframe.src = 'http://example.com/tests/dom/browser-element/mochitest/file_browserElement_XFrameOptionsSameOrigin.html'; +} + +addEventListener('testready', runTest); diff --git a/dom/browser-element/mochitest/browserElement_getWebManifest.js b/dom/browser-element/mochitest/browserElement_getWebManifest.js new file mode 100644 index 000000000..c2b8f96f3 --- /dev/null +++ b/dom/browser-element/mochitest/browserElement_getWebManifest.js @@ -0,0 +1,64 @@ +/* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ +/*globals async, ok, is, SimpleTest, browserElementTestHelpers*/ + +// Bug 1169633 - getWebManifest tests +'use strict'; +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); + +// request to load a manifest from a page that doesn't have a manifest. +// The expected result to be null. +var test1 = async(function* () { + var manifest = yield requestManifest('file_empty.html'); + is(manifest, null, 'it should be null.'); +}); + +// request to load a manifest from a page that has a manifest. +// The expected manifest to have a property name whose value is 'pass'. +var test2 = async(function* () { + var manifest = yield requestManifest('file_web_manifest.html'); + is(manifest && manifest.name, 'pass', 'it should return a manifest with name pass.'); +}); + +// Cause an exception by attempting to fetch a file URL, +// expect onerror to be called. +var test3 = async(function* () { + var gotError = false; + try { + yield requestManifest('file_illegal_web_manifest.html'); + } catch (err) { + gotError = true; + } + ok(gotError, 'onerror was called on the DOMRequest.'); +}); + +// Run the tests +addEventListener('testready', () => { + Promise + .all([test1(), test2(), test3()]) + .then(SimpleTest.finish); +}); + +function requestManifest(url) { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + iframe.src = url; + document.body.appendChild(iframe); + return new Promise((resolve, reject) => { + iframe.addEventListener('mozbrowserloadend', function loadend() { + iframe.removeEventListener('mozbrowserloadend', loadend); + SimpleTest.executeSoon(() => { + var req = iframe.getWebManifest(); + req.onsuccess = () => { + document.body.removeChild(iframe); + resolve(req.result); + }; + req.onerror = () => { + document.body.removeChild(iframe); + reject(new Error(req.error)); + }; + }); + }); + }); +} diff --git a/dom/browser-element/mochitest/chrome.ini b/dom/browser-element/mochitest/chrome.ini new file mode 100644 index 000000000..2b0561df8 --- /dev/null +++ b/dom/browser-element/mochitest/chrome.ini @@ -0,0 +1,92 @@ +[DEFAULT] +skip-if = e10s || toolkit == 'android' # Bug 1287720: takes too long on android + +support-files = + audio.ogg + async.js + browserElementTestHelpers.js + browserElement_ActiveStateChange.js + browserElement_AudioChannelSeeking.js + browserElement_AudioChannelMutedByDefault.js + browserElement_AudioPlayback.js + browserElement_AudioChannel.js + browserElement_AudioChannel_nested.js + browserElement_BackForward.js + browserElement_BadScreenshot.js + browserElement_DocumentFirstPaint.js + browserElement_DOMRequestError.js + browserElement_ExecuteScript.js + browserElement_Find.js + browserElement_GetContentDimensions.js + browserElement_GetScreenshot.js + browserElement_GetScreenshotDppx.js + browserElement_getWebManifest.js + browserElement_NextPaint.js + browserElement_NoAudioTrack.js + browserElement_PurgeHistory.js + browserElement_ReloadPostRequest.js + browserElement_SendEvent.js + browserElement_SetInputMethodActive.js + browserElement_SetVisible.js + browserElement_SetVisibleFrames.js + browserElement_SetVisibleFrames2.js + browserElement_Stop.js + browserElement_VisibilityChange.js + file_audio.html + file_browserElement_ActiveStateChange.html + file_browserElement_AudioChannelSeeking.html + file_browserElement_AudioChannel_nested.html + file_browserElement_AudioChannelMutedByDefault.html + file_browserElement_ExecuteScript.html + file_browserElement_NextPaint.html + file_browserElement_NoAudioTrack.html + file_browserElement_SendEvent.html + file_browserElement_SetInputMethodActive.html + file_browserElement_SetVisibleFrames2_Outer.html + file_browserElement_SetVisibleFrames_Inner.html + file_browserElement_SetVisibleFrames_Outer.html + file_bug709759.sjs + file_empty.html + file_post_request.html + file_web_manifest.html + file_web_manifest.json + file_illegal_web_manifest.html + iframe_file_audio.html + +[test_browserElement_inproc_ActiveStateChange.html] +tags = audiochannel +[test_browserElement_inproc_AudioChannelMutedByDefault.html] +tags = audiochannel +skip-if = toolkit == 'android' +[test_browserElement_inproc_AudioChannelSeeking.html] +tags = audiochannel +[test_browserElement_inproc_AudioPlayback.html] +[test_browserElement_inproc_AudioChannel.html] +tags = audiochannel +[test_browserElement_inproc_AudioChannel_nested.html] +tags = audiochannel +[test_browserElement_inproc_BackForward.html] +[test_browserElement_inproc_BadScreenshot.html] +[test_browserElement_inproc_DocumentFirstPaint.html] +[test_browserElement_inproc_DOMRequestError.html] +[test_browserElement_inproc_ExecuteScript.html] +[test_browserElement_inproc_Find.html] +[test_browserElement_inproc_GetContentDimensions.html] +[test_browserElement_inproc_GetScreenshot.html] +[test_browserElement_inproc_GetScreenshotDppx.html] +[test_browserElement_inproc_getWebManifest.html] +[test_browserElement_inproc_NextPaint.html] +[test_browserElement_inproc_NoAudioTrack.html] +tags = audiochannel +[test_browserElement_inproc_PurgeHistory.html] +[test_browserElement_inproc_ReloadPostRequest.html] +disabled = no modal prompt on POST reload for chrome window +[test_browserElement_inproc_SendEvent.html] +# The setInputMethodActive() tests will timed out on Android +[test_browserElement_inproc_SetInputMethodActive.html] +skip-if = true +[test_browserElement_inproc_SetVisible.html] +[test_browserElement_inproc_SetVisibleFrames.html] +[test_browserElement_inproc_SetVisibleFrames2.html] +[test_browserElement_inproc_Stop.html] +[test_browserElement_inproc_VisibilityChange.html] diff --git a/dom/browser-element/mochitest/createNewTest.py b/dom/browser-element/mochitest/createNewTest.py new file mode 100644 index 000000000..309ff9534 --- /dev/null +++ b/dom/browser-element/mochitest/createNewTest.py @@ -0,0 +1,126 @@ +"""A script to generate the browser-element test boilerplate. + +This script requires Python 2.7.""" + +from __future__ import print_function + +import sys +import os +import stat +import argparse +import textwrap +import subprocess + +html_template = textwrap.dedent("""\ + <!DOCTYPE HTML> + <html> + <head> + <title>Test for Bug {bug}</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> + </head> + <body> + <script type="application/javascript;version=1.7" src="browserElement_{test}.js"> + </script> + </body> + </html>""") + +# Note: Curly braces are escaped as "{{". +js_template = textwrap.dedent("""\ + /* Any copyright is dedicated to the public domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + + // Bug {bug} - FILL IN TEST DESCRIPTION + "use strict"; + + SimpleTest.waitForExplicitFinish(); + browserElementTestHelpers.setEnabledPref(true); + browserElementTestHelpers.addPermission(); + + function runTest() {{ + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + + // FILL IN TEST + + document.body.appendChild(iframe); + }} + + addEventListener('testready', runTest); + """) + +def print_fill(s): + print(textwrap.fill(textwrap.dedent(s))) + +def add_to_ini(filename, test, support_file=None): + """Add test to mochitest config {filename}, then open + $EDITOR and let the user move the filenames to their appropriate + places in the file. + + """ + lines_to_write = ['[{0}]'.format(test)] + if support_file: + lines_to_write += ['support-files = {0}'.format(support_file)] + lines_to_write += [''] + with open(filename, 'a') as f: + f.write('\n'.join(lines_to_write)) + + if 'EDITOR' not in os.environ or not os.environ['EDITOR']: + print_fill("""\ + Now open {filename} and move the filenames to their correct places.") + (Define $EDITOR and I'll open your editor for you next time.)""".format(filename=filename)) + return + + # Count the number of lines in the file + with open(filename, 'r') as f: + num_lines = len(f.readlines()) + + try: + subprocess.call([os.environ['EDITOR'], + '+%d' % (num_lines - len(lines_to_write) + 2), + filename]) + except Exception as e: + print_fill("Error opening $EDITOR: {0}.".format(e)) + print() + print_fill("""\ + Please open {filename} and move the filenames at the bottom of the + file to their correct places.""".format(filename=filename)) + +def main(test_name, bug_number): + global html_template, js_template + + def format(str): + return str.format(bug=bug_number, test=test_name) + + def create_file(filename, template): + path = os.path.join(os.path.dirname(sys.argv[0]), format(filename)) + # Create a new file, bailing with an error if the file exists. + fd = os.open(path, os.O_WRONLY | os.O_CREAT | os.O_EXCL) + + try: + # This file has 777 permission when created, for whatever reason. Make it rw-rw-r---. + os.fchmod(fd, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH) + except: + # fchmod doesn't work on Windows. + pass + + with os.fdopen(fd, 'w') as file: + file.write(format(template)) + + create_file('browserElement_{test}.js', js_template) + create_file('test_browserElement_inproc_{test}.html', html_template) + create_file('test_browserElement_oop_{test}.html', html_template) + + add_to_ini('mochitest.ini', + format('test_browserElement_inproc_{test}.html'), + format('browserElement_{test}.js')) + add_to_ini('mochitest-oop.ini', + format('test_browserElement_oop_{test}.html')) + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description="Create a new browser-element testcase.") + parser.add_argument('test_name') + parser.add_argument('bug_number', type=int) + args = parser.parse_args() + main(args.test_name, args.bug_number) diff --git a/dom/browser-element/mochitest/file_audio.html b/dom/browser-element/mochitest/file_audio.html new file mode 100644 index 000000000..0e4a8d7c6 --- /dev/null +++ b/dom/browser-element/mochitest/file_audio.html @@ -0,0 +1,15 @@ +<html> +<body> +<audio src="chrome://mochitests/content/chrome/dom/browser-element/mochitest/audio.ogg" id="audio" /> +<script> +var audio = document.getElementById('audio'); +audio.play(); +audio.onended = function() { + setTimeout(function() { + audio.play(); + }, 0); +} +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_ActiveStateChange.html b/dom/browser-element/mochitest/file_browserElement_ActiveStateChange.html new file mode 100644 index 000000000..5228d67bf --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_ActiveStateChange.html @@ -0,0 +1,25 @@ +<!DOCTYPE HTML> +<html> +<body> +<script type="application/javascript;version=1.7"> +var audio = new Audio(); +audio.src = "audio.ogg"; +audio.loop = true; + +function runCommands() +{ + switch(location.hash) { + case '#play': + audio.play(); + break; + case '#pause': + audio.pause(); + break; + default : + alert("Undefined command!"); + } +} +window.addEventListener('hashchange', runCommands); +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/file_browserElement_AlertInFrame.html b/dom/browser-element/mochitest/file_browserElement_AlertInFrame.html new file mode 100644 index 000000000..8bdac1d25 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_AlertInFrame.html @@ -0,0 +1,6 @@ +<html> +<body> +I'm file_browserElement_AlertInFrame.html. +<iframe src='file_browserElement_AlertInFrame_Inner.html'></iframe> +<body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_AlertInFrame_Inner.html b/dom/browser-element/mochitest/file_browserElement_AlertInFrame_Inner.html new file mode 100644 index 000000000..958413f2d --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_AlertInFrame_Inner.html @@ -0,0 +1,12 @@ +<html> +<body> +I'm file_browserElement_AlertInFrame_Inner.html. + +<script> +addEventListener('load', function() { + alert("Hello"); +}); +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_AudioChannelMutedByDefault.html b/dom/browser-element/mochitest/file_browserElement_AudioChannelMutedByDefault.html new file mode 100644 index 000000000..ea4f3bde1 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_AudioChannelMutedByDefault.html @@ -0,0 +1,65 @@ +<html> +<body> +<script> +var audio = new Audio("audio.ogg"); +var context = new AudioContext(); +var node = context.createMediaElementSource(audio); +var sp = context.createScriptProcessor(2048, 1); +node.connect(sp); +var expectedSamplesCount; +var nonzeroSamplesCount = 0; +var isStarted = false; + +function ok(aVal, aMsg) { + alert((!!aVal ? "OK" : "KO") + ", " + aMsg); +} + +function finish() { + audio.onended = null; + audio.pause(); + alert("DONE"); +} + +function processSamples(e) { + var buf = e.inputBuffer.getChannelData(0); + for (var i = 0; i < buf.length; ++i) { + if (buf[i] != 0) { + if (!isStarted) { + isStarted = true; + ok(true, "Start process audio sample."); + } + nonzeroSamplesCount++; + } + } + + if (nonzeroSamplesCount >= expectedSamplesCount) { + finish(); + } +} + +audio.oncanplaythrough = function() { + var testDuration = audio.duration > 1.0 ? 1.0 : audio.duration * 0.5; + expectedSamplesCount = Math.floor(testDuration * context.sampleRate); + sp.onaudioprocess = processSamples; +}; + +function runCommands() +{ + switch(location.hash) { + case '#play': + ok(true, "Audio starts playing.") + audio.play(); + audio.onended = () => { + audio.onended = null; + ok(false, "Audio shouldn't go ended in this test!") + }; + break; + default : + ok(false, "Undefined command!"); + } +} + +window.addEventListener('hashchange', runCommands); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_AudioChannelSeeking.html b/dom/browser-element/mochitest/file_browserElement_AudioChannelSeeking.html new file mode 100644 index 000000000..293f6cadc --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_AudioChannelSeeking.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML> +<html> +<body> +<script type="application/javascript;version=1.7"> +var audio = new Audio(); +audio.src = "audio.ogg"; +audio.loop = true; + +function assert(aVal, aMessage) { + return (!aVal) ? ok(false, aMessage) : 0; +} + +function ok(aVal, aMsg) { + alert((!!aVal ? "OK" : "KO") + ", " + aMsg); +} + +function info(aMsg) { + alert("INFO" + ", " + aMsg); +} + +function randomSeeking() { + var seekingPosition = Math.random() * audio.duration; + assert(seekingPosition < audio.duration, "Seeking position out of range!") + audio.currentTime = seekingPosition; + audio.onseeked = () => { + audio.onseeked = null; + location.hash = '#idle'; + ok(true, "Seeking complete, position = " + seekingPosition); + }; +} + +function runCommands() +{ + switch(location.hash) { + case '#play': + audio.play(); + audio.onplay = () => { + audio.onplay = null; + info("Start playing, duration = " + audio.duration); + }; + break; + case '#seeking': + randomSeeking(); + break; + case '#pause': + audio.pause(); + audio.onpause = () => { + audio.onpause = null; + ok(true, "Stop playing."); + }; + break; + case '#idle': + break; + default : + ok(false, "Undefined command!"); + } +} + +window.addEventListener('hashchange', runCommands); +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/file_browserElement_AudioChannel_nested.html b/dom/browser-element/mochitest/file_browserElement_AudioChannel_nested.html new file mode 100644 index 000000000..c37a642e2 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_AudioChannel_nested.html @@ -0,0 +1,63 @@ +<html> +<head> +<script type="text/javascript"> + + function ok(a, msg) { + alert((!!a ? "OK" : "KO") + " " + msg); + } + + function is(a, b, msg) { + ok(a === b, msg); + } + + function finish(a, b, msg) { + alert("DONE"); + } + + addEventListener('load', function(e) { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + // set 'remote' to true here will make the the iframe remote in _inproc_ + // test and in-process in _oop_ test. + iframe.setAttribute('remote', 'true'); + iframe.setAttribute('mozapp', 'http://example.org/manifest.webapp'); + + iframe.addEventListener('mozbrowserloadend', function(e) { + ok("mute" in iframe, "iframe.mute exists"); + ok("unmute" in iframe, "iframe.unmute exists"); + ok("getMuted" in iframe, "iframe.getMuted exists"); + ok("getVolume" in iframe, "iframe.getVolume exists"); + ok("setVolume" in iframe, "iframe.setVolume exists"); + + ok("allowedAudioChannels" in iframe, "allowedAudioChannels exist"); + var channels = iframe.allowedAudioChannels; + is(channels.length, 9, "9 audio channel by default"); + + var ac = channels[0]; + + ok(ac instanceof BrowserElementAudioChannel, "Correct class"); + ok("getVolume" in ac, "ac.getVolume exists"); + ok("setVolume" in ac, "ac.setVolume exists"); + ok("getMuted" in ac, "ac.getMuted exists"); + ok("setMuted" in ac, "ac.setMuted exists"); + ok("isActive" in ac, "ac.isActive exists"); + + ac.onactivestatechanged = function() { + ok(true, "activestatechanged event received."); + + ac.getVolume().onsuccess = function(e) { + ok(e.target.result, 1, "Default volume is 1"); + }; + + finish(); + } + }); + + document.body.appendChild(iframe); + iframe.src = 'chrome://mochitests/content/chrome/dom/browser-element/mochitest/file_audio.html'; + }); +</script> +</head> +<body> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_BrowserWindowNamespace.html b/dom/browser-element/mochitest/file_browserElement_BrowserWindowNamespace.html new file mode 100644 index 000000000..7903a63b8 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_BrowserWindowNamespace.html @@ -0,0 +1,9 @@ +<html> +<body> +<script> +addEventListener('load', function() { + window.open("http://example.com/" + location.hash, "foo"); +}); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_CloseFromOpener.html b/dom/browser-element/mochitest/file_browserElement_CloseFromOpener.html new file mode 100644 index 000000000..4a08c2792 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_CloseFromOpener.html @@ -0,0 +1,8 @@ +<html> +<body> +<script> +var win = window.open('file_empty.html'); +win.close(); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_CookiesNotThirdParty.html b/dom/browser-element/mochitest/file_browserElement_CookiesNotThirdParty.html new file mode 100644 index 000000000..62f39d8ff --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_CookiesNotThirdParty.html @@ -0,0 +1,25 @@ +<html> +<body> +file_browserElement_CookiesNotThirdParty.html + +<script type='text/javascript;version=1.7'> +if (location.search != '?step=2') { + // Step 1: Set a cookie. + document.cookie = 'file_browserElement_CookiesNotThirdParty'; + alert('next'); +} +else { + // Step 2: Read the cookie. + if (document.cookie == 'file_browserElement_CookiesNotThirdParty') { + alert('success: got the correct cookie'); + } + else { + alert('failure: got unexpected cookie: "' + document.cookie + '"'); + } + + alert('finish'); +} +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_ExecuteScript.html b/dom/browser-element/mochitest/file_browserElement_ExecuteScript.html new file mode 100644 index 000000000..d2c364aeb --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_ExecuteScript.html @@ -0,0 +1,8 @@ +<html> +<head> + <script> +window.btoa = () => "fake btoa"; + </script> +</head> +<body>foo</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_ForwardName.html b/dom/browser-element/mochitest/file_browserElement_ForwardName.html new file mode 100644 index 000000000..60b41bbc6 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_ForwardName.html @@ -0,0 +1,15 @@ +<html> +<body> +<script> + +if (window.name == 'foo') { + alert("success:window.name == 'foo'"); +} +else { + alert("failure:window.name == '" + window.name + "', expected 'foo'"); +} + +window.open('file_browserElement_ForwardName.html#finish', 'foo'); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_FrameWrongURI.html b/dom/browser-element/mochitest/file_browserElement_FrameWrongURI.html new file mode 100644 index 000000000..1a6cfde0a --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_FrameWrongURI.html @@ -0,0 +1,5 @@ +<script> + function testSucceeded() { alert("success"); } + function callback() { return "<script>opener.testSucceeded()</" + "script>"; } + var w = window.open("javascript:opener.callback();"); +</script> diff --git a/dom/browser-element/mochitest/file_browserElement_LoadEvents.html b/dom/browser-element/mochitest/file_browserElement_LoadEvents.html new file mode 100644 index 000000000..7e0705e9d --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_LoadEvents.html @@ -0,0 +1,14 @@ +<html> +<body style="background-color:green;"> + +<!-- Tests rely on the fact that there's an element in here called 'url' and + that there's visible text on the page. --> + +Aloha! My URL is <span id='url'></span>. + +<script> +document.getElementById('url').innerHTML = window.location; +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_Metachange.sjs b/dom/browser-element/mochitest/file_browserElement_Metachange.sjs new file mode 100644 index 000000000..c63a047f7 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_Metachange.sjs @@ -0,0 +1,7 @@ +function handleRequest(request, response) +{ + var p = request.queryString.split('|'); + response.setHeader('Content-Language', p[0], false); + response.write('<html><head><meta name="application-name" content="sjs"' + + (p.length > 1 ? (' lang="' + p[1] + '"') : '') + '></head><body></body></html>'); +} diff --git a/dom/browser-element/mochitest/file_browserElement_NextPaint.html b/dom/browser-element/mochitest/file_browserElement_NextPaint.html new file mode 100644 index 000000000..d460fc5b9 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_NextPaint.html @@ -0,0 +1,9 @@ +<html> +<body> +<script> +addEventListener("hashchange", function () { + document.body.style.backgroundColor = "red"; +}); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_NoAudioTrack.html b/dom/browser-element/mochitest/file_browserElement_NoAudioTrack.html new file mode 100644 index 000000000..14304e469 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_NoAudioTrack.html @@ -0,0 +1,32 @@ +<!DOCTYPE HTML> +<html> +<body> +<script type="application/javascript;version=1.7"> +var audio = new Audio(); +audio.src = "noaudio.webm"; +audio.preload = "none"; +audio.loop = true; + +function ok(aVal, aMsg) { + alert((!!aVal ? "OK" : "KO") + ", " + aMsg); +} + +function runCommands() +{ + switch(location.hash) { + case '#play': + audio.play(); + ok(true, "Start playing a video without audio track!"); + break; + case '#idle': + ok(!audio.paused, "Video is still playing!"); + break; + default : + ok(false, "Undefined command!"); + } +} + +window.addEventListener('hashchange', runCommands); +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/file_browserElement_Open1.html b/dom/browser-element/mochitest/file_browserElement_Open1.html new file mode 100644 index 000000000..c74415e2e --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_Open1.html @@ -0,0 +1,34 @@ +<html> +<body> +<script> + +// Because this file is inside <iframe mozbrowser>, the alert() calls below +// don't trigger actual dialogs. Instead, the document which contans the +// iframe receives mozbrowsershowmodalprompt events, which the document uses +// to determine test success/failure. + +function is(x, y, reason) { + if (x === y) { + alert("success: " + x + " === " + y + ", " + reason); + } + else { + alert("failure: " + x + " !== " + y + ", " + reason); + } +} + +function ok(bool, reason) { + alert((bool ? "success: " : "failure: ") + reason); +} + +// Send "dialog=1" as a test for bug 783644. It shouldn't have any effect. +var w = window.open("file_browserElement_Open2.html", "name", "dialog=1"); +w.addEventListener("load", function() { + ok(true, "got load"); + is(w.opener, window, 'opener property'); + is(w.location.href, location.href.replace('Open1', 'Open2'), 'correct location'); + is(w.document.getElementById('testElem').innerHTML, 'test', 'elem innerHTML'); + alert("finish"); +}); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_Open2.html b/dom/browser-element/mochitest/file_browserElement_Open2.html new file mode 100644 index 000000000..af9d2b6cd --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_Open2.html @@ -0,0 +1,5 @@ +<html> +<body> +<div id='testElem'>test</div> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_OpenMixedProcess.html b/dom/browser-element/mochitest/file_browserElement_OpenMixedProcess.html new file mode 100644 index 000000000..873a99f1a --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_OpenMixedProcess.html @@ -0,0 +1,22 @@ +<html> +<body> + +<!-- The test relies on the fact that this file is completely empty. --> + +<script> + +function ok(b, msg) +{ + alert((b ? 'pass:' : 'fail:') + msg); +} + +var w = window.open("file_empty.html"); +w.addEventListener('load', function() { + ok(true, 'Got load.'); + ok(w.document.getElementById('url'), 'Found element with id "url"'); + alert('finish'); +}); +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_OpenNamed.html b/dom/browser-element/mochitest/file_browserElement_OpenNamed.html new file mode 100644 index 000000000..7d2a7661c --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_OpenNamed.html @@ -0,0 +1,7 @@ +<html> +<body> +<script> +window.open('file_browserElement_OpenNamed2.html', 'OpenNamed'); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_OpenNamed2.html b/dom/browser-element/mochitest/file_browserElement_OpenNamed2.html new file mode 100644 index 000000000..6bf37bb53 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_OpenNamed2.html @@ -0,0 +1,7 @@ +<html> +<body> +<script> +alert('success: loaded'); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_OpenWindowDifferentOrigin.html b/dom/browser-element/mochitest/file_browserElement_OpenWindowDifferentOrigin.html new file mode 100644 index 000000000..dc08f341c --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_OpenWindowDifferentOrigin.html @@ -0,0 +1,18 @@ +<html> +<body> + +<div id='name'></div> + +<script> +if (location.search == "?1") { + open("http://example.com/tests/dom/browser-element/mochitest/file_browserElement_OpenWindowDifferentOrigin.html?2"); +} +else if (location.search == "?2") { + alert("finish"); +} + +document.getElementById('name').innerHTML = location.search; +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_OpenWindowEmpty.html b/dom/browser-element/mochitest/file_browserElement_OpenWindowEmpty.html new file mode 100644 index 000000000..fefd6f6ca --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_OpenWindowEmpty.html @@ -0,0 +1,7 @@ +<html> +<body> +<script> +window.open(); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_OpenWindowInFrame.html b/dom/browser-element/mochitest/file_browserElement_OpenWindowInFrame.html new file mode 100644 index 000000000..c1c1cecd3 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_OpenWindowInFrame.html @@ -0,0 +1,6 @@ +<html> +<body> +I'm file_browserElement_OpenInFrame.html. +<iframe src='file_browserElement_Open1.html'></iframe> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_OpenWindowRejected.html b/dom/browser-element/mochitest/file_browserElement_OpenWindowRejected.html new file mode 100644 index 000000000..eb6786979 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_OpenWindowRejected.html @@ -0,0 +1,16 @@ +<html> +<body> + +<script> +var w = window.open('does_not_exist.html'); +if (!w) { + alert("success:w is null"); +} +else { + alert("failure:w is not null -- " + w); +} +alert("finish"); +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_PrivateBrowsing.html b/dom/browser-element/mochitest/file_browserElement_PrivateBrowsing.html new file mode 100644 index 000000000..40ff9d8af --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_PrivateBrowsing.html @@ -0,0 +1,15 @@ +<html> +<body> +<script> + +if (location.href.indexOf("clear=true") != -1) { + localStorage.removeItem("foo"); + alert("CLEAR"); +} else { + var initialValue = localStorage.getItem("foo") || "EMPTY"; + localStorage.setItem("foo", "bar"); + alert(initialValue); +} +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_SecurityChange.html b/dom/browser-element/mochitest/file_browserElement_SecurityChange.html new file mode 100644 index 000000000..09c006e7c --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_SecurityChange.html @@ -0,0 +1,21 @@ +<html> +<head> + +<script> +if (location.search === '?broken') { + // Load something non-https. + var s = document.createElement('script'); + s.src = 'http://example.com/dom/browser-element/mochitest/file_empty_script.js'; + document.head.appendChild(s); +} else if (location.search === '?tracking') { + var img = document.createElement('img'); + img.src = 'http://tracking.example.com/tests/toolkit/components/url-classifier/tests/mochitest/raptor.jpg'; + document.body.appendChild(img); +} +</script> +</head> + +<body> +file_browserElement_SecurityChange.html. +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_SendEvent.html b/dom/browser-element/mochitest/file_browserElement_SendEvent.html new file mode 100644 index 000000000..3c510180d --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_SendEvent.html @@ -0,0 +1,15 @@ +<html><body> +<button>send[Mouse|Touch]Event</button> +</body><script> +function changeHash(e) { + document.location.hash = e.type; +}; +window.addEventListener('mousedown', changeHash); +window.addEventListener('mousemove', changeHash); +window.addEventListener('mouseup', changeHash); +window.addEventListener('click', changeHash, true); +window.addEventListener('touchstart', changeHash); +window.addEventListener('touchmove', changeHash); +window.addEventListener('touchend', changeHash); +window.addEventListener('touchcancel', changeHash); +</script></html> diff --git a/dom/browser-element/mochitest/file_browserElement_SetInputMethodActive.html b/dom/browser-element/mochitest/file_browserElement_SetInputMethodActive.html new file mode 100644 index 000000000..5eb17e5f1 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_SetInputMethodActive.html @@ -0,0 +1,2 @@ +<input autofocus value="hello" /> +<p>This is targetted mozbrowser frame.</p> diff --git a/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames2_Outer.html b/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames2_Outer.html new file mode 100644 index 000000000..c4fa25d26 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames2_Outer.html @@ -0,0 +1,25 @@ +<html> +<body> +<script> + +var iframe = document.createElement('iframe'); +iframe.setAttribute("mozbrowser", "true"); + +iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + if (e.detail.message == 'child:ready') { + setTimeout(function() { + iframe.setVisible(false); + iframe.setVisible(true); + setTimeout(function() { + alert('parent:finish'); + }, 0); + }, 0); + } +}); + +document.body.appendChild(iframe); +iframe.src = 'file_browserElement_SetVisibleFrames_Inner.html?child'; + +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames_Inner.html b/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames_Inner.html new file mode 100644 index 000000000..8f9b871d6 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames_Inner.html @@ -0,0 +1,18 @@ +<html> +<body> +<script> + +var name = location.search.substring(1); +addEventListener('load', function() { + setTimeout(function() { + alert(name + ':ready'); + }, 0); +}); + +addEventListener('visibilitychange', function() { + alert(name + ':' + (document.hidden ? 'hidden' : 'visible')); +}); + +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames_Outer.html b/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames_Outer.html new file mode 100644 index 000000000..6abcc6b0c --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_SetVisibleFrames_Outer.html @@ -0,0 +1,45 @@ +<html> +<body> + +<script> + +var numPrompts = 0; +function handlePrompt(e) { + numPrompts++; + + // The first two prompts should be "child1:ready" and "child2:ready". Once + // we get both of these, forward the child's prompt up to our parent. + if (numPrompts == 2) { + // This has to happen here, because setVisibile doesn't exist on the iframe + // until BrowserElementChild.js is loaded in it. (That's pretty broken...) + iframe2.setVisible(false); + } + else if (numPrompts == 3) { + if (e.detail.message != 'child2:hidden') { + alert("parent:fail Didn't get expected 'child2:hidden'."); + } + + alert('parent:ready'); + } + else if (numPrompts == 4 || numPrompts == 5) { + alert(e.detail.message); + } +} + +var iframe1 = document.createElement('iframe'); +iframe1.setAttribute("mozbrowser", "true"); +iframe1.addEventListener('mozbrowsershowmodalprompt', handlePrompt); + +var iframe2 = document.createElement('iframe'); +iframe2.setAttribute("mozbrowser", "true"); +iframe2.addEventListener('mozbrowsershowmodalprompt', handlePrompt); + +iframe1.src = 'file_browserElement_SetVisibleFrames_Inner.html?child1'; +iframe2.src = 'file_browserElement_SetVisibleFrames_Inner.html?child2'; +document.body.appendChild(iframe1); +document.body.appendChild(iframe2); + +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_TargetBlank.html b/dom/browser-element/mochitest/file_browserElement_TargetBlank.html new file mode 100644 index 000000000..860573a3e --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_TargetBlank.html @@ -0,0 +1,18 @@ +<html> +<body> +<a id='link' target='_blank' href="http://example.com">Click me</a> + +<script> +function clickLink() { + // See testcase in bug 666604. + var e = document.createEvent("MouseEvent"); + e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, + false, false, false, false, 0, null); + document.getElementById('link').dispatchEvent(e); +} + +addEventListener('load', function() { setTimeout(clickLink, 0) }); +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_TargetTop.html b/dom/browser-element/mochitest/file_browserElement_TargetTop.html new file mode 100644 index 000000000..aad06361d --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_TargetTop.html @@ -0,0 +1,12 @@ +<html> +<body> +<div id='url'></div> + +<script> +if (location.search == '') { + window.open('file_browserElement_TargetTop.html?2', '_top'); +} +document.getElementById('url').innerHTML = document.location.href; +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_ThemeColor.html b/dom/browser-element/mochitest/file_browserElement_ThemeColor.html new file mode 100644 index 000000000..f8fb9f116 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_ThemeColor.html @@ -0,0 +1,8 @@ +<html> + <head> + <meta name="theme-color" content="pink"> + </head> + + <body> + </body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_Viewmode.html b/dom/browser-element/mochitest/file_browserElement_Viewmode.html new file mode 100644 index 000000000..422279e0a --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_Viewmode.html @@ -0,0 +1,8 @@ +<html> + <head> + <meta name="viewmode" content="projection=stereo"> + </head> + + <body> + </body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_XFrameOptions.sjs b/dom/browser-element/mochitest/file_browserElement_XFrameOptions.sjs new file mode 100644 index 000000000..7e2375680 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_XFrameOptions.sjs @@ -0,0 +1,9 @@ +function handleRequest(request, response) +{ + response.setHeader("X-Frame-Options", request.queryString, false); + response.setHeader("Content-Type", "text/html", false); + + // Tests rely on this page not being entirely blank, because they take + // screenshots to determine whether this page was loaded. + response.write("<html><body>XFrameOptions test<script>alert('finish')</script></body></html>"); +} diff --git a/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.html b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.html new file mode 100644 index 000000000..12a6fd31e --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.html @@ -0,0 +1,43 @@ +<html> +<body> + + <!-- Try to load in a frame a cross-origin page which sends: + "X-Frame-Options: Allow-From http://mochi.test:8888/", + and a cross-origin page which sends + "X-Frame-Options: Allow-From http://example.com/". --> + +<script> + +// Make sure these iframes aren't too tall; they both need to fit inside the +// iframe this page is contained in, without scrolling, in order for the test's +// screenshots to work properly. + +var frame_src = 'http://example.com/tests/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.sjs'; + +var iframe1 = document.createElement('iframe'); +iframe1.height = '300px'; +var iframe2 = document.createElement('iframe'); +iframe2.height = '300px'; +document.body.appendChild(iframe1); + +iframe1.addEventListener('load', function iframe1Load() { + iframe1.removeEventListener('load', iframe1Load); + // This causes our embedder to take a screenshot (and blocks until the + // screenshot is completed). + var iframe2Loaded = false; + iframe2.addEventListener('load', function iframe2Load() { + iframe2.removeEventListener('load', iframe2Load); + iframe2Loaded = true; + alert('finish'); + }); + + document.body.appendChild(iframe2); + iframe2.src = frame_src; +}); + + +iframe1.src = frame_src + '?iframe1'; +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.sjs b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.sjs new file mode 100644 index 000000000..4a5dbaace --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsAllowFrom.sjs @@ -0,0 +1,16 @@ +function handleRequest(request, response) +{ + var content = 'step 1'; + if (request.queryString == "iframe1") { + response.setHeader("X-Frame-Options", "Allow-From http://mochi.test:8888/") + content = 'finish'; + } else { + response.setHeader("X-Frame-Options", "Allow-From http://example.com") + } + + response.setHeader("Content-Type", "text/html", false); + + // Tests rely on this page not being entirely blank, because they take + // screenshots to determine whether this page was loaded. + response.write("<html><body>XFrameOptions test<script>alert('" + content + "')</script></body></html>"); +} diff --git a/dom/browser-element/mochitest/file_browserElement_XFrameOptionsDeny.html b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsDeny.html new file mode 100644 index 000000000..338275aa3 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsDeny.html @@ -0,0 +1,57 @@ +<html> +<body> + +<!-- Try to load in a frame a page which sends "X-Frame-Options: DENY", and a + cross-origin page which sends "X-Frame-Options: SAMEORIGIN". --> + +<script> + +// Make sure these iframes aren't too tall; they both need to fit inside the +// iframe this page is contained in, without scrolling, in order for the test's +// screenshots to work properly. + +var iframe1 = document.createElement('iframe'); +iframe1.height = '300px'; +var iframe2 = document.createElement('iframe'); +iframe2.height = '300px'; +document.body.appendChild(iframe1); +document.body.appendChild(iframe2); + +// This causes our embedder to take a screenshot (and blocks until the +// screenshot is completed). +alert('step 1'); + +// Wait for both iframes to load. + +var iframe1Loaded = false; +iframe1.addEventListener('load', function iframe1Load() { + iframe1.removeEventListener('load', iframe1Load); + iframe1Loaded = true; + waitForBothLoads(); +}); + +var iframe2Loaded = false; +iframe2.addEventListener('load', function iframe2Load() { + iframe2.removeEventListener('load', iframe2Load); + iframe2Loaded = true; + waitForBothLoads(); +}); + +function waitForBothLoads() { + if (iframe1Loaded && iframe2Loaded) { + setTimeout(function() { + // This causes our embedder to take another screenshot. + alert('step 2'); + }, 0); + } +} + +iframe1.src = 'file_browserElement_XFrameOptions.sjs?DENY'; + +// Load iframe2 with the origin of our parent. Since we have a different +// origin and are inside <iframe mozbrowser>, this should not load. +iframe2.src = 'http://mochi.test:8888/tests/dom/browser-element/mochitest/file_browserElement_XFrameOptions.sjs?SAMEORIGIN'; +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_browserElement_XFrameOptionsSameOrigin.html b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsSameOrigin.html new file mode 100644 index 000000000..11e75f141 --- /dev/null +++ b/dom/browser-element/mochitest/file_browserElement_XFrameOptionsSameOrigin.html @@ -0,0 +1,5 @@ +<html> +<body> +<iframe src='file_browserElement_XFrameOptions.sjs?SAMEORIGIN'></iframe> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_bug709759.sjs b/dom/browser-element/mochitest/file_bug709759.sjs new file mode 100644 index 000000000..ce78b188b --- /dev/null +++ b/dom/browser-element/mochitest/file_bug709759.sjs @@ -0,0 +1,5 @@ +function handleRequest(request, response) +{ + response.processAsync(); + response.setHeader("Content-Type", "image/jpeg", false); +}
\ No newline at end of file diff --git a/dom/browser-element/mochitest/file_bug741717.sjs b/dom/browser-element/mochitest/file_bug741717.sjs new file mode 100644 index 000000000..bde9ddfae --- /dev/null +++ b/dom/browser-element/mochitest/file_bug741717.sjs @@ -0,0 +1,27 @@ +function handleRequest(request, response) +{ + function etag(count) { + return '"anetag' + count + '"'; + } + + var count = parseInt(getState('count')); + if (!count) + count = 0; + + // reload(false) will make a request with If-None-Match headers + var ifNoneMatch = request.hasHeader("If-None-Match") ? + request.getHeader("If-None-Match") : ""; + + if (ifNoneMatch === etag(count)) { + response.setStatusLine(request.httpVersion, "304", "Not Modified"); + return; + } + + count++; + setState('count', count + ''); + + response.setHeader('Content-Type', 'text/html', false); + response.setHeader('Cache-Control', 'public, max-age=3600', false); + response.setHeader("ETag", etag(count), false); + response.write('<html><body>' + count + '</body></html>'); +} diff --git a/dom/browser-element/mochitest/file_download_bin.sjs b/dom/browser-element/mochitest/file_download_bin.sjs new file mode 100644 index 000000000..fd394ea0a --- /dev/null +++ b/dom/browser-element/mochitest/file_download_bin.sjs @@ -0,0 +1,4 @@ +function handleRequest(request, response) { + response.setHeader("Content-Type", "application/octet-stream", false); + response.write("BIN"); +}
\ No newline at end of file diff --git a/dom/browser-element/mochitest/file_empty.html b/dom/browser-element/mochitest/file_empty.html new file mode 100644 index 000000000..ed21305b9 --- /dev/null +++ b/dom/browser-element/mochitest/file_empty.html @@ -0,0 +1,14 @@ +<html> +<body> + +<!-- Tests rely on the fact that there's an element in here called 'url' and + that there's visible text on the page. --> + +Aloha! My URL is <span id='url'></span>. + +<script> +document.getElementById('url').innerHTML = window.location; +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/file_empty_script.js b/dom/browser-element/mochitest/file_empty_script.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/dom/browser-element/mochitest/file_empty_script.js diff --git a/dom/browser-element/mochitest/file_focus.html b/dom/browser-element/mochitest/file_focus.html new file mode 100644 index 000000000..0bd3f7aa4 --- /dev/null +++ b/dom/browser-element/mochitest/file_focus.html @@ -0,0 +1,24 @@ +<html> +<body> + +Aloha! My URL is <span id='url'></span>. +<script> +document.getElementById('url').innerHTML = window.location; +</script> + +<script> + // The input element is getting synthesized key events and will prevent + // default on the first ESC keydown event. + + var alreadyBlocked = false; + + addEventListener('keydown', function(e) { + if (e.keyCode == SpecialPowers.Ci.nsIDOMKeyEvent.DOM_VK_ESCAPE && + alreadyBlocked == false) { + alreadyBlocked = true; + e.preventDefault(); + } + }); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_http_401_response.sjs b/dom/browser-element/mochitest/file_http_401_response.sjs new file mode 100644 index 000000000..c40a252c3 --- /dev/null +++ b/dom/browser-element/mochitest/file_http_401_response.sjs @@ -0,0 +1,16 @@ +function handleRequest(request, response) +{ + var auth = ""; + try { + auth = request.getHeader("Authorization"); + } catch(e) {} + + if (auth == "Basic aHR0cHVzZXI6aHR0cHBhc3M=") { + response.setStatusLine("1.1", 200, "OK"); + response.write("<html><head><title>http auth success</title></head><html>"); + } else { + response.setStatusLine("1.1", 401, "Http authentication required"); + response.setHeader("WWW-Authenticate", "Basic realm=\"http_realm\""); + response.write("<html><head><title>http auth failed</title></head><html>"); + } +}
\ No newline at end of file diff --git a/dom/browser-element/mochitest/file_http_407_response.sjs b/dom/browser-element/mochitest/file_http_407_response.sjs new file mode 100644 index 000000000..da2f27620 --- /dev/null +++ b/dom/browser-element/mochitest/file_http_407_response.sjs @@ -0,0 +1,16 @@ +function handleRequest(request, response) +{ + var auth = ""; + try { + auth = request.getHeader("Proxy-Authorization"); + } catch(e) {} + + if (auth == "Basic cHJveHl1c2VyOnByb3h5cGFzcw==") { + response.setStatusLine("1.1", 200, "OK"); + response.write("<html><head><title>http auth success</title></head><html>"); + } else { + response.setStatusLine("1.1", 407, "Proxy Authentication Required"); + response.setHeader("Proxy-Authenticate", "Basic realm=\"http_realm\""); + response.write("<html><head><title>http auth failed</title></head><html>"); + } +} diff --git a/dom/browser-element/mochitest/file_illegal_web_manifest.html b/dom/browser-element/mochitest/file_illegal_web_manifest.html new file mode 100644 index 000000000..d9075b3fc --- /dev/null +++ b/dom/browser-element/mochitest/file_illegal_web_manifest.html @@ -0,0 +1,7 @@ +<!doctype html> +<meta charset=utf-8> +<head> +<!-- FIXME: we should keep file:// here ... --> +<link rel="manifest" href="sshfs://this_is_not_allowed!"> +</head> +<h1>Support Page for Web Manifest Tests</h1> diff --git a/dom/browser-element/mochitest/file_post_request.html b/dom/browser-element/mochitest/file_post_request.html new file mode 100644 index 000000000..773193067 --- /dev/null +++ b/dom/browser-element/mochitest/file_post_request.html @@ -0,0 +1,15 @@ +<html> +<head> + <script> + addEventListener('load', function() { + document.getElementsByTagName('form')[0].submit(); + }); + </script> +</head> +<body> + <form action="file_empty.html" method="POST"> + <input type="text" name="postvalue" value="I am a test string!!" /> + <input type="submit" /> + </form> +</body> +</html> diff --git a/dom/browser-element/mochitest/file_web_manifest.html b/dom/browser-element/mochitest/file_web_manifest.html new file mode 100644 index 000000000..783da0f47 --- /dev/null +++ b/dom/browser-element/mochitest/file_web_manifest.html @@ -0,0 +1,6 @@ +<!doctype html> +<meta charset=utf-8> +<head> +<link rel="manifest" href="file_web_manifest.json"> +</head> +<h1>Support Page for Web Manifest Tests</h1> diff --git a/dom/browser-element/mochitest/file_web_manifest.json b/dom/browser-element/mochitest/file_web_manifest.json new file mode 100644 index 000000000..57d0c3d42 --- /dev/null +++ b/dom/browser-element/mochitest/file_web_manifest.json @@ -0,0 +1 @@ +{"name": "pass"} diff --git a/dom/browser-element/mochitest/file_wyciwyg.html b/dom/browser-element/mochitest/file_wyciwyg.html new file mode 100644 index 000000000..f53216144 --- /dev/null +++ b/dom/browser-element/mochitest/file_wyciwyg.html @@ -0,0 +1,14 @@ +<html> +<head> +<title>test</title> +<script type="text/javascript"> +addEventListener('load', function() { + window.setTimeout(function() { + document.write("test"); + }, 0); +}); +</script> +</head> +<body> +</body> +</html> diff --git a/dom/browser-element/mochitest/iframe_file_audio.html b/dom/browser-element/mochitest/iframe_file_audio.html new file mode 100644 index 000000000..605ce2870 --- /dev/null +++ b/dom/browser-element/mochitest/iframe_file_audio.html @@ -0,0 +1,5 @@ +<html> +<body> +<iframe src="file_audio.html"></iframe> +</body> +</html> diff --git a/dom/browser-element/mochitest/mochitest-oop.ini b/dom/browser-element/mochitest/mochitest-oop.ini new file mode 100644 index 000000000..70d38c532 --- /dev/null +++ b/dom/browser-element/mochitest/mochitest-oop.ini @@ -0,0 +1,135 @@ +[DEFAULT] +# Both the "inproc" and "oop" versions of OpenMixedProcess open remote frames, +# so we don't run that test on platforms which don't support OOP tests. +skip-if = os == "android" || e10s +support-files = + browserElement_OpenMixedProcess.js + file_browserElement_ExecuteScript.html + file_browserElement_OpenMixedProcess.html + browserElement_ExecuteScript.js + browserElement_Find.js + browserElement_OpenTab.js + +[test_browserElement_oop_AudioChannelSeeking.html] +tags = audiochannel +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_Viewmode.html] +[test_browserElement_oop_ThemeColor.html] +[test_browserElement_inproc_ErrorSecurity.html] +[test_browserElement_inproc_OpenMixedProcess.html] +disabled = disabled for bug 1266035 +[test_browserElement_oop_Alert.html] +[test_browserElement_oop_AlertInFrame.html] +[test_browserElement_oop_AudioChannelMutedByDefault.html] +tags = audiochannel +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_Auth.html] +[test_browserElement_oop_BackForward.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_BadScreenshot.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_BrowserWindowResize.html] +[test_browserElement_oop_Close.html] +[test_browserElement_oop_CookiesNotThirdParty.html] +[test_browserElement_oop_CopyPaste.html] +subsuite = clipboard +[test_browserElement_oop_DOMRequestError.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_DataURI.html] +[test_browserElement_oop_DocumentFirstPaint.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_Download.html] +disabled = bug 1022281 +[test_browserElement_oop_ErrorSecurity.html] +[test_browserElement_oop_ExecuteScript.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_Find.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_FirstPaint.html] +[test_browserElement_oop_ForwardName.html] +[test_browserElement_oop_FrameWrongURI.html] +[test_browserElement_oop_GetScreenshot.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_GetScreenshotDppx.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_Iconchange.html] +[test_browserElement_oop_LoadEvents.html] +[test_browserElement_oop_Manifestchange.html] +[test_browserElement_oop_Metachange.html] +[test_browserElement_oop_NoAudioTrack.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_AudioPlayback.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_OpenMixedProcess.html] +disabled = disabled for bug 1266035 +[test_browserElement_oop_OpenNamed.html] +[test_browserElement_oop_OpenWindow.html] +[test_browserElement_oop_OpenWindowDifferentOrigin.html] +[test_browserElement_oop_OpenWindowInFrame.html] +[test_browserElement_oop_OpenWindowRejected.html] +[test_browserElement_oop_Opensearch.html] +[test_browserElement_oop_OpenTab.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_PrivateBrowsing.html] +[test_browserElement_oop_PromptCheck.html] +[test_browserElement_oop_PromptConfirm.html] +[test_browserElement_oop_Proxy.html] +[test_browserElement_oop_PurgeHistory.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_Reload.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_ReloadPostRequest.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_RemoveBrowserElement.html] +[test_browserElement_oop_ScrollEvent.html] +[test_browserElement_oop_SecurityChange.html] +skip-if = toolkit == 'android' #TIMED_OUT, bug 766586 +[test_browserElement_oop_SendEvent.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_SetInputMethodActive.html] +# skip-if = (os == "android") +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_SetVisible.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_SetVisibleFrames.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_SetVisibleFrames2.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_Stop.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_TargetBlank.html] +[test_browserElement_oop_TargetTop.html] +[test_browserElement_oop_Titlechange.html] +[test_browserElement_oop_TopBarrier.html] +[test_browserElement_oop_VisibilityChange.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_XFrameOptions.html] +[test_browserElement_oop_XFrameOptionsAllowFrom.html] +disabled = Disabling some OOP tests for WebIDL scope changes +# bug 1189592 +skip-if = asan +[test_browserElement_oop_XFrameOptionsDeny.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_XFrameOptionsSameOrigin.html] +# Disabled until bug 930449 makes it stop timing out +[test_browserElement_oop_ContextmenuEvents.html] +disabled = bug 930449 +# Disabled until bug 924771 makes them stop timing out +[test_browserElement_oop_CloseFromOpener.html] +disabled = bug 924771 +[test_browserElement_oop_ExposableURI.html] +disabled = bug 924771 +[test_browserElement_oop_GetContentDimensions.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_AudioChannel.html] +tags = audiochannel +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_AudioChannel_nested.html] +tags = audiochannel +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_getWebManifest.html] +disabled = Disabling some OOP tests for WebIDL scope changes +[test_browserElement_oop_OpenWindowEmpty.html] +[test_browserElement_oop_ActiveStateChange.html] +tags = audiochannel +disabled = Disabling some OOP tests for WebIDL scope changes diff --git a/dom/browser-element/mochitest/mochitest.ini b/dom/browser-element/mochitest/mochitest.ini new file mode 100644 index 000000000..e1799f93f --- /dev/null +++ b/dom/browser-element/mochitest/mochitest.ini @@ -0,0 +1,159 @@ +[DEFAULT] +skip-if = e10s +support-files = + audio.ogg + ../../../dom/media/test/short-video.ogv + async.js + browserElementTestHelpers.js + browserElement_Alert.js + browserElement_AlertInFrame.js + browserElement_Auth.js + browserElement_Viewmode.js + browserElement_ThemeColor.js + browserElement_BrowserWindowNamespace.js + browserElement_BrowserWindowResize.js + browserElement_Close.js + browserElement_CloseFromOpener.js + browserElement_ContextmenuEvents.js + browserElement_CookiesNotThirdParty.js + browserElement_CopyPaste.js + browserElement_DataURI.js + browserElement_Download.js + browserElement_ErrorSecurity.js + browserElement_ExposableURI.js + browserElement_FirstPaint.js + browserElement_ForwardName.js + browserElement_FrameWrongURI.js + browserElement_Iconchange.js + browserElement_LoadEvents.js + browserElement_Manifestchange.js + browserElement_Metachange.js + browserElement_NextPaint.js + browserElement_OpenNamed.js + browserElement_OpenTab.js + browserElement_OpenWindow.js + browserElement_OpenWindowDifferentOrigin.js + browserElement_OpenWindowEmpty.js + browserElement_OpenWindowInFrame.js + browserElement_OpenWindowRejected.js + browserElement_Opensearch.js + browserElement_PrivateBrowsing.js + browserElement_PromptCheck.js + browserElement_PromptConfirm.js + browserElement_Proxy.js + browserElement_Reload.js + browserElement_RemoveBrowserElement.js + browserElement_ScrollEvent.js + browserElement_SecurityChange.js + browserElement_TargetBlank.js + browserElement_TargetTop.js + browserElement_Titlechange.js + browserElement_TopBarrier.js + browserElement_XFrameOptions.js + browserElement_XFrameOptionsAllowFrom.js + browserElement_XFrameOptionsDeny.js + browserElement_XFrameOptionsSameOrigin.js + file_browserElement_AlertInFrame.html + file_browserElement_AlertInFrame_Inner.html + file_browserElement_Viewmode.html + file_browserElement_ThemeColor.html + file_browserElement_BrowserWindowNamespace.html + file_browserElement_CloseFromOpener.html + file_browserElement_CookiesNotThirdParty.html + file_browserElement_ForwardName.html + file_browserElement_FrameWrongURI.html + file_browserElement_LoadEvents.html + file_browserElement_Metachange.sjs + file_browserElement_NextPaint.html + file_browserElement_Open1.html + file_browserElement_Open2.html + file_browserElement_OpenNamed.html + file_browserElement_OpenNamed2.html + file_browserElement_OpenWindowDifferentOrigin.html + file_browserElement_OpenWindowEmpty.html + file_browserElement_OpenWindowInFrame.html + file_browserElement_OpenWindowRejected.html + file_browserElement_PrivateBrowsing.html + file_browserElement_SecurityChange.html + file_browserElement_TargetBlank.html + file_browserElement_TargetTop.html + file_browserElement_XFrameOptions.sjs + file_browserElement_XFrameOptionsAllowFrom.html + file_browserElement_XFrameOptionsAllowFrom.sjs + file_browserElement_XFrameOptionsDeny.html + file_browserElement_XFrameOptionsSameOrigin.html + file_bug741717.sjs + file_download_bin.sjs + file_empty.html + file_empty_script.js + file_focus.html + file_http_401_response.sjs + file_http_407_response.sjs + file_wyciwyg.html + file_audio.html + iframe_file_audio.html + file_web_manifest.html + file_web_manifest.json + file_illegal_web_manifest.html + noaudio.webm + +# Note: browserElementTestHelpers.js looks at the test's filename to determine +# whether the test should be OOP. "_oop_" signals OOP, "_inproc_" signals in +# process. Default is OOP. +[test_browserElement_NoAttr.html] +[test_browserElement_NoPref.html] +[test_browserElement_NoPermission.html] +[test_browserElement_inproc_Alert.html] +[test_browserElement_inproc_Viewmode.html] +[test_browserElement_inproc_ThemeColor.html] +[test_browserElement_inproc_AlertInFrame.html] +[test_browserElement_inproc_Auth.html] +[test_browserElement_inproc_BrowserWindowNamespace.html] +[test_browserElement_inproc_BrowserWindowResize.html] +[test_browserElement_inproc_Close.html] +[test_browserElement_inproc_CloseFromOpener.html] +[test_browserElement_inproc_ContextmenuEvents.html] +[test_browserElement_inproc_CookiesNotThirdParty.html] +[test_browserElement_inproc_CopyPaste.html] +subsuite = clipboard +skip-if = (os == "android") # Disabled on Android, see bug 1230421 +[test_browserElement_inproc_DataURI.html] +[test_browserElement_inproc_Download.html] +disabled = bug 1022281 +[test_browserElement_inproc_ExposableURI.html] +[test_browserElement_inproc_FirstPaint.html] +[test_browserElement_inproc_ForwardName.html] +[test_browserElement_inproc_FrameWrongURI.html] +[test_browserElement_inproc_Iconchange.html] +[test_browserElement_inproc_LoadEvents.html] +[test_browserElement_inproc_Manifestchange.html] +[test_browserElement_inproc_Metachange.html] +[test_browserElement_inproc_OpenNamed.html] +[test_browserElement_inproc_OpenTab.html] +disabled = won't work as Firefox desktop will intercept ctrl-click +[test_browserElement_inproc_OpenWindow.html] +[test_browserElement_inproc_OpenWindowDifferentOrigin.html] +[test_browserElement_inproc_OpenWindowInFrame.html] +[test_browserElement_inproc_OpenWindowRejected.html] +[test_browserElement_inproc_Opensearch.html] +[test_browserElement_inproc_PrivateBrowsing.html] +[test_browserElement_inproc_PromptCheck.html] +[test_browserElement_inproc_PromptConfirm.html] +[test_browserElement_inproc_Proxy.html] +[test_browserElement_inproc_RemoveBrowserElement.html] +[test_browserElement_inproc_ScrollEvent.html] +[test_browserElement_inproc_SecurityChange.html] +[test_browserElement_inproc_TargetBlank.html] +[test_browserElement_inproc_TargetTop.html] +[test_browserElement_inproc_Titlechange.html] +[test_browserElement_inproc_TopBarrier.html] +[test_browserElement_inproc_XFrameOptions.html] +[test_browserElement_inproc_XFrameOptionsAllowFrom.html] +[test_browserElement_inproc_XFrameOptionsDeny.html] +[test_browserElement_inproc_XFrameOptionsSameOrigin.html] +[test_browserElement_oop_NextPaint.html] +# Disabled due to https://bugzilla.mozilla.org/show_bug.cgi?id=774100 +disabled = temp disabling some OOP tests for WebIDL scope changes +[test_browserElement_inproc_Reload.html] +disabled = bug 774100 +[test_browserElement_inproc_OpenWindowEmpty.html] diff --git a/dom/browser-element/mochitest/noaudio.webm b/dom/browser-element/mochitest/noaudio.webm Binary files differnew file mode 100644 index 000000000..9207017fb --- /dev/null +++ b/dom/browser-element/mochitest/noaudio.webm diff --git a/dom/browser-element/mochitest/priority/chrome.ini b/dom/browser-element/mochitest/priority/chrome.ini new file mode 100644 index 000000000..e1852f6ff --- /dev/null +++ b/dom/browser-element/mochitest/priority/chrome.ini @@ -0,0 +1,19 @@ +[DEFAULT] +# Good luck running these tests on anything but desktop Linux. +run-if = os == 'linux' && buildapp == 'browser' && !e10s +support-files = + file_Audio.html + file_MultipleFrames.html + file_NestedFramesOuter.html + file_WebGLContextLost.html + silence.ogg + !/dom/browser-element/mochitest/browserElementTestHelpers.js + !/dom/browser-element/mochitest/file_empty.html + +[test_Activity.html] +[test_Audio.html] +[test_Background.html] +[test_Keyboard.html] +[test_MultipleFrames.html] +[test_NestedFrames.html] +[test_Visibility.html] diff --git a/dom/browser-element/mochitest/priority/file_Audio.html b/dom/browser-element/mochitest/priority/file_Audio.html new file mode 100644 index 000000000..97f4dc64d --- /dev/null +++ b/dom/browser-element/mochitest/priority/file_Audio.html @@ -0,0 +1,19 @@ +<html> +<body> + +<script> +addEventListener('load', function() { + setTimeout(function() { + var a = document.getElementById('audio'); + a.onplay = function() { + alert('onplay'); + }; + a.play(); + }, 0); +}); +</script> + +<audio id='audio' loop src='silence.ogg'> + +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/file_HighPriority.html b/dom/browser-element/mochitest/priority/file_HighPriority.html new file mode 100644 index 000000000..dc7197bba --- /dev/null +++ b/dom/browser-element/mochitest/priority/file_HighPriority.html @@ -0,0 +1,20 @@ +<!DOCTYPE HTML> +<html> +<body> + +<script> +var lock = navigator.requestWakeLock('high-priority'); +alert('step0'); + +lock.unlock(); +alert('step1'); + +lock = navigator.requestWakeLock('cpu'); +alert('step2'); + +lock.unlock(); +alert('step3'); +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/file_MultipleFrames.html b/dom/browser-element/mochitest/priority/file_MultipleFrames.html new file mode 100644 index 000000000..b3b56f560 --- /dev/null +++ b/dom/browser-element/mochitest/priority/file_MultipleFrames.html @@ -0,0 +1,14 @@ +<html> +<body> +<p>file_MultipleFrames.html</p> + +<script> +addEventListener('load', function() { + setTimeout(function() { + window.open('../file_empty.html'); + }, 0); +}); +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/file_NestedFramesOuter.html b/dom/browser-element/mochitest/priority/file_NestedFramesOuter.html new file mode 100644 index 000000000..e4378935f --- /dev/null +++ b/dom/browser-element/mochitest/priority/file_NestedFramesOuter.html @@ -0,0 +1,20 @@ +<html> +<body> +<p>file_NestedFramesOuter.html</p> +<script> + +addEventListener('load', function() { + setTimeout(createIframe, 0); +}); + +function createIframe() +{ + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', true); + iframe.src = location.hash.substr(1); + document.body.appendChild(iframe); +} + +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/file_WebGLContextLost.html b/dom/browser-element/mochitest/priority/file_WebGLContextLost.html new file mode 100644 index 000000000..bd5c84f11 --- /dev/null +++ b/dom/browser-element/mochitest/priority/file_WebGLContextLost.html @@ -0,0 +1,22 @@ +<html> +<body> +file_WebGLContextLost.html +<canvas id='canvas'></canvas> + +<script> +function runTest() +{ + var canvas = document.getElementById('canvas'); + canvas.addEventListener('webglcontextlost', function() { + alert('webglcontextlost'); + }); + + var context = canvas.getContext('webgl') || canvas.getContext('experimental-webgl'); + context.viewport(0, 0, 10, 10); + alert('ready'); +} + +addEventListener('load', function() { setTimeout(runTest, 0) }); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/mochitest.ini b/dom/browser-element/mochitest/priority/mochitest.ini new file mode 100644 index 000000000..8118aedd7 --- /dev/null +++ b/dom/browser-element/mochitest/priority/mochitest.ini @@ -0,0 +1,19 @@ +[DEFAULT] +# Good luck running these tests on anything but desktop Linux. +run-if = os == 'linux' && buildapp == 'browser' && !e10s +support-files = + file_HighPriority.html + silence.ogg + !/dom/browser-element/mochitest/browserElementTestHelpers.js + !/dom/browser-element/mochitest/file_empty.html + +# Note: ../browserElementTestHelpers.js makes all tests in this directory OOP, +# because testing the process-priority manager without OOP frames does not make +# much sense. + +[test_Simple.html] +[test_HighPriority.html] +[test_Preallocated.html] +disabled = bug 968604, bug 987164 +[test_WebGLContextLost.html] +disabled = bug 865844 diff --git a/dom/browser-element/mochitest/priority/silence.ogg b/dom/browser-element/mochitest/priority/silence.ogg Binary files differnew file mode 100644 index 000000000..6e0b352a3 --- /dev/null +++ b/dom/browser-element/mochitest/priority/silence.ogg diff --git a/dom/browser-element/mochitest/priority/test_Activity.html b/dom/browser-element/mochitest/priority/test_Activity.html new file mode 100644 index 000000000..ae4049d96 --- /dev/null +++ b/dom/browser-element/mochitest/priority/test_Activity.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML> +<html> +<!-- +Test that calling setVisible("false") on an iframe that has an open activity +causes its priority to change. +--> +<head> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="../browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.enableProcessPriorityManager(); + +function runTest() { + var os = SpecialPowers.Cc["@mozilla.org/observer-service;1"] + .getService(SpecialPowers.Ci.nsIObserverService); + var iframe = document.createElement("iframe"); + iframe.setAttribute("mozbrowser", true); + + iframe.src = browserElementTestHelpers.emptyPage1; + + var childID = null; + Promise.all([ + expectOnlyOneProcessCreated("FOREGROUND").then(function(chid) { + childID = chid; + }), + expectMozbrowserEvent(iframe, "loadend") + ]).then(function() { + var p = expectPriorityChange(childID, "BACKGROUND_PERCEIVABLE"); + + // We simulate opening an activity + os.notifyObservers(null, "activity-opened", childID); + + // We wait until mozbrowserloadend before calling setVisible, because + // setVisible isn't available until mozbrowser has loaded. In practice, that + // means we can call setVisible once we've gotten /any/ mozbrowser event. + iframe.setVisible(false); + return p; + }).then(function() { + var p = expectPriorityChange(childID, "BACKGROUND"); + + // Now we simulate closing an activity + os.notifyObservers(null, "activity-closed", childID); + + return p; + }).then(SimpleTest.finish); + + document.body.appendChild(iframe); +} + +addEventListener("testready", runTest); + +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/test_Audio.html b/dom/browser-element/mochitest/priority/test_Audio.html new file mode 100644 index 000000000..d39b1c9f3 --- /dev/null +++ b/dom/browser-element/mochitest/priority/test_Audio.html @@ -0,0 +1,53 @@ +<!DOCTYPE HTML> +<html> +<!-- +Test that frames playing audio get BACKGROUND_PERCEIVABLE priority. +--> +<head> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="../browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.enableProcessPriorityManager(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', true); + iframe.src = 'file_Audio.html'; + + var childID = null; + Promise.all([ + expectOnlyOneProcessCreated("FOREGROUND").then(function(chid) { + childID = chid; + }), + expectMozbrowserEvent(iframe, 'loadend'), + expectMozbrowserEvent(iframe, 'showmodalprompt').then(function(e) { + is(e.detail.message, 'onplay', 'showmodalprompt message'); + }) + ]).then(function() { + // Send the child process into the background. Because it's playing audio, + // it should get priority BACKGROUND_PERCEIVABLE, not vanilla BACKGROUND. + var p = expectPriorityChange(childID, 'BACKGROUND_PERCEIVABLE'); + iframe.setVisible(false); + return p; + }).then(function() { + var p = expectPriorityChange(childID, 'FOREGROUND'); + iframe.setVisible(true); + return p; + }).then(SimpleTest.finish); + + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); + +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/test_Background.html b/dom/browser-element/mochitest/priority/test_Background.html new file mode 100644 index 000000000..59eb16863 --- /dev/null +++ b/dom/browser-element/mochitest/priority/test_Background.html @@ -0,0 +1,53 @@ +<!DOCTYPE HTML> +<html> +<!-- +Test that calling setVisible('false') on an iframe causes its visibility to +change. +--> +<head> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="../browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.enableProcessPriorityManager(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', true); + + iframe.src = browserElementTestHelpers.emptyPage1; + + var childID = null; + Promise.all([ + expectOnlyOneProcessCreated('FOREGROUND').then(function(chid) { + childID = chid; + }), + expectMozbrowserEvent(iframe, 'loadend') + ]).then(function() { + var p = expectPriorityChange(childID, 'BACKGROUND'); + + // We wait until mozbrowserloadend before calling setVisible, because + // setVisible isn't available until mozbrowser has loaded. In practice, that + // means we can call setVisible once we've gotten /any/ mozbrowser event. + iframe.setVisible(false); + return p; + }).then(function() { + var p = expectPriorityChange(childID, 'FOREGROUND'); + iframe.setVisible(true); + }).then(SimpleTest.finish); + + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); + +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/test_HighPriority.html b/dom/browser-element/mochitest/priority/test_HighPriority.html new file mode 100644 index 000000000..d3396d65b --- /dev/null +++ b/dom/browser-element/mochitest/priority/test_HighPriority.html @@ -0,0 +1,133 @@ +<!DOCTYPE HTML> +<html> +<!-- +Test that frames with mozapptype=critical which hold the "high-priority" or +"cpu" wake locks get elevated process priority. +--> +<head> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="../browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); +browserElementTestHelpers.enableProcessPriorityManager(); + +function runTest() { + // To test bug 870480, run this test while holding the CPU and high-priority + // wake locks. Without the fix for bug 870480, we won't set the priority of + // the child process if the main process holds these wake locks and the test + // will hang. + navigator.requestWakeLock('cpu'); + navigator.requestWakeLock('high-priority'); + + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', true); + iframe.setAttribute('mozapptype', 'critical'); + iframe.src = 'file_HighPriority.html'; + + // We expect the following to happen: + // + // - Process is created. + // - Its priority is set to FOREGROUND (when the process starts). + // - wait_alert('step0', FOREGROUND_HIGH) + // - wait_alert('step1', FOREGROUND) + // - wait_alert('step2', FOREGROUND_HIGH) + // + // Where wait_alert(M, P) means that we expect the subprocess to + // * do alert(M) and + // * be set to priority P + // in some order. If the alert occurs before the priority change, we block + // the alert until we observe the priority change. So the subprocess only + // has to do + // + // // set priority to FOREGROUND_HIGH + // alert('step0'); + // // set priority to FOREGROUND + // alert('step1'); + // + // etc. + + var childID = null; + var alertTimes = []; + + // Return a promise that's resolved once the child process calls alert() and + // we get a priority change, in some order. + // + // We check that the text of the alert is |"step" + index|. + // + // If gracePeriod is given, we check that the priority change occurred at + // least gracePeriod ms since the alert from the previous step (with a fudge + // factor to account for inaccurate timers). + function expectAlertAndPriorityChange(index, priority, /* optional */ gracePeriod) { + function checkAlertInfo(e) { + is(e.detail.message, 'step' + index, 'alert() number ' + index); + alertTimes.push(new Date()); + + // Block the alert; we'll unblock it by calling e.detail.unblock() later. + e.preventDefault(); + return Promise.resolve(e.detail.unblock); + } + + function checkGracePeriod() { + if (gracePeriod) { + var msSinceLastAlert = (new Date()) - alertTimes[index - 1]; + + // 50ms fudge factor. This test is set up so that, if nsITimers are + // accurate, we don't need any fudge factor. Unfortunately our timers + // are not accurate! There's little we can do here except fudge. + // Thankfully all we're trying to test is that we get /some/ delay; the + // exact amount of delay isn't so important. + ok(msSinceLastAlert + 50 >= gracePeriod, + msSinceLastAlert + "ms since last alert >= (" + gracePeriod + " - 50ms)"); + } + } + + return Promise.all([ + new Promise(function(resolve, reject) { + iframe.addEventListener('mozbrowsershowmodalprompt', function check(e) { + iframe.removeEventListener('mozbrowsershowmodalprompt', check); + resolve(checkAlertInfo(e)); + }); + }), + expectPriorityChange(childID, priority).then(checkGracePeriod) + ]).then(function(results) { + // checkAlertInfo returns the function to call to unblock the alert. + // It comes to us as the first element of the results array. + results[0](); + }); + } + + expectProcessCreated('FOREGROUND').then(function(chid) { + childID = chid; + }).then(function() { + return expectAlertAndPriorityChange(0, 'FOREGROUND_HIGH'); + }).then(function() { + return expectAlertAndPriorityChange(1, 'FOREGROUND', priorityChangeGracePeriod); + }).then(function() { + return expectAlertAndPriorityChange(2, 'FOREGROUND_HIGH'); + }).then(function() { + return expectAlertAndPriorityChange(3, 'FOREGROUND', priorityChangeGracePeriod); + }).then(SimpleTest.finish); + + document.body.appendChild(iframe); +} + +const priorityChangeGracePeriod = 100; +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv( + {set: [['dom.ipc.processPriorityManager.backgroundGracePeriodMS', + priorityChangeGracePeriod], + ['dom.wakelock.enabled', true]]}, + runTest); +}); + +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/test_Keyboard.html b/dom/browser-element/mochitest/priority/test_Keyboard.html new file mode 100644 index 000000000..a36f954ba --- /dev/null +++ b/dom/browser-element/mochitest/priority/test_Keyboard.html @@ -0,0 +1,54 @@ +<!DOCTYPE HTML> +<html> +<!-- +Test that frames with mozapptype=inputmethod gets the keyboard-specific +priority level when in the foreground. +--> +<head> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="../browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.enableProcessPriorityManager(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', true); + iframe.setAttribute('mozapptype', 'inputmethod'); + iframe.src = browserElementTestHelpers.emptyPage1; + + var childID = null; + Promise.all([ + expectOnlyOneProcessCreated('FOREGROUND_KEYBOARD').then(function(chid) { + childID = chid; + }), + expectMozbrowserEvent(iframe, 'loadend') + ]).then(function() { + var p = expectPriorityChange(childID, 'BACKGROUND'); + + /* We wait until mozbrowserloadend before calling setVisible, because + * setVisible isn't available until mozbrowser has loaded. In practice, + * that means we can call setVisible once we've gotten /any/ mozbrowser + * event. */ + iframe.setVisible(false); + return p; + }).then(function() { + var p = expectPriorityChange(childID, 'FOREGROUND_KEYBOARD'); + iframe.setVisible(true); + }).then(SimpleTest.finish); + + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); + +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/test_MultipleFrames.html b/dom/browser-element/mochitest/priority/test_MultipleFrames.html new file mode 100644 index 000000000..57d9563e7 --- /dev/null +++ b/dom/browser-element/mochitest/priority/test_MultipleFrames.html @@ -0,0 +1,58 @@ +<!DOCTYPE HTML> +<html> +<!-- +Test that when we remove one of a process's frames from the DOM, the process's +priority is recomputed. +--> +<head> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="../browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.enableProcessPriorityManager(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', true); + iframe.src = 'file_MultipleFrames.html'; + + var childID = null; + var iframe2; + Promise.all([ + expectProcessCreated('FOREGROUND').then(function(chid) { + childID = chid; + }), + new Promise(function(resolve, reject) { + iframe.addEventListener('mozbrowseropenwindow', function(e) { + iframe2 = e.detail.frameElement; + var p = expectMozbrowserEvent(iframe2, 'loadend'); + document.body.appendChild(iframe2); + resolve(p); + }); + }) + ]).then(function() { + // At this point, the child process has been set to FOREGROUND, and the popup + // opened by file_MultipleFrames has finished loading. + // + // Now setVisible(false) the popup frame and remove the popup frame from the + // DOM. This should cause the process to take on BACKGROUND priority. + var p = expectPriorityChange(childID, 'BACKGROUND'); + iframe.setVisible(false); + document.body.removeChild(iframe2); + return p; + }).then(SimpleTest.finish); + + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/test_NestedFrames.html b/dom/browser-element/mochitest/priority/test_NestedFrames.html new file mode 100644 index 000000000..e5381bcc5 --- /dev/null +++ b/dom/browser-element/mochitest/priority/test_NestedFrames.html @@ -0,0 +1,62 @@ +<!DOCTYPE HTML> +<html> +<!-- +Test changing the visibility of an <iframe mozbrowser> changes the visibility +(and thus the priority) of any <iframe mozbrowser>s it contains. +--> +<head> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="../browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.enableProcessPriorityManager(); + +function runTest() { + // Set up the following hierarchy of frames: + // + // <iframe mozbrowser remote=false src='file_NestedFramesOuter.html'> + // <iframe mozbrowser remote=true src='file_empty.html'> + // + // When we change the visibility of the outer iframe, it should change the + // priority of the inner one. + + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', true); + iframe.setAttribute('remote', false); + iframe.src = 'file_NestedFramesOuter.html#' + browserElementTestHelpers.emptyPage1; + + // Note that this is the process corresponding to the /inner/ iframe. The + // outer iframe runs in-process (because it has remote=false). + var childID = null; + Promise.all( + [expectOnlyOneProcessCreated('FOREGROUND').then(function(child) { + childID = child; + }), + expectMozbrowserEvent(iframe, 'loadend')] + ).then(function() { + // Send the outer iframe into the background. This should change the + // priority of the inner frame's process to BACKGROUND. + var p = expectPriorityChange(childID, 'BACKGROUND'); + iframe.setVisible(false); + return p; + }).then(function() { + var p = expectPriorityChange(childID, 'FOREGROUND'); + iframe.setVisible(true); + return p; + }).then(SimpleTest.finish); + + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); + +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/test_Preallocated.html b/dom/browser-element/mochitest/priority/test_Preallocated.html new file mode 100644 index 000000000..b2cb0335e --- /dev/null +++ b/dom/browser-element/mochitest/priority/test_Preallocated.html @@ -0,0 +1,71 @@ +<!DOCTYPE HTML> +<html> +<!-- +Test that the preallocated process starts up with priority BACKGROUND. +--> +<head> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="../browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); +browserElementTestHelpers.enableProcessPriorityManager(); + +var preallocationEnabledPref = null; +try { + preallocationEnabledPref = SpecialPowers.getBoolPref('dom.ipc.processPrelaunch.enabled'); +} +catch(e) { + preallocationEnabledPref = null; +} + +var childID = null; + +var cleanedUp = false; +function cleanUp() +{ + if (cleanedUp) { + return; + } + + cleanedUp = true; +} + +// Even if this test times out, we still want to run cleanUp so as to set the +// pref back. +addEventListener('unload', cleanUp); + +function runTest() +{ + if (preallocationEnabledPref) { + ok(false, "dom.ipc.processPrelaunch.enabled must be " + + "false for this test to work."); + SimpleTest.finish(); + return; + } + + // Ensure that the preallocated process initially gets BACKGROUND priority. + // That's it. + expectProcessCreated('PREALLOC').then(function() { + // We need to set the pref asynchoronously or the preallocated process won't + // be shut down. + SimpleTest.executeSoon(function(){ + cleanUp(); + SimpleTest.finish(); + }); + }); +} +// Setting this pref to true should cause us to prelaunch a process. +addEventListener('testready', function() { + SpecialPowers.pushPrefEnv({'set':[["dom.ipc.processPrelaunch.enabled",true]]},runTest); +}); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/test_Simple.html b/dom/browser-element/mochitest/priority/test_Simple.html new file mode 100644 index 000000000..7cc801e54 --- /dev/null +++ b/dom/browser-element/mochitest/priority/test_Simple.html @@ -0,0 +1,59 @@ +<!DOCTYPE HTML> +<html> +<!-- +A simple test of the process priority manager. + +https://bugzilla.mozilla.org/show_bug.cgi?id=844323 + +Note: If you run this test alone (i.e. not as part of the larger mochitest +suite), you may see some IPC assertions, e.g. "Can't allocate graphics +resources." + +What appears to be happening is that we close the Firefox window before the +frame we create in this tab finishes starting up. Then the frame finishes +loading, and it tries to show itself. But it's too late to show a remote frame +at that point, so we kill the child process. + +In other words, I think these errors are nothing to worry about. +--> +<head> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="../browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); +browserElementTestHelpers.enableProcessPriorityManager(); + +var allCompleted = 0; +var allExpected = 2; +function finish() { + allCompleted++; + if (allCompleted === allExpected) { + SimpleTest.finish(); + } +} + +function runTest() { + var iframeLoaded = false; + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', true); + iframe.src = browserElementTestHelpers.emptyPage1; + + iframe.addEventListener('mozbrowserloadend', finish); + expectProcessCreated('FOREGROUND').then(finish); + + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); + +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/test_Visibility.html b/dom/browser-element/mochitest/priority/test_Visibility.html new file mode 100644 index 000000000..58648b99f --- /dev/null +++ b/dom/browser-element/mochitest/priority/test_Visibility.html @@ -0,0 +1,51 @@ +<!DOCTYPE HTML> +<html> +<!-- +Test that setVisible() changes a process's priority. +--> +<head> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="../browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.enableProcessPriorityManager(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', true); + iframe.src = browserElementTestHelpers.emptyPage1; + + var childID = null; + Promise.all([ + expectOnlyOneProcessCreated('FOREGROUND').then(function(chid) { + childID = chid; + }), + expectMozbrowserEvent(iframe, 'loadend') + ]).then(function() { + // Mark the frame as not visible. This should cause its priority to drop + // to BACKGROUND. + var p = expectPriorityChange(childID, 'BACKGROUND'); + iframe.setVisible(false); + return p; + }).then(function() { + // Mark the frame as visible again. This should cause its priority change + // back to FOREGROUND. + var p = expectPriorityChange(childID, 'FOREGROUND'); + iframe.setVisible(true); + return p; + }).then(SimpleTest.finish); + + document.body.appendChild(iframe); +} + +addEventListener('testready', runTest); +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/priority/test_WebGLContextLost.html b/dom/browser-element/mochitest/priority/test_WebGLContextLost.html new file mode 100644 index 000000000..383506ec6 --- /dev/null +++ b/dom/browser-element/mochitest/priority/test_WebGLContextLost.html @@ -0,0 +1,99 @@ +<!DOCTYPE HTML> +<html> +<!-- +Test that calling setVisible('false') and then sending a low-memory +notification causes a WebGL context loss event. +--> +<head> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="../browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); +browserElementTestHelpers.setEnabledPref(true); +browserElementTestHelpers.addPermission(); +browserElementTestHelpers.enableProcessPriorityManager(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', true); + iframe.src = 'file_WebGLContextLost.html'; + + // We use this to ensure that we don't call SimpleTest.finish() twice. + var finished = false; + function finishOnce() { + if (!finished) { + SimpleTest.finish(); + finished = true; + } + } + + expectMozbrowserEvent(iframe, 'error').then(function(e) { + if (finished) { + // We don't care if the frame dies after the test finishes. + return; + } + todo(false, "child process is crashing; this probably indicates that " + + "something is wrong with WebGL in child processes on your machine."); + is(e.detail.type, 'fatal'); + }).then(finishOnce); + + var childID = null; + Promise.all([ + expectOnlyOneProcessCreated('FOREGROUND').then(function(chid) { + childID = chid; + }), + expectMozbrowserEvent(iframe, 'loadend'), + expectMozbrowserEvent(iframe, 'showmodalprompt').then(function(e) { + is(e.detail.message, 'ready'); + }) + ]).then(function() { + // Fire a low-memory notification once the process goes into the background + // due to the setVisible(false) call below. + expectPriorityChange(childID, 'BACKGROUND').then(function() { + SimpleTest.executeSoon(function() { + var os = SpecialPowers.Cc["@mozilla.org/observer-service;1"] + .getService(SpecialPowers.Ci.nsIObserverService); + os.notifyObservers(null, "memory-pressure", "low-memory"); + ok(true, 'Successfully notified observers.'); + }); + }); + + // This test isn't the only possible source of a low-memory notification; the + // browser can fire one whenever it likes. So it's fine if we lose the + // WebGL context before we fire the low-memory notification ourself. + + var p = expectMozbrowserEvent(iframe, 'showmodalprompt').then(function(e) { + is(e.detail.message, 'webglcontextlost'); + }); + + iframe.setVisible(false); + return p; + }).then(finishOnce); + + document.body.appendChild(iframe); +} + +addEventListener('testready', function() { + // At the time this test was written, webgl was blocklisted inside child + // processes on desktop Linux. The issue is that we spawn a child process to + // read driver info, but we only did this on the main prrocess. Child + // processes never read the driver info themselves, nor do they get it from + // their parent, so they refuse to start up WebGL. + // + // This isn't a problem on B2G because we force WebGL on there. But it + // obviously makes this test difficult. bjacob says forcing WebGL on here + // shouldn't hurt things, and anyway this setting mirrors what we do on B2G, + // which is what we're trying to test! + SpecialPowers.pushPrefEnv({set: [["webgl.force-enabled", true]]}, + runTest); +}); + +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_NoAttr.html b/dom/browser-element/mochitest/test_browserElement_NoAttr.html new file mode 100644 index 000000000..070aee19f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_NoAttr.html @@ -0,0 +1,46 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=710231 +--> +<head> + <title>Test for Bug 710231</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=710231">Mozilla Bug 710231</a> + +<!-- + Test that an iframe without the |mozbrowser| attribute does not emit + mozbrowserX events. +--> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); + +function runTest() { + var iframe = document.getElementById('iframe'); + iframe.addEventListener('mozbrowserloadstart', function() { + ok(false, 'Should not send mozbrowserloadstart event.'); + }); + + iframe.addEventListener('load', function() { + ok(true, 'Got iframe load event.'); + SimpleTest.finish(); + }); + + iframe.src = browserElementTestHelpers.emptyPage1; +} + +addEventListener('load', function() { SimpleTest.executeSoon(runTest); }); + +</script> + +<iframe id='iframe'></iframe> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_NoPermission.html b/dom/browser-element/mochitest/test_browserElement_NoPermission.html new file mode 100644 index 000000000..4e1d88072 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_NoPermission.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=710231 +--> +<head> + <title>Test for Bug 710231</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=710231">Mozilla Bug 710231</a> + +<!-- + Test that an iframe with the |mozbrowser| attribute does not emit + mozbrowserX events when this page does not have the "browser" permission. +--> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); + +function runTest() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + iframe.addEventListener('mozbrowserloadstart', function() { + ok(false, 'Should not send mozbrowserloadstart event.'); + }); + + iframe.addEventListener('load', function() { + ok(true, 'Got iframe load event.'); + SimpleTest.finish(); + }); + + iframe.src = browserElementTestHelpers.emptyPage1; +} + +browserElementTestHelpers.setEnabledPref(true); +SpecialPowers.removePermission("browser", document); +addEventListener('testready', runTest); + +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_NoPref.html b/dom/browser-element/mochitest/test_browserElement_NoPref.html new file mode 100644 index 000000000..df69e4c43 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_NoPref.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=710231 +--> +<head> + <title>Test for Bug 710231</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=710231">Mozilla Bug 710231</a> + +<!-- + Test that an iframe with the |mozbrowser| attribute does not emit + mozbrowserX events when they're globally pref'ed off. +--> + +<script type="application/javascript;version=1.7"> +"use strict"; + +SimpleTest.waitForExplicitFinish(); + +function runTest() { + + var iframe = document.createElement('iframe'); + iframe.setAttribute('mozbrowser', 'true'); + document.body.appendChild(iframe); + + iframe.addEventListener('mozbrowserloadstart', function() { + ok(false, 'Should not send mozbrowserloadstart event.'); + }); + + iframe.addEventListener('load', function() { + ok(true, 'Got iframe load event.'); + SimpleTest.finish(); + }); + + iframe.src = browserElementTestHelpers.emptyPage1; +} + +browserElementTestHelpers.setEnabledPref(false); +addEventListener('testready', runTest); + +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ActiveStateChange.html b/dom/browser-element/mochitest/test_browserElement_inproc_ActiveStateChange.html new file mode 100644 index 000000000..4a14ad7cb --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ActiveStateChange.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test ActiveStateChangeOnChangingMutedOrVolume</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_ActiveStateChange.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Alert.html b/dom/browser-element/mochitest/test_browserElement_inproc_Alert.html new file mode 100644 index 000000000..03d03135d --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Alert.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=741587 +--> +<head> + <title>Test for Bug 741587</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=741587">Mozilla Bug 741587</a> + +<script type="application/javascript;version=1.7" src="browserElement_Alert.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_AlertInFrame.html b/dom/browser-element/mochitest/test_browserElement_inproc_AlertInFrame.html new file mode 100644 index 000000000..d797a1a3a --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_AlertInFrame.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for iframe mozbrowser</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_AlertInFrame.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannel.html b/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannel.html new file mode 100644 index 000000000..6bba008d7 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannel.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element audioChannel.</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_AudioChannel.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannelMutedByDefault.html b/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannelMutedByDefault.html new file mode 100644 index 000000000..304b1b8b4 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannelMutedByDefault.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Bug 1235535 - Audio Channel Muted-By-Default.</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_AudioChannelMutedByDefault.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannelSeeking.html b/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannelSeeking.html new file mode 100644 index 000000000..a7834e929 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannelSeeking.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Bug 1225425 - Do not unregister the AudioChannelAgent during seeking</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_AudioChannelSeeking.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannel_nested.html b/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannel_nested.html new file mode 100644 index 000000000..2ee58002c --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_AudioChannel_nested.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element audioChannel in nested mozbrowser iframes.</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_AudioChannel_nested.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_AudioPlayback.html b/dom/browser-element/mochitest/test_browserElement_inproc_AudioPlayback.html new file mode 100644 index 000000000..364eeff68 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_AudioPlayback.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1180824 +--> +<head> + <title>Test for Bug 1180824</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1180824">Mozilla Bug 1180824</a> + +<script type="application/javascript;version=1.7" src="browserElement_AudioPlayback.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Auth.html b/dom/browser-element/mochitest/test_browserElement_inproc_Auth.html new file mode 100644 index 000000000..0dd60f8c6 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Auth.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=741587 +--> +<head> + <title>Test for Bug 775464</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=775464">Mozilla Bug 775464</a> + +<script type="application/javascript;version=1.7" src="browserElement_Auth.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_BackForward.html b/dom/browser-element/mochitest/test_browserElement_inproc_BackForward.html new file mode 100644 index 000000000..d841cc3e0 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_BackForward.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_BackForward.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_BadScreenshot.html b/dom/browser-element/mochitest/test_browserElement_inproc_BadScreenshot.html new file mode 100644 index 000000000..8e4b61b33 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_BadScreenshot.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 800170</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_BadScreenshot.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_BrowserWindowNamespace.html b/dom/browser-element/mochitest/test_browserElement_inproc_BrowserWindowNamespace.html new file mode 100644 index 000000000..3fafbe646 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_BrowserWindowNamespace.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 780351</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_BrowserWindowNamespace.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_BrowserWindowResize.html b/dom/browser-element/mochitest/test_browserElement_inproc_BrowserWindowResize.html new file mode 100644 index 000000000..bcc86b872 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_BrowserWindowResize.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 891763</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_BrowserWindowResize.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Close.html b/dom/browser-element/mochitest/test_browserElement_inproc_Close.html new file mode 100644 index 000000000..76d203f9d --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Close.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=757182 +--> +<head> + <title>Test for Bug 757182</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=757182">Mozilla Bug 757182</a> + +<script type="application/javascript;version=1.7" src="browserElement_Close.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_CloseFromOpener.html b/dom/browser-element/mochitest/test_browserElement_inproc_CloseFromOpener.html new file mode 100644 index 000000000..3c7ee4d87 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_CloseFromOpener.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=757182 +--> +<head> + <title>Test for Bug 757182</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=757182">Mozilla Bug 757182</a> + +<script type="application/javascript;version=1.7" src="browserElement_CloseFromOpener.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ContextmenuEvents.html b/dom/browser-element/mochitest/test_browserElement_inproc_ContextmenuEvents.html new file mode 100644 index 000000000..a43f7dbef --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ContextmenuEvents.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Contextmenu Events</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_ContextmenuEvents.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_CookiesNotThirdParty.html b/dom/browser-element/mochitest/test_browserElement_inproc_CookiesNotThirdParty.html new file mode 100644 index 000000000..37ea16fb0 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_CookiesNotThirdParty.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 806127</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_CookiesNotThirdParty.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_CopyPaste.html b/dom/browser-element/mochitest/test_browserElement_inproc_CopyPaste.html new file mode 100644 index 000000000..892245d4f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_CopyPaste.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=987040 +--> +<head> + <title>Test for Bug 987040</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=987040">Mozilla Bug 987040</a> + +<script type="application/javascript;version=1.7" src="browserElement_CopyPaste.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_DOMRequestError.html b/dom/browser-element/mochitest/test_browserElement_inproc_DOMRequestError.html new file mode 100644 index 000000000..6a9e5bbba --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_DOMRequestError.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=787519 +--> +<head> + <title>Test for Bug 787519</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=787519">Mozilla Bug 787519</a> + +<script type="application/javascript;version=1.7" src='browserElement_DOMRequestError.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_DataURI.html b/dom/browser-element/mochitest/test_browserElement_inproc_DataURI.html new file mode 100644 index 000000000..2ceb49cd0 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_DataURI.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=720157 +--> +<head> + <title>Test for Bug 720157</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=720157">Mozilla Bug 720157</a> + +<script type='application/javascript;version=1.7' src='browserElement_DataURI.js'></script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_DocumentFirstPaint.html b/dom/browser-element/mochitest/test_browserElement_inproc_DocumentFirstPaint.html new file mode 100644 index 000000000..3197adf66 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_DocumentFirstPaint.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 829486</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_DocumentFirstPaint.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Download.html b/dom/browser-element/mochitest/test_browserElement_inproc_Download.html new file mode 100644 index 000000000..c2e5e2ed3 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Download.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 983747</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_Download.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ErrorSecurity.html b/dom/browser-element/mochitest/test_browserElement_inproc_ErrorSecurity.html new file mode 100644 index 000000000..318d29831 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ErrorSecurity.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for mozbrowser</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_ErrorSecurity.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ExecuteScript.html b/dom/browser-element/mochitest/test_browserElement_inproc_ExecuteScript.html new file mode 100644 index 000000000..f63f31d42 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ExecuteScript.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1174733 +--> +<head> + <title>Test for Bug 1163961</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1174733">Mozilla Bug 1174733</a> + +<script type="application/javascript;version=1.7" src="browserElement_ExecuteScript.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ExposableURI.html b/dom/browser-element/mochitest/test_browserElement_inproc_ExposableURI.html new file mode 100644 index 000000000..089e5db44 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ExposableURI.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=795317 +--> +<head> + <title>Test for Bug 795317</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=795317">Mozilla Bug 795317</a> + +<script type="application/javascript;version1.7" src="browserElement_ExposableURI.js"></script> + +</body> +</html> + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Find.html b/dom/browser-element/mochitest/test_browserElement_inproc_Find.html new file mode 100644 index 000000000..386bc7882 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Find.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1163961 +--> +<head> + <title>Test for Bug 1163961</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1163961">Mozilla Bug 1163961</a> + +<script type="application/javascript;version=1.7" src="browserElement_Find.js"> +</script> +</body> +</html> + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_FirstPaint.html b/dom/browser-element/mochitest/test_browserElement_inproc_FirstPaint.html new file mode 100644 index 000000000..ee013860c --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_FirstPaint.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 787378</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_FirstPaint.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ForwardName.html b/dom/browser-element/mochitest/test_browserElement_inproc_ForwardName.html new file mode 100644 index 000000000..f24691ff1 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ForwardName.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 781320</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_ForwardName.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_FrameWrongURI.html b/dom/browser-element/mochitest/test_browserElement_inproc_FrameWrongURI.html new file mode 100644 index 000000000..f0e6e6c20 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_FrameWrongURI.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_FrameWrongURI.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_GetContentDimensions.html b/dom/browser-element/mochitest/test_browserElement_inproc_GetContentDimensions.html new file mode 100644 index 000000000..73b59800d --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_GetContentDimensions.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_GetContentDimensions.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_GetScreenshot.html b/dom/browser-element/mochitest/test_browserElement_inproc_GetScreenshot.html new file mode 100644 index 000000000..cb246fc06 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_GetScreenshot.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=753595 +--> +<head> + <title>Test for Bug 753595</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=753595">Mozilla Bug 753595</a> + +<script type="application/javascript;version=1.7" src='browserElement_GetScreenshot.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_GetScreenshotDppx.html b/dom/browser-element/mochitest/test_browserElement_inproc_GetScreenshotDppx.html new file mode 100644 index 000000000..dfc10d102 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_GetScreenshotDppx.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=959066 +--> +<head> + <title>Test for Bug 959066</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=959066">Mozilla Bug 959066</a> + +<script type="application/javascript;version=1.7" src='browserElement_GetScreenshotDppx.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Iconchange.html b/dom/browser-element/mochitest/test_browserElement_inproc_Iconchange.html new file mode 100644 index 000000000..2f17287de --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Iconchange.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=719461 +--> +<head> + <title>Test for Bug 719461</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=719461">Mozilla Bug 719461</a> + +<script type="application/javascript;version=1.7" src="browserElement_Iconchange.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_LoadEvents.html b/dom/browser-element/mochitest/test_browserElement_inproc_LoadEvents.html new file mode 100644 index 000000000..3370ff874 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_LoadEvents.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=710231 +--> +<head> + <title>Test for Bug 710231</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=710231">Mozilla Bug 710231</a> + +<script type="application/javascript;version1.7" src="browserElement_LoadEvents.js"></script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Manifestchange.html b/dom/browser-element/mochitest/test_browserElement_inproc_Manifestchange.html new file mode 100644 index 000000000..64200bd48 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Manifestchange.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=982800 +--> +<head> + <title>Test for Bug 982800</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=982800">Mozilla Bug 982800</a> + +<script type="application/javascript;version=1.7" src="browserElement_Manifestchange.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Metachange.html b/dom/browser-element/mochitest/test_browserElement_inproc_Metachange.html new file mode 100644 index 000000000..d799a52e4 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Metachange.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=962626 +--> +<head> + <title>Test for Bug 962626</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=962626">Mozilla Bug 962626</a> + +<script type="application/javascript;version=1.7" src="browserElement_Metachange.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_NextPaint.html b/dom/browser-element/mochitest/test_browserElement_inproc_NextPaint.html new file mode 100644 index 000000000..d9250a8db --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_NextPaint.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 808231</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_NextPaint.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_NoAudioTrack.html b/dom/browser-element/mochitest/test_browserElement_inproc_NoAudioTrack.html new file mode 100644 index 000000000..77e33befa --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_NoAudioTrack.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Bug 1227051 - No audio track video shouldn't register the AudioChannelAgent</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_NoAudioTrack.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_OpenMixedProcess.html b/dom/browser-element/mochitest/test_browserElement_inproc_OpenMixedProcess.html new file mode 100644 index 000000000..1248c1772 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_OpenMixedProcess.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 776129</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenMixedProcess.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_OpenNamed.html b/dom/browser-element/mochitest/test_browserElement_inproc_OpenNamed.html new file mode 100644 index 000000000..bbe12545c --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_OpenNamed.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenNamed.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_OpenTab.html b/dom/browser-element/mochitest/test_browserElement_inproc_OpenTab.html new file mode 100644 index 000000000..85b979bd0 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_OpenTab.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1144015 +--> +<head> + <title>Test for Bug 1144015</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1144015">Mozilla Bug 1144015</a> + +<script type="application/javascript;version=1.7" src="browserElement_OpenTab.js"> +</script> +</body> +</html> + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindow.html b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindow.html new file mode 100644 index 000000000..7c249792f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindow.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindow.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowDifferentOrigin.html b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowDifferentOrigin.html new file mode 100644 index 000000000..327ff8960 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowDifferentOrigin.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindowDifferentOrigin.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowEmpty.html b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowEmpty.html new file mode 100644 index 000000000..03738de71 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowEmpty.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 1216937</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindowEmpty.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowInFrame.html b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowInFrame.html new file mode 100644 index 000000000..e2c02d4a9 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowInFrame.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindowInFrame.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowRejected.html b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowRejected.html new file mode 100644 index 000000000..a96b378f6 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowRejected.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindowRejected.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowRejected2.html b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowRejected2.html new file mode 100644 index 000000000..a96b378f6 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_OpenWindowRejected2.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindowRejected.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Opensearch.html b/dom/browser-element/mochitest/test_browserElement_inproc_Opensearch.html new file mode 100644 index 000000000..23f21ed83 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Opensearch.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=883002 +--> +<head> + <title>Test for Bug 883002</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=883002">Mozilla Bug 883002</a> + +<script type="application/javascript;version=1.7" src="browserElement_Opensearch.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_PrivateBrowsing.html b/dom/browser-element/mochitest/test_browserElement_inproc_PrivateBrowsing.html new file mode 100644 index 000000000..0947fd7c7 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_PrivateBrowsing.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=832700 +--> +<head> + <title>Test for Bug 832700</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=832700">Mozilla Bug 832700</a> + +<script type="application/javascript;version=1.7" src="browserElement_PrivateBrowsing.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_PromptCheck.html b/dom/browser-element/mochitest/test_browserElement_inproc_PromptCheck.html new file mode 100644 index 000000000..476c7e2c2 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_PromptCheck.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=741587 +--> +<head> + <title>Test for Bug 741587</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=741587">Mozilla Bug 741587</a> + +<script type="application/javascript;version=1.7" src="browserElement_PromptCheck.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_PromptConfirm.html b/dom/browser-element/mochitest/test_browserElement_inproc_PromptConfirm.html new file mode 100644 index 000000000..b29a52025 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_PromptConfirm.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=741587 +--> +<head> + <title>Test for Bug 741587</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=741587">Mozilla Bug 741587</a> + +<script type="application/javascript;version=1.7" src="browserElement_PromptConfirm.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Proxy.html b/dom/browser-element/mochitest/test_browserElement_inproc_Proxy.html new file mode 100644 index 000000000..05a416eee --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Proxy.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1196654 +--> +<head> + <title>Test for Bug 1196654</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1196654">Mozilla Bug 1196654</a> + +<script type="application/javascript;version=1.7" src="browserElement_Proxy.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_PurgeHistory.html b/dom/browser-element/mochitest/test_browserElement_inproc_PurgeHistory.html new file mode 100644 index 000000000..1c052996c --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_PurgeHistory.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_PurgeHistory.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Reload.html b/dom/browser-element/mochitest/test_browserElement_inproc_Reload.html new file mode 100644 index 000000000..75b912b19 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Reload.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_Reload.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ReloadPostRequest.html b/dom/browser-element/mochitest/test_browserElement_inproc_ReloadPostRequest.html new file mode 100644 index 000000000..d26e7a0b5 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ReloadPostRequest.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_ReloadPostRequest.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_RemoveBrowserElement.html b/dom/browser-element/mochitest/test_browserElement_inproc_RemoveBrowserElement.html new file mode 100644 index 000000000..8ccbe09a7 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_RemoveBrowserElement.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=787517 +--> +<head> + <title>Test for Bug 787517</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=787517">Mozilla Bug 787517</a> + +<script type="application/javascript;version=1.7" src="browserElement_RemoveBrowserElement.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ScrollEvent.html b/dom/browser-element/mochitest/test_browserElement_inproc_ScrollEvent.html new file mode 100644 index 000000000..e87792243 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ScrollEvent.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=770847 +--> +<head> + <title>Test for Bug 770847</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=770847">Mozilla Bug 770847</a> + +<script type="application/javascript;version=1.7" src="browserElement_ScrollEvent.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_SecurityChange.html b/dom/browser-element/mochitest/test_browserElement_inproc_SecurityChange.html new file mode 100644 index 000000000..ceaa6a40e --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_SecurityChange.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_SecurityChange.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_SendEvent.html b/dom/browser-element/mochitest/test_browserElement_inproc_SendEvent.html new file mode 100644 index 000000000..5eee91ed7 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_SendEvent.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=774809 +--> +<head> + <title>Test for Bug 774809</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=774809">Mozilla Bug 774809</a> + +<script type="application/javascript;version=1.7" src="browserElement_SendEvent.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_SetInputMethodActive.html b/dom/browser-element/mochitest/test_browserElement_inproc_SetInputMethodActive.html new file mode 100644 index 000000000..957bf82fc --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_SetInputMethodActive.html @@ -0,0 +1,14 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 905573</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_SetInputMethodActive.js"> +</script> +</body> +</html> + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_SetVisible.html b/dom/browser-element/mochitest/test_browserElement_inproc_SetVisible.html new file mode 100644 index 000000000..6241d4b1f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_SetVisible.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=702880 +--> + <head> + <title>Test for Bug 702880</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=753595">Mozilla Bug 702880</a> + +<script type="application/javascript;version=1.7" src='browserElement_SetVisible.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_SetVisibleFrames.html b/dom/browser-element/mochitest/test_browserElement_inproc_SetVisibleFrames.html new file mode 100644 index 000000000..8ae182285 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_SetVisibleFrames.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 762939</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_SetVisibleFrames.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_SetVisibleFrames2.html b/dom/browser-element/mochitest/test_browserElement_inproc_SetVisibleFrames2.html new file mode 100644 index 000000000..17d161a95 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_SetVisibleFrames2.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 762939</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_SetVisibleFrames2.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Stop.html b/dom/browser-element/mochitest/test_browserElement_inproc_Stop.html new file mode 100644 index 000000000..42c32da7e --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Stop.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_Stop.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_TargetBlank.html b/dom/browser-element/mochitest/test_browserElement_inproc_TargetBlank.html new file mode 100644 index 000000000..916ed312b --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_TargetBlank.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for mozbrowser</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_TargetBlank.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_TargetTop.html b/dom/browser-element/mochitest/test_browserElement_inproc_TargetTop.html new file mode 100644 index 000000000..6c99f1c21 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_TargetTop.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 771273</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_TargetTop.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_ThemeColor.html b/dom/browser-element/mochitest/test_browserElement_inproc_ThemeColor.html new file mode 100644 index 000000000..4075ce58d --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_ThemeColor.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1013913 +--> +<head> + <title>Test for Bug 1013913</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1013913">Mozilla Bug 1013913</a> + +<script type="application/javascript;version=1.7" src="browserElement_ThemeColor.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Titlechange.html b/dom/browser-element/mochitest/test_browserElement_inproc_Titlechange.html new file mode 100644 index 000000000..1fdde48c1 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Titlechange.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=720157 +--> +<head> + <title>Test for Bug 720157</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=720157">Mozilla Bug 720157</a> + +<script type="application/javascript;version=1.7" src='browserElement_Titlechange.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_TopBarrier.html b/dom/browser-element/mochitest/test_browserElement_inproc_TopBarrier.html new file mode 100644 index 000000000..c77a7a9ec --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_TopBarrier.html @@ -0,0 +1,21 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=725796 +--> +<head> + <title>Test for Bug 725796</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=725796">Mozilla Bug 725796</a> + +<script type="application/javascript;version=1.7" src="browserElement_TopBarrier.js"> +</script> + +</body> +</html> + + diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_Viewmode.html b/dom/browser-element/mochitest/test_browserElement_inproc_Viewmode.html new file mode 100644 index 000000000..286dd3989 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_Viewmode.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1162844 +--> +<head> + <title>Test for Bug 1162844</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1162844">Mozilla Bug 1162844</a> + +<script type="application/javascript;version=1.7" src="browserElement_Viewmode.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_VisibilityChange.html b/dom/browser-element/mochitest/test_browserElement_inproc_VisibilityChange.html new file mode 100644 index 000000000..ce4251a42 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_VisibilityChange.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=868816 +--> +<head> + <title>Test for Bug 868816</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=868816">Mozilla Bug 868816</a> + +<script type="application/javascript;version=1.7" src='browserElement_VisibilityChange.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptions.html b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptions.html new file mode 100644 index 000000000..36479ee06 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptions.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 770239</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_XFrameOptions.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsAllowFrom.html b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsAllowFrom.html new file mode 100644 index 000000000..801c7879f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsAllowFrom.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 690168</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_XFrameOptionsAllowFrom.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsDeny.html b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsDeny.html new file mode 100644 index 000000000..edd91dbd7 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsDeny.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 770239</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_XFrameOptionsDeny.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsSameOrigin.html b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsSameOrigin.html new file mode 100644 index 000000000..e0ecbabc4 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_XFrameOptionsSameOrigin.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 770239</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_XFrameOptionsSameOrigin.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_inproc_getWebManifest.html b/dom/browser-element/mochitest/test_browserElement_inproc_getWebManifest.html new file mode 100644 index 000000000..1252de5e5 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_inproc_getWebManifest.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 1169633</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.8" + src="async.js"> +</script> +<script type="application/javascript;version=1.8" + src="browserElement_getWebManifest.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ActiveStateChange.html b/dom/browser-element/mochitest/test_browserElement_oop_ActiveStateChange.html new file mode 100644 index 000000000..4a14ad7cb --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ActiveStateChange.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test ActiveStateChangeOnChangingMutedOrVolume</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_ActiveStateChange.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Alert.html b/dom/browser-element/mochitest/test_browserElement_oop_Alert.html new file mode 100644 index 000000000..03d03135d --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Alert.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=741587 +--> +<head> + <title>Test for Bug 741587</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=741587">Mozilla Bug 741587</a> + +<script type="application/javascript;version=1.7" src="browserElement_Alert.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_AlertInFrame.html b/dom/browser-element/mochitest/test_browserElement_oop_AlertInFrame.html new file mode 100644 index 000000000..d797a1a3a --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_AlertInFrame.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for iframe mozbrowser</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_AlertInFrame.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_AudioChannel.html b/dom/browser-element/mochitest/test_browserElement_oop_AudioChannel.html new file mode 100644 index 000000000..34909e904 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_AudioChannel.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element audioChannel.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_AudioChannel.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_AudioChannelMutedByDefault.html b/dom/browser-element/mochitest/test_browserElement_oop_AudioChannelMutedByDefault.html new file mode 100644 index 000000000..60bead59f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_AudioChannelMutedByDefault.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Bug 1235535 - Audio Channel Muted-By-Default.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_AudioChannelMutedByDefault.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_AudioChannelSeeking.html b/dom/browser-element/mochitest/test_browserElement_oop_AudioChannelSeeking.html new file mode 100644 index 000000000..54c3a1fb4 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_AudioChannelSeeking.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Bug 1225425 - Do not unregister the AudioChannelAgent during seeking</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_AudioChannelSeeking.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_AudioChannel_nested.html b/dom/browser-element/mochitest/test_browserElement_oop_AudioChannel_nested.html new file mode 100644 index 000000000..d189a7ca4 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_AudioChannel_nested.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element audioChannel.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_AudioChannel_nested.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_AudioPlayback.html b/dom/browser-element/mochitest/test_browserElement_oop_AudioPlayback.html new file mode 100644 index 000000000..bb3a1c2d6 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_AudioPlayback.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1180824 +--> +<head> + <title>Test for Bug 1180824</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1180824">Mozilla Bug 1180824</a> + +<script type="application/javascript;version=1.7" src="browserElement_AudioPlayback.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Auth.html b/dom/browser-element/mochitest/test_browserElement_oop_Auth.html new file mode 100644 index 000000000..0dd60f8c6 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Auth.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=741587 +--> +<head> + <title>Test for Bug 775464</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=775464">Mozilla Bug 775464</a> + +<script type="application/javascript;version=1.7" src="browserElement_Auth.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_BackForward.html b/dom/browser-element/mochitest/test_browserElement_oop_BackForward.html new file mode 100644 index 000000000..e5d753b5e --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_BackForward.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_BackForward.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_BadScreenshot.html b/dom/browser-element/mochitest/test_browserElement_oop_BadScreenshot.html new file mode 100644 index 000000000..5713b512e --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_BadScreenshot.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 800170</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_BadScreenshot.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_BrowserWindowResize.html b/dom/browser-element/mochitest/test_browserElement_oop_BrowserWindowResize.html new file mode 100644 index 000000000..bcc86b872 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_BrowserWindowResize.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 891763</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_BrowserWindowResize.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Close.html b/dom/browser-element/mochitest/test_browserElement_oop_Close.html new file mode 100644 index 000000000..76d203f9d --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Close.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=757182 +--> +<head> + <title>Test for Bug 757182</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=757182">Mozilla Bug 757182</a> + +<script type="application/javascript;version=1.7" src="browserElement_Close.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_CloseFromOpener.html b/dom/browser-element/mochitest/test_browserElement_oop_CloseFromOpener.html new file mode 100644 index 000000000..3c7ee4d87 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_CloseFromOpener.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=757182 +--> +<head> + <title>Test for Bug 757182</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=757182">Mozilla Bug 757182</a> + +<script type="application/javascript;version=1.7" src="browserElement_CloseFromOpener.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ContextmenuEvents.html b/dom/browser-element/mochitest/test_browserElement_oop_ContextmenuEvents.html new file mode 100644 index 000000000..a43f7dbef --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ContextmenuEvents.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Contextmenu Events</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_ContextmenuEvents.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_CookiesNotThirdParty.html b/dom/browser-element/mochitest/test_browserElement_oop_CookiesNotThirdParty.html new file mode 100644 index 000000000..37ea16fb0 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_CookiesNotThirdParty.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 806127</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_CookiesNotThirdParty.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_CopyPaste.html b/dom/browser-element/mochitest/test_browserElement_oop_CopyPaste.html new file mode 100644 index 000000000..892245d4f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_CopyPaste.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=987040 +--> +<head> + <title>Test for Bug 987040</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=987040">Mozilla Bug 987040</a> + +<script type="application/javascript;version=1.7" src="browserElement_CopyPaste.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_DOMRequestError.html b/dom/browser-element/mochitest/test_browserElement_oop_DOMRequestError.html new file mode 100644 index 000000000..48d404cc3 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_DOMRequestError.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=787519 +--> +<head> + <title>Test for Bug 787519</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=787519">Mozilla Bug 787519</a> + +<script type="application/javascript;version=1.7" src='browserElement_DOMRequestError.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_DataURI.html b/dom/browser-element/mochitest/test_browserElement_oop_DataURI.html new file mode 100644 index 000000000..2ceb49cd0 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_DataURI.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=720157 +--> +<head> + <title>Test for Bug 720157</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=720157">Mozilla Bug 720157</a> + +<script type='application/javascript;version=1.7' src='browserElement_DataURI.js'></script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_DocumentFirstPaint.html b/dom/browser-element/mochitest/test_browserElement_oop_DocumentFirstPaint.html new file mode 100644 index 000000000..6667a76eb --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_DocumentFirstPaint.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 829486</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_DocumentFirstPaint.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Download.html b/dom/browser-element/mochitest/test_browserElement_oop_Download.html new file mode 100644 index 000000000..c2e5e2ed3 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Download.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 983747</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_Download.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ErrorSecurity.html b/dom/browser-element/mochitest/test_browserElement_oop_ErrorSecurity.html new file mode 100644 index 000000000..318d29831 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ErrorSecurity.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for mozbrowser</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_ErrorSecurity.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ExecuteScript.html b/dom/browser-element/mochitest/test_browserElement_oop_ExecuteScript.html new file mode 100644 index 000000000..e3bbabfa0 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ExecuteScript.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1174733 +--> +<head> + <title>Test for Bug 1163961</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1174733">Mozilla Bug 1174733</a> + +<script type="application/javascript;version=1.7" src="browserElement_ExecuteScript.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ExposableURI.html b/dom/browser-element/mochitest/test_browserElement_oop_ExposableURI.html new file mode 100644 index 000000000..089e5db44 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ExposableURI.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=795317 +--> +<head> + <title>Test for Bug 795317</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=795317">Mozilla Bug 795317</a> + +<script type="application/javascript;version1.7" src="browserElement_ExposableURI.js"></script> + +</body> +</html> + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Find.html b/dom/browser-element/mochitest/test_browserElement_oop_Find.html new file mode 100644 index 000000000..e0333a6bb --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Find.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1163961 +--> +<head> + <title>Test for Bug 1163961</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1163961">Mozilla Bug 1163961</a> + +<script type="application/javascript;version=1.7" src="browserElement_Find.js"> +</script> +</body> +</html> + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_FirstPaint.html b/dom/browser-element/mochitest/test_browserElement_oop_FirstPaint.html new file mode 100644 index 000000000..ee013860c --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_FirstPaint.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 787378</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_FirstPaint.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ForwardName.html b/dom/browser-element/mochitest/test_browserElement_oop_ForwardName.html new file mode 100644 index 000000000..f24691ff1 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ForwardName.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 781320</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_ForwardName.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_FrameWrongURI.html b/dom/browser-element/mochitest/test_browserElement_oop_FrameWrongURI.html new file mode 100644 index 000000000..f0e6e6c20 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_FrameWrongURI.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_FrameWrongURI.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_GetContentDimensions.html b/dom/browser-element/mochitest/test_browserElement_oop_GetContentDimensions.html new file mode 100644 index 000000000..067615c1b --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_GetContentDimensions.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_GetContentDimensions.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_GetScreenshot.html b/dom/browser-element/mochitest/test_browserElement_oop_GetScreenshot.html new file mode 100644 index 000000000..81d3e1993 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_GetScreenshot.html @@ -0,0 +1,20 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=753595 +--> +<head> + <title>Test for Bug 753595</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=753595">Mozilla Bug 753595</a> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=878003">Mozilla Bug 878003</a> + +<script type="application/javascript;version=1.7" src='browserElement_GetScreenshot.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_GetScreenshotDppx.html b/dom/browser-element/mochitest/test_browserElement_oop_GetScreenshotDppx.html new file mode 100644 index 000000000..9d30fc541 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_GetScreenshotDppx.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=959066 +--> +<head> + <title>Test for Bug 959066</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=959066">Mozilla Bug 959066</a> + +<script type="application/javascript;version=1.7" src='browserElement_GetScreenshotDppx.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Iconchange.html b/dom/browser-element/mochitest/test_browserElement_oop_Iconchange.html new file mode 100644 index 000000000..2f17287de --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Iconchange.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=719461 +--> +<head> + <title>Test for Bug 719461</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=719461">Mozilla Bug 719461</a> + +<script type="application/javascript;version=1.7" src="browserElement_Iconchange.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_LoadEvents.html b/dom/browser-element/mochitest/test_browserElement_oop_LoadEvents.html new file mode 100644 index 000000000..c6daf805e --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_LoadEvents.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=710231 +--> +<head> + <title>Test for Bug 710231</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=710231">Mozilla Bug 710231</a> + +<script type="application/javascript;version1.7" src="browserElement_LoadEvents.js"></script> + +</body> +</html> + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Manifestchange.html b/dom/browser-element/mochitest/test_browserElement_oop_Manifestchange.html new file mode 100644 index 000000000..64200bd48 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Manifestchange.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=982800 +--> +<head> + <title>Test for Bug 982800</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=982800">Mozilla Bug 982800</a> + +<script type="application/javascript;version=1.7" src="browserElement_Manifestchange.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Metachange.html b/dom/browser-element/mochitest/test_browserElement_oop_Metachange.html new file mode 100644 index 000000000..d799a52e4 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Metachange.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=962626 +--> +<head> + <title>Test for Bug 962626</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=962626">Mozilla Bug 962626</a> + +<script type="application/javascript;version=1.7" src="browserElement_Metachange.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_NextPaint.html b/dom/browser-element/mochitest/test_browserElement_oop_NextPaint.html new file mode 100644 index 000000000..8144819f2 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_NextPaint.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 808231</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_NextPaint.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_NoAudioTrack.html b/dom/browser-element/mochitest/test_browserElement_oop_NoAudioTrack.html new file mode 100644 index 000000000..90782bc63 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_NoAudioTrack.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Bug 1227051 - No audio track video shouldn't register the AudioChannelAgent</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_NoAudioTrack.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_OpenMixedProcess.html b/dom/browser-element/mochitest/test_browserElement_oop_OpenMixedProcess.html new file mode 100644 index 000000000..cefe06c3e --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_OpenMixedProcess.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 776129</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenMixedProcess.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_OpenNamed.html b/dom/browser-element/mochitest/test_browserElement_oop_OpenNamed.html new file mode 100644 index 000000000..bbe12545c --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_OpenNamed.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenNamed.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_OpenTab.html b/dom/browser-element/mochitest/test_browserElement_oop_OpenTab.html new file mode 100644 index 000000000..85b979bd0 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_OpenTab.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1144015 +--> +<head> + <title>Test for Bug 1144015</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1144015">Mozilla Bug 1144015</a> + +<script type="application/javascript;version=1.7" src="browserElement_OpenTab.js"> +</script> +</body> +</html> + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_OpenWindow.html b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindow.html new file mode 100644 index 000000000..7c249792f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindow.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindow.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowDifferentOrigin.html b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowDifferentOrigin.html new file mode 100644 index 000000000..327ff8960 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowDifferentOrigin.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindowDifferentOrigin.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowEmpty.html b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowEmpty.html new file mode 100644 index 000000000..03738de71 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowEmpty.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 1216937</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindowEmpty.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowInFrame.html b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowInFrame.html new file mode 100644 index 000000000..e2c02d4a9 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowInFrame.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindowInFrame.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowRejected.html b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowRejected.html new file mode 100644 index 000000000..a96b378f6 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowRejected.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindowRejected.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowRejected2.html b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowRejected2.html new file mode 100644 index 000000000..a96b378f6 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_OpenWindowRejected2.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_OpenWindowRejected.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Opensearch.html b/dom/browser-element/mochitest/test_browserElement_oop_Opensearch.html new file mode 100644 index 000000000..23f21ed83 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Opensearch.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=883002 +--> +<head> + <title>Test for Bug 883002</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=883002">Mozilla Bug 883002</a> + +<script type="application/javascript;version=1.7" src="browserElement_Opensearch.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_PrivateBrowsing.html b/dom/browser-element/mochitest/test_browserElement_oop_PrivateBrowsing.html new file mode 100644 index 000000000..0947fd7c7 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_PrivateBrowsing.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=832700 +--> +<head> + <title>Test for Bug 832700</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=832700">Mozilla Bug 832700</a> + +<script type="application/javascript;version=1.7" src="browserElement_PrivateBrowsing.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_PromptCheck.html b/dom/browser-element/mochitest/test_browserElement_oop_PromptCheck.html new file mode 100644 index 000000000..476c7e2c2 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_PromptCheck.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=741587 +--> +<head> + <title>Test for Bug 741587</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=741587">Mozilla Bug 741587</a> + +<script type="application/javascript;version=1.7" src="browserElement_PromptCheck.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_PromptConfirm.html b/dom/browser-element/mochitest/test_browserElement_oop_PromptConfirm.html new file mode 100644 index 000000000..b29a52025 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_PromptConfirm.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=741587 +--> +<head> + <title>Test for Bug 741587</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=741587">Mozilla Bug 741587</a> + +<script type="application/javascript;version=1.7" src="browserElement_PromptConfirm.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Proxy.html b/dom/browser-element/mochitest/test_browserElement_oop_Proxy.html new file mode 100644 index 000000000..05a416eee --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Proxy.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1196654 +--> +<head> + <title>Test for Bug 1196654</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1196654">Mozilla Bug 1196654</a> + +<script type="application/javascript;version=1.7" src="browserElement_Proxy.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_PurgeHistory.html b/dom/browser-element/mochitest/test_browserElement_oop_PurgeHistory.html new file mode 100644 index 000000000..cf606fd80 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_PurgeHistory.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_PurgeHistory.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Reload.html b/dom/browser-element/mochitest/test_browserElement_oop_Reload.html new file mode 100644 index 000000000..75b912b19 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Reload.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_Reload.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ReloadPostRequest.html b/dom/browser-element/mochitest/test_browserElement_oop_ReloadPostRequest.html new file mode 100644 index 000000000..d26e7a0b5 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ReloadPostRequest.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_ReloadPostRequest.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_RemoveBrowserElement.html b/dom/browser-element/mochitest/test_browserElement_oop_RemoveBrowserElement.html new file mode 100644 index 000000000..8ccbe09a7 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_RemoveBrowserElement.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=787517 +--> +<head> + <title>Test for Bug 787517</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=787517">Mozilla Bug 787517</a> + +<script type="application/javascript;version=1.7" src="browserElement_RemoveBrowserElement.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ScrollEvent.html b/dom/browser-element/mochitest/test_browserElement_oop_ScrollEvent.html new file mode 100644 index 000000000..e87792243 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ScrollEvent.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=770847 +--> +<head> + <title>Test for Bug 770847</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=770847">Mozilla Bug 770847</a> + +<script type="application/javascript;version=1.7" src="browserElement_ScrollEvent.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_SecurityChange.html b/dom/browser-element/mochitest/test_browserElement_oop_SecurityChange.html new file mode 100644 index 000000000..ceaa6a40e --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_SecurityChange.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_SecurityChange.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_SendEvent.html b/dom/browser-element/mochitest/test_browserElement_oop_SendEvent.html new file mode 100644 index 000000000..38d16a9da --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_SendEvent.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=774809 +--> +<head> + <title>Test for Bug 774809</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=774809">Mozilla Bug 774809</a> + +<script type="application/javascript;version=1.7" src="browserElement_SendEvent.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_SetInputMethodActive.html b/dom/browser-element/mochitest/test_browserElement_oop_SetInputMethodActive.html new file mode 100644 index 000000000..5d4b45bc8 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_SetInputMethodActive.html @@ -0,0 +1,14 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 905573</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_SetInputMethodActive.js"> +</script> +</body> +</html> + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_SetVisible.html b/dom/browser-element/mochitest/test_browserElement_oop_SetVisible.html new file mode 100644 index 000000000..a2220d1b3 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_SetVisible.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=702880 +--> + <head> + <title>Test for Bug 702880</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=753595">Mozilla Bug 702880</a> + +<script type="application/javascript;version=1.7" src='browserElement_SetVisible.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_SetVisibleFrames.html b/dom/browser-element/mochitest/test_browserElement_oop_SetVisibleFrames.html new file mode 100644 index 000000000..b6477c870 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_SetVisibleFrames.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 762939</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_SetVisibleFrames.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_SetVisibleFrames2.html b/dom/browser-element/mochitest/test_browserElement_oop_SetVisibleFrames2.html new file mode 100644 index 000000000..108080f50 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_SetVisibleFrames2.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 762939</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_SetVisibleFrames2.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Stop.html b/dom/browser-element/mochitest/test_browserElement_oop_Stop.html new file mode 100644 index 000000000..3425944e8 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Stop.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test of browser element.</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_Stop.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_TargetBlank.html b/dom/browser-element/mochitest/test_browserElement_oop_TargetBlank.html new file mode 100644 index 000000000..916ed312b --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_TargetBlank.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for mozbrowser</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_TargetBlank.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_TargetTop.html b/dom/browser-element/mochitest/test_browserElement_oop_TargetTop.html new file mode 100644 index 000000000..6c99f1c21 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_TargetTop.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 771273</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_TargetTop.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_ThemeColor.html b/dom/browser-element/mochitest/test_browserElement_oop_ThemeColor.html new file mode 100644 index 000000000..4075ce58d --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_ThemeColor.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1013913 +--> +<head> + <title>Test for Bug 1013913</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1013913">Mozilla Bug 1013913</a> + +<script type="application/javascript;version=1.7" src="browserElement_ThemeColor.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Titlechange.html b/dom/browser-element/mochitest/test_browserElement_oop_Titlechange.html new file mode 100644 index 000000000..1fdde48c1 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Titlechange.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=720157 +--> +<head> + <title>Test for Bug 720157</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=720157">Mozilla Bug 720157</a> + +<script type="application/javascript;version=1.7" src='browserElement_Titlechange.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_TopBarrier.html b/dom/browser-element/mochitest/test_browserElement_oop_TopBarrier.html new file mode 100644 index 000000000..8756b4455 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_TopBarrier.html @@ -0,0 +1,20 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=725796 +--> +<head> + <title>Test for Bug 725796</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=725796">Mozilla Bug 725796</a> + +<script type="application/javascript;version=1.7" src="browserElement_TopBarrier.js"> +</script> + +</body> +</html> + diff --git a/dom/browser-element/mochitest/test_browserElement_oop_Viewmode.html b/dom/browser-element/mochitest/test_browserElement_oop_Viewmode.html new file mode 100644 index 000000000..286dd3989 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_Viewmode.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1162844 +--> +<head> + <title>Test for Bug 1162844</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=1162844">Mozilla Bug 1162844</a> + +<script type="application/javascript;version=1.7" src="browserElement_Viewmode.js"> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_VisibilityChange.html b/dom/browser-element/mochitest/test_browserElement_oop_VisibilityChange.html new file mode 100644 index 000000000..546882c1c --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_VisibilityChange.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=868816 +--> +<head> + <title>Test for Bug 868816</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.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=868816">Mozilla Bug 868816</a> + +<script type="application/javascript;version=1.7" src='browserElement_VisibilityChange.js'> +</script> + +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptions.html b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptions.html new file mode 100644 index 000000000..36479ee06 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptions.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 770239</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_XFrameOptions.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsAllowFrom.html b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsAllowFrom.html new file mode 100644 index 000000000..801c7879f --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsAllowFrom.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 690168</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_XFrameOptionsAllowFrom.js"> +</script> +</body> +</html> diff --git a/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsDeny.html b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsDeny.html new file mode 100644 index 000000000..edd91dbd7 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsDeny.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 770239</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_XFrameOptionsDeny.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsSameOrigin.html b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsSameOrigin.html new file mode 100644 index 000000000..e0ecbabc4 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_XFrameOptionsSameOrigin.html @@ -0,0 +1,13 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 770239</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.7" src="browserElement_XFrameOptionsSameOrigin.js"> +</script> +</body> +</html>
\ No newline at end of file diff --git a/dom/browser-element/mochitest/test_browserElement_oop_getWebManifest.html b/dom/browser-element/mochitest/test_browserElement_oop_getWebManifest.html new file mode 100644 index 000000000..4ee13d924 --- /dev/null +++ b/dom/browser-element/mochitest/test_browserElement_oop_getWebManifest.html @@ -0,0 +1,16 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 1169633</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="/tests/dom/browser-element/mochitest/browserElementTestHelpers.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<script type="application/javascript;version=1.8" + src="async.js"></script> +<script type="application/javascript;version=1.8" + src="browserElement_getWebManifest.js"> +</script> +</body> +</html> |