Read user-prefs before initializing layers

This was racing with the promise made in the constructor.

Change-Id: I27b8dadeca618695ca23b8c888d089c779e2c153
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
index 463163c..90d6218 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
@@ -223,9 +223,6 @@
   @property({type: Boolean})
   _loggedIn = false;
 
-  @property({type: Boolean})
-  disableTokenHighlighting = false;
-
   @property({type: String})
   _errorMessage: string | null = null;
 
@@ -303,11 +300,6 @@
     this.addEventListener('diff-context-expanded', event =>
       this._handleDiffContextExpanded(event)
     );
-    appContext.restApiService.getPreferences().then(prefs => {
-      if (prefs?.disable_token_highlighting) {
-        this.disableTokenHighlighting = prefs.disable_token_highlighting;
-      }
-    });
   }
 
   override ready() {
@@ -335,18 +327,21 @@
     super.disconnectedCallback();
   }
 
-  initLayers() {
-    return getPluginLoader()
-      .awaitPluginsLoaded()
-      .then(() => {
-        assertIsDefined(this.path, 'path');
-        this._layers = this._getLayers(this.path);
-        this._coverageRanges = [];
-        // We kick off fetching the data here, but we don't return the promise,
-        // so awaiting initLayers() will not wait for coverage data to be
-        // completely loaded.
-        this._getCoverageData();
-      });
+  async initLayers() {
+    const preferencesPromise = appContext.restApiService.getPreferences();
+    await getPluginLoader().awaitPluginsLoaded();
+    const prefs = await preferencesPromise;
+    const enableTokenHighlight =
+      appContext.flagsService.isEnabled(KnownExperimentId.TOKEN_HIGHLIGHTING) &&
+      !prefs?.disable_token_highlighting;
+
+    assertIsDefined(this.path, 'path');
+    this._layers = this.getLayers(this.path, enableTokenHighlight);
+    this._coverageRanges = [];
+    // We kick off fetching the data here, but we don't return the promise,
+    // so awaiting initLayers() will not wait for coverage data to be
+    // completely loaded.
+    this._getCoverageData();
   }
 
   diffChanged(diff?: DiffInfo) {
@@ -418,12 +413,9 @@
     }
   }
 
-  private _getLayers(path: string): DiffLayer[] {
+  private getLayers(path: string, enableTokenHighlight: boolean): DiffLayer[] {
     const layers = [];
-    if (
-      appContext.flagsService.isEnabled(KnownExperimentId.TOKEN_HIGHLIGHTING) &&
-      !this.disableTokenHighlighting
-    ) {
+    if (enableTokenHighlight) {
       layers.push(new TokenHighlightLayer(this));
     }
     layers.push(this.syntaxLayer);
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
index b37613a..fe4a66a 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
@@ -57,7 +57,7 @@
 import {GrButton} from '../gr-button/gr-button';
 import {KnownExperimentId} from '../../../services/flags/flags';
 import {DiffInfo, DiffPreferencesInfo} from '../../../types/diff';
-import {RenderPreferences} from '../../../api/diff';
+import {DiffLayer, RenderPreferences} from '../../../api/diff';
 import {
   check,
   assertIsDefined,
@@ -205,8 +205,8 @@
   @property({type: Object})
   _selfAccount?: AccountDetailInfo;
 
-  @property({type: Boolean})
-  disableTokenHighlighting = false;
+  @property({type: Array})
+  layers: DiffLayer[] = [];
 
   get keyBindings() {
     return {
@@ -232,9 +232,7 @@
       this._handleCommentUpdate(e as CustomEvent)
     );
     appContext.restApiService.getPreferences().then(prefs => {
-      if (prefs?.disable_token_highlighting) {
-        this.disableTokenHighlighting = prefs.disable_token_highlighting;
-      }
+      this._initLayers(!!prefs?.disable_token_highlighting);
     });
   }
 
@@ -366,17 +364,14 @@
     return undefined;
   }
 
-  _getLayers(diff?: DiffInfo) {
-    if (!diff) return [];
-    const layers = [];
+  _initLayers(disableTokenHighlighting: boolean) {
     if (
       this.flagsService.isEnabled(KnownExperimentId.TOKEN_HIGHLIGHTING) &&
-      !this.disableTokenHighlighting
+      !disableTokenHighlighting
     ) {
-      layers.push(new TokenHighlightLayer(this));
+      this.layers.push(new TokenHighlightLayer(this));
     }
-    layers.push(this.syntaxLayer);
-    return layers;
+    this.layers.push(this.syntaxLayer);
   }
 
   _getUrlForViewDiff(
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts
index 0752a82..245f71c 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts
@@ -232,7 +232,7 @@
           id="diff"
           change-num="[[changeNum]]"
           diff="[[_diff]]"
-          layers="[[_getLayers(_diff)]]"
+          layers="[[layers]]"
           path="[[path]]"
           prefs="[[_prefs]]"
           render-prefs="[[_renderPrefs]]"