Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/typoFixer.js

Issue 8948027: Ported changes from Adblock Plus integration back into URL Fixer (Closed)
Patch Set: Created Jan. 14, 2013, 10:03 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/typoCollector.js ('k') | lib/typoNetError.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/typoFixer.js
===================================================================
--- a/lib/typoFixer.js
+++ b/lib/typoFixer.js
@@ -20,123 +20,49 @@
let {Prefs} = require("prefs");
let {WindowObserver} = require("windowObserver");
-let {getSchemeCorrection, isKnownScheme, getDomainCorrection, getDomainReferral, onWhitelistEntryRemoved} = require("typoRules");
-let {processTypedDomain, processDomainCorrection,
- processUserCorrection, processFalsePositive} = require("typedItCollector");
+let {getSchemeCorrection, isKnownScheme, getDomainCorrection, getDomainReferral, onWhitelistEntryAdded} = require("typoRules");
+let {processTypedDomain, processDomainCorrection, processFalsePositive} = require("typoCollector");
let appIntegration = require("typoAppIntegration");
+let netError = require("typoNetError");
-// Attach our handlers to all browser windows
-new WindowObserver(
+let typoWindowObserver = null;
+
+exports.attachWindowObserver = attachWindowObserver;
+function attachWindowObserver()
{
- applyToWindow: function(window)
- {
- if (!appIntegration.isKnownWindow(window))
- return;
+ if (typoWindowObserver)
+ return;
+
+ // Attach our handlers to all browser windows
+ typoWindowObserver = new WindowObserver({
+ applyToWindow: function(window)
+ {
+ if (!appIntegration.isKnownWindow(window))
+ return;
+
+ appIntegration.applyToWindow(window, correctURL);
+ },
- let browser = appIntegration.getBrowser(window);
- if (browser)
- browser.addEventListener("DOMContentLoaded", handlePageLoad, false);
+ removeFromWindow: function(window)
+ {
+ if (!appIntegration.isKnownWindow(window))
+ return;
+
+ appIntegration.removeFromWindow(window);
+ }
+ });
+}
+attachWindowObserver();
- appIntegration.applyToWindow(window, correctURL);
- },
-
- removeFromWindow: function(window)
- {
- if (!appIntegration.isKnownWindow(window))
- return;
-
- let browser = appIntegration.getBrowser(window);
- if (browser)
- {
- browser.removeEventListener("DOMContentLoaded", handlePageLoad, false);
- if (browser.browsers)
- {
- for (let i = 0; i < browser.browsers.length; i++)
- {
- let contentWnd = browser.browsers[i].contentWindow;
- if (contentWnd.document.documentURI.indexOf("about:neterror?") == 0)
- removeFromNetErrorPage(contentWnd);
- }
- }
- }
-
- appIntegration.removeFromWindow(window);
- }
-});
-
-// Load HTML code to add to network error pages
-let netErrorOverlay = null;
-let request = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
-request.open("GET", "chrome://url-fixer/content/netError.xhtml");
-request.addEventListener("load", function(event)
+exports.detachWindowObserver = detachWindowObserver;
+function detachWindowObserver()
{
- netErrorOverlay = event.target.responseXML;
-}, false);
-request.send(null)
-
-function handlePageLoad(event)
-{
- let document = event.target;
- if (document.documentURI.indexOf("about:neterror?") != 0 ||
- document.documentURI.indexOf("e=netOffline") > 0 ||
- document.documentURI.indexOf("e=notCached") > 0)
- {
+ if (!typoWindowObserver)
return;
- }
-
- if (!netErrorOverlay || document.getElementById("url-fixer-section"))
- return;
-
- let container = document.getElementById("errorPageContainer");
- if (!container)
- return;
-
- container.appendChild(netErrorOverlay.documentElement.cloneNode(true));
-
- let textField = document.getElementById("url-fixer-intention");
- textField.value = document.defaultView.location.href;
-
- let retryButton = document.getElementById("url-fixer-retry");
- retryButton.addEventListener("click", function()
- {
- let newURL = textField.value.replace(/^\s+/, "").replace(/\s+$/, "");
- if (!newURL.length)
- return;
-
- let [prefix, newHost, suffix] = parseURL(newURL);
- let oldHost = document.defaultView.location.hostname.toLowerCase();
-
- processUserCorrection(oldHost, newHost);
-
- if (newHost.indexOf("www.") == 0 && oldHost.indexOf("www.") == 0)
- {
- // Ignore www. prefix if they both start with it
- newHost = newHost.substr(4);
- oldHost = oldHost.substr(4);
- }
- if (oldHost && newHost != oldHost)
- {
- Prefs.custom_replace[oldHost] = newHost;
- Prefs.custom_replace = JSON.parse(JSON.stringify(Prefs.custom_replace));
- }
-
- // Remove from whitelist
- if (oldHost in Prefs.whitelist)
- {
- delete Prefs.whitelist[oldHost];
- onWhitelistEntryRemoved(oldHost);
- Prefs.whitelist = JSON.parse(JSON.stringify(Prefs.whitelist));
- }
-
- document.defaultView.location.replace(newURL);
- }, false);
-}
-
-function removeFromNetErrorPage(window)
-{
- let overlay = window.document.getElementById("url-fixer-section");
- if (overlay)
- overlay.parentNode.removeChild(overlay);
+
+ // Detach our handlers from all browser windows
+ typoWindowObserver.shutdown();
+ typoWindowObserver = null;
}
function parseURL(url)
@@ -245,6 +171,9 @@
if (!hasCorrection)
return null;
+
+ if (!appIntegration.isTypoCorrectionEnabled(window, prefix, domain, suffix))
+ return null;
// Show infobar to inform and ask about correction
let [message, yes, no] = getInfobarTexts();
@@ -264,7 +193,6 @@
callback: function()
{
// No: Add to list of corrections (ignore)
- let {onWhitelistEntryAdded} = require("typoRules");
let entry = oldDomain.replace(/^www\./, "");
Prefs.whitelist[entry] = true;
onWhitelistEntryAdded(entry);
@@ -276,9 +204,9 @@
}
];
// We need to have persistence being set to 1 due to redirect which happens afterwards
- appIntegration.openInfobar(window, "url-fixer-infobar-askafter", message, buttons, 1);
+ appIntegration.openInfobar(window, require("info").addonName + "-infobar-askafter", message, buttons, 1);
- require("survey").incrementCorrectionsCounter();
+ require("typoSurvey").incrementCorrectionsCounter();
return prefix + domain + suffix;
}
@@ -289,7 +217,7 @@
{
// Randomize URI to work around bug 719376
if (!stringBundle)
- stringBundle = Services.strings.createBundle("chrome://url-fixer/locale/typo.properties?" + Math.random());
+ stringBundle = Services.strings.createBundle("chrome://" + require("info").addonName + "/locale/typo.properties?" + Math.random());
let result = [
stringBundle.GetStringFromName("urlfixer.isItCorrect"),
stringBundle.GetStringFromName("urlfixer.yes"),
« no previous file with comments | « lib/typoCollector.js ('k') | lib/typoNetError.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld