Skip to content

Commit 083a318

Browse files
committed
1 parent 60b21b1 commit 083a318

File tree

1 file changed

+73
-53
lines changed

1 file changed

+73
-53
lines changed

assets/resources/scriptlets.js

Lines changed: 73 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,54 @@ function setCookieHelper(
753753
}
754754
}
755755

756+
/******************************************************************************/
757+
758+
builtinScriptlets.push({
759+
name: 'set-local-storage-item-core.fn',
760+
fn: setLocalStorageItemCore,
761+
});
762+
function setLocalStorageItemCore(
763+
which = 'local',
764+
trusted = false,
765+
key = '',
766+
value = '',
767+
) {
768+
if ( key === '' ) { return; }
769+
770+
const trustedValues = [
771+
'',
772+
'undefined', 'null',
773+
'false', 'true',
774+
'yes', 'no',
775+
'{}', '[]', '""',
776+
'$remove$',
777+
];
778+
779+
if ( trusted ) {
780+
if ( value === '$now$' ) {
781+
value = Date.now();
782+
} else if ( value === '$currentDate$' ) {
783+
value = `${Date()}`;
784+
}
785+
} else {
786+
if ( trustedValues.includes(value) === false ) {
787+
if ( /^\d+$/.test(value) === false ) { return; }
788+
value = parseInt(value, 10);
789+
if ( value > 32767 ) { return; }
790+
}
791+
}
792+
793+
try {
794+
const storage = `${which}Storage`;
795+
if ( value === '$remove$' ) {
796+
self[storage].removeItem(key);
797+
} else {
798+
self[storage].setItem(key, `${value}`);
799+
}
800+
} catch(ex) {
801+
}
802+
}
803+
756804
/*******************************************************************************
757805
758806
Injectable scriptlets
@@ -2816,53 +2864,41 @@ function setCookie(
28162864
/*******************************************************************************
28172865
*
28182866
* set-local-storage-item.js
2867+
* set-session-storage-item.js
28192868
*
2820-
* Set a local storage entry to a specific, allowed value.
2869+
* Set a local/session storage entry to a specific, allowed value.
28212870
*
28222871
* Reference:
28232872
* https://github.com/AdguardTeam/Scriptlets/blob/master/src/scriptlets/set-local-storage-item.js
2873+
* https://github.com/AdguardTeam/Scriptlets/blob/master/src/scriptlets/set-session-storage-item.js
28242874
*
28252875
**/
28262876

28272877
builtinScriptlets.push({
28282878
name: 'set-local-storage-item.js',
28292879
fn: setLocalStorageItem,
28302880
world: 'ISOLATED',
2881+
dependencies: [
2882+
'set-local-storage-item-core.fn',
2883+
],
28312884
});
2832-
function setLocalStorageItem(
2833-
key = '',
2834-
value = ''
2835-
) {
2836-
if ( key === '' ) { return; }
2837-
2838-
const validValues = [
2839-
'',
2840-
'undefined', 'null',
2841-
'false', 'true',
2842-
'yes', 'no',
2843-
'{}', '[]', '""',
2844-
'$remove$',
2845-
];
2846-
let actualValue;
2847-
if ( validValues.includes(value) ) {
2848-
actualValue = value;
2849-
} else if ( /^\d+$/.test(value) ) {
2850-
actualValue = parseInt(value, 10);
2851-
if ( actualValue > 32767 ) { return; }
2852-
} else {
2853-
return;
2854-
}
2885+
function setLocalStorageItem(key = '', value = '') {
2886+
setLocalStorageItemCore('local', false, key, value);
2887+
}
28552888

2856-
try {
2857-
if ( actualValue === '$remove$' ) {
2858-
self.localStorage.removeItem(key);
2859-
} else {
2860-
self.localStorage.setItem(key, `${actualValue}`);
2861-
}
2862-
} catch(ex) {
2863-
}
2889+
builtinScriptlets.push({
2890+
name: 'set-session-storage-item.js',
2891+
fn: setSessionStorageItem,
2892+
world: 'ISOLATED',
2893+
dependencies: [
2894+
'set-local-storage-item-core.fn',
2895+
],
2896+
});
2897+
function setSessionStorageItem(key = '', value = '') {
2898+
setLocalStorageItemCore('session', false, key, value);
28642899
}
28652900

2901+
28662902
/*******************************************************************************
28672903
*
28682904
* Scriplets below this section are only available for filter lists from
@@ -3021,28 +3057,12 @@ builtinScriptlets.push({
30213057
requiresTrust: true,
30223058
fn: trustedSetLocalStorageItem,
30233059
world: 'ISOLATED',
3060+
dependencies: [
3061+
'set-local-storage-item-core.fn',
3062+
],
30243063
});
3025-
function trustedSetLocalStorageItem(
3026-
key = '',
3027-
value = ''
3028-
) {
3029-
if ( key === '' ) { return; }
3030-
3031-
let actualValue = value;
3032-
if ( value === '$now$' ) {
3033-
actualValue = Date.now();
3034-
} else if ( value === '$currentDate$' ) {
3035-
actualValue = `${Date()}`;
3036-
}
3037-
3038-
try {
3039-
if ( actualValue === '$remove$' ) {
3040-
self.localStorage.removeItem(key);
3041-
} else {
3042-
self.localStorage.setItem(key, `${actualValue}`);
3043-
}
3044-
} catch(ex) {
3045-
}
3064+
function trustedSetLocalStorageItem(key = '', value = '') {
3065+
setLocalStorageItemCore('local', true, key, value);
30463066
}
30473067

30483068
/******************************************************************************/

0 commit comments

Comments
 (0)