Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
michael@0 | 1 | /* This Source Code Form is subject to the terms of the Mozilla Public |
michael@0 | 2 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
michael@0 | 3 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
michael@0 | 4 | |
michael@0 | 5 | var LogController = {}; //create the logger object |
michael@0 | 6 | |
michael@0 | 7 | LogController.counter = 0; //current log message number |
michael@0 | 8 | LogController.listeners = []; |
michael@0 | 9 | LogController.logLevel = { |
michael@0 | 10 | FATAL: 50, |
michael@0 | 11 | ERROR: 40, |
michael@0 | 12 | WARNING: 30, |
michael@0 | 13 | INFO: 20, |
michael@0 | 14 | DEBUG: 10 |
michael@0 | 15 | }; |
michael@0 | 16 | |
michael@0 | 17 | /* set minimum logging level */ |
michael@0 | 18 | LogController.logLevelAtLeast = function(minLevel) { |
michael@0 | 19 | if (typeof(minLevel) == 'string') { |
michael@0 | 20 | minLevel = LogController.logLevel[minLevel]; |
michael@0 | 21 | } |
michael@0 | 22 | return function (msg) { |
michael@0 | 23 | var msgLevel = msg.level; |
michael@0 | 24 | if (typeof(msgLevel) == 'string') { |
michael@0 | 25 | msgLevel = LogController.logLevel[msgLevel]; |
michael@0 | 26 | } |
michael@0 | 27 | return msgLevel >= minLevel; |
michael@0 | 28 | }; |
michael@0 | 29 | }; |
michael@0 | 30 | |
michael@0 | 31 | /* creates the log message with the given level and info */ |
michael@0 | 32 | LogController.createLogMessage = function(level, info) { |
michael@0 | 33 | var msg = {}; |
michael@0 | 34 | msg.num = LogController.counter; |
michael@0 | 35 | msg.level = level; |
michael@0 | 36 | msg.info = info; |
michael@0 | 37 | msg.timestamp = new Date(); |
michael@0 | 38 | return msg; |
michael@0 | 39 | }; |
michael@0 | 40 | |
michael@0 | 41 | /* helper method to return a sub-array */ |
michael@0 | 42 | LogController.extend = function (args, skip) { |
michael@0 | 43 | var ret = []; |
michael@0 | 44 | for (var i = skip; i<args.length; i++) { |
michael@0 | 45 | ret.push(args[i]); |
michael@0 | 46 | } |
michael@0 | 47 | return ret; |
michael@0 | 48 | }; |
michael@0 | 49 | |
michael@0 | 50 | /* logs message with given level. Currently used locally by log() and error() */ |
michael@0 | 51 | LogController.logWithLevel = function(level, message/*, ...*/) { |
michael@0 | 52 | var msg = LogController.createLogMessage( |
michael@0 | 53 | level, |
michael@0 | 54 | LogController.extend(arguments, 1) |
michael@0 | 55 | ); |
michael@0 | 56 | LogController.dispatchListeners(msg); |
michael@0 | 57 | LogController.counter += 1; |
michael@0 | 58 | }; |
michael@0 | 59 | |
michael@0 | 60 | /* log with level INFO */ |
michael@0 | 61 | LogController.log = function(message/*, ...*/) { |
michael@0 | 62 | LogController.logWithLevel('INFO', message); |
michael@0 | 63 | }; |
michael@0 | 64 | |
michael@0 | 65 | /* log with level ERROR */ |
michael@0 | 66 | LogController.error = function(message/*, ...*/) { |
michael@0 | 67 | LogController.logWithLevel('ERROR', message); |
michael@0 | 68 | }; |
michael@0 | 69 | |
michael@0 | 70 | /* send log message to listeners */ |
michael@0 | 71 | LogController.dispatchListeners = function(msg) { |
michael@0 | 72 | for (var k in LogController.listeners) { |
michael@0 | 73 | var pair = LogController.listeners[k]; |
michael@0 | 74 | if (pair.ident != k || (pair[0] && !pair[0](msg))) { |
michael@0 | 75 | continue; |
michael@0 | 76 | } |
michael@0 | 77 | pair[1](msg); |
michael@0 | 78 | } |
michael@0 | 79 | }; |
michael@0 | 80 | |
michael@0 | 81 | /* add a listener to this log given an identifier, a filter (can be null) and the listener object */ |
michael@0 | 82 | LogController.addListener = function(ident, filter, listener) { |
michael@0 | 83 | if (typeof(filter) == 'string') { |
michael@0 | 84 | filter = LogController.logLevelAtLeast(filter); |
michael@0 | 85 | } else if (filter !== null && typeof(filter) !== 'function') { |
michael@0 | 86 | throw new Error("Filter must be a string, a function, or null"); |
michael@0 | 87 | } |
michael@0 | 88 | var entry = [filter, listener]; |
michael@0 | 89 | entry.ident = ident; |
michael@0 | 90 | LogController.listeners[ident] = entry; |
michael@0 | 91 | }; |
michael@0 | 92 | |
michael@0 | 93 | /* remove a listener from this log */ |
michael@0 | 94 | LogController.removeListener = function(ident) { |
michael@0 | 95 | delete LogController.listeners[ident]; |
michael@0 | 96 | }; |