| Index: chrome/content/common.js |
| =================================================================== |
| --- a/chrome/content/common.js |
| +++ b/chrome/content/common.js |
| @@ -1,20 +1,14 @@ |
| const Cc = Components.classes; |
| const Ci = Components.interfaces; |
| const Cr = Components.results; |
| const Cu = Components.utils; |
| -const MILLIS_IN_SECOND = 1000; |
| -const MILLIS_IN_MINUTE = 60 * MILLIS_IN_SECOND; |
| -const MILLIS_IN_HOUR = 60 * MILLIS_IN_MINUTE; |
| -const MILLIS_IN_DAY = 24 * MILLIS_IN_HOUR; |
| - |
| -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
| -Cu.import("resource://gre/modules/Services.jsm"); |
| +const {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); |
| const SDK = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {}); |
| SDK.require("sdk/tabs"); |
| function require(module) |
| { |
| let result = {}; |
| result.wrappedJSObject = result; |
| @@ -53,22 +47,16 @@ let {CSSRules} = require("cssRules"); |
| let {IO} = require("io"); |
| let {Notification} = require("notification"); |
| let {Prefs} = require("prefs"); |
| let {RequestNotifier} = require("requestNotifier"); |
| let {Synchronizer} = require("synchronizer"); |
| let {UI} = require("ui"); |
| let {Utils} = require("utils"); |
| -let geckoVersion = Services.appinfo.platformVersion; |
| -function compareGeckoVersion(version) |
| -{ |
| - return Services.vc.compare(geckoVersion, version); |
| -} |
| - |
| function prepareFilterComponents(keepListeners) |
| { |
| let FilterNotifierGlobal = getModuleGlobal("filterNotifier"); |
| this._backup = { |
| subscriptions: FilterStorage.subscriptions, |
| storageKnown: FilterStorage.knownSubscriptions, |
| subscriptionsKnown: Subscription.knownSubscriptions, |
| @@ -134,311 +122,16 @@ function preparePrefs() |
| } |
| function restorePrefs() |
| { |
| for (let pref in this._pbackup) |
| Prefs[pref] = this._pbackup[pref]; |
| } |
| -function setupVirtualTime(processTimers) |
| -{ |
| - let currentTime = 100000 * MILLIS_IN_HOUR; |
| - let startTime = currentTime; |
| - let scheduledTasks = []; |
| - |
| - let modules = Array.prototype.slice.call(arguments, 1); |
| - this._virtualTimeModules = modules; |
| - |
| - for (let module of this._virtualTimeModules) |
| - { |
| - let global = Cu.getGlobalForObject(getModuleGlobal(module)); |
| - |
| - // Replace Date.now() function |
| - this["_origNow" + module] = global.Date.now; |
| - global.Date.now = function() currentTime; |
| - } |
| - |
| - // Wrap timers |
| - if (processTimers) |
| - { |
| - processTimers(function wrapTimer(timer) |
| - { |
| - let wrapper = Object.create(timer); |
| - let callback = timer.callback; |
| - wrapper.handler = function() callback.notify(wrapper); |
| - wrapper.nextExecution = currentTime + timer.delay; |
| - scheduledTasks.push(wrapper); |
| - timer.cancel(); |
| - return wrapper; |
| - }); |
| - } |
| - |
| - // Register observer to track outstanding requests |
| - this._outstandingRequests = 0; |
| - this.observe = function(subject, topic, data) |
| - { |
| - let orig = this._outstandingRequests; |
| - if (topic == "http-on-modify-request") |
| - this._outstandingRequests++; |
| - else if (topic == "http-on-examine-response") |
| - this._outstandingRequests--; |
| - }; |
| - this.QueryInterface = XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]); |
| - Services.obs.addObserver(this, "http-on-modify-request", true); |
| - Services.obs.addObserver(this, "http-on-examine-response", true); |
| - |
| - this.runScheduledTasks = function(maxHours, initial, skip) |
| - { |
| - if (typeof maxHours != "number") |
| - throw new Error("Numerical parameter expected"); |
| - if (typeof initial != "number") |
| - initial = 0; |
| - if (typeof skip != "number") |
| - skip = 0; |
| - |
| - startTime = currentTime; |
| - if (initial >= 0) |
| - { |
| - this._runScheduledTasks(initial); |
| - maxHours -= initial; |
| - } |
| - if (skip) |
| - { |
| - this._skipTasks(skip); |
| - maxHours -= skip; |
| - } |
| - this._runScheduledTasks(maxHours); |
| - } |
| - |
| - this._runScheduledTasks = function(maxHours) |
| - { |
| - let endTime = currentTime + maxHours * MILLIS_IN_HOUR; |
| - while (true) |
| - { |
| - let nextTask = null; |
| - for (let task of scheduledTasks) |
| - { |
| - if (!nextTask || nextTask.nextExecution > task.nextExecution) |
| - nextTask = task; |
| - } |
| - if (!nextTask || nextTask.nextExecution > endTime) |
| - break; |
| - |
| - currentTime = nextTask.nextExecution; |
| - nextTask.handler(); |
| - |
| - // Let all asynchronous actions finish |
| - let thread = Services.tm.currentThread; |
| - let loopStartTime = Date.now(); |
| - |
| - while (this._outstandingRequests > 0 || thread.hasPendingEvents()) |
| - { |
| - thread.processNextEvent(true); |
| - |
| - if (Date.now() - loopStartTime > 5000) |
| - throw new Error("Test stuck in a download loop"); |
| - } |
| - |
| - if (nextTask.type == Components.interfaces.nsITimer.TYPE_ONE_SHOT) |
| - scheduledTasks = scheduledTasks.filter(function(task) task != nextTask); |
| - else |
| - nextTask.nextExecution = currentTime + nextTask.delay; |
| - } |
| - |
| - currentTime = endTime; |
| - } |
| - |
| - this._skipTasks = function(hours) |
| - { |
| - let newTasks = []; |
| - currentTime += hours * MILLIS_IN_HOUR; |
| - for (let task of scheduledTasks) |
| - { |
| - if (task.nextExecution >= currentTime) |
| - newTasks.push(task); |
| - else if (task.type != Components.interfaces.nsITimer.TYPE_ONE_SHOT) |
| - { |
| - task.nextExecution = currentTime; |
| - newTasks.push(task); |
| - } |
| - } |
| - scheduledTasks = newTasks; |
| - } |
| - |
| - this.getTimeOffset = function() (currentTime - startTime) / MILLIS_IN_HOUR; |
| - |
| - this.__defineGetter__("currentTime", function() currentTime); |
| -} |
| - |
| -function restoreVirtualTime() |
| -{ |
| - for (let module of this._virtualTimeModules) |
| - { |
| - let global = Cu.getGlobalForObject(getModuleGlobal(module)); |
| - |
| - // Restore Date.now() function |
| - if ("_origNow" + module in this) |
| - { |
| - global.Date.now = this["_origNow" + module]; |
| - delete this["_origNow" + module]; |
| - } |
| - } |
| - |
| - Services.obs.removeObserver(this, "http-on-modify-request", true); |
| - Services.obs.removeObserver(this, "http-on-examine-response", true); |
| -} |
| - |
| -function setupVirtualXMLHttp() |
| -{ |
| - let host = "http://example.com"; |
| - let requestHandlers = {}; |
| - |
| - let XMLHttpRequest = function() |
| - { |
| - this._loadHandlers = []; |
| - this._errorHandlers = []; |
| - }; |
| - XMLHttpRequest.prototype = { |
| - _path: null, |
| - _data: null, |
| - _queryString: null, |
| - _loadHandlers: null, |
| - _errorHandlers: null, |
| - status: 0, |
| - readyState: 0, |
| - responseText: null, |
| - |
| - addEventListener: function(eventName, handler, capture) |
| - { |
| - let list; |
| - if (eventName == "load") |
| - list = this._loadHandlers; |
| - else if (eventName == "error") |
| - list = this._errorHandlers; |
| - else |
| - throw new Error("Event type " + eventName + " not supported"); |
| - |
| - if (list.indexOf(handler) < 0) |
| - list.push(handler); |
| - }, |
| - |
| - removeEventListener: function(eventName, handler, capture) |
| - { |
| - let list; |
| - if (eventName == "load") |
| - list = this._loadHandlers; |
| - else if (eventName == "error") |
| - list = this._errorHandlers; |
| - else |
| - throw new Error("Event type " + eventName + " not supported"); |
| - |
| - let index = list.indexOf(handler); |
| - if (index >= 0) |
| - list.splice(index, 1); |
| - }, |
| - |
| - open: function(method, url, async, user, password) |
| - { |
| - if (method != "GET") |
| - throw new Error("Only GET requests are currently supported"); |
| - if (typeof async != "undefined" && !async) |
| - throw new Error("Sync requests are not supported"); |
| - if (typeof user != "undefined" || typeof password != "undefined") |
| - throw new Error("User authentification is not supported"); |
| - |
| - let match = /^data:[^,]+,/.exec(url); |
| - if (match) |
| - { |
| - this._data = decodeURIComponent(url.substr(match[0].length)); |
| - return; |
| - } |
| - |
| - if (url.substr(0, host.length) != host) |
| - throw new Error("Unexpected URL: " + url + " (URL starting with " + host + "expected)"); |
| - |
| - this._path = url.substr(host.length); |
| - |
| - let queryIndex = this._path.indexOf("?"); |
| - this._queryString = ""; |
| - if (queryIndex >= 0) |
| - { |
| - this._queryString = this._path.substr(queryIndex + 1); |
| - this._path = this._path.substr(0, queryIndex); |
| - } |
| - }, |
| - |
| - send: function(data) |
| - { |
| - if (!this._data && !this._path) |
| - throw new Error("No request path set"); |
| - if (typeof data != "undefined" && data) |
| - throw new Error("Sending data to server is not supported"); |
| - |
| - Utils.runAsync(function() |
| - { |
| - let result = [Cr.NS_OK, 404, ""]; |
| - if (this._data) |
| - result = [Cr.NS_OK, 0, this._data]; |
| - else if (this._path in requestHandlers) |
| - result = requestHandlers[this._path]({method: "GET", path: this._path, queryString: this._queryString}); |
| - [this.channel.status, this.channel.responseStatus, this.responseText] = result; |
| - this.status = this.channel.responseStatus; |
| - |
| - let eventName = (this.channel.status == Cr.NS_OK ? "load" : "error"); |
| - let event = {type: eventName}; |
| - for (let handler of this["_" + eventName + "Handlers"]) |
| - handler.call(this, event); |
| - }.bind(this)); |
| - }, |
| - |
| - overrideMimeType: function(mime) |
| - { |
| - }, |
| - |
| - channel: |
| - { |
| - status: -1, |
| - responseStatus: 0, |
| - loadFlags: 0, |
| - INHIBIT_CACHING: 0, |
| - VALIDATE_ALWAYS: 0, |
| - QueryInterface: function() this |
| - } |
| - } |
| - |
| - this.registerHandler = function(path, handler) requestHandlers[path] = handler; |
| - |
| - let modules = Array.prototype.slice.call(arguments, 1); |
| - this._virtualXMLHttpModules = modules; |
| - for (let module of this._virtualTimeModules) |
| - { |
| - let global = getModuleGlobal(module); |
| - |
| - // Replace XMLHttpRequest constructor |
| - this["_origXMLHttpRequest" + module] = global.XMLHttpRequest; |
| - global.XMLHttpRequest = XMLHttpRequest; |
| - } |
| -} |
| - |
| -function restoreVirtualXMLHttp() |
| -{ |
| - for (let module of this._virtualXMLHttpModules) |
| - { |
| - let global = getModuleGlobal(module); |
| - |
| - // Restore XMLHttpRequest constructor |
| - if ("_origXMLHttpRequest" + module in this) |
| - { |
| - global.XMLHttpRequest = this["_origXMLHttpRequest" + module]; |
| - delete this["_origXMLHttpRequest" + module]; |
| - } |
| - } |
| -} |
| - |
| function showProfilingData(debuggerService) |
| { |
| let scripts = []; |
| debuggerService.enumerateScripts({ |
| enumerateScript: function(script) |
| { |
| scripts.push(script); |
| } |