Some applications truncates the last closing parenthesis in perf dashboard URL
[WebKit-https.git] / Websites / perf.webkit.org / public / v3 / pages / page-router.js
index 6d04ef1..cc782d5 100644 (file)
@@ -140,9 +140,24 @@ class PageRouter {
 
     _deserializeHashQueryValue(value)
     {
+        var json = value.replace(/\(/g, '[').replace(/\)/g, ']').replace(/-/g, ',');
         try {
-            return JSON.parse(value.replace(/\(/g, '[').replace(/\)/g, ']').replace(/-/g, ','));
+            return JSON.parse(json);
         } catch (error) {
+
+            // Some applications don't linkify two consecutive closing parentheses: )).
+            // Try fixing adding one extra parenthesis to see if that works.
+            function count(regex)
+            {
+                var match = json.match(regex);
+                return match ? match.length : 0;
+            }
+            var missingClosingBrackets = count(/\[/g) - count(/\]/g);
+            var fix = new Array(missingClosingBrackets).fill(']').join('');
+            try {
+                return JSON.parse(json + fix);
+            } catch (newError) { }
+
             return value;
         }
     }