Left: | ||
Right: |
OLD | NEW |
---|---|
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 Eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License |
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 (function(global) | 18 (function(global) |
19 { | 19 { |
20 if (!global.ext) | 20 if (!global.ext) |
21 global.ext = require("ext_background"); | 21 global.ext = require("ext_background"); |
22 | 22 |
23 var port = require("messaging").port; | |
23 var Prefs = require("prefs").Prefs; | 24 var Prefs = require("prefs").Prefs; |
24 var Utils = require("utils").Utils; | 25 var Utils = require("utils").Utils; |
25 var FilterStorage = require("filterStorage").FilterStorage; | 26 var FilterStorage = require("filterStorage").FilterStorage; |
26 var FilterNotifier = require("filterNotifier").FilterNotifier; | 27 var FilterNotifier = require("filterNotifier").FilterNotifier; |
27 var defaultMatcher = require("matcher").defaultMatcher; | 28 var defaultMatcher = require("matcher").defaultMatcher; |
28 var ElemHideEmulation = require("elemHideEmulation").ElemHideEmulation; | 29 var ElemHideEmulation = require("elemHideEmulation").ElemHideEmulation; |
29 var NotificationStorage = require("notification").Notification; | 30 var NotificationStorage = require("notification").Notification; |
30 | 31 |
31 var filterClasses = require("filterClasses"); | 32 var filterClasses = require("filterClasses"); |
32 var Filter = filterClasses.Filter; | 33 var Filter = filterClasses.Filter; |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
150 { | 151 { |
151 var listenerFilters = changeListeners.get(page); | 152 var listenerFilters = changeListeners.get(page); |
152 if (!listenerFilters) | 153 if (!listenerFilters) |
153 { | 154 { |
154 listenerFilters = Object.create(null); | 155 listenerFilters = Object.create(null); |
155 changeListeners.set(page, listenerFilters); | 156 changeListeners.set(page, listenerFilters); |
156 } | 157 } |
157 return listenerFilters; | 158 return listenerFilters; |
158 } | 159 } |
159 | 160 |
160 global.ext.onMessage.addListener(function(message, sender, callback) | 161 port.on("app.get", (message, sender) => |
Sebastian Noack
2017/01/13 12:12:10
I suppose the mock implementation for ext.onMessag
kzar
2017/01/16 04:27:02
Not yet unfortunately, it's still used in a few ot
| |
161 { | 162 { |
162 switch (message.type) | 163 if (message.what == "issues") |
163 { | 164 { |
164 case "app.get": | 165 var subscriptionInit = tryRequire("subscriptionInit"); |
165 if (message.what == "issues") | 166 return { |
167 filterlistsReinitialized: subscriptionInit ? subscriptionInit.reinitiali zed : false, | |
168 legacySafariVersion: (info.platform == "safari" && ( | |
169 Services.vc.compare(info.platformVersion, "6.0") < 0 || // beforel oad breaks websites in Safari 5 | |
170 Services.vc.compare(info.platformVersion, "6.1") == 0 || // extensi ons are broken in 6.1 and 7.0 | |
171 Services.vc.compare(info.platformVersion, "7.0") == 0)) | |
172 }; | |
173 } | |
174 | |
175 if (message.what == "doclink") | |
176 return Utils.getDocLink(message.link); | |
177 | |
178 if (message.what == "localeInfo") | |
179 { | |
180 var bidiDir; | |
181 if ("chromeRegistry" in Utils) | |
182 bidiDir = Utils.chromeRegistry.isLocaleRTL("adblockplus") ? "rtl" : "ltr "; | |
183 else | |
184 bidiDir = ext.i18n.getMessage("@@bidi_dir"); | |
185 | |
186 return {locale: Utils.appLocale, bidiDir: bidiDir}; | |
187 } | |
188 | |
189 if (message.what == "features") | |
190 { | |
191 return { | |
192 devToolsPanel: info.platform == "chromium", | |
193 safariContentBlocker: "safari" in global | |
194 && "extension" in global.safari | |
195 && "setContentBlocker" in global.safari.extension | |
196 }; | |
197 } | |
198 | |
199 return info[message.what]; | |
200 }); | |
201 | |
202 port.on("app.listen", (message, sender) => | |
203 { | |
204 getListenerFilters(sender.page).app = message.filter; | |
205 }); | |
206 | |
207 port.on("app.open", (message, sender) => | |
208 { | |
209 if (message.what == "options") | |
210 ext.showOptions(); | |
211 }); | |
212 | |
213 port.on("filters.add", (message, sender) => | |
214 { | |
215 var result = require("filterValidation").parseFilter(message.text); | |
216 var errors = []; | |
217 if (result.error) | |
218 errors.push(result.error.toString()); | |
219 else if (result.filter) | |
220 FilterStorage.addFilter(result.filter); | |
221 | |
222 return errors; | |
223 }); | |
224 | |
225 port.on("filters.blocked", (message, sender) => | |
226 { | |
227 var filter = defaultMatcher.matchesAny(message.url, | |
228 RegExpFilter.typeMap[message.requestType], message.docDomain, | |
229 message.thirdParty); | |
230 | |
231 return filter instanceof BlockingFilter; | |
232 }); | |
233 | |
234 port.on("filters.get", (message, sender) => | |
235 { | |
236 if (message.what == "elemhideemulation") | |
237 { | |
238 var filters = []; | |
239 var checkWhitelisted = require("whitelisting").checkWhitelisted; | |
240 | |
241 if (Prefs.enabled && !checkWhitelisted(sender.page, sender.frame, | |
242 RegExpFilter.typeMap.DOCUMENT | | |
243 RegExpFilter.typeMap.ELEMHIDE)) | |
244 { | |
245 var hostname = sender.frame.url.hostname; | |
246 filters = ElemHideEmulation.getRulesForDomain(hostname); | |
247 filters = filters.map(function(filter) | |
166 { | 248 { |
167 var subscriptionInit = tryRequire("subscriptionInit"); | 249 return { |
168 callback({ | 250 selector: filter.selector, |
169 filterlistsReinitialized: subscriptionInit ? subscriptionInit.reinit ialized : false, | 251 text: filter.text |
170 legacySafariVersion: (info.platform == "safari" && ( | 252 }; |
171 Services.vc.compare(info.platformVersion, "6.0") < 0 || // bef oreload breaks websites in Safari 5 | 253 }); |
172 Services.vc.compare(info.platformVersion, "6.1") == 0 || // ext ensions are broken in 6.1 and 7.0 | 254 } |
173 Services.vc.compare(info.platformVersion, "7.0") == 0)) | 255 return filters; |
174 }); | 256 } |
175 } | 257 |
176 else if (message.what == "doclink") | 258 var subscription = Subscription.fromURL(message.subscriptionUrl); |
177 callback(Utils.getDocLink(message.link)); | 259 if (!subscription) |
178 else if (message.what == "localeInfo") | 260 return []; |
261 | |
262 return subscription.filters.map(convertFilter); | |
263 }); | |
264 | |
265 port.on("filters.importRaw", (message, sender) => | |
266 { | |
267 var result = require("filterValidation").parseFilters(message.text); | |
268 var errors = []; | |
269 for (var i = 0; i < result.errors.length; i++) | |
270 { | |
271 var error = result.errors[i]; | |
272 if (error.type != "unexpected-filter-list-header") | |
273 errors.push(error.toString()); | |
274 } | |
275 | |
276 if (errors.length > 0) | |
277 return errors; | |
278 | |
279 var seenFilter = Object.create(null); | |
280 for (var i = 0; i < result.filters.length; i++) | |
281 { | |
282 var filter = result.filters[i]; | |
283 FilterStorage.addFilter(filter); | |
284 seenFilter[filter.text] = null; | |
285 } | |
286 | |
287 if (!message.removeExisting) | |
288 return errors; | |
289 | |
290 for (var i = 0; i < FilterStorage.subscriptions.length; i++) | |
291 { | |
292 var subscription = FilterStorage.subscriptions[i]; | |
293 if (!(subscription instanceof SpecialSubscription)) | |
294 continue; | |
295 | |
296 for (var j = subscription.filters.length - 1; j >= 0; j--) | |
297 { | |
298 var filter = subscription.filters[j]; | |
299 if (/^@@\|\|([^\/:]+)\^\$document$/.test(filter.text)) | |
300 continue; | |
301 | |
302 if (!(filter.text in seenFilter)) | |
303 FilterStorage.removeFilter(filter); | |
304 } | |
305 } | |
306 | |
307 return errors; | |
308 }); | |
309 | |
310 port.on("filters.listen", (message, sender) => | |
311 { | |
312 getListenerFilters(sender.page).filter = message.filter; | |
313 addFilterListeners("filter", message.filter); | |
314 }); | |
315 | |
316 port.on("filters.remove", (message, sender) => | |
317 { | |
318 var filter = Filter.fromText(message.text); | |
319 var subscription = null; | |
320 if (message.subscriptionUrl) | |
321 subscription = Subscription.fromURL(message.subscriptionUrl); | |
322 | |
323 if (!subscription) | |
324 FilterStorage.removeFilter(filter); | |
325 else | |
326 FilterStorage.removeFilter(filter, subscription, message.index); | |
327 }); | |
328 | |
329 port.on("prefs.get", (message, sender) => | |
330 { | |
331 return Prefs[message.key]; | |
332 }); | |
333 | |
334 port.on("prefs.listen", (message, sender) => | |
335 { | |
336 getListenerFilters(sender.page).pref = message.filter; | |
337 message.filter.forEach(function(preference) | |
338 { | |
339 if (!(preference in listenedPreferences)) | |
340 { | |
341 listenedPreferences[preference] = null; | |
342 Prefs.on(preference, function() | |
179 { | 343 { |
180 var bidiDir; | 344 sendMessage("pref", preference, Prefs[preference]); |
181 if ("chromeRegistry" in Utils) | |
182 bidiDir = Utils.chromeRegistry.isLocaleRTL("adblockplus") ? "rtl" : "ltr"; | |
183 else | |
184 bidiDir = ext.i18n.getMessage("@@bidi_dir"); | |
185 | |
186 callback({locale: Utils.appLocale, bidiDir: bidiDir}); | |
187 } | |
188 else if (message.what == "features") | |
189 { | |
190 callback({ | |
191 devToolsPanel: info.platform == "chromium", | |
192 safariContentBlocker: "safari" in global | |
193 && "extension" in global.safari | |
194 && "setContentBlocker" in global.safari.extension | |
195 }); | |
196 } | |
197 else | |
198 callback(info[message.what]); | |
199 break; | |
200 case "app.listen": | |
201 getListenerFilters(sender.page).app = message.filter; | |
202 break; | |
203 case "app.open": | |
204 if (message.what == "options") | |
205 ext.showOptions(); | |
206 break; | |
207 case "filters.add": | |
208 var result = require("filterValidation").parseFilter(message.text); | |
209 var errors = []; | |
210 if (result.error) | |
211 errors.push(result.error.toString()); | |
212 else if (result.filter) | |
213 FilterStorage.addFilter(result.filter); | |
214 callback(errors); | |
215 break; | |
216 case "filters.blocked": | |
217 var filter = defaultMatcher.matchesAny(message.url, | |
218 RegExpFilter.typeMap[message.requestType], message.docDomain, | |
219 message.thirdParty); | |
220 callback(filter instanceof BlockingFilter); | |
221 break; | |
222 case "filters.get": | |
223 if (message.what == "elemhideemulation") | |
224 { | |
225 var filters = []; | |
226 var checkWhitelisted = require("whitelisting").checkWhitelisted; | |
227 | |
228 if (Prefs.enabled && !checkWhitelisted(sender.page, sender.frame, | |
229 RegExpFilter.typeMap.DOCUMENT | | |
230 RegExpFilter.typeMap.ELEMHIDE)) | |
231 { | |
232 var hostname = sender.frame.url.hostname; | |
233 filters = ElemHideEmulation.getRulesForDomain(hostname); | |
234 filters = filters.map(function(filter) | |
235 { | |
236 return { | |
237 selector: filter.selector, | |
238 text: filter.text | |
239 }; | |
240 }); | |
241 } | |
242 callback(filters); | |
243 break; | |
244 } | |
245 | |
246 var subscription = Subscription.fromURL(message.subscriptionUrl); | |
247 if (!subscription) | |
248 { | |
249 callback([]); | |
250 break; | |
251 } | |
252 | |
253 callback(subscription.filters.map(convertFilter)); | |
254 break; | |
255 case "filters.importRaw": | |
256 var result = require("filterValidation").parseFilters(message.text); | |
257 var errors = []; | |
258 for (var i = 0; i < result.errors.length; i++) | |
259 { | |
260 var error = result.errors[i]; | |
261 if (error.type != "unexpected-filter-list-header") | |
262 errors.push(error.toString()); | |
263 } | |
264 | |
265 callback(errors); | |
266 if (errors.length > 0) | |
267 return; | |
268 | |
269 var seenFilter = Object.create(null); | |
270 for (var i = 0; i < result.filters.length; i++) | |
271 { | |
272 var filter = result.filters[i]; | |
273 FilterStorage.addFilter(filter); | |
274 seenFilter[filter.text] = null; | |
275 } | |
276 | |
277 if (!message.removeExisting) | |
278 return; | |
279 | |
280 for (var i = 0; i < FilterStorage.subscriptions.length; i++) | |
281 { | |
282 var subscription = FilterStorage.subscriptions[i]; | |
283 if (!(subscription instanceof SpecialSubscription)) | |
284 continue; | |
285 | |
286 for (var j = subscription.filters.length - 1; j >= 0; j--) | |
287 { | |
288 var filter = subscription.filters[j]; | |
289 if (/^@@\|\|([^\/:]+)\^\$document$/.test(filter.text)) | |
290 continue; | |
291 | |
292 if (!(filter.text in seenFilter)) | |
293 FilterStorage.removeFilter(filter); | |
294 } | |
295 } | |
296 break; | |
297 case "filters.listen": | |
298 getListenerFilters(sender.page).filter = message.filter; | |
299 addFilterListeners("filter", message.filter); | |
300 break; | |
301 case "filters.remove": | |
302 var filter = Filter.fromText(message.text); | |
303 var subscription = null; | |
304 if (message.subscriptionUrl) | |
305 subscription = Subscription.fromURL(message.subscriptionUrl); | |
306 | |
307 if (!subscription) | |
308 FilterStorage.removeFilter(filter); | |
309 else | |
310 FilterStorage.removeFilter(filter, subscription, message.index); | |
311 break; | |
312 case "prefs.get": | |
313 callback(Prefs[message.key]); | |
314 break; | |
315 case "prefs.listen": | |
316 getListenerFilters(sender.page).pref = message.filter; | |
317 message.filter.forEach(function(preference) | |
318 { | |
319 if (!(preference in listenedPreferences)) | |
320 { | |
321 listenedPreferences[preference] = null; | |
322 Prefs.on(preference, function() | |
323 { | |
324 sendMessage("pref", preference, Prefs[preference]); | |
325 }); | |
326 } | |
327 }); | 345 }); |
328 break; | 346 } |
329 case "prefs.toggle": | 347 }); |
330 if (message.key == "notifications_ignoredcategories") | 348 }); |
331 NotificationStorage.toggleIgnoreCategory("*"); | 349 |
332 else | 350 port.on("prefs.toggle", (message, sender) => |
333 Prefs[message.key] = !Prefs[message.key]; | 351 { |
334 break; | 352 if (message.key == "notifications_ignoredcategories") |
335 case "subscriptions.add": | 353 NotificationStorage.toggleIgnoreCategory("*"); |
336 var subscription = Subscription.fromURL(message.url); | 354 else |
337 if ("title" in message) | 355 Prefs[message.key] = !Prefs[message.key]; |
338 subscription.title = message.title; | 356 }); |
339 if ("homepage" in message) | 357 |
340 subscription.homepage = message.homepage; | 358 port.on("subscriptions.add", (message, sender) => |
341 | 359 { |
342 if (message.confirm) | 360 var subscription = Subscription.fromURL(message.url); |
343 { | 361 if ("title" in message) |
344 ext.showOptions(function() | 362 subscription.title = message.title; |
345 { | 363 if ("homepage" in message) |
346 sendMessage("app", "addSubscription", subscription); | 364 subscription.homepage = message.homepage; |
347 }); | 365 |
348 } | 366 if (message.confirm) |
349 else | 367 { |
350 { | 368 ext.showOptions(function() |
351 subscription.disabled = false; | 369 { |
352 FilterStorage.addSubscription(subscription); | 370 sendMessage("app", "addSubscription", subscription); |
353 | 371 }); |
354 if (subscription instanceof DownloadableSubscription && !subscription. lastDownload) | 372 } |
355 Synchronizer.execute(subscription); | 373 else |
356 } | 374 { |
357 break; | 375 subscription.disabled = false; |
358 case "subscriptions.get": | 376 FilterStorage.addSubscription(subscription); |
359 var subscriptions = FilterStorage.subscriptions.filter(function(s) | 377 |
360 { | 378 if (subscription instanceof DownloadableSubscription && !subscription.last Download) |
361 if (message.ignoreDisabled && s.disabled) | 379 Synchronizer.execute(subscription); |
362 return false; | 380 } |
363 if (s instanceof DownloadableSubscription && message.downloadable) | 381 }); |
364 return true; | 382 |
365 if (s instanceof SpecialSubscription && message.special) | 383 port.on("subscriptions.get", (message, sender) => |
366 return true; | 384 { |
367 return false; | 385 var subscriptions = FilterStorage.subscriptions.filter(function(s) |
368 }); | 386 { |
369 callback(subscriptions.map(convertSubscription)); | 387 if (message.ignoreDisabled && s.disabled) |
370 break; | 388 return false; |
371 case "subscriptions.listen": | 389 if (s instanceof DownloadableSubscription && message.downloadable) |
372 getListenerFilters(sender.page).subscription = message.filter; | 390 return true; |
373 addFilterListeners("subscription", message.filter); | 391 if (s instanceof SpecialSubscription && message.special) |
374 break; | 392 return true; |
375 case "subscriptions.remove": | 393 return false; |
376 var subscription = Subscription.fromURL(message.url); | 394 }); |
377 if (subscription.url in FilterStorage.knownSubscriptions) | 395 |
378 FilterStorage.removeSubscription(subscription); | 396 return subscriptions.map(convertSubscription); |
379 break; | 397 }); |
380 case "subscriptions.toggle": | 398 |
381 var subscription = Subscription.fromURL(message.url); | 399 port.on("subscriptions.listen", (message, sender) => |
382 if (subscription.url in FilterStorage.knownSubscriptions) | 400 { |
383 { | 401 getListenerFilters(sender.page).subscription = message.filter; |
384 if (subscription.disabled || message.keepInstalled) | 402 addFilterListeners("subscription", message.filter); |
385 subscription.disabled = !subscription.disabled; | 403 }); |
386 else | 404 |
387 FilterStorage.removeSubscription(subscription); | 405 port.on("subscriptions.remove", (message, sender) => |
388 } | 406 { |
389 else | 407 var subscription = Subscription.fromURL(message.url); |
390 { | 408 if (subscription.url in FilterStorage.knownSubscriptions) |
391 subscription.disabled = false; | 409 FilterStorage.removeSubscription(subscription); |
392 subscription.title = message.title; | 410 }); |
393 subscription.homepage = message.homepage; | 411 |
394 FilterStorage.addSubscription(subscription); | 412 port.on("subscriptions.toggle", (message, sender) => |
395 if (!subscription.lastDownload) | 413 { |
396 Synchronizer.execute(subscription); | 414 var subscription = Subscription.fromURL(message.url); |
397 } | 415 if (subscription.url in FilterStorage.knownSubscriptions) |
398 break; | 416 { |
399 case "subscriptions.update": | 417 if (subscription.disabled || message.keepInstalled) |
400 var subscriptions = message.url ? [Subscription.fromURL(message.url)] : | 418 subscription.disabled = !subscription.disabled; |
401 FilterStorage.subscriptions; | 419 else |
402 for (var i = 0; i < subscriptions.length; i++) | 420 FilterStorage.removeSubscription(subscription); |
403 { | 421 } |
404 var subscription = subscriptions[i]; | 422 else |
405 if (subscription instanceof DownloadableSubscription) | 423 { |
406 Synchronizer.execute(subscription, true); | 424 subscription.disabled = false; |
407 } | 425 subscription.title = message.title; |
408 break; | 426 subscription.homepage = message.homepage; |
427 FilterStorage.addSubscription(subscription); | |
428 if (!subscription.lastDownload) | |
429 Synchronizer.execute(subscription); | |
430 } | |
431 }); | |
432 | |
433 port.on("subscriptions.update", (message, sender) => | |
434 { | |
435 var subscriptions = message.url ? [Subscription.fromURL(message.url)] : | |
436 FilterStorage.subscriptions; | |
437 for (var i = 0; i < subscriptions.length; i++) | |
438 { | |
439 var subscription = subscriptions[i]; | |
440 if (subscription instanceof DownloadableSubscription) | |
441 Synchronizer.execute(subscription, true); | |
409 } | 442 } |
410 }); | 443 }); |
411 })(this); | 444 })(this); |
OLD | NEW |