| OLD | NEW | 
|    1 /* This Source Code Form is subject to the terms of the Mozilla Public |    1 /* This Source Code Form is subject to the terms of the Mozilla Public | 
|    2  * License, v. 2.0. If a copy of the MPL was not distributed with this file, |    2  * License, v. 2.0. If a copy of the MPL was not distributed with this file, | 
|    3  * You can obtain one at http://mozilla.org/MPL/2.0/. */ |    3  * You can obtain one at http://mozilla.org/MPL/2.0/. */ | 
|    4  |    4  | 
|    5 Cu.import("resource://gre/modules/Services.jsm"); |    5 Cu.import("resource://gre/modules/Services.jsm"); | 
|    6  |    6  | 
|    7 let {Prefs} = require("prefs"); |    7 let {Prefs} = require("prefs"); | 
|    8 let {WindowObserver} = require("windowObserver"); |    8 let {WindowObserver} = require("windowObserver"); | 
|    9  |    9  | 
 |   10 let DOMAIN_TYPED = 1; | 
 |   11 let DOMAIN_TYPO = 2; | 
 |   12 let DOMAIN_CORRECTION = 3; | 
 |   13 let DOMAIN_FALSE_POSITIVE = 4; | 
 |   14  | 
|   10 let domains = null; |   15 let domains = null; | 
|   11 let userCorrections = null; |  | 
|   12 let falsePositives = null; |  | 
|   13 let timer = null; |   16 let timer = null; | 
|   14  |   17  | 
|   15 // Initialize and make sure to react to pref changes |   18 // Initialize and make sure to react to pref changes | 
|   16 if (Prefs.domainOptIn) |   19 if (Prefs.domainOptIn) | 
|   17   startCollection(); |   20   startCollection(); | 
|   18 Prefs.addListener(function(name) |   21 Prefs.addListener(function(name) | 
|   19 { |   22 { | 
|   20   if (name != "domainOptIn") |   23   if (name != "domainOptIn") | 
|   21     return; |   24     return; | 
|   22   if (Prefs.domainOptIn) |   25   if (Prefs.domainOptIn) | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   57   if (Prefs.counter < 5) |   60   if (Prefs.counter < 5) | 
|   58     Prefs.counter++; |   61     Prefs.counter++; | 
|   59   else if (!Prefs.domainOptInAsk && !Prefs.domainOptIn) |   62   else if (!Prefs.domainOptInAsk && !Prefs.domainOptIn) | 
|   60     window.openDialog("chrome://url-fixer/content/typedItOptIn.xul", "typedItOpt
     In", "chrome,dialog,centerscreen,titlebar"); |   63     window.openDialog("chrome://url-fixer/content/typedItOptIn.xul", "typedItOpt
     In", "chrome,dialog,centerscreen,titlebar"); | 
|   61 } |   64 } | 
|   62  |   65  | 
|   63 exports.processTypedDomain = processTypedDomain; |   66 exports.processTypedDomain = processTypedDomain; | 
|   64 function processTypedDomain(domain) |   67 function processTypedDomain(domain) | 
|   65 { |   68 { | 
|   66   if (domains && !privateBrowsingEnabled()) |   69   if (domains && !privateBrowsingEnabled()) | 
|   67     domains.push(domain); |   70     domains[domain] = DOMAIN_TYPED; | 
 |   71 } | 
 |   72  | 
 |   73 exports.processDomainCorrection = processDomainCorrection; | 
 |   74 function processDomainCorrection(domainFrom, domainTo) | 
 |   75 { | 
 |   76   if (domains && !privateBrowsingEnabled()) | 
 |   77   { | 
 |   78     domains[domainFrom] = DOMAIN_TYPO; | 
 |   79     domains[domainTo] = DOMAIN_CORRECTION; | 
 |   80   } | 
|   68 } |   81 } | 
|   69  |   82  | 
|   70 exports.processFalsePositive = processFalsePositive; |   83 exports.processFalsePositive = processFalsePositive; | 
|   71 function processFalsePositive(domainFrom, domainTo) |   84 function processFalsePositive(domainFrom, domainTo) | 
|   72 { |   85 { | 
|   73   if (falsePositives && !privateBrowsingEnabled()) |   86   if (domains && !privateBrowsingEnabled()) | 
|   74   { |   87   { | 
|   75     falsePositives.push([domainFrom, domainTo]); |   88     domains[domainFrom] = DOMAIN_FALSE_POSITIVE; | 
 |   89     domains[domainTo] = DOMAIN_TYPED; | 
|   76   } |   90   } | 
|   77 } |   91 } | 
|   78  |   92  | 
|   79 exports.processUserCorrection = processUserCorrection; |   93 exports.processUserCorrection = processUserCorrection; | 
|   80 function processUserCorrection(domainFrom, domainTo) |   94 function processUserCorrection(domainFrom, domainTo) | 
|   81 { |   95 { | 
|   82   if (userCorrections && !privateBrowsingEnabled()) |   96   if (domains && !privateBrowsingEnabled()) | 
|   83   { |   97   { | 
|   84     userCorrections.push([domainFrom, domainTo]); |   98     domains[domainFrom] = DOMAIN_TYPO; | 
 |   99     domains[domainTo] = DOMAIN_CORRECTION; | 
|   85   } |  100   } | 
|   86 } |  101 } | 
|   87  |  102  | 
|   88 exports.openDisclosurePage = openDisclosurePage; |  103 exports.openDisclosurePage = openDisclosurePage; | 
|   89 function openDisclosurePage() |  104 function openDisclosurePage() | 
|   90 { |  105 { | 
|   91   let window = Services.wm.getMostRecentWindow("navigator:browser"); |  106   let window = Services.wm.getMostRecentWindow("navigator:browser"); | 
|   92   if (!window) |  107   if (!window) | 
|   93     return; |  108     return; | 
|   94  |  109  | 
|   95   let url = "http://urlfixer.org/data/"; |  110   let url = "http://urlfixer.org/data/"; | 
|   96   if ("Browser" in window && typeof window.Browser.addTab != 'undefined') |  111   if ("Browser" in window && typeof window.Browser.addTab != 'undefined') | 
|   97     window.Browser.addTab(url, true); |  112     window.Browser.addTab(url, true); | 
|   98   else if ("gBrowser" in window) |  113   else if ("gBrowser" in window) | 
|   99     window.gBrowser.loadOneTab(url, {inBackground: false}); |  114     window.gBrowser.loadOneTab(url, {inBackground: false}); | 
|  100 } |  115 } | 
|  101  |  116  | 
|  102 function startCollection() |  117 function startCollection() | 
|  103 { |  118 { | 
|  104   if (domains || falsePositives || userCorrections) |  119   if (domains) | 
|  105     return; |  120     return; | 
|  106  |  121  | 
|  107   onShutdown.add(stopCollection); |  122   onShutdown.add(stopCollection); | 
|  108  |  123  | 
|  109   domains = []; |  124   domains = {}; | 
|  110   falsePositives = []; |  | 
|  111   userCorrections = []; |  | 
|  112  |  125  | 
|  113   // Send data every 15 minutes |  126   // Send data every 60 minutes | 
|  114   timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); |  127   timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); | 
|  115   timer.initWithCallback(sendAnonymousData, 1000 * 60 * 15, Ci.nsITimer.TYPE_REP
     EATING_SLACK); |  128   timer.initWithCallback(sendAnonymousData, 1000 * 60 * 60, Ci.nsITimer.TYPE_REP
     EATING_SLACK); | 
|  116 } |  129 } | 
|  117  |  130  | 
|  118 function stopCollection() |  131 function stopCollection() | 
|  119 { |  132 { | 
|  120   if (!domains || !falsePositives || !userCorrections) |  133   if (!domains) | 
|  121     return; |  134     return; | 
|  122  |  135  | 
|  123   onShutdown.remove(stopCollection); |  136   onShutdown.remove(stopCollection); | 
|  124   domains = null; |  137   domains = null; | 
|  125   falsePositives = null; |  | 
|  126   userCorrections = null; |  | 
|  127  |  138  | 
|  128   try |  139   try | 
|  129   { |  140   { | 
|  130     timer.cancel(); |  141     timer.cancel(); | 
|  131   } |  142   } | 
|  132   catch (e) |  143   catch (e) | 
|  133   { |  144   { | 
|  134     Cu.reportError(e); |  145     Cu.reportError(e); | 
|  135   } |  146   } | 
|  136   timer = null; |  147   timer = null; | 
|  137 } |  148 } | 
|  138  |  149  | 
|  139 function privateBrowsingEnabled() |  150 function privateBrowsingEnabled() | 
|  140 { |  151 { | 
|  141   if (!("service" in privateBrowsingEnabled)) |  152   if (!("service" in privateBrowsingEnabled)) | 
|  142     privateBrowsingEnabled.service = Cc["@mozilla.org/privatebrowsing;1"].getSer
     vice(Ci.nsIPrivateBrowsingService); |  153     privateBrowsingEnabled.service = Cc["@mozilla.org/privatebrowsing;1"].getSer
     vice(Ci.nsIPrivateBrowsingService); | 
|  143  |  154  | 
|  144   return privateBrowsingEnabled.service.privateBrowsingEnabled; |  155   return privateBrowsingEnabled.service.privateBrowsingEnabled; | 
|  145 } |  156 } | 
|  146  |  157  | 
|  147 function sendAnonymousData() |  158 function sendAnonymousData() | 
|  148 { |  159 { | 
|  149   if (!Prefs.domainOptIn || (domains.length == 0 && falsePositives.length == 0 &
     & userCorrections.length == 0) || privateBrowsingEnabled()) |  160   if (!Prefs.domainOptIn || privateBrowsingEnabled()) | 
|  150     return; |  161     return; | 
|  151    |  162  | 
|  152   let postData = {}; |  163   let postData = JSON.stringify(domains); | 
 |  164   if (postData == JSON.stringify({})) | 
 |  165     return; | 
 |  166  | 
|  153   let savedDomains = domains; |  167   let savedDomains = domains; | 
|  154   let savedFalsePositives = falsePositives; |  168   domains = {}; | 
|  155   let savedUserCorrections = userCorrections; |  | 
|  156  |  169  | 
|  157   if(domains.length > 0) |  | 
|  158   { |  | 
|  159     postData.domains = domains; |  | 
|  160     domains = []; |  | 
|  161   } |  | 
|  162   if(falsePositives.length > 0) |  | 
|  163   { |  | 
|  164     postData.falsePositives = falsePositives; |  | 
|  165     falsePositives = []; |  | 
|  166   } |  | 
|  167   if(userCorrections.length > 0) |  | 
|  168   { |  | 
|  169     postData.userCorrections = userCorrections; |  | 
|  170     userCorrections = []; |  | 
|  171   } |  | 
|  172    |  | 
|  173   let request = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.
     nsIXMLHttpRequest); |  170   let request = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.
     nsIXMLHttpRequest); | 
|  174   request.open("POST", "http://typed.it/submitData"); |  171   request.open("POST", "http://typed.it/submitData"); | 
|  175   request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); |  172   request.setRequestHeader("Content-Type", "application/json"); | 
|  176   request.addEventListener("load", function(event) |  173   request.addEventListener("load", function(event) | 
|  177   { |  174   { | 
|  178     if (event.target.status != 200) |  175     if (event.target.status != 200) | 
|  179     { |  | 
|  180       domains = domains.concat(savedDomains); |  176       domains = domains.concat(savedDomains); | 
|  181       falsePositives = falsePositives.concat(savedFalsePositives); |  | 
|  182       userCorrections = userCorrections.concat(savedUserCorrections); |  | 
|  183     } |  | 
|  184   }, false); |  177   }, false); | 
|  185   request.send("data=" + JSON.stringify(postData)); |  178   request.send(postData); | 
|  186 } |  179 } | 
|  187  |  180  | 
|  188 function initWebUI(event) |  181 function initWebUI(event) | 
|  189 { |  182 { | 
|  190   if (Prefs.domainOptIn) |  183   if (Prefs.domainOptIn) | 
|  191     return; |  184     return; | 
|  192  |  185  | 
|  193   let container = event.target; |  186   let container = event.target; | 
|  194   let source = container.ownerDocument.defaultView.location.hostname; |  187   let source = container.ownerDocument.defaultView.location.hostname; | 
|  195   if (!/(^|\.)urlfixer\.org$/.test(source)) |  188   if (!/(^|\.)urlfixer\.org$/.test(source)) | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|  208  |  201  | 
|  209     Prefs.domainOptInAsk = true; |  202     Prefs.domainOptInAsk = true; | 
|  210     Prefs.domainOptIn = true; |  203     Prefs.domainOptIn = true; | 
|  211     button.style.display = "none"; |  204     button.style.display = "none"; | 
|  212     message.style.display = ""; |  205     message.style.display = ""; | 
|  213   }, false); |  206   }, false); | 
|  214  |  207  | 
|  215   message.style.display = "none"; |  208   message.style.display = "none"; | 
|  216   container.style.display = ""; |  209   container.style.display = ""; | 
|  217 } |  210 } | 
| OLD | NEW |