Skip to content

Commit 19ebbe7

Browse files
committed
[mv3][safari] Fix custom cosmetic filtering when pages load from "Preload Top Hit"
Related issue: uBlockOrigin/uBOL-home#655
1 parent 532f897 commit 19ebbe7

1 file changed

Lines changed: 47 additions & 33 deletions

File tree

platform/mv3/safari/css-user.js

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -23,45 +23,59 @@
2323

2424
/******************************************************************************/
2525

26-
const docURL = new URL(document.baseURI);
27-
const details = await chrome.runtime.sendMessage({
28-
what: 'injectCustomFilters',
29-
hostname: docURL.hostname,
30-
}).catch(( ) => {
31-
});
32-
33-
if ( details?.proceduralSelectors?.length ) {
34-
if ( self.ProceduralFiltererAPI === undefined ) {
35-
self.ProceduralFiltererAPI = chrome.runtime.sendMessage({
36-
what: 'injectCSSProceduralAPI'
37-
}).catch(( ) => {
38-
});
39-
}
40-
await self.ProceduralFiltererAPI;
41-
self.customProceduralFiltererAPI = new self.ProceduralFiltererAPI();
42-
const selectors = details.proceduralSelectors.map(a => JSON.parse(a));
43-
const declaratives = selectors.filter(a => a.cssable);
44-
if ( declaratives.length !== 0 ) {
45-
self.customProceduralFiltererAPI.addDeclaratives(declaratives);
26+
async function uBOL_cssUserActivate() {
27+
if ( self.customFilters ) { return; }
28+
29+
const docURL = new URL(document.baseURI);
30+
31+
const details = await chrome.runtime.sendMessage({
32+
what: 'injectCustomFilters',
33+
hostname: docURL.hostname,
34+
}).catch(( ) => {
35+
});
36+
self.customFilters = details;
37+
if ( Boolean(details) === false ) { return; }
38+
39+
if ( details?.proceduralSelectors?.length ) {
40+
if ( self.ProceduralFiltererAPI === undefined ) {
41+
self.ProceduralFiltererAPI = chrome.runtime.sendMessage({
42+
what: 'injectCSSProceduralAPI'
43+
}).catch(( ) => {
44+
});
45+
}
46+
await self.ProceduralFiltererAPI;
47+
self.customProceduralFiltererAPI = new self.ProceduralFiltererAPI();
48+
const selectors = details.proceduralSelectors.map(a => JSON.parse(a));
49+
const declaratives = selectors.filter(a => a.cssable);
50+
if ( declaratives.length !== 0 ) {
51+
self.customProceduralFiltererAPI.addDeclaratives(declaratives);
52+
}
53+
const procedurals = selectors.filter(a => !a.cssable);
54+
if ( procedurals.length !== 0 ) {
55+
self.customProceduralFiltererAPI.addProcedurals(procedurals);
56+
}
4657
}
47-
const procedurals = selectors.filter(a => !a.cssable);
48-
if ( procedurals.length !== 0 ) {
49-
self.customProceduralFiltererAPI.addProcedurals(procedurals);
58+
59+
if ( details?.plainSelectors?.length ) {
60+
const selectors = details.plainSelectors;
61+
self.cssAPI.insert(`${selectors.join(',\n')}{display:none!important;}`);
5062
}
5163
}
5264

53-
if ( details?.plainSelectors?.length ) {
54-
const selectors = details.plainSelectors;
55-
self.addEventListener('pagereveal', ( ) => {
56-
chrome.runtime.sendMessage({
57-
what: 'insertCSS',
58-
css: `${selectors.join(',\n')}{display:none!important;}`,
59-
}).catch(( ) => {
60-
});
61-
});
65+
async function uBOL_cssUserStart() {
66+
if ( self.cssUserPendingOp === undefined ) {
67+
self.cssUserPendingOp = Promise.resolve();
68+
}
69+
self.cssUserPendingOp = self.cssUserPendingOp.then(uBOL_cssUserActivate);
70+
await self.cssUserPendingOp;
71+
if ( Boolean(self.customFilters) === false ) { return; }
72+
self.removeEventListener('pagereveal', uBOL_cssUserStart);
6273
}
6374

64-
self.customFilters = details;
75+
await uBOL_cssUserStart();
76+
77+
if ( self.customFilters ) { return; }
78+
self.addEventListener('pagereveal', uBOL_cssUserStart);
6579

6680
/******************************************************************************/
6781

0 commit comments

Comments
 (0)