diff --git a/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php
index 0af47876e7..0f8283184f 100644
--- a/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php
@@ -127,15 +127,23 @@ public function onKernelRequestMaintenance(RequestEvent $event) {
$this->eventDispatcher->dispatch($event, MaintenanceModeEvents::MAINTENANCE_MODE_REQUEST);
}
else {
- // Display a message if the logged in user has access to the site in
- // maintenance mode. However, suppress it on the maintenance mode
- // settings page.
+ // Display a message if the logged-in user has access to the site in
+ // maintenance mode. Don't show maintenance message:
+ // - on AJAX requests.
+ // - on Iframe uploads.
+ // - on the maintenance mode settings page.
if ($route_match->getRouteName() != 'system.site_maintenance_mode') {
- if ($this->account->hasPermission('administer site configuration')) {
- $this->messenger->addMessage($this->t('Operating in maintenance mode. Go online.', [':url' => $this->urlGenerator->generate('system.site_maintenance_mode')]), 'status', FALSE);
- }
- else {
- $this->messenger->addMessage($this->t('Operating in maintenance mode.'), 'status', FALSE);
+ $show_message = $route_match->getRouteName() != 'system.site_maintenance_mode' &&
+ !$event->getRequest()->isXmlHttpRequest() &&
+ $event->getRequest()->get('ajax_iframe_upload', FALSE) === FALSE;
+
+ if ($show_message) {
+ if ($this->account->hasPermission('administer site configuration')) {
+ $this->messenger->addMessage($this->t('Operating in maintenance mode. Go online.', [':url' => $this->urlGenerator->generate('system.site_maintenance_mode')]), 'status', FALSE);
+ }
+ else {
+ $this->messenger->addMessage($this->t('Operating in maintenance mode.'), 'status', FALSE);
+ }
}
}
}
diff --git a/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php b/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php
index cc4a03cee0..432cbc3e6a 100644
--- a/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php
+++ b/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php
@@ -46,6 +46,7 @@ protected function setUp(): void {
'access content',
'access administration pages',
'administer site configuration',
+ 'access site in maintenance mode',
'administer users',
'administer permissions',
'administer content types',
@@ -140,6 +141,14 @@ public function testSingleValuedWidget() {
$type_name = 'article';
$field_name = 'test_file_field_1';
$cardinality = 1;
+
+ // Turn on maintenance mode.
+ $edit = [
+ 'maintenance_mode' => 1,
+ ];
+ $this->drupalGet('admin/config/development/maintenance');
+ $this->submitForm($edit, 'Save configuration');
+
$this->createFileField($field_name, 'node', $type_name, ['cardinality' => $cardinality]);
$page = $this->getSession()->getPage();
@@ -162,6 +171,10 @@ public function testSingleValuedWidget() {
$page->attachFileToField('files[' . $field_name . '_0]', $test_file_path);
$remove_button = $assert_session->waitForElementVisible('css', '[name="' . $field_name . '_0_remove_button"]');
$this->assertNotNull($remove_button);
+
+ $this->assertSession()->assertWaitOnAjaxRequest();
+ $this->assertSession()->pageTextContainsOnce('Operating in maintenance mode');
+
$page->pressButton('Save');
$page->hasContent($test_file->name);