@@ -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
28272877builtinScriptlets . 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