Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: lib/requestBlocker.js

Issue 29339020: Issue 3868 - Use the new FilterNotifier API (Closed)
Patch Set: Created March 23, 2016, 8:15 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/icon.js ('k') | lib/stats.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 /** @module requestBlocker */ 18 /** @module requestBlocker */
19 19
20 "use strict"; 20 "use strict";
21 21
22 let {RegExpFilter, BlockingFilter} = require("filterClasses"); 22 let {Filter, RegExpFilter, BlockingFilter} = require("filterClasses");
23 let {Subscription} = require("subscriptionClasses");
23 let {defaultMatcher} = require("matcher"); 24 let {defaultMatcher} = require("matcher");
24 let {FilterNotifier} = require("filterNotifier"); 25 let {FilterNotifier} = require("filterNotifier");
25 let {Prefs} = require("prefs"); 26 let {Prefs} = require("prefs");
26 let {checkWhitelisted, getKey} = require("whitelisting"); 27 let {checkWhitelisted, getKey} = require("whitelisting");
27 let {stringifyURL, extractHostFromFrame, isThirdParty} = require("url"); 28 let {stringifyURL, extractHostFromFrame, isThirdParty} = require("url");
28 let {port} = require("messaging"); 29 let {port} = require("messaging");
29 let devtools = require("devtools"); 30 let devtools = require("devtools");
30 31
31 ext.webRequest.getIndistinguishableTypes().forEach(types => 32 ext.webRequest.getIndistinguishableTypes().forEach(types =>
32 { 33 {
33 for (let i = 1; i < types.length; i++) 34 for (let i = 1; i < types.length; i++)
34 RegExpFilter.typeMap[types[i]] = RegExpFilter.typeMap[types[0]]; 35 RegExpFilter.typeMap[types[i]] = RegExpFilter.typeMap[types[0]];
35 }); 36 });
36 37
37 function onBeforeRequestAsync(page, url, type, docDomain, 38 function onBeforeRequestAsync(page, url, type, docDomain,
38 thirdParty, sitekey, 39 thirdParty, sitekey,
39 specificOnly, filter) 40 specificOnly, filter)
40 { 41 {
41 if (filter) 42 if (filter)
42 FilterNotifier.triggerListeners("filter.hitCount", filter, 0, 0, page); 43 FilterNotifier.emit("filter.hitCount", filter, 0, 0, page);
43 44
44 if (devtools) 45 if (devtools)
45 devtools.logRequest( 46 devtools.logRequest(
46 page, url, type, docDomain, 47 page, url, type, docDomain,
47 thirdParty, sitekey, 48 thirdParty, sitekey,
48 specificOnly, filter 49 specificOnly, filter
49 ); 50 );
50 } 51 }
51 52
52 ext.webRequest.onBeforeRequest.addListener((url, type, page, frame) => 53 ext.webRequest.onBeforeRequest.addListener((url, type, page, frame) =>
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 if (filter.collapse != null) 107 if (filter.collapse != null)
107 return filter.collapse; 108 return filter.collapse;
108 blocked = true; 109 blocked = true;
109 } 110 }
110 } 111 }
111 112
112 return blocked && Prefs.hidePlaceholders; 113 return blocked && Prefs.hidePlaceholders;
113 }); 114 });
114 115
115 let ignoreFilterNotifications = false; 116 let ignoreFilterNotifications = false;
116 FilterNotifier.addListener((action, arg) => 117
118 function onFilterChange(arg, isDisabledAction)
117 { 119 {
118 // Avoid triggering filters.behaviorChanged multiple times 120 // Avoid triggering filters.behaviorChanged multiple times
119 // when multiple filter hanges happen at the same time. 121 // when multiple filter hanges happen at the same time.
120 if (ignoreFilterNotifications) 122 if (ignoreFilterNotifications)
121 return; 123 return;
122 124
123 if (action != "load") 125 // Ignore disabled subscriptions and filters, unless they just got
124 { 126 // disabled, otherwise they have no effect on the handler behavior.
125 let parts = action.split("."); 127 if (arg && arg.disabled && !isDisabledAction)
126 let [category, event] = parts; 128 return;
127 if (category == "subscription")
128 {
129 if (event != "added" &&
130 event != "removed" &&
131 event != "updated" &&
132 event != "disabled")
133 return;
134 129
135 // Ignore empty subscriptions. This includes subscriptions 130 // Ignore empty subscriptions. This includes subscriptions
136 // that have just been added, but not downloaded yet. 131 // that have just been added, but not downloaded yet.
137 if (arg.filters.length == 0) 132 if (arg instanceof Subscription && arg.filters.length == 0)
138 return; 133 return;
139 }
140 else if (category == "filter")
141 {
142 if (event != "added" &&
143 event != "removed" &&
144 event != "disabled")
145 return;
146 134
147 // Ignore all types of filters but request filters, 135 // Ignore all types of filters but request filters,
148 // only these have an effect on the handler behavior. 136 // only these have an effect on the handler behavior.
149 if (!(arg instanceof RegExpFilter)) 137 if (arg instanceof Filter && !(arg instanceof RegExpFilter))
150 return; 138 return;
151 }
152 else
153 return;
154
155 // Ignore disabled subscriptions and filters, unless they just got
156 // disabled, otherwise they have no effect on the handler behavior.
157 if (arg.disabled && event != "disabled")
158 return;
159 }
160 139
161 ignoreFilterNotifications = true; 140 ignoreFilterNotifications = true;
162 setTimeout(() => 141 setTimeout(() =>
163 { 142 {
164 ignoreFilterNotifications = false; 143 ignoreFilterNotifications = false;
165 ext.webRequest.handlerBehaviorChanged(); 144 ext.webRequest.handlerBehaviorChanged();
166 FilterNotifier.triggerListeners("filter.behaviorChanged"); 145 FilterNotifier.emit("filter.behaviorChanged");
167 }); 146 });
168 }); 147 }
148
149 FilterNotifier.on("subscription.added", onFilterChange)
150 FilterNotifier.on("subscription.removed", onFilterChange);
151 FilterNotifier.on("subscription.updated", onFilterChange);
152 FilterNotifier.on("subscription.disabled", arg => onFilterChange(arg, true));
153 FilterNotifier.on("filter.added", onFilterChange);
154 FilterNotifier.on("filter.removed", onFilterChange);
155 FilterNotifier.on("filter.disabled", arg => onFilterChange(arg, true));
156 FilterNotifier.on("load", onFilterChange);
OLDNEW
« no previous file with comments | « lib/icon.js ('k') | lib/stats.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld