Index: lib/typoAppIntegration.js |
=================================================================== |
--- a/lib/typoAppIntegration.js |
+++ b/lib/typoAppIntegration.js |
@@ -16,6 +16,8 @@ |
*/ |
let {hook} = require("hooks"); |
+let {application, addonName} = require("info"); |
+ |
let functionHooks = new WeakMap(); |
exports.removeFromWindow = function(window) |
@@ -28,7 +30,76 @@ |
} |
}; |
-let {application} = require("info"); |
+switch (addonName) |
+{ |
+ case "url-fixer": |
+ { |
+ // URL Fixer |
+ exports.isTypoCorrectionEnabled = function(window, prefix, domain, suffix) true; |
+ |
+ break; |
+ } |
+ case "adblockplus": |
+ { |
+ // Adblock Plus |
+ let {Prefs} = require("prefs"); |
+ |
+ // Do not ask to opt-in if user found setting |
+ if (!Prefs.correctTyposAsked) |
+ { |
+ let onPrefChange = function(name) |
+ { |
+ if (name == "correctTypos") |
+ { |
+ Prefs.correctTyposAsked = true; |
+ Prefs.removeListener(onPrefChange); |
+ } |
+ } |
+ |
+ Prefs.addListener(onPrefChange); |
+ } |
+ |
+ exports.isTypoCorrectionEnabled = function(window, prefix, domain, suffix) |
+ { |
+ if (!Prefs.correctTyposAsked && !Prefs.correctTypos) |
+ { |
+ let {Utils} = require("utils"); |
+ let message = Utils.getString("typo_optin_message").replace(/\?1\?/, domain); |
+ let yes = Utils.getString("typo_optin_yes"); |
+ let no = Utils.getString("typo_optin_no"); |
+ let buttons = [ |
+ { |
+ label: yes, |
+ accessKey: null, |
+ callback: function() |
+ { |
+ // Yes: Enable typo correction |
+ Prefs.correctTypos = true; |
+ exports.loadURI(window, prefix + domain + suffix); |
+ Prefs.correctTyposAsked = true; |
+ } |
+ }, |
+ { |
+ label: no, |
+ accessKey: null, |
+ callback: function() |
+ { |
+ // No: Do nothing |
+ Prefs.correctTyposAsked = true; |
+ } |
+ } |
+ ]; |
+ // We need to have persistence being set to 1 due to redirect which happens afterwards |
+ exports.openInfobar(window, "adblockplus-infobar-correct-typos-ask", message, buttons, 1); |
+ } |
+ |
+ return Prefs.correctTypos; |
+ }; |
+ |
+ break; |
+ } |
+} |
+ |
switch (application) |
{ |
case "firefox": |
@@ -66,11 +137,10 @@ |
{ |
infobar.removeNotification(notification); |
} |
- |
notification = infobar.appendNotification( |
message, |
id, |
- require("info").addonRoot + "icon64.png", |
+ "chrome://" + addonName + "/skin/icon16.png", |
infobar.PRIORITY_INFO_HIGH, |
buttons |
); |
@@ -156,7 +226,7 @@ |
notification = infobar.appendNotification( |
message, |
id, |
- require("info").addonRoot + "icon64.png", |
+ "chrome://" + addonName + "/skin/icon16.png", |
infobar.PRIORITY_INFO_HIGH, |
buttons |
); |
@@ -213,7 +283,7 @@ |
notification = infobar.appendNotification( |
message, |
id, |
- require("info").addonRoot + "icon64.png", |
+ "chrome://" + addonName + "/skin/icon16.png", |
infobar.PRIORITY_INFO_HIGH, |
buttons |
); |
@@ -286,9 +356,7 @@ |
{ |
window.NativeWindow.doorhanger.show(message, id, buttons, window.BrowserApp.selectedTab.id, |
{ |
- // No navigation is happening after doorhanger is shown |
- // so persistence needs to be reduced by one |
- persistence: persistence - 1 |
+ persistence: persistence |
} |
); |
} |