@@ -34,9 +34,7 @@ import {
3434} from './ext.js' ;
3535
3636import {
37- CURRENT_CONFIG_BASE_RULE_ID ,
3837 getRulesetDetails ,
39- getDynamicRules ,
4038 defaultRulesetsFromLanguage ,
4139 enableRulesets ,
4240 getEnabledRulesetsDetails ,
@@ -70,6 +68,7 @@ const rulesetConfig = {
7068const UBOL_ORIGIN = runtime . getURL ( '' ) . replace ( / \/ $ / , '' ) ;
7169
7270let firstRun = false ;
71+ let wakeupRun = false ;
7372
7473/******************************************************************************/
7574
@@ -83,53 +82,23 @@ async function loadRulesetConfig() {
8382 rulesetConfig . version = data . version ;
8483 rulesetConfig . enabledRulesets = data . enabledRulesets ;
8584 rulesetConfig . autoReload = data . autoReload ;
86- return false ;
85+ wakeupRun = true ;
86+ return ;
8787 }
8888 data = await localRead ( 'rulesetConfig' ) ;
8989 if ( data ) {
9090 rulesetConfig . version = data . version ;
9191 rulesetConfig . enabledRulesets = data . enabledRulesets ;
9292 rulesetConfig . autoReload = data . autoReload ;
93- return false ;
94- }
95- data = await loadRulesetConfig . convertLegacyStorage ( ) ;
96- if ( data ) {
97- rulesetConfig . version = data . version ;
98- rulesetConfig . enabledRulesets = data . enabledRulesets ;
99- rulesetConfig . autoReload = data . autoReload ;
100- return false ;
93+ sessionWrite ( 'rulesetConfig' , rulesetConfig ) ;
94+ return ;
10195 }
10296 rulesetConfig . enabledRulesets = await defaultRulesetsFromLanguage ( ) ;
10397 sessionWrite ( 'rulesetConfig' , rulesetConfig ) ;
10498 localWrite ( 'rulesetConfig' , rulesetConfig ) ;
105- return true ;
99+ firstRun = true ;
106100}
107101
108- // TODO: To remove after next stable release is widespread (2023-06-04)
109- loadRulesetConfig . convertLegacyStorage = async function ( ) {
110- const dynamicRuleMap = await getDynamicRules ( ) ;
111- const configRule = dynamicRuleMap . get ( CURRENT_CONFIG_BASE_RULE_ID ) ;
112- if ( configRule === undefined ) { return ; }
113- let rawConfig ;
114- try {
115- rawConfig = JSON . parse ( self . atob ( configRule . condition . urlFilter ) ) ;
116- } catch ( ex ) {
117- return ;
118- }
119- if ( rawConfig === undefined ) { return ; }
120- const config = {
121- version : rawConfig [ 0 ] ,
122- enabledRulesets : rawConfig [ 1 ] ,
123- autoReload : rawConfig [ 2 ] ,
124- } ;
125- localWrite ( 'rulesetConfig' , config ) ;
126- sessionWrite ( 'rulesetConfig' , config ) ;
127- dnr . updateDynamicRules ( {
128- removeRuleIds : [ CURRENT_CONFIG_BASE_RULE_ID ] ,
129- } ) ;
130- return config ;
131- } ;
132-
133102async function saveRulesetConfig ( ) {
134103 sessionWrite ( 'rulesetConfig' , rulesetConfig ) ;
135104 return localWrite ( 'rulesetConfig' , rulesetConfig ) ;
@@ -153,12 +122,13 @@ function hasOmnipotence() {
153122async function onPermissionsRemoved ( ) {
154123 const beforeMode = await getDefaultFilteringMode ( ) ;
155124 const modified = await syncWithBrowserPermissions ( ) ;
156- if ( modified === false ) { return ; }
125+ if ( modified === false ) { return false ; }
157126 const afterMode = await getDefaultFilteringMode ( ) ;
158127 if ( beforeMode > 1 && afterMode <= 1 ) {
159128 updateDynamicRules ( ) ;
160129 }
161130 registerInjectables ( ) ;
131+ return true ;
162132}
163133
164134/******************************************************************************/
@@ -180,6 +150,7 @@ function onMessage(request, sender, callback) {
180150 } ) . catch ( reason => {
181151 console . log ( reason ) ;
182152 } ) ;
153+ callback ( ) ;
183154 return ;
184155 }
185156
@@ -273,8 +244,7 @@ function onMessage(request, sender, callback) {
273244 }
274245
275246 case 'setDefaultFilteringMode' : {
276- getDefaultFilteringMode (
277- ) . then ( beforeLevel =>
247+ getDefaultFilteringMode ( ) . then ( beforeLevel =>
278248 setDefaultFilteringMode ( request . level ) . then ( afterLevel =>
279249 ( { beforeLevel, afterLevel } )
280250 )
@@ -298,37 +268,44 @@ function onMessage(request, sender, callback) {
298268/******************************************************************************/
299269
300270async function start ( ) {
301- firstRun = await loadRulesetConfig ( ) ;
302- await enableRulesets ( rulesetConfig . enabledRulesets ) ;
271+ await loadRulesetConfig ( ) ;
272+
273+ if ( wakeupRun === false ) {
274+ await enableRulesets ( rulesetConfig . enabledRulesets ) ;
275+ }
303276
304277 // We need to update the regex rules only when ruleset version changes.
305- const currentVersion = getCurrentVersion ( ) ;
306- if ( currentVersion !== rulesetConfig . version ) {
307- ubolLog ( `Version change: ${ rulesetConfig . version } => ${ currentVersion } ` ) ;
308- updateDynamicRules ( ) . then ( ( ) => {
309- rulesetConfig . version = currentVersion ;
310- saveRulesetConfig ( ) ;
311- } ) ;
278+ if ( wakeupRun === false ) {
279+ const currentVersion = getCurrentVersion ( ) ;
280+ if ( currentVersion !== rulesetConfig . version ) {
281+ ubolLog ( `Version change: ${ rulesetConfig . version } => ${ currentVersion } ` ) ;
282+ updateDynamicRules ( ) . then ( ( ) => {
283+ rulesetConfig . version = currentVersion ;
284+ saveRulesetConfig ( ) ;
285+ } ) ;
286+ }
312287 }
313288
314289 // Permissions may have been removed while the extension was disabled
315- await onPermissionsRemoved ( ) ;
290+ const permissionsChanged = await onPermissionsRemoved ( ) ;
316291
317292 // Unsure whether the browser remembers correctly registered css/scripts
318293 // after we quit the browser. For now uBOL will check unconditionally at
319294 // launch time whether content css/scripts are properly registered.
320- registerInjectables ( ) ;
295+ if ( wakeupRun === false || permissionsChanged ) {
296+ registerInjectables ( ) ;
321297
322- const enabledRulesets = await dnr . getEnabledRulesets ( ) ;
323- ubolLog ( `Enabled rulesets: ${ enabledRulesets } ` ) ;
298+ const enabledRulesets = await dnr . getEnabledRulesets ( ) ;
299+ ubolLog ( `Enabled rulesets: ${ enabledRulesets } ` ) ;
324300
325- dnr . getAvailableStaticRuleCount ( ) . then ( count => {
326- ubolLog ( `Available static rule count: ${ count } ` ) ;
327- } ) ;
301+ dnr . getAvailableStaticRuleCount ( ) . then ( count => {
302+ ubolLog ( `Available static rule count: ${ count } ` ) ;
303+ } ) ;
304+ }
328305
329306 // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/declarativeNetRequest
330307 // Firefox API does not support `dnr.setExtensionActionOptions`
331- if ( dnr . setExtensionActionOptions ) {
308+ if ( wakeupRun === false && dnr . setExtensionActionOptions ) {
332309 dnr . setExtensionActionOptions ( { displayActionCountAsBadgeText : true } ) ;
333310 }
334311
0 commit comments