diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index c5421ed2f6..7abb77b11e 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -1359,4 +1359,30 @@ public function hasTranslationChanges() {
     return FALSE;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getLatestRevisionId() {
+    if (!$this->getEntityType()->isRevisionable() || $this->isNew()) {
+      return NULL;
+    }
+    $revision_ids = $this->entityTypeManager()
+      ->getStorage($this->entityTypeId)
+      ->getQuery()
+      ->allRevisions()
+      ->condition($this->getEntityType()->getKey('id'), $this->id())
+      ->sort($this->getEntityType()->getKey('revision'), 'DESC')
+      ->range(0, 1)
+      ->execute();
+    $keys = array_keys($revision_ids);
+    return array_shift($keys);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isLatestRevision() {
+    return $this->getLoadedRevisionId() == $this->getLatestRevisionId();
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Entity/RevisionableInterface.php b/core/lib/Drupal/Core/Entity/RevisionableInterface.php
index 14690e3c54..3a38af7f82 100644
--- a/core/lib/Drupal/Core/Entity/RevisionableInterface.php
+++ b/core/lib/Drupal/Core/Entity/RevisionableInterface.php
@@ -61,4 +61,20 @@ public function isDefaultRevision($new_value = NULL);
    */
   public function preSaveRevision(EntityStorageInterface $storage, \stdClass $record);
 
+  /**
+   * Get the latest revision ID of the entity.
+   *
+   * @return int|null
+   *   The latest revision ID or NULL if the entity does not have a revision.
+   */
+  public function getLatestRevisionId();
+
+  /**
+   * Check if the loaded revision is the latest.
+   *
+   * @return bool
+   *   TRUE if the loaded revision is the latest revision, FALSE otherwise.
+   */
+  public function isLatestRevision();
+
 }
