From acee8794abc28b9d45a850645cee8a6ff1d259eb Mon Sep 17 00:00:00 2001
From: Dominik Hebeler <dominik@suma-ev.de>
Date: Wed, 10 Aug 2022 15:25:31 +0200
Subject: [PATCH] optimized waiting for csp

---
 metager/app/Http/Middleware/BrowserVerification.php | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/metager/app/Http/Middleware/BrowserVerification.php b/metager/app/Http/Middleware/BrowserVerification.php
index bd5867aab..c34a71427 100644
--- a/metager/app/Http/Middleware/BrowserVerification.php
+++ b/metager/app/Http/Middleware/BrowserVerification.php
@@ -124,7 +124,7 @@ class BrowserVerification
     private function waitForBV($key, $inline = false, $js_enabled = false)
     {
         $bvData = null;
-        $max_wait_time_ms = 10000;
+        $max_wait_time_ms = 15000;
         if ($inline) {
             $max_wait_time_ms = 2000;
         }
@@ -159,6 +159,8 @@ class BrowserVerification
                     $js_loaded = true;
                     $search_settings = \app()->make(SearchSettings::class);
                     $search_settings->javascript_enabled = true;
+                } elseif ($css_loaded && $js_enabled && now()->diffInSeconds($bvData["css"]["loaded"]) >= 10) {
+                    $js_loaded = true;
                 } elseif ($js_enabled === false) {
                     $js_loaded = true;
                 } elseif ($js_enabled === null && $css_loaded && now()->diffInMilliseconds($bvData["css"]["loaded"]) > $wait_time_ms) {
@@ -175,11 +177,12 @@ class BrowserVerification
                     }
                 } elseif ($css_loaded && $js_loaded && $csp_loaded !== false) {
                     // If css and javascript is both loaded we will wait a few more moments
-                    $latest_ready_state_change = $bvData["css"]["loaded"];
-                    if (\array_key_exists("js", $bvData) && \array_key_exists("loaded", $bvData["js"]) && $bvData["js"]["loaded"] > $latest_ready_state_change) {
-                        $latest_ready_state_change = $bvData["js"]["loaded"];
+                    $stop_waiting_for_csp = $bvData["css"]["loaded"]->addMilliseconds($wait_time_ms);
+                    if (\array_key_exists("js", $bvData) && \array_key_exists("loaded", $bvData["js"])) {
+                        $diff_css_js_milliseconds = $bvData["css"]["loaded"]->diffInMilliseconds($bvData["js"]["loaded"]);
+                        $stop_waiting_for_csp = $bvData["css"]["loaded"]->addMilliseconds($diff_css_js_milliseconds * 2);
                     }
-                    if (now()->diffInMilliseconds($latest_ready_state_change) > $wait_time_ms) {
+                    if (now() > $stop_waiting_for_csp) {
                         $csp_loaded = true;
                     }
                 }
-- 
GitLab