hotwired / turbo-android

Android framework for making Turbo native apps
MIT License
408 stars 51 forks source link

Navigation between subdomain result in requests loop and then display the page. #281

Closed jean-francois-labbe closed 6 months ago

jean-francois-labbe commented 10 months ago

Versions:

turbo 7.3.0 turbo-android 7.0.0-rc18

Context

One android application accessing two subdomains. The use case is: when launching the application the user is accessing the homepage https://choice.eu.app.example. This homepage is a small html with simple javascript site. It also imports Turbo to be compatible with the turbo-android application. There he can select a region to connect to. Depending on his choice he will be redirected to a rails application serving its region, https://us.app.exampleor https://eu.app.example

Now we want to provide an android application using turbo-android. Actually we already have on pointing to https://eu.app.example that is working great.

We changed the HOME_URL form https://eu.app.example to https://choice.eu.app.example. The BASE_URL is still https://eu.app.example. We updated the isNavigable method to check the app.example domain to allow navigation.

Issue

When opening the application the https://choice.eu.app.example is displayed correctly in the mobile application. But when we select a region the mobile application performs a lot of requests, looking like loops and finishes by displaying the https://eu.app.example/u/sign_in page (when user not logged in).

I don't understand why it performs 4 additional sets of requests, especially since it has the page to display on the second request it performs. This results in a lot of spinning and delay in the mobile application.

I even tried with the demo application. Same result.

I don't understand why it loops on those urls, why it stops at some point nor how to debug it.

Here are the logs of the application. You can see the first two visitProposedLocation that I suppose correct. And then more visitPropopsedLocation that points to the same urls as the first two visitProposedLocation.

