mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-25 11:15:34 +00:00
c500e2593d
This patch contains 2 parts: - First one is adding a label + icon in the settings panel next to the Scratchpad tool entry. This is mainly re-adding what was done for Bug 1527294. - Second is adding a deprecation warning message *in* the Scratchpad panel. This is using the NotificationBox that is already used in the panel. Both have a link to the deprecated tools MDN page, in which we'll add a Scratchpad section soon. Differential Revision: https://phabricator.services.mozilla.com/D43206 --HG-- extra : moz-landing-system : lando
233 lines
5.8 KiB
JavaScript
233 lines
5.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
"use strict";
|
|
|
|
function test() {
|
|
waitForExplicitFinish();
|
|
|
|
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
|
|
BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(function() {
|
|
openScratchpad(runTests);
|
|
});
|
|
|
|
BrowserTestUtils.loadURI(
|
|
gBrowser,
|
|
"data:text/html,test context switch in Scratchpad"
|
|
);
|
|
}
|
|
|
|
function runTests() {
|
|
const sp = gScratchpadWindow.Scratchpad;
|
|
const contentMenu = gScratchpadWindow.document.getElementById(
|
|
"sp-menu-content"
|
|
);
|
|
const chromeMenu = gScratchpadWindow.document.getElementById(
|
|
"sp-menu-browser"
|
|
);
|
|
const notificationBox = sp.notificationBox;
|
|
|
|
ok(contentMenu, "found #sp-menu-content");
|
|
ok(chromeMenu, "found #sp-menu-browser");
|
|
ok(notificationBox, "found Scratchpad.notificationBox");
|
|
|
|
const tests = [
|
|
{
|
|
method: "run",
|
|
prepare: async function() {
|
|
sp.setContentContext();
|
|
|
|
is(
|
|
sp.executionContext,
|
|
gScratchpadWindow.SCRATCHPAD_CONTEXT_CONTENT,
|
|
"executionContext is content"
|
|
);
|
|
|
|
is(
|
|
contentMenu.getAttribute("checked"),
|
|
"true",
|
|
"content menuitem is checked"
|
|
);
|
|
|
|
isnot(
|
|
chromeMenu.getAttribute("checked"),
|
|
"true",
|
|
"chrome menuitem is not checked"
|
|
);
|
|
|
|
is(
|
|
notificationBox.currentNotification.messageText.textContent,
|
|
"Scratchpad will be disabled in a future release. Learn more…",
|
|
"The deprecation warning is displayed in content context"
|
|
);
|
|
|
|
sp.editor.setText("window.foobarBug636725 = 'aloha';");
|
|
|
|
const pageResult = await inContent(function() {
|
|
return content.wrappedJSObject.foobarBug636725;
|
|
});
|
|
ok(!pageResult, "no content.foobarBug636725");
|
|
},
|
|
then: () =>
|
|
ContentTask.spawn(gBrowser.selectedBrowser, null, function() {
|
|
is(
|
|
content.wrappedJSObject.foobarBug636725,
|
|
"aloha",
|
|
"content.foobarBug636725 has been set"
|
|
);
|
|
}),
|
|
},
|
|
{
|
|
method: "run",
|
|
prepare: function() {
|
|
sp.setBrowserContext();
|
|
|
|
is(
|
|
sp.executionContext,
|
|
gScratchpadWindow.SCRATCHPAD_CONTEXT_BROWSER,
|
|
"executionContext is chrome"
|
|
);
|
|
|
|
is(
|
|
chromeMenu.getAttribute("checked"),
|
|
"true",
|
|
"chrome menuitem is checked"
|
|
);
|
|
|
|
isnot(
|
|
contentMenu.getAttribute("checked"),
|
|
"true",
|
|
"content menuitem is not checked"
|
|
);
|
|
|
|
const { allNotifications } = notificationBox;
|
|
is(
|
|
allNotifications.length,
|
|
2,
|
|
"There are 2 notifications in browser context"
|
|
);
|
|
|
|
is(
|
|
allNotifications[0].messageText.textContent,
|
|
"This scratchpad executes in the Browser context.",
|
|
"There is a notification in browser context"
|
|
);
|
|
|
|
is(
|
|
allNotifications[1].messageText.textContent,
|
|
"Scratchpad will be disabled in a future release. Learn more…",
|
|
"The deprecation warning is displayed"
|
|
);
|
|
|
|
const [from, to] = sp.editor.getPosition(31, 32);
|
|
sp.editor.replaceText("2'", from, to);
|
|
|
|
is(
|
|
sp.getText(),
|
|
"window.foobarBug636725 = 'aloha2';",
|
|
"setText() worked"
|
|
);
|
|
},
|
|
then: function() {
|
|
is(
|
|
window.foobarBug636725,
|
|
"aloha2",
|
|
"window.foobarBug636725 has been set"
|
|
);
|
|
|
|
delete window.foobarBug636725;
|
|
ok(!window.foobarBug636725, "no window.foobarBug636725");
|
|
},
|
|
},
|
|
{
|
|
method: "run",
|
|
prepare: function() {
|
|
sp.editor.replaceText("gBrowser", sp.editor.getPosition(7));
|
|
|
|
is(
|
|
sp.getText(),
|
|
"window.gBrowser",
|
|
"setText() worked with no end for the replace range"
|
|
);
|
|
},
|
|
then: function([, , result]) {
|
|
is(
|
|
result.class,
|
|
"Object",
|
|
"chrome context has access to chrome objects"
|
|
);
|
|
},
|
|
},
|
|
{
|
|
method: "run",
|
|
prepare: function() {
|
|
// Check that the sandbox is cached.
|
|
sp.editor.setText("typeof foobarBug636725cache;");
|
|
},
|
|
then: function([, , result]) {
|
|
is(result, "undefined", "global variable does not exist");
|
|
},
|
|
},
|
|
{
|
|
method: "run",
|
|
prepare: function() {
|
|
sp.editor.setText(
|
|
"window.foobarBug636725cache = 'foo';" +
|
|
"typeof foobarBug636725cache;"
|
|
);
|
|
},
|
|
then: function([, , result]) {
|
|
is(
|
|
result,
|
|
"string",
|
|
"global variable exists across two different executions"
|
|
);
|
|
},
|
|
},
|
|
{
|
|
method: "run",
|
|
prepare: function() {
|
|
sp.editor.setText(
|
|
"window.foobarBug636725cache2 = 'foo';" +
|
|
"typeof foobarBug636725cache2;"
|
|
);
|
|
},
|
|
then: function([, , result]) {
|
|
is(
|
|
result,
|
|
"string",
|
|
"global variable exists across two different executions"
|
|
);
|
|
},
|
|
},
|
|
{
|
|
method: "run",
|
|
prepare: function() {
|
|
sp.setContentContext();
|
|
|
|
is(
|
|
sp.executionContext,
|
|
gScratchpadWindow.SCRATCHPAD_CONTEXT_CONTENT,
|
|
"executionContext is content"
|
|
);
|
|
|
|
sp.editor.setText("typeof foobarBug636725cache2;");
|
|
},
|
|
then: function([, , result]) {
|
|
is(
|
|
result,
|
|
"undefined",
|
|
"global variable no longer exists after changing the context"
|
|
);
|
|
},
|
|
},
|
|
];
|
|
|
|
runAsyncCallbackTests(sp, tests).then(() => {
|
|
sp.setBrowserContext();
|
|
sp.editor.setText(
|
|
"delete foobarBug636725cache;" + "delete foobarBug636725cache2;"
|
|
);
|
|
sp.run().then(finish);
|
|
});
|
|
}
|