Skip to content

Commit 869a653

Browse files
committed
Output scriptlet logging information to the logger
This commit brings the following changes to the logger: All logging output generated by injected scriptlets are now sent to the logger, the developer console will no longer be used to log scriptlet logging information. When the logger is not opened, the scriplets will not output any logging information. The goal with this new approach is to allow filter authors to more easily assess the working of scriptlets without having to go through scriptlet parameters to enable logging. Consequently all the previous ways to tell scriptlets to log information are now obsolete: if the logger is opened, the scriptlets will log information to the logger. Another benefit of this approach is that the dev tools do not need to be open to obtain scriptlets logging information. Accordingly, new filter expressions have been added to the logger: "info" and "error". Selecting the "scriptlet" expression will also keep the logging information from scriptlets. A new button has been added to the logger (not yet i18n-ed): a "volume" icon, which allows to enable verbose mode. When verbose mode is enabled, the scriptlets may choose to output more information regarding their inner working. The entries in the logger will automatically expand on mouse hover. This allows to scroll through entries which text does not fit into a single row. Clicking anywhere on an entry in the logger will open the detailed view when applicable. Generic information/errors will now be rendered regardless of which tab is currently selected in the logger (similar to how tabless entries are already being rendered).
1 parent f1889b0 commit 869a653

20 files changed

+640
-418
lines changed

assets/resources/scriptlets.js

Lines changed: 220 additions & 227 deletions
Large diffs are not rendered by default.

platform/common/vapi-background.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,19 @@ vAPI.app = {
8787
},
8888
};
8989

