Exemplo n.º 1
0
var invokeAsync=new InvokeAsync(addEventListener,dispatchMessage,invoke,function(a,b){console.reportError(b)}),messageTarget=new MessageTarget(addEventListener);function wrapEventTarget(a){var b=[];a.addEventListener=func.decorate(a.addEventListener,function(a,c){var d=c[0],e=c[1];return a.call(this,d,e)?(b.push({type:d,listener:e}),!0):!1});return{clear:function(){array.forEach(b,function(b){a.removeEventListener(b.type,b.listener)});b=[]}}}
Exemplo n.º 2
0
Lang.prototype=object.extend(LangBase,{_executeScript:function(a,b){try{null!=a.path?Services.scriptloader.loadSubScript(a.path,b,"UTF-8"):Cu.evalInSandbox(a.text,b,"default",a.path,1)}catch(d){console.reportError(d,a.path)}},exposeObject:function(a,b,d,e,c){if(0<=Services.vc.compare(Services.appinfo.platformVersion,"34"))return Cu.cloneInto(a,d,{cloneFunctions:!0});e=e||[];c=c||1;b=b||"r";a.__exposedProps__=a.__exposedProps__||{};for(var f in a)"__exposedProps__"!=f&&a.hasOwnProperty(f)&&(a.__exposedProps__[f]=
Exemplo n.º 3
0
var utils=require("kango/utils"),object=utils.object,console=require("kango/console");function Internationalization(){InternationalizationBase.call(this)}Internationalization.prototype=object.extend(InternationalizationBase,{getApplicationLocale:function(){try{return Cc["@mozilla.org/chrome/chrome-registry;1"].getService(Ci.nsIXULChromeRegistry).getSelectedLocale("global")}catch(a){return console.warn("Unable to detect current locale"),console.reportError(a),null}}});module.exports=new Internationalization;
Exemplo n.º 4
0
function HTMLSandbox(){this._browserId="kango-background-script-host_"+utils.utils.getDomainFromId(extensionInfo.id),this._frameEventListener=null}function Lang(){}var extensionInfo=require("kango/extension_info"),utils=require("kango/utils"),object=utils.object,array=utils.array,browser=require("kango/browser"),chromeWindows=require("kango/chrome_windows"),io=require("kango/io"),console=require("kango/console");HTMLSandbox.prototype={create:function(e,t,o){var r=chromeWindows.getHiddenWindow(),n=r.document.createElementNS("http://www.w3.org/1999/xhtml","iframe");n.setAttribute("type","chrome"),n.setAttribute("id",this._browserId),this._frameEventListener=function(e){var r=e.target.defaultView.wrappedJSObject;r.onunload=function(){o(r)},t(r)},n.addEventListener("DOMContentLoaded",this._frameEventListener,!1),n.setAttribute("src",io.getExtensionFileUrl(e)),r.document.documentElement.appendChild(n)},dispose:function(){var e=chromeWindows.getHiddenWindow(),t=e.document.getElementById(this._browserId);t.removeEventListener("DOMContentLoaded",this._frameEventListener,!1),t.parentNode.removeChild(t)}},Lang.prototype=object.extend(LangBase,{_executeScript:function(e,t){try{null!=e.path?Services.scriptloader.loadSubScript(e.path,t,"UTF-8"):Cu.evalInSandbox(e.text,t,"default",e.path,1)}catch(o){console.reportError(o,e.path)}},exposeObject:function(e,t,o){if(Services.vc.compare(Services.appinfo.platformVersion,"34")>=0)return Cu.cloneInto(e,o,{cloneFunctions:!0});t=t||"r",e.__exposedProps__=e.__exposedProps__||{};for(var r in e)"__exposedProps__"!=r&&e.hasOwnProperty(r)&&(e.__exposedProps__[r]=t,e[r]&&object.isObject(e[r])&&this.exposeObject(e[r],t,o));return e},createHTMLSandbox:function(e,t,o){var r=new HTMLSandbox;return r.create(e,t,o),r},evalScriptsInSandbox:function(e,t,o){var r=browser.getSandboxForWindow(e,o);array.forEach(t,function(e){array.forEach(e.requires,function(e){this._executeScript(e,r)},this),this._executeScript(e,r)},this)}}),module.exports=new Lang;
Exemplo n.º 5
0
function onUnload(e,n){var t=function(){n.removeEventListener("unload",t,!1),e()};n.addEventListener("unload",t,!1)}function initStorage(e,n){var t="KangoStorage",o=gStorageData,s=function(n,s){delete o[n],s||e.dispatchMessage([t,"removeItem"].join("_"),{name:n})},i=function(n){o=gStorageData={},n||e.dispatchMessage([t,"clear"].join("_"))},r=function(n,i,r){"undefined"!=typeof i?"function"!=typeof i&&(o[n]=i,r||e.dispatchMessage([t,"setItem"].join("_"),{name:n,value:i})):s(n)},a={setItem:function(e){return r(e.name,e.value)},removeItem:function(e){return s(e.name)},clear:function(){return i()}};e.addEventListener("message",function(e){var n=e.data,o=e.name.split("_");if(o[0]==t)for(var s in a)if(a.hasOwnProperty(s)&&s==o[1]){a[s](n,e.source);break}}),e.storage={setItem:function(e,n,t){return r(e,n,t)},getItem:function(e){return"undefined"!=typeof o[e]?n(o[e]):null},removeItem:function(e,n){return s(e,n)},getKeys:function(){var e=[];for(var t in o)o.hasOwnProperty(t)&&e.push(t);return n(e)},clear:function(e){return i(e)}}}function initI18n(e,n){var t=gLocaleMessages,o=gLocale;e.i18n={getMessages:function(){return n(t)},getMessage:function(e){var n=t[e]?t[e]:e;return arguments.length>1?string.format.apply(string,[n].concat(Array.prototype.slice.call(arguments,1))):n},getCurrentLocale:function(){return o}}}function ContentApiProxy(e){function n(n){return n&&object.isObject(n)?gContentSandbox.exposeObject(n,"r",e):n}var t=null;this.getExtensionInfo=function(){return n(extensionInfo.getRawData())},this.console={log:function(e){console.log(e)},warn:function(e){console.warn(e)},error:function(e){console.error(e)}},this.browser={getName:function(){return"firefox"}},this.io={getResourceUrl:getResourceUrl},this.tab={isPrivate:function(){return docShell.QueryInterface(Ci.nsILoadContext).usePrivateBrowsing}},this.dispatchMessage=func.bind(messageRouter.dispatchMessage,messageRouter),this.addEventListener=function(e,o){return messageRouter.addEventListener(e,function(e){e.source=e.target=null,e=n(e),e.source=e.target=t,o(e)})},this.fireEvent=func.bind(messageRouter.fireEvent,messageRouter);var o=new MessageTargetModule(func.bind(this.addEventListener,this)),s=new InvokeAsyncModule(func.bind(this.addEventListener,this),func.bind(this.dispatchMessage,this),null,func.bind(console.log,console));return this.xhr={send:function(e,t){var o=e.contentType;("xml"==o||"json"==o)&&(e.contentType="text"),e.sanitizeData=!0,s.invokeAsyncCallback("kango.xhr.send",e,function(s){var i={status:s.status,response:null};if(""!=s.response&&null!=s.response)if("json"==o)try{i.response=JSON.parse(s.response)}catch(r){}else if("xml"==o)try{var a=new DOMParser;i.response=a.parseFromString(s.response,"text/xml")}catch(r){}else i.response=s.response;e.contentType=o,t(n(i))})}},this.invokeAsync=func.bind(s.invokeAsync,s),this.invokeAsyncCallback=func.bind(s.invokeAsyncCallback,s),this.addMessageListener=func.bind(o.addMessageListener,o),this.removeMessageListener=func.bind(o.removeMessageListener,o),initStorage(this,n),initI18n(this,n),t=gContentSandbox.exposeObject(this,"r",e),Cu.exportFunction(func.bind(this.xhr.send,t.xhr),t.xhr,{defineAs:"send",allowCallbacks:!0}),Cu.exportFunction(func.bind(this.invokeAsyncCallback,t),t,{defineAs:"invokeAsyncCallback",allowCallbacks:!0}),Cu.exportFunction(func.bind(this.invokeAsync,t),t,{defineAs:"invokeAsync",allowCallbacks:!0}),Cu.exportFunction(func.bind(this.addMessageListener,t),t,{defineAs:"addMessageListener",allowCallbacks:!0}),Cu.exportFunction(func.bind(this.removeMessageListener,t),t,{defineAs:"removeMessageListener",allowCallbacks:!0}),Cu.exportFunction(func.bind(this.storage.setItem,t.storage),t.storage,{defineAs:"setItem",allowCallbacks:!0}),this.wrappedObject=t,this}function ContentSandbox(){this._proxies=[]}function initStorageData(e){"undefined"==typeof gStorageData?gInvokeAsyncModule.invokeAsync("modules/kango/storage/storage.getItems",function(n){gStorageData=n,e()}):e()}function initI18nData(e){"undefined"==typeof gLocale?gInvokeAsyncModule.invokeAsync("modules/kango/i18n/getCurrentLocale",function(n){gLocale=n,gInvokeAsyncModule.invokeAsync("modules/kango/i18n/getMessages",function(n){gLocaleMessages=n,e()})}):e()}function executeContentScripts(e,n){initModules();var t=e==e.top;initStorageData(function(){initI18nData(function(){gInvokeAsyncModule.invokeAsync("modules/kango/userscript_engine/getScripts",e.document.URL,n,t,function(n){object.forEach(n,function(n,t){gContentSandbox.evalScriptsInSandbox(e,n,t)})})})})}function initModules(){gContentSandbox||(gContentSandbox=new ContentSandbox,gInvokeAsyncModule=new InvokeAsyncModule(func.bind(messageRouter.addEventListener,messageRouter),func.bind(messageRouter.dispatchMessage,messageRouter),null,func.bind(console.log,console)))}function DocumentObserver(){this._documentLoadListener=func.bind(this._onPageLoad,this)}var utils=require("kango/utils"),console=require("kango/console"),messageRouter=require("includes/content_messaging"),func=utils.func,object=utils.object,array=utils.array,string=utils.string,extensionInfo=require("kango/extension_info"),EventTarget=utils.EventTarget,InvokeAsyncModule=require("kango/invoke_async"),MessageTargetModule=require("kango/message_target");Cu["import"]("resource://gre/modules/XPCOMUtils.jsm");var gContentSandbox,gInvokeAsyncModule,gStorageData,gLocale,gLocaleMessages;ContentSandbox.prototype={_executeScript:function(e,n){try{e.path?Services.scriptloader.loadSubScript(e.path,n,"UTF-8"):Cu.evalInSandbox(e.text,n,"default",e.path,1)}catch(t){console.reportError(t,e.path)}},exposeObject:function(e,n,t){if(Services.vc.compare(Services.appinfo.platformVersion,"34")>=0)return Cu.cloneInto(e,t,{cloneFunctions:!0});n=n||"r",e.__exposedProps__=e.__exposedProps__||{};for(var o in e)"__exposedProps__"!=o&&e.hasOwnProperty(o)&&(e.__exposedProps__[o]=n,e[o]&&object.isObject(e[o])&&this.exposeObject(e[o],n,t));return e},evalScriptsInSandbox:function(e,n,t){var o=this.getSandboxForWindow(e,t);n.forEach(function(e){e.requires.forEach(function(e){this._executeScript(e,o)},this),this._executeScript(e,o)},this)},deleteTabProxy:function(e,n){for(var t=0;t<this._proxies.length;t++)if(this._proxies[t].window==e&&this._proxies[t].namespace==n)return this._proxies.splice(t,1),!0;return!1},getSandboxForWindow:function(e,n){for(var t=0;t<this._proxies.length;t++)if(this._proxies[t].window==e&&this._proxies[t].namespace==n)return this._proxies[t].sandbox;var o=new Cu.Sandbox(e,{sandboxPrototype:e,wantXrays:!0}),s=new ContentApiProxy(o);return o.kango=s.wrappedObject,this._proxies.push({window:e,proxy:s,sandbox:o,namespace:n}),onUnload(func.bind(function(){this.deleteTabProxy(e,n)},this),e),o}},DocumentObserver.prototype={observe:function(e,n,t){if("document-element-inserted"==n){var o=e;if(o&&o.defaultView){var s=o.defaultView;s&&s==content&&this._isScriptableUrl(s.document.URL)&&(s.addEventListener("DOMContentLoaded",this._documentLoadListener,!0),s.addEventListener("load",this._documentLoadListener,!0),executeContentScripts(s,"document-start"))}}},_isScriptableUrl:function(e){return 0==e.indexOf("http")||0==e.indexOf("file")},_onPageLoad:function(e){var n=e.target,t=n.defaultView;t.removeEventListener("load",this._documentLoadListener,!0),t.removeEventListener("DOMContentLoaded",this._documentLoadListener,!0),n instanceof t.HTMLDocument&&(t==t.top&&messageRouter.dispatchMessage("DocumentComplete"),executeContentScripts(t,"document-end"))}},function(){initModules();var e=new DocumentObserver;Services.obs.addObserver(e,"document-element-inserted",!1),module.exports.dispose=function(){Services.obs.removeObserver(e,"document-element-inserted")}}();
Exemplo n.º 6
0
function dispatchMessage(e,n){return messageRouter.dispatchMessage(e,n)}function wrapEventTarget(e){function n(){array.forEach(r,function(n){e.removeEventListener(n.type,n.listener)}),r=[]}var r=[];return e.addEventListener=func.decorate(e.addEventListener,function(e,n){var t=n[0],o=n[1];return e.call(this,t,o)?(r.push({type:t,listener:o}),!0):!1}),{clear:n}}function wrapMessageTarget(e){function n(){array.forEach(r,function(n){e.removeMessageListener(n.name,n.listener)}),r=[]}var r=[];return e.addMessageListener=func.decorate(e.addMessageListener,function(e,n){var t=n[0],o=n[1];return e.call(this,t,o)?(r.push({name:t,listener:o}),!0):!1}),{clear:n}}function createApi(){var e={console:console.getPublicApi(),storage:storage.getPublicApi(),xhr:xhr.getPublicApi(),browser:browser.getPublicApi(),i18n:i18n.getPublicApi(),io:io.getPublicApi(),getExtensionInfo:function(){return extensionInfo.getRawData()},isDebug:function(){return extensionInfo.debug},invokeAsync:func.bind(invokeAsync.invokeAsync,invokeAsync),invokeAsyncCallback:func.bind(invokeAsync.invokeAsyncCallback,invokeAsync),dispatchMessage:dispatchMessage,addMessageListener:func.bind(messageTarget.addMessageListener,messageTarget),removeMessageListener:func.bind(messageTarget.removeMessageListener,messageTarget)},n={browserButton:browserButton,notifications:notifications,optionsPage:optionsPage,contextMenuItem:contextMenuItem};object.forEach(n,function(n,r){n.getPublicApi&&(e.ui=e.ui||{},e.ui[r]=n.getPublicApi())});var r=wrapMessageTarget(e),t=null;e.ui.browserButton&&(t=wrapEventTarget(e.ui.browserButton));var o=wrapEventTarget(e.browser);return object.forEach(e,function(e){"object"==typeof e&&object.freeze(e)}),e.ui&&object.forEach(e.ui,function(e){"object"==typeof e&&object.freeze(e)}),core.fireEvent("createApi",{name:"kango",obj:e}),object.freeze(e),{obj:e,clear:function(){r.clear(),t&&t.clear(),o.clear()}}}var core=require("kango/core"),extensionInfo=require("kango/extension_info"),utils=require("kango/utils"),object=utils.object,array=utils.array,func=utils.func,invoke=require("kango/invoke"),console=require("kango/console"),storage=require("kango/storage"),xhr=require("kango/xhr"),browser=require("kango/browser"),i18n=require("kango/i18n"),io=require("kango/io"),browserButton=require("kango-ui/browser_button"),optionsPage=require("kango-ui/options"),notifications=require("kango-ui/notifications"),contextMenuItem=require("kango-ui/context_menu"),MessageTarget=require("kango/message_target"),InvokeAsync=require("kango/invoke_async");require("kango/backgroundscript_engine"),require("kango/userscript_engine");var messageRouter=require("kango/messaging"),addEventListener=func.bind(core.addEventListener,core),invokeAsync=new InvokeAsync(addEventListener,dispatchMessage,invoke,function(e,n){console.reportError(n)}),messageTarget=new MessageTarget(addEventListener);core.registerApiFactory("kango",createApi);