Move blame information into diff model

And only render blame cells, if the blame column is explicitly enabled.
Stop using a `display:none` css rule for that.

This also means removing one usage of the ugly `querySelector` based
`findRow()` lookup.

Release-Notes: skip
Change-Id: I26a860a705238e1c979d455535b59049ee628952
diff --git a/polygerrit-ui/app/embed/diff/gr-context-controls/gr-context-controls-section_test.ts b/polygerrit-ui/app/embed/diff/gr-context-controls/gr-context-controls-section_test.ts
index 93db66e..772c7ff 100644
--- a/polygerrit-ui/app/embed/diff/gr-context-controls/gr-context-controls-section_test.ts
+++ b/polygerrit-ui/app/embed/diff/gr-context-controls/gr-context-controls-section_test.ts
@@ -46,14 +46,12 @@
               left-type="contextControl"
               right-type="contextControl"
             >
-              <td class="blame gr-diff" data-line-number="0"></td>
               <td class="contextLineNum gr-diff"></td>
               <td class="gr-diff"></td>
               <td class="contextLineNum gr-diff"></td>
               <td class="gr-diff"></td>
             </tr>
             <tr class="dividerRow gr-diff show-both">
-              <td class="blame gr-diff" data-line-number="0"></td>
               <td class="dividerCell gr-diff" colspan="4">
                 <gr-context-controls class="gr-diff" showconfig="both">
                 </gr-context-controls>
@@ -64,7 +62,6 @@
               left-type="contextControl"
               right-type="contextControl"
             >
-              <td class="blame gr-diff" data-line-number="0"></td>
               <td class="contextLineNum gr-diff"></td>
               <td class="gr-diff"></td>
               <td class="contextLineNum gr-diff"></td>
