| LEFT | RIGHT |
| 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 let {hook} = require("hooks"); | 5 let {hook} = require("hooks"); |
| 6 let {application, addonName} = require("info"); |
| 7 |
| 6 let functionHooks = new WeakMap(); | 8 let functionHooks = new WeakMap(); |
| 7 | 9 |
| 8 exports.removeFromWindow = function(window) | 10 exports.removeFromWindow = function(window) |
| 9 { | 11 { |
| 10 if (functionHooks.has(window)) | 12 if (functionHooks.has(window)) |
| 11 { | 13 { |
| 12 let unhook = functionHooks.get(window); | 14 let unhook = functionHooks.get(window); |
| 13 unhook(); | 15 unhook(); |
| 14 functionHooks.delete(window); | 16 functionHooks.delete(window); |
| 15 } | 17 } |
| 16 }; | 18 }; |
| 17 | 19 |
| 18 let {application} = require("info"); | 20 switch (addonName) |
| 21 { |
| 22 case "url-fixer": |
| 23 { |
| 24 // URL Fixer |
| 25 exports.isTypoCorrectionEnabled = function(window, prefix, domain, suffix) t
rue; |
| 26 |
| 27 break; |
| 28 } |
| 29 case "adblockplus": |
| 30 { |
| 31 // Adblock Plus |
| 32 let {Prefs} = require("prefs"); |
| 33 |
| 34 // Do not ask to opt-in if user found setting |
| 35 if (!Prefs.correctTyposAsked) |
| 36 { |
| 37 let onPrefChange = function(name) |
| 38 { |
| 39 if (name == "correctTypos") |
| 40 { |
| 41 Prefs.correctTyposAsked = true; |
| 42 Prefs.removeListener(onPrefChange); |
| 43 } |
| 44 } |
| 45 |
| 46 Prefs.addListener(onPrefChange); |
| 47 } |
| 48 |
| 49 exports.isTypoCorrectionEnabled = function(window, prefix, domain, suffix) |
| 50 { |
| 51 if (!Prefs.correctTyposAsked && !Prefs.correctTypos) |
| 52 { |
| 53 let {Utils} = require("utils"); |
| 54 let message = Utils.getString("typo_optin_message").replace(/\?1\?/, dom
ain); |
| 55 let yes = Utils.getString("typo_optin_yes"); |
| 56 let no = Utils.getString("typo_optin_no"); |
| 57 let buttons = [ |
| 58 { |
| 59 label: yes, |
| 60 accessKey: null, |
| 61 callback: function() |
| 62 { |
| 63 // Yes: Enable typo correction |
| 64 Prefs.correctTypos = true; |
| 65 exports.loadURI(window, prefix + domain + suffix); |
| 66 Prefs.correctTyposAsked = true; |
| 67 } |
| 68 }, |
| 69 { |
| 70 label: no, |
| 71 accessKey: null, |
| 72 callback: function() |
| 73 { |
| 74 // No: Do nothing |
| 75 Prefs.correctTyposAsked = true; |
| 76 } |
| 77 } |
| 78 ]; |
| 79 // We need to have persistence being set to 1 due to redirect which happ
ens afterwards |
| 80 exports.openInfobar(window, "adblockplus-infobar-correct-typos-ask", mes
sage, buttons, 1); |
| 81 } |
| 82 |
| 83 return Prefs.correctTypos; |
| 84 }; |
| 85 |
| 86 break; |
| 87 } |
| 88 } |
| 89 |
| 19 switch (application) | 90 switch (application) |
| 20 { | 91 { |
| 21 case "firefox": | 92 case "firefox": |
| 22 { | 93 { |
| 23 // Firefox | 94 // Firefox |
| 24 exports.isKnownWindow = function(window) window.document.documentElement.get
Attribute("windowtype") == "navigator:browser"; | 95 exports.isKnownWindow = function(window) window.document.documentElement.get
Attribute("windowtype") == "navigator:browser"; |
| 25 | 96 |
| 26 exports.getURLBar = function(window) "gURLBar" in window ? window.gURLBar :
null; | 97 exports.getURLBar = function(window) "gURLBar" in window ? window.gURLBar :
null; |
| 27 | 98 |
| 28 exports.getBrowser = function(window) "gBrowser" in window ? window.gBrowser
: null; | 99 exports.getBrowser = function(window) "gBrowser" in window ? window.gBrowser
: null; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 46 exports.openInfobar = function(window, id, message, buttons, persistence) | 117 exports.openInfobar = function(window, id, message, buttons, persistence) |
| 47 { | 118 { |
| 48 let browser = exports.getBrowser(window); | 119 let browser = exports.getBrowser(window); |
| 49 let infobar = browser.getNotificationBox(); | 120 let infobar = browser.getNotificationBox(); |
| 50 let notification = infobar.getNotificationWithValue(id); | 121 let notification = infobar.getNotificationWithValue(id); |
| 51 | 122 |
| 52 if (notification) | 123 if (notification) |
| 53 { | 124 { |
| 54 infobar.removeNotification(notification); | 125 infobar.removeNotification(notification); |
| 55 } | 126 } |
| 56 | |
| 57 notification = infobar.appendNotification( | 127 notification = infobar.appendNotification( |
| 58 message, | 128 message, |
| 59 id, | 129 id, |
| 60 require("info").addonRoot + "icon64.png", | 130 "chrome://" + addonName + "/skin/icon16.png", |
| 61 infobar.PRIORITY_INFO_HIGH, | 131 infobar.PRIORITY_INFO_HIGH, |
| 62 buttons | 132 buttons |
| 63 ); | 133 ); |
| 64 notification.persistence = persistence; | 134 notification.persistence = persistence; |
| 65 }; | 135 }; |
| 66 | 136 |
| 67 exports.loadURI = function(window, uri) | 137 exports.loadURI = function(window, uri) |
| 68 { | 138 { |
| 69 exports.getBrowser(window).loadURI(uri); | 139 exports.getBrowser(window).loadURI(uri); |
| 70 }; | 140 }; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 let notification = infobar.getNotificationWithValue(id); | 206 let notification = infobar.getNotificationWithValue(id); |
| 137 | 207 |
| 138 if (notification) | 208 if (notification) |
| 139 { | 209 { |
| 140 infobar.removeNotification(notification); | 210 infobar.removeNotification(notification); |
| 141 } | 211 } |
| 142 | 212 |
| 143 notification = infobar.appendNotification( | 213 notification = infobar.appendNotification( |
| 144 message, | 214 message, |
| 145 id, | 215 id, |
| 146 require("info").addonRoot + "icon64.png", | 216 "chrome://" + addonName + "/skin/icon16.png", |
| 147 infobar.PRIORITY_INFO_HIGH, | 217 infobar.PRIORITY_INFO_HIGH, |
| 148 buttons | 218 buttons |
| 149 ); | 219 ); |
| 150 notification.persistence = persistence; | 220 notification.persistence = persistence; |
| 151 }; | 221 }; |
| 152 | 222 |
| 153 exports.loadURI = function(window, uri) | 223 exports.loadURI = function(window, uri) |
| 154 { | 224 { |
| 155 exports.getBrowser(window).loadURI(uri); | 225 exports.getBrowser(window).loadURI(uri); |
| 156 }; | 226 }; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 let notification = infobar.getNotificationWithValue(id); | 263 let notification = infobar.getNotificationWithValue(id); |
| 194 | 264 |
| 195 if (notification) | 265 if (notification) |
| 196 { | 266 { |
| 197 infobar.removeNotification(notification); | 267 infobar.removeNotification(notification); |
| 198 } | 268 } |
| 199 | 269 |
| 200 notification = infobar.appendNotification( | 270 notification = infobar.appendNotification( |
| 201 message, | 271 message, |
| 202 id, | 272 id, |
| 203 require("info").addonRoot + "icon64.png", | 273 "chrome://" + addonName + "/skin/icon16.png", |
| 204 infobar.PRIORITY_INFO_HIGH, | 274 infobar.PRIORITY_INFO_HIGH, |
| 205 buttons | 275 buttons |
| 206 ); | 276 ); |
| 207 notification.persistence = persistence; | 277 notification.persistence = persistence; |
| 208 } | 278 } |
| 209 }; | 279 }; |
| 210 | 280 |
| 211 exports.loadURI = function(window, uri) | 281 exports.loadURI = function(window, uri) |
| 212 { | 282 { |
| 213 if ("BrowserUI" in window && "goToURI" in window.BrowserUI) | 283 if ("BrowserUI" in window && "goToURI" in window.BrowserUI) |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 functionHooks.set(window, unhook); | 336 functionHooks.set(window, unhook); |
| 267 } | 337 } |
| 268 }; | 338 }; |
| 269 | 339 |
| 270 exports.openInfobar = function(window, id, message, buttons, persistence) | 340 exports.openInfobar = function(window, id, message, buttons, persistence) |
| 271 { | 341 { |
| 272 if ("BrowserApp" in window && "selectedTab" in window.BrowserApp) | 342 if ("BrowserApp" in window && "selectedTab" in window.BrowserApp) |
| 273 { | 343 { |
| 274 window.NativeWindow.doorhanger.show(message, id, buttons, window.Browser
App.selectedTab.id, | 344 window.NativeWindow.doorhanger.show(message, id, buttons, window.Browser
App.selectedTab.id, |
| 275 { | 345 { |
| 276 // No navigation is happening after doorhanger is shown | 346 persistence: persistence |
| 277 // so persistence needs to be reduced by one | |
| 278 persistence: persistence - 1 | |
| 279 } | 347 } |
| 280 ); | 348 ); |
| 281 } | 349 } |
| 282 }; | 350 }; |
| 283 | 351 |
| 284 exports.loadURI = function(window, uri) | 352 exports.loadURI = function(window, uri) |
| 285 { | 353 { |
| 286 if ("BrowserApp" in window && "loadURI" in window.BrowserApp) | 354 if ("BrowserApp" in window && "loadURI" in window.BrowserApp) |
| 287 window.BrowserApp.loadURI(uri); | 355 window.BrowserApp.loadURI(uri); |
| 288 }; | 356 }; |
| 289 | 357 |
| 290 break; | 358 break; |
| 291 } | 359 } |
| 292 default: | 360 default: |
| 293 { | 361 { |
| 294 exports.isKnownWindow = function(window) false; | 362 exports.isKnownWindow = function(window) false; |
| 295 break; | 363 break; |
| 296 } | 364 } |
| 297 } | 365 } |
| LEFT | RIGHT |