home *** CD-ROM | disk | FTP | other *** search
Wrap
/*----------------------------------------------------- Copyright (c) 2006 McAfee, Inc. All Rights Reserved. -----------------------------------------------------*/ function SiteAdvisorFirefoxExtension() { var premium; var on; var highliteon; var buttonon; var psurf; var suite; var uid; var uuid; var pagedom; var domain_specifier = ""; var loc = ""; var sloc = ""; var prodmode = true; var siteadvisor_debug = false; var siteadvisor_release = true; var on_search_page = "false"; var byebye = false; var completejavascript = false; var alreadyWarned = false; var udscache = new Array(); var cachesize = 50; var cachettl = 43200000; var regexmap = new Array(); var req; var doSSL = false; var searchdat = "search.dat"; var mode; var BASIC = 1; var PLUS = 2; var CRIPPLED = 3; var McLocales = new Array("en-US","en-CA","en-GB","en-AU","en-IE","es-ES","es-MX","es-AR","es-CL","es-PE", "fr-FR","fr-CA","pt-PT","pt-BR","zh-CN","zh-TW","cs-CZ","de-DE","it-IT","ja-JP", "nl-NL","nb-NO","no-NO","pl-PL","da-DK","fi-FI","tr-TR","sv-SE","ko-KR","el-EL", "hu-HU","ru-RU","sk-SK"); var OEMStrB; var overlay_objects = new Array(); var highlite_colors = new Array(); var whitelistedDomains = ""; function putContents(rURL,lURL,build,cksum){ var contents = getContentsFromURL(rURL); if (!contents) return; tFile = "temp.js"; writeFile(contents,tFile); if (validateCksum(tFile,cksum)) copyFile(tFile,lURL); else return; if (build != -1) { setBuild(build); } } function copyFile(src,dst) { str = readFile(src); writeFile(str,dst); } function getContentsFromURL(rURL) { try { httpreq = new XMLHttpRequest(); httpreq.open('GET', rURL, false); httpreq.send(null); if(httpreq.status == 200){ return httpreq.responseText; } else { return null; } } catch (connerr) { return null; } } function readFile(lURL) { var file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); file.append(lURL); var data = ""; var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"] .createInstance(Components.interfaces.nsIFileInputStream); var sstream = Components.classes["@mozilla.org/scriptableinputstream;1"] .createInstance(Components.interfaces.nsIScriptableInputStream); fstream.init(file, 1, 0, false); sstream.init(fstream); var str = sstream.read(-1); while (str.length > 0) { data += str; str = sstream.read(-1); } sstream.close(); fstream.close(); return data; } function writeFile(str,lURL) { var file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); file.append(lURL); var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"] .createInstance(Components.interfaces.nsIFileOutputStream); foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate foStream.write(str, str.length); foStream.close(); } function getFirefoxVersion() { var version = "0"; try { var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); version = appInfo.version; } catch (appinfoerr) { try { version = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getCharPref("app.version"); } catch (preferr) { } } return version; } function compareFirefoxVersion(compareVersion) { var version = getFirefoxVersion(); try { var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"].getService(Components.interfaces.nsIVersionComparator); if(versionChecker.compare(version, compareVersion) < 0) return true; } catch (vcheckerr) { } return false; } function validateCksum(lURL,cksum) { var version = "0"; try { var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); version = appInfo.version; } catch (appinfoerr) { try { version = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getCharPref("app.version"); } catch (preferr) { return true; } } try { var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"].getService(Components.interfaces.nsIVersionComparator); if(versionChecker.compare(version, "1.5") < 0) return true; } catch (vcheckerr) { return true; } var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile); file.append(lURL); var hasher = Components.classes["@mozilla.org/security/hash;1"].createInstance(Components.interfaces.nsICryptoHash); hasher.init(hasher.MD5); var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"] .createInstance(Components.interfaces.nsIFileInputStream); fstream.init(file, 1, 0, false); hasher.updateFromStream(fstream,fstream.available()); if (hasher.finish(true) == base16To64(cksum)) return true; if (cksum == "0123456789ABCDEF") return true; return false; } function base16To64(str16) { var b64 = new Array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'); var str64 = "" while (str16.length > 0) { str24 = str16.substring(0,6); i24 = parseInt(str24,16); if (str24.length == 6) { str64 += b64[(i24&0xFC0000)>>18]+b64[(i24&0x3F000)>>12]+b64[(i24&0xFC0)>>6]+b64[i24&0x3F]; } else if (str24.length == 4) { str64 += b64[(i24&0xFC00)>>10]+b64[(i24&0x3F0)>>4]+b64[(i24&0xF)<<2]+"="; } else if (str24.length == 2) { str64 += b64[(i24&0xFC)>>2]+b64[(i24&0x3)<<4] + "=="; } str16 = str16.slice(6); } return str64; } function addScript(lURL) { try{ data = readFile(lURL); } catch(e) { return; } try{ eval(data); } catch(e) {} if (!completejavascript) setBuild(0); if (getLKV() != 0 && parseFloat(getVersion()) > getLKV()) { sendUpgradePing(); setLKV(getVersion()); } else if (getLKV() == 0) { setLKV(getVersion()); } setUpdateURL(); populateMenus(); var appcon = window.document.getElementById("appcontent"); if (appcon) { appcon.addEventListener("DOMContentLoaded", save_me, false); appcon.addEventListener("focus",focus_handler,true); appcon.addEventListener("blur",focus_handler,true); appcon.addEventListener("mousedown",focus_handler,true); appcon.addEventListener("mouseup",focus_handler,true); appcon.addEventListener("load",load_handler,true); appcon.addEventListener("click",saDontWarn,false); } //**************************************************************************** listObj = new Object(); listObj.wpl = Components.interfaces.nsIWebProgressListener; listObj.QueryInterface = function(aIID) { if (aIID.equals(listObj.wpl) || aIID.equals(Components.interfaces.nsISupportsWeakReference) || aIID.equals(Components.interfaces.nsISupports)) { return this; } throw Components.results.NS_NOINTERFACE; } listObj.onStateChange = function(aProgress, aRequest, aFlag, aStatus) { if (aFlag & listObj.wpl.STATE_START) { if (aRequest) { changebutton_URI(aRequest.originalURI); } } return 0; } //// This fires when the location bar changes i.e load event is confirmed //// or when the user switches tabs listObj.onLocationChange = function(aProgress, aRequest, aURI) { return 0; } //// For definitions of the remaining functions see XulPlanet.com listObj.onProgressChange = function() { return 0; }; listObj.onStatusChange = function() { return 0; }; listObj.onSecurityChange = function() { return 0; }; listObj.onLinkIconAvailable = function() { return 0; }; try { var doc = document.getElementById("content"); if (doc) { doc.addProgressListener( listObj, Components.interfaces.nsIWebProgress.NOTIFY_ALL ); } } catch(e) { //alert(e.message); } //**************************************************************************** changebutton(); } function saDontWarn(e) { if((e.originalTarget.tagName=="B" && e.originalTarget.parentNode.parentNode.id=="DontWarn") || (e.originalTarget.tagName=="SPAN" && e.originalTarget.parentNode.id=="DontWarn") && window._content.location.host.match(/\.siteadvisor\./)) { try { psurf = getPsurfEnabled(); if(psurf) setPSurf(false); var l = window._content.location.href; var dIdx = l.indexOf("domain="); var sIdx = l.indexOf("&" , dIdx + 7); if(sIdx < 0) sIdx = l.length var url = l.slice(dIdx + 7, sIdx); url = stripargs(url); var flag = getBoolPref("extensions.safe.flag"); if(!flag) return; addWhitelist(url); if(e.originalTarget.tagName=="B" && e.originalTarget.parentNode.parentNode.id=="DontWarn") e.originalTarget.parentNode.parentNode.href = "http://www." + url; if(e.originalTarget.tagName=="SPAN" && e.originalTarget.parentNode.id=="DontWarn") e.originalTarget.parentNode.href = "http://www." + url; } catch(e) { //alert(e.message) } } } function makeDssQuery(dssquery,loc) { var dssurl = getDss(); httpGetRequest(dssurl, dssquery, true, true,null,false,loc); } function makeSSLDssQuery(dssquery,loc) { var dssurl = getDss(); httpGetRequest(dssurl, dssquery, true, true,null,true,loc); } function retryDssQuery(dssurl,dssquery,greq,forceSSL,loc) { if (dssurl.match(/dss1/)) dssurl = dssurl.replace("dss1","dss2"); else if (dssurl.match(/dss2/)) dssurl = dssurl.replace("dss2","dss1"); setDss(dssurl); httpGetRequest(dssurl, dssquery, false, false,greq,forceSSL,loc); } function useSSL(dssurl) { if (dssurl.match(/^https:/)) return dssurl; else return dssurl.replace(/^http:/,"https:"); } function httpGetRequest(dssurl,dssquery,retry,timeout,oldreq,forceSSL,loc) { if (oldreq) { if (oldreq.timeoutId) clearTimeout(oldreq.timeoutId); oldreq.onreadystatechange = null; oldreq.abort(); } var greq = new XMLHttpRequest(); if (timeout) { greq.timeoutId = setTimeout(retryDssQuery,10000,dssurl,dssquery,greq,forceSSL,loc); greq.onprogress = function () { clearTimeout(greq.timeoutId); greq.timeoutId = setTimeout(retryDssQuery,10000,dssurl,dssquery,greq,forceSSL,loc); } } greq.open('GET',(forceSSL? useSSL(dssurl) : checkSSL(dssurl)) + dssquery, true); greq.overrideMimeType('text/xml'); greq.setRequestHeader("Accept-Encoding", ""); greq.onreadystatechange = function () { if (greq.readyState == 4) { var stat; try {stat = greq.status;} catch(staterr) {stat = 500;} if (greq.timeoutId) clearTimeout(greq.timeoutId); if (stat == 200 && greq.responseXML.documentElement.nodeName != "parsererror") { DSSResponseHandler(greq.responseXML,dssquery,loc); } else if (retry) { retryDssQuery(dssurl,dssquery,greq,forceSSL,loc); } else { DSSFailureHandler(dssquery); } } }; greq.send(null); } function DSSResponseHandler(xml,dssquery,loc) { var responseHandlers = {'PingResponse': versionHandler, 'DomainQueryResponse': SingleQueryDSSHandler}; var handlerFound = false; for (var key in responseHandlers) if (xml.getElementsByTagName(key).length == 1) { responseHandlers[key](xml,loc); handlerFound = true; } if (!handlerFound) { checkForEmergency(xml); DSSFailureHandler(dssquery); } } function DSSFailureHandler(dssquery) { var responseHandlers = {'Ping?': pingFailureHandler, 'Query?': function(){}}; for (var key in responseHandlers) if (dssquery.indexOf(key) == 0) responseHandlers[key](); } function pingFailureHandler() { addScript(searchdat); } function get_js() { doSSL = getBoolPref("extensions.safe.doSSL",false); makeSSLDssQuery("Ping?includeVersionInfo=true&version=2&client_ver=" + getFullVersion() +"&locale="+getLocale()+"&aff_id="+getAffid()+"&UID="+getGuid(), window._content.location.href); } function versionHandler(XML,loc) { checkForEmergency(XML); var versioninfos = XML.getElementsByTagName("VersionInfo"); for (var i = 0; i < versioninfos.length; i++) { versioninfo = versioninfos.item(i); entity = versioninfo.attributes.getNamedItem("entity").nodeValue; if (entity.toLowerCase() == searchdat) { newestbuild = parseInt(versioninfo.attributes.getNamedItem("version").nodeValue); currentbuild = getBuild(); var sdfile = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile); sdfile.append("search.dat"); if (newestbuild > currentbuild || !sdfile.exists()) { loca = versioninfo.attributes.getNamedItem("location").nodeValue; cksum = versioninfo.attributes.getNamedItem("cksum").nodeValue; var ioserv = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); var locaObj = ioserv.newURI(loca,"utf-8",null); if (locaObj.host.match(/\.siteadvisor\.com$/) || locaObj.host.match(/\.mcafee\.com$/) || locaObj.host.match(/^siteadvisor\.com$/) || locaObj.host.match(/^mcafee\.com$/)) putContents(loca,searchdat,newestbuild,cksum); if (currentbuild != 0 && getBuild() > currentbuild) sendUpgradePing(); immediate = versioninfo.attributes.getNamedItem("immediate").nodeValue; if (immediate == "true") check_auto_update(); } break; } } addScript(searchdat); } function getShowMenuTellAFriend() { try { var showMenuTellAFriend = OEMstrb("ShowMenuTellAFriend"); if (showMenuTellAFriend && showMenuTellAFriend.toLowerCase() == "true") return false; else if (showMenuTellAFriend && showMenuTellAFriend.toLowerCase() == "false") return true; } catch (StrBErr) {} return false; } function getShowMenuSendFeedback() { try { var showMenuSendFeedback = OEMstrb("ShowMenuSendFeedback"); if (showMenuSendFeedback && showMenuSendFeedback.toLowerCase() == "true") return false; else if (showMenuSendFeedback && showMenuSendFeedback.toLowerCase() == "false") return true; } catch (StrBErr) {} return false; } function getSafeSearch() { try { var SafeSearch = OEMstrb("SafeSearch"); if (SafeSearch && SafeSearch.toLowerCase() == "true") return true; else if (SafeSearch && SafeSearch.toLowerCase() == "false") return false; } catch (StrBErr) {} return true; } function populateMenus() { if(mode==CRIPPLED) { setCrippled() return; } buttonon = getButtonEnabled(); psurf = getPsurfEnabled(); premium = getPremium(); on = getSafeOn(); highliteon = getHighlight(); doSSL = getSSL(); suite = getSuite(); uid = getUID(); if (!buttonon) document.getElementById("SAFE-Combined-MoreInfo").setAttribute("disabled","true"); else document.getElementById("SAFE-Combined-MoreInfo").setAttribute("disabled","false"); // document.getElementById("SAFE-Combined-MoreInfo").disabled = !buttonon; document.getElementById('SAFE-Combined-RegisterNow').collapsed = true; document.getElementById('SAFE-Combined-WhiteList').collapsed = premium && psurf; document.getElementById('SAFE-Combined-Enable').collapsed = buttonon || (premium && psurf); document.getElementById('SAFE-Combined-Disable').collapsed = !buttonon || (premium && psurf); document.getElementById('SAFE-Combined-EnablePSurf').collapsed = (psurf || !premium); document.getElementById('SAFE-Combined-DisablePSurf').collapsed = (!psurf || !premium); document.getElementById('SAFE-Combined-TellFriend').collapsed = getShowMenuTellAFriend(); document.getElementById('SAFE-Combined-SendFeedback').collapsed = getShowMenuSendFeedback(); if (getShowMenuUpsellMessage() && !premium) { document.getElementById('SAFE-Combined-Upsell').collapsed = false; document.getElementById('SAFE-Combined-Upsell').label = getMenuUpsellMessage(); } else { document.getElementById('SAFE-Combined-Upsell').collapsed = true; } } function getBoolPref(prefname, prefdef) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return pref.getBoolPref(prefname); } catch(e) { pref.setBoolPref(prefname, prefdef); return pref.getBoolPref(prefname); } } function setBoolPref(prefname, prefvalue) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ pref.setBoolPref(prefname, prefvalue); } catch(e) { alert("Failed to set " + prefname + " to " + prefvalue); } } function getIntPref(prefname, prefdef) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return pref.getIntPref(prefname); } catch(e) { pref.setIntPref(prefname, prefdef); return pref.getIntPref(prefname); } } function setIntPref(prefname, prefvalue) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ pref.setIntPref(prefname, prefvalue); } catch(e) { alert("Failed to set " + prefname + " to " + prefvalue); } } function getCharPref(prefname, prefdef) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return pref.getCharPref(prefname); } catch(e) { pref.setCharPref(prefname, prefdef); return pref.getCharPref(prefname); } } function setCharPref(prefname, prefvalue) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ pref.setCharPref(prefname, prefvalue); return true; } catch(e) { return false; } } function createRegkey(root, path, keyname) { try { var fullpath = path + "\\" + keyname; var regKey = Components.classes["@mozilla.org/windows-registry-key;1"].createInstance(Components.interfaces.nsIWindowsRegKey); regKey.create(root, fullpath, Components.interfaces.nsIWindowsRegKey.ACCESS_WRITE); return true; } catch(regErr) { return false; } } function getRegkey(root, path, keyname) { try { var regKey = Components.classes["@mozilla.org/windows-registry-key;1"].createInstance(Components.interfaces.nsIWindowsRegKey); regKey.open(root, path, Components.interfaces.nsIWindowsRegKey.ACCESS_READ); return regKey.readStringValue(keyname); } catch(regErr) { return ""; } } function setRegkey(root, path, keyname, value) { try { var regKey = Components.classes["@mozilla.org/windows-registry-key;1"].createInstance(Components.interfaces.nsIWindowsRegKey); regKey.open(root, path, Components.interfaces.nsIWindowsRegKey.ACCESS_WRITE); return regKey.writeStringValue(keyname, value); } catch(regErr) { return ""; } } function getCharMachineRegkey(path, keyname) { try { var fullpath = "SOFTWARE\\SiteAdvisor\\" + path; return getRegkey(Components.interfaces.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE, fullpath, keyname); } catch(regErr) { return ""; } } function createCharUserRegkey(path, keyname) { try { var fullpath = "SOFTWARE" + path; return createRegkey(Components.interfaces.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, fullpath, keyname); } catch(regErr) { return false; } } function getCharUserRegkey(path, keyname) { try { var fullpath = "SOFTWARE\\SiteAdvisor\\" + path; return getRegkey(Components.interfaces.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, fullpath, keyname); } catch(regErr) { return ""; } } function setCharUserRegkey(path, keyname, value) { try { var fullpath = "SOFTWARE\\SiteAdvisor\\" + path; return setRegkey(Components.interfaces.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, fullpath, keyname, value); } catch(regErr) { return false; } } function getBoolMachineRegkey(path, keyname) { var value = getCharMachineRegkey(path, keyname); if (value == "true") return true; return false; } function getSaXPCom() { if (!compareFirefoxVersion("1.5")) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); const cid = "@siteadvisor.com/SiteAdvisor/FFHook;1"; obj = Components.classes[cid].createInstance(); return obj.QueryInterface(Components.interfaces.IFFHook); } catch (err) { } } } // LKV = last known version function getLKV() { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return parseFloat(pref.getCharPref("extensions.safe.lastKnownVersion")); } catch(e) { pref.setCharPref("extensions.safe.lastKnownVersion","0"); return parseFloat(pref.getCharPref("extensions.safe.lastKnownVersion")); } } function setLKV(lkv) { setCharPref("extensions.safe.lastKnownVersion",lkv); } function getBuild() { return getIntPref("extensions.safe.build", 0); } function setBuild(build) { setIntPref("extensions.safe.build",build); } function getDss() { return getCharPref("extensions.safe.dss","http://dss1.siteadvisor.com/DSS/"); } function setDss(dss) { setCharPref("extensions.safe.dss",dss); } function getUninstalled() { return getBoolPref("extensions.safe.uninstalled"); } function getButtonEnabled() { return getBoolPref("extensions.safe.enablebutton", true); } function setButtonEnabled(enabled) { return setBoolPref("extensions.safe.enablebutton", enabled); } function getProtectedSurf() { try { var interface = getSaXPCom(); return interface.GetProtectedMode(); } catch(e) { } } function getPsurfEnabled() { return (getProtectedSurf() == "Restricted"); } function getPsurfInitialized() { var protectedSurf = getProtectedSurf(); return ((protectedSurf != "Uninitialized")); } function getPremium() { try { var interface = getSaXPCom(); if(mode && mode==BASIC) return false; return interface.IsPremium(); } catch(err) { return false; } } function getSSL() { try { var interface = getSaXPCom(); return interface.GetUseSSL(); } catch(e) { return getBoolPref("extensions.safe.doSSL", false); } } function setSSL(enabled) { try { var interface = getSaXPCom(); return interface.SetUseSSL(enabled); } catch(e) { return setBoolPref("extensions.safe.doSSL", enabled); } } function getHighlight() { try { var interface = getSaXPCom(); return interface.GetSafeSearchHighlight(); } catch(e) { return getBoolPref("extensions.safe.highlight", false); } } function setHighlight(enabled) { try { var interface = getSaXPCom(); interface.SetSafeSearchHighlight(enabled); } catch(e) { return setBoolPref("extensions.safe.highlight", enabled); } } function getSafeOn() { try { var interface = getSaXPCom(); return interface.GetSafesearchIcons(); } catch(e) { return getBoolPref("extensions.safe.on", true); } } function setSafeOn(enabled) { try { var interface = getSaXPCom(); return interface.SetSafesearchIcons(enabled); } catch(e) { return setBoolPref("extensions.safe.on", enabled); } } function getWhitelist() { try { var interface = getSaXPCom(); var whitelist = interface.GetWhitelistSites() return whitelist; } catch (err) { return getCharPref("extensions.safe.whitelist", ""); } } function getPassword() { return getCharMachineRegkey("Premium", "PasswordHash"); } function getHint() { return getCharMachineRegkey("Premium", "PasswordHint"); } function getSuite() { return getCharMachineRegkey("", "HasSuite"); } function getUID() { return getCharUserRegkey("", "UID"); } function getFullVersion() { var client_version = "FF_unknown"; try { client_version = "FF_" + getVersion(); client_version += "_" + getBuild(); } catch (versionerr) {} return client_version; } function checkSSL(dssurl) { if (dssurl.match(/^https:/)) return dssurl; if (doSSL) return dssurl.replace(/^http:/,"https:"); else return dssurl; } function sendUpgradePing() { try{ var request = new XMLHttpRequest(); request.open("GET", checkSSL(getDss()) + "Ping?Version=2&Type=upgrade&client_type=SAFE&client_ver=" +getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid()+"&UID="+getGuid(), true); request.send(null); } catch(comerr) {} } // see if its time to send a ping and send if necessary function pingDSS() { // get last daily and monthly from prefs (in string millisecond format) var lastDaily = getLastDailyPing(); var lastMonthly = getLastMonthlyPing(); // convert string dates into Date objects var lastDailyDate = new Date(lastDaily); var lastMonthlyDate = new Date(lastMonthly); // get the "next month" and "next day" in milliseconds var nextMonth = lastMonthlyDate.setUTCMonth(lastMonthlyDate.getUTCMonth()+1); var nextDay = lastDailyDate.setUTCDate(lastDailyDate.getUTCDate()+1); // get "right now" in milliseconds var rightNowDate = new Date(); var rightNow = rightNowDate.getTime(); // if a month has passed, send a monthly if (nextMonth < rightNow) { // try to send monthly try { request = new XMLHttpRequest(); request.open("GET", checkSSL(getDss()) + "Ping?Version=2&Type=monthly&client_type=SAFE&client_ver=" + getFullVersion()+"&locale="+getLocale()+"&UID="+getGuid(), false); request.overrideMimeType('text/xml'); request.setRequestHeader("Accept-Encoding", ""); request.send(null); var stat; try {stat = request.status;} catch(staterr) {stat = 500;} if (stat != 200 || request.responseXML.documentElement.nodeName == "parsererror") return; if (request.responseXML.getElementsByTagName("PingResponse").length == 0) return; } catch(pingreqerr) { return; } // update last daily to NOW rightNowDate.setUTCHours(0); rightNowDate.setUTCMinutes(0); rightNowDate.setUTCSeconds(0); rightNow = rightNowDate.getTime(); setLastDailyPing(rightNow); // update last monthly to 1st of month rightNowDate.setUTCDate(1); rightNow = rightNowDate.getTime(); setLastMonthlyPing(rightNow); // otherwise, if a day has passed, send a daily } else if (nextDay < rightNow) { // try to send daily try { request = new XMLHttpRequest(); request.open("GET", checkSSL(getDss()) + "Ping?Version=2&Type=daily&client_type=SAFE&client_ver=" + getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid()+"&UID="+getGuid(), false); request.overrideMimeType('text/xml'); request.setRequestHeader("Accept-Encoding", ""); request.send(null); var stat; try {stat = request.status;} catch(staterr) {stat = 500;} if (stat != 200 || request.responseXML.documentElement.nodeName == "parsererror") return; if (request.responseXML.getElementsByTagName("PingResponse").length == 0) return; } catch(pingreqerr) { return; } // update last daily to NOW rightNowDate.setUTCHours(0); rightNowDate.setUTCMinutes(0); rightNowDate.setUTCSeconds(0); rightNow = rightNowDate.getTime(); setLastDailyPing(rightNow); } } function getLocale() { try { var ffLocale = navigator.language; var langPart = ffLocale.split("-")[0]; var langMatch; for (var l = 0; l < McLocales.length; l++) { if (McLocales[l] == ffLocale) return ffLocale; if (!langMatch && McLocales[l].split("-")[0] == langPart) langMatch = McLocales[l]; } return langMatch ? langMatch : "en-US"; } catch(e) { return "en-US"; } } function getLastDailyPing() { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return parseFloat(pref.getCharPref("extensions.safe.lastDailyPing")); } catch(e) { pref.setCharPref("extensions.safe.lastDailyPing","0"); return parseFloat(pref.getCharPref("extensions.safe.lastDailyPing")); } } function setLastDailyPing(t) { setCharPref("extensions.safe.lastDailyPing",t.toString()); } function getLastMonthlyPing() { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return parseFloat(pref.getCharPref("extensions.safe.lastMonthlyPing")); } catch(e) { pref.setCharPref("extensions.safe.lastMonthlyPing","0"); return parseFloat(pref.getCharPref("extensions.safe.lastMonthlyPing")); } } function setLastMonthlyPing(t) { setCharPref("extensions.safe.lastMonthlyPing",t.toString()); } function check_auto_update() { if (!( getBoolPref("extensions.safe.enablebutton", true) || getBoolPref("extensions.safe.on", true) || getBoolPref("extensions.safe.highlight", false))) return; var areq = new XMLHttpRequest(); areq.open('GET',"https://sadownload.mcafee.com/products/sa/firefox/update.rdf", true); areq.overrideMimeType('text/plain'); areq.onreadystatechange = function () { try{ if (areq.readyState == 4) { var stat; try { stat = areq.status; } catch (staterr) { stat = 500; } if (stat == 200){ resp = areq.responseText; start = resp.indexOf("<version>"); end = resp.indexOf("</version>"); newest_version = parseFloat(resp.substring(start+9,end)); var VERSION = parseFloat(getVersion()); // check if the server has a newer version if (newest_version > VERSION) { var install = confirm(strb("safe.updateRequiredResponse")); if (install) { // Extension force-Auto-update code var nsIUpdateItem = Components.interfaces.nsIUpdateItem; var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager); var itemType=nsIUpdateItem.TYPE_EXTENSION; var items; try{ items = gExtensionManager.getItemList('{1650a312-02bc-40ee-977e-83f158701739}', itemType, { }); var updates = Components.classes["@mozilla.org/updates/update-service;1"].getService(Components.interfaces.nsIUpdateService); updates.checkForUpdates(items, items.length, itemType, Components.interfaces.nsIUpdateService.SOURCE_EVENT_USER, window); } catch(ve) { // Firefox 1.5 makes this tons of fun... item = gExtensionManager.getItemForID('{1650a312-02bc-40ee-977e-83f158701739}'); items = new Array(); items[0] = item; updateListener = new Object(); updateListener.onUpdateStarted = function() {}; updateListener.onUpdateEnded = function() {}; updateListener.onAddonUpdateStarted = function(addon) {}; updateListener.onAddonUpdateEnded = function(addon,status) { if (status == 1) { var xpimgr = Components.classes["@mozilla.org/xpinstall/install-manager;1"].createInstance(Components.interfaces.nsIXPInstallManager); urls = new Array(); urls[0] = addon.xpiURL; progress = new Object(); progress.onStateChange = function(idx,st,val) { if (st == Components.interfaces.nsIXPIProgressDialog.INSTALL_DONE) { restart = confirm(strb("safe.closeFFRequest")); if (restart) { var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); var enumerator = wm.getEnumerator(""); while(enumerator.hasMoreElements()) { var win = enumerator.getNext(); win.close(); } } } } progress.onProgress = function(idx,val,mval) {} xpimgr.initManagerFromChrome(urls,1,progress); } }; gExtensionManager.update(items,1,false,updateListener); } } else { //alert(strb("safe.turnOffSafe")); } } } } } catch(e) {} }; areq.send(null); } function getVersion() { try{ var RDFServ = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); var versionRDF = RDFServ.GetResource("http://www.mozilla.org/2004/em-rdf#version"); var extension_data_source= Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager).datasource; var nameArc = RDFServ.GetResource("http://www.mozilla.org/2004/em-rdf#name"); var Container = Components.classes["@mozilla.org/rdf/container;1"].getService(Components.interfaces.nsIRDFContainer); try { var root = RDFServ.GetResource("urn:mozilla:item:root"); Container.Init(extension_data_source,root); } catch(e) { var root = RDFServ.GetResource("urn:mozilla:extension:root"); Container.Init(extension_data_source,root); } var elements=Container.GetElements(); while (elements.hasMoreElements()) { var element = elements.getNext().QueryInterface(Components.interfaces.nsIRDFResource); var target = extension_data_source.GetTarget(element, nameArc ,true); if (target) { name = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; if (name == "McAfee SiteAdvisor") return extension_data_source.GetTarget(element, versionRDF, true).QueryInterface(Components.interfaces.nsIRDFLiteral).Value; } } return strb("safe.unknownVersion"); } catch (allerr) { return strb("safe.unknownVersion"); } } function stripargs(loc) { i = loc.indexOf("?") if (i != -1) loc = loc.substring(0,i); i = loc.indexOf("&") if (i != -1) loc = loc.substring(0,i); i = loc.indexOf(";") if (i != -1) loc = loc.substring(0,i); i = loc.indexOf(",") if (i != -1) loc = loc.substring(0,i); i = loc.indexOf("'") if (i != -1) loc = loc.substring(0,i); i = loc.indexOf(" ") if (i != -1) loc = loc.substring(0,i); locsplit = loc.split(/\/+/); /* if (loc.match(/^https:/) || loc.match(/^http:/) || loc.match(/^ftp:/)) { if (locsplit.length > 4) loc = locsplit[0] + "//" + locsplit[1] + "/" + locsplit[2] + "/" + locsplit[3] + "/"; } else { if (locsplit.length > 3) loc = locsplit[0] + "/" + locsplit[1] + "/" + locsplit[2] + "/"; } */ return loc; } function addToCache(uds, verdict, color, popularity, regxp, pBl) { newregxp = ""; for (var c = 0; c < regxp.length; c++) { if (regxp[c] == "}") newregxp += ")"; else if (regxp[c] == "{") newregxp += "(?:"; else if (regxp[c] == "/") newregxp += "\\/"; else newregxp += regxp[c]; } newEntry = new Object(); newEntry["ds"] = uds; newEntry["vd"] = verdict; newEntry["ts"] = (new Date()).getTime(); newEntry["its"] = (new Date()).getTime(); newEntry["co"] = color; newEntry["pop"] = popularity; newEntry["pbl"] = pBl; regexmap[regexmap.length] = newregxp; if (udscache.length >= cachesize) { min = 0 for (var i = 1; i < udscache.length; i++) { if (udscache[i]["its"] + cachettl < (new Date()).getTime()) { min = i; break; } if (udscache[i]["ts"] < udscache[min]["ts"]) min = i } udscache[min] = newEntry; } else { udscache[udscache.length] = newEntry; } } function getFromCache(mURL) { var dsfrommap = getDsFromMap(mURL); if (!dsfrommap) return false; var entryfromcache = getEntryFromCache(dsfrommap); if (!entryfromcache) return false; return entryfromcache; } function getDsFromMap(mURL) { for (var i = 0; i < regexmap.length; i++) { regxp = regexmap[i]; regxps = regxp.split(/\s/); for (var r = 0; r < regxps.length; r++) { try{ eval("var rem = mURL.match(/" + regxps[r] + "/);"); if (rem) { return rem[rem.length-1]; } } catch (rexe) {} } } return false; } function getEntryFromCache(ds) { for (var i = 0; i < udscache.length; i++) { if (udscache[i]["ds"] == ds) { if (udscache[i]["its"] + cachettl < (new Date()).getTime()) continue; else return udscache[i]; } } return false; } function updateCache(cacheEntry) { cacheEntry["ts"] = (new Date()).getTime(); } function bad_host(h) { if (h == "" || h.match(/[^a-z0-9\.\-]/) || h == "localhost" || h == "127.0.0.1" || (h.indexOf(".") == -1 && !h.match(/^\d+$/)) || h.indexOf(".") == 0 || h.match(/^10\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) || h.match(/^172\.(1[6-9]|2[0-9]|3[0-1])\.\d{1,3}\.\d{1,3}$/) || h.match(/^192\.168\.\d{1,3}\.\d{1,3}$/) || h.match(/\.localdomain$/) || h.match(/\.local$/)) { return true; } return false; } function bad_protocol(p) { if (p.indexOf("http:") == 0 || p.indexOf("https:") == 0 || p.indexOf("ftp:") == 0) return false; return true; } var ffhook; var listener = { QueryInterface : function(aIID) { if (aIID.equals(Components.interfaces.nsIPhishListener) || aIID.equals(Components.interfaces.nsISupports) ) { return this; } throw Components.results.NS_NOINTERFACE; Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE; return null; }, onLookupComplete: function(cookie, val, url) { if (val != 0) { var url = "http://www.siteadvisor.com/phishing.html?domain=" + sloc + "&suite=false&premium=" + premium + "&client_type=FF&client_ver=" + getFullVersion(); window.content.location.replace(url); } }, onLookupFailed: function(cookie, val, url) { try { //alert("onLookupFailed " + cookie + " " + val); } catch(err) { //alert(err); } } } function load_handler(e) { changebutton(); } function is_whitelisted(wdomain,domain) { var ldomain = domain.toLowerCase(); var wldomain = wdomain.toLowerCase().replace(/\./g,"\\."); wldomain = wldomain.replace(/\//g,"\/") var exp = new RegExp("^([^/]*\\.)?"+wldomain+"(/.*)?$"); if(ldomain.match(exp)) { return true; } return false; } function checkForRedirect(classification, popularity) { if (classification != "certified") { whitelistedDomains = getWhitelist(); var whitelistedDomainsArray = whitelistedDomains.split(";"); var count = whitelistedDomainsArray.length; while (count--) { var item = whitelistedDomainsArray[count]; if (item == domain_specifier) return; if(is_whitelisted(domain_specifier,item)) return; } psurf = getPsurfEnabled(); if (premium && psurf && ((classification == "warn") || (classification == "info"))) { var url = "http://www.siteadvisor.com/restricted.html?domain=" + domain_specifier + "&" + buildArgString(); window.content.location.replace(url); } } } function changebutton() { try{ if (!buttonon) { document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); return; } domain_specifier = ""; loc = window._content.location.href; document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); var h = ""; var p = ""; var pn = ""; try{ h = window._content.location.host.toLowerCase(); portsplit = h.split(":"); if (portsplit.length == 2) h = portsplit[0]; p = window._content.location.protocol.toLowerCase(); pn = window._content.location.pathname; } catch(he) {return;} if (bad_host(h)) return; if (bad_protocol(p)) return; sloc = stripargs(h + pn); cacheEntry = getFromCache(sloc); globalSloc=sloc; if (cacheEntry) { domain_specifier = cacheEntry["ds"]; try { var pBl = cacheEntry["pbl"]; var isPhish = checkForPhishing(pBl,loc,domain_specifier); if(isPhish) return; } catch(e) { } var classification = cacheEntry["vd"].toLowerCase(); var popularity = cacheEntry["pop"]; checkForRedirect(classification, popularity); if (classification == "unknown") document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); else document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe-" + cacheEntry["co"].toLowerCase() + ".gif"); updateCache(cacheEntry); return; } sloc=extractHostName(sloc); makeDssQueryPriv("Query?Entitlement=FOO&Type=domain&version=2&name="+escape(sloc)+"&client_ver="+getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid(),loc); } catch(e) {} } function changebutton_URI(URI) { try{ docloc = URI.asciiSpec; if (docloc == loc) { return; } // alert("loc: " + loc); // alert("docloc: " + docloc); if (!buttonon) { document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); return; } domain_specifier = ""; loc = URI.asciiSpec; document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); var h = ""; var p = ""; var pn = ""; try{ h = URI.host.toLowerCase(); portsplit = h.split(":"); if (portsplit.length == 2) h = portsplit[0]; p = URI.scheme.toLowerCase(); pn = URI.path; } catch(he) {return;} if (bad_host(h)) { return; } // hack...nsIURL returns scheme without ":" if (bad_protocol(p+":")) { return; } sloc = stripargs(h + pn); cacheEntry = getFromCache(sloc); globalSloc=sloc; if (cacheEntry) { domain_specifier = cacheEntry["ds"]; try { var pBl = cacheEntry["pbl"]; var isPhish = checkForPhishing(pBl,loc, domain_specifier); if(isPhish) return; } catch(e) { } var classification = cacheEntry["vd"].toLowerCase(); var popularity = cacheEntry["pop"]; checkForRedirect(classification, popularity); if (classification == "unknown") document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); else document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe-" + cacheEntry["co"].toLowerCase() + ".gif"); updateCache(cacheEntry); return; } sloc=extractHostName(sloc); makeDssQueryPriv("Query?Entitlement=FOO&Type=domain&version=2&name="+escape(sloc)+"&client_ver="+getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid(),loc); } catch(e) {} } var globalSloc; function makeDssQueryPriv(dssquery,loc) { var dssurl = getDss(); httpGetRequestPriv(dssurl, dssquery, true, true,null,false,loc); } function httpGetRequestPriv(dssurl,dssquery,retry,timeout,oldreq,forceSSL,loc) { if (oldreq) { if (oldreq.timeoutId) clearTimeout(oldreq.timeoutId); oldreq.onreadystatechange = null; oldreq.abort(); } var greq = new XMLHttpRequest(); if (timeout) { greq.timeoutId = setTimeout(retryDssQueryPriv,10000,dssurl,dssquery,greq,forceSSL,loc); greq.onprogress = function () { clearTimeout(greq.timeoutId); greq.timeoutId = setTimeout(retryDssQueryPriv,10000,dssurl,dssquery,greq,forceSSL,loc); } } greq.open('GET',(forceSSL? useSSL(dssurl) : checkSSL(dssurl)) + dssquery, true); greq.overrideMimeType('text/xml'); greq.setRequestHeader("Accept-Encoding", ""); greq.onreadystatechange = function () { if (greq.readyState == 4) { var stat; try {stat = greq.status;} catch(staterr) {stat = 500;} if (greq.timeoutId) clearTimeout(greq.timeoutId); if (stat == 200 && greq.responseXML.documentElement.nodeName != "parsererror") { DSSResponseHandlerPriv(greq.responseXML,dssquery,loc); } else if (retry) { retryDssQueryPriv(dssurl,dssquery,greq,forceSSL,loc); } else { DSSFailureHandler(dssquery); } } }; greq.send(null); } function DSSResponseHandlerPriv(xml,dssquery,loc) { var responseHandlers = {'PingResponse': versionHandler, 'DomainQueryResponse': SingleQueryDSSHandlerPriv}; var handlerFound = false; for (var key in responseHandlers) if (xml.getElementsByTagName(key).length == 1) { responseHandlers[key](xml,loc); handlerFound = true; } if (!handlerFound) { checkForEmergency(xml); DSSFailureHandler(dssquery); } } var orK = "78600D4531B00B42" function XOR(i,j) { x = i^j; return x; } function hexToDec(h) {return parseInt(h,16);} function dec(encM) { try { var cusK = expK(encM); var entity = encM.length/2; var decM = ""; for(var i=0;i<entity;i++) { var op1 = hexToDec(cusK.slice((2*i),(2*i + 2))); var op2 = hexToDec(encM.slice((2*i),(2*i + 2))); var ch = XOR(op1,op2); decM+=String.fromCharCode(ch) } return decM; } catch(e) { } } function expK(encM) { var cusK = orK; if(encM.length >= orK.length) { x = parseInt(encM.length/orK.length); cusK = ""; for(var i=1;i<=x;i++) { cusK = cusK + orK; } if(encM.length-cusK.length > 0) cusK = cusK + cusK.slice(0,encM.length-cusK.length) } return cusK; } function checkForPhishing(pBl,url,dom_spec) { try { var regExPB = pBl; if(regExPB) { var partRegEx = new Array(); partRegEx=regExPB.split("\t"); for(var m=0;m<partRegEx.length;m++) { partRegEx[m] = dec(partRegEx[m]); var execregex = new RegExp(customizePBLRegEx(partRegEx[m])) var phish = execregex.exec(url) if(phish==null) { } else { //it is phishing---report phishing... whitelistedDomains = getWhitelist(); var count = 0; if (whitelistedDomains) { var whitelistedDomainsArray = whitelistedDomains.split(";"); count = whitelistedDomainsArray.length; } while (count--) { var item = whitelistedDomainsArray[count].toLowerCase(); var wldomain = url.toLowerCase().replace(/\./g,"\\.") wldomain = wldomain.replace(/\//g,"\/"); var exp = new RegExp("^([^/]*\\.)?" + wldomain); if (item.match(exp)) { return false; } var found = is_whitelisted(dom_spec,item); if(found) { return false; } } var redirectURL = "http://www.siteadvisor.com/phishing.html?domain=" + stripargs(url) + "&reason=blacklist" + buildArgString(); window.content.location.replace(redirectURL); return true; } } } } catch(e) { //alert(e.message); } return false; } function customizePBLRegEx(inregex) { try { var outregex = customizeRegEx(inregex); if(outregex.indexOf("(?i)")>=0) outregex = outregex.slice(outregex.indexOf("(?i)") + 4 , outregex.length) return outregex; } catch(e) { //alert(e.message) } } var hd = [null, "^(.*[0-9]{1,3}[\-][0-9]{1,3}[\-][0-9]{1,3}[\-][0-9]{1,3}.*)$", "^(.*\.static\..*\.net.*)$", "^(.*\.adsl\..*)$", "^(.*\.customer\..*)$"]; var hp = "^(?:(?:(?:www)|(?:ftp))\.)*([a-zA-Z0-9][a-zA-Z0-9\-\._]+\/~[^\/?:&]+).*"; function SingleQueryDSSHandlerPriv(XML,loc) { checkForEmergency(XML); var domaininfo = XML.getElementsByTagName("DomainInfo"); if (!domaininfo || !domaininfo.item(0)) { return; } domain_specifier = domaininfo.item(0).attributes.getNamedItem("name").nodeValue; popularity = domaininfo.item(0).attributes.getNamedItem("popularity").nodeValue.toLowerCase(); var dmd = XML.getElementsByTagName("DomainMetaData"); var regxp; if (dmd) { regxp = dmd.item(0).attributes.getNamedItem("domainSpecRegExs").nodeValue; } else { regxp = "REGEXNOTFOUND"; } var firstReq=true; var secdssquery; if(regxp) { var myregex=regxp; var partRegEx = new Array(); partRegEx=myregex.split(" ") for(var m=0;m<partRegEx.length;m++) { var execregex = new RegExp(customizeRegEx(partRegEx[m])) var found = execregex.exec(globalSloc) if(found==null) { } else { if(found!=null) { if(found[1] && found[1].indexOf("/")>0) { globalSloc=found[1]; secdssquery = "Query?Entitlement=FOO&Type=domain&version=2&name="+escape(globalSloc)+"&client_ver="+getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid(); firstReq=false; } if(found[1] && found[1].indexOf("/")<0) { var homepageRegEx = new RegExp(hp); var foundHP = null; var foundHP = homepageRegEx.exec(globalSloc); if(foundHP) { var except = new RegExp(/\/~([^\/?:&]+)/); var subdomain = except.exec(foundHP[1]); var hn = extractHostName(globalSloc) var hnComp = hn.split("."); if(subdomain!="site" && subdomain!=hnComp[hnComp.length-2]) { globalSloc=foundHP[1]; secdssquery = "Query?Entitlement=FOO&Type=domain&version=2&name="+escape(globalSloc)+"&client_ver="+getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid(); firstReq=false; } } if(!foundHP) { var foundHD; for(var iter=1;iter<5;iter++) { var hostingDomainRegEx = new RegExp(hd[iter]); foundHD = hostingDomainRegEx.exec(extractHostName(globalSloc)); if(foundHD) { globalSloc=foundHD[0] secdssquery = "Query?Entitlement=FOO&Type=domain&version=2&name="+escape(globalSloc)+"&client_ver="+getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid(); firstReq=false; } } } } break; } } } } if(firstReq==true) { try { var pBl = ''; var phishingBlacklist = XML.getElementsByTagName("PhishingBlacklist"); var pBl; for(var len = 0;len<phishingBlacklist[0].childNodes.length;len++) { pBl = pBl + phishingBlacklist[0].childNodes.item(len).nodeValue; } var isPhish = checkForPhishing(pBl,loc,domain_specifier); if(isPhish) return; } catch(e) { } var classification = ""; infochildren = domaininfo.item(0).childNodes; for (var i = 0; i < infochildren.length; i++) { if (infochildren.item(i).nodeName.toLowerCase() == "classification") { classification = infochildren.item(i).attributes.getNamedItem("code").nodeValue.toLowerCase(); var color = infochildren.item(i).attributes.getNamedItem("color").nodeValue.toLowerCase(); if (classification == "unknown") document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); else document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe-" + color + ".gif"); addToCache(domain_specifier, classification, color, popularity, regxp, pBl); break; } } pingDSS(); checkForRedirect(classification, popularity); } else { makeDssQuery(secdssquery,loc); } } function retryDssQueryPriv(dssurl,dssquery,greq,forceSSL,loc) { if (dssurl.match(/dss1/)) dssurl = dssurl.replace("dss1","dss2"); else if (dssurl.match(/dss2/)) dssurl = dssurl.replace("dss2","dss1"); setDss(dssurl); httpGetRequest(dssurl, dssquery, false, false,greq,forceSSL); } function extractHostName(url) { var idxDSlash = url.indexOf("//") if(idxDSlash > 0) url = url.slice(idxDSlash+2,url.length) var idxSSlash = url.indexOf("/") if(idxSSlash > 0) url = url.slice(0,idxSSlash) return url; } function customizeRegEx(inRegEx) { var outRegEx = inRegEx.replace(/{/g,"(?:") outRegEx = outRegEx.replace(/}/g,")") return outRegEx; } function SingleQueryDSSHandler(XML,loc) { checkForEmergency(XML); var domaininfo = XML.getElementsByTagName("DomainInfo"); if (!domaininfo || !domaininfo.item(0)) { return; } domain_specifier = domaininfo.item(0).attributes.getNamedItem("name").nodeValue; popularity = domaininfo.item(0).attributes.getNamedItem("popularity").nodeValue.toLowerCase(); var dmd = XML.getElementsByTagName("DomainMetaData"); var regxp; if (dmd) { regxp = dmd.item(0).attributes.getNamedItem("domainSpecRegExs").nodeValue; } else { regxp = "REGEXNOTFOUND"; } try { var pBl = ''; var phishingBlacklist = XML.getElementsByTagName("PhishingBlacklist"); var pBl; for(var len = 0;len<phishingBlacklist[0].childNodes.length;len++) { pBl = pBl + phishingBlacklist[0].childNodes.item(len).nodeValue; } var isPhish = checkForPhishing(pBl,loc,domain_specifier); if(isPhish) return; } catch(e) { } var classification = ""; infochildren = domaininfo.item(0).childNodes; for (var i = 0; i < infochildren.length; i++) { if (infochildren.item(i).nodeName.toLowerCase() == "classification") { classification = infochildren.item(i).attributes.getNamedItem("code").nodeValue.toLowerCase(); var color = infochildren.item(i).attributes.getNamedItem("color").nodeValue.toLowerCase(); if (classification == "unknown") document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); else document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe-" + color + ".gif"); addToCache(domain_specifier, classification, color, popularity, regxp, pBl); break; } } pingDSS(); checkForRedirect(classification, popularity); } function focus_handler(e) { if (e.originalTarget.nodeName == "#document" || e.originalTarget.nodeName == "tab" || e.originalTarget.nodeName == "xul:tab") { docloc = window._content.document.location.href; if (docloc != loc) { changebutton(); } } } function openSettings() { window.openDialog('chrome://safe/content/settings.xul','safe-settings','chrome,modal', getPremium(), getButtonEnabled(), getSafeOn(), getHighlight(), getSSL()); nav_href = window._content.document.location.href; buttonon = getButtonEnabled(); on = getSafeOn(); highliteon = getHighlight(); doSSL = getSSL(); if (!buttonon) { document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); } else { changebutton(); } if (params.ok && eval(on_search_page) == true) { window._content.location.reload(); } } function writeSettings() { if (!premium) setButtonEnabled(document.getElementById("button").checked); setSafeOn(document.getElementById("on").checked); setHighlight(document.getElementById("highlight").checked); setSSL(document.getElementById("ssl").checked); } function whitelist() { window.openDialog('chrome://safe/content/whitelist.xul', 'safe-whitelist', 'chrome,modal', getPremium(), domain_specifier, getWhitelist()); whitelistedDomains = getWhitelist(); } function urlToDomain(url) { var hostName = extractHostName(url); var hostNameComp = new Array(); hostNameComp = hostName.split("."); var compLen = hostNameComp.length - 1; var domain; if (hostNameComp[compLen].length <= 2 && hostNameComp[compLen - 1].length <= 3) { for(var i=0;i<2;i++) { try { domain = hostNameComp[compLen - i] + domain; } catch(e) { break; } } } else { for(var i=0;i<1;i++) { try { domain = hostNameComp[compLen - i] + domain; } catch(e) { break; } } } domain = domain.toLowerCase(); return domain; } function addWhitelist(url) { try { var whitelistedDomains = getWhitelist(); var whArray = whitelistedDomains.split(";"); for(var idx=0;idx<whArray.length;idx++) { if(whArray[idx] == url) return; } whitelistedDomains = whitelistedDomains + ";" + url; setWhitelist(whitelistedDomains); } catch(e) { //alert(e.message) } } function updateWhitelist() { whitelistedDomains = ""; var list = document.getElementById('SAFE-whitelist'); var count = list.getRowCount(); while (count--) { var item = list.getItemAtIndex(count); var itemlabel = item.label.replace( /^\s+/g, "" ).replace( /\s+$/g, "" ); if (itemlabel.length > 0) whitelistedDomains = whitelistedDomains + itemlabel + ";"; } setWhitelist(whitelistedDomains); } function setWhitelist(value) { try { var interface = getSaXPCom(); if(getWhitelist()) interface.RemoveWhitelistSites(getWhitelist()) interface.AddWhitelistSites(value); } catch(err) { var pref = setCharPref("extensions.safe.whitelist", value); return pref; } } function setEnable (enable) { buttonon = enable; setButtonEnabled(enable) changebutton(); } function setPSurf (enable) { if (!enable) { if(navigator.userAgent.match(/Windows NT 6.0/gi)) { if(navigator.language.match(/ja/)) window.openDialog('chrome://safe/content/password.xul', 'safe-password', 'chrome,modal', getHint(), "400px"); else window.openDialog('chrome://safe/content/password.xul', 'safe-password', 'chrome,modal', getHint(), "350px"); } else window.openDialog('chrome://safe/content/password.xul', 'safe-password', 'chrome,modal', getHint(), "350px"); } else { if (!getPsurfInitialized()) if(navigator.userAgent.match(/Windows NT 6.0/gi)) { if(navigator.language.match(/ja/)) window.openDialog('chrome://safe/content/setpassword.xul','safe-setpassword','chrome,modal',"400px"); else window.openDialog('chrome://safe/content/setpassword.xul','safe-setpassword','chrome,modal',"350px"); } else window.openDialog('chrome://safe/content/setpassword.xul','safe-setpassword','chrome,modal',"350px"); else { try { var interface = getSaXPCom(); setEnable(true); interface.SetRestrictedMode("Restricted"); setBoolPref("extensions.safe.flag",false); } catch(err) { alert("Failed to set restrited mode."); } } } } function validatePassword() { var password = document.getElementById('SAFE-password-text').value; try { var interface = getSaXPCom(); if (interface.PasswordMatches(password)) { interface.SetRestrictedMode("Unrestricted:" + password); setBoolPref("extensions.safe.flag",true); return; } } catch(err) { alert("Failed to validate password."); } window.openDialog('chrome://safe/content/badpassword.xul','safe-badpassword','chrome,modal'); return false; } function checkPassword() { var password = document.getElementById('SAFE-enter-password').value; var password2 = document.getElementById('SAFE-enter-password2').value; var hint = document.getElementById('SAFE-enter-hint').value; if ((password.length > 0) && (password == password2)) { try { var interface = getSaXPCom(); setEnable(true); interface.SetRestrictedMode("Password:" + password + ":" + hint); interface.SetRestrictedMode("Restricted"); setBoolPref("extensions.safe.flag",false); } catch(err) { alert("Failed to set password."); } return true; } window.openDialog('chrome://safe/content/mismatchpassword.xul','safe-mismatchpassword','chrome,modal'); return false; } function getGuid() { try { var interface = getSaXPCom(); return interface.GetGuid(); } catch(e) { return getUuid(); } } function getUuid() { return getCharPref("extensions.safe.uuid",readUuid()); } function readUuid() { try { var myfile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); if(navigator.userAgent.match(/Windows NT 6.0/gi)) { var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("DrvD", Components.interfaces.nsIFile); myfile.initWithPath(file.path + "\\ProgramData\\SiteAdvisor\\guid.txt"); } else { if(navigator.userAgent.match(/Windows/gi)) { var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("AppData", Components.interfaces.nsIFile); var fp = file.path; var find = fp.match(/[^:]\\/); var fp_new = fp.slice(0,find.index+1); myfile.initWithPath(fp_new + "\\All Users\\Application Data\\SiteAdvisor\\guid.txt"); } } if(navigator.userAgent.match(/Windows/gi)) { if(!myfile.exists()) { var charset = "ISO-8859-1"; var os = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream); var fos = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); fos.init(myfile, 0x02 | 0x08 | 0x20, 0664, 0); os.init(fos, charset, 0, 0x0000); var uuidString = setUuid(); os.writeString(uuidString); return uuidString; } else { var uuidString = ""; var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); var sstream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream); fstream.init(myfile, 1, 0, false); sstream.init(fstream); var str = sstream.read(-1); while (str.length > 0) { uuidString += str; str = sstream.read(-1); } sstream.close(); fstream.close(); return uuidString; } } else { var uuidString = setUuid(); return uuidString; } } catch(e) { var uuidString = setUuid(); return uuidString; } } function setUuid() { try { var uuidGenerator = Components.classes["@mozilla.org/uuid-generator;1"].getService(Components.interfaces.nsIUUIDGenerator); var uuid = uuidGenerator.generateUUID(); var uuidString = uuid.toString(); var idxOpen = uuidString.indexOf("{"); var idxClose = uuidString.indexOf("}"); uuidString = uuidString.substring(idxOpen+1,idxClose); return uuidString; } catch(err) { //convert it to similar form var uuidString = ''; while(true) { var theTime = new Date(); var num1 = Math.round(Math.random() * theTime); var uuidString = uuidString + num1.toString(); if (uuidString.length>32) break; } uuidString = uuidString.slice(0,32); uuidString = uuidString.slice(0,8) + "-" + uuidString.slice(8,12) + "-" + uuidString.slice(12,16) + "-" + uuidString.slice(16,20) + "-" + uuidString.slice(20,32); return uuidString; } } function postInstallCheck() { var firstInstall = getBoolPref("extensions.safe.firstinstall", true); var machPolicyUpdate = getIntPref("extensions.{1650a312-02bc-40ee-977e-83f158701739}.PolicyUpdate",0); var userPolicyUpdate = getIntPref("extensions.safe.PolicyUpdate",0); if (firstInstall) { var params = {ok:false}; setBoolPref("extensions.safe.firstinstall",false); setIntPref("extensions.safe.PolicyUpdate",machPolicyUpdate); window.openDialog('chrome://safe/content/disclosure.xul','safe-disclosure','chrome,modal',params); if (params.ok) { try { window._content.location.href = "http://www.siteadvisor.com/download/ff_postinstall.html?aff_id="+getAffid(); var irequest = new XMLHttpRequest(); var pingquery = checkSSL(getDss()) + "Ping?Version=2&Type=install&client_type=SAFE&client_ver=" + getFullVersion() + "&locale="+getLocale()+"&aff_id="+getAffid() + "&UID="+getGuid(); irequest.open("GET", pingquery, true); irequest.send(null); } catch (comerr) {} addSASearch(); if (getPremium()) { setPSurf(true); } } else { removeInstallRegKey(); setBoolPref("extensions.safe.firstinstall",true); setIntPref("extensions.safe.PolicyUpdate",machPolicyUpdate); var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager); try { gExtensionManager.uninstallItem("{1650a312-02bc-40ee-977e-83f158701739}"); } catch (e) { ds = gExtensionManager.datasource; gExtensionManager.uninstallExtension("{1650a312-02bc-40ee-977e-83f158701739}"); } window.openDialog('chrome://safe/content/uninst.xul','safe-uninst','chrome,modal'); } } if(machPolicyUpdate>userPolicyUpdate && !firstInstall) { window.openDialog('chrome://safe/content/ppnotification.xul','safe-ppnotification','chrome,modal'); setIntPref("extensions.safe.PolicyUpdate",machPolicyUpdate); } } function removeInstallRegKey() { try { var regKey = Components.classes["@mozilla.org/windows-registry-key;1"].createInstance(Components.interfaces.nsIWindowsRegKey); regKey.open(Components.interfaces.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE, "SOFTWARE\\Mozilla\\Firefox\\Extensions", Components.interfaces.nsIWindowsRegKey.ACCESS_WRITE); regKey.removeValue("{1650a312-02bc-40ee-977e-83f158701739}"); regKey.close (); } catch (RegErr) {} try { var regKey = Components.classes["@mozilla.org/windows-registry-key;1"].createInstance(Components.interfaces.nsIWindowsRegKey); regKey.open(Components.interfaces.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, "SOFTWARE\\Mozilla\\Firefox\\Extensions", Components.interfaces.nsIWindowsRegKey.ACCESS_WRITE); regKey.removeValue("{1650a312-02bc-40ee-977e-83f158701739}"); regKey.close (); } catch (RegErr) {} } function countWindows() { var wm = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator); en = wm.getEnumerator(""); var n = 0; while (en.hasMoreElements()) { var w = en.getNext(); if (w.document.getElementById("content") && w.document.getElementById("content").tagName == "tabbrowser") { var b = w.document.getElementById("content"); var ntabs = b.mPanelContainer.childNodes.length; n = n + ntabs; } n++; } return n; } function cleanup() { if (byebye == true) { var pingquery = checkSSL(getDss()) + "Ping?Version=2&Type=uninstall&client_type=SAFE&client_ver=" + getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid()+"&UID="+getGuid(); var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); pref.clearUserPref("extensions.safe.build"); pref.clearUserPref("extensions.safe.dss"); pref.clearUserPref("extensions.safe.firstinstall"); pref.clearUserPref("extensions.safe.highlight"); pref.clearUserPref("extensions.safe.lastDailyPing"); pref.clearUserPref("extensions.safe.lastMonthlyPing"); pref.clearUserPref("extensions.safe.on"); pref.clearUserPref("extensions.safe.enablebutton"); pref.clearUserPref("extensions.safe.lastKnownVersion"); pref.clearUserPref("extensions.safe.doSSL"); pref.clearUserPref("extensions.safe.whitelist"); pref.clearUserPref("extensions.safe.PolicyUpdate"); try { pref.clearUserPref("extensions.safe.flag"); } catch(e) { } removeSASearch(); removeInstallRegKey(); try{ var irequest = new XMLHttpRequest(); irequest.open("GET", pingquery, false); irequest.send(null); } catch (reqerr) {} return; } var windowCount = countWindows(); if (windowCount == 0) { setButtonEnabled(true); } var RDFService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); var Container = Components.classes["@mozilla.org/rdf/container;1"].getService(Components.interfaces.nsIRDFContainer); var extensionDS= Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager).datasource; try { var root = RDFService.GetResource("urn:mozilla:item:root"); Container.Init(extensionDS,root); } catch (e) { var root = RDFService.GetResource("urn:mozilla:extension:root"); Container.Init(extensionDS,root); } var nameArc = RDFService.GetResource("http://www.mozilla.org/2004/em-rdf#name"); var toBeUninstalledArc = RDFService.GetResource("http://www.mozilla.org/2004/em-rdf#toBeUninstalled"); var found = false; var elements = Container.GetElements(); while (elements.hasMoreElements()) { var element = elements.getNext().QueryInterface(Components.interfaces.nsIRDFResource); var name; var toBeUninstalled; var target = extensionDS.GetTarget(element, nameArc ,true); if (target) { name = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; if (name == "McAfee SiteAdvisor") { target = extensionDS.GetTarget(element, toBeUninstalledArc ,true); if (target) { toBeUninstalled=target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; if (toBeUninstalled && (toBeUninstalled == "true")) { window.removeEventListener("unload", cleanup, false); var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); var pingquery = checkSSL(getDss()) + "Ping?Version=2&Type=uninstall&client_type=SAFE&client_ver=" + getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid()+"&UID="+getGuid(); var oldaffid = getAffid(); pref.clearUserPref("extensions.safe.build"); pref.clearUserPref("extensions.safe.dss"); pref.clearUserPref("extensions.safe.firstinstall"); pref.clearUserPref("extensions.safe.highlight"); pref.clearUserPref("extensions.safe.lastDailyPing"); pref.clearUserPref("extensions.safe.lastMonthlyPing"); pref.clearUserPref("extensions.safe.on"); pref.clearUserPref("extensions.safe.enablebutton"); pref.setBoolPref("extensions.safe.uninstalled",true); pref.clearUserPref("extensions.safe.lastKnownVersion"); pref.clearUserPref("extensions.safe.doSSL"); pref.clearUserPref("extensions.safe.whitelist"); pref.clearUserPref("extensions.safe.PolicyUpdate"); try { pref.clearUserPref("extensions.safe.flag"); } catch(e) { } removeSASearch(); removeInstallRegKey(); try { var irequest = new XMLHttpRequest(); irequest.open("GET", pingquery, false); irequest.send(null); } catch(reqerr) {} window.open("http://www.siteadvisor.com/ffuninstall.html?aff_id="+oldaffid); } } break; } } } } var uninstallObserver = { observe: function(aSubject, aTopic, aData) { try { item = aSubject.QueryInterface(Components.interfaces.nsIUpdateItem); if (item.id != "{1650a312-02bc-40ee-977e-83f158701739}") return; if (aData == "item-uninstalled"){ byebye = true; var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); var firstInstall = false; try{ firstInstall = pref.getBoolPref("extensions.safe.firstinstall"); } catch(ein) {} if (!firstInstall) { pref.setBoolPref("extensions.safe.uninstalled",true); window.open("http://www.siteadvisor.com/ffuninstall.html?aff_id="+getAffid()); } } } catch (e) {} } }; function addUninstallObserver() { var obs = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces["nsIObserverService"]); obs.addObserver(uninstallObserver, "em-action-requested", false); } function removeSASearch() { try{ var file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); file.append("searchplugins"); file.append("siteadvisor.src"); file.remove(false); file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); file.append("searchplugins"); file.append("siteadvisor.gif"); file.remove(false); } catch (e) { try{ var file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("CurProcD", Components.interfaces.nsIFile); file.append("searchplugins"); file.append("siteadvisor.src"); file.remove(false); file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); file.append("searchplugins"); file.append("siteadvisor.gif"); file.remove(false); } catch (e2) {} } } function addSASearch() { var internetSearch = Components.classes["@mozilla.org/browser/internetsearch-service;1"].getService(Components.interfaces.nsIInternetSearchService); internetSearch.AddSearchEngine("http://www.siteadvisor.com/download/safe/siteadvisor.src", "http://www.siteadvisor.com/download/safe/siteadvisor.gif", "",""); setEnable(true); } function checkForEmergency(xml) { if (alreadyWarned) return; var urr = xml.getElementsByTagName("UpgradeRequiredResponse"); if (urr.length == 0) return; urr = urr[0].childNodes; for (var i = 0; i < urr.length; i++) { var c = urr.item(i); if (c.nodeName.toLowerCase() == "description") { alert(c.firstChild.nodeValue); alreadyWarned = true; } } } function getAffid() { try { var affid = OEMstrb("Affid"); if (affid) return affid; } catch (StrBErr) {} return 0; } function hasSuite() { try { var regKey = Components.classes["@mozilla.org/windows-registry-key;1"].createInstance(Components.interfaces.nsIWindowsRegKey); regKey.open(Components.interfaces.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE, "SOFTWARE\\SiteAdvisor", Components.interfaces.nsIWindowsRegKey.ACCESS_READ); var hasSuite = regKey.readStringValue("HasSuite"); if (hasSuite == "true") return true; } catch(regErr) {} return false; } function getShowUpsellMessage() { try { var showUpsellMessage = OEMstrb("ShowSafeSearchUpsell"); if (showUpsellMessage && showUpsellMessage.toLowerCase() == "true") return true; else if (showUpsellMessage && showUpsellMessage.toLowerCase() == "false") return false; } catch (StrBErr) {} if (hasSuite()) return false; return true; } function getUpsellMessage() { try { var upsellMessage = OEMstrb("SafeSearchUpsellMessage"); if (upsellMessage) return upsellMessage; } catch (StrBErr) {} return strb('safe.submitError'); } function getUpsellUrl() { try { var upsellUrl = OEMstrb("SafeSearchUpsellUrl"); if (upsellUrl) return upsellUrl; } catch (StrBErr) {} return null; } function getShowMenuUpsellMessage() { try { var showMenuUpsellMessage = OEMstrb("ShowMenuUpsell"); if (showMenuUpsellMessage && showMenuUpsellMessage.toLowerCase() == "true") return true; else if (showMenuUpsellMessage && showMenuUpsellMessage.toLowerCase() == "false") return false; } catch (StrBErr) {} if (hasSuite()) return false; return false; } function getMenuUpsellMessage() { try { var upsellMessage = OEMstrb("MenuUpsellMessage"); if (upsellMessage) return upsellMessage; } catch (StrBErr) {} return strb('safe.submitError'); } function getMenuUpsellUrl() { try { var upsellUrl = OEMstrb("MenuUpsellUrl"); if (upsellUrl) return upsellUrl; } catch (StrBErr) {} return null; } function setUpdateURL() { var updateON = OEMstrb('AutoUpdateFF'); if (!updateON) updateON = "true"; try { if (updateON == "false") setCharPref("extensions.{1650a312-02bc-40ee-977e-83f158701739}.updateURL",""); else setCharPref("extensions.{1650a312-02bc-40ee-977e-83f158701739}.updateURL","https://sadownload.mcafee.com/products/sa/firefox/update.rdf?aff_id="+getAffid()); } catch (prefErr) {} } function getPhishOn() { try { var phishON = OEMstrb('AntiPhishing'); if (phishON && (phishON == "false")) return false; } catch (prefErr) {} return true; } function strb(strKey) { try{ return document.getElementById('safe-script-bundle').getString(strKey); } catch (bundleErr) { return null; } } function OEMstrb(strKey) { try { return OEMStrB.GetStringFromName(navigator.language+"."+strKey); } catch (bundleErr) {} try { return OEMStrB.GetStringFromName(navigator.language.toLowerCase()+"."+strKey); } catch (bundleErr) {} try { return OEMStrB.GetStringFromName(strKey); } catch (bundleErr) {} return null; } function chromeExists(p) { try { var chromeRegistry = Components.classes["@mozilla.org/chrome/chrome-registry;1"].getService(Components.interfaces.nsIChromeRegistry); var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); var chromeFileURI = ioService.newURI(p,"UTF-8",null); var localFileURI = chromeRegistry.convertChromeURL(chromeFileURI); if (localFileURI.spec.match(/^jar:/)) { var jarFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); var jarPath = localFileURI.spec.split("!")[0].replace(/jar:/,""); jarPath = ioService.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler).getFileFromURLSpec(jarPath).path; jarFile.initWithPath(jarPath); var relPath = localFileURI.spec.split("!")[1].replace(/^\//, ""); var zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"].createInstance(Components.interfaces.nsIZipReader); zipReader.init(jarFile); zipReader.open(); var found = zipReader.findEntries(relPath); var result = found ? found.hasMoreElements() : false; zipReader.close(); return result; } else { var localFile = ioService.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler).getFileFromURLSpec(localFileURI.spec); return localFile.exists(); } } catch (chromeErr) { return false; } } function getMode() { if(getSaXPCom()) { } else { return BASIC; } var saPlus; try { saPlus = OEMstrb('saPlusOnly').toLowerCase(); } catch(e) { saPlus = "false"; } var saSub = getPremium(); if(saPlus=="true" && saSub) { return PLUS; } else { if(saPlus=="true" && !saSub) { return CRIPPLED; } else { if(saPlus=="false" && saSub) { return PLUS; } else { if(saPlus=="false" && !saSub) { return BASIC; } } } } } function setCrippled() { try { document.getElementById('SAFE-Combined-MoreInfo').collapsed = true; document.getElementById('SAFE-Combined-Settings').collapsed = true; document.getElementById('SAFE-Combined-WhiteList').collapsed = true; document.getElementById('SAFE-Combined-Enable').collapsed = true; document.getElementById('SAFE-Combined-Disable').collapsed = true; document.getElementById('SAFE-Combined-EnablePSurf').collapsed = true; document.getElementById('SAFE-Combined-DisablePSurf').collapsed = true; document.getElementById('SAFE-Combined-TellFriend').collapsed = true; document.getElementById('SAFE-Combined-SendFeedback').collapsed = true; document.getElementById('SAFE-Combined-Upsell').collapsed = true; //document.getElementById('SAFE-Combined-Help').collapsed = true; document.getElementById("SAFE-Combined-MS1").collapsed = true; } catch(e) { } } function registerNow() { try { var interface = getSaXPCom(); interface.LaunchRegister(); } catch(e) { } } var stringBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService); if (chromeExists("chrome://safe/content/oem.txt")) { OEMStrB = stringBundleService.createBundle("chrome://safe/content/oem.txt"); } else { OEMStrB = stringBundleService.createBundle("chrome://safe/content/default.txt"); } if (!getUninstalled()) { mode = getMode(); addUninstallObserver(); if(mode!=CRIPPLED) { window.addEventListener("load", get_js, false); // window.addEventListener("load", pingDSS,false); causes hang due to Firefox proxy bug window.addEventListener("load", postInstallCheck, false); window.addEventListener("unload", cleanup, false); } } else { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); pref.clearUserPref("extensions.safe.uninstalled"); } whitelistedDomains = getWhitelist(); function getOSVersion() { var OSName="Unknown OS"; try { if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows"; if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS"; if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX"; if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux"; } catch(e) { } return OSName; } function buildArgString() { var argStr; argStr = "ref=safe&client_ver=" + getFullVersion(); argStr = argStr + "&locale=" + getLocale(); argStr = argStr + "&premium=" + getPremium(); argStr = argStr + "&client_type=FF"; argStr = argStr + "&aff_id=" + getAffid(); //alert(argStr) return argStr; } function menuUpsell() { var url = getMenuUpsellUrl(); if (url.match(/\?/)) url = url + "&" + buildArgString(); else url = url + "?" + buildArgString(); if (url != null) window.open(url); else alert("no upsell url"); } return { "getBuild": getBuild, "getVersion" : getVersion, "getAffid" : getAffid, "openSettings" : openSettings, "populateMenus" : populateMenus, "whitelist" : whitelist, "addWhitelist" : addWhitelist, "updateWhitelist" : updateWhitelist, "stripargs" : stripargs, "setEnable" : setEnable, "setPSurf" : setPSurf, "validatePassword" : validatePassword, "checkPassword" : checkPassword, "writeSettings" : writeSettings, "domain_specifier" : function() {return domain_specifier;}, "upsell" : menuUpsell, "registerNow" : registerNow, "getFullVersion" : getFullVersion, "getLocale" : getLocale, "getPremium" : getPremium, "getOSVersion" : getOSVersion, "buildArgString" : buildArgString, } } SiteAdvisorFunPack = SiteAdvisorFirefoxExtension();