Add baseUrl to INITIAL_DATA in IndexHtmlUtil

Release-Notes: Add baseUrl to INITIAL_DATA in IndexHtmlUtil
Change-Id: I6a74f06eb1bb04365784722704043cac1b79541d
(cherry picked from commit b2b9d67de54218a3a45ea8bef3a12b95c602ed77)
diff --git a/java/com/google/gerrit/httpd/raw/IndexHtmlUtil.java b/java/com/google/gerrit/httpd/raw/IndexHtmlUtil.java
index fb28d30..3edf5f2 100644
--- a/java/com/google/gerrit/httpd/raw/IndexHtmlUtil.java
+++ b/java/com/google/gerrit/httpd/raw/IndexHtmlUtil.java
@@ -50,6 +50,7 @@
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private static final Gson GSON = OutputFormat.JSON_COMPACT.newGson();
+
   /**
    * Returns both static and dynamic parameters of {@code index.html}. The result is to be used when
    * rendering the soy template.
@@ -68,7 +69,7 @@
     data.putAll(
             staticTemplateData(
                 canonicalURL, cdnPath, faviconPath, urlParameterMap, urlInScriptTagOrdainer))
-        .putAll(dynamicTemplateData(gerritApi, requestedURL));
+        .putAll(dynamicTemplateData(gerritApi, requestedURL, canonicalURL));
     Set<String> enabledExperiments = new HashSet<>();
     enabledExperiments.addAll(experimentFeatures.getEnabledExperimentFeatures());
     // Add all experiments enabled through url
@@ -81,13 +82,20 @@
 
   /** Returns dynamic parameters of {@code index.html}. */
   public static ImmutableMap<String, Object> dynamicTemplateData(
-      GerritApi gerritApi, String requestedURL) throws RestApiException, URISyntaxException {
+      GerritApi gerritApi, String requestedURL, String canonicalURL)
+      throws RestApiException, URISyntaxException {
     ImmutableMap.Builder<String, Object> data = ImmutableMap.builder();
     Map<String, SanitizedContent> initialData = new HashMap<>();
     Server serverApi = gerritApi.config().server();
-    initialData.put("\"/config/server/info\"", serializeObject(GSON, serverApi.getInfo()));
-    initialData.put("\"/config/server/version\"", serializeObject(GSON, serverApi.getVersion()));
-    initialData.put("\"/config/server/top-menus\"", serializeObject(GSON, serverApi.topMenus()));
+    initialData.put(
+        addCanonicalUrl("/config/server/info", canonicalURL),
+        serializeObject(GSON, serverApi.getInfo()));
+    initialData.put(
+        addCanonicalUrl("/config/server/version", canonicalURL),
+        serializeObject(GSON, serverApi.getVersion()));
+    initialData.put(
+        addCanonicalUrl("/config/server/top-menus", canonicalURL),
+        serializeObject(GSON, serverApi.topMenus()));
 
     String requestedPath = IndexPreloadingUtil.getPath(requestedURL);
     IndexPreloadingUtil.RequestedPage page = IndexPreloadingUtil.parseRequestedPage(requestedPath);
@@ -110,14 +118,17 @@
 
     try {
       AccountApi accountApi = gerritApi.accounts().self();
-      initialData.put("\"/accounts/self/detail\"", serializeObject(GSON, accountApi.get()));
       initialData.put(
-          "\"/accounts/self/preferences\"", serializeObject(GSON, accountApi.getPreferences()));
+          addCanonicalUrl("/accounts/self/detail", canonicalURL),
+          serializeObject(GSON, accountApi.get()));
       initialData.put(
-          "\"/accounts/self/preferences.diff\"",
+          addCanonicalUrl("/accounts/self/preferences", canonicalURL),
+          serializeObject(GSON, accountApi.getPreferences()));
+      initialData.put(
+          addCanonicalUrl("/accounts/self/preferences.diff", canonicalURL),
           serializeObject(GSON, accountApi.getDiffPreferences()));
       initialData.put(
-          "\"/accounts/self/preferences.edit\"",
+          addCanonicalUrl("/accounts/self/preferences.edit", canonicalURL),
           serializeObject(GSON, accountApi.getEditPreferences()));
       data.put("userIsAuthenticated", true);
       if (page == RequestedPage.DASHBOARD) {
@@ -133,6 +144,16 @@
     return data.build();
   }
 
+  private static String addCanonicalUrl(String key, String canonicalURL) throws URISyntaxException {
+    String canonicalPath = computeCanonicalPath(canonicalURL);
+
+    if (canonicalPath != null) {
+      return String.format("\"%s\"", canonicalPath + key);
+    }
+
+    return String.format("\"%s\"", key);
+  }
+
   /** Returns experimentData to be used in {@code index.html}. */
   public static Set<String> experimentData(Map<String, String[]> urlParameterMap) {
     // Allow enable experiments with url
diff --git a/javatests/com/google/gerrit/httpd/raw/IndexHtmlUtilTest.java b/javatests/com/google/gerrit/httpd/raw/IndexHtmlUtilTest.java
index c06d231..03b14e6 100644
--- a/javatests/com/google/gerrit/httpd/raw/IndexHtmlUtilTest.java
+++ b/javatests/com/google/gerrit/httpd/raw/IndexHtmlUtilTest.java
@@ -114,7 +114,7 @@
     when(gerritApi.accounts()).thenReturn(accountsApi);
     when(gerritApi.config()).thenReturn(configApi);
 
-    assertThat(dynamicTemplateData(gerritApi, "/c/project/+/123"))
+    assertThat(dynamicTemplateData(gerritApi, "/c/project/+/123", ""))
         .containsAtLeast(
             "defaultChangeDetailHex", "9916394",
             "changeRequestsPath", "changes/project~123");
diff --git a/javatests/com/google/gerrit/httpd/raw/IndexServletTest.java b/javatests/com/google/gerrit/httpd/raw/IndexServletTest.java
index 06ea8b6..d582b4b 100644
--- a/javatests/com/google/gerrit/httpd/raw/IndexServletTest.java
+++ b/javatests/com/google/gerrit/httpd/raw/IndexServletTest.java
@@ -89,10 +89,10 @@
     assertThat(output)
         .contains(
             "window.INITIAL_DATA = JSON.parse("
-                + "'\\x7b\\x22\\/config\\/server\\/version\\x22: \\x22123\\x22, "
-                + "\\x22\\/config\\/server\\/info\\x22: \\x7b\\x22default_theme\\x22:"
-                + "\\x22my-default-theme\\x22\\x7d, \\x22\\/config\\/server\\/top-menus\\x22: "
-                + "\\x5b\\x5d\\x7d');");
+                + "'\\x7b\\x22foo-url\\/config\\/server\\/top-menus\\x22: \\x5b\\x5d, "
+                + "\\x22foo-url\\/config\\/server\\/info\\x22: \\x7b\\x22default_theme\\x22:"
+                + "\\x22my-default-theme\\x22\\x7d, \\x22foo-url\\/config\\/server\\/version\\x22: "
+                + "\\x22123\\x22\\x7d');");
     ImmutableSet<String> enabledDefaults =
         ExperimentFeaturesConstants.DEFAULT_ENABLED_FEATURES.stream()
             .collect(ImmutableSet.toImmutableSet());