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

Side by Side Diff: lib/filterStorage.js

Issue 29800557: Issue 6559 - Use Map object for known subscriptions (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore/
Patch Set: Avoid lookup for disabled subscriptions Created June 6, 2018, 10:57 a.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/filterListener.js ('k') | lib/subscriptionClasses.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-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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 fileProperties: Object.create(null), 79 fileProperties: Object.create(null),
80 80
81 /** 81 /**
82 * List of filter subscriptions containing all filters 82 * List of filter subscriptions containing all filters
83 * @type {Subscription[]} 83 * @type {Subscription[]}
84 */ 84 */
85 subscriptions: [], 85 subscriptions: [],
86 86
87 /** 87 /**
88 * Map of subscriptions already on the list, by their URL/identifier 88 * Map of subscriptions already on the list, by their URL/identifier
89 * @type {Object} 89 * @type {Map.<string,Subscription>}
90 */ 90 */
91 knownSubscriptions: Object.create(null), 91 knownSubscriptions: new Map(),
92 92
93 /** 93 /**
94 * Finds the filter group that a filter should be added to by default. Will 94 * Finds the filter group that a filter should be added to by default. Will
95 * return null if this group doesn't exist yet. 95 * return null if this group doesn't exist yet.
96 * @param {Filter} filter 96 * @param {Filter} filter
97 * @return {?SpecialSubscription} 97 * @return {?SpecialSubscription}
98 */ 98 */
99 getGroupForFilter(filter) 99 getGroupForFilter(filter)
100 { 100 {
101 let generalSubscription = null; 101 let generalSubscription = null;
(...skipping 15 matching lines...) Expand all
117 } 117 }
118 return generalSubscription; 118 return generalSubscription;
119 }, 119 },
120 120
121 /** 121 /**
122 * Adds a filter subscription to the list 122 * Adds a filter subscription to the list
123 * @param {Subscription} subscription filter subscription to be added 123 * @param {Subscription} subscription filter subscription to be added
124 */ 124 */
125 addSubscription(subscription) 125 addSubscription(subscription)
126 { 126 {
127 if (subscription.url in FilterStorage.knownSubscriptions) 127 if (FilterStorage.knownSubscriptions.has(subscription.url))
128 return; 128 return;
129 129
130 FilterStorage.subscriptions.push(subscription); 130 FilterStorage.subscriptions.push(subscription);
131 FilterStorage.knownSubscriptions[subscription.url] = subscription; 131 FilterStorage.knownSubscriptions.set(subscription.url, subscription);
132 addSubscriptionFilters(subscription); 132 addSubscriptionFilters(subscription);
133 133
134 FilterNotifier.triggerListeners("subscription.added", subscription); 134 FilterNotifier.triggerListeners("subscription.added", subscription);
135 }, 135 },
136 136
137 /** 137 /**
138 * Removes a filter subscription from the list 138 * Removes a filter subscription from the list
139 * @param {Subscription} subscription filter subscription to be removed 139 * @param {Subscription} subscription filter subscription to be removed
140 */ 140 */
141 removeSubscription(subscription) 141 removeSubscription(subscription)
142 { 142 {
143 for (let i = 0; i < FilterStorage.subscriptions.length; i++) 143 for (let i = 0; i < FilterStorage.subscriptions.length; i++)
144 { 144 {
145 if (FilterStorage.subscriptions[i].url == subscription.url) 145 if (FilterStorage.subscriptions[i].url == subscription.url)
146 { 146 {
147 removeSubscriptionFilters(subscription); 147 removeSubscriptionFilters(subscription);
148 148
149 FilterStorage.subscriptions.splice(i--, 1); 149 FilterStorage.subscriptions.splice(i--, 1);
150 delete FilterStorage.knownSubscriptions[subscription.url]; 150 FilterStorage.knownSubscriptions.delete(subscription.url);
151 FilterNotifier.triggerListeners("subscription.removed", subscription); 151 FilterNotifier.triggerListeners("subscription.removed", subscription);
152 return; 152 return;
153 } 153 }
154 } 154 }
155 }, 155 },
156 156
157 /** 157 /**
158 * Moves a subscription in the list to a new position. 158 * Moves a subscription in the list to a new position.
159 * @param {Subscription} subscription filter subscription to be moved 159 * @param {Subscription} subscription filter subscription to be moved
160 * @param {Subscription} [insertBefore] filter subscription to insert before 160 * @param {Subscription} [insertBefore] filter subscription to insert before
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 * forgetting this callback. 361 * forgetting this callback.
362 */ 362 */
363 importData(silent) 363 importData(silent)
364 { 364 {
365 let parser = new INIParser(); 365 let parser = new INIParser();
366 return line => 366 return line =>
367 { 367 {
368 parser.process(line); 368 parser.process(line);
369 if (line === null) 369 if (line === null)
370 { 370 {
371 let knownSubscriptions = Object.create(null); 371 let knownSubscriptions = new Map();
372 for (let subscription of parser.subscriptions) 372 for (let subscription of parser.subscriptions)
373 knownSubscriptions[subscription.url] = subscription; 373 knownSubscriptions.set(subscription.url, subscription);
374 374
375 this.fileProperties = parser.fileProperties; 375 this.fileProperties = parser.fileProperties;
376 this.subscriptions = parser.subscriptions; 376 this.subscriptions = parser.subscriptions;
377 this.knownSubscriptions = knownSubscriptions; 377 this.knownSubscriptions = knownSubscriptions;
378 Filter.knownFilters = parser.knownFilters; 378 Filter.knownFilters = parser.knownFilters;
379 Subscription.knownSubscriptions = parser.knownSubscriptions; 379 Subscription.knownSubscriptions = parser.knownSubscriptions;
380 380
381 if (!silent) 381 if (!silent)
382 FilterNotifier.triggerListeners("load"); 382 FilterNotifier.triggerListeners("load");
383 } 383 }
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 } 651 }
652 }; 652 };
653 653
654 /** 654 /**
655 * Joins subscription's filters to the subscription without any notifications. 655 * Joins subscription's filters to the subscription without any notifications.
656 * @param {Subscription} subscription 656 * @param {Subscription} subscription
657 * filter subscription that should be connected to its filters 657 * filter subscription that should be connected to its filters
658 */ 658 */
659 function addSubscriptionFilters(subscription) 659 function addSubscriptionFilters(subscription)
660 { 660 {
661 if (!(subscription.url in FilterStorage.knownSubscriptions)) 661 if (!FilterStorage.knownSubscriptions.has(subscription.url))
662 return; 662 return;
663 663
664 for (let filter of subscription.filters) 664 for (let filter of subscription.filters)
665 filter.subscriptions.push(subscription); 665 filter.subscriptions.push(subscription);
666 } 666 }
667 667
668 /** 668 /**
669 * Removes subscription's filters from the subscription without any 669 * Removes subscription's filters from the subscription without any
670 * notifications. 670 * notifications.
671 * @param {Subscription} subscription filter subscription to be removed 671 * @param {Subscription} subscription filter subscription to be removed
672 */ 672 */
673 function removeSubscriptionFilters(subscription) 673 function removeSubscriptionFilters(subscription)
674 { 674 {
675 if (!(subscription.url in FilterStorage.knownSubscriptions)) 675 if (!FilterStorage.knownSubscriptions.has(subscription.url))
676 return; 676 return;
677 677
678 for (let filter of subscription.filters) 678 for (let filter of subscription.filters)
679 { 679 {
680 let i = filter.subscriptions.indexOf(subscription); 680 let i = filter.subscriptions.indexOf(subscription);
681 if (i >= 0) 681 if (i >= 0)
682 filter.subscriptions.splice(i, 1); 682 filter.subscriptions.splice(i, 1);
683 } 683 }
684 } 684 }
685 685
686 /** 686 /**
687 * Listener returned by FilterStorage.importData(), parses filter data. 687 * Listener returned by FilterStorage.importData(), parses filter data.
688 * @constructor 688 * @constructor
689 */ 689 */
690 function INIParser() 690 function INIParser()
691 { 691 {
692 this.fileProperties = this.curObj = {}; 692 this.fileProperties = this.curObj = {};
693 this.subscriptions = []; 693 this.subscriptions = [];
694 this.knownFilters = new Map(); 694 this.knownFilters = new Map();
695 this.knownSubscriptions = Object.create(null); 695 this.knownSubscriptions = new Map();
696 } 696 }
697 INIParser.prototype = 697 INIParser.prototype =
698 { 698 {
699 linesProcessed: 0, 699 linesProcessed: 0,
700 subscriptions: null, 700 subscriptions: null,
701 knownFilters: null, 701 knownFilters: null,
702 knownSubscriptions: null, 702 knownSubscriptions: null,
703 wantObj: true, 703 wantObj: true,
704 fileProperties: null, 704 fileProperties: null,
705 curObj: null, 705 curObj: null,
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 else if (this.wantObj === false && val) 773 else if (this.wantObj === false && val)
774 this.curObj.push(val.replace(/\\\[/g, "[")); 774 this.curObj.push(val.replace(/\\\[/g, "["));
775 } 775 }
776 finally 776 finally
777 { 777 {
778 Filter.knownFilters = origKnownFilters; 778 Filter.knownFilters = origKnownFilters;
779 Subscription.knownSubscriptions = origKnownSubscriptions; 779 Subscription.knownSubscriptions = origKnownSubscriptions;
780 } 780 }
781 } 781 }
782 }; 782 };
OLDNEW
« no previous file with comments | « lib/filterListener.js ('k') | lib/subscriptionClasses.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld