diff --git a/README.md b/README.md index 322b945b..ca69d4de 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,31 @@ -# About +# Scriptish + +[![Gitter chat](https://badges.gitter.im/scriptish/scriptish.png)](https://gitter.im/scriptish/scriptish) + +## About Scriptish is a userscript manager for Firefox, forked from Greasemonkey. -# Browsers Supported +## Browsers Supported -* Firefox 4+ -* Seamonkey 2.1+ +* Firefox 21+ +* Seamonkey 2.8+ -# Download +## Download * [Addons.Mozilla.Org (AMO)](https://addons.mozilla.org/firefox/addon/scriptish) * [Source Code](https://github.com/scriptish/scriptish) -# Community +## Help * [Wiki](https://github.com/scriptish/scriptish/wiki) * [Issues](https://github.com/scriptish/scriptish/issues) * [Blog](http://scriptish.org/blog) -* [Issues](https://github.com/scriptish/scriptish/issues) - -## IRC - -irc.mozilla.org #scriptish +* irc.mozilla.org #userscripts (for UserScript development help) +* irc.mozilla.org #scriptish (for Scriptish development) +* [StackOverflow](http://stackoverflow.com/questions/tagged/userscripts) -# UserScripts +## UserScripts * [Userscripts](http://userscripts.org) diff --git a/blocklist.json b/blocklist.json index 880ca2ec..7c89b839 100644 --- a/blocklist.json +++ b/blocklist.json @@ -1,3 +1,3 @@ { - "uso": [20145, 26062, 35611, 38017, 59744, 68219, 92054, 114457, 128437, 130770] -} \ No newline at end of file + "uso": [20145, 26062, 35611, 38017, 59744, 68219, 92054, 114457, 128437, 130770, 167885, 169552] +} diff --git a/build.sh b/build.sh index 6a9ca747..8782d42a 100755 --- a/build.sh +++ b/build.sh @@ -1,10 +1,10 @@ #!/bin/sh # Set up variables -if [ "amo" == "$1" ] || [ "staging" == "$1" ]; then +if [ "amo" = "$1" ]; then # For official builds, use the version in install.rdf. VER=`grep -Go 'em:version\>\(.*\)\<' extension/install.rdf | grep -Go '>\(.*\)<' | sed -e 's/[><]*//g'` -elif [ "test" == "$1" ]; then +elif [ "test" = "$1" ]; then VER=`echo test` else # For beta builds, generate a version number. @@ -57,6 +57,6 @@ fi cd .. rm -rf build -if [ "amo" == "$1" ] || [ "staging" == "$1" ]; then +if [ "amo" = "$1" ]; then openssl sha1 "$XPI" fi diff --git a/extension/chrome.manifest b/extension/chrome.manifest index 76e27245..831944ec 100644 --- a/extension/chrome.manifest +++ b/extension/chrome.manifest @@ -19,7 +19,7 @@ style chrome://global/content/alerts/alert.xul chrome://scriptish/skin/thir overlay chrome://browser/content/browser.xul chrome://scriptish/content/browser.xul application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} overlay chrome://browser/content/browser.xul chrome://scriptish/content/browser.xul application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} -overlay chrome://browser/content/scratchpad.xul chrome://scriptish/content/scratchpad.xul +overlay chrome://browser/content/devtools/scratchpad.xul chrome://scriptish/content/scratchpad.xul overlay chrome://navigator/content/navigator.xul chrome://scriptish/content/browser.xul overlay about:addons chrome://scriptish/content/addonstab.xul overlay chrome://mozapps/content/extensions/extensions.xul chrome://scriptish/content/addonstab.xul diff --git a/extension/components/scriptish.js b/extension/components/scriptish.js index c5ee812a..3704b6ef 100644 --- a/extension/components/scriptish.js +++ b/extension/components/scriptish.js @@ -11,29 +11,34 @@ lazyImport(this, "resource://scriptish/logging.js", ["Scriptish_logError", "Scri lazyImport(this, "resource://scriptish/prefmanager.js", ["Scriptish_prefRoot"]); lazyImport(this, "resource://scriptish/scriptish.js", ["Scriptish"]); lazyImport(this, "resource://scriptish/manager.js", ["Scriptish_manager"]); -lazyImport(this, "resource://scriptish/config.js", ["Scriptish_config"]); lazyImport(this, "resource://scriptish/third-party/Scriptish_getBrowserForContentWindow.js", ["Scriptish_getBrowserForContentWindow"]); -const { alert: Scriptish_alert } = jetpack('scriptish/utils/Scriptish_alert'); lazyUtil(this, "injectScripts"); lazyUtil(this, "installUri"); lazyUtil(this, "isGreasemonkeyable"); lazyUtil(this, "isScriptRunnable"); -lazyUtil(this, "getWindowIDs"); lazyUtil(this, "stringBundle"); -lazyUtil(this, "updateModifiedScripts"); lazyUtil(this, "windowEventTracker"); lazyUtil(this, "windowUnloader"); -const {nsIContentPolicy: CP} = Ci; +const { getInnerId } = jetpack('sdk/window/utils'); + +jetpack('scriptish/security/api-check-filenames').add(Components.stack.filename); + +const CP = Ci.nsIContentPolicy; // If the file was previously cached it might have been given a number after // .user, like gmScript.user-12.js const RE_USERSCRIPT = /\.user(?:-\d+)?\.js$/; const RE_CONTENTTYPE = /text\/html/i; +// load the USo HTTPS redirector +jetpack('scriptish/uso-redirector'); + function ScriptishService() { - Scriptish_manager.setup.call(this); + // load the manager + Scriptish_manager(); + Services.obs.addObserver(this, "install-userscript", false); Services.obs.addObserver(this, "scriptish-enabled", false); Services.obs.addObserver(this, "content-document-global-created", false); @@ -52,7 +57,6 @@ ScriptishService.prototype = { }], QueryInterface: XPCOMUtils.generateQI([ Ci.nsISupports, Ci.nsISupportsWeakReference, Ci.nsIContentPolicy]), - observe: function(aSubject, aTopic, aData) { switch (aTopic) { case "content-document-global-created": @@ -75,9 +79,10 @@ ScriptishService.prototype = { gBrowser.getBrowserForDocument(safeWin.document)); } - let currentInnerWindowID = Scriptish_getWindowIDs(safeWin).innerID; + let currentInnerWindowID = getInnerId(safeWin); // if the focused tab's window is the one loading, then attach menuCommander - if (safeWin === gBrowser.selectedBrowser.contentWindow) { + if (gBrowser && gBrowser.selectedBrowser && + safeWin === gBrowser.selectedBrowser.contentWindow) { if (gmBrowserUI.currentMenuCommander) gmBrowserUI.currentMenuCommander.detach(); @@ -106,79 +111,6 @@ ScriptishService.prototype = { } }, - docReady: function(href, safeWin) { - let unsafeWin = safeWin.wrappedJSObject; - let self = this; - let winClosed = false; - let tracker = Scriptish_windowEventTracker(safeWin); - - // rechecks values that can change at any moment - function shouldNotRun() ( - winClosed || !Scriptish.enabled || !Scriptish_isGreasemonkeyable(href)); - - // check if there are any modified scripts - Scriptish_updateModifiedScripts(href, safeWin, shouldNotRun); - - // find matching scripts - Scriptish_config.initScripts(href, (safeWin === safeWin.top), function(scripts) { - let (windowLoaded = ("load" == tracker)) { - if (windowLoaded || "DOMContentLoaded" == tracker) { - scripts["document-start"] = scripts["document-start"].concat(scripts["document-end"], scripts["document-idle"]); - scripts["document-end"] = scripts["document-idle"] = []; - } - - if (windowLoaded) { - scripts["document-start"] = scripts["document-start"].concat(scripts["window-load"]); - scripts["window-load"] = []; - } - } - - if (scripts["document-end"].length || scripts["document-idle"].length) { - safeWin.addEventListener("DOMContentLoaded", function() { - if (shouldNotRun()) return; - - if (scripts["document-idle"].length) - timeout(function() { - if (shouldNotRun()) return; - Scriptish_injectScripts({ - scripts: scripts["document-idle"], - url: href, - safeWin: safeWin - }); - }); - - Scriptish_injectScripts({ - scripts: scripts["document-end"], - url: href, - safeWin: safeWin - }); - }, true); - } - - if (scripts["window-load"].length) { - safeWin.addEventListener("load", function() { - if (shouldNotRun()) return; - // inject @run-at window-load scripts - Scriptish_injectScripts({ - scripts: scripts["window-load"], - url: href, - safeWin: safeWin - }); - }, true); - } - - Scriptish_injectScripts({ - scripts: scripts["document-start"], - url: href, - safeWin: safeWin - }); - - Scriptish_windowUnloader(function() { - winClosed = true; - }, Scriptish_getWindowIDs(safeWin).innerID); - }); - }, - _test_org: { "chrome": true, "about": true @@ -198,15 +130,17 @@ ScriptishService.prototype = { } // don't intercept anything when Scriptish is not enabled - if (!Scriptish.enabled) return CP.ACCEPT; + if (!Scriptish.enabled || !Scriptish.enableInstallDetection) + return CP.ACCEPT; // don't interrupt the view-source: scheme - if ("view-source" == cl.scheme) return CP.ACCEPT; + if ("view-source" == cl.scheme) + return CP.ACCEPT; // CP.TYPE is not binary, so do not use bitwise logic tricks if ((ct == CP.TYPE_DOCUMENT || ct == CP.TYPE_SUBDOCUMENT) && this._reg_userjs.test(cl.spec) && !this.isTempScript(cl)) { - Scriptish_installUri(cl); + Scriptish_installUri(cl, ctx); } return CP.ACCEPT; @@ -216,9 +150,10 @@ ScriptishService.prototype = { _tmpDir: Services.dirsvc.get("TmpD", Ci.nsIFile), isTempScript: function(uri) { - if (!(uri instanceof Ci.nsIFileURL)) return false; + if (!(uri instanceof Ci.nsIFileURL)) + return false; - var file = uri.file; + let file = uri.file; return file.parent.equals(this._tmpDir) && file.leafName != "newscript.user.js"; } } diff --git a/extension/content/aboutScriptish.html b/extension/content/aboutScriptish.html index 88e13dcb..523596dd 100644 --- a/extension/content/aboutScriptish.html +++ b/extension/content/aboutScriptish.html @@ -6,8 +6,8 @@ - + diff --git a/extension/content/browser.xul b/extension/content/browser.xul index e06a46eb..84111a2a 100644 --- a/extension/content/browser.xul +++ b/extension/content/browser.xul @@ -17,6 +17,7 @@ + @@ -44,20 +45,32 @@ - - - + + + + + + + - + + + + + + + + + + diff --git a/extension/content/install.xul b/extension/content/install.xul index 593fd3cd..505b14ad 100644 --- a/extension/content/install.xul +++ b/extension/content/install.xul @@ -11,6 +11,7 @@ localize="title" defaultButton="cancel">