mirror of
https://github.com/gorhill/uBlock.git
synced 2026-03-11 09:04:36 +00:00
[mv3] Add access to troubleshooting info in About pane
This commit is contained in:
parent
27936f476e
commit
9bcfc8ff1c
5 changed files with 138 additions and 107 deletions
|
|
@ -140,6 +140,10 @@
|
|||
<div class="li"><span><a href="https://flagpedia.net/" target="_blank">Flags of the World</a> by <a href="https://www.davidkrmela.com/">David Krmela</a></span></div>
|
||||
<div class="li"><span><a href="https://codemirror.net/" target="_blank">CodeMirror 6</a> by <a href="https://github.com/marijnh">Marijn Haverbeke</a></span></div>
|
||||
</div>
|
||||
<hr>
|
||||
<details><summary data-i18n="supportS5H"></summary>
|
||||
<pre style="user-select: all; -webkit-user-select: all;"></pre>
|
||||
</details>
|
||||
</div>
|
||||
</section>
|
||||
<!-- -------- -->
|
||||
|
|
|
|||
|
|
@ -19,13 +19,14 @@
|
|||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
import { dom, qs$ } from './dom.js';
|
||||
import {
|
||||
localRead,
|
||||
localRemove,
|
||||
localWrite,
|
||||
} from './ext.js';
|
||||
|
||||
import { dom } from './dom.js';
|
||||
import { getTroubleshootingInfo } from './troubleshooting.js';
|
||||
import { runtime } from './ext.js';
|
||||
|
||||
/******************************************************************************/
|
||||
|
|
@ -52,6 +53,10 @@ localRead('dashboard.activePane').then(pane => {
|
|||
dom.body.dataset.pane = pane;
|
||||
});
|
||||
|
||||
getTroubleshootingInfo().then(config => {
|
||||
qs$('[data-i18n="supportS5H"] + pre').textContent = config;
|
||||
});
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
export function hashFromIterable(iter) {
|
||||
|
|
|
|||
|
|
@ -19,18 +19,9 @@
|
|||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
import {
|
||||
dom,
|
||||
qs$,
|
||||
} from './dom.js';
|
||||
|
||||
import {
|
||||
localRead,
|
||||
runtime,
|
||||
sendMessage,
|
||||
} from './ext.js';
|
||||
|
||||
import { dnr } from './ext-compat.js';
|
||||
import { dom, qs$ } from './dom.js';
|
||||
import { getTroubleshootingInfo } from './troubleshooting.js';
|
||||
import { sendMessage } from './ext.js';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
|
@ -74,98 +65,6 @@ function reportSpecificFilterType() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
function renderData(data, depth = 0) {
|
||||
const indent = ' '.repeat(depth);
|
||||
if ( Array.isArray(data) ) {
|
||||
const out = [];
|
||||
for ( const value of data ) {
|
||||
out.push(renderData(value, depth));
|
||||
}
|
||||
return out.join('\n');
|
||||
}
|
||||
if ( typeof data !== 'object' || data === null ) {
|
||||
return `${indent}${data}`;
|
||||
}
|
||||
const out = [];
|
||||
for ( const [ name, value ] of Object.entries(data) ) {
|
||||
if ( typeof value === 'object' && value !== null ) {
|
||||
out.push(`${indent}${name}:`);
|
||||
out.push(renderData(value, depth + 1));
|
||||
continue;
|
||||
}
|
||||
out.push(`${indent}${name}: ${value}`);
|
||||
}
|
||||
return out.join('\n');
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
async function getConfigData() {
|
||||
const manifest = runtime.getManifest();
|
||||
const [
|
||||
platformInfo,
|
||||
rulesets,
|
||||
defaultMode,
|
||||
userRules,
|
||||
registerContentScriptsReason,
|
||||
unregisterContentScriptsReason,
|
||||
] = await Promise.all([
|
||||
runtime.getPlatformInfo(),
|
||||
dnr.getEnabledRulesets(),
|
||||
sendMessage({ what: 'getDefaultFilteringMode' }),
|
||||
sendMessage({ what: 'getEffectiveUserRules' }),
|
||||
localRead('$scripting.registerContentScripts'),
|
||||
localRead('$scripting.unregisterContentScripts'),
|
||||
]);
|
||||
const browser = (( ) => {
|
||||
const extURL = runtime.getURL('');
|
||||
let agent = '';
|
||||
if ( extURL.startsWith('moz-extension:') ) {
|
||||
agent = 'Firefox';
|
||||
} else if ( extURL.startsWith('safari-web-extension:') ) {
|
||||
agent = 'Safari';
|
||||
} else if ( /\bEdg\/\b/.test(navigator.userAgent) ) {
|
||||
agent = 'Edge';
|
||||
} else {
|
||||
agent = 'Chrome';
|
||||
}
|
||||
dom.cl.add('html', agent.toLowerCase());
|
||||
if ( /\bMobile\b/.test(navigator.userAgent) ) {
|
||||
agent += ' Mobile';
|
||||
}
|
||||
const reVersion = new RegExp(`\\b${agent.slice(0,3)}[^/]*/(\\d+)`);
|
||||
const match = reVersion.exec(navigator.userAgent);
|
||||
if ( match ) {
|
||||
agent += ` ${match[1]}`;
|
||||
}
|
||||
agent += ` (${platformInfo.os})`
|
||||
return agent;
|
||||
})();
|
||||
const modes = [ 'no filtering', 'basic', 'optimal', 'complete' ];
|
||||
const config = {
|
||||
name: manifest.name,
|
||||
version: manifest.version,
|
||||
browser,
|
||||
filtering: {
|
||||
'site': `${modes[reportedPage.mode]}`,
|
||||
'default': `${modes[defaultMode]}`,
|
||||
},
|
||||
};
|
||||
if ( userRules.length !== 0 ) {
|
||||
config['user rules'] = userRules.length;
|
||||
}
|
||||
config.rulesets = rulesets;
|
||||
if ( registerContentScriptsReason !== undefined ) {
|
||||
config.registerContentScripts = registerContentScriptsReason;
|
||||
}
|
||||
if ( unregisterContentScriptsReason !== undefined ) {
|
||||
config.unregisterContentScripts = unregisterContentScriptsReason;
|
||||
}
|
||||
return renderData(config);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
async function reportSpecificFilterIssue() {
|
||||
const githubURL = new URL(
|
||||
'https://github.com/uBlockOrigin/uAssets/issues/new?template=specific_report_from_ubol.yml'
|
||||
|
|
@ -194,7 +93,7 @@ async function reportSpecificFilterIssue() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
getConfigData().then(config => {
|
||||
getTroubleshootingInfo(reportedPage.mode).then(config => {
|
||||
qs$('[data-i18n="supportS5H"] + pre').textContent = config;
|
||||
|
||||
dom.on('[data-url]', 'click', ev => {
|
||||
|
|
|
|||
123
platform/mv3/extension/js/troubleshooting.js
Normal file
123
platform/mv3/extension/js/troubleshooting.js
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a comprehensive, efficient content blocker
|
||||
Copyright (C) 2024-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
import {
|
||||
localRead,
|
||||
runtime,
|
||||
sendMessage,
|
||||
} from './ext.js';
|
||||
|
||||
import { dnr } from './ext-compat.js';
|
||||
import { dom } from './dom.js';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
function renderData(data, depth = 0) {
|
||||
const indent = ' '.repeat(depth);
|
||||
if ( Array.isArray(data) ) {
|
||||
const out = [];
|
||||
for ( const value of data ) {
|
||||
out.push(renderData(value, depth));
|
||||
}
|
||||
return out.join('\n');
|
||||
}
|
||||
if ( typeof data !== 'object' || data === null ) {
|
||||
return `${indent}${data}`;
|
||||
}
|
||||
const out = [];
|
||||
for ( const [ name, value ] of Object.entries(data) ) {
|
||||
if ( typeof value === 'object' && value !== null ) {
|
||||
out.push(`${indent}${name}:`);
|
||||
out.push(renderData(value, depth + 1));
|
||||
continue;
|
||||
}
|
||||
out.push(`${indent}${name}: ${value}`);
|
||||
}
|
||||
return out.join('\n');
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
export async function getTroubleshootingInfo(siteMode) {
|
||||
const manifest = runtime.getManifest();
|
||||
const [
|
||||
platformInfo,
|
||||
rulesets,
|
||||
defaultMode,
|
||||
userRules,
|
||||
registerContentScriptsReason,
|
||||
unregisterContentScriptsReason,
|
||||
] = await Promise.all([
|
||||
runtime.getPlatformInfo(),
|
||||
dnr.getEnabledRulesets(),
|
||||
sendMessage({ what: 'getDefaultFilteringMode' }),
|
||||
sendMessage({ what: 'getEffectiveUserRules' }),
|
||||
localRead('$scripting.registerContentScripts'),
|
||||
localRead('$scripting.unregisterContentScripts'),
|
||||
]);
|
||||
const browser = (( ) => {
|
||||
const extURL = runtime.getURL('');
|
||||
let agent = '';
|
||||
if ( extURL.startsWith('moz-extension:') ) {
|
||||
agent = 'Firefox';
|
||||
} else if ( extURL.startsWith('safari-web-extension:') ) {
|
||||
agent = 'Safari';
|
||||
} else if ( /\bEdg\/\b/.test(navigator.userAgent) ) {
|
||||
agent = 'Edge';
|
||||
} else {
|
||||
agent = 'Chrome';
|
||||
}
|
||||
dom.cl.add('html', agent.toLowerCase());
|
||||
if ( /\bMobile\b/.test(navigator.userAgent) ) {
|
||||
agent += ' Mobile';
|
||||
}
|
||||
const reVersion = new RegExp(`\\b${agent.slice(0,3)}[^/]*/(\\d+)`);
|
||||
const match = reVersion.exec(navigator.userAgent);
|
||||
if ( match ) {
|
||||
agent += ` ${match[1]}`;
|
||||
}
|
||||
agent += ` (${platformInfo.os})`
|
||||
return agent;
|
||||
})();
|
||||
const modes = [ 'no filtering', 'basic', 'optimal', 'complete' ];
|
||||
const filtering = {};
|
||||
if ( siteMode ) {
|
||||
filtering.site = `${modes[siteMode]}`
|
||||
}
|
||||
filtering.default = `${modes[defaultMode]}`;
|
||||
const config = {
|
||||
name: manifest.name,
|
||||
version: manifest.version,
|
||||
browser,
|
||||
filtering,
|
||||
};
|
||||
if ( userRules.length !== 0 ) {
|
||||
config['user rules'] = userRules.length;
|
||||
}
|
||||
config.rulesets = rulesets;
|
||||
if ( registerContentScriptsReason !== undefined ) {
|
||||
config.registerContentScripts = registerContentScriptsReason;
|
||||
}
|
||||
if ( unregisterContentScriptsReason !== undefined ) {
|
||||
config.unregisterContentScripts = unregisterContentScriptsReason;
|
||||
}
|
||||
return renderData(config);
|
||||
}
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
<div>
|
||||
<hr>
|
||||
<details><summary data-i18n="supportS5H"></summary>
|
||||
<pre style="user-select: all;"></pre>
|
||||
<pre style="user-select: all; -webkit-user-select: all;"></pre>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue