mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 706351 - Add support for Console API r=mbrubeck
This commit is contained in:
parent
712552b3b3
commit
633f56677a
@ -198,6 +198,7 @@ var BrowserApp = {
|
||||
OfflineApps.init();
|
||||
IndexedDB.init();
|
||||
XPInstallObserver.init();
|
||||
ConsoleAPI.init();
|
||||
|
||||
// Init LoginManager
|
||||
Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager);
|
||||
@ -259,6 +260,7 @@ var BrowserApp = {
|
||||
IndexedDB.uninit();
|
||||
ViewportHandler.uninit();
|
||||
XPInstallObserver.uninit();
|
||||
ConsoleAPI.uninit();
|
||||
},
|
||||
|
||||
get tabs() {
|
||||
@ -2550,3 +2552,110 @@ var IndexedDB = {
|
||||
NativeWindow.doorhanger.show(message, notificationID, buttons, tab.id);
|
||||
}
|
||||
};
|
||||
|
||||
var ConsoleAPI = {
|
||||
init: function init() {
|
||||
Services.obs.addObserver(this, "console-api-log-event", false);
|
||||
},
|
||||
|
||||
uninit: function uninit() {
|
||||
Services.obs.removeObserver(this, "console-api-log-event", false);
|
||||
},
|
||||
|
||||
observe: function observe(aMessage, aTopic, aData) {
|
||||
aMessage = aMessage.wrappedJSObject;
|
||||
|
||||
let mappedArguments = Array.map(aMessage.arguments, this.formatResult, this);
|
||||
let joinedArguments = Array.join(mappedArguments, " ");
|
||||
|
||||
if (aMessage.level == "error" || aMessage.level == "warn") {
|
||||
let flag = (aMessage.level == "error" ? Ci.nsIScriptError.errorFlag : Ci.nsIScriptError.warningFlag);
|
||||
let consoleMsg = Cc["@mozilla.org/scripterror;1"].createInstance(Ci.nsIScriptError);
|
||||
consoleMsg.init(joinedArguments, null, null, 0, 0, flag, "content javascript");
|
||||
Services.console.logMessage(consoleMsg);
|
||||
} else if (aMessage.level == "trace") {
|
||||
let bundle = Services.strings.createBundle("chrome://browser/locale/browser.properties");
|
||||
let args = aMessage.arguments;
|
||||
let filename = this.abbreviateSourceURL(args[0].filename);
|
||||
let functionName = args[0].functionName || bundle.GetStringFromName("stacktrace.anonymousFunction");
|
||||
let lineNumber = args[0].lineNumber;
|
||||
|
||||
let body = bundle.formatStringFromName("stacktrace.outputMessage", [filename, functionName, lineNumber], 3);
|
||||
body += "\n";
|
||||
args.forEach(function(aFrame) {
|
||||
let functionName = aFrame.functionName || bundle.GetStringFromName("stacktrace.anonymousFunction");
|
||||
body += " " + aFrame.filename + " :: " + functionName + " :: " + aFrame.lineNumber + "\n";
|
||||
});
|
||||
|
||||
Services.console.logStringMessage(body);
|
||||
} else if (aMessage.level == "time" && aMessage.arguments) {
|
||||
let bundle = Services.strings.createBundle("chrome://browser/locale/browser.properties");
|
||||
let body = bundle.formatStringFromName("timer.start", [aMessage.arguments.name], 1);
|
||||
Services.console.logStringMessage(body);
|
||||
} else if (aMessage.level == "timeEnd" && aMessage.arguments) {
|
||||
let bundle = Services.strings.createBundle("chrome://browser/locale/browser.properties");
|
||||
let body = bundle.formatStringFromName("timer.end", [aMessage.arguments.name, aMessage.arguments.duration], 2);
|
||||
Services.console.logStringMessage(body);
|
||||
} else if (["group", "groupCollapsed", "groupEnd"].indexOf(aMessage.level) != -1) {
|
||||
// Do nothing yet
|
||||
} else {
|
||||
Services.console.logStringMessage(joinedArguments);
|
||||
}
|
||||
},
|
||||
|
||||
getResultType: function getResultType(aResult) {
|
||||
let type = aResult === null ? "null" : typeof aResult;
|
||||
if (type == "object" && aResult.constructor && aResult.constructor.name)
|
||||
type = aResult.constructor.name;
|
||||
return type.toLowerCase();
|
||||
},
|
||||
|
||||
formatResult: function formatResult(aResult) {
|
||||
let output = "";
|
||||
let type = this.getResultType(aResult);
|
||||
switch (type) {
|
||||
case "string":
|
||||
case "boolean":
|
||||
case "date":
|
||||
case "error":
|
||||
case "number":
|
||||
case "regexp":
|
||||
output = aResult.toString();
|
||||
break;
|
||||
case "null":
|
||||
case "undefined":
|
||||
output = type;
|
||||
break;
|
||||
default:
|
||||
if (aResult.toSource) {
|
||||
try {
|
||||
output = aResult.toSource();
|
||||
} catch (ex) { }
|
||||
}
|
||||
if (!output || output == "({})") {
|
||||
output = aResult.toString();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return output;
|
||||
},
|
||||
|
||||
abbreviateSourceURL: function abbreviateSourceURL(aSourceURL) {
|
||||
// Remove any query parameters.
|
||||
let hookIndex = aSourceURL.indexOf("?");
|
||||
if (hookIndex > -1)
|
||||
aSourceURL = aSourceURL.substring(0, hookIndex);
|
||||
|
||||
// Remove a trailing "/".
|
||||
if (aSourceURL[aSourceURL.length - 1] == "/")
|
||||
aSourceURL = aSourceURL.substring(0, aSourceURL.length - 1);
|
||||
|
||||
// Remove all but the last path component.
|
||||
let slashIndex = aSourceURL.lastIndexOf("/");
|
||||
if (slashIndex > -1)
|
||||
aSourceURL = aSourceURL.substring(slashIndex + 1);
|
||||
|
||||
return aSourceURL;
|
||||
}
|
||||
};
|
||||
|
@ -250,16 +250,26 @@ browser.menu.showCharacterEncoding=false
|
||||
# values for charsets that the user can select from in the Character Encoding menu.
|
||||
intl.charsetmenu.browser.static=iso-8859-1,utf-8,x-gbk,big5,iso-2022-jp,shift_jis,euc-jp
|
||||
|
||||
#Application Menu
|
||||
# Application Menu
|
||||
appMenu.more=More
|
||||
|
||||
#Text Selection
|
||||
# Text Selection
|
||||
selectionHelper.textCopied=Text copied to clipboard
|
||||
|
||||
#Context menu
|
||||
# Context menu
|
||||
contextmenu.openInNewTab=Open Link in New Tab
|
||||
contextmenu.changeInputMethod=Select Input Method
|
||||
contextmenu.fullScreen=Full Screen
|
||||
|
||||
#Select UI
|
||||
# Select UI
|
||||
selectHelper.closeMultipleSelectDialog=Done
|
||||
|
||||
# Web Console API
|
||||
stacktrace.anonymousFunction=<anonymous>
|
||||
stacktrace.outputMessage=Stack trace from %S, function %S, line %S.
|
||||
timer.start=%S: timer started
|
||||
|
||||
# LOCALIZATION NOTE (timer.end):
|
||||
# This string is used to display the result of the console.timeEnd() call.
|
||||
# %1$S=name of timer, %2$S=number of milliseconds
|
||||
timer.end=%1$S: %2$Sms
|
||||
|
Loading…
Reference in New Issue
Block a user