diff --git a/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-row.ts b/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-row.ts
index a0406be..46af242 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-row.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-row.ts
@@ -24,6 +24,7 @@
 import './gr-diff-text';
 import {
   diffClasses,
+  findBlame,
   GrDiffCommentThread,
   isLongCommentRange,
   isResponsive,
@@ -71,9 +72,6 @@
   private right$ = new BehaviorSubject<GrDiffLine | undefined>(undefined);
 
   @property({type: Object})
-  blameInfo?: BlameInfo;
-
-  @property({type: Object})
   responsiveMode?: DiffResponsiveMode;
 
   @property({type: Boolean})
@@ -104,6 +102,8 @@
 
   @state() columns: ColumnsToShow = NO_COLUMNS;
 
+  @state() blameInfo?: BlameInfo;
+
   /**
    * Keeps track of whether diff layers have already been applied to the diff
    * row. That happens after the DOM has been created in the `updated()`
@@ -154,6 +154,14 @@
       () => this.getDiffModel().columnsToShow$,
       columnsToShow => (this.columns = columnsToShow)
     );
+    subscribe(
+      this,
+      () => this.getDiffModel().blameInfo$,
+      blameInfos => {
+        const line = this.left?.lineNumber(Side.LEFT);
+        this.blameInfo = findBlame(blameInfos, line);
+      }
+    );
   }
 
   override willUpdate(changedProperties: PropertyValues) {
diff --git a/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-row_test.ts b/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-row_test.ts
index 95b0357..9c6121d 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-row_test.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-row_test.ts
@@ -39,7 +39,6 @@
               right-type="both"
               tabindex="-1"
             >
-              <td class="blame gr-diff" data-line-number="1"></td>
               <td class="gr-diff left lineNum" data-value="1">
                 <button
                   aria-label="1 unmodified"
@@ -109,7 +108,6 @@
               class="both diff-row gr-diff unified"
               tabindex="-1"
             >
-              <td class="blame gr-diff" data-line-number="1"></td>
               <td class="gr-diff left lineNum" data-value="1">
                 <button
                   aria-label="1 unmodified"
@@ -168,7 +166,6 @@
               right-type="add"
               tabindex="-1"
             >
-              <td class="blame gr-diff" data-line-number="0"></td>
               <td class="blankLineNum gr-diff left"></td>
               <td class="blank gr-diff left no-intraline-info">
                 <div class="contentText gr-diff" data-side="left"></div>
@@ -219,7 +216,6 @@
               right-type="blank"
               tabindex="-1"
             >
-              <td class="blame gr-diff" data-line-number="1"></td>
               <td class="gr-diff left lineNum" data-value="1">
                 <button
                   aria-label="1 removed"
diff --git a/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-section_test.ts b/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-section_test.ts
index e85e945..aab8e22 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-section_test.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff-builder/gr-diff-section_test.ts
@@ -51,7 +51,6 @@
           <table>
             <tbody>
               <tr class="gr-diff moveControls movedOut">
-                <td class="blame gr-diff"></td>
                 <td class="gr-diff moveControlsLineNumCol"></td>
                 <td class="gr-diff moveHeader">
                   <gr-range-header class="gr-diff" icon="move_item">
@@ -88,7 +87,6 @@
           <table>
             <tbody>
               <tr class="gr-diff moveControls movedOut">
-                <td class="blame gr-diff"></td>
                 <td class="gr-diff moveControlsLineNumCol"></td>
                 <td class="gr-diff moveControlsLineNumCol"></td>
                 <td class="gr-diff moveHeader">
@@ -143,7 +141,6 @@
               right-type="both"
               tabindex="-1"
             >
-              <td class="blame gr-diff" data-line-number="1"></td>
               <td class="gr-diff left lineNum" data-value="1">
                 <button
                   aria-label="1 unmodified"
@@ -192,7 +189,6 @@
               right-type="both"
               tabindex="-1"
             >
-              <td class="blame gr-diff" data-line-number="1"></td>
               <td class="gr-diff left lineNum" data-value="1">
                 <button
                   aria-label="1 unmodified"
@@ -241,7 +237,6 @@
               right-type="both"
               tabindex="-1"
             >
-              <td class="blame gr-diff" data-line-number="1"></td>
               <td class="gr-diff left lineNum" data-value="1">
                 <button
                   aria-label="1 unmodified"
diff --git a/polygerrit-ui/app/embed/diff/gr-diff-model/gr-diff-model.ts b/polygerrit-ui/app/embed/diff/gr-diff-model/gr-diff-model.ts
index 4a0778b..51fa974 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff-model/gr-diff-model.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff-model/gr-diff-model.ts
@@ -38,7 +38,7 @@
 import {GrDiffGroup, GrDiffGroupType} from '../gr-diff/gr-diff-group';
 import {assert} from '../../../utils/common-util';
 import {isImageDiff} from '../../../utils/diff-util';
-import {ImageInfo} from '../../../types/common';
+import {BlameInfo, ImageInfo} from '../../../types/common';
 import {fire} from '../../../utils/event-util';
 import {CommentRange} from '../../../api/rest-api';
 
@@ -56,6 +56,7 @@
   showFullContext: FullContext;
   errorMessage?: string;
   layers: DiffLayer[];
+  blameInfo: BlameInfo[];
 }
 
 export interface ColumnsToShow {
@@ -101,6 +102,11 @@
     diffState => diffState.path
   );
 
+  readonly blameInfo$: Observable<BlameInfo[]> = select(
+    this.state$,
+    diffState => diffState.blameInfo
+  );
+
   readonly renderPrefs$: Observable<RenderPreferences> = select(
     this.state$,
     diffState => diffState.renderPrefs
@@ -112,15 +118,14 @@
   );
 
   readonly columnsToShow$: Observable<ColumnsToShow> = select(
-    this.renderPrefs$,
-    renderPrefs => {
+    combineLatest([this.blameInfo$, this.renderPrefs$]),
+    ([blameInfo, renderPrefs]) => {
       const hideLeft = !!renderPrefs.hide_left_side;
       const showSign = !!renderPrefs.show_sign_col;
       const unified = renderPrefs.view_mode === DiffViewMode.UNIFIED;
 
       return {
-        // TODO: Do not always render the blame column. Move this into renderPrefs.
-        blame: true,
+        blame: blameInfo.length > 0,
         // Hiding the left side in unified diff mode does not make a lot of sense and is not supported.
         leftNumber: !hideLeft || unified,
         leftSign: !hideLeft && showSign && !unified,
@@ -211,6 +216,7 @@
       groups: [],
       showFullContext: FullContext.UNDECIDED,
       layers: [],
+      blameInfo: [],
     });
     this.subscriptions = [this.processDiff()];
   }
diff --git a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-element_test.ts b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-element_test.ts
index be6b72e..8996be3 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-element_test.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-element_test.ts
@@ -60,7 +60,6 @@
           <div class="diffContainer sideBySide">
             <table id="diffTable">
               <colgroup>
-                <col class="blame gr-diff" />
                 <col class="gr-diff left" width="48" />
                 <col class="gr-diff left" />
                 <col class="gr-diff right" width="48" />
@@ -86,7 +85,6 @@
           <div class="diffContainer unified">
             <table id="diffTable">
               <colgroup>
-                <col class="blame gr-diff" />
                 <col class="gr-diff left" width="48" />
                 <col class="gr-diff right" width="48" />
                 <col class="gr-diff right" />
@@ -97,7 +95,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="LOST"></td>
                   <td class="gr-diff left lineNum" data-value="LOST"></td>
                   <td class="gr-diff lineNum right" data-value="LOST"></td>
                   <td
@@ -111,7 +108,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="FILE"></td>
                   <td class="gr-diff left lineNum" data-value="FILE">
                     <button
                       aria-label="Add file comment"
@@ -145,7 +141,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="1"></td>
                   <td class="gr-diff left lineNum" data-value="1">
                     <button
                       aria-label="1 unmodified"
@@ -181,7 +176,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="2"></td>
                   <td class="gr-diff left lineNum" data-value="2">
                     <button
                       aria-label="2 unmodified"
@@ -217,7 +211,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="3"></td>
                   <td class="gr-diff left lineNum" data-value="3">
                     <button
                       aria-label="3 unmodified"
@@ -253,7 +246,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="4"></td>
                   <td class="gr-diff left lineNum" data-value="4">
                     <button
                       aria-label="4 unmodified"
@@ -291,7 +283,6 @@
                   class="add diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="gr-diff lineNum right" data-value="5">
                     <button
@@ -317,7 +308,6 @@
                   class="add diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="gr-diff lineNum right" data-value="6">
                     <button
@@ -343,7 +333,6 @@
                   class="add diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="gr-diff lineNum right" data-value="7">
                     <button
@@ -371,7 +360,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="5"></td>
                   <td class="gr-diff left lineNum" data-value="5">
                     <button
                       aria-label="5 unmodified"
@@ -407,7 +395,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="6"></td>
                   <td class="gr-diff left lineNum" data-value="6">
                     <button
                       aria-label="6 unmodified"
@@ -443,7 +430,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="7"></td>
                   <td class="gr-diff left lineNum" data-value="7">
                     <button
                       aria-label="7 unmodified"
@@ -479,7 +465,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="8"></td>
                   <td class="gr-diff left lineNum" data-value="8">
                     <button
                       aria-label="8 unmodified"
@@ -515,7 +500,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="9"></td>
                   <td class="gr-diff left lineNum" data-value="9">
                     <button
                       aria-label="9 unmodified"
@@ -553,7 +537,6 @@
                   class="diff-row gr-diff remove unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="10"></td>
                   <td class="gr-diff left lineNum" data-value="10">
                     <button
                       aria-label="10 removed"
@@ -579,7 +562,6 @@
                   class="diff-row gr-diff remove unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="11"></td>
                   <td class="gr-diff left lineNum" data-value="11">
                     <button
                       aria-label="11 removed"
@@ -605,7 +587,6 @@
                   class="diff-row gr-diff remove unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="12"></td>
                   <td class="gr-diff left lineNum" data-value="12">
                     <button
                       aria-label="12 removed"
@@ -631,7 +612,6 @@
                   class="diff-row gr-diff remove unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="13"></td>
                   <td class="gr-diff left lineNum" data-value="13">
                     <button
                       aria-label="13 removed"
@@ -659,7 +639,6 @@
                   class="add diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="gr-diff lineNum right" data-value="13">
                     <button
@@ -685,7 +664,6 @@
                   class="add diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="gr-diff lineNum right" data-value="14">
                     <button
@@ -713,7 +691,6 @@
                   class="diff-row gr-diff remove unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="16"></td>
                   <td class="gr-diff left lineNum" data-value="16">
                     <button
                       aria-label="16 removed"
@@ -739,7 +716,6 @@
                   class="add diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="gr-diff lineNum right" data-value="15">
                     <button
@@ -767,7 +743,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="17"></td>
                   <td class="gr-diff left lineNum" data-value="17">
                     <button
                       aria-label="17 unmodified"
@@ -803,7 +778,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="18"></td>
                   <td class="gr-diff left lineNum" data-value="18">
                     <button
                       aria-label="18 unmodified"
@@ -839,7 +813,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="19"></td>
                   <td class="gr-diff left lineNum" data-value="19">
                     <button
                       aria-label="19 unmodified"
@@ -873,20 +846,17 @@
               </tbody>
               <tbody class="contextControl gr-diff section">
                 <tr class="above contextBackground gr-diff unified">
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="contextLineNum gr-diff"></td>
                   <td class="contextLineNum gr-diff"></td>
                   <td class="gr-diff"></td>
                 </tr>
                 <tr class="dividerRow gr-diff show-both">
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="dividerCell gr-diff" colspan="3">
                     <gr-context-controls class="gr-diff" showconfig="both">
                     </gr-context-controls>
                   </td>
                 </tr>
                 <tr class="below contextBackground gr-diff unified">
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="contextLineNum gr-diff"></td>
                   <td class="contextLineNum gr-diff"></td>
                   <td class="gr-diff"></td>
@@ -898,7 +868,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="38"></td>
                   <td class="gr-diff left lineNum" data-value="38">
                     <button
                       aria-label="38 unmodified"
@@ -934,7 +903,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="39"></td>
                   <td class="gr-diff left lineNum" data-value="39">
                     <button
                       aria-label="39 unmodified"
@@ -970,7 +938,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="40"></td>
                   <td class="gr-diff left lineNum" data-value="40">
                     <button
                       aria-label="40 unmodified"
@@ -1008,7 +975,6 @@
                   class="add diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="gr-diff lineNum right" data-value="40">
                     <button
@@ -1034,7 +1000,6 @@
                   class="add diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="gr-diff lineNum right" data-value="41">
                     <button
@@ -1060,7 +1025,6 @@
                   class="add diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="gr-diff lineNum right" data-value="42">
                     <button
@@ -1086,7 +1050,6 @@
                   class="add diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="gr-diff lineNum right" data-value="43">
                     <button
@@ -1114,7 +1077,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="41"></td>
                   <td class="gr-diff left lineNum" data-value="41">
                     <button
                       aria-label="41 unmodified"
@@ -1150,7 +1112,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="42"></td>
                   <td class="gr-diff left lineNum" data-value="42">
                     <button
                       aria-label="42 unmodified"
@@ -1186,7 +1147,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="43"></td>
                   <td class="gr-diff left lineNum" data-value="43">
                     <button
                       aria-label="43 unmodified"
@@ -1222,7 +1182,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="44"></td>
                   <td class="gr-diff left lineNum" data-value="44">
                     <button
                       aria-label="44 unmodified"
@@ -1258,7 +1217,6 @@
                   class="both diff-row gr-diff unified"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="45"></td>
                   <td class="gr-diff left lineNum" data-value="45">
                     <button
                       aria-label="45 unmodified"
@@ -1320,7 +1278,6 @@
           <div class="diffContainer sideBySide">
             <table id="diffTable">
               <colgroup>
-                <col class="blame gr-diff" />
                 <col class="gr-diff left" width="48" />
                 <col class="gr-diff left" />
                 <col class="gr-diff right" width="48" />
@@ -1334,7 +1291,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="LOST"></td>
                   <td class="gr-diff left lineNum" data-value="LOST"></td>
                   <td
                     class="both content gr-diff left lost no-intraline-info"
@@ -1353,7 +1309,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="FILE"></td>
                   <td class="gr-diff left lineNum" data-value="FILE">
                     <button
                       aria-label="Add file comment"
@@ -1392,7 +1347,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="1"></td>
                   <td class="gr-diff left lineNum" data-value="1">
                     <button
                       aria-label="1 unmodified"
@@ -1437,7 +1391,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="2"></td>
                   <td class="gr-diff left lineNum" data-value="2">
                     <button
                       aria-label="2 unmodified"
@@ -1482,7 +1435,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="3"></td>
                   <td class="gr-diff left lineNum" data-value="3">
                     <button
                       aria-label="3 unmodified"
@@ -1527,7 +1479,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="4"></td>
                   <td class="gr-diff left lineNum" data-value="4">
                     <button
                       aria-label="4 unmodified"
@@ -1574,7 +1525,6 @@
                   right-type="add"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="blank gr-diff left no-intraline-info">
                     <div class="contentText gr-diff" data-side="left"></div>
@@ -1605,7 +1555,6 @@
                   right-type="add"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="blank gr-diff left no-intraline-info">
                     <div class="contentText gr-diff" data-side="left"></div>
@@ -1636,7 +1585,6 @@
                   right-type="add"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="blank gr-diff left no-intraline-info">
                     <div class="contentText gr-diff" data-side="left"></div>
@@ -1669,7 +1617,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="5"></td>
                   <td class="gr-diff left lineNum" data-value="5">
                     <button
                       aria-label="5 unmodified"
@@ -1714,7 +1661,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="6"></td>
                   <td class="gr-diff left lineNum" data-value="6">
                     <button
                       aria-label="6 unmodified"
@@ -1759,7 +1705,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="7"></td>
                   <td class="gr-diff left lineNum" data-value="7">
                     <button
                       aria-label="7 unmodified"
@@ -1804,7 +1749,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="8"></td>
                   <td class="gr-diff left lineNum" data-value="8">
                     <button
                       aria-label="8 unmodified"
@@ -1849,7 +1793,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="9"></td>
                   <td class="gr-diff left lineNum" data-value="9">
                     <button
                       aria-label="9 unmodified"
@@ -1896,7 +1839,6 @@
                   right-type="blank"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="10"></td>
                   <td class="gr-diff left lineNum" data-value="10">
                     <button
                       aria-label="10 removed"
@@ -1927,7 +1869,6 @@
                   right-type="blank"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="11"></td>
                   <td class="gr-diff left lineNum" data-value="11">
                     <button
                       aria-label="11 removed"
@@ -1958,7 +1899,6 @@
                   right-type="blank"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="12"></td>
                   <td class="gr-diff left lineNum" data-value="12">
                     <button
                       aria-label="12 removed"
@@ -1989,7 +1929,6 @@
                   right-type="blank"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="13"></td>
                   <td class="gr-diff left lineNum" data-value="13">
                     <button
                       aria-label="13 removed"
@@ -2022,7 +1961,6 @@
                   right-type="add"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="14"></td>
                   <td class="gr-diff left lineNum" data-value="14">
                     <button
                       aria-label="14 removed"
@@ -2067,7 +2005,6 @@
                   right-type="add"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="15"></td>
                   <td class="gr-diff left lineNum" data-value="15">
                     <button
                       aria-label="15 removed"
@@ -2114,7 +2051,6 @@
                   right-type="add"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="16"></td>
                   <td class="gr-diff left lineNum" data-value="16">
                     <button
                       aria-label="16 removed"
@@ -2161,7 +2097,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="17"></td>
                   <td class="gr-diff left lineNum" data-value="17">
                     <button
                       aria-label="17 unmodified"
@@ -2206,7 +2141,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="18"></td>
                   <td class="gr-diff left lineNum" data-value="18">
                     <button
                       aria-label="18 unmodified"
@@ -2251,7 +2185,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="19"></td>
                   <td class="gr-diff left lineNum" data-value="19">
                     <button
                       aria-label="19 unmodified"
@@ -2296,14 +2229,12 @@
                   left-type="contextControl"
                   right-type="contextControl"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="contextLineNum gr-diff"></td>
                   <td class="gr-diff"></td>
                   <td class="contextLineNum gr-diff"></td>
                   <td class="gr-diff"></td>
                 </tr>
                 <tr class="dividerRow gr-diff show-both">
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="dividerCell gr-diff" colspan="4">
                     <gr-context-controls
                       class="gr-diff"
@@ -2316,7 +2247,6 @@
                   left-type="contextControl"
                   right-type="contextControl"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="contextLineNum gr-diff"></td>
                   <td class="gr-diff"></td>
                   <td class="contextLineNum gr-diff"></td>
@@ -2331,7 +2261,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="38"></td>
                   <td class="gr-diff left lineNum" data-value="38">
                     <button
                       aria-label="38 unmodified"
@@ -2376,7 +2305,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="39"></td>
                   <td class="gr-diff left lineNum" data-value="39">
                     <button
                       aria-label="39 unmodified"
@@ -2421,7 +2349,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="40"></td>
                   <td class="gr-diff left lineNum" data-value="40">
                     <button
                       aria-label="40 unmodified"
@@ -2468,7 +2395,6 @@
                   right-type="add"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="blank gr-diff left no-intraline-info">
                     <div class="contentText gr-diff" data-side="left"></div>
@@ -2499,7 +2425,6 @@
                   right-type="add"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="blank gr-diff left no-intraline-info">
                     <div class="contentText gr-diff" data-side="left"></div>
@@ -2530,7 +2455,6 @@
                   right-type="add"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="blank gr-diff left no-intraline-info">
                     <div class="contentText gr-diff" data-side="left"></div>
@@ -2561,7 +2485,6 @@
                   right-type="add"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="0"></td>
                   <td class="blankLineNum gr-diff left"></td>
                   <td class="blank gr-diff left no-intraline-info">
                     <div class="contentText gr-diff" data-side="left"></div>
@@ -2594,7 +2517,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="41"></td>
                   <td class="gr-diff left lineNum" data-value="41">
                     <button
                       aria-label="41 unmodified"
@@ -2639,7 +2561,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="42"></td>
                   <td class="gr-diff left lineNum" data-value="42">
                     <button
                       aria-label="42 unmodified"
@@ -2684,7 +2605,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="43"></td>
                   <td class="gr-diff left lineNum" data-value="43">
                     <button
                       aria-label="43 unmodified"
@@ -2729,7 +2649,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="44"></td>
                   <td class="gr-diff left lineNum" data-value="44">
                     <button
                       aria-label="44 unmodified"
@@ -2774,7 +2693,6 @@
                   right-type="both"
                   tabindex="-1"
                 >
-                  <td class="blame gr-diff" data-line-number="45"></td>
                   <td class="gr-diff left lineNum" data-value="45">
                     <button
                       aria-label="45 unmodified"
@@ -2859,7 +2777,6 @@
               <gr-diff-row class="left-FILE right-FILE"> </gr-diff-row>
               <table id="diffTable">
                 <colgroup>
-                  <col class="blame gr-diff" />
                   <col class="gr-diff left" width="48" />
                   <col class="gr-diff left" />
                   <col class="gr-diff right" width="48" />
@@ -2873,7 +2790,6 @@
                     right-type="both"
                     tabindex="-1"
                   >
-                    <td class="blame gr-diff" data-line-number="FILE"></td>
                     <td class="gr-diff left lineNum" data-value="FILE">
                       <button
                         aria-label="Add file comment"
@@ -2906,7 +2822,7 @@
                 </tbody>
                 <tbody class="binary-diff gr-diff">
                   <tr class="gr-diff">
-                    <td class="gr-diff" colspan="5">
+                    <td class="gr-diff" colspan="4">
                       <span> Difference in binary files </span>
                     </td>
                   </tr>
diff --git a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-styles.ts b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-styles.ts
index 95b2f4e..65c20d8 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-styles.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-styles.ts
@@ -499,20 +499,10 @@
     color: var(--blue-700);
   }
 
-  col.blame {
-    display: none;
-  }
   td.blame {
-    display: none;
     padding: 0 var(--spacing-m);
     white-space: pre;
   }
-  :host(.showBlame) col.blame {
-    display: table-column;
-  }
-  :host(.showBlame) td.blame {
-    display: table-cell;
-  }
   td.blame > span {
     opacity: 0.6;
   }
diff --git a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils.ts b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils.ts
index 219f16e..6dc292e 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils.ts
@@ -3,7 +3,7 @@
  * Copyright 2020 Google LLC
  * SPDX-License-Identifier: Apache-2.0
  */
-import {CommentRange} from '../../../types/common';
+import {BlameInfo, CommentRange} from '../../../types/common';
 import {Side, SpecialFilePath} from '../../../constants/constants';
 import {
   DiffContextExpandedExternalDetail,
@@ -462,3 +462,10 @@
   groups: GrDiffGroup[];
   numLines: number;
 }
+
+export function findBlame(blameInfos: BlameInfo[], line?: LineNumber) {
+  if (typeof line !== 'number') return undefined;
+  return blameInfos.find(info =>
+    info.ranges.find(range => range.start <= line && line <= range.end)
+  );
+}
diff --git a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts
index a0b579a..4e9e7e5 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts
@@ -392,7 +392,7 @@
       this.layersChanged();
     }
     if (changedProperties.has('blame')) {
-      this.blameChanged();
+      this.diffModel.updateState({blameInfo: this.blame ?? []});
     }
     if (changedProperties.has('renderPrefs')) {
       this.renderPrefsChanged();
@@ -508,15 +508,6 @@
     return !!this.highlights.selectedRange;
   }
 
