diff --git a/devtools/client/webconsole/test/browser.ini b/devtools/client/webconsole/test/browser.ini index 12c42c6283b..88c9125322b 100644 --- a/devtools/client/webconsole/test/browser.ini +++ b/devtools/client/webconsole/test/browser.ini @@ -74,6 +74,7 @@ support-files = test-console-extras.html test-console-replaced-api.html test-console-server-logging.sjs + test-console-server-logging-array.sjs test-console.html test-console-workers.html test-console-table.html diff --git a/devtools/client/webconsole/test/browser_console_server_logging.js b/devtools/client/webconsole/test/browser_console_server_logging.js index 8be38928c73..60d02f4acff 100644 --- a/devtools/client/webconsole/test/browser_console_server_logging.js +++ b/devtools/client/webconsole/test/browser_console_server_logging.js @@ -37,10 +37,41 @@ add_task(function* () { yield updateServerLoggingListener(hud); }); +add_task(function* () { + const TEST_URI = "http://example.com/browser/devtools/client/webconsole/test/test-console-server-logging-array.sjs"; + + yield loadTab(TEST_URI); + + let hud = yield openConsole(); + + // Set logging filter and wait till it's set on the backend + hud.setFilterState("serverlog", true); + yield updateServerLoggingListener(hud); + + BrowserReloadSkipCache(); + + // Note that the test is also checking out the (printf like) + // formatters and encoding of UTF8 characters (see the one at the end). + let text = "Object { best: \"Firefox\", reckless: \"Chrome\", new_ie: \"Safari\", new_new_ie: \"Edge\" }"; + + yield waitForMessages({ + webconsole: hud, + messages: [{ + text: text, + category: CATEGORY_SERVER, + severity: SEVERITY_LOG, + }], + }) + + // Clean up filter + hud.setFilterState("serverlog", false); + yield updateServerLoggingListener(hud); +}); + function updateServerLoggingListener(hud) { let deferred = promise.defer(); hud.ui._updateServerLoggingListener(response => { deferred.resolve(response); }); return deferred.promise; -} \ No newline at end of file +} diff --git a/devtools/client/webconsole/test/test-console-server-logging-array.sjs b/devtools/client/webconsole/test/test-console-server-logging-array.sjs new file mode 100644 index 00000000000..bba39426420 --- /dev/null +++ b/devtools/client/webconsole/test/test-console-server-logging-array.sjs @@ -0,0 +1,32 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +function handleRequest(request, response) +{ + var page = "" + + "" + + "

hello world!

" + + ""; + + var data = { + "version": "4.1.0", + "columns": ["log", "backtrace", "type"], + "rows":[[ + [{ "best": "Firefox", "reckless": "Chrome", "new_ie": "Safari", "new_new_ie": "Edge"}], + "C:\\src\\www\\serverlogging\\test7.php:4:1", + "" + ]], + }; + + // Put log into headers. + var value = b64EncodeUnicode(JSON.stringify(data)); + response.setHeader("X-ChromeLogger-Data", value, false); + + response.write(page); +} + +function b64EncodeUnicode(str) { + return btoa(unescape(encodeURIComponent(str))); +} diff --git a/devtools/client/webconsole/test/test-console-server-logging.sjs b/devtools/client/webconsole/test/test-console-server-logging.sjs index 167a6e39a31..7177e71852a 100644 --- a/devtools/client/webconsole/test/test-console-server-logging.sjs +++ b/devtools/client/webconsole/test/test-console-server-logging.sjs @@ -29,4 +29,4 @@ function handleRequest(request, response) function b64EncodeUnicode(str) { return btoa(unescape(encodeURIComponent(str))); -} \ No newline at end of file +} diff --git a/devtools/shared/webconsole/server-logger.js b/devtools/shared/webconsole/server-logger.js index 4f7a8940c6f..b24be573b6a 100644 --- a/devtools/shared/webconsole/server-logger.js +++ b/devtools/shared/webconsole/server-logger.js @@ -408,7 +408,15 @@ function format(msg) { msg.styles = []; // Remove and get the first log (in which the specifiers are). - let firstString = msg.logs.shift(); + // Note that the first string doesn't have to be specified. + // An example of a log on the server side: + // ChromePhp::log("server info: ", $_SERVER); + // ChromePhp::log($_SERVER); + let firstString = ""; + if (typeof msg.logs[0] == "string") { + firstString = msg.logs.shift(); + } + // All the specifiers present in the first string. let splitLogRegExp = /(.*?)(%[oOcsdif]|$)/g; let splitLogRegExpRes;