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);