@@ -805,3 +805,48 @@ mod scriptlet_storage_tests {
805805 assert_eq ! ( resources. get_scriptlet_resources( [ ( "test, 1" , PERM01 ) , ( "test-wrapper, 2" , PERM01 ) , ( "shared, 3" , Default :: default ( ) ) ] ) , "permissioned\n a\n common\n b\n function test() {}\n function testWrapper() { test(arguments) }\n function shared() { }\n try {\n test(\" 1\" )\n } catch ( e ) { }\n try {\n testWrapper(\" 2\" )\n } catch ( e ) { }\n try {\n shared(\" 3\" )\n } catch ( e ) { }\n " ) ;
806806 }
807807}
808+
809+ #[ cfg( all( test, feature = "single-thread" ) ) ]
810+ mod shared_storage_tests {
811+ use super :: super :: * ;
812+ use crate :: resources:: MimeType ;
813+
814+ use std:: rc:: Rc ;
815+
816+ /// To be wrapped in [Rc] for shared access across engines.
817+ struct BraveCoreResourceStorageInner {
818+ /// Stores each resource by its canonical name
819+ resources : HashMap < String , Resource > ,
820+ }
821+
822+ #[ derive( Clone ) ]
823+ struct BraveCoreResourceStorage {
824+ shared_storage : Rc < BraveCoreResourceStorageInner > ,
825+ }
826+
827+ impl ResourceStorageBackend for BraveCoreResourceStorage {
828+ fn get_resource ( & self , resource_ident : & str ) -> Option < Resource > {
829+ self . shared_storage . resources . get ( resource_ident) . cloned ( )
830+ }
831+ }
832+
833+ #[ test]
834+ fn share_resources ( ) {
835+ let shared_storage = Rc :: new ( BraveCoreResourceStorageInner {
836+ resources : HashMap :: from_iter ( [
837+ ( "test-scriptlet.js" . to_string ( ) , Resource :: simple ( "test-scriptlet" , MimeType :: ApplicationJavascript , "success!" ) )
838+ ] ) ,
839+ } ) ;
840+
841+ let mut engine1 = crate :: Engine :: from_rules ( [ "example1.com##+js(test-scriptlet)" ] , Default :: default ( ) ) ;
842+ engine1. use_resource_storage ( BraveCoreResourceStorage { shared_storage : Rc :: clone ( & shared_storage) } ) ;
843+
844+ let mut engine2 = crate :: Engine :: from_rules ( [ "example2.com##+js(test-scriptlet)" ] , Default :: default ( ) ) ;
845+ engine2. use_resource_storage ( BraveCoreResourceStorage { shared_storage : Rc :: clone ( & shared_storage) } ) ;
846+
847+ assert ! ( engine1. url_cosmetic_resources( "https://example1.com" ) . injected_script. contains( "success!" ) ) ;
848+ assert ! ( !engine1. url_cosmetic_resources( "https://example2.com" ) . injected_script. contains( "success!" ) ) ;
849+ assert ! ( !engine2. url_cosmetic_resources( "https://example1.com" ) . injected_script. contains( "success!" ) ) ;
850+ assert ! ( engine2. url_cosmetic_resources( "https://example2.com" ) . injected_script. contains( "success!" ) ) ;
851+ }
852+ }
0 commit comments