Left: | ||
Right: |
LEFT | RIGHT |
---|---|
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-present eyeo GmbH | 3 * Copyright (C) 2006-present 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 |
(...skipping 13 matching lines...) Expand all Loading... | |
24 const {ElemHideException} = require("filterClasses"); | 24 const {ElemHideException} = require("filterClasses"); |
25 const {FilterNotifier} = require("filterNotifier"); | 25 const {FilterNotifier} = require("filterNotifier"); |
26 | 26 |
27 /** | 27 /** |
28 * Lookup table, filters by their associated key | 28 * Lookup table, filters by their associated key |
29 * @type {Object} | 29 * @type {Object} |
30 */ | 30 */ |
31 let filterByKey = []; | 31 let filterByKey = []; |
32 | 32 |
33 /** | 33 /** |
34 * Lookup table, keys of the filters by filter text | 34 * Lookup table, keys of the filters by filter |
35 * @type {Map.<string,string>} | 35 * @type {Map.<Filter,string>} |
sergei
2017/09/21 12:02:10
Pay attention that after switching from Object to
kzar
2017/09/22 10:50:15
Yea, it looks like we only used the Filter's text
Wladimir Palant
2017/09/25 10:59:31
Agreed, we should use Filter objects as keys here.
sergei
2017/09/25 13:41:23
Done.
I have checked when the type of key here is
Wladimir Palant
2017/09/25 13:57:16
A change in memory usage would be unexpected, both
| |
36 */ | 36 */ |
37 let keyByFilter = new Map(); | 37 let keyByFilter = new Map(); |
38 | 38 |
39 /** | 39 /** |
40 * Nested lookup table, filter (or false if inactive) by filter key by domain. | 40 * Nested lookup table, filter (or false if inactive) by filter key by domain. |
41 * (Only contains filters that aren't unconditionally matched for all domains.) | 41 * (Only contains filters that aren't unconditionally matched for all domains.) |
42 * @type {Map.<string,Map.<string,(Filter|boolean)>>} | 42 * @type {Map.<string,Map.<string,(Filter|boolean)>>} |
43 */ | 43 */ |
44 let filtersByDomain = new Map(); | 44 let filtersByDomain = new Map(); |
45 | 45 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
136 { | 136 { |
137 this._addToFiltersByDomain(filterKey, filterByKey[filterKey]); | 137 this._addToFiltersByDomain(filterKey, filterByKey[filterKey]); |
138 delete filterKeyBySelector[selector]; | 138 delete filterKeyBySelector[selector]; |
139 unconditionalSelectors = unconditionalFilterKeys = null; | 139 unconditionalSelectors = unconditionalFilterKeys = null; |
140 } | 140 } |
141 | 141 |
142 knownExceptions[filter.text] = true; | 142 knownExceptions[filter.text] = true; |
143 } | 143 } |
144 else | 144 else |
145 { | 145 { |
146 if (keyByFilter.has(filter.text)) | 146 if (keyByFilter.has(filter)) |
147 return; | 147 return; |
148 | 148 |
149 let key = filterByKey.push(filter) - 1; | 149 let key = filterByKey.push(filter) - 1; |
150 keyByFilter.set(filter.text, key); | 150 keyByFilter.set(filter, key); |
151 | 151 |
152 if (!(filter.domains || filter.selector in exceptions)) | 152 if (!(filter.domains || filter.selector in exceptions)) |
153 { | 153 { |
154 // The new filter's selector is unconditionally applied to all domains | 154 // The new filter's selector is unconditionally applied to all domains |
155 filterKeyBySelector[filter.selector] = key; | 155 filterKeyBySelector[filter.selector] = key; |
156 unconditionalSelectors = unconditionalFilterKeys = null; | 156 unconditionalSelectors = unconditionalFilterKeys = null; |
157 } | 157 } |
158 else | 158 else |
159 { | 159 { |
160 // The new filter's selector only applies to some domains | 160 // The new filter's selector only applies to some domains |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
197 return; | 197 return; |
198 | 198 |
199 let list = exceptions[filter.selector]; | 199 let list = exceptions[filter.selector]; |
200 let index = list.indexOf(filter); | 200 let index = list.indexOf(filter); |
201 if (index >= 0) | 201 if (index >= 0) |
202 list.splice(index, 1); | 202 list.splice(index, 1); |
203 delete knownExceptions[filter.text]; | 203 delete knownExceptions[filter.text]; |
204 } | 204 } |
205 else | 205 else |
206 { | 206 { |
207 let key = keyByFilter.get(filter.text); | 207 let key = keyByFilter.get(filter); |
208 if (typeof key == "undefined") | 208 if (typeof key == "undefined") |
209 return; | 209 return; |
210 | 210 |
211 delete filterByKey[key]; | 211 delete filterByKey[key]; |
212 keyByFilter.delete(filter.text); | 212 keyByFilter.delete(filter); |
213 this._removeFilterKey(key, filter); | 213 this._removeFilterKey(key, filter); |
214 } | 214 } |
215 | 215 |
216 FilterNotifier.emit("elemhideupdate"); | 216 FilterNotifier.emit("elemhideupdate"); |
217 }, | 217 }, |
218 | 218 |
219 /** | 219 /** |
220 * Checks whether an exception rule is registered for a filter on a particular | 220 * Checks whether an exception rule is registered for a filter on a particular |
221 * domain. | 221 * domain. |
222 * @param {Filter} filter | 222 * @param {Filter} filter |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
381 | 381 |
382 let nextDot = currentDomain.indexOf("."); | 382 let nextDot = currentDomain.indexOf("."); |
383 currentDomain = nextDot == -1 ? "" : currentDomain.substr(nextDot + 1); | 383 currentDomain = nextDot == -1 ? "" : currentDomain.substr(nextDot + 1); |
384 } | 384 } |
385 | 385 |
386 if (provideFilterKeys) | 386 if (provideFilterKeys) |
387 return [selectors, filterKeys]; | 387 return [selectors, filterKeys]; |
388 return selectors; | 388 return selectors; |
389 } | 389 } |
390 }; | 390 }; |
LEFT | RIGHT |