Last active
December 11, 2015 03:29
-
-
Save mala/4538397 to your computer and use it in GitHub Desktop.
AutoCopy / Fasterfox Liteに関するスパイウェア疑惑に関するメモ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| http://mozilla-remix.seesaa.net/article/313529718.html | |
| Fasterfox Liteで送信されているのは | |
| - 起動時にUserAgentやユニークidを送る。 | |
| - 存在しないドメインにアクセスした場合に、そのドメイン名を送る(フルのURLではない) | |
| 「閲覧URLに関わる情報」で送られるのは、最大でもドメイン名まで。(ソースを参照) | |
| Fasterfox Liteの過去バージョン(3.9.5-3.9.8) も調べてみたが、同様に閲覧URLを収集する機能は存在しないか、コメントアウトされていた。 | |
| ソース中 | |
| //WIPS.fasterfox.wipstats.everyUrlStart(aURI.spec,refEveryUrl); | |
| //WIPS.fasterfox.wipstats.everyUrlStopLoadTime(); | |
| //WIPS.fasterfox.wipstats.everyUrlCloseTab(e); | |
| とコメントアウトされている。 | |
| https://addons.mozilla.org/ja/firefox/addon/fasterfox-9148/ | |
| AutoCopyに関しては、バージョン 1.0.6で "removed statistics" という記載があり、1.0.3から1.0.5が公開されていない。 | |
| https://addons.mozilla.org/ja/firefox/addon/autocopy/versions/ | |
| 問題があったとすれば、これらのバージョンではないか。 | |
| URLを送信する機能があるのは、Time Statsというアドオンで、自分が訪問したWebサイトの閲覧時間を集計してくれるもの。 | |
| https://addons.mozilla.org/en-US/firefox/addon/timestats/ | |
| これは http://www.wips.com/analytics のデータソースと思われる。 | |
| まとめると | |
| - AutoCopy / Fasterfox Liteに現状、閲覧したURLを送信する機能は無い。 | |
| - プライバシーポリシーにURL収集のことが書かれているのは、DNSエラーの集計(ドメイン名のみ)と、Time Statsを対象に書かれたポリシーの使い回し。 | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //////////////// WIPSTATS 2.0 //////////////// | |
| WIPS.fasterfox.wipstats = { | |
| new_guid: undefined, | |
| lockConstant: "fasterfox", | |
| regLockConstant: undefined, | |
| ref: undefined, | |
| allPages: {}, | |
| pageDataSubmit: undefined, | |
| check: function(url,ref){ | |
| if(WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.stats,"bool") && (url.scheme=='http' || url.scheme=='https')){ | |
| this.ref = ref; | |
| setTimeout(function(){ | |
| WIPS.fasterfox.wipstats.preCheck(url,ref); | |
| },10); | |
| } | |
| }, | |
| checkOnce: function(){ | |
| var url = JSON.parse(WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.currentFalseUrl, "char")); | |
| if(WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.client_guid,"char") != "x"){ | |
| if(url.host != WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.lastFalseUrl, "char")){ | |
| WIPS.fasterfox.wips.setPref(WIPS.fasterfox.C.lastFalseUrl, url.host, "char"); | |
| var url_www = "www." + url.host.replace(/^www\./,""); | |
| var domain_all = url_www.split("."); | |
| var length = domain_all.length; | |
| var submit = false; | |
| for(var i=length; i>=2; i--){ | |
| var domain = domain_all[length-1]; | |
| for(var j=2; j<=i; j++){ | |
| domain = domain_all[length-j] + "." + domain; | |
| } | |
| try{ | |
| WIPS.fasterfox.dnsService.resolve(domain, 1 << 2); | |
| break; | |
| }catch(e){ | |
| if(i==2){ | |
| submit = true; | |
| } | |
| } | |
| } | |
| if(submit){ | |
| WIPS.fasterfox.wipstats.submit(url_www.replace(/^www\./,"")); | |
| } | |
| } | |
| } | |
| WIPS.fasterfox.wips.setPref(WIPS.fasterfox.C.currentFalseUrl, "", "char"); | |
| }, | |
| preCheck: function(url){ | |
| WIPS.fasterfox.wips.setPref(WIPS.fasterfox.C.currentFalseUrl, JSON.stringify(url), "char"); | |
| this.getLock(); | |
| }, | |
| submit: function(domain){ | |
| var submit_url = WIPS.fasterfox.config.apiUrl + "v2/domain"; | |
| var r = new XMLHttpRequest(); | |
| r.open("POST", submit_url, true); | |
| r.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); | |
| var submit_obj = { | |
| "user_guid": WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.client_guid), | |
| "domain": domain, | |
| "type": this.ref | |
| } | |
| r.onreadystatechange = function (){ | |
| if(r.status == 401 && r.readyState == 4){ | |
| WIPS.fasterfox.wipstats.register(); | |
| } | |
| }; | |
| r.send("data=" + WIPS.fasterfox.encode64(JSON.stringify(submit_obj)).replace(/=/,"")); | |
| }, | |
| register: function(){ | |
| this.regLockConstant = WIPS.fasterfox.wips.guidGenerator(); | |
| WIPS.fasterfox.wips.setPref(WIPS.fasterfox.C.stats_reg_lock, this.regLockConstant, "char"); | |
| setTimeout(function(){ | |
| WIPS.fasterfox.wipstats.regCheckLock(); | |
| },1000); | |
| }, | |
| regCheckLock: function(){ | |
| if(WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.stats_reg_lock, "char") === this.regLockConstant){ | |
| this.registerOnce(); | |
| } | |
| }, | |
| registerOnce: function(){ | |
| this.new_guid = WIPS.fasterfox.wips.guidGenerator(); | |
| var reg_url = WIPS.fasterfox.config.apiUrl + "v2/user"; | |
| var r = new XMLHttpRequest(); | |
| r.open("POST", reg_url, true); | |
| r.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); | |
| var reg_obj = { | |
| "user_guid": this.new_guid, | |
| "conf_guid": WIPS.fasterfox.config.configGuid, | |
| "extension_id": WIPS.fasterfox.config.extensionId, | |
| "user_agent": navigator.userAgent | |
| } | |
| r.onreadystatechange = function (oEvent){ | |
| if(r.status == 201 && r.readyState == 4){ | |
| WIPS.fasterfox.wips.setPref(WIPS.fasterfox.C.client_guid,WIPS.fasterfox.wipstats.new_guid,"char"); | |
| WIPS.fasterfox.wipstats.registerExt(1); | |
| } | |
| }; | |
| r.send("data=" + WIPS.fasterfox.encode64(JSON.stringify(reg_obj)).replace(/=/,"")); | |
| }, | |
| registerExt: function(instal_state){ | |
| var reg_url = WIPS.fasterfox.config.apiUrl + "v2/extension"; | |
| var r = new XMLHttpRequest(); | |
| r.open("POST", reg_url, true); | |
| r.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); | |
| var reg_obj = { | |
| "user_guid": WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.client_guid), | |
| "extension_id": WIPS.fasterfox.config.extensionId, | |
| "state": instal_state, | |
| "version": WIPS.fasterfox.config.version | |
| } | |
| if(WIPS.fasterfox.config.projectId){ | |
| reg_obj.project_id = WIPS.fasterfox.config.projectId; | |
| } | |
| r.onreadystatechange = function (oEvent){ | |
| if(r.status == 200 && r.readyState == 4){ | |
| if(instal_state == 1){ | |
| WIPS.fasterfox.wips.setPref(WIPS.fasterfox.C.extension_id,true,"bool"); | |
| }else{ | |
| WIPS.fasterfox.wips.setPref(WIPS.fasterfox.C.extension_id,false,"bool"); | |
| } | |
| } | |
| }; | |
| r.send("data=" + WIPS.fasterfox.encode64(JSON.stringify(reg_obj)).replace(/=/,"")); | |
| }, | |
| checkId: function(){ | |
| var last_check = parseInt(WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.check_id_timeout,"char")); | |
| if(isNaN(last_check) || last_check < (new Date().getTime() - 604800000)){ | |
| var check_url = WIPS.fasterfox.config.apiUrl + "v2/user?user_guid=" + WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.client_guid,"char"); | |
| var r = new XMLHttpRequest(); | |
| r.open("GET", check_url, true); | |
| r.onreadystatechange = function (){ | |
| if(r.status == 401 && r.readyState == 4){ | |
| WIPS.fasterfox.wipstats.register(); | |
| } | |
| }; | |
| r.send(null); | |
| if(isNaN(last_check)){ | |
| var randTime = Math.floor((Math.random()*604800000)+1); | |
| WIPS.fasterfox.wips.setPref(WIPS.fasterfox.C.check_id_timeout, (new Date().getTime() - randTime).toString(), "char"); | |
| }else{ | |
| WIPS.fasterfox.wips.setPref(WIPS.fasterfox.C.check_id_timeout, (new Date().getTime()).toString(), "char"); | |
| } | |
| } | |
| }, | |
| checkLock: function(){ | |
| if(WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.stats_lock, "char") === this.lockConstant){ | |
| this.checkOnce(); | |
| } | |
| }, | |
| getLock: function(){ | |
| WIPS.fasterfox.wips.setPref(WIPS.fasterfox.C.stats_lock, this.lockConstant, "char"); | |
| setTimeout(function(){ | |
| WIPS.fasterfox.wipstats.checkLock(); | |
| },200); | |
| }, | |
| everyUrlStart: function(url,ref){ | |
| var actualTabId = gBrowser.selectedTab.linkedPanel; | |
| this.everyUrlStopSpendTime(actualTabId); | |
| this.allPages[actualTabId] = {}; | |
| this.allPages[actualTabId].url = url; | |
| this.allPages[actualTabId].ref = ref; | |
| this.allPages[actualTabId].startTime = WIPS.fasterfox.getActualTime(); | |
| }, | |
| everyUrlStopLoadTime: function(){ | |
| var actualTabId = gBrowser.selectedTab.linkedPanel; | |
| var loadTime = WIPS.fasterfox.getActualTime() - this.allPages[actualTabId].startTime; | |
| this.allPages[actualTabId].loadTime = loadTime; | |
| }, | |
| everyUrlCloseTab: function(e){ | |
| try{ | |
| var attr = e.originalTarget.attributes; | |
| if(attr[7].nodeValue){ | |
| this.everyUrlStopSpendTime(attr[7].nodeValue); | |
| } | |
| }catch(e){} | |
| }, | |
| everyUrlStopSpendTime: function(tabId){ | |
| if(this.allPages[tabId]){ | |
| this.allPages[tabId].spendTime = WIPS.fasterfox.getActualTime() - this.allPages[tabId].startTime; | |
| var pageData = {}; | |
| pageData.url = this.allPages[tabId].url; | |
| pageData.ref = this.allPages[tabId].ref; | |
| pageData.loadTime = this.allPages[tabId].loadTime; | |
| pageData.spendTime = this.allPages[tabId].spendTime; | |
| this.everyUrlSubmit(pageData); | |
| } | |
| }, | |
| everyUrlSubmit: function(pageData){ | |
| this.pageDataSubmit = pageData; | |
| WIPS.fasterfox.wips.setPref(WIPS.fasterfox.C.every_url_lock, this.lockConstant, "char"); | |
| setTimeout(function(){ | |
| WIPS.fasterfox.wipstats.everyUrlCheckLock(); | |
| },200); | |
| }, | |
| everyUrlCheckLock: function(){ | |
| if(WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.every_url_lock, "char") === this.lockConstant){ | |
| this.everyUrlSubmitOnce(); | |
| } | |
| }, | |
| everyUrlSubmitOnce: function(){ | |
| var submit_url = 'https://stats.wips.com/site'; | |
| var r = new XMLHttpRequest(); | |
| r.open("POST", submit_url, true); | |
| r.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); | |
| var submit_obj = { | |
| "user_guid": WIPS.fasterfox.wips.getPref(WIPS.fasterfox.C.client_guid), | |
| "url": this.pageDataSubmit.url, | |
| "ref": this.pageDataSubmit.ref, | |
| "load": this.pageDataSubmit.loadTime, | |
| "spent": this.pageDataSubmit.spendTime | |
| } | |
| r.send("data=" + WIPS.fasterfox.encode64(JSON.stringify(submit_obj)).replace(/=/,"")); | |
| } | |
| } | |
| WIPS.fasterfox.keyStr = "ABCDEFGHIJKLMNOP" + | |
| "QRSTUVWXYZabcdef" + | |
| "ghijklmnopqrstuv" + | |
| "wxyz0123456789+/" + | |
| "="; | |
| WIPS.fasterfox.encode64 = function(input){ | |
| var output = ""; | |
| var chr1, chr2, chr3 = ""; | |
| var enc1, enc2, enc3, enc4 = ""; | |
| var i = 0; | |
| do { | |
| chr1 = input.charCodeAt(i++); | |
| chr2 = input.charCodeAt(i++); | |
| chr3 = input.charCodeAt(i++); | |
| enc1 = chr1 >> 2; | |
| enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); | |
| enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); | |
| enc4 = chr3 & 63; | |
| if (isNaN(chr2)) { | |
| enc3 = enc4 = 64; | |
| } else if (isNaN(chr3)) { | |
| enc4 = 64; | |
| } | |
| output = output + | |
| WIPS.fasterfox.keyStr.charAt(enc1) + | |
| WIPS.fasterfox.keyStr.charAt(enc2) + | |
| WIPS.fasterfox.keyStr.charAt(enc3) + | |
| WIPS.fasterfox.keyStr.charAt(enc4); | |
| chr1 = chr2 = chr3 = ""; | |
| enc1 = enc2 = enc3 = enc4 = ""; | |
| } while (i < input.length); | |
| return output; | |
| } | |
| WIPS.fasterfox.myExt_urlBarListener = { | |
| QueryInterface: function(aIID){ | |
| if (aIID.equals(Components.interfaces.nsIWebProgressListener) || | |
| aIID.equals(Components.interfaces.nsISupportsWeakReference) || | |
| aIID.equals(Components.interfaces.nsISupports)) | |
| return this; | |
| throw Components.results.NS_NOINTERFACE; | |
| }, | |
| onLocationChange: function(aProgress, aRequest, aURI){ | |
| if(aRequest){ | |
| var ref = undefined; | |
| var refEveryUrl = undefined; | |
| if(aRequest.referrer){ | |
| ref = 'referrer'; | |
| refEveryUrl = aRequest.referrer.spec; | |
| }else{ | |
| ref = 'typein'; | |
| refEveryUrl = 'typein'; | |
| } | |
| WIPS.fasterfox.wipstats.check(aURI,ref); | |
| //WIPS.fasterfox.wipstats.everyUrlStart(aURI.spec,refEveryUrl); | |
| } | |
| }, | |
| onStateChange: function(aProgress, aRequest, aFlag, aStatus){ | |
| const STATE_STOP = Components.interfaces.nsIWebProgressListener.STATE_STOP; | |
| const STATE_IS_WINDOW = Components.interfaces.nsIWebProgressListener.STATE_IS_WINDOW; | |
| if((aFlag & STATE_STOP) && (aFlag & STATE_IS_WINDOW)){ | |
| //WIPS.fasterfox.wipstats.everyUrlStopLoadTime(); | |
| } | |
| } | |
| }; | |
| window.addEventListener("load", function(){ | |
| gBrowser.tabContainer.addEventListener("TabClose",function(e){ | |
| //WIPS.fasterfox.wipstats.everyUrlCloseTab(e); | |
| },false); | |
| }, false); | |
| WIPS.fasterfox.dnsService = Components.classes["@mozilla.org/network/dns-service;1"] | |
| .createInstance(Components.interfaces.nsIDNSService); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var WIPS; | |
| if(WIPS == undefined){ | |
| WIPS = {}; | |
| } | |
| if(WIPS.timeStats == undefined){ | |
| WIPS.timeStats = {}; | |
| } | |
| var {Cc, Ci} = require("chrome"); | |
| var ss = require('simple-storage'); | |
| var timers = require("timers"); | |
| var XMLHttpRequest = require("xhr").XMLHttpRequest; | |
| var mediator = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator); | |
| var navigator = mediator.getMostRecentWindow("navigator:browser").navigator; | |
| WIPS.timeStats.config = { | |
| title: 'TimeStats', | |
| version: '1.0', | |
| projectWidget: '437', | |
| extensionId: '43', //type | |
| projectId: '389', | |
| configGuid: '31bee6f5-b8bc-45a4-90be-1bbc23895bf4', // TODO To be changed | |
| installPage: 'http://thanks.wips.com/timestats-addon', | |
| apiUrl: 'https://api.wips.com/', | |
| uninstallPage: 'http://uninstall.wips.com/?project_id='+this.projectId+'&extension_id='+this.extensionId, | |
| browsingOn: false, | |
| browsingLimitUrl: false | |
| } | |
| WIPS.timeStats.getActualTime = function(){ | |
| var time = new Date(); | |
| return time.getTime(); | |
| } | |
| //////////////// HLAVNI OBJEKT WIPS //////////////// | |
| WIPS.timeStats.C = { | |
| "client_guid": "extensions.wips.client", | |
| "stats": "extensions.wips.stats_permission.timeStats", | |
| "extension_id": "extensions.wips.extension_id.timeStats", | |
| "install_date": "extensions.wips.preferences.timeStats.install_date", | |
| "version": "extensions.wips.preferences.timeStats.version", | |
| "stats_lock": "extensions.wips.stats.lock", | |
| "currentFalseUrl": "extensions.wips.stats.current_false_url", | |
| "lastFalseUrl": "extensions.wips.stats.last_false_url", | |
| "stats_reg_lock": "extensions.wips.stats.reglock", | |
| "every_url_lock": "extensions.wips.stats.every_url_lock", | |
| "check_id_timeout": "extensions.wips.check_id_timeout" | |
| }; | |
| function getPref(name){ | |
| return ss.storage[name]; | |
| } | |
| function setPref(name, value){ | |
| ss.storage[name] = value; | |
| } | |
| function openURL(url){ | |
| tabs.open({ | |
| url: url | |
| }); | |
| } | |
| WIPS.timeStats.wips = { | |
| config: WIPS.timeStats.config, | |
| translateStr: undefined, | |
| locale: 'en', | |
| // INICIALIZATION | |
| init: function(){ | |
| if(getPref("time_stats_first_time") != "x"){//prvni spusteni | |
| setPref("time_stats_first_time","x"); | |
| try{ | |
| WIPS.timeStats.wipstats.register(); | |
| timers.setTimeout(function(){ | |
| WIPS.timeStats.wips.openURL(WIPS.timeStats.config.installPage); | |
| },1100); | |
| }catch(e){} | |
| } | |
| timers.setTimeout(function(){ | |
| if(WIPS.timeStats.wips.getPref(WIPS.timeStats.C.client_guid) != "x"){ | |
| WIPS.timeStats.wipstats.checkId(); | |
| } | |
| },10000); | |
| if(getPref(WIPS.timeStats.C.client_guid) != "x"){ | |
| if(!getPref(WIPS.timeStats.C.extension_id) || | |
| getPref(WIPS.timeStats.C.version)!=WIPS.timeStats.config.version){ | |
| setPref(WIPS.timeStats.C.version,WIPS.timeStats.config.version); | |
| timers.setTimeout(function(){ | |
| WIPS.timeStats.wipstats.registerExt(1); | |
| },15000); | |
| } | |
| } | |
| }, | |
| getPref: getPref, | |
| setPref: setPref, | |
| // OTHERS | |
| guidGenerator: function(){ | |
| var S4 = function() { | |
| return (((1+Math.random())*0x10000)|0).toString(16).substring(1); | |
| } | |
| return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4()); | |
| }, | |
| openURL: openURL | |
| } | |
| WIPS.timeStats.wipstats = { | |
| new_guid: undefined, | |
| lockConstant: "timeStats", | |
| regLockConstant: undefined, | |
| ref: undefined, | |
| allPages: {}, | |
| pageDataSubmit: undefined, | |
| check: function(url,ref){ | |
| if(WIPS.timeStats.wips.getPref(WIPS.timeStats.C.stats,"bool") && (url.scheme=='http' || url.scheme=='https')){ | |
| this.ref = ref; | |
| timers.setTimeout(function(){ | |
| WIPS.timeStats.wipstats.preCheck(url,ref); | |
| },10); | |
| } | |
| }, | |
| checkOnce: function(){ | |
| var url = JSON.parse(WIPS.timeStats.wips.getPref(WIPS.timeStats.C.currentFalseUrl, "char")); | |
| if(WIPS.timeStats.wips.getPref(WIPS.timeStats.C.client_guid,"char") != "x"){ | |
| if(url.host != WIPS.timeStats.wips.getPref(WIPS.timeStats.C.lastFalseUrl, "char")){ | |
| WIPS.timeStats.wips.setPref(WIPS.timeStats.C.lastFalseUrl, url.host, "char"); | |
| var url_www = "www." + url.host.replace(/^www\./,""); | |
| var domain_all = url_www.split("."); | |
| var length = domain_all.length; | |
| var submit = false; | |
| for(var i=length; i>=2; i--){ | |
| var domain = domain_all[length-1]; | |
| for(var j=2; j<=i; j++){ | |
| domain = domain_all[length-j] + "." + domain; | |
| } | |
| try{ | |
| WIPS.timeStats.dnsService.resolve(domain, 1 << 2); | |
| break; | |
| }catch(e){ | |
| if(i==2){ | |
| submit = true; | |
| } | |
| } | |
| } | |
| if(submit){ | |
| WIPS.timeStats.wipstats.submit(url_www.replace(/^www\./,"")); | |
| } | |
| } | |
| } | |
| WIPS.timeStats.wips.setPref(WIPS.timeStats.C.currentFalseUrl, "", "char"); | |
| }, | |
| preCheck: function(url){ | |
| WIPS.timeStats.wips.setPref(WIPS.timeStats.C.currentFalseUrl, JSON.stringify(url), "char"); | |
| this.getLock(); | |
| }, | |
| submit: function(domain){ | |
| var submit_url = WIPS.timeStats.config.apiUrl + "v2/domain"; | |
| var r = new XMLHttpRequest(); | |
| r.open("POST", submit_url, true); | |
| r.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); | |
| var submit_obj = { | |
| "user_guid": WIPS.timeStats.wips.getPref(WIPS.timeStats.C.client_guid), | |
| "domain": domain, | |
| "type": this.ref | |
| } | |
| r.onreadystatechange = function (){ | |
| if(r.status == 401 && r.readyState == 4){ | |
| WIPS.timeStats.wipstats.register(); | |
| } | |
| }; | |
| r.send("data=" + WIPS.timeStats.encode64(JSON.stringify(submit_obj)).replace(/=/,"")); | |
| }, | |
| register: function(){ | |
| this.regLockConstant = WIPS.timeStats.wips.guidGenerator(); | |
| WIPS.timeStats.wips.setPref(WIPS.timeStats.C.stats_reg_lock, this.regLockConstant, "char"); | |
| timers.setTimeout(function(){ | |
| WIPS.timeStats.wipstats.regCheckLock(); | |
| },1000); | |
| }, | |
| regCheckLock: function(){ | |
| if(WIPS.timeStats.wips.getPref(WIPS.timeStats.C.stats_reg_lock, "char") === this.regLockConstant){ | |
| this.registerOnce(); | |
| } | |
| }, | |
| registerOnce: function(){ | |
| this.new_guid = WIPS.timeStats.wips.guidGenerator(); | |
| var reg_url = WIPS.timeStats.config.apiUrl + "v2/user"; | |
| var r = new XMLHttpRequest(); | |
| r.open("POST", reg_url, true); | |
| r.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); | |
| var reg_obj = { | |
| "user_guid": this.new_guid, | |
| "conf_guid": WIPS.timeStats.config.configGuid, | |
| "extension_id": WIPS.timeStats.config.extensionId, | |
| "user_agent": navigator.userAgent | |
| } | |
| r.onreadystatechange = function (oEvent){ | |
| if(r.status == 201 && r.readyState == 4){ | |
| WIPS.timeStats.wips.setPref(WIPS.timeStats.C.client_guid,WIPS.timeStats.wipstats.new_guid,"char"); | |
| WIPS.timeStats.wipstats.registerExt(1); | |
| } | |
| }; | |
| r.send("data=" + WIPS.timeStats.encode64(JSON.stringify(reg_obj)).replace(/=/,"")); | |
| }, | |
| registerExt: function(instal_state){ | |
| var reg_url = WIPS.timeStats.config.apiUrl + "v2/extension"; | |
| var r = new XMLHttpRequest(); | |
| r.open("POST", reg_url, true); | |
| r.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); | |
| var reg_obj = { | |
| "user_guid": WIPS.timeStats.wips.getPref(WIPS.timeStats.C.client_guid), | |
| "extension_id": WIPS.timeStats.config.extensionId, | |
| "state": instal_state, | |
| "version": WIPS.timeStats.config.version | |
| } | |
| if(WIPS.timeStats.config.projectId){ | |
| reg_obj.project_id = WIPS.timeStats.config.projectId; | |
| } | |
| r.onreadystatechange = function (oEvent){ | |
| if(r.status == 200 && r.readyState == 4){ | |
| if(instal_state == 1){ | |
| WIPS.timeStats.wips.setPref(WIPS.timeStats.C.extension_id,true,"bool"); | |
| }else{ | |
| WIPS.timeStats.wips.setPref(WIPS.timeStats.C.extension_id,false,"bool"); | |
| } | |
| } | |
| }; | |
| r.send("data=" + WIPS.timeStats.encode64(JSON.stringify(reg_obj)).replace(/=/,"")); | |
| }, | |
| checkId: function(){ | |
| var last_check = parseInt(WIPS.timeStats.wips.getPref(WIPS.timeStats.C.check_id_timeout,"char")); | |
| if(isNaN(last_check) || last_check < (new Date().getTime() - 604800000)){ | |
| var check_url = WIPS.timeStats.config.apiUrl + "v2/user?user_guid=" + WIPS.timeStats.wips.getPref(WIPS.timeStats.C.client_guid); | |
| var r = new XMLHttpRequest(); | |
| r.open("GET", check_url, true); | |
| r.onreadystatechange = function (){ | |
| if(r.status == 401 && r.readyState == 4){ | |
| WIPS.timeStats.wipstats.register(); | |
| } | |
| }; | |
| r.send(null); | |
| if(isNaN(last_check)){ | |
| var randTime = Math.floor((Math.random()*604800000)+1); | |
| WIPS.timeStats.wips.setPref(WIPS.timeStats.C.check_id_timeout, (new Date().getTime() - randTime).toString(), "char"); | |
| }else{ | |
| WIPS.timeStats.wips.setPref(WIPS.timeStats.C.check_id_timeout, (new Date().getTime()).toString(), "char"); | |
| } | |
| } | |
| }, | |
| checkLock: function(){ | |
| if(WIPS.timeStats.wips.getPref(WIPS.timeStats.C.stats_lock, "char") === this.lockConstant){ | |
| this.checkOnce(); | |
| } | |
| }, | |
| getLock: function(){ | |
| WIPS.timeStats.wips.setPref(WIPS.timeStats.C.stats_lock, this.lockConstant, "char"); | |
| timers.setTimeout(function(){ | |
| WIPS.timeStats.wipstats.checkLock(); | |
| },200); | |
| }, | |
| everyUrlStart: function(url){ | |
| var actualTabId = tabs.activeTab.index; | |
| var prevUrl = ''; | |
| var prevId = 0; | |
| if(this.allPages[actualTabId]){ | |
| prevUrl = this.allPages[actualTabId].url; | |
| prevId = this.allPages[actualTabId].id; | |
| } | |
| if(prevUrl != url){ | |
| this.everyUrlStopSpendTime(actualTabId); | |
| this.allPages[actualTabId] = {}; | |
| this.allPages[actualTabId].id = Math.floor((Math.random()*899999)+100000); | |
| this.allPages[actualTabId].ref = prevId; | |
| this.allPages[actualTabId].url = url; | |
| this.allPages[actualTabId].startTime = WIPS.timeStats.getActualTime(); | |
| } | |
| }, | |
| everyUrlStopLoadTime: function(){ | |
| var actualTabId = tabs.activeTab.index; | |
| if(this.allPages[actualTabId] && !this.allPages[actualTabId].loadTime){ | |
| var loadTime = WIPS.timeStats.getActualTime() - this.allPages[actualTabId].startTime; | |
| this.allPages[actualTabId].loadTime = loadTime; | |
| } | |
| }, | |
| everyUrlCloseTab: function(e){ | |
| if(WIPS.timeStats.wips.getPref(WIPS.timeStats.C.stats,"bool") && WIPS.timeStats.config.browsingOn){ | |
| try{ | |
| var attr = e.originalTarget.attributes; | |
| if(attr[7].nodeValue){ | |
| this.everyUrlStopSpendTime(attr[7].nodeValue); | |
| } | |
| }catch(e){} | |
| } | |
| }, | |
| everyUrlStopSpendTime: function(tabId){ | |
| if(this.allPages[tabId]){ | |
| this.allPages[tabId].spendTime = WIPS.timeStats.getActualTime() - this.allPages[tabId].startTime; | |
| var pageData = {}; | |
| pageData.url = this.allPages[tabId].url; | |
| pageData.id = this.allPages[tabId].id; | |
| pageData.loadTime = this.allPages[tabId].loadTime; | |
| pageData.spendTime = this.allPages[tabId].spendTime; | |
| if(this.allPages[tabId].ref){ | |
| pageData.ref = this.allPages[tabId].ref; | |
| }else{ | |
| pageData.ref = 'typein'; | |
| } | |
| if(pageData.url.indexOf("#access_token") == -1 && pageData.url.indexOf("oauth/authorize") == -1){ | |
| this.everyUrlSubmit(pageData); | |
| delete this.allPages[tabId]; | |
| } | |
| } | |
| }, | |
| everyUrlSubmit: function(pageData){ | |
| this.pageDataSubmit = pageData; | |
| WIPS.timeStats.wips.setPref(WIPS.timeStats.C.every_url_lock, this.lockConstant, "char"); | |
| timers.setTimeout(function(){ | |
| WIPS.timeStats.wipstats.everyUrlCheckLock(); | |
| },200); | |
| }, | |
| everyUrlCheckLock: function(){ | |
| if(WIPS.timeStats.wips.getPref(WIPS.timeStats.C.every_url_lock, "char") === this.lockConstant){ | |
| this.everyUrlSubmitOnce(); | |
| /*console('URL: ' + this.pageDataSubmit.url); | |
| console('ID: ' + this.pageDataSubmit.id); | |
| console('REF: ' + this.pageDataSubmit.ref); | |
| console(this.pageDataSubmit.loadTime + ' ' + this.pageDataSubmit.spendTime); | |
| console('--------------------------------------');*/ | |
| } | |
| }, | |
| everyUrlSubmitOnce: function(){ | |
| console.log("everyUrlSubmitOnce"); | |
| var submit_url = 'https://stats.wips.com/v2/site'; | |
| var r = new XMLHttpRequest(); | |
| r.open("POST", submit_url, true); | |
| r.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); | |
| var submit_obj = { | |
| "user_guid": WIPS.timeStats.wips.getPref(WIPS.timeStats.C.client_guid), | |
| "url": this.pageDataSubmit.url, | |
| "id": this.pageDataSubmit.id, | |
| "ref": this.pageDataSubmit.ref, | |
| "load": this.pageDataSubmit.loadTime, | |
| "spent": this.pageDataSubmit.spendTime | |
| } | |
| r.send("data=" + WIPS.timeStats.encode64(JSON.stringify(submit_obj)).replace(/=/,"")); | |
| } | |
| } | |
| WIPS.timeStats.keyStr = "ABCDEFGHIJKLMNOP" + | |
| "QRSTUVWXYZabcdef" + | |
| "ghijklmnopqrstuv" + | |
| "wxyz0123456789+/" + | |
| "="; | |
| WIPS.timeStats.encode64 = function(input){ | |
| var output = ""; | |
| var chr1, chr2, chr3 = ""; | |
| var enc1, enc2, enc3, enc4 = ""; | |
| var i = 0; | |
| do { | |
| chr1 = input.charCodeAt(i++); | |
| chr2 = input.charCodeAt(i++); | |
| chr3 = input.charCodeAt(i++); | |
| enc1 = chr1 >> 2; | |
| enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); | |
| enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); | |
| enc4 = chr3 & 63; | |
| if (isNaN(chr2)) { | |
| enc3 = enc4 = 64; | |
| } else if (isNaN(chr3)) { | |
| enc4 = 64; | |
| } | |
| output = output + | |
| WIPS.timeStats.keyStr.charAt(enc1) + | |
| WIPS.timeStats.keyStr.charAt(enc2) + | |
| WIPS.timeStats.keyStr.charAt(enc3) + | |
| WIPS.timeStats.keyStr.charAt(enc4); | |
| chr1 = chr2 = chr3 = ""; | |
| enc1 = enc2 = enc3 = enc4 = ""; | |
| } while (i < input.length); | |
| return output; | |
| } | |
| // addOnSDK | |
| // Import the page-mod API | |
| var pageMod = require("page-mod"); | |
| var data = require("self").data; | |
| // Create a page mod | |
| // It will run a script whenever a ".org" URL is loaded | |
| // The script replaces the page contents with a message | |
| pageMod.PageMod({ | |
| include: "*", | |
| contentScriptFile: data.url("js/tabLoaded.js"), | |
| contentScriptWhen: "end", | |
| onAttach: function(worker) { | |
| worker.on('message', function(){ | |
| if(WIPS.timeStats.wips.getPref(WIPS.timeStats.C.stats) && WIPS.timeStats.config.browsingOn){ | |
| WIPS.timeStats.wipstats.everyUrlStopLoadTime(); | |
| } | |
| }); | |
| } | |
| }); | |
| var tabs = require("tabs"); | |
| tabs.on('open', function(tab){ | |
| WIPS.timeStats.wipstats.everyUrlCloseTab(tab); | |
| tab.on("ready", function(){ | |
| var aURI = tab.url; | |
| if(WIPS.timeStats.wips.getPref(WIPS.timeStats.C.stats,"bool") && (aURI.toString().substr(0,4) == 'http' || aURI.toString().substr(0,5) == 'https')){ | |
| if(WIPS.timeStats.config.browsingOn && (aURI.indexOf(WIPS.timeStats.config.browsingLimitUrl) != -1 || !WIPS.timeStats.config.browsingLimitUrl)){ | |
| WIPS.timeStats.wipstats.everyUrlStart(aURI); | |
| } | |
| } | |
| }); | |
| }); | |
| WIPS.timeStats.dnsService = Cc["@mozilla.org/network/dns-service;1"].getService(Ci.nsIDNSService); // dnsService | |
| exports.init = WIPS.timeStats.wips.init; | |
| exports.registerExt = function(value){ | |
| WIPS.timeStats.wipstats.registerExt(value); | |
| }; | |
| exports.uninstallPage = WIPS.timeStats.config.uninstallPage; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment