Merge "Fix Delete vote button not checking removable_labels."
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt
index 539008d..e73e17b 100644
--- a/Documentation/config-gerrit.txt
+++ b/Documentation/config-gerrit.txt
@@ -4605,9 +4605,7 @@
 Defines how Gerrit authenticates with the server. When set to `GSSAPI`
 Gerrit will use Kerberos. To use kerberos the
 `java.security.auth.login.config` system property must point to a
-login to a JAAS configuration file and, if Java 6 is used, the system
-property `java.security.krb5.conf` must point to the appropriate
-krb5.ini file with references to the KDC.
+login to a JAAS configuration file.
 
 Typical jaas.conf.
 
@@ -4621,8 +4619,6 @@
 };
 ----
 
-See Java documentation on how to create the krb5.ini file.
-
 Note the `renewTGT` property to make sure the TGT does not expire,
 and `useTicketCache` to use the TGT supplied by the operating system. As
 the whole point of using GSSAPI is to have passwordless authentication
diff --git a/java/com/google/gerrit/server/git/ChangesByProjectCacheImpl.java b/java/com/google/gerrit/server/git/ChangesByProjectCacheImpl.java
index 29da503..b64d872 100644
--- a/java/com/google/gerrit/server/git/ChangesByProjectCacheImpl.java
+++ b/java/com/google/gerrit/server/git/ChangesByProjectCacheImpl.java
@@ -170,7 +170,7 @@
 
   @VisibleForTesting
   public static class CachedProjectChanges {
-    private record ChangeDataUpdateResult(Collection<ChangeData> cds, boolean anyUpdated) {}
+    public record ChangeDataUpdateResult(Collection<ChangeData> cds, boolean anyUpdated) {}
 
     Map<String, Map<Change.Id, ObjectId>> metaObjectIdByNonPrivateChangeByBranch =
         new ConcurrentHashMap<>(); // BranchNameKey "normalized" to a String to dedup project
@@ -208,6 +208,7 @@
             anyUpdated = true;
             // Do not let a bad change prevent other changes from being available.
             logger.atFinest().withCause(ex).log("Can't load changeData for %s", id);
+            continue;
           }
           cds.add(cd);
         }
diff --git a/javatests/com/google/gerrit/server/git/ChangesByProjectCacheTest.java b/javatests/com/google/gerrit/server/git/ChangesByProjectCacheTest.java
index ad5d4ce..9529db1 100644
--- a/javatests/com/google/gerrit/server/git/ChangesByProjectCacheTest.java
+++ b/javatests/com/google/gerrit/server/git/ChangesByProjectCacheTest.java
@@ -15,6 +15,8 @@
 package com.google.gerrit.server.git;
 
 import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import com.google.common.collect.ImmutableTable;
 import com.google.gerrit.entities.Account;
@@ -26,6 +28,7 @@
 import com.google.gerrit.server.notedb.AbstractChangeNotesTest;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.notedb.ChangeUpdate;
+import com.google.gerrit.server.notedb.InvalidServerIdException;
 import com.google.gerrit.server.notedb.ReviewerStateInternal;
 import com.google.gerrit.server.query.change.ChangeData;
 import java.time.Instant;
@@ -36,6 +39,15 @@
 import org.junit.Test;
 
 public final class ChangesByProjectCacheTest extends AbstractChangeNotesTest {
+
+  ChangeData.Factory cdFactory;
+
+  @Override
+  public void setUpTestEnvironment() throws Exception {
+    cdFactory = mock(ChangeData.Factory.class);
+    super.setUpTestEnvironment();
+  }
+
   @Test
   public void cachedProjectChangesSerializer() throws Exception {
     ChangeData cd1 = createChange(false, true);
@@ -58,6 +70,34 @@
     }
   }
 
