svnno****@sourc*****
svnno****@sourc*****
2009年 10月 9日 (金) 18:20:45 JST
Revision: 8 http://sourceforge.jp/projects/cres/svn/view?view=rev&revision=8 Author: kyagroup Date: 2009-10-09 18:20:45 +0900 (Fri, 09 Oct 2009) Log Message: ----------- * Update the Lemur Query Log Toolbar base code to 2.0. * Bug fix: '0' is logged properly instead of 'NULL' at the search result page number column. (chrome/content/qth.js) Modified Paths: -------------- src/chrome/content/aescipher.js src/chrome/content/configuration.js src/chrome/content/logtoolbar.js src/chrome/content/logtoolbar.xul src/chrome/content/qth.js src/chrome/content/service.js src/chrome/content/settings.js src/chrome/content/settings.xul src/chrome/content/specialblacklist.xul src/chrome/content/upload.js src/chrome/content/upload.xul src/chrome/content/utils.js src/defaults/preferences/defaults.js src/install.rdf Added Paths: ----------- src/chrome/content/privateBrowserListener.js src/chrome/content/scrubbingscreen.xul Modified: src/chrome/content/aescipher.js =================================================================== --- src/chrome/content/aescipher.js 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/aescipher.js 2009-10-09 09:20:45 UTC (rev 8) @@ -9,16 +9,16 @@ * applies Nr rounds (10/12/14) using key schedule w for 'add round key' stage * * returns byte-array encrypted value (16 bytes) - * - * Code under LGPL use from: - * (c) 20052007 Chris Veness - * Website: http://www.movable-type.co.uk/scripts/aes.html + * + * Code under LGPL usage from: + * (C) 2005-2008 - Chris Veness + * http://www.movable-type.co.uk/scripts/aes.html */ -function Cipher(input, w) { // main Cipher function [§5.1] +function Cipher(input, w) { // main Cipher function [5.1] var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES) var Nr = w.length/Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys - var state = [[],[],[],[]]; // initialise 4xNb byte-array 'state' with input [§3.4] + var state = [[],[],[],[]]; // initialise 4xNb byte-array 'state' with input [3.4] for (var i=0; i<4*Nb; i++) state[i%4][Math.floor(i/4)] = input[i]; state = AddRoundKey(state, w, 0, Nb); @@ -34,13 +34,13 @@ state = ShiftRows(state, Nb); state = AddRoundKey(state, w, Nr, Nb); - var output = new Array(4*Nb); // convert state to 1-d array before returning [§3.4] + var output = new Array(4*Nb); // convert state to 1-d array before returning [3.4] for (var i=0; i<4*Nb; i++) output[i] = state[i%4][Math.floor(i/4)]; return output; } -function SubBytes(s, Nb) { // apply SBox to state S [§5.1.1] +function SubBytes(s, Nb) { // apply SBox to state S [5.1.1] for (var r=0; r<4; r++) { for (var c=0; c<Nb; c++) s[r][c] = Sbox[s[r][c]]; } @@ -48,7 +48,7 @@ } -function ShiftRows(s, Nb) { // shift row r of state S left by r bytes [§5.1.2] +function ShiftRows(s, Nb) { // shift row r of state S left by r bytes [5.1.2] var t = new Array(4); for (var r=1; r<4; r++) { for (var c=0; c<4; c++) t[c] = s[r][(c+r)%Nb]; // shift into temp copy @@ -58,15 +58,15 @@ } -function MixColumns(s, Nb) { // combine bytes of each col of state S [§5.1.3] +function MixColumns(s, Nb) { // combine bytes of each col of state S [5.1.3] for (var c=0; c<4; c++) { var a = new Array(4); // 'a' is a copy of the current column from 's' - var b = new Array(4); // 'b' is a{02} in GF(2^8) + var b = new Array(4); // 'b' is a{02} in GF(2^8) for (var i=0; i<4; i++) { a[i] = s[i][c]; b[i] = s[i][c]&0x80 ? s[i][c]<<1 ^ 0x011b : s[i][c]<<1; } - // a[n] ^ b[n] is a{03} in GF(2^8) + // a[n] ^ b[n] is a{03} in GF(2^8) s[0][c] = b[0] ^ a[1] ^ b[1] ^ a[2] ^ a[3]; // 2*a0 + 3*a1 + a2 + a3 s[1][c] = a[0] ^ b[1] ^ a[2] ^ b[2] ^ a[3]; // a0 * 2*a1 + 3*a2 + a3 s[2][c] = a[0] ^ a[1] ^ b[2] ^ a[3] ^ b[3]; // a0 + a1 + 2*a2 + 3*a3 @@ -76,7 +76,7 @@ } -function AddRoundKey(state, w, rnd, Nb) { // xor Round Key into state S [§5.1.4] +function AddRoundKey(state, w, rnd, Nb) { // xor Round Key into state S [5.1.4] for (var r=0; r<4; r++) { for (var c=0; c<Nb; c++) state[r][c] ^= w[rnd*4+c][r]; } @@ -84,7 +84,7 @@ } -function KeyExpansion(key) { // generate Key Schedule (byte-array Nr+1 x Nb) from Key [§5.2] +function KeyExpansion(key) { // generate Key Schedule (byte-array Nr+1 x Nb) from Key [5.2] var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES) var Nk = key.length/4 // key length (in words): 4/6/8 for 128/192/256-bit keys var Nr = Nk + 6; // no of rounds: 10/12/14 for 128/192/256-bit keys @@ -118,13 +118,14 @@ } function RotWord(w) { // rotate 4-byte word w left by one byte - w[4] = w[0]; + var tmp = w[0]; for (var i=0; i<4; i++) w[i] = w[i+1]; + w[3] = tmp; return w; } -// Sbox is pre-computed multiplicative inverse in GF(2^8) used in SubBytes and KeyExpansion [§5.1.1] +// Sbox is pre-computed multiplicative inverse in GF(2^8) used in SubBytes and KeyExpansion [5.1.1] var Sbox = [0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76, 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0, 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15, @@ -142,7 +143,7 @@ 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf, 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16]; -// Rcon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in GF(2^8)] [§5.2] +// Rcon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in GF(2^8)] [5.2] var Rcon = [ [0x00, 0x00, 0x00, 0x00], [0x01, 0x00, 0x00, 0x00], [0x02, 0x00, 0x00, 0x00], @@ -167,16 +168,16 @@ */ function AESEncryptCtr(plaintext, password, nBits) { if (!(nBits==128 || nBits==192 || nBits==256)) return ''; // standard allows 128/192/256 bit keys - - // for this example script, generate the key by applying Cipher to 1st 16/24/32 chars of password; - // for real-world applications, a more secure approach would be to hash the password e.g. with SHA-1 + + // use AES itself to encrypt password to get cipher key (using plain password as source for key + // expansion) - gives us well encrypted key to use var nBytes = nBits/8; // no bytes in key var pwBytes = new Array(nBytes); for (var i=0; i<nBytes; i++) pwBytes[i] = password.charCodeAt(i) & 0xff; - var key = Cipher(pwBytes, KeyExpansion(pwBytes)); + var key = Cipher(pwBytes, KeyExpansion(pwBytes)); // gives us 16-byte key key = key.concat(key.slice(0, nBytes-16)); // key is now 16/24/32 bytes long - // initialise counter block (NIST SP800-38A §B.2): millisecond time-stamp for nonce in 1st 8 bytes, + // initialise counter block (NIST SP800-38A B.2): millisecond time-stamp for nonce in 1st 8 bytes, // block counter in 2nd 8 bytes var blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES var counterBlock = new Array(blockSize); // block size fixed at 16 bytes / 128 bits (Nb=4) for AES @@ -194,7 +195,7 @@ for (var b=0; b<blockCount; b++) { // set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes) - // again done in two stages for 32-bit ops + // done in two stages for 32-bit ops: using two words allows us to go past 2^32 blocks (68GB) for (var c=0; c<4; c++) counterBlock[15-c] = (b >>> c*8) & 0xff; for (var c=0; c<4; c++) counterBlock[15-c-4] = (b/0x100000000 >>> c*8) @@ -288,3 +289,100 @@ } /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + +/* + * if escCtrlChars()/unescCtrlChars() still gives problems, use encodeBase64()/decodeBase64() instead + */ +var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + +function encodeBase64(str) { // http://tools.ietf.org/html/rfc4648 + var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc=''; + + str = encodeUTF8(str); // encode multi-byte chars into UTF-8 for byte-array + + do { // pack three octets into four hexets + o1 = str.charCodeAt(i++); + o2 = str.charCodeAt(i++); + o3 = str.charCodeAt(i++); + + bits = o1<<16 | o2<<8 | o3; + + h1 = bits>>18 & 0x3f; + h2 = bits>>12 & 0x3f; + h3 = bits>>6 & 0x3f; + h4 = bits & 0x3f; + + // end of string? index to '=' in b64 + if (isNaN(o3)) h4 = 64; + if (isNaN(o2)) h3 = 64; + + // use hexets to index into b64, and append result to encoded string + enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); + } while (i < str.length); + + return enc; +} + +function decodeBase64(str) { + var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc=''; + + do { // unpack four hexets into three octets using index points in b64 + h1 = b64.indexOf(str.charAt(i++)); + h2 = b64.indexOf(str.charAt(i++)); + h3 = b64.indexOf(str.charAt(i++)); + h4 = b64.indexOf(str.charAt(i++)); + + bits = h1<<18 | h2<<12 | h3<<6 | h4; + + o1 = bits>>16 & 0xff; + o2 = bits>>8 & 0xff; + o3 = bits & 0xff; + + if (h3 == 64) enc += String.fromCharCode(o1); + else if (h4 == 64) enc += String.fromCharCode(o1, o2); + else enc += String.fromCharCode(o1, o2, o3); + } while (i < str.length); + + return decodeUTF8(enc); // decode UTF-8 byte-array back to Unicode +} + +function encodeUTF8(str) { // encode multi-byte string into utf-8 multiple single-byte characters + str = str.replace( + /[\u0080-\u07ff]/g, // U+0080 - U+07FF = 2-byte chars + function(c) { + var cc = c.charCodeAt(0); + return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); } + ); + str = str.replace( + /[\u0800-\uffff]/g, // U+0800 - U+FFFF = 3-byte chars + function(c) { + var cc = c.charCodeAt(0); + return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); } + ); + return str; +} + +function decodeUTF8(str) { // decode utf-8 encoded string back into multi-byte characters + str = str.replace( + /[\u00c0-\u00df][\u0080-\u00bf]/g, // 2-byte chars + function(c) { + var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f; + return String.fromCharCode(cc); } + ); + str = str.replace( + /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars + function(c) { + var cc = (c.charCodeAt(0)&0x0f)<<12 | (c.charCodeAt(1)&0x3f<<6) | c.charCodeAt(2)&0x3f; + return String.fromCharCode(cc); } + ); + return str; +} + + +function byteArrayToHexStr(b) { // convert byte array to hex string for displaying test vectors + var s = ''; + for (var i=0; i<b.length; i++) s += b[i].toString(16) + ' '; + return s; +} + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ Modified: src/chrome/content/configuration.js =================================================================== --- src/chrome/content/configuration.js 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/configuration.js 2009-10-09 09:20:45 UTC (rev 8) @@ -15,9 +15,17 @@ var LemurLogToolbarConfiguration = { + _isCurrentlyUploading: false, + _needToRefreshSettings: true, _serverBaseURL: "", + + _serverAllowAutoUploads: true, + _useAutomaticUploads: true, + _askWhenUsingAutoUploads: false, + _nextTimeToAutoUpload: 0, + _autoUploadIntervalTime: 604800000, _allowRandomSessionId: true, _useRandomSessionId: false, @@ -47,20 +55,47 @@ _blacklistPropernameRegex: "", _blacklistKeywordRegex: "", + _knownSearchEngines: "", + prefs: null, startup: function () { }, + + arrayToString: function(thisArray) { + var retString=""; + var hasOne=false; + for (var i=0; i < thisArray.length; i++) { + if (hasOne) { retString +="\n"; } + retString += thisArray[i]; + hasOne=true; + } + return retString; + }, + + arrayFromString: function (inString) { + var thisArray=new Array(); + var items=inString.split("\n"); + for (var i=0; i < items.length; i++) { + if (items[i].length > 0) { + thisArray[i]=items[i]; + } + } + return thisArray; + }, - getDefaultServerConfiguration: function (forceReload) { + getDefaultServerConfiguration: function (forceReload, checkOnStartup) { + var forceReload = (forceReload == null) ? false : forceReload; + var checkOnStartup = (checkOnStartup == null) ? false : checkOnStartup; + this.prefs = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefService) - .getBranch("extensions.lemurquerylog."); + .getBranch("extensions.qthlog."); this._serverBaseURL=this.prefs.getCharPref("server"); if (this._needToRefreshSettings==true || (forceReload && forceReload==true)) { - if (this.loadServerConfiguration()==true) { + if (this.loadServerConfiguration(checkOnStartup)==true) { // save user prefs this.saveLocalUserConfiguration(); } @@ -75,25 +110,41 @@ getEncryptedCharPref: function(prefName) { var encValue=this.prefs.getCharPref(prefName); - return encValue; - // return (AESDecryptCtr(encValue, this.prefPwd(), 192)); + return (AESDecryptCtr(encValue, this.prefPwd(), 192)); }, setEncryptedCharPref: function(prefName, prefValue) { - //var encValue=AESEncryptCtr(prefValue.trim(), this.prefPwd(), 192); - //this.prefs.setCharPref(prefName, encValue); - this.prefs.setCharPref(prefName, prefValue); + var encValue=AESEncryptCtr(prefValue.trim(), this.prefPwd(), 192); + this.prefs.setCharPref(prefName, encValue); }, loadLocalUserConfiguration: function() { this.prefs = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefService) - .getBranch("extensions.lemurquerylog."); + .getBranch("extensions.qthlog."); this._serverBaseURL=this.prefs.getCharPref("server").trim(); this._useRandomSessionId=this.prefs.getBoolPref("userandomsession"); this._useDesktopSearch=this.prefs.getBoolPref("logdesktopsearch"); + + this._useAutomaticUploads=this.prefs.getBoolPref("useautouploads"); + this._askWhenUsingAutoUploads=this.prefs.getBoolPref("askwhenautouploads"); + var thisNextUploadTime=this.prefs.getCharPref("nextautouploadtime"); + if (thisNextUploadTime=="undefined") { + thisNextUploadTime=0; + } + var thisNextUploadTimeLong=(+thisNextUploadTime); + if (thisNextUploadTimeLong==0) { + var todaysDate = new Date; // Generic JS date object + var unixtime_ms = todaysDate.getTime(); // Returns milliseconds since the epoch + this._nextTimeToAutoUpload=unixtime_ms + this._autoUploadIntervalTime; + // and set it in the prefs + this.prefs.setCharPref("nextautouploadtime", new String(this._nextTimeToAutoUpload)); + } else { + this._nextTimeToAutoUpload=thisNextUploadTimeLong; + } + this._useBlacklistPersonal=this.prefs.getBoolPref("usepersonalbl"); this._useBlacklistAddress=this.prefs.getBoolPref("useaddressbl"); this._useBlacklistProperName=this.prefs.getBoolPref("usepropernamebl"); @@ -111,17 +162,23 @@ this._blacklistAddressRegex=this.getEncryptedCharPref("bl.addressrx"); this._blacklistPropernameRegex=this.getEncryptedCharPref("bl.propernamerx"); this._blacklistKeywordRegex=this.getEncryptedCharPref("bl.keywordrx"); + + this._knownSearchEngines=this.prefs.getCharPref("searchengines").trim(); }, saveLocalUserConfiguration: function () { this.prefs = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefService) - .getBranch("extensions.lemurquerylog."); + .getBranch("extensions.qthlog."); this.prefs.setCharPref("server", this._serverBaseURL.trim()); this.prefs.setBoolPref("userandomsession", this._useRandomSessionId); this.prefs.setBoolPref("logdesktopsearch", this._useDesktopSearch); - + + this.prefs.setBoolPref("useautouploads", this._useAutomaticUploads); + this.prefs.setBoolPref("askwhenautouploads", this._askWhenUsingAutoUploads); + this.prefs.setCharPref("nextautouploadtime", new String(this._nextTimeToAutoUpload)); + this.prefs.setBoolPref("usepersonalbl", this._useBlacklistPersonal); this.prefs.setBoolPref("useaddressbl", this._useBlacklistAddress); this.prefs.setBoolPref("usepropernamebl", this._useBlacklistProperName); @@ -138,9 +195,47 @@ this.setEncryptedCharPref("bl.addressrx", this._blacklistAddressRegex); this.setEncryptedCharPref("bl.propernamerx", this._blacklistPropernameRegex); this.setEncryptedCharPref("bl.keywordrx", this._blacklistKeywordRegex); + + this.prefs.setCharPref("searchengines", this._knownSearchEngines); }, + + getSearchEnginePrefixArray: function() { + var thisArray=new Array(); + var items=this._knownSearchEngines.split("\n"); + for (var i=0; i < items.length; i++) { + if (items[i].length > 0) { + thisArray[i]=items[i]; + } + } + return thisArray; + }, + + isTimeToAutomaticUpload: function () { + if (this._serverAllowAutoUploads && this._useAutomaticUploads) { + var currentTime=new Date; + var currentTimeMs=currentTime.getTime(); + if (currentTimeMs > this._nextTimeToAutoUpload) { + return true; + } + } + return false; + }, + + setNextAutomaticUploadTime: function () { + var currentTime=new Date; + var currentTimeMs=currentTime.getTime(); + this._nextTimeToAutoUpload=currentTimeMs + this._autoUploadIntervalTime; + this.saveLocalUserConfiguration(); + }, + + getNextAutoUploadTimeString: function () { + var nextUploadTimeSec=new Date(this._nextTimeToAutoUpload); + return nextUploadTimeSec.toString(); + }, - loadServerConfiguration: function () { + loadServerConfiguration: function (checkOnStartup) { + + var checkOnStartup = (checkOnStartup == null) ? false : checkOnStartup; if (this._serverBaseURL.length==0) { return false; @@ -153,12 +248,16 @@ xmlRequest.open("GET", configUrl, false); xmlRequest.send(null); } catch (e) { - alert("QT Honey Toolbar:\nError retrieving configuration from server.\n Is the server URL set properly?"); + if (!checkOnStartup) { + alert("Lemur Query Log Toolbar:\nError retrieving configuration from server.\n Is the server URL set properly?"); + } return false; } if (xmlRequest.status!=200) { - alert("QT Honey Toolbar:\nError retrieving configuration from server.\n Is the server URL set properly?"); + if (!checkOnStartup) { + alert("Lemur Query Log Toolbar:\nError retrieving configuration from server.\n Is the server URL set properly?"); + } return false; } @@ -179,6 +278,27 @@ this._serverEncryptionModulus=modulus[0].firstChild.nodeValue; this._serverEncryptionExponent=exponent[0].firstChild.nodeValue; + + var autouploadsElement=xmlDoc.getElementsByTagName("automaticuploads"); + if (autouploadsElement && autouploadsElement.length > 0) { + var allowsAutoUploadElement=autouploadsElement[0].getElementsByTagName("allowautouploads"); + var autoUploadsIntervalElement=autouploadsElement[0].getElementsByTagName("autouploadinterval"); + if (allowsAutoUploadElement && allowsAutoUploadElement.length==1) { + var allowsAutoUploadValue=allowsAutoUploadElement[0].firstChild.nodeValue; + if (allowsAutoUploadValue=='false') { + this._serverAllowAutoUploads=false; + } else { + this._serverAllowAutoUploads=true; + } + } + if (autoUploadsIntervalElement && autoUploadsIntervalElement.length==1) { + var dayInterval=autoUploadsIntervalElement[0].firstChild.nodeValue; + var dayIntervalNumber=new Number(dayInterval); + if (dayIntervalNumber!=Number.NaN) { + this._autoUploadIntervalTime=dayIntervalNumber*86400000; + } + } + } var rndSessionElement=xmlDoc.getElementsByTagName("allowrandomsession"); var allowPersonalBLElement=xmlDoc.getElementsByTagName("allowpersonalblacklist"); @@ -230,6 +350,35 @@ this._allowBlacklistKeywords=true; } } + + // get the known search engines if available + var currentSEArray=Array(); + currentSEArray=this.arrayFromString(this._knownSearchEngines); + + var seElement=xmlDoc.getElementsByTagName("searchengines"); + if (seElement.length > 0) { + var engineElements=seElement[0].getElementsByTagName("engine"); + for (var e=0; e < engineElements.length; e++) { + var thisEngineValue=engineElements[e].firstChild.nodeValue; + if (thisEngineValue.indexOf("http://127.0.0.1") >= 0) { + continue; + } else { + var foundSE=false; + for (var sea=0; sea < currentSEArray.length; sea++) { + if (currentSEArray[sea]==thisEngineValue) { + foundSE=true; + break; + } + } + if (!foundSE) { + currentSEArray.splice(currentSEArray.length, 0, thisEngineValue); + } + } + } + } + + this._knownSearchEngines=this.arrayToString(currentSEArray); + this._needToRefreshSettings=false; return true; @@ -237,3 +386,14 @@ }; +// UMass logging only to ensure the registry accepts it as a change +// and not the default value... +// try { +// var prefs = Components.classes["@mozilla.org/preferences-service;1"] +// .getService(Components.interfaces.nsIPrefService) +// .getBranch("extensions.qthlog."); +// prefs.setCharPref("server", LemurLogToolbarConfiguration._serverBaseURL.trim()); +// } catch (prefEx) { +// // ignore any errors +// } + Modified: src/chrome/content/logtoolbar.js =================================================================== --- src/chrome/content/logtoolbar.js 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/logtoolbar.js 2009-10-09 09:20:45 UTC (rev 8) @@ -17,7 +17,83 @@ var lemurlog_upload_service = null; +// support for private browsing +var inPrivateBrowseMode=false; +var isLoggingInPrivate=true; + /////////////////////////////////////////////////////////////////////// +// Handler for writing to the log - checking for auto uploads +/////////////////////////////////////////////////////////////////////// +function lemurlog_DoWriteLogFile(fileName, text) { + lemurlog_WriteLogFile(fileName, text); + lemurlog_checkAutoUpload(); +} + +function lemurlog_checkAutoUpload() { + if (LemurLogToolbarConfiguration._isCurrentlyUploading) { return; } + + LemurLogToolbarConfiguration._isCurrentlyUploading=true; + + // see if we are using auto uploads in the configuration + if (LemurLogToolbarConfiguration._serverBaseURL!="" && LemurLogToolbarConfiguration._serverAllowAutoUploads && LemurLogToolbarConfiguration._useAutomaticUploads) { + + // get the current unix time + var currentDate = new Date; // Generic JS date object + var unixtime_ms = currentDate.getTime(); // Returns milliseconds since the epoch + + // see if it's time for an upload + if (LemurLogToolbarConfiguration._nextTimeToAutoUpload < unixtime_ms) { + // it's time! + // do we need to ask the user first? + if (LemurLogToolbarConfiguration._askWhenUsingAutoUploads) { + + // yes - check and see + var currentTime=new Date; + var currentTimeMs=currentTime.getTime(); + var nextTimeToAutoUpload=currentTimeMs + LemurLogToolbarConfiguration._autoUploadIntervalTime; + + var nextUploadTimeSec=new Date(nextTimeToAutoUpload); + var nextUploadTimeStr=nextUploadTimeSec.toString(); + + var userConfirm=window.confirm( + "An automatic upload of toolbar data is scheduled to run now.\n" + + "(If you cancel, the next upload is scheduled for: " + nextUploadTimeStr + "\nProceed?" + ); + + if (userConfirm) { + lemurlog_DoActualUpload_Log(); + } else { + // user clicked cancel + LemurLogToolbarConfiguration.setNextAutomaticUploadTime(); + LemurLogToolbarConfiguration.saveLocalUserConfiguration(); + LemurLogToolbarConfiguration._isCurrentlyUploading=false; + return; + } + } else { + // no - don't need user input to auto-upload + lemurlog_DoActualUpload_Log(); + } + } + } else { + LemurLogToolbarConfiguration._isCurrentlyUploading=false; + } +} + +/////////////////////////////////////////////////////////////////////// +// performs the upload of log files to remote server w/out prompt +/////////////////////////////////////////////////////////////////////// +function lemurlog_DoActualUpload_Log() +{ + // before uploading - scrub the log files + // remember to remove any search results that match + // a query where any query term is blacklisted... + + lemurlog_upload_service = new lemurlog_uploadService(); + window.openDialog("chrome://qthtoolbar/content/upload.xul", "LogTB-Upload", "chrome=yes,modal=no,centerscreen=yes,status=no,height=400,width=600", window); +} + + +/////////////////////////////////////////////////////////////////////// // Upload log files to remote server /////////////////////////////////////////////////////////////////////// function lemurlog_Upload_Log(event) @@ -28,13 +104,7 @@ return; } - // before uploading - scrub the log files - // remember to remove any search results that match - // a query where any query term is blacklisted... - - lemurlog_upload_service = new lemurlog_uploadService(); - window.openDialog("chrome://qthtoolbar/content/upload.xul", "LogTB-Upload", "chrome=yes,modal=no,centerscreen=yes,status=no", window); - + lemurlog_DoActualUpload_Log(); } function lemurlog_showsettings(event) { @@ -91,12 +161,13 @@ var text=""; if (str) { - text = str.data.substring(0,strLength.value / 2); + // text = str.data.substring(0,strLength.value / 2); + text = str.data.substring(0); } //remove repeated spaces text = washAndRinse(lemurlog_TrimString(text)); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "CtrlC\t" + time +"\t"+ text.length +"\t" + text +"\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "CtrlC\t" + time +"\t"+ text.length +"\t" + text +"\n"); } /////////////////////////////////////////////////////////////////////// @@ -149,13 +220,13 @@ switch(event.button) { case 0: - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "LClick\t" + time +"\t"+ url +"\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "LClick\t" + time +"\t"+ url +"\n"); break; case 1: - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "MClick\t" + time +"\t"+ url +"\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "MClick\t" + time +"\t"+ url +"\n"); break; case 2: - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "RClick\t" + time +"\t"+ url +"\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "RClick\t" + time +"\t"+ url +"\n"); break; default: } @@ -178,7 +249,7 @@ if (event.target.localName == "vbox")// Firefox { var time = new Date().getTime(); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "AddTab\t" + time + "\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "AddTab\t" + time + "\n"); } } @@ -198,7 +269,7 @@ if (event.target.localName == "vbox")// Firefox { var time = new Date().getTime(); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "RmTab\t" + time + "\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "RmTab\t" + time + "\n"); } } @@ -217,7 +288,7 @@ { var time = new Date().getTime(); url=washAndRinse(url, true); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "SelTab\t" + time + "\t" + url + "\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "SelTab\t" + time + "\t" + url + "\n"); } } @@ -231,7 +302,7 @@ return; } var time = new Date().getTime(); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "AddTab\t" + time + "\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "AddTab\t" + time + "\n"); } /////////////////////////////////////////////////////////////////////// @@ -244,7 +315,7 @@ return; } var time = new Date().getTime(); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "RmTab\t" + time + "\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "RmTab\t" + time + "\n"); } @@ -268,7 +339,7 @@ { var time = new Date().getTime(); url=washAndRinse(url, true); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "SelTab\t" + time + "\t" + url + "\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "SelTab\t" + time + "\t" + url + "\n"); } } @@ -285,23 +356,28 @@ } var time = new Date().getTime(); - var url = window.content.location.href; - if(url == lemurlog_prev_focus_url) - { - return; + + if ((typeof(event.originalTarget)!="undefined") && (typeof(event.originalTarget.location)!="undefined")) { + + var url = event.originalTarget.location.href; + + if(url == lemurlog_prev_focus_url) + { + return; + } + lemurlog_prev_focus_url = url; + if(lemurlog_IsRecordableURL(url)) + { + lemurlog_g_recordable = true; + } + else + { + lemurlog_g_recordable = false; + return; + } + url=washAndRinse(url, true); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "Focus\t" + time + "\t" + url + "\n"); } - lemurlog_prev_focus_url = url; - if(lemurlog_IsRecordableURL(url)) - { - lemurlog_g_recordable = true; - } - else - { - lemurlog_g_recordable = false; - return; - } - url=washAndRinse(url, true); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "Focus\t" + time + "\t" + url + "\n"); } @@ -323,7 +399,7 @@ return; } lemurlog_prev_blur_time = time; - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "Blur\t" + time + "\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "Blur\t" + time + "\n"); } /////////////////////////////////////////////////////////////////////// @@ -343,7 +419,7 @@ return; } lemurlog_prev_scroll_time = time; - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "Scroll\t" + time + "\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "Scroll\t" + time + "\n"); } /////////////////////////////////////////////////////////////////////// @@ -357,7 +433,9 @@ return; } var time = new Date().getTime(); - var url = window.content.location.href; + + var url = event.originalTarget.location.href; + if(lemurlog_IsRecordableURL(url)) { lemurlog_g_recordable = true; @@ -375,7 +453,7 @@ } lemurlog_prev_show_time = time; url=washAndRinse(url, true); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "Show\t" + time + "\t" + url + "\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "Show\t" + time + "\t" + url + "\n"); } @@ -395,7 +473,7 @@ return; } lemurlog_prev_hide_time = time; - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "Hide\t" + time + "\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "Hide\t" + time + "\n"); } /////////////////////////////////////////////////////////////////////// @@ -403,17 +481,21 @@ /////////////////////////////////////////////////////////////////////// function lemurlog_Switch(event, mode) { - var time = new Date().getTime(); - if(mode === true) - { - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "StartLogging\t" + time + "\n"); + // don't allow switch if we're in private browse mode! + if (!inPrivateBrowseMode) { + var time = new Date().getTime(); + + lemurlog_g_enable = mode; + if(mode === true) + { + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "StartLogging\t" + time + "\n"); + } + else + { + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "PauseLogging\t" + time + "\n"); + } + lemurlog_SetButtons(); } - else - { - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "PauseLogging\t" + time + "\n"); - } - lemurlog_g_enable = mode; - lemurlog_SetButtons(); } /////////////////////////////////////////////////////////////////////// @@ -427,53 +509,58 @@ { return; } - var url = window.content.location.href; - if(url == lemurlog_prev_load_url) - { - return; - } - lemurlog_prev_load_url = url; - if(!lemurlog_IsRecordableURL(url)) - { - // alert("LoadCapEvent - not recordable: " + url); - return; - } - var time = new Date().getTime(); - var printableurl=washAndRinse(url, true); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "LoadCap\t" + time + "\t" + printableurl + "\n"); + if ((typeof(event.originalTarget)!="undefined") && (typeof(event.originalTarget.location)!="undefined")) { + var url = event.originalTarget.location.href; + if(url == lemurlog_prev_load_url) + { + return; + } + lemurlog_prev_load_url = url; - //add mousedown listeners to all links - var links = window.content.document.links; - for (i = 0; i < links.length; i++) - { - links[i].addEventListener('mousedown', lemurlog_OnMouseDown, true); - } + if(!lemurlog_IsRecordableURL(url)) + { + // alert("LoadCapEvent - not recordable: " + url); + return; + } + var time = new Date().getTime(); + var printableurl=washAndRinse(url, true); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "LoadCap\t" + time + "\t" + printableurl + "\n"); - //log search history - // if it's a search URL and our last URL wasn't sanitized... - if(lemurlog_IsSearchURL(url) && (printableurl.indexOf(sanitizedSubstitution) < 0)) - { - //save new search results - var found = false; - var i; - for(i = lemurlog_search_urls.length -1 ; i>=0; i--) - { - if(url == lemurlog_search_urls[i]) + //add mousedown listeners to all links + var links = window.content.document.links; + if (links!="undefined") { + for (i = 0; i < links.length; i++) { - found = true; - break; + links[i].addEventListener('mousedown', lemurlog_OnMouseDown, true); } + } + //log search history + // if it's a search URL and our last URL wasn't sanitized... + if(lemurlog_IsSearchURL(url) && (printableurl.indexOf(sanitizedSubstitution) < 0)) + { + //save new search results + var found = false; + var i; + for(i = lemurlog_search_urls.length -1 ; i>=0; i--) + { + if(url == lemurlog_search_urls[i]) + { + found = true; + break; + } + + } + if(found === false)//new search url + { + var thisUrl=washAndRinse(url, true); + lemurlog_search_urls[lemurlog_search_urls.length]=thisUrl; + var html_content = washAndRinse(window.content.document.documentElement.innerHTML); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "Search\t"+time+"\t"+html_content.length+"\n"); + lemurlog_DoWriteLogFile(lemurlog_PAGE_FILE, "LOGTB_BEGIN_SEARCH_PAGE\nID="+time+"\nURL="+thisUrl+"\nLength="+html_content.length+"\n<html>\n"+html_content+"\n</html>\n"); + } } - if(found === false)//new search url - { - var thisUrl=washAndRinse(url, true); - lemurlog_search_urls[lemurlog_search_urls.length]=thisUrl; - var html_content = washAndRinse(window.content.document.documentElement.innerHTML); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "Search\t"+time+"\t"+html_content.length+"\n"); - lemurlog_WriteLogFile(lemurlog_PAGE_FILE, "LOGTB_BEGIN_SEARCH_PAGE\nID="+time+"\nURL="+thisUrl+"\nLength="+html_content.length+"\n<html>\n"+html_content+"\n</html>\n"); - } } } /////////////////////////////////////////////////////////////////////// @@ -488,7 +575,9 @@ { return; } - var url = window.content.location.href; + + var url = event.originalTarget.location.href; + if(url == lemurlog_prev_load_url) { return; @@ -499,7 +588,7 @@ if(lemurlog_IsRecordableURL(url)) { url=washAndRinse(url, true); - lemurlog_WriteLogFile(lemurlog_LOG_FILE, "LoadBub\t" + time + "\t" + url + "\n"); + lemurlog_DoWriteLogFile(lemurlog_LOG_FILE, "LoadBub\t" + time + "\t" + url + "\n"); } } @@ -544,9 +633,66 @@ } +// add support for private browsing - do not allow logging! +var privateBrowserListener = new PrivateBrowsingListener(); +privateBrowserListener.watcher = { + onEnterPrivateBrowsing : function() { + // we have just entered private browsing mode! + isLoggingInPrivate=lemurlog_g_enable; + lemurlog_Switch(null, false); + + // disable any buttons + var button = document.getElementById("LogTB-Pause-Button"); + if (button) { button.disabled = true; } + button = document.getElementById("LogTB-Pause-Button-Gray"); + if (button) { button.disabled = true; } + button = document.getElementById("LogTB-Start-Button"); + if (button) { button.disabled = true; } + button = document.getElementById("LogTB-Start-Button-Gray"); + if (button) { button.disabled = true; } + + inPrivateBrowseMode=true; + }, + + onExitPrivateBrowsing : function() { + // we have just left private browsing mode! + inPrivateBrowseMode=false; + lemurlog_Switch(null, isLoggingInPrivate); + } +}; + + +// see if we started in private browse mode +try { + var pbs = Components.classes["@mozilla.org/privatebrowsing;1"].getService(Components.interfaces.nsIPrivateBrowsingService); + var inPrivateBrowsingMode = pbs.privateBrowsingEnabled; + + if (inPrivateBrowsingMode) { + // we are in private browsing mode! + isLoggingInPrivate=lemurlog_g_enable; + lemurlog_Switch(null, false); + + // disable any buttons + var button = document.getElementById("LogTB-Pause-Button"); + if (button) { button.disabled = true; } + button = document.getElementById("LogTB-Pause-Button-Gray"); + if (button) { button.disabled = true; } + button = document.getElementById("LogTB-Start-Button"); + if (button) { button.disabled = true; } + button = document.getElementById("LogTB-Start-Button-Gray"); + if (button) { button.disabled = true; } + + inPrivateBrowseMode=true; + } +} catch (ex) { + // ignore exception for older versions + alert("Exception (Private Browse): " + ex.description); +} + //add listeners -window.addEventListener('load', lemurlog_OnLoad_Cap, true);//if false, sometimes isn't triggerred +// window.addEventListener('load', lemurlog_OnLoad_Cap, true);//if false, sometimes isn't triggerred +document.addEventListener('load', lemurlog_OnLoad_Cap, true);//if false, will fire just for the document - no frames window.addEventListener('load', lemurlog_OnLoad_Bub, false);//if true, gBrowser is not ready yet window.addEventListener('pageshow', lemurlog_OnShow, false); @@ -586,7 +732,6 @@ } - /////////////////////////////////////////////////////////// // Supported log records: /////////////////////////////////////////////////////////// Modified: src/chrome/content/logtoolbar.xul =================================================================== --- src/chrome/content/logtoolbar.xul 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/logtoolbar.xul 2009-10-09 09:20:45 UTC (rev 8) @@ -14,6 +14,7 @@ <script type="application/x-javascript" src="chrome://qthtoolbar/content/configuration.js" /> <script type="application/x-javascript" src="chrome://qthtoolbar/content/utils.js" /> <script type="application/x-javascript" src="chrome://qthtoolbar/content/service.js" /> + <script type="application/x-javascript" src="chrome://qthtoolbar/content/privateBrowserListener.js"/> <script type="application/x-javascript" src="chrome://qthtoolbar/content/logtoolbar.js" /> <script type="application/x-javascript" src="chrome://qthtoolbar/content/qth.js" /> @@ -21,7 +22,7 @@ <toolbar id="LogTB-Toolbar" - toolbarname="QT Honey Toolbar" + toolbarname="Lemur Query Log Toolbar" accesskey="L" class="chromeclass-toolbar" context="toolbar-context-menu" @@ -62,17 +63,16 @@ > <menupopup> <menuitem + id="qth_view_log" label="QT Honey log" - tooltiptext="View QT Honey log" - id="qth_view_log" /> <menuitem - label="Lemur Activity log" + label="Activity log" tooltiptext="View activity log" oncommand="lemurlog_View_Log(event, 0)" /> <menuitem - label="Lemur Search log" + label="Search log" tooltiptext="View search log" oncommand="lemurlog_View_Log(event, 1)" /> Added: src/chrome/content/privateBrowserListener.js =================================================================== --- src/chrome/content/privateBrowserListener.js (rev 0) +++ src/chrome/content/privateBrowserListener.js 2009-10-09 09:20:45 UTC (rev 8) @@ -0,0 +1,62 @@ + +// an object to listen for +// private browsing requests +// based on: +// https://developer.mozilla.org/En/Supporting_private_browsing_mode + +function PrivateBrowsingListener() { + this.init(); +} +PrivateBrowsingListener.prototype = { + _os: null, + _inPrivateBrowsing: false, // whether we are in private browsing mode + _watcher: null, // the watcher object + + init : function () { + this._inited = true; + this._os = Components.classes["@mozilla.org/observer-service;1"] + .getService(Components.interfaces.nsIObserverService); + this._os.addObserver(this, "private-browsing", false); + this._os.addObserver(this, "quit-application", false); + try { + var pbs = Components.classes["@mozilla.org/privatebrowsing;1"] + .getService(Components.interfaces.nsIPrivateBrowsingService); + this._inPrivateBrowsing = pbs.privateBrowsingEnabled; + } catch(ex) { + // ignore exceptions in older versions of Firefox + } + }, + + observe : function (aSubject, aTopic, aData) { + if (aTopic == "private-browsing") { + if (aData == "enter") { + this._inPrivateBrowsing = true; + if (this.watcher && + "onEnterPrivateBrowsing" in this._watcher) { + this.watcher.onEnterPrivateBrowsing(); + } + } else if (aData == "exit") { + this._inPrivateBrowsing = false; + if (this.watcher && + "onExitPrivateBrowsing" in this._watcher) { + this.watcher.onExitPrivateBrowsing(); + } + } + } else if (aTopic == "quit-application") { + this._os.removeObserver(this, "quit-application"); + this._os.removeObserver(this, "private-browsing"); + } + }, + + get inPrivateBrowsing() { + return this._inPrivateBrowsing; + }, + + get watcher() { + return this._watcher; + }, + + set watcher(val) { + this._watcher = val; + } +}; \ No newline at end of file Modified: src/chrome/content/qth.js =================================================================== --- src/chrome/content/qth.js 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/qth.js 2009-10-09 09:20:45 UTC (rev 8) @@ -309,10 +309,10 @@ return target; } -function dict_get( dict, key, default_value ) +function dict_get(dict, key, default_value) { - if( !( key in dict ) ) - return default_value || null + if(!(key in dict)) + return default_value return dict[key] } @@ -342,6 +342,8 @@ } function url_parse_query(queries) { + if(!queries) + return {} return array_reduce(queries.split('&'), {}, function(results, query, index) { var key_value = query.split('=') @@ -384,10 +386,13 @@ case 'CtrlC': log['event_label'] = 'copy'; break; case 'RmTab': log['event_label'] = 'close'; break; //å¦çããªãã - case 'SelTab': //log['event_label'] = 'change'; break; //-> ç¬èªã«æ¤åºããã®ã§å¦çããªãã - case 'AddTab': +// case 'SelTab': //log['event_label'] = 'change'; break; //-> ç¬èªã«æ¤åºããã®ã§å¦çããªãã +// case 'AddTab': case 'Show': case 'Hide': + case 'RClick': + case 'LClick': + case 'Search': return; default: debug_log(original_log); return; } @@ -419,7 +424,9 @@ // ãã°æååä½æç¨ã®ãã©ã¡ã¼ã¿ãä½ã£ã¦è¿ãã // ãã°é ç®ã®ããã©ã«ãå¤ãæã£ãè¾æ¸ãä½æããã // ä½æããè¾æ¸ã«ãå¼æ°ã®è¾æ¸ã§ä¸æ¸ããããã®ãè¿ãã -function build_log(log_option) { +function build_log(log_option, document) { + document = document || gBrowser.contentDocument; + // ãã°ç¨ã®è¾æ¸ãç¨æ var log = {}; @@ -436,8 +443,8 @@ log['session_time'] = date_time_get_epoch() - tab_data.created; // URLãã¿ã¤ãã«ãè¨é² - log['title'] = gBrowser.contentDocument.title; - log['url'] = gBrowser.contentDocument.location.href; + log['title'] = document.title; + log['url'] = document.location.href; // ãã¼ã¸IDãåå¾ log['page_id'] = get_page_id(tab_data, log['url']); @@ -634,7 +641,7 @@ ifile_append(log_ifile, log_text); // ã¹ãã¼ã¿ã¹ãã¤ã¢ãã°ãæ´æ° - // window.openDialog('chrome://qthtoolbar/content/status.xul', 'qth_status', 'width=300,height=100,chrome', log, debug_log); + window.openDialog('chrome://qthtoolbar/content/status.xul', 'qth_status', 'width=300,height=100,chrome', log, debug_log); } @@ -703,8 +710,8 @@ // ãã¹ã¦ã®Aã¿ã°ã«ã¢ã¿ãããã¦linkã¤ãã³ããåãã function attach_on_content_loaded() { event_observe(document.getElementById('appcontent'), 'DOMContentLoaded', - function(){ - append_log(build_log({'event_label': 'load'})); + function(event){ + append_log(build_log({'event_label': 'load'}, event.target)); }, true ) @@ -734,7 +741,7 @@ ) } ) - + // linkã¤ãã³ãã®ããã«aã¿ã°ã®clickã¤ãã³ãã«ã¢ã¿ãã var a_tags = document.getElementsByTagName('A'); array_each(a_tags, @@ -748,6 +755,9 @@ 'anchor_text': event.target.textContent, 'next_url': event.target.getAttribute('href') }; + + if(null == log['next_url']) + log['next_url'] = '(href not found)' log['next_page_id'] = get_page_id(tab_data, log['next_url']); @@ -811,4 +821,4 @@ } //////////////////////////////////////////////////////////////////////////////// -})() +})() \ No newline at end of file Added: src/chrome/content/scrubbingscreen.xul =================================================================== --- src/chrome/content/scrubbingscreen.xul (rev 0) +++ src/chrome/content/scrubbingscreen.xul 2009-10-09 09:20:45 UTC (rev 8) @@ -0,0 +1,18 @@ +<?xml version="1.0"?> + +<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?> + +<dialog + id="LogTB-Scrubbing-Dialog" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + title="Query Log Toolbar - Scrubbing log files" + buttons="cancel" + ondialogcancel="return true;" + onclose="return true;" +> + <vbox> + <label id="lblScrubbing" value="Scrubbing: " /> + <progressmeter id="pbrScrubbingProgress" mode="determined" value="0%" /> + </vbox> + +</dialog> Modified: src/chrome/content/service.js =================================================================== --- src/chrome/content/service.js 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/service.js 2009-10-09 09:20:45 UTC (rev 8) @@ -11,10 +11,12 @@ this.cgi_url = null; this._request = null; this._finish = false; + this._userId = ""; // Public methods - this.upload = function() + this.upload = function () { + var button = document.getElementById("LogTB-Clear-Button"); button.disabled = true; button = document.getElementById("LogTB-View-Button"); @@ -30,8 +32,9 @@ //set args var args= new Object(); + - args.user_id = lemurlog_GetUniqueStringFromProfilePath(true); + args.user_id = this._userId; args.timestamp = this.timestamp; args.rel_filename = this.cur_file; args.file_size = file.fileSize; @@ -221,6 +224,15 @@ lemurlog_RemoveLogFile(lemurlog_LOCK_FILE); //change UI status this._setFinalUI("Uploaded successfully!"); + + // reset the next auto-upload time + var autoIntervalTime=LemurLogToolbarConfiguration._autoUploadIntervalTime; + var currentDate = new Date; // Generic JS date object + var unixtime_ms = currentDate.getTime(); // Returns milliseconds since the epoch + + LemurLogToolbarConfiguration._nextTimeToAutoUpload=unixtime_ms+autoIntervalTime; + LemurLogToolbarConfiguration.saveLocalUserConfiguration(); + LemurLogToolbarConfiguration._isCurrentlyUploading=false; }; this._onError = function() @@ -229,6 +241,7 @@ lemurlog_RemoveLogFile(lemurlog_LOCK_FILE); //change UI status this._setFinalUI("Cannot upload right now, please try later."); + LemurLogToolbarConfiguration._isCurrentlyUploading=false; }; this._setFinalUI = function(text) Modified: src/chrome/content/settings.js =================================================================== --- src/chrome/content/settings.js 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/settings.js 2009-10-09 09:20:45 UTC (rev 8) @@ -7,6 +7,8 @@ var ProperNameBLItemsRegex=new Array(); var KeywordBLItemsRegex=new Array(); +var KnownSearchEnginePrefixes=new Array(); + /** * retrieves the value as a boolean from a checkbox element * @param checkboxId the name of the checkbox component @@ -85,14 +87,15 @@ } } -function populateArrayFromString(thisArray, inString) { - thisArray=new Array(); +function populateArrayFromString(inString) { + var thisArray=new Array(); var items=inString.split("\n"); for (var i=0; i < items.length; i++) { if (items[i].length > 0) { thisArray[i]=items[i]; } } + return thisArray; } function setOptionsSettings() { @@ -147,10 +150,10 @@ populateListboxFromString('lstBlacklistNameData', LemurLogToolbarConfiguration._blacklistPropernameItems); populateListboxFromString('lstBlacklistKeywordData', LemurLogToolbarConfiguration._blacklistKeywordItems); - populateArrayFromString(PersonalBLItemsRegex, LemurLogToolbarConfiguration._blacklistPersonalRegex); - populateArrayFromString(AddressBLItemsRegex, LemurLogToolbarConfiguration._blacklistAddressRegex); - populateArrayFromString(ProperNameBLItemsRegex, LemurLogToolbarConfiguration._blacklistPropernameRegex); - populateArrayFromString(KeywordBLItemsRegex, LemurLogToolbarConfiguration._blacklistKeywordRegex); + PersonalBLItemsRegex=populateArrayFromString(LemurLogToolbarConfiguration._blacklistPersonalRegex); + AddressBLItemsRegex=populateArrayFromString(LemurLogToolbarConfiguration._blacklistAddressRegex); + ProperNameBLItemsRegex=populateArrayFromString(LemurLogToolbarConfiguration._blacklistPropernameRegex); + KeywordBLItemsRegex=populateArrayFromString(LemurLogToolbarConfiguration._blacklistKeywordRegex); setCheckboxItemValue('chkAnonSession', LemurLogToolbarConfiguration._useRandomSessionId); setCheckboxItemValue('chkUseDesktopSearch', LemurLogToolbarConfiguration._useDesktopSearch); @@ -159,6 +162,8 @@ setCheckboxItemValue('chkProperNameData', LemurLogToolbarConfiguration._useBlacklistProperName); setCheckboxItemValue('chkKeywordData', LemurLogToolbarConfiguration._useBlacklistKeywords); + populateListboxFromString('lstSearchEngines', LemurLogToolbarConfiguration._knownSearchEngines); + chkPersonalDataOnChange(); chkAddressDataOnChange(); chkProperNameDataOnChange(); @@ -166,8 +171,46 @@ var txtServer=document.getElementById('txtServer'); txtServer.value=LemurLogToolbarConfiguration._serverBaseURL; + + setAutoUploadVisualSettings(); } +function setAutoUploadVisualSettings() { + var autoUploadRB=document.getElementById('btnAllowAutoUploads'); + var manualUploadOnlyRB=document.getElementById('btnManualUploadsOnly'); + var autoUploadAskRB=document.getElementById('btnAutoUploadsWithAsk'); + var grpAutoUploadBox=document.getElementById('rdoGroupAutoUploads'); + var lblAutoUploads=document.getElementById('lblAutoUploads'); + + grpAutoUploadBox.selectedIndex=1; + if (LemurLogToolbarConfiguration._serverAllowAutoUploads==false) { + // manual upload only + manualUploadOnlyRB.disabled=false; + autoUploadRB.disabled=true; + autoUploadAskRB.disabled=true; + lblAutoUploads.label="Automatic Uploads: (server does not allow)"; + } else { + manualUploadOnlyRB.disabled=false; + autoUploadRB.disabled=false; + autoUploadAskRB.disabled=false; + lblAutoUploads.label="Automatic Uploads: (manual upload selected)"; + if (LemurLogToolbarConfiguration._useAutomaticUploads==true) { + lblAutoUploads.label="Automatic Uploads: next upload at:\n" + LemurLogToolbarConfiguration.getNextAutoUploadTimeString(); + grpAutoUploadBox.selectedIndex=0; + if (LemurLogToolbarConfiguration._askWhenUsingAutoUploads==true) { + grpAutoUploadBox.selectedIndex=2; + } + } + } + + // var thisDialog=document.getElementById('dlgToolbarSettings'); + try { + window.sizeToContent(); + } catch (excp) { + // do nothing + } +} + function saveSettings() { // LemurLogToolbarConfiguration.loadLocalUserConfiguration(); @@ -177,6 +220,24 @@ LemurLogToolbarConfiguration._useRandomSessionId=getCheckboxItemValue('chkAnonSession'); LemurLogToolbarConfiguration._useDesktopSearch=getCheckboxItemValue('chkUseDesktopSearch'); + var autoUploadRB=document.getElementById('btnAllowAutoUploads'); + var manualUploadOnlyRB=document.getElementById('btnManualUploadsOnly'); + var autoUploadAskRB=document.getElementById('btnAutoUploadsWithAsk'); + + if (autoUploadRB.selected==true) { + // auto upload without ask + LemurLogToolbarConfiguration._useAutomaticUploads=true; + LemurLogToolbarConfiguration._askWhenUsingAutoUploads=false; + } else if (autoUploadAskRB.selected==true) { + // auto upload ask + LemurLogToolbarConfiguration._useAutomaticUploads=true; + LemurLogToolbarConfiguration._askWhenUsingAutoUploads=true; + } else { + // manual upload + LemurLogToolbarConfiguration._useAutomaticUploads=false; + LemurLogToolbarConfiguration._askWhenUsingAutoUploads=false; + } + LemurLogToolbarConfiguration._blacklistPersonalItems=getListItemAsString('lstBlacklistPersonalData'); LemurLogToolbarConfiguration._blacklistAddressItems=getListItemAsString('lstBlacklistAddressData'); LemurLogToolbarConfiguration._blacklistPropernameItems=getListItemAsString('lstBlacklistNameData'); @@ -192,7 +253,12 @@ LemurLogToolbarConfiguration._useBlacklistProperName=getCheckboxItemValue('chkProperNameData'); LemurLogToolbarConfiguration._useBlacklistKeywords=getCheckboxItemValue('chkKeywordData'); + LemurLogToolbarConfiguration._knownSearchEngines=getListItemAsString('lstSearchEngines'); + LemurLogToolbarConfiguration.saveLocalUserConfiguration(); + + setAutoUploadVisualSettings(); + return true; } @@ -346,6 +412,33 @@ } } +function btnRemoveSEListItemOnClick() { + var thisListBox=document.getElementById('lstSearchEngines') + if (thisListBox.selectedIndex > -1) { + KnownSearchEnginePrefixes.splice(thisListBox.selectedIndex, 1); + thisListBox.removeItemAt(thisListBox.selectedIndex); + } +} + +function btnAddSEListItemOnClick() { + var thisListBox=document.getElementById('lstSearchEngines') + var thisTextBox=document.getElementById('txtNewSEListItem'); + var thisValue=thisTextBox.value; + if (thisValue.length > 0) { + thisListBox.appendItem(thisValue, thisValue); + KnownSearchEnginePrefixes.splice(KnownSearchEnginePrefixes.length, 0, thisValue.safeForRegEx()); + } +} + +function doSEListItemSelection() { + var thisListBox=document.getElementById('lstSearchEngines') + if (thisListBox.selectedIndex > -1) { + document.getElementById('btnRemoveSEListItem').disabled=false; + } else { + document.getElementById('btnRemoveListItem').disabled=true; + } +} + function btnAddSpecialPersonalOnClick() { window.openDialog('chrome://qthtoolbar/content/specialblacklist.xul', 'Personal Information Blacklist', 'chrome=yes,modal=yes,status=no', this, PersonalBLItemsRegex); } Modified: src/chrome/content/settings.xul =================================================================== --- src/chrome/content/settings.xul 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/settings.xul 2009-10-09 09:20:45 UTC (rev 8) @@ -4,7 +4,7 @@ <dialog id="dlgToolbarSettings" - title="QT Honey Toolbar - Settings" + title="Query Log Toolbar - Settings" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" buttons="accept,cancel,extra1" ondialogaccept="return saveSettings();" @@ -22,6 +22,7 @@ <tabs> <tab label="General" /> <tab label="Blacklists" /> + <tab label="Search Engines" /> </tabs> <tabpanels> @@ -36,10 +37,24 @@ </groupbox> <groupbox> <caption label="Server Settings" /> - <hbox> - <label value="Address:" control="txtServer" /> - <textbox id="txtServer" value="" size="48" onchange="txtServerOnChange();" /> - </hbox> + <vbox> + <hbox> + <label value="Address:" control="txtServer" /> + <textbox id="txtServer" value="" size="48" onchange="txtServerOnChange();" /> + </hbox> + <groupbox> + <caption id="lblAutoUploads" label="Automatic Uploads" /> + <radiogroup id="rdoGroupAutoUploads"> + <vbox> + <hbox> + <radio id="btnAllowAutoUploads" label="Allow automatic uploads" /> + <radio id="btnManualUploadsOnly" label="Manual uploads only" /> + </hbox> + <radio id="btnAutoUploadsWithAsk" label="Allow automatic uploads, but ask first" /> + </vbox> + </radiogroup> + </groupbox> + </vbox> </groupbox> <groupbox> <caption label="Blacklist Settings" /> @@ -116,6 +131,25 @@ </vbox> </tabpanel> + <tabpanel id="tabSearchEngines"> + <vbox> + <label id="lblSearchEnginesList" value="Known Search Engines:" /> + <listbox id="lstSearchEngines" seltype="single" onselect="doSEListItemSelection();" /> + <hbox> + <button id="btnRemoveSEListItem" align="end" label="Remove Selected" disabled="true" oncommand="btnRemoveSEListItemOnClick();" /> + </hbox> + <hbox> + <label value="New item:" control="txtNewSEListItem" /> + <textbox id="txtNewSEListItem" /> + <button id="btnAddSEListItem" align="end" label="Add" oncommand="btnAddSEListItemOnClick();" /> + </hbox> + <label value="Note: to add a new search engine to the list" /> + <label value="of search engines the system will log results" /> + <label value="for, use the beginning of the search URL for" /> + <label value="the engine (i.e. http://www.google.com/search?)" /> + </vbox> + </tabpanel> + </tabpanels> </tabbox> Modified: src/chrome/content/specialblacklist.xul =================================================================== --- src/chrome/content/specialblacklist.xul 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/specialblacklist.xul 2009-10-09 09:20:45 UTC (rev 8) @@ -4,7 +4,7 @@ <dialog id="dlgSpecialBlacklist" - title="QT Honey Toolbar - Special Blacklist Items" + title="Query Log Toolbar - Special Blacklist Items" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" buttons="cancel" ondialogcancel="return true;" Modified: src/chrome/content/upload.js =================================================================== --- src/chrome/content/upload.js 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/upload.js 2009-10-09 09:20:45 UTC (rev 8) @@ -34,6 +34,7 @@ // Add labels var item; + item = document.getElementById("LogTB-Up-Desc0"); item.setAttribute("value", "Uploading log files to " + LemurLogToolbarConfiguration._serverBaseURL + ":"); @@ -47,18 +48,26 @@ item = document.getElementById("LogTB-Up-Result"); item.setAttribute("value", "Scrubbing log files before upload"); - lemurlog_scrubLogFiles(); + var scrubbingWindow=window.openDialog("chrome://qthtoolbar/content/scrubbingscreen.xul", "LogTB-Scrubbing", "chrome=yes,modal=no,centerscreen=yes,status=no,height=120,width=320"); + var progressMeterLabel=scrubbingWindow.document.getElementById("lblScrubbing"); + var progressMeterItem=scrubbingWindow.document.getElementById("pbrScrubbingProgress"); + scrubbingWindow.focus(); + lemurlog_scrubLogFiles(progressMeterItem, progressMeterLabel); + scrubbingWindow.close(); + item.setAttribute("value", "Uploading..."); //upload the first file // var cgi_url = "http://"+lemurlog_UPLOAD_HOST+lemurlog_UPLOAD_CGI; var cgi_url=baseURL + "/Upload"; + lemurlog_MainWin.lemurlog_upload_service._hasScrubbedLogs=false; lemurlog_MainWin.lemurlog_upload_service.cgi_url = cgi_url; lemurlog_MainWin.lemurlog_upload_service.timestamp = new Date().getTime(); lemurlog_MainWin.lemurlog_upload_service.cur_file = lemurlog_LOG_FILE; - lemurlog_MainWin.lemurlog_upload_service.upload(); + lemurlog_MainWin.lemurlog_upload_service._userId=lemurlog_GetUniqueStringFromProfilePath(true); + lemurlog_MainWin.lemurlog_upload_service.upload(progressMeterItem, item); } function lemurlog_up_onAccept() Modified: src/chrome/content/upload.xul =================================================================== --- src/chrome/content/upload.xul 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/upload.xul 2009-10-09 09:20:45 UTC (rev 8) @@ -5,7 +5,7 @@ <dialog id="LogTB-Upload-Dialog" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" - title="Upload log files" + title="[Lemur Query Log Toolbar] - Upload log files" buttons="accept, cancel" onload="lemurlog_up_onLoad();" ondialogaccept="return lemurlog_up_onAccept();" Modified: src/chrome/content/utils.js =================================================================== --- src/chrome/content/utils.js 2009-10-09 09:09:37 UTC (rev 7) +++ src/chrome/content/utils.js 2009-10-09 09:20:45 UTC (rev 8) @@ -1,18 +1,18 @@ //To avoid confliction with other extensions, we put prefix "logtb_" on every global variables and functions //constant variables -const lemurlog_DATA_DIR = "qthtoolbar_data"; -const lemurlog_LOG_FILE = "qthtoolbar_log"; -const lemurlog_PAGE_FILE = "qthtoolbar_pages"; -const lemurlog_TEMP_LOG_FILE = "qthtoolbar_log_tmp"; -const lemurlog_TEMP_PAGE_FILE = "qthtoolbar_pages_tmp"; -const lemurlog_LOCK_FILE = "qthtoolbar_lock"; +const lemurlog_DATA_DIR = "lemurlogtoolbar_data"; +const lemurlog_LOG_FILE = "lemurlogtoolbar_log"; +const lemurlog_PAGE_FILE = "lemurlogtoolbar_pages"; +const lemurlog_TEMP_LOG_FILE = "lemurlogtoolbar_log_tmp"; +const lemurlog_TEMP_PAGE_FILE = "lemurlogtoolbar_pages_tmp"; +const lemurlog_LOCK_FILE = "lemurlogtoolbar_lock"; const lemurlog_UPLOAD_SUCCEED_STR="LOGTOOLBAR_UPLOAD_SUCCEED"; const lemurlog_MIN_INTERVAL = 500;//milliseconds LemurLogToolbarConfiguration.loadLocalUserConfiguration(); -LemurLogToolbarConfiguration.getDefaultServerConfiguration(true); +LemurLogToolbarConfiguration.getDefaultServerConfiguration(true, true); var sanitizedSubstitution="##--##"; @@ -31,10 +31,12 @@ function washAndRinse(inputString, isUrl) { if (isUrl==null) { isUrl=false; } var outputString=inputString; - if (isUrl) { - outputString = outputString.replace(/\+/g, "%20"); - outputString=unescape(outputString); - } + + // if (isUrl) { + // outputString = outputString.replace(/\+/g, "%20"); + // outputString=unescape(outputString); + // } + if (LemurLogToolbarConfiguration._allowBlacklistPersonal && LemurLogToolbarConfiguration._useBlacklistPersonal) { outputString=sanitizeString(outputString, LemurLogToolbarConfiguration._blacklistPersonalRegex); } @@ -65,6 +67,16 @@ /////////////////////////////////////////////////////////////////////// function lemurlog_IsSearchURL(url) { + // get the array of search engine prefixes from the configuration + var sePrefixArray=LemurLogToolbarConfiguration.getSearchEnginePrefixArray(); + + for (var i=0; i < sePrefixArray.length; i++) { + if (url.indexOf(sePrefixArray[i]) === 0) { + return true; + } + } + + /* if (url.indexOf("http://www.google.com/search?") === 0 ||url.indexOf("http://search.live.com/results.aspx?") === 0 ||url.indexOf("http://search.msn.com/results.aspx?") === 0 @@ -72,6 +84,7 @@ return true; } + */ // check for desktop search? if (LemurLogToolbarConfiguration._useDesktopSearch==true) { @@ -112,21 +125,24 @@ /////////////////////////////////////////////////////////////////////// function lemurlog_SetButtons() { - var button = document.getElementById("LogTB-Pause-Button"); - button.collapsed = (!lemurlog_g_enable); - button.disabled = (!lemurlog_g_enable); + try { + var button = document.getElementById("LogTB-Pause-Button"); + button.collapsed = (!lemurlog_g_enable); + button.disabled = (!lemurlog_g_enable); - var button = document.getElementById("LogTB-Pause-Button-Gray"); - button.collapsed = lemurlog_g_enable; - button.disabled = true; + button = document.getElementById("LogTB-Pause-Button-Gray"); + button.collapsed = lemurlog_g_enable; + button.disabled = true; - button = document.getElementById("LogTB-Start-Button"); - button.collapsed = lemurlog_g_enable; - button.disabled = lemurlog_g_enable; + button = document.getElementById("LogTB-Start-Button"); + button.collapsed = lemurlog_g_enable; + button.disabled = lemurlog_g_enable; - button = document.getElementById("LogTB-Start-Button-Gray"); - button.collapsed = (!lemurlog_g_enable); - button.disabled = true; + button = document.getElementById("LogTB-Start-Button-Gray"); + button.collapsed = (!lemurlog_g_enable); + button.disabled = true; + } catch (ex) { + } } @@ -200,7 +216,8 @@ // also - if any blacklist term occurs in a known search query // remove the search results for that item /////////////////////////////////////////////////////////////////////// -function lemurlog_scrubLogFiles() { +function lemurlog_scrubLogFiles(progressMeter, progressLabel) { + if (progressMeter==null) { return; } // if we're locked - just return var lockfile = lemurlog_GetLogFile(lemurlog_LOCK_FILE); @@ -233,6 +250,7 @@ // Search <ID> <SIZE> var logfile = lemurlog_GetLogFile(lemurlog_LOG_FILE); + var logFileSize = lemurlog_GetLogFileSize(lemurlog_LOG_FILE); var istream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); istream.init(logfile, 0x01, 0444, 0); istream.QueryInterface(Components.interfaces.nsILineInputStream); @@ -244,11 +262,23 @@ var currentWorkingLine=""; var hasMore; + progressLabel.setAttribute("value", "Scrubbing activity log..."); + + var charsRead=0; do { hasMore=istream.readLine(readingLine); if (readingLine.value!=null) { currentWorkingLine=readingLine.value; + // set our progress meter + charsRead+=currentWorkingLine.length; + if (logFileSize > 0) { + var pctSizeCurrent=Math.floor((charsRead / logFileSize)*100.0); + progressMeter.setAttribute("value", "" + pctSizeCurrent); + } else { + progressMeter.setAttribute("value", "100"); + } + // split the current working line by tabs var stringSplit=currentWorkingLine.split(/\t/); if (stringSplit.length < 2) { @@ -322,6 +352,9 @@ foStream.close(); istream.close(); + // set the progress meter to 100% + progressMeter.setAttribute("value", "100"); + // remove the old log and rename the new one lemurlog_RemoveLogFile(lemurlog_LOG_FILE); lemurlog_MoveLogFile(lemurlog_TEMP_LOG_FILE, lemurlog_LOG_FILE); @@ -343,6 +376,11 @@ pageinstream.init(pagefile, 0x01, 0444, 0); pageinstream.QueryInterface(Components.interfaces.nsILineInputStream); + var pageFileSize = lemurlog_GetLogFileSize(lemurlog_PAGE_FILE); + + progressLabel.setAttribute("value", "Scrubbing search page log..."); + + charsRead=0; var skipThisOne=false; var lastLineWasHeader=false; do { @@ -350,7 +388,15 @@ if (readingLine.value!=null) { if (skipThisOne==false) { currentWorkingLine=readingLine.value; - + + charsRead+=currentWorkingLine.length; + if (pageFileSize > 0) { + var pctSizeCurrent=Math.floor((charsRead / pageFileSize)*100.0); + progressMeter.setAttribute("value", "" + pctSizeCurrent); + } else { + progressMeter.setAttribute("value", "100"); + } + if (lastLineWasHeader) { // should be our ID // ID=1194982335173 @@ -390,6 +436,7 @@ hasMore=pageinstream.readLine(readingLine); if (readingLine.value!=null) { currentWorkingLine=readingLine.value; + charsRead+=currentWorkingLine.length; if (currentWorkingLine.indexOf("LOGTB_BEGIN_SEARCH_PAGE") >= 0) { lastLineWasHeader=true; break; @@ -403,6 +450,9 @@ } // end if (readingLine.value!=null) } while (hasMore); // end do + // set the progress meter to 100% + progressMeter.setAttribute("value", "100"); + // we're done - close out output / input pageoutStream.close(); pageinstream.close(); @@ -539,9 +589,17 @@ { return; } + + var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); foStream.init(file, 0x02 | 0x08 | 0x10, 0600, 0);//append - foStream.write(text, text.length); + //foStream.write(text, text.length); + // must use a conversion stream here to properly handle multi-byte character encodings + var converterStream = Components.classes['@mozilla.org/intl/converter-output-stream;1'].createInstance(Components.interfaces.nsIConverterOutputStream); + var charset = 'utf-8'; + converterStream.init(foStream, charset, text.length, Components.interfaces.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); + converterStream.writeString(text); + converterStream.close(); foStream.close(); } @@ -552,8 +610,8 @@ { if (forUpload!=null && forUpload==true) { if (LemurLogToolbarConfiguration._allowRandomSessionId && LemurLogToolbarConfiguration._useRandomSessionId) { - var rand_no = Math.random(); - return "" + (rand_no*100000.0); + var rand_no = Math.floor(Math.random()*10000000+1); + return "" + rand_no; } } // Get profile directory. Modified: src/defaults/preferences/defaults.js =================================================================== --- src/defaults/preferences/defaults.js 2009-10-09 09:09:37 UTC (rev 7) +++ src/defaults/preferences/defaults.js 2009-10-09 09:20:45 UTC (rev 8) @@ -1,22 +1,28 @@ -pref("extensions.lemurquerylog.server", ""); -pref("extensions.lemurquerylog.userandomsession", false); +pref("extensions.qthlog.server", ""); +pref("extensions.qthlog.userandomsession", false); +pref("extensions.qthlog.useautouploads", true); +pref("extensions.qthlog.askwhenautouploads", false); +pref("extensions.qthlog.nextautouploadtime", "0"); -pref("extensions.lemurquerylog.logdesktopsearch", true); +pref("extensions.qthlog.logdesktopsearch", true); -pref("extensions.lemurquerylog.usepersonalbl", true); -pref("extensions.lemurquerylog.useaddressbl", true); -pref("extensions.lemurquerylog.usepropernamebl", true); -pref("extensions.lemurquerylog.usekeywordbl", true); +pref("extensions.qthlog.usepersonalbl", true); +pref("extensions.qthlog.useaddressbl", true); +pref("extensions.qthlog.usepropernamebl", true); +pref("extensions.qthlog.usekeywordbl", true); -pref("extensions.lemurquerylog.encmodulus", ""); -pref("extensions.lemurquerylog.encexponent", ""); +pref("extensions.qthlog.encmodulus", ""); +pref("extensions.qthlog.encexponent", ""); -pref("extensions.lemurquerylog.bl.personal", ""); -pref("extensions.lemurquerylog.bl.address", ""); -pref("extensions.lemurquerylog.bl.propername", ""); -pref("extensions.lemurquerylog.bl.keyword", ""); +pref("extensions.qthlog.bl.personal", ""); +pref("extensions.qthlog.bl.address", ""); +pref("extensions.qthlog.bl.propername", ""); +pref("extensions.qthlog.bl.keyword", ""); -pref("extensions.lemurquerylog.bl.personalrx", ""); -pref("extensions.lemurquerylog.bl.addressrx", ""); -pref("extensions.lemurquerylog.bl.propernamerx", ""); -pref("extensions.lemurquerylog.bl.keywordrx", ""); +pref("extensions.qthlog.bl.personalrx", ""); +pref("extensions.qthlog.bl.addressrx", ""); +pref("extensions.qthlog.bl.propernamerx", ""); +pref("extensions.qthlog.bl.keywordrx", ""); + +pref("extensions.qthlog.searchengines", "http://www.google.com/search?\nhttp://search.live.com/results.aspx?\nhttp://search.msn.com/results.aspx?\nhttp://search.yahoo.com/search?\n"); + Modified: src/install.rdf =================================================================== --- src/install.rdf 2009-10-09 09:09:37 UTC (rev 7) +++ src/install.rdf 2009-10-09 09:20:45 UTC (rev 8) @@ -2,12 +2,6 @@ <RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#" xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> - <RDF:Description RDF:about="rdf:#$nmAoG" - em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" - em:maxVersion="3.*" - em:minVersion="3.0" /> - <RDF:Description RDF:about="urn:mozilla:extension:file:qth_toolbar.jar" - em:package="content/" /> <RDF:Description RDF:about="urn:mozilla:install-manifest" em:creator="KYA group Corporation" em:homepageURL="http://www.kyagroup.com/" @@ -15,9 +9,15 @@ em:name="QT Honey Toolbar" em:updateURL="http://www.kyagroup.com/qth_toolbar/update.rdf" em:updateKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa918ixPNbxR6b3vXcNGwrNqWtwr8MhxFbbJDOzq+NswRaoZoUWSKd0yrZOs8ZatfuclcwQLQOW95UG0y7Mi6nHz1O396KU7NGfARUXR2NgnR0mMjNFZ/wLJ+k9ej2oCuwUpFDgimM8LSEgE1quXBC2jcLrpFDbk1lOC/1xU3n0wIDAQAB" - em:version="1.5.5" + em:version="2.0.1" em:description="A toolbar logging user behavior"> <em:file RDF:resource="urn:mozilla:extension:file:qth_toolbar.jar"/> <em:targetApplication RDF:resource="rdf:#$nmAoG"/> </RDF:Description> + <RDF:Description RDF:about="urn:mozilla:extension:file:qth_toolbar.jar" + em:package="content/" /> + <RDF:Description RDF:about="rdf:#$nmAoG" + em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" + em:maxVersion="3.*" + em:minVersion="3.0" /> </RDF:RDF>