90+
/******************************************************************************/
91+
92+
// Generate segments of random six alphanumeric characters, thus one segment
93+
// is a value out of 36^6 = over 2x10^9 values.
94+
95+
vAPI.generateSecret = (size = 1) => {
96+
let secret = '';
97+
while ( size-- ) {
98+
secret += (Math.floor(Math.random() * 2176782336) + 2176782336).toString(36).slice(1);
99+
}
100+
return secret;
101+
};
102+
90103
/*******************************************************************************
91104
*
92105
* https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/storage/session
@@ -1165,11 +1178,6 @@ vAPI.messaging = {
11651178
// Support using a new secret for every network request.
11661179

11671180
{
1168-
// Generate a 6-character alphanumeric string, thus one random value out
1169-
// of 36^6 = over 2x10^9 values.
1170-
const generateSecret = ( ) =>
1171-
(Math.floor(Math.random() * 2176782336) + 2176782336).toString(36).slice(1);
1172-
11731181
const root = vAPI.getURL('/');
11741182
const reSecret = /\?secret=(\w+)/;
11751183
const shortSecrets = [];
@@ -1207,15 +1215,15 @@ vAPI.messaging = {
12071215
}
12081216
}
12091217
lastShortSecretTime = Date.now();
1210-
const secret = generateSecret();
1218+
const secret = vAPI.generateSecret();
12111219
shortSecrets.push(secret);
12121220
return secret;
12131221
},
12141222
long: previous => {
12151223
if ( previous !== undefined ) {
12161224
longSecrets.delete(previous);
12171225
}
1218-
const secret = `${generateSecret()}${generateSecret()}${generateSecret()}`;
1226+
const secret = vAPI.generateSecret(3);
12191227
longSecrets.add(secret);
12201228
return secret;
12211229
},

src/css/fa-icons.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
.fa-icon > .fa-icon_spinner,
9696
.fa-icon > .fa-icon_unlink,
9797
.fa-icon > .fa-icon_upload-alt,
98+
.fa-icon > .fa-icon_volume-up,
9899
.fa-icon > .fa-icon_zoom-in,
99100
.fa-icon > .fa-icon_zoom-out {
100101
width: calc(1em * 1664 / 1792);

src/css/logger-ui.css

Lines changed: 69 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ body[dir="rtl"] #netInspector #filterExprPicker {
218218
width: 100%;
219219
}
220220
#vwRenderer .logEntry {
221+
background-color: var(--surface-1);
221222
display: block;
222223
left: 0;
223224
overflow: hidden;
@@ -228,7 +229,11 @@ body[dir="rtl"] #netInspector #filterExprPicker {
228229
display: none;
229230
}
230231
#vwRenderer .logEntry > div {
232+
border-bottom: 1px dotted var(--border-1);
233+
box-sizing: border-box;
234+
display: flex;
231235
height: 100%;
236+
max-height: 200px;
232237
white-space: nowrap;
233238
}
234239
#vwRenderer .logEntry > div[data-status="1"],
@@ -271,7 +276,7 @@ body[dir="rtl"] #netInspector #filterExprPicker {
271276
color: white;
272277
}
273278
#vwRenderer .logEntry > div[data-type="error"] {
274-
color: var(--sf-error-ink);
279+
color: var(--cm-negative);
275280
}
276281
#vwRenderer .logEntry > div[data-type="info"] {
277282
color: var(--sf-def-ink);
@@ -283,10 +288,8 @@ body[dir="rtl"] #netInspector #filterExprPicker {
283288
opacity: 0.7;
284289
}
285290

286-
#vwRenderer .logEntry > div > span {
287-
border: 1px dotted var(--border-1);
288-
border-top: 0;
289-
border-right: 0;
291+
#vwRenderer .logEntry > .fields > span {
292+
border-left: 1px dotted var(--border-1);
290293
box-sizing: border-box;
291294
display: inline-block;
292295
height: 100%;
@@ -296,86 +299,74 @@ body[dir="rtl"] #netInspector #filterExprPicker {
296299
white-space: nowrap;
297300
word-break: break-all;
298301
}
299-
#vwRenderer .logEntry > div.canDetails:hover > span {
302+
#vwRenderer .logEntry > div:hover > span {
300303
background-color: rgba(0,0,0,0.04);
301304
}
302-
body[dir="ltr"] #vwRenderer .logEntry > div > span:first-child {
305+
body[dir="ltr"] #vwRenderer .logEntry > .fields > span:first-child {
303306
border-left: 0;
304307
}
305-
body[dir="rtl"] #vwRenderer .logEntry > div > span:first-child {
308+
body[dir="rtl"] #vwRenderer .logEntry > .fields > span:first-child {
306309
border-right: 0;
307310
}
308311
#vwRenderer .logEntry > div > span:nth-of-type(1) {
309312
}
310313
#vwRenderer .logEntry > div > span:nth-of-type(2) {
311314
}
312-
#vwRenderer .logEntry > div > span:nth-of-type(2) {
315+
#vwRenderer .logEntry > .fields > span:nth-of-type(2) {
313316
text-overflow: ellipsis;
314317
}
315-
#vwRenderer .logEntry > div.messageRealm > span:nth-of-type(2) ~ span {
318+
#vwRenderer .logEntry > .fields.messageRealm > span:nth-of-type(2) ~ span {
316319
display: none;
317320
}
318-
.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(2) {
321+
.vExpanded #vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(2) {
319322
overflow-y: auto;
320323
white-space: pre-line;
321324
}
322-
#vwRenderer .logEntry > div.messageRealm[data-type="tabLoad"] > span:nth-of-type(2) {
325+
#vwRenderer .logEntry > .fields.messageRealm[data-type="tabLoad"] > span:nth-of-type(2) {
323326
text-align: center;
324327
}
325-
#vwRenderer .logEntry > div.extendedRealm > span:nth-of-type(2) > span:first-of-type {
328+
#vwRenderer .logEntry > .fields.extendedRealm > span:nth-of-type(2) > span:first-of-type {
326329
display: none;
327330
}
328-
#vwRenderer .logEntry > div.extendedRealm > span:nth-of-type(2) > span:last-of-type {
329-
pointer-events: none;
330-
}
331-
#vwRenderer .logEntry > div.extendedRealm.isException > span:nth-of-type(2) > span:last-of-type {
331+
#vwRenderer .logEntry > .fields.extendedRealm.isException > span:nth-of-type(2) > span:last-of-type {
332332
text-decoration: line-through rgba(0,0,255,0.7);
333333
}
334-
#vwRenderer .logEntry > div > span:nth-of-type(3) {
334+
#vwRenderer .logEntry > .fields > span:nth-of-type(3) {
335335
font-family: monospace;
336336
padding-left: 0.3em;
337337
padding-right: 0.3em;
338338
text-align: center;
339339
}
340-
#vwRenderer .logEntry > div.canDetails:hover > span:not(:nth-of-type(4)):not(:nth-of-type(8)) {
341-
background: rgba(0, 0, 255, 0.1);
342-
cursor: zoom-in;
343-
}
344-
#netInspector:not(.vExpanded) #vwRenderer .logEntry > div > span:nth-of-type(4) {
345-
direction: rtl;
340+
#netInspector:not(.vExpanded) #vwRenderer .logEntry > .fields > span:nth-of-type(4) {
346341
text-align: right;
347-
unicode-bidi: plaintext;
348342
}
349-
#vwRenderer #vwContent .logEntry > div > span:nth-of-type(4) {
343+
#vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(4) {
350344
text-overflow: ellipsis;
351345
}
352-
.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(4) {
346+
.vExpanded #vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(4) {
353347
overflow-y: auto;
354348
text-overflow: clip;
355349
white-space: pre-line;
356350
}
357-
#vwRenderer .logEntry > div > span:nth-of-type(5) {
351+
#vwRenderer .logEntry > .fields > span:nth-of-type(5) {
358352
text-align: center;
359353
}
360-
/* visual for tabless network requests */
361-
#vwRenderer .logEntry > div > span:nth-of-type(5) {
362-
position: relative;
363-
}
364-
#vwRenderer .logEntry > div > span:nth-of-type(7) {
365-
}
366-
#vwRenderer #vwContent .logEntry > div > span:nth-of-type(7) {
354+
#vwRenderer .logEntry > .fields > span:nth-of-type(3),
355+
#vwRenderer .logEntry > .fields > span:nth-of-type(5),
356+
#vwRenderer .logEntry > .fields > span:nth-of-type(7) {
357+
white-space: nowrap !important;
367358
}
368-
#vwRenderer .logEntry > div > span:nth-of-type(8) {
359+
#vwRenderer .logEntry > .fields > span:nth-of-type(8) {
369360
position: relative;
370361
}
371-
#vwRenderer #vwContent .logEntry > div > span:nth-of-type(8) {
362+
#vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(8) {
372363
text-overflow: ellipsis;
373364
}
374-
.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(8) {
365+
.vExpanded #vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(8) {
375366
overflow-y: auto;
376367
white-space: pre-line;
377368
}
378-
#vwRenderer .logEntry > div > span:nth-of-type(8) b {
369+
#vwRenderer .logEntry > .fields > span:nth-of-type(8) b {
379370
font-weight: bold;
380371
}
381372
#vwRenderer .logEntry > div[data-status="1"] > span:nth-of-type(8) b,
@@ -396,37 +387,65 @@ body[dir="rtl"] #vwRenderer .logEntry > div > span:first-child {
396387
.netFilteringDialog > .panes > .details > div[data-status="2"] b {
397388
background-color: rgb(var(--popup-cell-allow-surface-rgb) / 100%);
398389
}
399-
#vwRenderer .logEntry > div > span:nth-of-type(8) a {
390+
#vwRenderer .logEntry > .fields > span:nth-of-type(8) a {
400391
align-items: center;
401392
background-color: dimgray;
393+
bottom: 0;
402394
color: white;
403395
display: none;
404-
height: 100%;
396+
height: min(100%, 1.5em);
405397
justify-content: center;
406-
padding: 0 0.25em;
398+
padding: 0.1em;
407399
opacity: 0.4;
408400
position: absolute;
409401
right: 0;
410402
text-decoration: none;
411-
top: 0;
412-
width: 2rem;
403+
width: 1.5em;
413404
}
414-
#netInspector.vExpanded #vwRenderer .logEntry > div > span:nth-of-type(8) a {
405+
#netInspector.vExpanded #vwRenderer .logEntry > .fields > span:nth-of-type(8) a {
415406
bottom: 0px;
416407
height: unset;
417-
padding: 0.25em;
408+
padding: 0.2em;
418409
top: unset;
419410
}
420-
#vwRenderer .logEntry > div > span:nth-of-type(8) a::after {
411+
#vwRenderer .logEntry > .fields > span:nth-of-type(8) a::after {
421412
content: '\2197';
422413
}
423-
#vwRenderer .logEntry > div.networkRealm > span:nth-of-type(8):hover a {
414+
#vwRenderer .logEntry > .fields.networkRealm > span:nth-of-type(8):hover a {
424415
display: inline-flex;
425416
}
426-
#vwRenderer .logEntry > div > span:nth-of-type(8) a:hover {
417+
#vwRenderer .logEntry > .fields > span:nth-of-type(8) a:hover {
427418
opacity: 1;
428419
}
429420

