Skip to content

Commit cc56504

Browse files
committed
[mv3] Fix potentially residual user styles when previewing custom filters
In preview mode, quickly moving the slider back and forth could cause unwanted injected user stylesheets to be left active in the page, potentially leaving the page with many missing elements. The fix is to ensures previously injected user stylesheets related to preview are removed before injecting new ones.
1 parent 90e8212 commit cc56504

1 file changed

Lines changed: 20 additions & 12 deletions

File tree

platform/mv3/extension/js/scripting/picker.js

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -238,19 +238,26 @@ const excludedSelectors = [
238238
/******************************************************************************/
239239

240240
async function previewSelector(selector) {
241-
if ( selector === previewedSelector ) { return; }
242-
if ( previewedSelector !== '' ) {
243-
if ( previewedSelector.startsWith('{') ) {
241+
previewSelector.promise = previewSelector.promise.then(( ) =>
242+
previewSelector.commit(selector)
243+
);
244+
return previewSelector.promise;
245+
}
246+
247+
previewSelector.commit = async function(selector) {
248+
if ( selector === previewSelector.selector ) { return; }
249+
if ( previewSelector.selector !== '' ) {
250+
if ( previewSelector.selector.startsWith('{') ) {
244251
if ( self.pickerProceduralFilteringAPI ) {
245252
await self.pickerProceduralFilteringAPI.reset();
246253
}
247254
}
248-
if ( previewedCSS !== '' ) {
249-
await ubolOverlay.sendMessage({ what: 'removeCSS', css: previewedCSS });
250-
previewedCSS = '';
255+
if ( previewSelector.css !== '' ) {
256+
await ubolOverlay.sendMessage({ what: 'removeCSS', css: previewSelector.css });
257+
previewSelector.css = '';
251258
}
252259
}
253-
previewedSelector = selector || '';
260+
previewSelector.selector = selector || '';
254261
if ( selector === '' ) { return; }
255262
if ( selector.startsWith('{') ) {
256263
if ( self.ProceduralFiltererAPI === undefined ) { return; }
@@ -265,12 +272,13 @@ async function previewSelector(selector) {
265272
}
266273
return;
267274
}
268-
previewedCSS = `${selector}{display:none!important;}`;
269-
await ubolOverlay.sendMessage({ what: 'insertCSS', css: previewedCSS });
270-
}
275+
previewSelector.css = `${selector}{display:none!important;}`;
276+
await ubolOverlay.sendMessage({ what: 'insertCSS', css: previewSelector.css });
277+
};
271278

272-
let previewedSelector = '';
273-
let previewedCSS = '';
279+
previewSelector.promise = Promise.resolve();
280+
previewSelector.selector = '';
281+
previewSelector.css = '';
274282

275283
/******************************************************************************/
276284

0 commit comments

Comments
 (0)