16:07:36.884 TurboLog                 D  visitProposedToLocation ........... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=ADVANCE, snapshotHTML=null, response=null)]
16:07:36.885 TurboLog                 D  shouldNavigateToLocation .......... [session: main, location: https://eu.app.example/, shouldNavigate: true, currentFragment: WebHomeFragment]
16:07:36.887 TurboLog                 D  navigate .......................... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=ADVANCE, snapshotHTML=null, response=null), currentContext: DEFAULT, newContext: DEFAULT, presentation: REPLACE_ROOT, currentFragment: WebHomeFragment]
16:07:36.887 TurboLog                 D  navigateWithinContext ............. [session: main, location: https://eu.app.example/, presentation: REPLACE_ROOT, currentFragment: WebHomeFragment]
16:07:36.902 TurboLog                 D  shouldOverrideUrlLoading .......... [session: main, location: https://eu.app.example/, shouldOverride: true, isColdBootRedirect: false, willProposeVisit: true]
16:07:36.911 TurboLog                 D  replaceRootLocation ............... [session: main, location: https://eu.app.example/, uri: turbo://fragment/web/home, currentFragment: WebHomeFragment]
16:07:36.922 TurboLog                 D  fragment.onStop ................... [session: main, location: https://choice.eu.app.example, fragment: WebHomeFragment]
16:07:36.928 TurboLog                 D  fragment.onViewCreated ............ [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:36.930 TurboLog                 D  fragment.onStart .................. [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:36.946 TurboLog                 D  visitLocation ..................... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=ADVANCE, snapshotHTML=null, response=null), restorationIdentifier: ]
16:07:36.949 TurboLog                 D  visitStarted ...................... [session: main, location: https://eu.app.example/, visitIdentifier: 7d888a54-0985-4301-82e0-a1485e349920, visitHasCachedSnapshot: false]
16:07:36.951 TurboLog                 D  visitRequestStarted ............... [session: main, visitIdentifier: 7d888a54-0985-4301-82e0-a1485e349920]
16:07:37.216 TurboLog                 D  visitRequestFinished .............. [session: main, visitIdentifier: 7d888a54-0985-4301-82e0-a1485e349920]
16:07:37.228 TurboLog                 D  visitRequestCompleted ............. [session: main, visitIdentifier: 7d888a54-0985-4301-82e0-a1485e349920]
16:07:37.241 TurboLog                 D  pageInvalidated ................... [session: main]
16:07:37.243 TurboLog                 D  reset ............................. [session: main]
16:07:37.243 TurboLog                 D  visitLocationAsColdBoot ........... [session: main, location: https://eu.app.example/]
16:07:37.244 TurboLog                 D  visitProposedToLocation ........... [session: main, location: https://eu.app.example/u/sign_in, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=TurboVisitResponse(statusCode=200, responseHTML=<!DOCTYPE html>
                                         <html>
                                         <head>
                                         <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
                                         <meta charset='utf-8'>
                                         <meta content='width=device-width, initial-scale=1, maximum-scale=5, user-scalable=0' name='viewport'>
                                         <meta content='en-GB' name='locale'>

                                         <title>App</title>
                                         <meta name="csrf-param" content="authenticity_token" />
                                         <meta name="csrf-token" content="cyPsVVeg8NMJpu0cPREOaPGYB/06LA80I+Y9pVxj0xFqIkHKSw6S9dK0pkfp+CuphgYsHXzJ2v8L9xQRRpwxx==" />
                                         <link href='/manifest.json' rel='manifest'>
                                         <meta content='yes' name='apple-mobile-web-app-capable'>
                                         <meta content='#337079' name='theme-color'>
                                         </head>
                                         <body>
                                         ...
                                         </body>
                                         </html>
                                         ))]
16:07:37.256 TurboLog                 D  shouldNavigateToLocation .......... [session: main, location: https://eu.app.example/u/sign_in, shouldNavigate: true, currentFragment: WebHomeFragment]
16:07:37.258 TurboLog                 D  navigate .......................... [session: main, location: https://eu.app.example/u/sign_in, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=TurboVisitResponse(statusCode=200, responseHTML=<!DOCTYPE html>
                                         <html>
                                         <head>
                                         <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
                                         <meta charset='utf-8'>
                                         <meta content='width=device-width, initial-scale=1, maximum-scale=5, user-scalable=0' name='viewport'>
                                         <meta content='en-GB' name='locale'>

                                         <title>App</title>
                                         <meta name="csrf-param" content="authenticity_token" />
                                         <meta name="csrf-token" content="cyPsVVeg8NMJpu0cPREOaPGYB/06LA80I+Y9pVxj0xFqIkHKSw6S9dK0pkfp+CuphgYsHXzJ2v8L9xQRRpwxx==" />
                                         <link href='/manifest.json' rel='manifest'>
                                         <meta content='yes' name='apple-mobile-web-app-capable'>
                                         <meta content='#337079' name='theme-color'>
                                         </head>
                                         <body>
                                         ...
                                         </body>
                                         </html>
                                         )), currentContext: DEFAULT, newContext: DEFAULT, presentation: REPLACE, currentFragment: WebHomeFragment]
16:07:37.258 TurboLog                 D  navigateWithinContext ............. [session: main, location: https://eu.app.example/u/sign_in, presentation: REPLACE, currentFragment: WebHomeFragment]
16:07:37.275 TurboLog                 D  visitRendered ..................... [session: main, visitIdentifier: 7d888a54-0985-4301-82e0-a1485e349920]
16:07:37.281 TurboLog                 D  popFromBackStack .................. [session: main, location: https://eu.app.example/, currentFragment: WebHomeFragment]
16:07:37.282 TurboLog                 D  navigateToLocation ................ [session: main, location: https://eu.app.example/u/sign_in, uri: turbo://fragment/web, currentFragment: WebHomeFragment]
16:07:37.291 TurboLog                 D  fragment.onStop ................... [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:37.296 TurboLog                 D  fragment.onViewCreated ............ [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:37.298 TurboLog                 D  fragment.onStart .................. [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:37.342 TurboLog                 D  onPageStarted ..................... [session: main, location: https://choice.eu.app.example/]
16:07:37.512 TurboLog                 D  onPageFinished .................... [session: main, location: https://choice.eu.app.example/, progress: 80]
16:07:37.512 TurboLog                 D  installBridge ..................... [session: main, location: https://choice.eu.app.example/]
16:07:37.514 TurboLog                 D  coldBootRedirect .................. [session: main, location: https://eu.app.example/]
16:07:37.514 TurboLog                 D  reset ............................. [session: main]
16:07:37.515 TurboLog                 D  visitProposedToLocation ........... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=null)]
16:07:37.515 TurboLog                 D  shouldNavigateToLocation .......... [session: main, location: https://eu.app.example/, shouldNavigate: true, currentFragment: WebFragment]
16:07:37.516 TurboLog                 D  navigate .......................... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=null), currentContext: DEFAULT, newContext: DEFAULT, presentation: REPLACE_ROOT, currentFragment: WebFragment]
16:07:37.516 TurboLog                 D  navigateWithinContext ............. [session: main, location: https://eu.app.example/, presentation: REPLACE_ROOT, currentFragment: WebFragment]
16:07:37.525 TurboLog                 D  shouldOverrideUrlLoading .......... [session: main, location: https://eu.app.example/, shouldOverride: true, isColdBootRedirect: true, willProposeVisit: true]
16:07:37.545 TurboLog                 D  replaceRootLocation ............... [session: main, location: https://eu.app.example/, uri: turbo://fragment/web/home, currentFragment: WebFragment]
16:07:37.550 TurboLog                 D  turboIsReady ...................... [session: main, isReady: true]
16:07:37.550 TurboLog                 D  renderVisitForColdBoot ............ [session: main, coldBootVisitIdentifier: ]
16:07:37.552 TurboLog                 D  pageLoaded ........................ [session: main, restorationIdentifier: 19c2872a-5281-479b-b45d-9b88a69589d1]
16:07:37.555 TurboLog                 D  fragment.onStop ................... [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:37.560 TurboLog                 D  fragment.onViewCreated ............ [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:37.562 TurboLog                 D  fragment.onStart .................. [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:37.564 TurboLog                 D  visitRendered ..................... [session: main, visitIdentifier: ]
16:07:37.581 TurboLog                 D  visitLocation ..................... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=ADVANCE, snapshotHTML=null, response=null), restorationIdentifier: ]
16:07:37.583 TurboLog                 D  visitStarted ...................... [session: main, location: https://eu.app.example/, visitIdentifier: 6e388d9c-2c14-4d6e-ae97-a1e87049b4bd, visitHasCachedSnapshot: false]
16:07:37.585 TurboLog                 D  visitRequestStarted ............... [session: main, visitIdentifier: 6e388d9c-2c14-4d6e-ae97-a1e87049b4bd]
16:07:37.748 TurboLog                 D  visitRequestFinished .............. [session: main, visitIdentifier: 6e388d9c-2c14-4d6e-ae97-a1e87049b4bd]
16:07:37.761 TurboLog                 D  visitRequestCompleted ............. [session: main, visitIdentifier: 6e388d9c-2c14-4d6e-ae97-a1e87049b4bd]
16:07:37.772 TurboLog                 D  pageInvalidated ................... [session: main]
16:07:37.774 TurboLog                 D  reset ............................. [session: main]
16:07:37.774 TurboLog                 D  visitLocationAsColdBoot ........... [session: main, location: https://eu.app.example/]
16:07:37.775 TurboLog                 D  visitProposedToLocation ........... [session: main, location: https://eu.app.example/u/sign_in, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=TurboVisitResponse(statusCode=200, responseHTML=<!DOCTYPE html>
                                         <html>
                                         <head>
                                         <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
                                         <meta charset='utf-8'>
                                         <meta content='width=device-width, initial-scale=1, maximum-scale=5, user-scalable=0' name='viewport'>
                                         <meta content='en-GB' name='locale'>

                                         <title>App</title>
                                         <meta name="csrf-param" content="authenticity_token" />
                                         <meta name="csrf-token" content="cyPsVVeg8NMJpu0cPREOaPGYB/06LA80I+Y9pVxj0xFqIkHKSw6S9dK0pkfp+CuphgYsHXzJ2v8L9xQRRpwxx==" />
                                         <link href='/manifest.json' rel='manifest'>
                                         <meta content='yes' name='apple-mobile-web-app-capable'>
                                         <meta content='#337079' name='theme-color'>
                                         </head>
                                         <body>
                                         ...
                                         </body>
                                         </html>
                                         ))]
16:07:37.790 TurboLog                 D  shouldNavigateToLocation .......... [session: main, location: https://eu.app.example/u/sign_in, shouldNavigate: true, currentFragment: WebHomeFragment]
16:07:37.790 TurboLog                 D  navigate .......................... [session: main, location: https://eu.app.example/u/sign_in, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=TurboVisitResponse(statusCode=200, responseHTML=<!DOCTYPE html>
                                         <html>
                                         <head>
                                         <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
                                         <meta charset='utf-8'>
                                         <meta content='width=device-width, initial-scale=1, maximum-scale=5, user-scalable=0' name='viewport'>
                                         <meta content='en-GB' name='locale'>

                                         <title>App</title>
                                         <meta name="csrf-param" content="authenticity_token" />
                                         <meta name="csrf-token" content="cyPsVVeg8NMJpu0cPREOaPGYB/06LA80I+Y9pVxj0xFqIkHKSw6S9dK0pkfp+CuphgYsHXzJ2v8L9xQRRpwxx==" />
                                         <link href='/manifest.json' rel='manifest'>
                                         <meta content='yes' name='apple-mobile-web-app-capable'>
                                         <meta content='#337079' name='theme-color'>
                                         </head>
                                         <body>
                                         ...
                                         </body>
                                         </html>
                                         ))]
                                         )), currentContext: DEFAULT, newContext: DEFAULT, presentation: POP, currentFragment: WebHomeFragment]
16:07:37.790 TurboLog                 D  navigateWithinContext ............. [session: main, location: https://eu.app.example/u/sign_in, presentation: POP, currentFragment: WebHomeFragment]
16:07:37.804 TurboLog                 D  visitRendered ..................... [session: main, visitIdentifier: 6e388d9c-2c14-4d6e-ae97-a1e87049b4bd]
16:07:37.810 TurboLog                 D  popFromBackStack .................. [session: main, location: https://eu.app.example/, currentFragment: WebHomeFragment]
16:07:37.823 TurboLog                 D  fragment.onStop ................... [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:37.828 TurboLog                 D  fragment.onViewCreated ............ [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:37.830 TurboLog                 D  fragment.onStart .................. [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:37.871 TurboLog                 D  onPageStarted ..................... [session: main, location: https://choice.eu.app.example/]
16:07:37.874 TurboLog                 D  onPageFinished .................... [session: main, location: https://choice.eu.app.example/, progress: 80]
16:07:37.874 TurboLog                 D  installBridge ..................... [session: main, location: https://choice.eu.app.example/]
16:07:37.882 TurboLog                 D  coldBootRedirect .................. [session: main, location: https://eu.app.example/]
16:07:37.882 TurboLog                 D  reset ............................. [session: main]
16:07:37.882 TurboLog                 D  visitProposedToLocation ........... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=null)]
16:07:37.882 TurboLog                 D  shouldNavigateToLocation .......... [session: main, location: https://eu.app.example/, shouldNavigate: true, currentFragment: WebFragment]
16:07:37.882 TurboLog                 D  navigate .......................... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=null), currentContext: DEFAULT, newContext: DEFAULT, presentation: REPLACE_ROOT, currentFragment: WebFragment]
16:07:37.883 TurboLog                 D  navigateWithinContext ............. [session: main, location: https://eu.app.example/, presentation: REPLACE_ROOT, currentFragment: WebFragment]
16:07:37.892 TurboLog                 D  shouldOverrideUrlLoading .......... [session: main, location: https://eu.app.example/, shouldOverride: true, isColdBootRedirect: true, willProposeVisit: true]
16:07:37.898 TurboLog                 D  replaceRootLocation ............... [session: main, location: https://eu.app.example/, uri: turbo://fragment/web/home, currentFragment: WebFragment]
16:07:37.903 TurboLog                 D  turboIsReady ...................... [session: main, isReady: true]
16:07:37.903 TurboLog                 D  renderVisitForColdBoot ............ [session: main, coldBootVisitIdentifier: ]
16:07:37.904 TurboLog                 D  pageLoaded ........................ [session: main, restorationIdentifier: 30d9b921-68cc-4c6a-8764-b859e0bca173]
16:07:37.907 TurboLog                 D  fragment.onStop ................... [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:37.911 TurboLog                 D  fragment.onViewCreated ............ [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:37.912 TurboLog                 D  fragment.onStart .................. [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:37.914 TurboLog                 D  visitRendered ..................... [session: main, visitIdentifier: ]
16:07:37.931 TurboLog                 D  visitLocation ..................... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=ADVANCE, snapshotHTML=null, response=null), restorationIdentifier: ]
16:07:37.932 TurboLog                 D  visitStarted ...................... [session: main, location: https://eu.app.example/, visitIdentifier: 1a45d320-9d94-4541-867b-287b8127144b, visitHasCachedSnapshot: false]
16:07:37.934 TurboLog                 D  visitRequestStarted ............... [session: main, visitIdentifier: 1a45d320-9d94-4541-867b-287b8127144b]
16:07:37.955 TurboLog                 D  onPageCommitVisible ............... [session: main, location: https://choice.eu.app.example/, progress: 100]
16:07:37.955 TurboLog                 D  visitVisualStateComplete .......... [session: main, visitIdentifier: ]
16:07:37.956 TurboLog                 D  onPageCommitVisible ............... [session: main, location: https://choice.eu.app.example/, progress: 100]
16:07:37.957 TurboLog                 D  visitVisualStateComplete .......... [session: main, visitIdentifier: ]
16:07:38.122 TurboLog                 D  visitRequestFinished .............. [session: main, visitIdentifier: 1a45d320-9d94-4541-867b-287b8127144b]
16:07:38.123 TurboLog                 D  visitRequestCompleted ............. [session: main, visitIdentifier: 1a45d320-9d94-4541-867b-287b8127144b]
16:07:38.140 TurboLog                 D  pageInvalidated ................... [session: main]
16:07:38.141 TurboLog                 D  reset ............................. [session: main]
16:07:38.141 TurboLog                 D  visitLocationAsColdBoot ........... [session: main, location: https://eu.app.example/]
16:07:38.142 TurboLog                 D  visitProposedToLocation ........... [session: main, location: https://eu.app.example/u/sign_in, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=TurboVisitResponse(statusCode=200, responseHTML=<!DOCTYPE html>
                                         <html>
                                         <head>
                                         <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
                                         <meta charset='utf-8'>
                                         <meta content='width=device-width, initial-scale=1, maximum-scale=5, user-scalable=0' name='viewport'>
                                         <meta content='en-GB' name='locale'>

                                         <title>App</title>
                                         <meta name="csrf-param" content="authenticity_token" />
                                         <meta name="csrf-token" content="cyPsVVeg8NMJpu0cPREOaPGYB/06LA80I+Y9pVxj0xFqIkHKSw6S9dK0pkfp+CuphgYsHXzJ2v8L9xQRRpwxx==" />
                                         <link href='/manifest.json' rel='manifest'>
                                         <meta content='yes' name='apple-mobile-web-app-capable'>
                                         <meta content='#337079' name='theme-color'>
                                         </head>
                                         <body>
                                         ...
                                         </body>
                                         </html>
                                         ))]
16:07:38.156 TurboLog                 D  shouldNavigateToLocation .......... [session: main, location: https://eu.app.example/u/sign_in, shouldNavigate: true, currentFragment: WebHomeFragment]
16:07:38.156 TurboLog                 D  navigate .......................... [session: main, location: https://eu.app.example/u/sign_in, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=TurboVisitResponse(statusCode=200, responseHTML=<!DOCTYPE html>
                                         <html>
                                         <head>
                                         <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
                                         <meta charset='utf-8'>
                                         <meta content='width=device-width, initial-scale=1, maximum-scale=5, user-scalable=0' name='viewport'>
                                         <meta content='en-GB' name='locale'>

                                         <title>App</title>
                                         <meta name="csrf-param" content="authenticity_token" />
                                         <meta name="csrf-token" content="cyPsVVeg8NMJpu0cPREOaPGYB/06LA80I+Y9pVxj0xFqIkHKSw6S9dK0pkfp+CuphgYsHXzJ2v8L9xQRRpwxx==" />
                                         <link href='/manifest.json' rel='manifest'>
                                         <meta content='yes' name='apple-mobile-web-app-capable'>
                                         <meta content='#337079' name='theme-color'>
                                         </head>
                                         <body>
                                         ...
                                         </body>
                                         </html>
                                         )), currentContext: DEFAULT, newContext: DEFAULT, presentation: POP, currentFragment: WebHomeFragment]
16:07:38.156 TurboLog                 D  navigateWithinContext ............. [session: main, location: https://eu.app.example/u/sign_in, presentation: POP, currentFragment: WebHomeFragment]
16:07:38.171 TurboLog                 D  visitRendered ..................... [session: main, visitIdentifier: 1a45d320-9d94-4541-867b-287b8127144b]
16:07:38.177 TurboLog                 D  popFromBackStack .................. [session: main, location: https://eu.app.example/, currentFragment: WebHomeFragment]
16:07:38.188 TurboLog                 D  fragment.onStop ................... [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:38.192 TurboLog                 D  fragment.onViewCreated ............ [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:38.194 TurboLog                 D  fragment.onStart .................. [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:38.225 TurboLog                 D  onPageStarted ..................... [session: main, location: https://choice.eu.app.example/]
16:07:38.229 TurboLog                 D  onPageFinished .................... [session: main, location: https://choice.eu.app.example/, progress: 80]
16:07:38.229 TurboLog                 D  installBridge ..................... [session: main, location: https://choice.eu.app.example/]
16:07:38.232 TurboLog                 D  coldBootRedirect .................. [session: main, location: https://eu.app.example/]
16:07:38.232 TurboLog                 D  reset ............................. [session: main]
16:07:38.232 TurboLog                 D  visitProposedToLocation ........... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=null)]
16:07:38.233 TurboLog                 D  shouldNavigateToLocation .......... [session: main, location: https://eu.app.example/, shouldNavigate: true, currentFragment: WebFragment]
16:07:38.233 TurboLog                 D  navigate .......................... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=null), currentContext: DEFAULT, newContext: DEFAULT, presentation: REPLACE_ROOT, currentFragment: WebFragment]
16:07:38.233 TurboLog                 D  navigateWithinContext ............. [session: main, location: https://eu.app.example/, presentation: REPLACE_ROOT, currentFragment: WebFragment]
16:07:38.241 TurboLog                 D  shouldOverrideUrlLoading .......... [session: main, location: https://eu.app.example/, shouldOverride: true, isColdBootRedirect: true, willProposeVisit: true]
16:07:38.255 TurboLog                 D  replaceRootLocation ............... [session: main, location: https://eu.app.example/, uri: turbo://fragment/web/home, currentFragment: WebFragment]
16:07:38.259 TurboLog                 D  fragment.onStop ................... [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:38.262 TurboLog                 D  turboIsReady ...................... [session: main, isReady: true]
16:07:38.262 TurboLog                 D  renderVisitForColdBoot ............ [session: main, coldBootVisitIdentifier: ]
16:07:38.263 TurboLog                 D  pageLoaded ........................ [session: main, restorationIdentifier: 53db7416-971d-46b7-81dc-780a6583dc92]
16:07:38.266 TurboLog                 D  fragment.onViewCreated ............ [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:38.268 TurboLog                 D  fragment.onStart .................. [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:38.273 TurboLog                 D  visitRendered ..................... [session: main, visitIdentifier: ]
16:07:38.284 TurboLog                 D  visitLocation ..................... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=ADVANCE, snapshotHTML=null, response=null), restorationIdentifier: ]
16:07:38.285 TurboLog                 D  visitStarted ...................... [session: main, location: https://eu.app.example/, visitIdentifier: c73e5729-c61d-4ae1-bb2e-4a6a06a93da9, visitHasCachedSnapshot: false]
16:07:38.288 TurboLog                 D  visitRequestStarted ............... [session: main, visitIdentifier: c73e5729-c61d-4ae1-bb2e-4a6a06a93da9]
16:07:38.475 TurboLog                 D  visitRequestFinished .............. [session: main, visitIdentifier: c73e5729-c61d-4ae1-bb2e-4a6a06a93da9]
16:07:38.476 TurboLog                 D  visitRequestCompleted ............. [session: main, visitIdentifier: c73e5729-c61d-4ae1-bb2e-4a6a06a93da9]
16:07:38.491 TurboLog                 D  pageInvalidated ................... [session: main]
16:07:38.493 TurboLog                 D  visitProposedToLocation ........... [session: main, location: https://eu.app.example/u/sign_in, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=TurboVisitResponse(statusCode=200, responseHTML=<!DOCTYPE html>
                                         <html>
                                         <head>
                                         <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
                                         <meta charset='utf-8'>
                                         <meta content='width=device-width, initial-scale=1, maximum-scale=5, user-scalable=0' name='viewport'>
                                         <meta content='en-GB' name='locale'>

                                         <title>App</title>
                                         <meta name="csrf-param" content="authenticity_token" />
                                         <meta name="csrf-token" content="cyPsVVeg8NMJpu0cPREOaPGYB/06LA80I+Y9pVxj0xFqIkHKSw6S9dK0pkfp+CuphgYsHXzJ2v8L9xQRRpwxx==" />
                                         <link href='/manifest.json' rel='manifest'>
                                         <meta content='yes' name='apple-mobile-web-app-capable'>
                                         <meta content='#337079' name='theme-color'>
                                         </head>
                                         <body>
                                         ...
                                         </body>
                                         </html>
                                         ))]
16:07:38.493 TurboLog                 D  reset ............................. [session: main]
16:07:38.493 TurboLog                 D  visitLocationAsColdBoot ........... [session: main, location: https://eu.app.example/]
16:07:38.506 TurboLog                 D  shouldNavigateToLocation .......... [session: main, location: https://eu.app.example/u/sign_in, shouldNavigate: true, currentFragment: WebHomeFragment]
16:07:38.507 TurboLog                 D  navigate .......................... [session: main, location: https://eu.app.example/u/sign_in, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=TurboVisitResponse(statusCode=200, responseHTML=<!DOCTYPE html>
                                         <html>
                                         <head>
                                         <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
                                         <meta charset='utf-8'>
                                         <meta content='width=device-width, initial-scale=1, maximum-scale=5, user-scalable=0' name='viewport'>
                                         <meta content='en-GB' name='locale'>

                                         <title>App</title>
                                         <meta name="csrf-param" content="authenticity_token" />
                                         <meta name="csrf-token" content="cyPsVVeg8NMJpu0cPREOaPGYB/06LA80I+Y9pVxj0xFqIkHKSw6S9dK0pkfp+CuphgYsHXzJ2v8L9xQRRpwxx==" />
                                         <link href='/manifest.json' rel='manifest'>
                                         <meta content='yes' name='apple-mobile-web-app-capable'>
                                         <meta content='#337079' name='theme-color'>
                                         </head>
                                         <body>
                                         ...
                                         </body>
                                         </html>
                                         )), currentContext: DEFAULT, newContext: DEFAULT, presentation: POP, currentFragment: WebHomeFragment]
16:07:38.507 TurboLog                 D  navigateWithinContext ............. [session: main, location: https://eu.app.example/u/sign_in, presentation: POP, currentFragment: WebHomeFragment]
16:07:38.521 TurboLog                 D  visitRendered ..................... [session: main, visitIdentifier: c73e5729-c61d-4ae1-bb2e-4a6a06a93da9]
16:07:38.527 TurboLog                 D  popFromBackStack .................. [session: main, location: https://eu.app.example/, currentFragment: WebHomeFragment]
16:07:38.539 TurboLog                 D  fragment.onStop ................... [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:38.544 TurboLog                 D  fragment.onViewCreated ............ [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:38.547 TurboLog                 D  fragment.onStart .................. [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:38.568 TurboLog                 D  coldBootRedirect .................. [session: main, location: https://eu.app.example/]
16:07:38.568 TurboLog                 D  reset ............................. [session: main]
16:07:38.568 TurboLog                 D  visitProposedToLocation ........... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=null)]
16:07:38.568 TurboLog                 D  shouldNavigateToLocation .......... [session: main, location: https://eu.app.example/, shouldNavigate: true, currentFragment: WebFragment]
16:07:38.568 TurboLog                 D  navigate .......................... [session: main, location: https://eu.app.example/, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=null), currentContext: DEFAULT, newContext: DEFAULT, presentation: REPLACE_ROOT, currentFragment: WebFragment]
16:07:38.568 TurboLog                 D  navigateWithinContext ............. [session: main, location: https://eu.app.example/, presentation: REPLACE_ROOT, currentFragment: WebFragment]
16:07:38.576 TurboLog                 D  shouldOverrideUrlLoading .......... [session: main, location: https://eu.app.example/, shouldOverride: true, isColdBootRedirect: true, willProposeVisit: true]
16:07:38.578 TurboLog                 D  onPageStarted ..................... [session: main, location: https://choice.eu.app.example/]
16:07:38.585 TurboLog                 D  replaceRootLocation ............... [session: main, location: https://eu.app.example/, uri: turbo://fragment/web/home, currentFragment: WebFragment]
16:07:38.589 TurboLog                 D  fragment.onStop ................... [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:38.593 TurboLog                 D  fragment.onViewCreated ............ [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:38.595 TurboLog                 D  fragment.onStart .................. [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:38.613 TurboLog                 D  visitLocationAsColdBoot ........... [session: main, location: https://eu.app.example/]
16:07:38.738 TurboLog                 D  onPageCommitVisible ............... [session: main, location: https://choice.eu.app.example/, progress: 10]
16:07:38.738 TurboLog                 D  visitVisualStateComplete .......... [session: main, visitIdentifier: ]
16:07:38.739 TurboLog                 D  onPageCommitVisible ............... [session: main, location: https://choice.eu.app.example/, progress: 10]
16:07:38.789 TurboLog                 D  coldBootRedirect .................. [session: main, location: https://eu.app.example/u/sign_in]
16:07:38.789 TurboLog                 D  reset ............................. [session: main]
16:07:38.790 TurboLog                 D  visitProposedToLocation ........... [session: main, location: https://eu.app.example/u/sign_in, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=null)]
16:07:38.790 TurboLog                 D  shouldNavigateToLocation .......... [session: main, location: https://eu.app.example/u/sign_in, shouldNavigate: true, currentFragment: WebHomeFragment]
16:07:38.790 TurboLog                 D  navigate .......................... [session: main, location: https://eu.app.example/u/sign_in, options: TurboVisitOptions(action=REPLACE, snapshotHTML=null, response=null), currentContext: DEFAULT, newContext: DEFAULT, presentation: POP, currentFragment: WebHomeFragment]
16:07:38.790 TurboLog                 D  navigateWithinContext ............. [session: main, location: https://eu.app.example/u/sign_in, presentation: POP, currentFragment: WebHomeFragment]
16:07:38.796 TurboLog                 D  shouldOverrideUrlLoading .......... [session: main, location: https://eu.app.example/u/sign_in, shouldOverride: true, isColdBootRedirect: true, willProposeVisit: true]
16:07:38.809 TurboLog                 D  popFromBackStack .................. [session: main, location: https://eu.app.example/, currentFragment: WebHomeFragment]
16:07:38.822 TurboLog                 D  fragment.onStop ................... [session: main, location: https://eu.app.example/, fragment: WebHomeFragment]
16:07:38.826 TurboLog                 D  fragment.onViewCreated ............ [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:38.827 TurboLog                 D  fragment.onStart .................. [session: main, location: https://eu.app.example/u/sign_in, fragment: WebFragment]
16:07:38.847 TurboLog                 D  visitLocationAsColdBoot ........... [session: main, location: https://eu.app.example/u/sign_in]
16:07:38.949 TurboLog                 D  onPageStarted ..................... [session: main, location: https://eu.app.example/u/sign_in]
16:07:39.733 TurboLog                 D  onPageFinished .................... [session: main, location: https://eu.app.example/u/sign_in, progress: 70]
16:07:39.733 TurboLog                 D  installBridge ..................... [session: main, location: https://eu.app.example/u/sign_in]
16:07:39.800 TurboLog                 D  turboIsReady ...................... [session: main, isReady: true]
16:07:39.800 TurboLog                 D  renderVisitForColdBoot ............ [session: main, coldBootVisitIdentifier: 2011755164]
16:07:39.822 TurboLog                 D  pageLoaded ........................ [session: main, restorationIdentifier: 616d26d7-a52e-4944-8a09-4e8ce87e7b67]
16:07:39.823 TurboLog                 D  visitRendered ..................... [session: main, visitIdentifier: 2011755164]
16:07:39.827 TurboLog                 D  onPageCommitVisible ............... [session: main, location: https://eu.app.example/u/sign_in, progress: 70]
16:07:39.838 TurboLog                 D  visitVisualStateComplete .......... [session: main, visitIdentifier: 2011755164]