Skip to content

Commit 93206e3

Browse files
committed
[mv3] Propagate DNR API errors to "Filter lists" pane
Related issue: uBlockOrigin/uBOL-home#317
1 parent 5d0283d commit 93206e3

File tree

5 files changed

+55
-19
lines changed

5 files changed

+55
-19
lines changed

platform/mv3/extension/css/settings.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ body:not(.committing) #commit-spinner {
9292
body.committing #commit-spinner {
9393
animation: spin 1s steps(8) infinite;
9494
}
95+
#dnrError {
96+
color: var(--info3-ink);
97+
}
98+
#dnrError:empty {
99+
display: none;
100+
}
95101
section[data-pane="rulesets"] > div:first-of-type > p:first-of-type {
96102
margin-top: 0;
97103
}

platform/mv3/extension/dashboard.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
<!-- -------- -->
3232
<div data-pane-related="rulesets">
3333
<p><span id="listsOfBlockedHostsPrompt"></span> <span id="commit-spinner" class="fa-icon">spinner</span></p>
34+
<p id="dnrError"></p>
3435
<p><input id="findInLists" type="search" spellcheck="false" placeholder="findListsPlaceholder" /></p>
3536
</div>
3637
</header>

platform/mv3/extension/js/background.js

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -248,15 +248,18 @@ function onMessage(request, sender, callback) {
248248
switch ( request.what ) {
249249

250250
case 'applyRulesets': {
251-
enableRulesets(request.enabledRulesets).then(( ) => {
252-
rulesetConfig.enabledRulesets = request.enabledRulesets;
253-
return saveRulesetConfig();
254-
}).then(( ) => {
255-
registerInjectables();
256-
callback();
257-
return dnr.getEnabledRulesets();
258-
}).then(enabledRulesets => {
259-
broadcastMessage({ enabledRulesets });
251+
enableRulesets(request.enabledRulesets).then(result => {
252+
if ( result === undefined || result.error ) {
253+
callback(result);
254+
return;
255+
}
256+
rulesetConfig.enabledRulesets = result.enabledRulesets;
257+
return saveRulesetConfig().then(( ) => {
258+
return registerInjectables();
259+
}).then(( ) => {
260+
callback(result);
261+
broadcastMessage({ enabledRulesets: result.enabledRulesets });
262+
});
260263
});
261264
return true;
262265
}
@@ -547,7 +550,7 @@ async function startSession() {
547550
const rulesetsUpdated = await enableRulesets(rulesetConfig.enabledRulesets);
548551

549552
// We need to update the regex rules only when ruleset version changes.
550-
if ( rulesetsUpdated === false ) {
553+
if ( rulesetsUpdated === undefined ) {
551554
if ( isNewVersion ) {
552555
updateDynamicRules();
553556
} else {

platform/mv3/extension/js/filter-lists.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,10 +413,11 @@ const applyEnabledRulesets = (( ) => {
413413
const modified = hashFromIterable(enabledRulesets) !==
414414
hashFromIterable(cachedRulesetData.enabledRulesets);
415415
if ( modified ) {
416-
await sendMessage({
416+
const result = await sendMessage({
417417
what: 'applyRulesets',
418418
enabledRulesets,
419419
});
420+
dom.text('#dnrError', result?.error || '');
420421
}
421422

422423
dom.cl.remove(dom.body, 'committing');

platform/mv3/extension/js/ruleset-manager.js

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,9 @@ async function updateDynamicRules() {
306306
if ( dynamicRegexCount !== 0 ) {
307307
ubolLog(`Using ${dynamicRegexCount}/${dnr.MAX_NUMBER_OF_REGEX_RULES} dynamic regex-based DNR rules`);
308308
}
309+
310+
const response = {};
311+
309312
try {
310313
await dnr.updateDynamicRules({ addRules, removeRuleIds });
311314
if ( removeRuleIds.length !== 0 ) {
@@ -316,8 +319,15 @@ async function updateDynamicRules() {
316319
}
317320
} catch(reason) {
318321
console.error(`updateDynamicRules() / ${reason}`);
322+
response.error = `${reason}`;
319323
}
320-
await updateSessionRules();
324+
325+
const result = await updateSessionRules();
326+
if ( result?.error ) {
327+
response.error ||= result.error;
328+
}
329+
330+
return response;
321331
}
322332

323333
/******************************************************************************/
@@ -452,6 +462,7 @@ async function updateSessionRules() {
452462
if ( sessionRegexCount !== 0 ) {
453463
ubolLog(`Using ${sessionRegexCount}/${dnr.MAX_NUMBER_OF_REGEX_RULES} session regex-based DNR rules`);
454464
}
465+
const response = {};
455466
try {
456467
await dnr.updateSessionRules({ addRules, removeRuleIds });
457468
if ( removeRuleIds.length !== 0 ) {
@@ -462,7 +473,9 @@ async function updateSessionRules() {
462473
}
463474
} catch(reason) {
464475
console.error(`updateSessionRules() / ${reason}`);
476+
response.error = `${reason}`;
465477
}
478+
return response;
466479
}
467480

468481
/******************************************************************************/
@@ -636,9 +649,7 @@ async function enableRulesets(ids) {
636649
disableRulesetSet.delete(id);
637650
}
638651

639-
if ( enableRulesetSet.size === 0 && disableRulesetSet.size === 0 ) {
640-
return false;
641-
}
652+
if ( enableRulesetSet.size === 0 && disableRulesetSet.size === 0 ) { return; }
642653

643654
const enableRulesetIds = Array.from(enableRulesetSet);
644655
const disableRulesetIds = Array.from(disableRulesetSet);
@@ -649,20 +660,34 @@ async function enableRulesets(ids) {
649660
if ( disableRulesetIds.length !== 0 ) {
650661
ubolLog(`Disable ruleset: ${disableRulesetIds}`);
651662
}
652-
await dnr.updateEnabledRulesets({ enableRulesetIds, disableRulesetIds }).catch(reason => {
663+
664+
const response = {};
665+
666+
await dnr.updateEnabledRulesets({
667+
enableRulesetIds,
668+
disableRulesetIds,
669+
}).catch(reason => {
653670
ubolLog(reason);
671+
response.error = `${reason}`;
654672
});
655673

656-
await updateDynamicRules();
674+
const result = await updateDynamicRules();
675+
if ( result?.error ) {
676+
response.error ||= result.error;
677+
}
657678

658-
dnr.getEnabledRulesets().then(enabledRulesets => {
679+
await dnr.getEnabledRulesets().then(enabledRulesets => {
659680
ubolLog(`Enabled rulesets: ${enabledRulesets}`);
681+
response.enabledRulesets = enabledRulesets;
660682
return dnr.getAvailableStaticRuleCount();
661683
}).then(count => {
662684
ubolLog(`Available static rule count: ${count}`);
685+
response.staticRuleCount = count;
686+
}).catch(reason => {
687+
ubolLog(reason);
663688
});
664689

665-
return true;
690+
return response;
666691
}
667692

668693
/******************************************************************************/

0 commit comments

Comments
 (0)