speedtest/speedtest_worker.min.js

1 line
9.6 KiB
JavaScript
Raw Normal View History

var testStatus=-1,dlStatus="",ulStatus="",pingStatus="",jitterStatus="",clientIp="",dlProgress=0,ulProgress=0,pingProgress=0,log="";function tlog(t){log+=Date.now()+": "+t+"\n"}function twarn(t){log+=Date.now()+" WARN: "+t+"\n",console.warn(t)}var settings={test_order:"IP_D_U",time_ul:15,time_dl:15,time_ulGraceTime:3,time_dlGraceTime:1.5,count_ping:35,url_dl:"garbage.php",url_ul:"empty.php",url_ping:"empty.php",url_getIp:"getIP.php",getIp_ispInfo:!0,getIp_ispInfo_distance:"km",xhr_dlMultistream:10,xhr_ulMultistream:3,xhr_multistreamDelay:300,xhr_ignoreErrors:1,xhr_dlUseBlob:!1,xhr_ul_blob_megabytes:20,garbagePhp_chunkSize:20,enable_quirks:!0,ping_allowPerformanceApi:!0,overheadCompensationFactor:1.06,useMebibits:!1,telemetry_level:0,url_telemetry:"telemetry.php"},xhr=null,interval=null,test_pointer=0;function url_sep(t){return t.match(/\?/)?"&":"?"}function clearRequests(){if(tlog("stopping pending XHRs"),xhr){for(var t=0;t<xhr.length;t++){try{xhr[t].onprogress=null,xhr[t].onload=null,xhr[t].onerror=null}catch(t){}try{xhr[t].upload.onprogress=null,xhr[t].upload.onload=null,xhr[t].upload.onerror=null}catch(t){}try{xhr[t].abort()}catch(t){}try{delete xhr[t]}catch(t){}}xhr=null}}this.addEventListener("message",function(t){var e=t.data.split(" ");if("status"===e[0]&&postMessage(testStatus+";"+dlStatus+";"+ulStatus+";"+pingStatus+";"+clientIp+";"+jitterStatus+";"+dlProgress+";"+ulProgress+";"+pingProgress),"start"===e[0]&&-1===testStatus){testStatus=0;try{var r={};try{var s=t.data.substring(5);s&&(r=JSON.parse(s))}catch(t){twarn("Error parsing custom settings JSON. Please check your syntax")}for(var n in r)void 0!==settings[n]?settings[n]=r[n]:twarn("Unknown setting ignored: "+n);if(settings.enable_quirks||void 0!==r.enable_quirks&&r.enable_quirks){var i=navigator.userAgent;/Firefox.(\d+\.\d+)/i.test(i)&&void 0===r.xhr_ulMultistream&&(settings.xhr_ulMultistream=1),/Edge.(\d+\.\d+)/i.test(i)&&void 0===r.xhr_dlMultistream&&(settings.xhr_dlMultistream=3),/Chrome.(\d+)/i.test(i)&&self.fetch&&void 0===r.xhr_dlMultistream&&(settings.xhr_dlMultistream=5)}/Edge.(\d+\.\d+)/i.test(i)&&(settings.forceIE11Workaround=!0),/Chrome.(\d+)/i.test(i)&&/Android|iPhone|iPad|iPod|Windows Phone/i.test(i)&&(settings.xhr_ul_blob_megabytes=4),void 0!==r.telemetry_level&&(settings.telemetry_level="basic"===r.telemetry_level?1:"full"===r.telemetry_level?2:0),settings.test_order=settings.test_order.toUpperCase()}catch(t){twarn("Possible error in custom test settings. Some settings may not be applied. Exception: "+t)}tlog(JSON.stringify(settings)),test_pointer=0;var l=!1,a=!1,o=!1,u=!1,g=function(){if(5!=testStatus){if(test_pointer>=settings.test_order.length)return testStatus=4,void sendTelemetry();switch(settings.test_order.charAt(test_pointer)){case"I":if(test_pointer++,l)return void g();l=!0,getIp(g);break;case"D":if(test_pointer++,a)return void g();a=!0,testStatus=1,dlTest(g);break;case"U":if(test_pointer++,o)return void g();o=!0,testStatus=3,ulTest(g);break;case"P":if(test_pointer++,u)return void g();u=!0,testStatus=2,pingTest(g);break;case"_":test_pointer++,setTimeout(g,1e3);break;default:test_pointer++}}};g()}"abort"===e[0]&&(tlog("manually aborted"),clearRequests(),g=null,interval&&clearInterval(interval),settings.telemetry_level>1&&sendTelemetry(),testStatus=5,dlStatus="",ulStatus="",pingStatus="",jitterStatus="")});var ipCalled=!1;function getIp(t){tlog("getIp"),ipCalled||(ipCalled=!0,(xhr=new XMLHttpRequest).onload=function(){tlog("IP: "+xhr.responseText),clientIp=xhr.responseText,t()},xhr.onerror=function(){tlog("getIp failed"),t()},xhr.open("GET",settings.url_getIp+url_sep(settings.url_getIp)+(settings.getIp_ispInfo?"isp=true"+(settings.getIp_ispInfo_distance?"&distance="+settings.getIp_ispInfo_distance+"&":"&"):"&")+"r="+Math.random(),!0),xhr.send())}var dlCalled=!1;function dlTest(t){if(tlog("dlTest"),!dlCalled){dlCalled=!0;var e=0,r=(new Date).getTime(),s=!1,n=!1;xhr=[];for(var i=function(t,r){setTimeout(function(){if(1===testStatus){tlog("dl test stream started "+t+" "+r);var s=0,l=new XMLHttpRequest;xhr[t]=l,xhr[t].onprogress=function(