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-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 |
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 "use strict"; | 18 "use strict"; |
19 | 19 |
20 const {RegExpFilter, | 20 const {RegExpFilter, |
21 WhitelistFilter, | 21 WhitelistFilter, |
22 ElemHideFilter} = require("../adblockpluscore/lib/filterClasses"); | 22 ElemHideFilter} = require("../adblockpluscore/lib/filterClasses"); |
23 const {SpecialSubscription} = | 23 const {SpecialSubscription, Subscription} = |
24 require("../adblockpluscore/lib/subscriptionClasses"); | 24 require("../adblockpluscore/lib/subscriptionClasses"); |
25 const {FilterStorage} = require("../adblockpluscore/lib/filterStorage"); | 25 const {filterStorage} = require("../adblockpluscore/lib/filterStorage"); |
26 const {defaultMatcher} = require("../adblockpluscore/lib/matcher"); | 26 const {defaultMatcher} = require("../adblockpluscore/lib/matcher"); |
27 const {filterNotifier} = require("../adblockpluscore/lib/filterNotifier"); | 27 const {filterNotifier} = require("../adblockpluscore/lib/filterNotifier"); |
28 const {extractHostFromFrame} = require("./url"); | 28 const {extractHostFromFrame} = require("./url"); |
29 const {port} = require("./messaging"); | 29 const {port} = require("./messaging"); |
30 const {HitLogger, nonRequestTypes} = require("./hitLogger"); | 30 const {HitLogger, nonRequestTypes} = require("./hitLogger"); |
31 | 31 |
32 let panels = new Map(); | 32 let panels = new Map(); |
33 | 33 |
34 function isActivePanel(panel) | 34 function isActivePanel(panel) |
35 { | 35 { |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 // previous URL. | 150 // previous URL. |
151 if (panel && panel.reload) | 151 if (panel && panel.reload) |
152 { | 152 { |
153 browser.tabs.reload(tabId, {bypassCache: true}); | 153 browser.tabs.reload(tabId, {bypassCache: true}); |
154 | 154 |
155 panel.reload = false; | 155 panel.reload = false; |
156 panel.reloading = true; | 156 panel.reloading = true; |
157 } | 157 } |
158 } | 158 } |
159 | 159 |
160 function updateFilters(filters, added) | 160 function updateFilters(subscription, filters, added) |
161 { | 161 { |
| 162 let includes = filters instanceof Subscription ? |
| 163 filter => filters.searchFilter(filter) != -1 : |
| 164 filters.includes.bind(filters); |
| 165 |
162 for (let panel of panels.values()) | 166 for (let panel of panels.values()) |
163 { | 167 { |
164 for (let i = 0; i < panel.records.length; i++) | 168 for (let i = 0; i < panel.records.length; i++) |
165 { | 169 { |
166 let record = panel.records[i]; | 170 let record = panel.records[i]; |
167 | 171 |
168 // If an added filter matches a request shown in the devtools panel, | 172 // If an added filter matches a request shown in the devtools panel, |
169 // update that record to show the new filter. Ignore filters that aren't | 173 // update that record to show the new filter. Ignore filters that aren't |
170 // associated with any sub-resource request. There is no record for these | 174 // associated with any sub-resource request. There is no record for these |
171 // if they don't already match. In particular, in case of element hiding | 175 // if they don't already match. In particular, in case of element hiding |
172 // filters, we also wouldn't know if any new element matches. | 176 // filters, we also wouldn't know if any new element matches. |
173 if (added) | 177 if (added) |
174 { | 178 { |
175 if (nonRequestTypes.includes(record.request.type)) | 179 if (nonRequestTypes.includes(record.request.type)) |
176 continue; | 180 continue; |
177 | 181 |
178 let filter = matchRequest(record.request); | 182 let filter = matchRequest(record.request); |
179 if (!filters.includes(filter)) | 183 if (!includes(filter)) |
180 continue; | 184 continue; |
181 | 185 |
182 record.filter = filter; | 186 record.filter = filter; |
183 } | 187 } |
184 | 188 |
185 // If a filter shown in the devtools panel got removed, update that | 189 // If a filter shown in the devtools panel got removed, update that |
186 // record to show the filter that matches now, or none, instead. | 190 // record to show the filter that matches now, or none, instead. |
187 // For filters that aren't associated with any sub-resource request, | 191 // For filters that aren't associated with any sub-resource request, |
188 // just remove the record. We wouldn't know whether another filter | 192 // just remove the record. We wouldn't know whether another filter |
189 // matches instead until the page is reloaded. | 193 // matches instead until the page is reloaded. |
190 else | 194 else |
191 { | 195 { |
192 if (!filters.includes(record.filter)) | 196 if (!includes(record.filter)) |
193 continue; | 197 continue; |
194 | 198 |
195 if (nonRequestTypes.includes(record.request.type)) | 199 if (nonRequestTypes.includes(record.request.type)) |
196 { | 200 { |
197 panel.port.postMessage({ | 201 panel.port.postMessage({ |
198 type: "remove-record", | 202 type: "remove-record", |
199 index: i | 203 index: i |
200 }); | 204 }); |
201 panel.records.splice(i--, 1); | 205 panel.records.splice(i--, 1); |
202 continue; | 206 continue; |
203 } | 207 } |
204 | 208 |
205 record.filter = matchRequest(record.request); | 209 record.filter = matchRequest(record.request); |
206 } | 210 } |
207 | 211 |
208 panel.port.postMessage({ | 212 panel.port.postMessage({ |
209 type: "update-record", | 213 type: "update-record", |
210 index: i, | 214 index: i, |
211 request: record.request, | 215 request: record.request, |
212 filter: getFilterInfo(record.filter) | 216 filter: getFilterInfo(record.filter) |
213 }); | 217 }); |
214 } | 218 } |
215 } | 219 } |
216 } | 220 } |
217 | 221 |
218 function onFilterAdded(filter) | 222 function onFilterAdded(filter) |
219 { | 223 { |
220 updateFilters([filter], true); | 224 updateFilters(null, [filter], true); |
221 } | 225 } |
222 | 226 |
223 function onFilterRemoved(filter) | 227 function onFilterRemoved(filter) |
224 { | 228 { |
225 updateFilters([filter], false); | 229 updateFilters(null, [filter], false); |
226 } | 230 } |
227 | 231 |
228 function onSubscriptionAdded(subscription) | 232 function onSubscriptionAdded(subscription) |
229 { | 233 { |
230 if (subscription instanceof SpecialSubscription) | 234 if (subscription instanceof SpecialSubscription) |
231 updateFilters(subscription.filters, true); | 235 updateFilters(subscription, null, true); |
232 } | 236 } |
233 | 237 |
234 browser.runtime.onConnect.addListener(newPort => | 238 browser.runtime.onConnect.addListener(newPort => |
235 { | 239 { |
236 let match = newPort.name.match(/^devtools-(\d+)$/); | 240 let match = newPort.name.match(/^devtools-(\d+)$/); |
237 if (!match) | 241 if (!match) |
238 return; | 242 return; |
239 | 243 |
240 let inspectedTabId = parseInt(match[1], 10); | 244 let inspectedTabId = parseInt(match[1], 10); |
241 let localOnBeforeRequest = onBeforeRequest.bind(); | 245 let localOnBeforeRequest = onBeforeRequest.bind(); |
(...skipping 28 matching lines...) Expand all Loading... |
270 ext.pages.onLoading.removeListener(onLoading); | 274 ext.pages.onLoading.removeListener(onLoading); |
271 filterNotifier.off("filter.added", onFilterAdded); | 275 filterNotifier.off("filter.added", onFilterAdded); |
272 filterNotifier.off("filter.removed", onFilterRemoved); | 276 filterNotifier.off("filter.removed", onFilterRemoved); |
273 filterNotifier.off("subscription.added", onSubscriptionAdded); | 277 filterNotifier.off("subscription.added", onSubscriptionAdded); |
274 } | 278 } |
275 }); | 279 }); |
276 | 280 |
277 HitLogger.addListener(inspectedTabId, hitListener); | 281 HitLogger.addListener(inspectedTabId, hitListener); |
278 panels.set(inspectedTabId, panel); | 282 panels.set(inspectedTabId, panel); |
279 }); | 283 }); |
OLD | NEW |