diff options
Diffstat (limited to 'chrome/code')
-rw-r--r-- | chrome/code/browserOverlay.xul.js | 109 | ||||
-rw-r--r-- | chrome/code/component.js | 21 | ||||
-rw-r--r-- | chrome/code/editRedirect.xul.js | 103 | ||||
-rw-r--r-- | chrome/code/proxyserver.js | 58 | ||||
-rw-r--r-- | chrome/code/redirect.js | 213 | ||||
-rw-r--r-- | chrome/code/redirector.js | 366 | ||||
-rw-r--r-- | chrome/code/redirectorprefs.js | 76 | ||||
-rw-r--r-- | chrome/code/settings.xul.js | 276 | ||||
-rw-r--r-- | chrome/code/unittest/run.html | 99 | ||||
-rw-r--r-- | chrome/code/unittest/testcases.js | 129 | ||||
-rw-r--r-- | chrome/code/xpcom.js | 28 |
11 files changed, 0 insertions, 1478 deletions
diff --git a/chrome/code/browserOverlay.xul.js b/chrome/code/browserOverlay.xul.js deleted file mode 100644 index 20ff5c6..0000000 --- a/chrome/code/browserOverlay.xul.js +++ /dev/null @@ -1,109 +0,0 @@ - -Components.utils.import("chrome://redirector/content/code/redirector.js"); - -var RedirectorOverlay = { - - strings : null, - prefs : null, - - onLoad : function(event) { - try { - - // initialization code - document.getElementById('contentAreaContextMenu') - .addEventListener("popupshowing", function(e) { RedirectorOverlay.showContextMenu(e); }, false); - - this.strings = document.getElementById("redirector-strings"); - this.prefs = new RedirectorPrefs(); - this.changedPrefs(this.prefs); - this.prefs.addListener(this); - document.addEventListener('keypress', function(event) { - if ((event.charCode == 114) && event.altKey) { //alt+r - RedirectorOverlay.toggleEnabled(); - } - }, true); - } catch(e) { - if (this.strings) { - alert(this.strings.getString("initError") + "\n\n" + e); - } else { - alert(e); - } - } - }, - - onUnload : function(event) { - this.prefs.dispose(); - Redirector.debug("Finished cleanup"); - }, - - changedPrefs : function(prefs) { - var statusImg = document.getElementById('redirector-statusbar-img'); - - if (prefs.enabled) { - statusImg.src = 'chrome://redirector/skin/statusactive.png' - statusImg.setAttribute('tooltiptext', this.strings.getString('enabledTooltip')); - } else { - statusImg.src = 'chrome://redirector/skin/statusinactive.png' - statusImg.setAttribute('tooltiptext', this.strings.getString('disabledTooltip')); - } - - document.getElementById('redirector-status').hidden = !prefs.showStatusBarIcon; - document.getElementById('redirector-context').hidden = !prefs.showContextMenu; - }, - - showContextMenu : function(event) { - if (gContextMenu.onLink) { - document.getElementById("redirector-context").label = this.strings.getString('addLinkUrl'); - } else { - document.getElementById("redirector-context").label = this.strings.getString('addCurrentUrl'); - } - }, - - onContextMenuCommand: function(event) { - var redirect = new Redirect(window.content.location.href, window.content.location.href); - if (gContextMenu.onLink) { - redirect.redirectUrl = gContextMenu.link.toString(); - } - - var args = { saved : false, 'redirect' : redirect }; - window.openDialog("chrome://redirector/content/ui/editRedirect.xul", "redirect", "chrome,dialog,modal,centerscreen", args); - if (args.saved) { - Redirector.addRedirect(args.redirect); - } - }, - - onMenuItemCommand: function(event) { - this.openSettings(); - }, - - toggleEnabled : function(event) { - this.prefs.enabled = !this.prefs.enabled; - }, - - openSettings : function() { - var windowName = "redirectorSettings"; - var windowsMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); - var win = windowsMediator.getMostRecentWindow(windowName); - if (win) { - win.focus(); - } else { - window.openDialog("chrome://redirector/content/ui/settings.xul", - windowName, - "chrome,dialog,resizable=yes,centerscreen", this); - } - gBrowser.selectedTab = gBrowser.addTab("chrome://redirector/content/settings.html"); - }, - - statusBarClick : function(event) { - var LEFT = 0, RIGHT = 2; - - if (event.button == LEFT) { - RedirectorOverlay.toggleEnabled(); - } else if (event.button == RIGHT) { - this.openSettings(); - } - } - -}; -window.addEventListener("load", function(event) { RedirectorOverlay.onLoad(event); }, false); -window.addEventListener("unload", function(event) { RedirectorOverlay.onUnload(event); }, false); diff --git a/chrome/code/component.js b/chrome/code/component.js deleted file mode 100644 index 453d134..0000000 --- a/chrome/code/component.js +++ /dev/null @@ -1,21 +0,0 @@ -Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); -Ci = Components.interfaces; -Cr = Components.results; - -Components.utils.import("chrome://redirector/content/code/redirector.js"); - -function RedirectorComponent() { } - -RedirectorComponent.prototype = { - classDescription: "My Hello World Javascript XPCOM Component", - classID: Components.ID("{b7a7a54f-0581-47ff-b086-d6920cb7a3f7}"), - contractID: "@einaregilsson.com/redirector;1", - QueryInterface: function(iid) { - if (iid.equals(Ci.nsISupports) || iid.equals(Ci.nsIContentPolicy) || iid.equals(Ci.nsIChannelEventSink)) { - return Redirector; - } - throw Cr.NS_ERROR_NO_INTERFACE; - } -}; - -const NSGetFactory = XPCOMUtils.generateNSGetFactory([RedirectorComponent]); diff --git a/chrome/code/editRedirect.xul.js b/chrome/code/editRedirect.xul.js deleted file mode 100644 index 87f6533..0000000 --- a/chrome/code/editRedirect.xul.js +++ /dev/null @@ -1,103 +0,0 @@ -Components.utils.import("chrome://redirector/content/code/redirect.js"); - -var EditRedirect = { - txtExampleUrl : null, - txtIncludePattern : null, - txtRedirectUrl : null, - txtExcludePattern : null, - chkUnescapeMatches : null, - rdoRegex : null, - rdoWildcard : null, - - onLoad : function() { - var args = window.arguments[0]; - var redirect = args.redirect; - this.txtExampleUrl = document.getElementById('txtExampleUrl'); - this.txtIncludePattern = document.getElementById('txtIncludePattern'); - this.txtRedirectUrl= document.getElementById('txtRedirectUrl'); - this.txtExcludePattern= document.getElementById('txtExcludePattern'); - this.chkUnescapeMatches= document.getElementById('chkUnescapeMatches'); - this.rdoWildcard= document.getElementById('rdoWildcard'); - this.rdoRegex = document.getElementById('rdoRegex'); - - this.txtExampleUrl.value = redirect.exampleUrl; - this.txtIncludePattern.value = redirect.includePattern; - this.txtExcludePattern.value = redirect.excludePattern; - this.txtRedirectUrl.value = redirect.redirectUrl; - this.chkUnescapeMatches.setAttribute('checked', redirect.unescapeMatches); - this.rdoRegex.setAttribute('selected', redirect.isRegex()); - this.rdoWildcard.setAttribute('selected', redirect.isWildcard()); - - this.txtIncludePattern.focus(); - this.strings = document.getElementById("redirector-strings"); - }, - - onAccept : function() { - var args = window.arguments[0]; - var msg, title; - args.saved = true; - this.saveValues(args.redirect); - - var oldDisabled = args.redirect.disabled; - args.redirect.disabled = false; - if (!/^\s*$/.test(args.redirect.exampleUrl)) { - var result = args.redirect.getMatch(args.redirect.exampleUrl); - if (!result.isMatch) { - title = this.strings.getString('warningExampleUrlDoesntMatchPatternTitle'); - msg = this.strings.getString('warningExampleUrlDoesntMatchPattern'); - var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); - var rv = ps.confirmEx(window, title, msg, ps.STD_YES_NO_BUTTONS, ps.BUTTON_TITLE_YES, ps.BUTTON_TITLE_NO, null, null, {}); - return rv == 0; - } else { - var resultUrl = result.redirectTo; - if (!resultUrl.match(/https?:/)) { - var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); - var uri = ioService.newURI(args.redirect.exampleUrl, null, null); - resultUrl = uri.resolve(resultUrl); - } - - var secondResult = args.redirect.getMatch(resultUrl); - if (secondResult.isMatch) { - title = this.strings.getString('errorExampleUrlMatchesRecursiveTitle'); - msg = this.strings.getFormattedString('errorExampleUrlMatchesRecursive', [args.redirect.exampleUrl, resultUrl]); - this.msgBox(title, msg); - return false; - } - } - } - return true; - }, - - msgBox : function(title, text) { - Components.classes["@mozilla.org/embedcomp/prompt-service;1"] - .getService(Components.interfaces.nsIPromptService) - .alert(window, title, text); - }, - - saveValues : function(redirect) { - redirect.exampleUrl = this.txtExampleUrl.value; - redirect.includePattern = this.txtIncludePattern.value; - redirect.excludePattern = this.txtExcludePattern.value; - redirect.redirectUrl = this.txtRedirectUrl.value; - redirect.patternType = this.rdoRegex.getAttribute('selected') == 'true' ? Redirect.REGEX : Redirect.WILDCARD; - var val = this.chkUnescapeMatches.getAttribute('checked'); - redirect.unescapeMatches = val === 'true' || val === true; - //Disabled cannot be set here - }, - - testPattern : function() { - try { - var redirect = new Redirect(); - this.saveValues(redirect); - var extName = this.strings.getString('extensionName'); - var result = redirect.test(); - if (result.isMatch) { - this.msgBox(extName, this.strings.getFormattedString('testPatternSuccess', [redirect.includePattern, redirect.exampleUrl, result.redirectTo])); - } else if (result.isExcludeMatch) { - this.msgBox(extName, this.strings.getFormattedString('testPatternExclude', [redirect.exampleUrl, redirect.excludePattern])); - } else { - this.msgBox(extName, this.strings.getFormattedString('testPatternFailure', [redirect.includePattern, redirect.exampleUrl])); - } - } catch(e) {alert(e);} - } -};
\ No newline at end of file diff --git a/chrome/code/proxyserver.js b/chrome/code/proxyserver.js deleted file mode 100644 index 5d4f1d6..0000000 --- a/chrome/code/proxyserver.js +++ /dev/null @@ -1,58 +0,0 @@ -Components.utils.import("chrome://redirector/content/code/xpcom.js"); - -var EXPORTED_SYMBOLS = ['RedirectorProxy']; - -var RedirectorProxy = { - - start : function(port, getUrl) { - dump('Opening Proxy Server Socket on port ' + port); - this.getUrl = getUrl; - this.serverSocket = new ServerSocket(port, true, -1); - this.serverSocket.asyncListen(this); - }, - - onSocketAccepted: function(serverSocket, clientSocket) { - dump("Accepted connection on "+clientSocket.host+":"+clientSocket.port); - var requestStream = clientSocket.openInputStream(0, 0, 0).QueryInterface(Ci.nsIAsyncInputStream); - var responseStream = clientSocket.openOutputStream(Ci.nsITransport.OPEN_BLOCKING, 0, 0); - var tm = Cc["@mozilla.org/thread-manager;1"].getService(); - requestStream.asyncWait({ - onInputStreamReady : function(inputStream) { - RedirectorProxy.processRequest(clientSocket, inputStream, responseStream); - } - },0,0,tm.mainThread); - }, - - processRequest : function(clientSocket, inputStream, responseStream) { - var requestStream = new ScriptableInputStream(inputStream); - requestStream.available(); - var request = ''; - while (requestStream.available()) { - request = request + requestStream.read(2048); - } - var parts = request.split(' '); - dump('\n\n\n' + request + '\n\n\n'); - dump("\n" + parts[0] + " request for " + parts[1]); - var redirectUrl = 'http://einaregilsson.com';//Redirector.getRedirectUrl(parts[1]); - var outp = 'HTTP/1.1 302 Moved Temporarily'; - outp += '\r\nContent-Length: <cl>'; - outp += '\r\nLocation: ' + redirectUrl; - outp += '\r\nX-Redirected-By: Redirector Firefox Extension' - outp += '\r\n\r\n'; - var cl = outp.length -4; - if (cl < 100) { - cl+=2; - } else if (cl < 1000) { - cl += 3; - } else if (cl < 10000) { - cl += 4; - } else if (cl < 100000) { - cl += 5; - } - outp = outp.replace('<cl>', cl); - dump(outp); - responseStream.write(outp, outp.length); - responseStream.close(); - inputStream.close(); - } -}
\ No newline at end of file diff --git a/chrome/code/redirect.js b/chrome/code/redirect.js deleted file mode 100644 index 8b0b1d2..0000000 --- a/chrome/code/redirect.js +++ /dev/null @@ -1,213 +0,0 @@ - -var EXPORTED_SYMBOLS = ['Redirect']; - - -function Redirect(exampleUrl, includePattern, redirectUrl, patternType, excludePattern, unescapeMatches, disabled) { - this._init(exampleUrl, includePattern, redirectUrl, patternType, excludePattern, unescapeMatches, disabled); -} - -//Static -Redirect.WILDCARD = 'W'; -Redirect.REGEX = 'R'; - -Redirect.prototype = { - - //attributes - exampleUrl : null, - - get includePattern() { return this._includePattern; }, - set includePattern(value) { - this._includePattern = value; - this._rxInclude = this._compile(value); - }, - - get excludePattern() { return this._excludePattern; }, - set excludePattern(value) { - this._excludePattern = value; - this._rxExclude = this._compile(value); - }, - - redirectUrl : null, - - get patternType() { return this._patternType; }, - set patternType(value) { - this._patternType = value; - this.compile(); - }, - - unescapeMatches : false, - - disabled : false, - - //Functions - clone : function() { - return new Redirect().fromObject(this.toObject()); - }, - - compile : function() { - this._rxInclude = this._compile(this._includePattern); - this._rxExclude = this._compile(this._excludePattern); - }, - - toObject : function() { - return { - exampleUrl : this.exampleUrl, - includePattern : this.includePattern, - excludePattern : this.excludePattern, - redirectUrl : this.redirectUrl, - patternType : this.patternType, - unescapeMatches : this.unescapeMatches, - disabled : !!this.disabled - }; - }, - - fromObject : function(o) { - for (var prop in o) { - this[prop] = o[prop]; - } - return this; - }, - - copyValues : function(other) { - this.exampleUrl = other.exampleUrl; - this.includePattern = other.includePattern; - this.excludePattern = other.excludePattern; - this.redirectUrl = other.redirectUrl; - this.patternType = other.patternType; - this.unescapeMatches = other.unescapeMatches; - this.disabled = other.disabled; - }, - - equals : function(redirect) { - return this.exampleUrl == redirect.exampleUrl - && this.includePattern == redirect.includePattern - && this.excludePattern == redirect.excludePattern - && this.redirectUrl == redirect.redirectUrl - && this.patternType == redirect.patternType - && this.unescapeMatches == redirect.unescapeMatches - ; - }, - - getMatch: function(url) { - var result = { - isMatch : false, - isExcludeMatch : false, - isDisabledMatch : false, - redirectTo : '', - toString : function() { return "{ isMatch : " + this.isMatch + - ", isExcludeMatch : " + this.isExcludeMatch + - ", isDisabledMatch : " + this.isDisabledMatch + - ", redirectTo : \"" + this.redirectTo + "\"" + - "}"; } - }; - var redirectTo = null; - - redirectTo = this._includeMatch(url); - if (redirectTo !== null) { - if (this.disabled) { - result.isDisabledMatch = true; - } else if (this._excludeMatch(url)) { - result.isExcludeMatch = true; - } else { - result.isMatch = true; - result.redirectTo = redirectTo; - } - } - return result; - }, - - isRegex: function() { - return this.patternType == Redirect.REGEX; - }, - - isWildcard : function() { - return this.patternType == Redirect.WILDCARD; - }, - - test : function() { - return this.getMatch(this.exampleUrl); - }, - - - //Private functions below - - _includePattern : null, - _excludePattern : null, - _patternType : null, - _rxInclude : null, - _rxExclude : null, - - _preparePattern : function(pattern) { - if (this.patternType == Redirect.REGEX) { - return pattern; - } else { //Convert wildcard to regex pattern - var converted = '^'; - for (var i = 0; i < pattern.length; i++) { - var ch = pattern.charAt(i); - if ('()[]{}?.^$\\+'.indexOf(ch) != -1) { - converted += '\\' + ch; - } else if (ch == '*') { - converted += '(.*?)'; - } else { - converted += ch; - } - } - converted += '$'; - return converted; - } - }, - - _compile : function(pattern) { - if (!pattern) { - return null; - } - return new RegExp(this._preparePattern(pattern),"gi"); - }, - - _init : function(exampleUrl, includePattern, redirectUrl, patternType, excludePattern, unescapeMatches, disabled) { - this.exampleUrl = exampleUrl || ''; - this.includePattern = includePattern || ''; - this.excludePattern = excludePattern || ''; - this.redirectUrl = redirectUrl || ''; - this.patternType = patternType || Redirect.WILDCARD; - this.unescapeMatches = (unescapeMatches === 'true' || unescapeMatches === true); - this.disabled = (disabled === 'true' || disabled === true); - }, - - toString : function() { - return 'REDIRECT: {' - + '\n\tExample url : ' + this.exampleUrl - + '\n\tInclude pattern : ' + this.includePattern - + '\n\tExclude pattern : ' + this.excludePattern - + '\n\tRedirect url : ' + this.redirectUrl - + '\n\tPattern type : ' + this.patternType - + '\n\tUnescape matches : ' + this.unescapeMatches - + '\n\tDisabled : ' + this.disabled - + '\n}\n'; - }, - - _includeMatch : function(url) { - if (!this._rxInclude) { - return null; - } - var matches = this._rxInclude.exec(url); - if (!matches) { - return null; - } - var resultUrl = this.redirectUrl; - for (var i = 1; i < matches.length; i++) { - resultUrl = resultUrl.replace(new RegExp('\\$' + i, 'gi'), this.unescapeMatches ? unescape(matches[i]) : matches[i]); - } - this._rxInclude.lastIndex = 0; - return resultUrl; - }, - - _excludeMatch : function(url) { - if (!this._rxExclude) { - return false; - } - var shouldExclude = !!this._rxExclude.exec(url); - this._rxExclude.lastIndex = 0; - return shouldExclude; - } -};
\ No newline at end of file diff --git a/chrome/code/redirector.js b/chrome/code/redirector.js deleted file mode 100644 index 9c7d769..0000000 --- a/chrome/code/redirector.js +++ /dev/null @@ -1,366 +0,0 @@ -Components.utils.import("chrome://redirector/content/code/xpcom.js"); -Components.utils.import("chrome://redirector/content/code/redirect.js"); -Components.utils.import("chrome://redirector/content/code/redirectorprefs.js"); -Components.utils.import("chrome://redirector/content/code/proxyserver.js"); - -var EXPORTED_SYMBOLS = ['Redirector', 'rdump']; - -function rdump(msg) { - //dump(msg + '\n'); -} - -Redirector = { - - get enabled() { - return this._prefs && this._prefs.enabled; - }, - - set enabled(value) { - if (this._prefs) { - this._prefs.enabled = value; - } - }, - - get redirectCount() { - return this._list.length; - }, - - toString : function() { - return "Redirector"; - }, - - addRedirect : function(redirect) { - this._list.push(redirect); - this.save(); - }, - - debug : function(msg) { - if (this._prefs.debugEnabled) { - this._cout.logStringMessage('REDIRECTOR: ' + msg); - } - }, - - deleteRedirect : function(redirect) { - this._list.splice(this._list.indexOf(redirect), 1); - this.save(); - }, - - exportRedirects : function(file) { - var fileStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream); - const PR_WRONLY = 0x02; - const PR_CREATE_FILE = 0x08; - const PR_TRUNCATE = 0x20; - - fileStream.init(file, PR_WRONLY | PR_CREATE_FILE | PR_TRUNCATE, 0644, 0); - var stream = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(Ci.nsIConverterOutputStream); - stream.init(fileStream, "UTF-8", 16384, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); - var rjson = { createdBy : 'Redirector v' + this._prefs.version, createdAt : new Date(), redirects :[]}; - for each (var re in this._list) { - rjson.redirects.push(re.toObject()); - } - stream.writeString(JSON.stringify(rjson, null, 4)); - stream.close(); - }, - - getRedirectAt : function(index) { - return this._list[index]; - }, - - //Get the redirect url for the given url. This will not check if we are enabled, and - //not do any verification on the url, just assume that it is a good string url that is for http/s - getRedirectUrl : function(url) { - this.debug("Checking " + url); - - for each (var redirect in this._list) { - var result = redirect.getMatch(url); - if (result.isExcludeMatch) { - this.debug(url + ' matched exclude pattern ' + redirect.excludePattern + ' so the redirect ' + redirect.includePattern + ' will not be used'); - } else if (result.isDisabledMatch) { - this.debug(url + ' matched pattern ' + redirect.includePattern + ' but the redirect is disabled'); - } else if (result.isMatch) { - redirectUrl = this._makeAbsoluteUrl(url, result.redirectTo); - - //check for loops... - result = redirect.getMatch(redirectUrl); - if (result.isMatch) { - var title = this._getString('invalidRedirectTitle'); - var msg = this._getFormattedString('invalidRedirectText', [redirect.includePattern, url, redirectUrl]); - this.debug(msg); - redirect.disabled = true; - this.save(); - this._msgBox(title, msg); - } else { - this.debug('Redirecting ' + url + ' to ' + redirectUrl); - return redirectUrl; - } - } - } - return null; - }, - - QueryInterface: function(iid) { - if (iid.equals(Ci.nsISupports) || iid.equals(Ci.nsIContentPolicy) || iid.equals(Ci.nsIChannelEventSink)) { - return this; - } - throw Cr.NS_ERROR_NO_INTERFACE; - }, - - _getRedirectsFile : function() { - var file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile); - file.append('redirector.rjson'); - return file; - }, - - handleUpgrades : function(){ - var currentVersion = '2.6'; - this._list = []; - - if (this._prefs.version == currentVersion) { - return; - } - //Here update checks are handled - - try { - var branch = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.redirector."); - var data = branch.getCharPref("redirects"); - } catch(e) { - this._prefs.version = currentVersion; - return; - } - var arr; - this._list = []; - if (data != '') { - for each (redirectString in data.split(':::')) { - if (!redirectString || !redirectString.split) { - continue; - rdump('Invalid old redirect: ' + redirectString); - } - var parts = redirectString.split(',,,'); - if (parts.length < 5) { - throw Error("Invalid serialized redirect, too few fields: " + redirectString); - } - var redirect = new Redirect(); - redirect._init.apply(redirect, parts); - this._list.push(redirect); - } - this.save(); - this._list = []; //Let the real loading start this properly - } - branch.deleteBranch('redirects'); - this._prefs.version = currentVersion; - }, - - importRedirects : function(file) { - var fileStream = new FileInputStream(file, 0x01, 0444, 0); - var stream = new ConverterInputStream(fileStream, "UTF-8", 16384, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); - var str = {}; - var rjson = ''; - while (stream.readString(4096, str) != 0) { - rjson += str.value; - } - stream.close(); - var importCount = 0, existsCount = 0; - rjson = JSON.parse(rjson); - for each (var rd in rjson.redirects) { - var redirect = new Redirect(); - redirect.fromObject(rd); - if (this._containsRedirect(redirect)) { - existsCount++; - } else { - this._list.push(redirect); - importCount++; - } - } - this.save(); - return importCount | (existsCount << 16); - }, - - save : function() { - var file = this._getRedirectsFile(); - this.exportRedirects(file); - }, - - sortRedirects : function(sortFunc) { - this._list.sort(sortFunc); - this.save(); - }, - - // nsIContentPolicy implementation - shouldLoad: function(contentType, contentLocation, requestOrigin, aContext, mimeTypeGuess, extra) { - if (contentLocation.scheme != "http" && contentLocation.scheme != "https") { - return Ci.nsIContentPolicy.ACCEPT; - } //Immediately, otherwise we will log all sorts of crap - - rdump('nsIContentPolicy::ShouldLoad ' + contentLocation.spec); - try { - //This is also done in getRedirectUrl, but we want to exit as quickly as possible for performance - if (!this._prefs.enabled) { - return Ci.nsIContentPolicy.ACCEPT; - } - - if (contentType != Ci.nsIContentPolicy.TYPE_DOCUMENT) { - return Ci.nsIContentPolicy.ACCEPT; - } - - if (contentLocation.scheme != "http" && contentLocation.scheme != "https") { - return Ci.nsIContentPolicy.ACCEPT; - } - - if (!aContext || !aContext.loadURI) { - return Ci.nsIContentPolicy.ACCEPT; - } - - var redirectUrl = this.getRedirectUrl(contentLocation.spec); - - if (!redirectUrl) { - return Ci.nsIContentPolicy.ACCEPT; - } - - aContext.loadURI(redirectUrl, requestOrigin, null); - return Ci.nsIContentPolicy.REJECT_REQUEST; - } catch(e) { - this.debug(e); - } - - }, - - shouldProcess: function(contentType, contentLocation, requestOrigin, insecNode, mimeType, extra) { - return Ci.nsIContentPolicy.ACCEPT; - }, - //end nsIContentPolicy - - //nsIChannelEventSink implementation - - //For FF4.0. Got this from a thread about adblock plus, https://adblockplus.org/forum/viewtopic.php?t=5895 - asyncOnChannelRedirect: function(oldChannel, newChannel, flags, redirectCallback) { - this.onChannelRedirect(oldChannel, newChannel, flags); - redirectCallback.onRedirectVerifyCallback(0); - }, - - onChannelRedirect: function(oldChannel, newChannel, flags) - { - try { - let newLocation = newChannel.URI.spec; - rdump('nsIChannelEventSink::onChannelRedirect ' + newLocation); - - if (!(newChannel.loadFlags & Ci.nsIChannel.LOAD_DOCUMENT_URI)) { - //We only redirect documents... - return; - } - - if (!this._prefs.enabled) { - return; - } - - if (!newLocation) { - return; - } - let callbacks = []; - if (newChannel.notificationCallbacks) { - callbacks.push(newChannel.notificationCallbacks); - } - if (newChannel.loadGroup && newChannel.loadGroup.notificationCallbacks) { - callbacks.push(newChannel.loadGroup.notificationCallbacks); - } - var win; - var webNav; - for each (let callback in callbacks) - { - try { - win = callback.getInterface(Ci.nsILoadContext).associatedWindow; - webNav = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIWebNavigation); - break; - } catch(e) {} - } - if (!webNav) { - return; - } - var redirectUrl = this.getRedirectUrl(newLocation); - - if (redirectUrl) { - webNav.loadURI(redirectUrl,null,null,null,null); - throw Cr.NS_BASE_STREAM_WOULD_BLOCK; //Throw this because the real error we should throw shows up in console... - } - - } catch (e if (e != Cr.NS_BASE_STREAM_WOULD_BLOCK)) { - // We shouldn't throw exceptions here - this will prevent the redirect. - rdump("Redirector: Unexpected error in onChannelRedirect: " + e + "\n"); - } - }, - //end nsIChannelEventSink - - //Private members and methods - - _prefs : null, - _list : null, - _strings : null, - _cout : Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService), - - init : function() { - if (this._prefs) { - this._prefs.dispose(); - } - this._cout.logStringMessage('REDIRECTOR CREATED'); - this._prefs = new RedirectorPrefs(); - //Check if we need to update existing redirects - var data = this._prefs.redirects; - var version = this._prefs.version; - this._loadStrings(); - this._list = []; - this.handleUpgrades(); - var redirectsFile = this._getRedirectsFile(); - if (redirectsFile.exists()) { - this.importRedirects(redirectsFile); - } - - RedirectorProxy.start(this._prefs.proxyServerPort); - rdump('Registering as Proxy Filter'); - //var pps = Cc["@mozilla.org/network/protocol-proxy-service;1"].getService(Ci.nsIProtocolProxyService); - //pps.registerFilter(this, 0); - }, - - _loadStrings : function() { - var src = 'chrome://redirector/locale/redirector.properties'; - var localeService = Cc["@mozilla.org/intl/nslocaleservice;1"].getService(Ci.nsILocaleService); - var appLocale = localeService.getApplicationLocale(); - var stringBundleService = Cc["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService); - this._strings = stringBundleService.createBundle(src, appLocale); - }, - - _containsRedirect : function(redirect) { - for each (var existing in this._list) { - if (existing.equals(redirect)) { - return true; - } - } - return false; - }, - - _getString : function(name) { - return this._strings.GetStringFromName(name); - }, - - _getFormattedString : function(name, params) { - return this._strings.formatStringFromName(name, params, params.length); - }, - - _msgBox : function(title, text) { - Cc["@mozilla.org/embedcomp/prompt-service;1"] - .getService(Ci.nsIPromptService) - .alert(null, title, text); - }, - - _makeAbsoluteUrl : function(currentUrl, relativeUrl) { - - if (relativeUrl.match(/https?:/)) { - return relativeUrl; - } - - var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); - var uri = ioService.newURI(currentUrl, null, null); - - return uri.resolve(relativeUrl); - } -}; - -Redirector.init();
\ No newline at end of file diff --git a/chrome/code/redirectorprefs.js b/chrome/code/redirectorprefs.js deleted file mode 100644 index 75ef936..0000000 --- a/chrome/code/redirectorprefs.js +++ /dev/null @@ -1,76 +0,0 @@ -var EXPORTED_SYMBOLS = ['RedirectorPrefs']; - -function RedirectorPrefs() { - this.init(); -} - -RedirectorPrefs.prototype = { - - _listeners : null, - init : function() { - this._prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.redirector."); - this.reload(); - this._listeners = []; - this.service.addObserver('extensions.redirector', this, false); - }, - - dispose : function() { - this._listeners = null; - this.service.removeObserver('extensions.redirector', this); - }, - - reload : function(addWatch) { - var b = this._prefBranch; - for each (var name in b.getChildList('')){ - this.unwatch(name); - var type = b.getPrefType(name); - if (type == b.PREF_STRING) { - this[name] = b.getCharPref(name); - } else if (type == b.PREF_INT) { - this[name] = b.getIntPref(name); - } else if (type == b.PREF_BOOL) { - this[name] = b.getBoolPref(name); - } - - this.watch(name, function(id,oldval,newval) { - var type = b.getPrefType(id); - if (type == b.PREF_STRING) { - b.setCharPref(id,newval); - } else if (type == b.PREF_INT) { - b.setIntPref(id, newval); - } else if (type == b.PREF_BOOL) { - dump(id+ ' ' + newval) - b.setBoolPref(id, newval); - } - return newval; - }); - } - }, - - get service() { - return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranchInternal); - }, - - observe : function(subject, topic, data) { - if (topic != 'nsPref:changed') { - return; - } - this.reload(false); - for each (var listener in this._listeners) { - listener && listener.changedPrefs && listener.changedPrefs(this); - } - }, - - addListener : function(listener) { - this._listeners.push(listener); - }, - - removeListener : function(listener) { - for (var i = 0; i < this._listeners.length; i++) { - this._listeners.splice(i,1); - if (this._listeners[i] == listener) { - return; - } - } - }, -}
\ No newline at end of file diff --git a/chrome/code/settings.xul.js b/chrome/code/settings.xul.js deleted file mode 100644 index bee7817..0000000 --- a/chrome/code/settings.xul.js +++ /dev/null @@ -1,276 +0,0 @@ -Components.utils.import("chrome://redirector/content/code/redirector.js"); -const Cc = Components.classes; -const Ci = Components.interfaces; -const nsLocalFile = Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath"); - -var Settings = { - - lstRedirects: null, - btnDelete : null, - btnEdit : null, - btnUp : null, - btnDown : null, - btnExport : null, - btnImport : null, - chkEnableRedirector : null, - chkShowStatusBarIcon : null, - chkShowContextMenu : null, - chkEnableDebugOutput : null, - prefs : null, - - onLoad : function() { - try { - //Get references to controls - this.lstRedirects = document.getElementById('lstRedirects'); - this.btnDelete = document.getElementById('btnDelete'); - this.btnEdit = document.getElementById('btnEdit'); - this.btnUp = document.getElementById('btnUp'); - this.btnDown = document.getElementById('btnDown'); - this.btnExport = document.getElementById('btnExport'); - this.btnImport = document.getElementById('btnImport'); - this.chkEnableRedirector = document.getElementById('chkEnableRedirector'); - this.chkShowStatusBarIcon = document.getElementById('chkShowStatusBarIcon'); - this.chkShowContextMenu = document.getElementById('chkShowContextMenu'); - this.chkEnableDebugOutput = document.getElementById('chkEnableDebugOutput'); - - this.prefs = new RedirectorPrefs(); - //Preferences - this.changedPrefs(this.prefs); - this.prefs.addListener(this); - - //Redirect list - this.lstRedirects.selType = 'single'; - this.template = document.getElementsByTagName('richlistitem')[0]; - this.lstRedirects.removeChild(this.template); - var list = []; - for (var i = 0; i < Redirector.redirectCount; i++) { - list.push(Redirector.getRedirectAt(i)); - } - this.addItemsToListBox(list); - this.selectionChange(); - - this.strings = document.getElementById('redirector-strings'); - this.strings.getPluralized = function(id, number) { - id += number == 1 ? 'Singular' : ''; - return this.getFormattedString(id, [number]); - }; - } catch(e) { - alert(e); - } - }, - - onUnload : function() { - this.prefs.dispose(); - }, - - changedPrefs : function(prefs) { - this.chkEnableRedirector.setAttribute('checked', prefs.enabled); - this.chkShowStatusBarIcon.setAttribute('checked', prefs.showStatusBarIcon); - this.chkShowContextMenu.setAttribute('checked', prefs.showContextMenu); - this.chkEnableDebugOutput.setAttribute('checked', prefs.debugEnabled); - }, - - addItemsToListBox : function(items) { - - var item, row, value, newItem; - - for each (item in items) { - newItem = this.template.cloneNode(true); - - newItem.getElementsByAttribute('name', 'dscrIncludePattern')[0].setAttribute('value', item.includePattern); - newItem.getElementsByAttribute('name', 'dscrExcludePattern')[0].setAttribute('value', item.excludePattern); - newItem.getElementsByAttribute('name', 'dscrRedirectTo')[0].setAttribute('value', item.redirectUrl); - var checkEnabled = newItem.getElementsByAttribute('name', 'chkEnabled')[0]; - checkEnabled.setAttribute('checked', !item.disabled); - newItem.setAttribute('class', item.disabled ? 'disabledRedirect' : ''); - newItem.item = item; - this.lstRedirects.appendChild(newItem); - newItem.setAttribute('selected', false) - } - - //Enable, disable functionality - this.lstRedirects.addEventListener('click', function(ev) { - if (ev.originalTarget && ev.originalTarget.tagName == 'checkbox') { - var parent = ev.originalTarget.parentNode; - while (!parent.item) { - parent = parent.parentNode; - } - parent.item.disabled = !ev.originalTarget.hasAttribute('checked'); - parent.setAttribute('class', parent.item.disabled ? 'disabledRedirect' : ''); - Redirector.save(); - } - },false); - }, - - moveUp : function(){ - if (this.lstRedirects.selectedIndex <= 0) { - return; - } - this.switchItems(this.lstRedirects.selectedIndex-1); - }, - - moveDown : function() { - if (this.lstRedirects.selectedIndex == Redirector.redirectCount-1) { - return; - } - this.switchItems(this.lstRedirects.selectedIndex); - }, - - switchItems : function(firstIndex) { - Redirector.switchItems(firstIndex, firstIndex+1); - var firstItem = this.lstRedirects.children[firstIndex]; - var secondItem = this.lstRedirects.children[firstIndex+1]; - this.lstRedirects.removeChild(secondItem); - this.lstRedirects.insertBefore(secondItem, firstItem); - this.selectionChange(); - }, - - setListItemValues : function(listItem, item){ - listItem.getElementsByAttribute('name', 'dscrIncludePattern')[0].setAttribute('value', item.includePattern); - listItem.getElementsByAttribute('name', 'dscrExcludePattern')[0].setAttribute('value', item.excludePattern); - listItem.getElementsByAttribute('name', 'dscrRedirectTo')[0].setAttribute('value', item.redirectUrl); - }, - - preferenceChange : function(event) { - this.prefs[event.originalTarget.getAttribute('preference')] = event.originalTarget.hasAttribute('checked'); - }, - - addRedirect : function() { - var args = { saved : false, redirect : new Redirect() }; - window.openDialog("chrome://redirector/content/ui/editRedirect.xul", "redirect", "chrome,dialog,modal,centerscreen", args); - if (args.saved) { - Redirector.addRedirect(args.redirect); - //Get it from redirector since it has processed it and it's no longer the same - //object as the one we added. - this.addItemsToListBox([Redirector.getRedirectAt(Redirector.redirectCount-1)]); - this.selectionChange(); - } - }, - - editRedirect : function() { - - if (this.lstRedirects.selectedIndex == -1) { - return; - } - //.selectedItem is still there after it has been removed, that's why we have the .selectedIndex check above as well - var listItem = this.lstRedirects.selectedItem; - if (!listItem) { - return; - } - var redirect = listItem.item; - var args = { saved: false, "redirect":redirect.clone()}; - window.openDialog("chrome://redirector/content/ui/editRedirect.xul", "redirect", "chrome,dialog,modal,centerscreen", args); - - if (args.saved) { - redirect.copyValues(args.redirect); - this.setListItemValues(listItem, redirect); - Redirector.save(); - this.selectionChange(); - } - }, - - deleteRedirect : function() { - var index = this.lstRedirects.selectedIndex; - - if (index == -1) { - return; - } - - var text = this.strings.getString("deleteConfirmationText"); - var title = this.strings.getString("deleteConfirmationTitle"); - var reallyDelete = Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Ci.nsIPromptService).confirm(null, title, text); - if (!reallyDelete) { - return; - } - - try { - this.lstRedirects.removeChild(this.lstRedirects.children[index]); - Redirector.deleteRedirectAt(index); - this.selectionChange(); - } catch(e) { - alert(e); - } - }, - - listKeypress : function(event) { - if (event.keyCode == 13) { //Enter button - this.editRedirect(); - } else if (event.keyCode == 46) { //Del button - this.deleteRedirect(); - } - }, - - selectionChange : function() { - if (!this.lstRedirects) { - return; - } - var index = this.lstRedirects.selectedIndex; - - this.btnEdit.disabled = (index == -1); - this.btnDelete.disabled = (index == -1); - this.btnUp.disabled = (index <= 0); - this.btnDown.disabled = (index == -1 || index >= Redirector.redirectCount-1); - this.btnExport.disabled = (Redirector.redirectCount== 0); - }, - - getFile : function(captionKey, mode) { - //Mostly borrowed from Adblock Plus - var picker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); - picker.init(window, this.strings.getString(captionKey), mode); - picker.defaultExtension = ".rjson"; - var dir = this.prefs.defaultDir; - if (dir) { - picker.displayDirectory = new nsLocalFile(dir); - } - picker.appendFilter(this.strings.getString('redirectorFiles'), '*.rjson'); - - if (picker.show() == picker.returnCancel) { - return null; - } - this.prefs.defaultDir = picker.displayDirectory.path; - return picker.file; - }, - - export : function() { - var file = this.getFile('exportCaption', Ci.nsIFilePicker.modeSave); - if (file) { - Redirector.exportRedirects(file); - } - }, - - import : function() { - var file = this.getFile('importCaption', Ci.nsIFilePicker.modeOpen); - var result; - if (!file) { - return; - } - result = Redirector.importRedirects(file); - var msg, imported, existed; - imported = result & 0xFFFF; - existed = result >> 16; - - if (imported > 0) { - msg = this.strings.getPluralized('importedMessage', imported); - if (existed > 0) { - msg += ', ' + this.strings.getPluralized('existedMessage',existed); - } else { - msg += '.'; - } - } else if (imported == 0 && existed > 0) { - msg = this.strings.getPluralized('allExistedMessage', existed); - } else { //Both 0 - msg = this.strings.getString('importedNone'); - } - - var title = this.strings.getString("importResult"); - Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Ci.nsIPromptService).alert(null, title, msg); - - if (imported > 0) { - var newlist = []; - for (var i = Redirector.redirectCount-imported; i < Redirector.redirectCount; i++) { - newlist.push(Redirector.getRedirectAt(i)); - } - this.addItemsToListBox(newlist); - } - } -}; diff --git a/chrome/code/unittest/run.html b/chrome/code/unittest/run.html deleted file mode 100644 index cc178aa..0000000 --- a/chrome/code/unittest/run.html +++ /dev/null @@ -1,99 +0,0 @@ -<!-- $Id$ --> -<html> - <head> - <title>Redirector Unit Tests</title> - <style type="text/css"> - body { font-family: Verdana, Arial; color:black; background-color:white; font-size:0.8em; width:800px; margin:auto; text-align:center;} - a { color:blue; } - h1 { text-align:center; margin:10px 0px; } - table { margin:10px auto; border:solid 1px black; width:700px; border-collapse:collapse;} - td { border:solid 1px black; padding:3px; } - td.result { width:20px; height:20px; padding:0;} - td.result div { width:70%; height:70%; margin:auto; } - button { margin:20px auto; } - </style> - <script type="text/javascript"> - - //Global variables - var subscriptLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader); - var redirector = Components.classes["@einaregilsson.com/redirector;1"].getService(Components.interfaces.rdIRedirector); - - function setupTest(name, testcase) { - var table = document.createElement('table'); - var row = document.createElement('tr'); - var cell = document.createElement('th'); - var testdata; - cell.setAttribute('colspan', 2); - row.appendChild(cell); - table.appendChild(row); - cell.innerHTML = name; - document.getElementById('tests').appendChild(table); - for (var i = 0; i < testcase.tests.length; i++) { - var testdata = testcase.tests[i]; - row = document.createElement('tr'); - cell = document.createElement('td'); - cell.setAttribute('class', 'result'); - var dot = document.createElement('div'); - dot.setAttribute('id', name + '_' + i); - cell.appendChild(dot); - - row.appendChild(cell); - cell = document.createElement('td'); - cell.innerHTML = testcase.describe(testdata); - row.appendChild(cell); - table.appendChild(row); - } - } - - function setup() { - //quick and dirty cleanup - document.getElementById('tests').innerHTML = ''; - subscriptLoader.loadSubScript('chrome://redirector/content/code/redirect.js'); - subscriptLoader.loadSubScript('chrome://redirector/content/unittest/testcases.js'); - redirector.reload(); - - var sorted = []; - for (var name in tests) { - sorted.push(name); - } - - sorted.sort(); - for each(var name in sorted) { - setupTest(name, tests[name]); - } - } - - function runTests() { - for (var testcaseName in tests) { - var testcase = tests[testcaseName]; - for (var i = 0; i < testcase.tests.length; i++) { - try { - var dot = document.getElementById(testcaseName + '_' + i); - var result = testcase.run(testcase.tests[i]); - if (result && result.passed) { - dot.style.backgroundColor = '#17f816'; - } else { - dot.style.backgroundColor = '#ff0000'; - if (result && result.message) { - dot.parentNode.nextSibling.innerHTML += '<br/><span style="color:red;">' + result.message + '</span>'; - } - } - } catch(e) { - dot.style.backgroundColor = '#ff0000'; - dot.parentNode.nextSibling.innerHTML += '<br/><span style="color:red;">' + e + '</span>'; - ; - } - } - } - } - - </script> - </head> - <body onload="setup();"> - <h1>Redirector Unit Tests</h1> - <button onclick="runTests();">Run tests</button> - <button onclick="setup();">Reload tests</button> - <div id="tests"> - </div> - </body> -</html>
\ No newline at end of file diff --git a/chrome/code/unittest/testcases.js b/chrome/code/unittest/testcases.js deleted file mode 100644 index 0c0c10c..0000000 --- a/chrome/code/unittest/testcases.js +++ /dev/null @@ -1,129 +0,0 @@ -//// $Id$ -var nsIContentPolicy = Components.interfaces.nsIContentPolicy; - -var tests = { - "Wildcard matches" : { - run : function(data,log) { - var pattern = data[0], - url = data[1], - expected = data[2]; - var parts = expected.split(','); - var redirectUrl = ''; - if (!(parts.length == 1 && parts[0] == '')) { - for (var i in parts) { - redirectUrl += '$' + (parseFloat(i)+1) + ','; - } - redirectUrl = redirectUrl.substr(0, redirectUrl.length-1); - } - var redirect = new Redirect(null, pattern, redirectUrl, Redirect.WILDCARD); - var result = redirect.getMatch(url); - return { passed: result.isMatch && (result.redirectTo == expected), message : "Expected '" + expected + "', actual was '" + result.redirectTo + "'"}; - }, - - describe : function(data) { return data[0] + ' == ' + data[1] + ', matches=' + data[2]; }, - tests : [ - ['http://foo*', 'http://foobar.is', 'bar.is'], - ['http://foo*', 'http://foo', ''], - ['*://foo.is', 'http://foo.is', 'http'], - ['*http://foo.is', 'http://foo.is', ''], - ['http*foo*', 'http://foobar.is', '://,bar.is'], - ['http*foo*', 'http://foo', '://,'], - ['*://f*.is', 'http://foo.is', 'http,oo'], - ['*http://f*.is', 'http://foo.is', ',oo'], - ['*foo*', 'http://foo', 'http://,'], - ['*foo*', 'foobar.is', ',bar.is'], - ['*foo*', 'http://foobar.is', 'http://,bar.is'], - ['http://foo.is', 'http://foo.is', ''], - ['*', 'http://foo.is', 'http://foo.is'], - ['*://*oo*bar*', 'http://foo.is/bar/baz', 'http,f,.is/,/baz'], - ['*://**oo*bar*', 'http://foo.is/bar/baz', 'http,,f,.is/,/baz'], - ] - }, - - "Regex matches" : { - run : function(data) { - var pattern = data[0], - url = data[1], - expected = data[2]; - var parts = expected.split(','); - var redirectUrl = ''; - if (!(parts.length == 1 && parts[0] == '')) { - for (var i in parts) { - redirectUrl += '$' + (parseFloat(i)+1) + ','; - } - redirectUrl = redirectUrl.substr(0, redirectUrl.length-1); - } - var redirect = new Redirect(null, pattern, redirectUrl, Redirect.REGEX, null, null); - var result = redirect.getMatch(url); - return { passed: result.isMatch && result.redirectTo == expected, message : "Expected '" + expected + "', actual was '" + result.redirectTo + "'"}; - }, - - describe : function(data) { return data[0] + ' == ' + data[1] + ', matches=' + data[2]; }, - tests : [ - ['http://foo(.*)', 'http://foobar.is', 'bar.is'], - ['http://foo(.*)', 'http://foo', ''], - ['(.*)://foo.is', 'http://foo.is', 'http'], - ['(.*)http://foo\\.is', 'http://foo.is', ''], - ['http(.*)foo(.*)', 'http://foobar.is', '://,bar.is'], - ['http(.*)foo(.*)', 'http://foo', '://,'], - ['(.*)://f(.*)\\.is', 'http://foo.is', 'http,oo'], - ['(.*)http://f(.*)\\.is', 'http://foo.is', ',oo'], - ['(.*)foo(.*)', 'http://foo', 'http://,'], - ['(.*)foo(.*)', 'foobar.is', ',bar.is'], - ['(.*)foo(.*)', 'http://foobar.is', 'http://,bar.is'], - ['http://foo\.is', 'http://foo.is', ''], - ['(.*)', 'http://foo.is', 'http://foo.is'], - ['(.*)://(.*)oo(.*)bar(.*)', 'http://foo.is/bar/baz', 'http,f,.is/,/baz'], - ['(.*)://(.*?)(.*)oo(.*)bar(.*)', 'http://foo.is/bar/baz', 'http,,f,.is/,/baz'], - ] - }, - - "nsIContentPolicy implementation" : { - run : function(data) { - var runTest = function() { - var args = { - contentType : nsIContentPolicy.TYPE_DOCUMENT, - contentLocation : "http://foo.is", - requestOrigin : null, - aContext : { loadURI : function(){}}, - mimeTypeGuess : null, - extra : null - }; - for (var key in data[1]) { - args[key] = data[1][key]; - } - - var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); - args.contentLocation = ioService.newURI(args.contentLocation, null, null); - var contentPolicy = redirector.QueryInterface(nsIContentPolicy); - var result = contentPolicy.shouldLoad(args.contentType, args.contentLocation, args.requestOrigin, args.aContext, args.mimeTypeGuess, args.extra); - return { passed: result == nsIContentPolicy.ACCEPT, message : "Expected nsIContentPolicy.ACCEPT, actual was " + result }; - } - - if (typeof data[2] == "function") { - return data[2](runTest); - } else { - return runTest(); - } - }, - - describe : function(data) { return data[0]; }, - tests : [ - ["Accepts if not TYPE_DOCUMENT", { contentType : nsIContentPolicy.TYPE_STYLESHEET}], - ["Accepts if not http or https", { contentLocation : "resource://foo/bar"}], - ["Accepts if no aContext", { aContext : null}], - ["Accepts if aContext has no loadURI function", { aContext : { foo : function(){}}}], - ["Accepts if Redirector is not enabled", {}, function(doFunc) { - try { - redirector.enabled = false; - return doFunc(); - redirector.enabled = true; - - } catch(e) { - redirector.enabled = true; - throw e; - } - }] - ] - } -}; diff --git a/chrome/code/xpcom.js b/chrome/code/xpcom.js deleted file mode 100644 index e81f58e..0000000 --- a/chrome/code/xpcom.js +++ /dev/null @@ -1,28 +0,0 @@ - -Ci = Components.interfaces; -Cc = Components.classes; -Cr = Components.results; - -const ServerSocket = Components.Constructor("@mozilla.org/network/server-socket;1", "nsIServerSocket", "init"); -const ScriptableInputStream = Components.Constructor("@mozilla.org/scriptableinputstream;1", "nsIScriptableInputStream", "init"); -const FileInputStream = Components.Constructor("@mozilla.org/network/file-input-stream;1", "nsIFileInputStream", "init"); -const ConverterInputStream = Components.Constructor("@mozilla.org/intl/converter-input-stream;1", "nsIConverterInputStream", "init"); -const LocalFile = Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath"); -const FilePicker = Components.Constructor("@mozilla.org/filepicker;1", "nsIFilePicker", "init"); -const FilePickerMode = { save : Ci.nsIFilePicker.modeSave, open : Ci.nsIFilePicker.modeOpen }; - -function Service(className, interfaceName) { - return Cc[className].getService(Ci[interfaceName]); -} - -const PromptService = Service("@mozilla.org/embedcomp/prompt-service;1","nsIPromptService"); -const IOService = Service("@mozilla.org/network/io-service;1","nsIIOService"); -const LocaleService = Service("@mozilla.org/intl/nslocaleservice;1", "nsILocaleService"); -const StringBundleService = Service("@mozilla.org/intl/stringbundle;1", "nsIStringBundleService"); - -var EXPORTED_SYMBOLS = []; -for (var name in this) { - if (name != 'Service' && name != 'QueryInterface' && name != 'name' && name != 'EXPORTED_SYMBOLS') { - EXPORTED_SYMBOLS.push(name); - } -} |