421+
@keyframes unrollRow {
422+
to {
423+
box-shadow: 0 2px 3px 0 #444;
424+
height: auto;
425+
max-height: 200px;
426+
z-index: 1;
427+
}
428+
}
429+
@keyframes unrollRowCell {
430+
to {
431+
height: auto;
432+
overflow-y: auto;
433+
white-space: pre-wrap;
434+
}
435+
}
436+
#netInspector:not(.vExpanded) #vwRenderer .logEntry:hover {
437+
animation-delay: 0.8s;
438+
animation-fill-mode: forwards;
439+
animation-name: unrollRow;
440+
animation-timing-function: step-start;
441+
}
442+
#netInspector:not(.vExpanded) #vwRenderer .logEntry:hover > .fields > span {
443+
animation-delay: 0.8s;
444+
animation-fill-mode: forwards;
445+
animation-name: unrollRowCell;
446+
animation-timing-function: step-start;
447+
}
448+
430449
#vwRenderer #vwBottom {
431450
background-color: #00F;
432451
height: 0;
@@ -448,6 +467,7 @@ body[dir="rtl"] #vwRenderer .logEntry > div > span:first-child {
448467
max-width: 640px;
449468
min-width: min(100%, 640px);
450469
position: absolute;
470+
z-index: 2;
451471
}
452472
#netInspector .entryTools:empty {
453473
display: none;