+  @Test
+  public void updateChangeDatasShouldSkipForeignServerIdChanges() throws Exception {
+    // Create change with the Gerrit's server-id
+    ChangeData validChange = createChange(false, false);
+    when(cdFactory.create(project, validChange.getId())).thenReturn(validChange);
+    // Create change with a foreign server-id
+    ChangeData invalidChange = createChange(false, false);
+    when(cdFactory.create(project, invalidChange.getId()))
+        .thenThrow(new InvalidServerIdException(LOCAL_SERVER_ID, "foreign-sever-id"));
+
+    CachedProjectChanges cachedProjectChanges =
+        new CachedProjectChanges(List.of(validChange, invalidChange));
+
+    CachedProjectChanges.ChangeDataUpdateResult result =
+        cachedProjectChanges.updateChangeDatas(
+            project,
+            cdFactory,
+            Map.of(
+                validChange.getId(),
+                validChange.metaRevisionOrThrow(),
+                invalidChange.getId(),
+                invalidChange.metaRevisionOrThrow()),
+            "Test");
+
+    assertThat(result.cds()).doesNotContain(null);
+    assertThat(result.cds()).containsExactly(validChange);
+  }
+
   private ChangeData createChange(boolean isPrivate, boolean hasReviewers) throws Exception {
     Change change = newChange();
     if (isPrivate) {
diff --git a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.ts b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.ts
index 7da1513..ed4c9c5 100644
--- a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.ts
@@ -1676,7 +1676,7 @@
           assert.equal(confirmRevertDialog.message, expectedMsg);
           const radioInputs = queryAll<HTMLInputElement>(
             confirmRevertDialog,
-            'input[name="revertOptions"]'
+            'md-radio[name="revertOptions"]'
           );
           radioInputs[0].click();
           await element.updateComplete;
@@ -1728,7 +1728,7 @@
           await element.updateComplete;
           const radioInputs = queryAll<HTMLInputElement>(
             confirmRevertDialog,
-            'input[name="revertOptions"]'
+            'md-radio[name="revertOptions"]'
           );
           const revertSubmissionMsg =
             'Revert submission 199 0' +
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts
index 3c95410..5124f58 100644
--- a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts
+++ b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts
@@ -226,6 +226,15 @@
         .cherryPickTopicLayout {
           display: flex;
           align-items: center;
+          margin-top: var(--spacing-l);
+          margin-bottom: var(--spacing-m);
+        }
+        .cherryPickSingleChange,
+        .cherryPickTopic {
+          margin-left: var(--spacing-m);
+        }
+        .cherry-pick-topic-message {
+          margin-bottom: var(--spacing-m);
         }
         label[for='messageInput'],
         label[for='baseInput'] {
@@ -317,7 +326,6 @@
         <md-radio
           name="cherryPickOptions"
           id="cherryPickSingleChange"
-          touch-target="wrapper"
           checked
           @change=${this.handlecherryPickSingleChangeClicked}
         >
@@ -330,7 +338,6 @@
         <md-radio
           name="cherryPickOptions"
           id="cherryPickTopic"
-          touch-target="wrapper"
           @change=${this.handlecherryPickTopicClicked}
         >
         </md-radio>
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts
index 5ddc65e..fd44c59 100644
--- a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts
+++ b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts
@@ -4,7 +4,7 @@
  * SPDX-License-Identifier: Apache-2.0
  */
 import '../../shared/gr-account-chip/gr-account-chip';
-import {css, html, LitElement, PropertyValues} from 'lit';
+import {css, html, LitElement} from 'lit';
 import {customElement, property, query, state} from 'lit/decorators.js';
 import {when} from 'lit/directives/when.js';
 import {
@@ -179,15 +179,6 @@
     this.loadCommitterEmailDropdownItems();
   }
 
-  override willUpdate(changedProperties: PropertyValues): void {
-    if (
-      changedProperties.has('rebaseOnCurrent') ||
-      changedProperties.has('hasParent')
-    ) {
-      this.updateSelectedOption();
-    }
-  }
-
   static override get styles() {
     return [
       formStyles,
@@ -208,19 +199,23 @@
         .message {
           font-style: italic;
         }
+        .parentRevisionContainer {
+          margin-top: var(--spacing-m);
+        }
         .parentRevisionContainer label,
         .parentRevisionContainer input[type='text'] {
           display: block;
           width: 100%;
         }
-        .rebaseCheckbox {
+        div.rebaseOption,
+        div.checkbox-container {
           display: flex;
           align-items: center;
-          margin-top: 0.5em;
+          gap: var(--spacing-m);
+          margin-top: var(--spacing-xl);
         }
-        .rebaseOption {
-          display: flex;
-          align-items: center;
+        .rebaseCheckbox {
+          margin-top: var(--spacing-xl);
         }
         .rebaseOnBehalfMsg {
           margin-top: var(--spacing-m);
@@ -228,12 +223,14 @@
         .rebaseWithCommitterEmail {
           margin-top: var(--spacing-m);
         }
-        md-checkbox {
-          flex-shrink: 0;
+        .main {
+          margin-top: var(--spacing-xl);
+          margin-bottom: var(--spacing-xl);
         }
-        gr-validation-options {
-          display: flex;
-          align-items: center;
+        @media screen and (max-width: 50em) {
+          #confirmDialog {
+            height: 90vh;
+          }
         }
       `,
     ];
@@ -250,8 +247,11 @@
       >
         <div class="header" slot="header">Confirm rebase</div>
         <div class="main" slot="main">
-          ${when(this.loading, () => html`<div>Loading...</div>`)}
-          ${this.renderRebaseDialog()}
+          ${when(
+            this.loading,
+            () => html`<div>Loading...</div>`,
+            () => this.renderRebaseDialog()
+          )}
         </div>
       </gr-dialog>
     `;
@@ -266,7 +266,7 @@
         <md-radio
           id="rebaseOnParentInput"
           name="rebaseOptions"
-          touch-target="wrapper"
+          ?checked=${this.displayParentOption()}
         >
         </md-radio>
         <label id="rebaseOnParentLabel" for="rebaseOnParentInput">
@@ -291,7 +291,7 @@
         <md-radio
           id="rebaseOnTipInput"
           name="rebaseOptions"
-          touch-target="wrapper"
+          ?checked=${!this.displayParentOption() && this.displayTipOption()}
           ?disabled=${!this.displayTipOption()}
         >
         </md-radio>
@@ -314,7 +314,7 @@
         <md-radio
           id="rebaseOnOtherInput"
           name="rebaseOptions"
-          touch-target="wrapper"
+          ?checked=${!this.displayParentOption() && !this.displayTipOption()}
           @click=${this.handleRebaseOnOther}
         >
         </md-radio>
@@ -336,42 +336,44 @@
         </gr-change-autocomplete>
       </div>
       <div class="rebaseCheckbox">
-        <md-checkbox
-          id="rebaseAllowConflicts"
-          touch-target="wrapper"
-          @change=${() => {
-            this.allowConflicts = !!this.rebaseAllowConflicts?.checked;
-            this.loadCommitterEmailDropdownItems();
-          }}
-        ></md-checkbox>
-        <label for="rebaseAllowConflicts">Allow rebase with conflicts</label>
+        <div class="checkbox-container">
+          <md-checkbox
+            id="rebaseAllowConflicts"
+            @change=${() => {
+              this.allowConflicts = !!this.rebaseAllowConflicts?.checked;
+              this.loadCommitterEmailDropdownItems();
+            }}
+          ></md-checkbox>
+          <label for="rebaseAllowConflicts">Allow rebase with conflicts</label>
+        </div>
+        ${when(
+          !this.isCurrentUserEqualToLatestUploader() && this.allowConflicts,
+          () =>
+            html`<span class="message"
+              >Rebase cannot be done on behalf of the uploader when allowing
+              conflicts.</span
+            >`
+        )}
         <gr-validation-options
           .validationOptions=${this.validationOptions}
         ></gr-validation-options>
       </div>
       ${when(
-        !this.isCurrentUserEqualToLatestUploader() && this.allowConflicts,
-        () =>
-          html`<span class="message"
-            >Rebase cannot be done on behalf of the uploader when allowing
-            conflicts.</span
-          >`
-      )}
-      ${when(
         this.hasParent,
         () =>
           html`<div class="rebaseCheckbox">
-            <md-checkbox
-              id="rebaseChain"
-              touch-target="wrapper"
-              @change=${() => {
-                this.shouldRebaseChain = !!this.rebaseChain?.checked;
-                if (this.shouldRebaseChain) {
-                  this.selectedEmailForRebase = undefined;
-                }
-              }}
-            ></md-checkbox>
-            <label for="rebaseChain">Rebase all ancestors</label>
+            <div class="checkbox-container">
+              <md-checkbox
+                id="rebaseChain"
+                @change=${() => {
+                  this.shouldRebaseChain = !!this.rebaseChain?.checked;
+                  if (this.shouldRebaseChain) {
+                    this.selectedEmailForRebase = undefined;
+                  }
+                }}
+              ></md-checkbox>
+              <label for="rebaseChain">Rebase all ancestors</label>
+            </div>
           </div>`
       )}
       ${when(
@@ -569,25 +571,6 @@
   private handleEnterChangeNumberClick() {
     if (this.rebaseOnOtherInput) this.rebaseOnOtherInput.checked = true;
   }
-
-  /**
-   * Sets the default radio button based on the state of the app and
-   * the corresponding value to be submitted.
-   */
-  private updateSelectedOption() {
-    const {rebaseOnCurrent, hasParent} = this;
-    if (rebaseOnCurrent === undefined || hasParent === undefined) {
-      return;
-    }
-
-    if (this.displayParentOption()) {
-      if (this.rebaseOnParentInput) this.rebaseOnParentInput.checked = true;
-    } else if (this.displayTipOption()) {
-      if (this.rebaseOnTipInput) this.rebaseOnTipInput.checked = true;
-    } else {
-      if (this.rebaseOnOtherInput) this.rebaseOnOtherInput.checked = true;
-    }
-  }
 }
 
 declare global {
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.ts b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.ts
index 9884241..30cf475 100644
--- a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.ts
@@ -63,8 +63,7 @@
             <md-radio
               id="rebaseOnParentInput"
               name="rebaseOptions"
-              tabindex="0"
-              touch-target="wrapper"
+              tabindex="-1"
             >
             </md-radio>
             <label for="rebaseOnParentInput" id="rebaseOnParentLabel">
@@ -82,8 +81,7 @@
               disabled=""
               id="rebaseOnTipInput"
               name="rebaseOptions"
-              tabindex="0"
-              touch-target="wrapper"
+              tabindex="-1"
             >
             </md-radio>
             <label for="rebaseOnTipInput" id="rebaseOnTipLabel">
@@ -96,10 +94,10 @@
           </div>
           <div class="rebaseOption" id="rebaseOnOther">
             <md-radio
+              checked=""
               id="rebaseOnOtherInput"
               name="rebaseOptions"
               tabindex="0"
-              touch-target="wrapper"
             >
             </md-radio>
             <label for="rebaseOnOtherInput" id="rebaseOnOtherLabel">
@@ -111,11 +109,12 @@
             <gr-change-autocomplete> </gr-change-autocomplete>
           </div>
           <div class="rebaseCheckbox">
-            <md-checkbox id="rebaseAllowConflicts" touch-target="wrapper">
-            </md-checkbox>
-            <label for="rebaseAllowConflicts">
-              Allow rebase with conflicts
-            </label>
+            <div class="checkbox-container">
+              <md-checkbox id="rebaseAllowConflicts"> </md-checkbox>
+              <label for="rebaseAllowConflicts">
+                Allow rebase with conflicts
+              </label>
+            </div>
             <gr-validation-options> </gr-validation-options>
           </div>
         </div>
@@ -434,7 +433,7 @@
     );
     assert.deepEqual((fireStub.lastCall.args[0] as CustomEvent).detail, {
       allowConflicts: false,
-      base: '123',
+      base: '',
       rebaseChain: true,
       onBehalfOfUploader: true,
       committerEmail: null,
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.ts b/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.ts
index fd9204c..52ae1c2 100644
--- a/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.ts
+++ b/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.ts
@@ -24,6 +24,8 @@
 import {formStyles} from '../../../styles/form-styles';
 import {GrValidationOptions} from '../gr-validation-options/gr-validation-options';
 import {GrAutogrowTextarea} from '../../shared/gr-autogrow-textarea/gr-autogrow-textarea';
+import '@material/web/radio/radio';
+import {materialStyles} from '../../../styles/gr-material-styles';
 
 const ERR_COMMIT_NOT_FOUND = 'Unable to find the commit hash of this change.';
 const SPECIFY_REASON_STRING = '<MUST SPECIFY REASON HERE>';
@@ -85,6 +87,7 @@
     return [
       formStyles,
       sharedStyles,
+      materialStyles,
       css`
         :host {
           display: block;
@@ -101,6 +104,8 @@
         .revertSubmissionLayout {
           display: flex;
           align-items: center;
+          margin-top: var(--spacing-l);
+          margin-bottom: var(--spacing-m);
         }
         .label {
           margin-left: var(--spacing-m);
@@ -121,6 +126,9 @@
         label[for='messageInput'] {
           margin-top: var(--spacing-m);
         }
+        gr-validation-options {
+          margin-bottom: var(--spacing-m);
+        }
       `,
     ];
   }
@@ -140,13 +148,13 @@
           ${this.showRevertSubmission
             ? html`
                 <div class="revertSubmissionLayout">
-                  <input
-                    name="revertOptions"
-                    type="radio"
+                  <md-radio
                     id="revertSingleChange"
-                    @change=${() => this.handleRevertSingleChangeClicked()}
+                    name="revertOptions"
                     ?checked=${this.computeIfSingleRevert()}
-                  />
+                    @change=${() => this.handleRevertSingleChangeClicked()}
+                  >
+                  </md-radio>
                   <label
                     for="revertSingleChange"
                     class="label revertSingleChange"
@@ -155,13 +163,13 @@
                   </label>
                 </div>
                 <div class="revertSubmissionLayout">
-                  <input
-                    name="revertOptions"
-                    type="radio"
+                  <md-radio
                     id="revertSubmission"
+                    name="revertOptions"
+                    ?checked=${this.computeIfRevertSubmission()}
                     @change=${() => this.handleRevertSubmissionClicked()}
-                    .checked=${this.computeIfRevertSubmission()}
-                  />
+                  >
+                  </md-radio>
                   <label for="revertSubmission" class="label revertSubmission">
                     Revert entire submission (${this.changesCount} Changes)
                   </label>
diff --git a/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options.ts b/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options.ts
index 35c991e..de37852 100644
--- a/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options.ts
+++ b/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options.ts
@@ -28,11 +28,11 @@
         :host {
           display: block;
         }
-        .selectionLabel {
-          margin-left: -4px;
-        }
-        md-checkbox {
-          flex-shrink: 0;
+        div.checkbox-container {
+          display: flex;
+          align-items: center;
+          gap: var(--spacing-m);
+          margin-top: var(--spacing-l);
         }
         label {
           cursor: pointer;
@@ -62,16 +62,17 @@
 
   private renderValidationOption(option: ValidationOptionInfo) {
     return html`
-      <md-checkbox
-        class="selectionLabel"
-        id=${option.name}
-        touch-target="wrapper"
-        ?checked=${!!this.isOptionSelected.get(option.name)}
-        @click=${() => this.toggleCheckbox(option)}
-      ></md-checkbox>
-      <label for=${option.name}
-        >${capitalizeFirstLetter(option.description)}</label
-      >
+      <div class="checkbox-container">
+        <md-checkbox
+          class="selectionLabel"
+          id=${option.name}
+          ?checked=${!!this.isOptionSelected.get(option.name)}
+          @click=${() => this.toggleCheckbox(option)}
+        ></md-checkbox>
+        <label for=${option.name}
+          >${capitalizeFirstLetter(option.description)}</label
+        >
+      </div>
     `;
   }
 
diff --git a/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options_test.ts b/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options_test.ts
index 7bbdf85..1a1fb0c 100644
--- a/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options_test.ts
@@ -32,12 +32,14 @@
     assert.shadowDom.equal(
       element,
       /* HTML */ `
-        <md-checkbox class="selectionLabel" id="o1" touch-target="wrapper">
-        </md-checkbox>
-        <label for="o1"> Option 1 </label>
-        <md-checkbox class="selectionLabel" id="o2" touch-target="wrapper">
-        </md-checkbox>
-        <label for="o2"> Option 2 </label>
+        <div class="checkbox-container">
+          <md-checkbox class="selectionLabel" id="o1"> </md-checkbox>
+          <label for="o1"> Option 1 </label>
+        </div>
+        <div class="checkbox-container">
+          <md-checkbox class="selectionLabel" id="o2"> </md-checkbox>
+          <label for="o2"> Option 2 </label>
+        </div>
       `
     );
   });
diff --git a/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog.ts b/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog.ts
index 777f185..58614e7 100644
--- a/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog.ts
+++ b/polygerrit-ui/app/elements/shared/gr-dialog/gr-dialog.ts
@@ -85,11 +85,10 @@
           display: flex;
           flex-direction: column;
           max-height: 90vh;
-          padding: var(--spacing-xl);
         }
         header {
           flex-shrink: 0;
-          padding-bottom: var(--spacing-xl);
+          padding: var(--spacing-xl);
         }
         main {
           display: flex;
@@ -102,11 +101,12 @@
         main .overflow-container {
           flex: 1;
           overflow: auto;
+          padding: 0 var(--spacing-xl);
         }
         footer {
           display: flex;
           flex-shrink: 0;
-          padding-top: var(--spacing-xl);
+          padding: var(--spacing-xl);
           align-items: center;
         }
         .flex-space {
diff --git a/polygerrit-ui/app/embed/diff/gr-diff-image-viewer/gr-image-viewer.ts b/polygerrit-ui/app/embed/diff/gr-diff-image-viewer/gr-image-viewer.ts
index 3633ce6..8c63209 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff-image-viewer/gr-image-viewer.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff-image-viewer/gr-image-viewer.ts
@@ -525,7 +525,6 @@
           <label class="highlight-changes">
             <md-checkbox
               id="highlight-changes"
-              touch-target="wrapper"
               ?checked=${this.showHighlight}
               @change=${this.showHighlightChanged}
             >
@@ -576,7 +575,6 @@
     const followMouse = html`
       <label class="follow-mouse">
         <md-checkbox
-          touch-target="wrapper"
           id="follow-mouse"
           ?checked=${this.followMouse}
           @change=${this.followMouseChanged}
diff --git a/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl.ts b/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl.ts
index ccba1ab..0650a50 100644
--- a/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl.ts
+++ b/polygerrit-ui/app/services/gr-rest-api/gr-rest-api-impl.ts
@@ -3502,10 +3502,15 @@
         )
       ) as Promise<ChangeInfo | undefined>;
     } else {
+      const params: FetchParams = {q: `change:${changeNum}`};
+      if (optionsHex) {
+        params['O'] = optionsHex;
+      }
       return this._restApiHelper
         .fetchJSON(
           {
             url: `/changes/?q=change:${changeNum}`,
+            params,
             errFn,
             anonymizedUrl: '/changes/?q=change:*',
           },