diff --git a/core/modules/system/src/Controller/DbUpdateController.php b/core/modules/system/src/Controller/DbUpdateController.php
index f7dc4a3555419f719849e9ce61f5bd0eac35b740..de66f43687d5bcbb81d54b5544045a3f28a1d71c 100644
--- a/core/modules/system/src/Controller/DbUpdateController.php
+++ b/core/modules/system/src/Controller/DbUpdateController.php
@@ -268,7 +268,7 @@ protected function selection(Request $request) {
 
     $starting_updates = [];
     $incompatible_updates_exist = FALSE;
-    $updates_per_module = [];
+    $updates_per_extension = [];
     foreach (['update', 'post_update'] as $update_type) {
       switch ($update_type) {
         case 'update':
@@ -279,11 +279,11 @@ protected function selection(Request $request) {
           $updates = $this->postUpdateRegistry->getPendingUpdateInformation();
           break;
       }
-      foreach ($updates as $module => $update) {
+      foreach ($updates as $extension => $update) {
         if (!isset($update['start'])) {
-          $build['start'][$module] = [
+          $build['start'][$extension] = [
             '#type' => 'item',
-            '#title' => $module . ' module',
+            '#title' => $extension . ($this->moduleHandler->moduleExists($extension) ? ' module' : ' theme'),
             '#markup' => $update['warning'],
             '#prefix' => '<div class="messages messages--warning">',
             '#suffix' => '</div>',
@@ -292,22 +292,22 @@ protected function selection(Request $request) {
           continue;
         }
         if (!empty($update['pending'])) {
-          $updates_per_module += [$module => []];
-          $updates_per_module[$module] = array_merge($updates_per_module[$module], $update['pending']);
-          $build['start'][$module] = [
+          $updates_per_extension += [$extension => []];
+          $updates_per_extension[$extension] = array_merge($updates_per_extension[$extension], $update['pending']);
+          $build['start'][$extension] = [
             '#type' => 'hidden',
             '#value' => $update['start'],
           ];
           // Store the previous items in order to merge normal updates and
           // post_update functions together.
-          $build['start'][$module] = [
+          $build['start'][$extension] = [
             '#theme' => 'item_list',
-            '#items' => $updates_per_module[$module],
-            '#title' => $module . ' module',
+            '#items' => $updates_per_extension[$extension],
+            '#title' => $extension . ($this->moduleHandler->moduleExists($extension) ? ' module' : ' theme'),
           ];
 
           if ($update_type === 'update') {
-            $starting_updates[$module] = $update['start'];
+            $starting_updates[$extension] = $update['start'];
           }
         }
         if (isset($update['pending'])) {
@@ -446,9 +446,9 @@ protected function results(Request $request) {
     // Output a list of info messages.
     if (!empty($update_results)) {
       $all_messages = [];
-      foreach ($update_results as $module => $updates) {
-        if ($module != '#abort') {
-          $module_has_message = FALSE;
+      foreach ($update_results as $extension => $updates) {
+        if ($extension != '#abort') {
+          $extension_has_message = FALSE;
           $info_messages = [];
           foreach ($updates as $name => $queries) {
             $messages = [];
@@ -473,7 +473,7 @@ protected function results(Request $request) {
             }
 
             if ($messages) {
-              $module_has_message = TRUE;
+              $extension_has_message = TRUE;
               if (is_numeric($name)) {
                 $title = $this->t('Update #@count', ['@count' => $name]);
               }
@@ -488,12 +488,15 @@ protected function results(Request $request) {
             }
           }
 
-          // If there were any messages then prefix them with the module name
+          // If there were any messages then prefix them with the extension name
           // and add it to the global message list.
-          if ($module_has_message) {
+          if ($extension_has_message) {
+            $header = $this->moduleHandler->moduleExists($extension) ?
+              $this->t('@module module', ['@module' => $extension]) :
+              $this->t('@theme theme', ['@theme' => $extension]);
             $all_messages[] = [
               '#type' => 'container',
-              '#prefix' => '<h3>' . $this->t('@module module', ['@module' => $module]) . '</h3>',
+              '#prefix' => '<h3>' . $header . '</h3>',
               '#children' => $info_messages,
             ];
           }
diff --git a/core/modules/system/tests/src/Functional/Theme/ThemeUpdateTest.php b/core/modules/system/tests/src/Functional/Theme/ThemeUpdateTest.php
index 21c31a17f125f5d794796e16ddac8aa65f1f9ea4..fbcd137b3d57ddbfed7fbaa53c80f28b3cc00cf2 100644
--- a/core/modules/system/tests/src/Functional/Theme/ThemeUpdateTest.php
+++ b/core/modules/system/tests/src/Functional/Theme/ThemeUpdateTest.php
@@ -36,6 +36,10 @@ public function testThemeUpdates() {
     $this->assertFalse(\Drupal::moduleHandler()->moduleExists('test_another_module_required_by_theme'));
     $this->runUpdates();
     $this->assertTrue(\Drupal::moduleHandler()->moduleExists('test_another_module_required_by_theme'));
+
+    $this->assertSession()->addressEquals('update.php/results');
+    $this->assertSession()->responseContains('test_theme_depending_on_modules theme');
+    $this->assertSession()->responseContains('Post update message from theme post update function');
   }
 
   /**
@@ -43,7 +47,7 @@ public function testThemeUpdates() {
    */
   protected function doSelectionTest() {
     // Ensure that the theme's post update appears as expected.
-    $this->assertSession()->responseContains('test_theme_depending_on_modules module');
+    $this->assertSession()->responseContains('test_theme_depending_on_modules theme');
     $this->assertSession()->responseContains('Install a dependent module.');
   }
 
diff --git a/core/modules/system/tests/themes/test_theme_depending_on_modules/test_theme_depending_on_modules.post_update.php b/core/modules/system/tests/themes/test_theme_depending_on_modules/test_theme_depending_on_modules.post_update.php
index 6ce1008d338a26a5b51b5274a45ae641d96610b4..2f981e0ea05414e8e3e8208e9edfc685c38cfe22 100644
--- a/core/modules/system/tests/themes/test_theme_depending_on_modules/test_theme_depending_on_modules.post_update.php
+++ b/core/modules/system/tests/themes/test_theme_depending_on_modules/test_theme_depending_on_modules.post_update.php
@@ -12,6 +12,7 @@
    */
   function test_theme_depending_on_modules_post_update_module_install(&$sandbox = NULL) {
     \Drupal::service('module_installer')->install(['test_another_module_required_by_theme']);
+    return 'Post update message from theme post update function';
   }
 
 }