Index: lib/typedItCollector.js |
=================================================================== |
--- a/lib/typedItCollector.js |
+++ b/lib/typedItCollector.js |
@@ -2,19 +2,22 @@ |
* License, v. 2.0. If a copy of the MPL was not distributed with this file, |
* You can obtain one at http://mozilla.org/MPL/2.0/. */ |
Cu.import("resource://gre/modules/Services.jsm"); |
let {Prefs} = require("prefs"); |
let {WindowObserver} = require("windowObserver"); |
+let DOMAIN_TYPED = 1; |
+let DOMAIN_TYPO = 2; |
+let DOMAIN_CORRECTION = 3; |
+let DOMAIN_FALSE_POSITIVE = 4; |
+ |
let domains = null; |
-let userCorrections = null; |
-let falsePositives = null; |
let timer = null; |
// Initialize and make sure to react to pref changes |
if (Prefs.domainOptIn) |
startCollection(); |
Prefs.addListener(function(name) |
{ |
if (name != "domainOptIn") |
@@ -59,34 +62,46 @@ function onBrowserInitialized(window) |
else if (!Prefs.domainOptInAsk && !Prefs.domainOptIn) |
window.openDialog("chrome://url-fixer/content/typedItOptIn.xul", "typedItOptIn", "chrome,dialog,centerscreen,titlebar"); |
} |
exports.processTypedDomain = processTypedDomain; |
function processTypedDomain(domain) |
{ |
if (domains && !privateBrowsingEnabled()) |
- domains.push(domain); |
+ domains[domain] = DOMAIN_TYPED; |
+} |
+ |
+exports.processDomainCorrection = processDomainCorrection; |
+function processDomainCorrection(domainFrom, domainTo) |
+{ |
+ if (domains && !privateBrowsingEnabled()) |
+ { |
+ domains[domainFrom] = DOMAIN_TYPO; |
+ domains[domainTo] = DOMAIN_CORRECTION; |
+ } |
} |
exports.processFalsePositive = processFalsePositive; |
function processFalsePositive(domainFrom, domainTo) |
{ |
- if (falsePositives && !privateBrowsingEnabled()) |
+ if (domains && !privateBrowsingEnabled()) |
{ |
- falsePositives.push([domainFrom, domainTo]); |
+ domains[domainFrom] = DOMAIN_FALSE_POSITIVE; |
+ domains[domainTo] = DOMAIN_TYPED; |
} |
} |
exports.processUserCorrection = processUserCorrection; |
function processUserCorrection(domainFrom, domainTo) |
{ |
- if (userCorrections && !privateBrowsingEnabled()) |
+ if (domains && !privateBrowsingEnabled()) |
{ |
- userCorrections.push([domainFrom, domainTo]); |
+ domains[domainFrom] = DOMAIN_TYPO; |
+ domains[domainTo] = DOMAIN_CORRECTION; |
} |
} |
exports.openDisclosurePage = openDisclosurePage; |
function openDisclosurePage() |
{ |
let window = Services.wm.getMostRecentWindow("navigator:browser"); |
if (!window) |
@@ -96,39 +111,35 @@ function openDisclosurePage() |
if ("Browser" in window && typeof window.Browser.addTab != 'undefined') |
window.Browser.addTab(url, true); |
else if ("gBrowser" in window) |
window.gBrowser.loadOneTab(url, {inBackground: false}); |
} |
function startCollection() |
{ |
- if (domains || falsePositives || userCorrections) |
+ if (domains) |
return; |
onShutdown.add(stopCollection); |
- domains = []; |
- falsePositives = []; |
- userCorrections = []; |
+ domains = {}; |
- // Send data every 15 minutes |
+ // Send data every 60 minutes |
timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); |
- timer.initWithCallback(sendAnonymousData, 1000 * 60 * 15, Ci.nsITimer.TYPE_REPEATING_SLACK); |
+ timer.initWithCallback(sendAnonymousData, 1000 * 60 * 60, Ci.nsITimer.TYPE_REPEATING_SLACK); |
} |
function stopCollection() |
{ |
- if (!domains || !falsePositives || !userCorrections) |
+ if (!domains) |
return; |
onShutdown.remove(stopCollection); |
domains = null; |
- falsePositives = null; |
- userCorrections = null; |
try |
{ |
timer.cancel(); |
} |
catch (e) |
{ |
Cu.reportError(e); |
@@ -141,53 +152,35 @@ function privateBrowsingEnabled() |
if (!("service" in privateBrowsingEnabled)) |
privateBrowsingEnabled.service = Cc["@mozilla.org/privatebrowsing;1"].getService(Ci.nsIPrivateBrowsingService); |
return privateBrowsingEnabled.service.privateBrowsingEnabled; |
} |
function sendAnonymousData() |
{ |
- if (!Prefs.domainOptIn || (domains.length == 0 && falsePositives.length == 0 && userCorrections.length == 0) || privateBrowsingEnabled()) |
+ if (!Prefs.domainOptIn || privateBrowsingEnabled()) |
return; |
- |
- let postData = {}; |
+ |
+ let postData = JSON.stringify(domains); |
+ if (postData == JSON.stringify({})) |
+ return; |
+ |
let savedDomains = domains; |
- let savedFalsePositives = falsePositives; |
- let savedUserCorrections = userCorrections; |
+ domains = {}; |
- if(domains.length > 0) |
- { |
- postData.domains = domains; |
- domains = []; |
- } |
- if(falsePositives.length > 0) |
- { |
- postData.falsePositives = falsePositives; |
- falsePositives = []; |
- } |
- if(userCorrections.length > 0) |
- { |
- postData.userCorrections = userCorrections; |
- userCorrections = []; |
- } |
- |
let request = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest); |
request.open("POST", "http://typed.it/submitData"); |
- request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); |
+ request.setRequestHeader("Content-Type", "application/json"); |
request.addEventListener("load", function(event) |
{ |
if (event.target.status != 200) |
- { |
domains = domains.concat(savedDomains); |
- falsePositives = falsePositives.concat(savedFalsePositives); |
- userCorrections = userCorrections.concat(savedUserCorrections); |
- } |
}, false); |
- request.send("data=" + JSON.stringify(postData)); |
+ request.send(postData); |
} |
function initWebUI(event) |
{ |
if (Prefs.domainOptIn) |
return; |
let container = event.target; |