diff options
Diffstat (limited to 'remote/cdp/test/browser/log')
-rw-r--r-- | remote/cdp/test/browser/log/browser.ini | 15 | ||||
-rw-r--r-- | remote/cdp/test/browser/log/browser_entryAdded.js | 138 | ||||
-rw-r--r-- | remote/cdp/test/browser/log/head.js | 9 |
3 files changed, 162 insertions, 0 deletions
diff --git a/remote/cdp/test/browser/log/browser.ini b/remote/cdp/test/browser/log/browser.ini new file mode 100644 index 0000000000..d18972ca94 --- /dev/null +++ b/remote/cdp/test/browser/log/browser.ini @@ -0,0 +1,15 @@ +[DEFAULT] +tags = cdp +subsuite = remote +args = + --remote-debugging-port + --remote-allow-origins=null +prefs = # Bug 1600054: Make CDP Fission compatible + fission.bfcacheInParent=false + fission.webContentIsolationStrategy=0 +support-files = + !/remote/cdp/test/browser/chrome-remote-interface.js + !/remote/cdp/test/browser/head.js + head.js + +[browser_entryAdded.js] diff --git a/remote/cdp/test/browser/log/browser_entryAdded.js b/remote/cdp/test/browser/log/browser_entryAdded.js new file mode 100644 index 0000000000..1c6ba2e0a8 --- /dev/null +++ b/remote/cdp/test/browser/log/browser_entryAdded.js @@ -0,0 +1,138 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +add_task(async function noEventsWhenLogDomainDisabled({ client }) { + await runEntryAddedTest(client, 0, async () => { + await throwScriptError("foo"); + }); +}); + +add_task(async function noEventsAfterLogDomainDisabled({ client }) { + const { Log } = client; + + await Log.enable(); + await Log.disable(); + + await runEntryAddedTest(client, 0, async () => { + await throwScriptError("foo"); + }); +}); + +add_task(async function noEventsForConsoleMessageWithException({ client }) { + const { Log } = client; + + await Log.enable(); + + const context = await enableRuntime(client); + await runEntryAddedTest(client, 0, async () => { + evaluate(client, context.id, () => { + const foo = {}; + foo.bar(); + }); + }); +}); + +add_task(async function eventsForScriptErrorWithoutException({ client }) { + const { Log } = client; + + await Log.enable(); + + await enableRuntime(client); + const events = await runEntryAddedTest(client, 1, async () => { + throwScriptError({ + text: "foo", + sourceName: "https://foo.bar", + lineNumber: 7, + category: "javascript", + }); + }); + + is(events[0].source, "javascript", "Got expected source"); + is(events[0].level, "error", "Got expected level"); + is(events[0].text, "foo", "Got expected text"); + is(events[0].url, "https://foo.bar", "Got expected url"); + is(events[0].lineNumber, 7, "Got expected line number"); +}); + +add_task(async function eventsForScriptErrorLevels({ client }) { + const { Log } = client; + + await Log.enable(); + + const flags = { + info: Ci.nsIScriptError.infoFlag, + warning: Ci.nsIScriptError.warningFlag, + error: Ci.nsIScriptError.errorFlag, + }; + + await enableRuntime(client); + for (const [level, flag] of Object.entries(flags)) { + const events = await runEntryAddedTest(client, 1, async () => { + throwScriptError({ text: level, flag }); + }); + + is(events[0].text, level, "Got expected text"); + is(events[0].level, level, "Got expected level"); + } +}); + +add_task(async function eventsForScriptErrorContent({ client }) { + const { Log } = client; + + await Log.enable(); + + const context = await enableRuntime(client); + const events = await runEntryAddedTest(client, 1, async () => { + evaluate(client, context.id, () => { + document.execCommand("copy"); + }); + }); + + is(events[0].source, "other", "Got expected source"); + is(events[0].level, "warning", "Got expected level"); + ok( + events[0].text.includes("document.execCommand(‘cut’/‘copy’) was denied"), + "Got expected text" + ); + is(events[0].url, undefined, "Got undefined url"); + is(events[0].lineNumber, 2, "Got expected line number"); +}); + +async function runEntryAddedTest(client, eventCount, callback, options = {}) { + const { Log } = client; + + const EVENT_ENTRY_ADDED = "Log.entryAdded"; + + const history = new RecordEvents(eventCount); + history.addRecorder({ + event: Log.entryAdded, + eventName: EVENT_ENTRY_ADDED, + messageFn: payload => `Received "${EVENT_ENTRY_ADDED}"`, + }); + + const timeBefore = Date.now(); + await callback(); + + const entryAddedEvents = await history.record(); + is(entryAddedEvents.length, eventCount, "Got expected amount of events"); + + if (eventCount == 0) { + return []; + } + + const timeAfter = Date.now(); + + // Check basic details for entryAdded events + entryAddedEvents.forEach(event => { + const timestamp = event.payload.entry.timestamp; + + ok( + timestamp >= timeBefore && timestamp <= timeAfter, + "Got valid timestamp" + ); + }); + + return entryAddedEvents.map(event => event.payload.entry); +} diff --git a/remote/cdp/test/browser/log/head.js b/remote/cdp/test/browser/log/head.js new file mode 100644 index 0000000000..1a1c90fbf6 --- /dev/null +++ b/remote/cdp/test/browser/log/head.js @@ -0,0 +1,9 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +Services.scriptloader.loadSubScript( + "chrome://mochitests/content/browser/remote/cdp/test/browser/head.js", + this +); |