-  private blameChanged() {
-    this.setBlame(this.blame ?? []);
-    if (this.blame) {
-      this.classList.add('showBlame');
-    } else {
-      this.classList.remove('showBlame');
-    }
-  }
-
   // Private but used in tests.
   selectLine(el: Element) {
     const lineNumber = Number(el.getAttribute('data-value'));
@@ -545,8 +536,6 @@
 
   private prefsChanged() {
     if (!this.prefs) return;
-
-    this.blame = null;
     this.updatePreferenceStyles();
 
     if (!Number.isInteger(this.prefs.tab_size) || this.prefs.tab_size <= 0) {
@@ -963,21 +952,6 @@
       .slice(startIndex, endIndex + 1)
       .filter(group => group.lines.length > 0);
   }
-
-  /**
-   * Set the blame information for the diff. For any already-rendered line,
-   * re-render its blame cell content.
-   */
-  setBlame(blame: BlameInfo[]) {
-    for (const blameInfo of blame) {
-      for (const range of blameInfo.ranges) {
-        for (let line = range.start; line <= range.end; line++) {
-          const row = this.findRow(Side.LEFT, line);
-          if (row) row.blameInfo = blameInfo;
-        }
-      }
-    }
-  }
 }
 
 function getLineNumberCellWidth(prefs: DiffPreferencesInfo) {
diff --git a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts
index bceafa3..5fa4788 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts
@@ -190,13 +190,13 @@
       element.renderPrefs = {hide_left_side: true};
       await element.updateComplete;
       let cols = queryAll(element, 'col');
-      assert.equal(cols.length, 3);
+      assert.equal(cols.length, 2);
 
       diffModel.updateState({renderPrefs: {hide_left_side: false}});
       element.renderPrefs = {hide_left_side: false};
       await element.updateComplete;
       cols = queryAll(element, 'col');
-      assert.equal(cols.length, 5);
+      assert.equal(cols.length, 4);
     });
 
     suite('getCursorStops', () => {
@@ -333,32 +333,6 @@
     });
   });
 
-  suite('blame', () => {
-    test('unsetting', async () => {
-      element.blame = [];
-      const setBlameSpy = sinon.spy(element, 'setBlame');
-      element.classList.add('showBlame');
-      element.blame = null;
-      await element.updateComplete;
-      assert.isTrue(setBlameSpy.calledWithExactly([]));
-      assert.isFalse(element.classList.contains('showBlame'));
-    });
-
-    test('setting', async () => {
-      element.blame = [
-        {
-          author: 'test-author',
-          time: 12345,
-          commit_msg: '',
-          id: 'commit id',
-          ranges: [{start: 1, end: 2}],
-        },
-      ];
-      await element.updateComplete;
-      assert.isTrue(element.classList.contains('showBlame'));
-    });
-  });
-
   const setupSampleDiff = async function (params: {
     content: DiffContent[];
     ignore_whitespace?: IgnoreWhitespaceType;