@@ -753,6 +753,54 @@ function setCookieHelper(
753
753
}
754
754
}
755
755
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
+
756
804
/*******************************************************************************
757
805
758
806
Injectable scriptlets
@@ -2816,53 +2864,41 @@ function setCookie(
2816
2864
/*******************************************************************************
2817
2865
*
2818
2866
* set-local-storage-item.js
2867
+ * set-session-storage-item.js
2819
2868
*
2820
- * Set a local storage entry to a specific, allowed value.
2869
+ * Set a local/session storage entry to a specific, allowed value.
2821
2870
*
2822
2871
* Reference:
2823
2872
* 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
2824
2874
*
2825
2875
**/
2826
2876
2827
2877
builtinScriptlets . push ( {
2828
2878
name : 'set-local-storage-item.js' ,
2829
2879
fn : setLocalStorageItem ,
2830
2880
world : 'ISOLATED' ,
2881
+ dependencies : [
2882
+ 'set-local-storage-item-core.fn' ,
2883
+ ] ,
2831
2884
} ) ;
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
+ }
2855
2888
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 ) ;
2864
2899
}
2865
2900
2901
+
2866
2902
/*******************************************************************************
2867
2903
*
2868
2904
* Scriplets below this section are only available for filter lists from
@@ -3021,28 +3057,12 @@ builtinScriptlets.push({
3021
3057
requiresTrust : true ,
3022
3058
fn : trustedSetLocalStorageItem ,
3023
3059
world : 'ISOLATED' ,
3060
+ dependencies : [
3061
+ 'set-local-storage-item-core.fn' ,
3062
+ ] ,
3024
3063
} ) ;
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 ) ;
3046
3066
}
3047
3067
3048
3068
/******************************************************************************/
0 commit comments