src/img/fontawesome/fontawesome-defs.svg

Lines changed: 1 addition & 0 deletions
Loading

src/js/background.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ const µBlock = { // jshint ignore:line
374374
toLogger() {
375375
const details = {
376376
id: this.id,
377-
tstamp: Date.now(),
377+
tstamp: 0,
378378
realm: this.realm,
379379
method: this.getMethodName(),
380380
type: this.stype,

src/js/benchmarks.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,7 @@ const loadBenchmarkDataset = (( ) => {
353353
hostname: '',
354354
tabId: 0,
355355
url: '',
356+
nocache: true,
356357
};
357358
let count = 0;
358359
const t0 = performance.now();

src/js/click2load.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,8 @@ document.body.addEventListener('click', ev => {
4949
what: 'clickToLoad',
5050
frameURL,
5151
}).then(ok => {
52-
if ( ok ) {
53-
self.location.replace(frameURL);
54-
}
52+
if ( ok !== true ) { return; }
53+
self.location.replace(frameURL);
5554
});
5655
});
5756

src/js/contentscript.js

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -460,28 +460,6 @@ vAPI.SafeAnimationFrame = class {
460460
vAPI.domWatcher = { start, addListener, removeListener };
461461
}
462462

463-
/******************************************************************************/
464-
/******************************************************************************/
465-
/******************************************************************************/
466-
467-
vAPI.injectScriptlet = function(doc, text) {
468-
if ( !doc ) { return; }
469-
let script, url;
470-
try {
471-
const blob = new self.Blob([ text ], { type: 'text/javascript; charset=utf-8' });
472-
url = self.URL.createObjectURL(blob);
473-
script = doc.createElement('script');
474-
script.async = false;
475-
script.src = url;
476-
(doc.head || doc.documentElement || doc).appendChild(script);
477-
} catch (ex) {
478-
}
479-
if ( url ) {
480-
if ( script ) { script.remove(); }
481-
self.URL.revokeObjectURL(url);
482-
}
483-
};
484-
485463
/******************************************************************************/
486464
/******************************************************************************/
487465
/*******************************************************************************
@@ -1298,7 +1276,6 @@ vAPI.DOMFilterer = class {
12981276
const {
12991277
noSpecificCosmeticFiltering,
13001278
noGenericCosmeticFiltering,
1301-
scriptletDetails,
13021279
} = response;
13031280

13041281
vAPI.noSpecificCosmeticFiltering = noSpecificCosmeticFiltering;
@@ -1320,14 +1297,6 @@ vAPI.DOMFilterer = class {
13201297
vAPI.userStylesheet.apply();
13211298
}
13221299

1323-
if ( scriptletDetails && typeof self.uBO_scriptletsInjected !== 'string' ) {
1324-
self.uBO_scriptletsInjected = scriptletDetails.filters;
1325-
if ( scriptletDetails.mainWorld ) {
1326-
vAPI.injectScriptlet(document, scriptletDetails.mainWorld);
1327-
vAPI.injectedScripts = scriptletDetails.mainWorld;
1328-
}
1329-
}
1330-
13311300
if ( vAPI.domSurveyor ) {
13321301
if ( Array.isArray(cfeDetails.genericCosmeticHashes) ) {
13331302
vAPI.domSurveyor.addHashes(cfeDetails.genericCosmeticHashes);

0 commit comments

Comments
 (0)