@@ -170,6 +170,8 @@ impl Scope {
170170
171171#[ cfg( test) ]
172172mod tests {
173+ use serde:: Serialize ;
174+
173175 use super :: RemoteDomainAccessScope ;
174176 use crate :: { api:: ipc:: CallbackFn , test:: MockRuntime , App , InvokePayload , Manager , Window } ;
175177
@@ -186,10 +188,10 @@ mod tests {
186188 ( app, window)
187189 }
188190
189- fn assert_ipc_response (
191+ fn assert_ipc_response < R : Serialize > (
190192 window : & Window < MockRuntime > ,
191193 payload : InvokePayload ,
192- expected : Result < & str , & str > ,
194+ expected : Result < R , & str > ,
193195 ) {
194196 let callback = payload. callback ;
195197 let error = payload. error ;
@@ -208,8 +210,8 @@ mod tests {
208210 }
209211 } ;
210212 let ( expected_response, fn_name) = match expected {
211- Ok ( payload) => ( payload, callback) ,
212- Err ( payload) => ( payload, error) ,
213+ Ok ( payload) => ( serde_json :: to_value ( payload) . unwrap ( ) , callback) ,
214+ Err ( payload) => ( serde_json :: to_value ( payload) . unwrap ( ) , error) ,
213215 } ;
214216 let expected = format ! (
215217 "window[\" _{}\" ]({})" ,
@@ -224,21 +226,19 @@ mod tests {
224226 assert ! ( evaluated_script. contains( & expected) ) ;
225227 }
226228
227- fn app_version_payload ( ) -> InvokePayload {
229+ fn path_is_absolute_payload ( ) -> InvokePayload {
228230 let callback = CallbackFn ( 0 ) ;
229231 let error = CallbackFn ( 1 ) ;
230232
231233 let mut payload = serde_json:: Map :: new ( ) ;
232- let mut msg = serde_json:: Map :: new ( ) ;
233- msg. insert (
234- "cmd" . into ( ) ,
235- serde_json:: Value :: String ( "getAppVersion" . into ( ) ) ,
234+ payload. insert (
235+ "path" . into ( ) ,
236+ serde_json:: Value :: String ( std:: env:: current_dir ( ) . unwrap ( ) . display ( ) . to_string ( ) ) ,
236237 ) ;
237- payload. insert ( "message" . into ( ) , serde_json:: Value :: Object ( msg) ) ;
238238
239239 InvokePayload {
240- cmd : "" . into ( ) ,
241- tauri_module : Some ( "App" . into ( ) ) ,
240+ cmd : "plugin:path|is_absolute " . into ( ) ,
241+ tauri_module : None ,
242242 callback,
243243 error,
244244 inner : serde_json:: Value :: Object ( payload) ,
@@ -262,12 +262,13 @@ mod tests {
262262 fn scope_not_defined ( ) {
263263 let ( _app, window) = test_context ( vec ! [ RemoteDomainAccessScope :: new( "app.tauri.app" )
264264 . add_window( "other" )
265+ . add_plugin( "path" )
265266 . enable_tauri_api( ) ] ) ;
266267
267268 window. navigate ( "https://tauri.app" . parse ( ) . unwrap ( ) ) ;
268- assert_ipc_response (
269+ assert_ipc_response :: < ( ) > (
269270 & window,
270- app_version_payload ( ) ,
271+ path_is_absolute_payload ( ) ,
271272 Err ( & crate :: window:: ipc_scope_not_found_error_message (
272273 "main" ,
273274 "https://tauri.app/" ,
@@ -279,12 +280,13 @@ mod tests {
279280 fn scope_not_defined_for_window ( ) {
280281 let ( _app, window) = test_context ( vec ! [ RemoteDomainAccessScope :: new( "tauri.app" )
281282 . add_window( "second" )
283+ . add_plugin( "path" )
282284 . enable_tauri_api( ) ] ) ;
283285
284286 window. navigate ( "https://tauri.app" . parse ( ) . unwrap ( ) ) ;
285- assert_ipc_response (
287+ assert_ipc_response :: < ( ) > (
286288 & window,
287- app_version_payload ( ) ,
289+ path_is_absolute_payload ( ) ,
288290 Err ( & crate :: window:: ipc_scope_window_error_message ( "main" ) ) ,
289291 ) ;
290292 }
@@ -293,12 +295,13 @@ mod tests {
293295 fn scope_not_defined_for_url ( ) {
294296 let ( _app, window) = test_context ( vec ! [ RemoteDomainAccessScope :: new( "github.com" )
295297 . add_window( "main" )
298+ . add_plugin( "path" )
296299 . enable_tauri_api( ) ] ) ;
297300
298301 window. navigate ( "https://tauri.app" . parse ( ) . unwrap ( ) ) ;
299- assert_ipc_response (
302+ assert_ipc_response :: < ( ) > (
300303 & window,
301- app_version_payload ( ) ,
304+ path_is_absolute_payload ( ) ,
302305 Err ( & crate :: window:: ipc_scope_domain_error_message (
303306 "https://tauri.app/" ,
304307 ) ) ,
@@ -307,43 +310,37 @@ mod tests {
307310
308311 #[ test]
309312 fn subdomain_is_not_allowed ( ) {
310- let ( app , mut window) = test_context ( vec ! [
313+ let ( _app , mut window) = test_context ( vec ! [
311314 RemoteDomainAccessScope :: new( "tauri.app" )
312315 . add_window( "main" )
316+ . add_plugin( "path" )
313317 . enable_tauri_api( ) ,
314318 RemoteDomainAccessScope :: new( "sub.tauri.app" )
315319 . add_window( "main" )
320+ . add_plugin( "path" )
316321 . enable_tauri_api( ) ,
317322 ] ) ;
318323
319324 window. navigate ( "https://tauri.app" . parse ( ) . unwrap ( ) ) ;
320- assert_ipc_response (
321- & window,
322- app_version_payload ( ) ,
323- Ok ( app. package_info ( ) . version . to_string ( ) . as_str ( ) ) ,
324- ) ;
325+ assert_ipc_response ( & window, path_is_absolute_payload ( ) , Ok ( true ) ) ;
325326
326327 window. navigate ( "https://blog.tauri.app" . parse ( ) . unwrap ( ) ) ;
327- assert_ipc_response (
328+ assert_ipc_response :: < ( ) > (
328329 & window,
329- app_version_payload ( ) ,
330+ path_is_absolute_payload ( ) ,
330331 Err ( & crate :: window:: ipc_scope_domain_error_message (
331332 "https://blog.tauri.app/" ,
332333 ) ) ,
333334 ) ;
334335
335336 window. navigate ( "https://sub.tauri.app" . parse ( ) . unwrap ( ) ) ;
336- assert_ipc_response (
337- & window,
338- app_version_payload ( ) ,
339- Ok ( app. package_info ( ) . version . to_string ( ) . as_str ( ) ) ,
340- ) ;
337+ assert_ipc_response ( & window, path_is_absolute_payload ( ) , Ok ( true ) ) ;
341338
342339 window. window . label = "test" . into ( ) ;
343340 window. navigate ( "https://dev.tauri.app" . parse ( ) . unwrap ( ) ) ;
344- assert_ipc_response (
341+ assert_ipc_response :: < ( ) > (
345342 & window,
346- app_version_payload ( ) ,
343+ path_is_absolute_payload ( ) ,
347344 Err ( & crate :: window:: ipc_scope_not_found_error_message (
348345 "test" ,
349346 "https://dev.tauri.app/" ,
@@ -353,16 +350,13 @@ mod tests {
353350
354351 #[ test]
355352 fn subpath_is_allowed ( ) {
356- let ( app , window) = test_context ( vec ! [ RemoteDomainAccessScope :: new( "tauri.app" )
353+ let ( _app , window) = test_context ( vec ! [ RemoteDomainAccessScope :: new( "tauri.app" )
357354 . add_window( "main" )
355+ . add_plugin( "path" )
358356 . enable_tauri_api( ) ] ) ;
359357
360358 window. navigate ( "https://tauri.app/inner/path" . parse ( ) . unwrap ( ) ) ;
361- assert_ipc_response (
362- & window,
363- app_version_payload ( ) ,
364- Ok ( app. package_info ( ) . version . to_string ( ) . as_str ( ) ) ,
365- ) ;
359+ assert_ipc_response ( & window, path_is_absolute_payload ( ) , Ok ( true ) ) ;
366360 }
367361
368362 #[ test]
@@ -372,9 +366,9 @@ mod tests {
372366 ] ) ;
373367
374368 window. navigate ( "https://tauri.app" . parse ( ) . unwrap ( ) ) ;
375- assert_ipc_response (
369+ assert_ipc_response :: < ( ) > (
376370 & window,
377- app_version_payload ( ) ,
371+ path_is_absolute_payload ( ) ,
378372 Err ( crate :: window:: IPC_SCOPE_DOES_NOT_ALLOW ) ,
379373 ) ;
380374 }
@@ -386,7 +380,7 @@ mod tests {
386380 . add_plugin( PLUGIN_NAME ) ] ) ;
387381
388382 window. navigate ( "https://tauri.app" . parse ( ) . unwrap ( ) ) ;
389- assert_ipc_response (
383+ assert_ipc_response :: < ( ) > (
390384 & window,
391385 plugin_test_payload ( ) ,
392386 Err ( & format ! ( "plugin {PLUGIN_NAME} not found" ) ) ,
@@ -400,7 +394,7 @@ mod tests {
400394 ] ) ;
401395
402396 window. navigate ( "https://tauri.app" . parse ( ) . unwrap ( ) ) ;
403- assert_ipc_response (
397+ assert_ipc_response :: < ( ) > (
404398 & window,
405399 plugin_test_payload ( ) ,
406400 Err ( crate :: window:: IPC_SCOPE_DOES_NOT_ALLOW ) ,
0 commit comments