@@ -450,6 +450,7 @@ impl ClientBuilder {
450450
451451 let http_client = HttpClient :: new ( inner_http_client. clone ( ) , self . request_config ) ;
452452
453+ #[ allow( unused_variables) ]
453454 let ( homeserver, well_known) = match homeserver_cfg {
454455 HomeserverConfig :: Url ( url) => ( url, None ) ,
455456
@@ -471,9 +472,14 @@ impl ClientBuilder {
471472 let mut sliding_sync_proxy =
472473 self . sliding_sync_proxy . as_ref ( ) . map ( |url| Url :: parse ( url) ) . transpose ( ) ?;
473474
474- #[ allow( unused_variables) ]
475- if let Some ( well_known) = well_known {
476- #[ cfg( feature = "experimental-sliding-sync" ) ]
475+ #[ cfg( feature = "experimental-sliding-sync" ) ]
476+ if self . is_simplified_sliding_sync_enabled {
477+ // When using Simplified MSC3575, don't use a sliding sync proxy, allow the
478+ // requests to be sent directly to the homeserver.
479+ tracing:: info!( "Simplified MSC3575 is enabled, ignoring any sliding sync proxy." ) ;
480+ sliding_sync_proxy = None ;
481+ } else if let Some ( well_known) = well_known {
482+ // Otherwise, if a proxy wasn't set, use the one discovered from the well-known.
477483 if sliding_sync_proxy. is_none ( ) {
478484 sliding_sync_proxy =
479485 well_known. sliding_sync_proxy . and_then ( |p| Url :: parse ( & p. url ) . ok ( ) )
@@ -879,7 +885,7 @@ pub(crate) mod tests {
879885 #[ async_test]
880886 async fn test_discovery_invalid_server ( ) {
881887 // Given a new client builder.
882- let mut builder = ClientBuilder :: new ( ) ;
888+ let mut builder = make_non_sss_client_builder ( ) ;
883889
884890 // When building a client with an invalid server name.
885891 builder = builder. server_name_or_homeserver_url ( "⚠️ This won't work 🚫" ) ;
@@ -892,7 +898,7 @@ pub(crate) mod tests {
892898 #[ async_test]
893899 async fn test_discovery_no_server ( ) {
894900 // Given a new client builder.
895- let mut builder = ClientBuilder :: new ( ) ;
901+ let mut builder = make_non_sss_client_builder ( ) ;
896902
897903 // When building a client with a valid server name that doesn't exist.
898904 builder = builder. server_name_or_homeserver_url ( "localhost:3456" ) ;
@@ -908,7 +914,7 @@ pub(crate) mod tests {
908914 // Given a random web server that isn't a Matrix homeserver or hosting the
909915 // well-known file for one.
910916 let server = MockServer :: start ( ) . await ;
911- let mut builder = ClientBuilder :: new ( ) ;
917+ let mut builder = make_non_sss_client_builder ( ) ;
912918
913919 // When building a client with the server's URL.
914920 builder = builder. server_name_or_homeserver_url ( server. uri ( ) ) ;
@@ -922,7 +928,7 @@ pub(crate) mod tests {
922928 async fn test_discovery_direct_legacy ( ) {
923929 // Given a homeserver without a well-known file.
924930 let homeserver = make_mock_homeserver ( ) . await ;
925- let mut builder = ClientBuilder :: new ( ) ;
931+ let mut builder = make_non_sss_client_builder ( ) ;
926932
927933 // When building a client with the server's URL.
928934 builder = builder. server_name_or_homeserver_url ( homeserver. uri ( ) ) ;
@@ -938,7 +944,7 @@ pub(crate) mod tests {
938944 // Given a homeserver without a well-known file and with a custom sliding sync
939945 // proxy injected.
940946 let homeserver = make_mock_homeserver ( ) . await ;
941- let mut builder = ClientBuilder :: new ( ) ;
947+ let mut builder = make_non_sss_client_builder ( ) ;
942948 #[ cfg( feature = "experimental-sliding-sync" ) ]
943949 {
944950 builder = builder. sliding_sync_proxy ( "https://localhost:1234" ) ;
@@ -958,7 +964,7 @@ pub(crate) mod tests {
958964 // Given a base server with a well-known file that has errors.
959965 let server = MockServer :: start ( ) . await ;
960966 let homeserver = make_mock_homeserver ( ) . await ;
961- let mut builder = ClientBuilder :: new ( ) ;
967+ let mut builder = make_non_sss_client_builder ( ) ;
962968
963969 let well_known = make_well_known_json ( & homeserver. uri ( ) , None ) ;
964970 let bad_json = well_known. to_string ( ) . replace ( ',' , "" ) ;
@@ -985,7 +991,7 @@ pub(crate) mod tests {
985991 // doesn't support sliding sync.
986992 let server = MockServer :: start ( ) . await ;
987993 let homeserver = make_mock_homeserver ( ) . await ;
988- let mut builder = ClientBuilder :: new ( ) ;
994+ let mut builder = make_non_sss_client_builder ( ) ;
989995
990996 Mock :: given ( method ( "GET" ) )
991997 . and ( path ( "/.well-known/matrix/client" ) )
@@ -1011,7 +1017,7 @@ pub(crate) mod tests {
10111017 // sliding sync proxy.
10121018 let server = MockServer :: start ( ) . await ;
10131019 let homeserver = make_mock_homeserver ( ) . await ;
1014- let mut builder = ClientBuilder :: new ( ) ;
1020+ let mut builder = make_non_sss_client_builder ( ) ;
10151021
10161022 Mock :: given ( method ( "GET" ) )
10171023 . and ( path ( "/.well-known/matrix/client" ) )
@@ -1038,7 +1044,7 @@ pub(crate) mod tests {
10381044 // sliding sync proxy.
10391045 let server = MockServer :: start ( ) . await ;
10401046 let homeserver = make_mock_homeserver ( ) . await ;
1041- let mut builder = ClientBuilder :: new ( ) ;
1047+ let mut builder = make_non_sss_client_builder ( ) ;
10421048
10431049 Mock :: given ( method ( "GET" ) )
10441050 . and ( path ( "/.well-known/matrix/client" ) )
@@ -1061,6 +1067,33 @@ pub(crate) mod tests {
10611067 assert_eq ! ( client. sliding_sync_proxy( ) , Some ( "https://localhost:9012" . parse( ) . unwrap( ) ) ) ;
10621068 }
10631069
1070+ #[ async_test]
1071+ #[ cfg( feature = "experimental-sliding-sync" ) ]
1072+ async fn test_discovery_well_known_with_simplified_sliding_sync ( ) {
1073+ // Given a base server with a well-known file that points to a homeserver with a
1074+ // sliding sync proxy.
1075+ let server = MockServer :: start ( ) . await ;
1076+ let homeserver = make_mock_homeserver ( ) . await ;
1077+ let mut builder = make_non_sss_client_builder ( ) ;
1078+
1079+ Mock :: given ( method ( "GET" ) )
1080+ . and ( path ( "/.well-known/matrix/client" ) )
1081+ . respond_with ( ResponseTemplate :: new ( 200 ) . set_body_json ( make_well_known_json (
1082+ & homeserver. uri ( ) ,
1083+ Some ( "https://localhost:1234" ) ,
1084+ ) ) )
1085+ . mount ( & server)
1086+ . await ;
1087+
1088+ // When building a client for simplified sliding sync with the base server.
1089+ builder = builder. simplified_sliding_sync ( true ) ;
1090+ builder = builder. server_name_or_homeserver_url ( server. uri ( ) ) ;
1091+ let client = builder. build ( ) . await . unwrap ( ) ;
1092+
1093+ // Then a client should not use the discovered sliding sync proxy.
1094+ assert ! ( client. sliding_sync_proxy( ) . is_none( ) ) ;
1095+ }
1096+
10641097 /* Requires sliding sync */
10651098
10661099 #[ async_test]
@@ -1070,7 +1103,7 @@ pub(crate) mod tests {
10701103 // doesn't support sliding sync.
10711104 let server = MockServer :: start ( ) . await ;
10721105 let homeserver = make_mock_homeserver ( ) . await ;
1073- let mut builder = ClientBuilder :: new ( ) ;
1106+ let mut builder = make_non_sss_client_builder ( ) ;
10741107
10751108 Mock :: given ( method ( "GET" ) )
10761109 . and ( path ( "/.well-known/matrix/client" ) )
@@ -1096,7 +1129,7 @@ pub(crate) mod tests {
10961129 // sliding sync proxy.
10971130 let server = MockServer :: start ( ) . await ;
10981131 let homeserver = make_mock_homeserver ( ) . await ;
1099- let mut builder = ClientBuilder :: new ( ) ;
1132+ let mut builder = make_non_sss_client_builder ( ) ;
11001133
11011134 Mock :: given ( method ( "GET" ) )
11021135 . and ( path ( "/.well-known/matrix/client" ) )
@@ -1121,7 +1154,7 @@ pub(crate) mod tests {
11211154 // Given a homeserver without a well-known file and with a custom sliding sync
11221155 // proxy injected.
11231156 let homeserver = make_mock_homeserver ( ) . await ;
1124- let mut builder = ClientBuilder :: new ( ) ;
1157+ let mut builder = make_non_sss_client_builder ( ) ;
11251158 builder = builder. sliding_sync_proxy ( "https://localhost:1234" ) ;
11261159
11271160 // When building a client that requires sliding sync with the server's URL.
@@ -1174,4 +1207,18 @@ pub(crate) mod tests {
11741207 object
11751208 } )
11761209 }
1210+
1211+ /// These tests were built with regular sliding sync in mind so until
1212+ /// we remove it and update the tests, this makes a builder with SSS
1213+ /// disabled.
1214+ fn make_non_sss_client_builder ( ) -> ClientBuilder {
1215+ let mut builder = ClientBuilder :: new ( ) ;
1216+
1217+ #[ cfg( feature = "experimental-sliding-sync" ) ]
1218+ {
1219+ builder = builder. simplified_sliding_sync ( false ) ;
1220+ }
1221+
1222+ builder
1223+ }
11771224}
0 commit comments