Skip to content

Commit e02ea69

Browse files
committed
Add advanced setting requestStatsDisabled
To disable collating global blocked/allowed counts. Boolean, default to `false`. Setting to `true` will prevent uBO from loading/saving global blocked/allowed counts, and in such case the "Blocked since install" count instead reflects the count since uBO launched. Setting back to `false` will cause the counts to resume from last time they were saved. Related issue: uBlockOrigin/uBlock-issues#3100
1 parent e0971fe commit e02ea69

File tree

2 files changed

+53
-24
lines changed

2 files changed

+53
-24
lines changed

src/js/background.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ const hiddenSettingsDefault = {
8383
popupPanelLockedSections: 0,
8484
popupPanelHeightMode: 0,
8585
requestJournalProcessPeriod: 1000,
86+
requestStatsDisabled: false,
8687
selfieAfter: 2,
8788
strictBlockingBypassDuration: 120,
8889
toolbarWarningTimeout: 60,

src/js/storage.js

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -97,52 +97,80 @@ import {
9797
/******************************************************************************/
9898

9999
{
100-
µb.loadLocalSettings = ( ) => Promise.all([
101-
vAPI.sessionStorage.get('requestStats'),
102-
vAPI.storage.get('requestStats'),
103-
vAPI.storage.get([ 'blockedRequestCount', 'allowedRequestCount' ]),
104-
]).then(([ a, b, c ]) => {
105-
if ( a instanceof Object && a.requestStats ) { return a.requestStats; }
106-
if ( b instanceof Object && b.requestStats ) { return b.requestStats; }
107-
if ( c instanceof Object && Object.keys(c).length === 2 ) {
108-
return {
109-
blockedCount: c.blockedRequestCount,
110-
allowedCount: c.allowedRequestCount,
111-
};
112-
}
113-
return { blockedCount: 0, allowedCount: 0 };
114-
}).then(({ blockedCount, allowedCount }) => {
115-
µb.requestStats.blockedCount += blockedCount;
116-
µb.requestStats.allowedCount += allowedCount;
117-
});
100+
const requestStats = µb.requestStats;
101+
let requestStatsDisabled = false;
102+
103+
µb.loadLocalSettings = async ( ) => {
104+
requestStatsDisabled = µb.hiddenSettings.requestStatsDisabled;
105+
if ( requestStatsDisabled ) { return; }
106+
return Promise.all([
107+
vAPI.sessionStorage.get('requestStats'),
108+
vAPI.storage.get('requestStats'),
109+
vAPI.storage.get([ 'blockedRequestCount', 'allowedRequestCount' ]),
110+
]).then(([ a, b, c ]) => {
111+
if ( a instanceof Object && a.requestStats ) { return a.requestStats; }
112+
if ( b instanceof Object && b.requestStats ) { return b.requestStats; }
113+
if ( c instanceof Object && Object.keys(c).length === 2 ) {
114+
return {
115+
blockedCount: c.blockedRequestCount,
116+
allowedCount: c.allowedRequestCount,
117+
};
118+
}
119+
return { blockedCount: 0, allowedCount: 0 };
120+
}).then(({ blockedCount, allowedCount }) => {
121+
requestStats.blockedCount += blockedCount;
122+
requestStats.allowedCount += allowedCount;
123+
});
124+
};
118125

119126
const SAVE_DELAY_IN_MINUTES = 3.6;
120127
const QUICK_SAVE_DELAY_IN_SECONDS = 23;
121128

129+
const stopTimers = ( ) => {
130+
vAPI.alarms.clear('saveLocalSettings');
131+
quickSaveTimer.off();
132+
saveTimer.off();
133+
};
134+
122135
const saveTimer = vAPI.defer.create(( ) => {
123136
µb.saveLocalSettings();
124137
});
125138

126139
const quickSaveTimer = vAPI.defer.create(( ) => {
140+
if ( vAPI.sessionStorage.unavailable !== true ) {
141+
vAPI.sessionStorage.set({ requestStats: requestStats });
142+
}
143+
if ( requestStatsDisabled ) { return; }
127144
saveTimer.on({ min: SAVE_DELAY_IN_MINUTES });
128-
if ( vAPI.sessionStorage.unavailable ) { return; }
129-
vAPI.sessionStorage.set({ requestStats: µb.requestStats });
130145
vAPI.alarms.createIfNotPresent('saveLocalSettings', {
131146
delayInMinutes: SAVE_DELAY_IN_MINUTES + 0.5
132147
});
133148
});
134149

135150
µb.incrementRequestStats = (blocked, allowed) => {
136-
µb.requestStats.blockedCount += blocked;
137-
µb.requestStats.allowedCount += allowed;
151+
requestStats.blockedCount += blocked;
152+
requestStats.allowedCount += allowed;
138153
quickSaveTimer.on({ sec: QUICK_SAVE_DELAY_IN_SECONDS });
139154
};
140155

141156
µb.saveLocalSettings = ( ) => {
142-
vAPI.alarms.clear('saveLocalSettings');
143-
quickSaveTimer.off(); saveTimer.off();
157+
stopTimers();
158+
if ( requestStatsDisabled ) { return; }
144159
return vAPI.storage.set({ requestStats: µb.requestStats });
145160
};
161+
162+
onBroadcast(msg => {
163+
if ( msg.what !== 'hiddenSettingsChanged' ) { return; }
164+
const newState = µb.hiddenSettings.requestStatsDisabled;
165+
if ( requestStatsDisabled === newState ) { return; }
166+
requestStatsDisabled = newState;
167+
if ( newState ) {
168+
stopTimers();
169+
µb.requestStats.blockedCount = µb.requestStats.allowedCount = 0;
170+
} else {
171+
µb.loadLocalSettings();
172+
}
173+
});
146174
}
147175

148176
/******************************************************************************/

0 commit comments

Comments
 (0)