diff --git a/core/core.services.yml b/core/core.services.yml index 9f5d6fc..3ace49b 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -465,11 +465,6 @@ services: arguments: ['@settings'] tags: - { name: http_middleware, priority: 300 } - http_middleware.page_cache: - class: Drupal\Core\StackMiddleware\PageCache - arguments: ['@cache.render', '@page_cache_request_policy', '@page_cache_response_policy', '@content_negotiation'] - tags: - - { name: http_middleware, priority: 200 } http_middleware.kernel_pre_handle: class: Drupal\Core\StackMiddleware\KernelPreHandle arguments: ['@kernel'] diff --git a/core/lib/Drupal/Core/Form/FormCache.php b/core/lib/Drupal/Core/Form/FormCache.php index ea38fd2..fa03bac 100644 --- a/core/lib/Drupal/Core/Form/FormCache.php +++ b/core/lib/Drupal/Core/Form/FormCache.php @@ -210,11 +210,6 @@ public function setCache($form_build_id, $form, FormStateInterface $form_state) $this->keyValueExpirableFactory->get('form')->setWithExpire($form_build_id, $form, $expire); } - // Cache form state. - if ($this->configFactory->get('system.performance')->get('cache.page.use_internal') && $this->isPageCacheable()) { - $form_state->addBuildInfo('immutable', TRUE); - } - // Store the known list of safe strings for form re-use. // @todo Ensure we are not storing an excessively large string list in: // https://www.drupal.org/node/2295823 @@ -225,14 +220,4 @@ public function setCache($form_build_id, $form, FormStateInterface $form_state) } } - /** - * Checks if the page is cacheable. - * - * @return bool - * TRUE is the page is cacheable, FALSE if not. - */ - protected function isPageCacheable() { - return ($this->requestPolicy->check($this->requestStack->getCurrentRequest()) === RequestPolicyInterface::ALLOW); - } - } diff --git a/core/modules/block/src/Tests/BlockTest.php b/core/modules/block/src/Tests/BlockTest.php index 197a370..1ff3946 100644 --- a/core/modules/block/src/Tests/BlockTest.php +++ b/core/modules/block/src/Tests/BlockTest.php @@ -21,6 +21,11 @@ class BlockTest extends BlockTestBase { /** + * {@inheritdoc} + */ + protected static $modules = ['page_cache']; + + /** * Tests block visibility. */ function testBlockVisibility() { @@ -308,7 +313,6 @@ public function testBlockCacheTags() { // Enable page caching. $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); $config->set('cache.page.max_age', 300); $config->save(); diff --git a/core/modules/block/src/Tests/BlockTestBase.php b/core/modules/block/src/Tests/BlockTestBase.php index 1f3cb74..307a435 100644 --- a/core/modules/block/src/Tests/BlockTestBase.php +++ b/core/modules/block/src/Tests/BlockTestBase.php @@ -19,7 +19,7 @@ * * @var array */ - public static $modules = array('block', 'filter', 'test_page_test', 'help', 'block_test'); + protected static $modules = array('block', 'filter', 'test_page_test', 'help', 'block_test'); /** * A list of theme regions to test. diff --git a/core/modules/file/src/Tests/DownloadTest.php b/core/modules/file/src/Tests/DownloadTest.php index 9de1b3a..130b07c 100644 --- a/core/modules/file/src/Tests/DownloadTest.php +++ b/core/modules/file/src/Tests/DownloadTest.php @@ -56,8 +56,8 @@ public function testPrivateFileTransferWithoutPageCache() { */ public function testPrivateFileTransferWithPageCache() { // Turn on page caching and rerun the test. + $this->assertTrue($this->container->get('module_installer')->install(['page_cache']), 'Page cache module installed.'); $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); $config->set('cache.page.max_age', 300); $config->save(); diff --git a/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php b/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php index abe8ffb..ebaa81c 100644 --- a/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php +++ b/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php @@ -247,8 +247,8 @@ function doImageStyleUrlAndPathTests($scheme, $clean_url = TRUE, $extra_slash = */ protected function enablePageCache() { // Turn on page caching and rerun the test. + $this->assertTrue($this->container->get('module_installer')->install(['page_cache']), 'Page cache module installed.'); $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); $config->set('cache.page.max_age', 300); $config->save(); } diff --git a/core/modules/language/src/LanguageNegotiator.php b/core/modules/language/src/LanguageNegotiator.php index bc924fb..e5ff4e5 100644 --- a/core/modules/language/src/LanguageNegotiator.php +++ b/core/modules/language/src/LanguageNegotiator.php @@ -189,6 +189,7 @@ protected function negotiateLanguage($type, $method_id) { if (!isset($method['types']) || in_array($type, $method['types'])) { + // @todo This entire chunk is problematic… // Check for a cache mode force from settings.php. if ($this->settings->get('page_cache_without_database')) { $cache_enabled = TRUE; @@ -199,6 +200,12 @@ protected function negotiateLanguage($type, $method_id) { // If the language negotiation method has no cache preference or this is // satisfied we can execute the callback. + // @todo … because 1) it hardcodes the internal page cache so it assumes + // page caching doesn't live in a module, 2) what about other page + // cache implementations, like boost? + // Note also that it makes an exception for LanguageNegotiationBrowser, + // which apparently cannot be cached, and therefore sets "cache = 0" in + // its annotation, which is detected here. if ($cache = !isset($method['cache']) || $this->currentUser->isAuthenticated() || $method['cache'] == $cache_enabled) { $langcode = $this->getNegotiationMethodInstance($method_id)->getLangcode($this->requestStack->getCurrentRequest()); } diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_performance.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_performance.yml index 2b6f478..c27f3a9 100644 --- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_performance.yml +++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_system_performance.yml @@ -14,7 +14,6 @@ process: 'css/preprocess': preprocess_css 'js/preprocess': preprocess_js 'cache/page/max_age': cache_lifetime - 'cache/page/use_internal': cache 'response/gzip': page_compression destination: plugin: config diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateSystemPerformanceTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateSystemPerformanceTest.php index 28d9a8b..50d6c51 100644 --- a/core/modules/migrate_drupal/src/Tests/d6/MigrateSystemPerformanceTest.php +++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateSystemPerformanceTest.php @@ -40,7 +40,6 @@ public function testSystemPerformance() { $this->assertIdentical($config->get('css.preprocess'), FALSE); $this->assertIdentical($config->get('js.preprocess'), FALSE); $this->assertIdentical($config->get('cache.page.max_age'), 0); - $this->assertIdentical($config->get('cache.page.use_internal'), TRUE); $this->assertIdentical($config->get('response.gzip'), TRUE); } diff --git a/core/modules/page_cache/page_cache.info.yml b/core/modules/page_cache/page_cache.info.yml new file mode 100644 index 0000000..af72fab --- /dev/null +++ b/core/modules/page_cache/page_cache.info.yml @@ -0,0 +1,6 @@ +name: Internal page cache +type: module +description: 'Caches pages for anonymous users. Works well for small to medium-sized websites.' +package: Core +version: VERSION +core: 8.x diff --git a/core/modules/page_cache/page_cache.module b/core/modules/page_cache/page_cache.module new file mode 100644 index 0000000..2c7d01f --- /dev/null +++ b/core/modules/page_cache/page_cache.module @@ -0,0 +1,50 @@ +' . t('About') . ''; + $output .= '

' . t('The Internal page cache module caches pages for anonymous users in the database.') . '

'; + $output .= '

' . t('Uses') . '

'; + $output .= '
'; + $output .= '
' . t('Speeding up your site') . '
'; + $output .= '
'; + $output .= '

' . t('Pages requested by anonymous users are stored in a compressed format; depending on your site configuration and the amount of your web traffic tied to anonymous visitors, the caching system may significantly increase the speed of your site.'); + $output .= '

' . t('(For authenticated users, pages need to be assembled for each user individually, but anonymous users all get the exact same version of each page.)') . '

'; + $output .= '
'; + $output .= '
' . t('Configuring Internal page cache') . '
'; + $output .= '
'; + $output .= '

' . t('On the Performance settings page, you can configure how long browsers and proxies may cache pages, that setting is also respected by the Internal page cache module. There is no other configuration.', array('@cache-settings' => \Drupal::url('system.performance_settings'))) . '

'; + $output .= '
'; + $output .= '
'; + + return $output; + } +} + +/** + * Implements hook_form_alter(). + */ +function page_cache_form_alter(&$form, FormStateInterface $form_state, $form_id) { + // If the page that's being built is cacheable, set the 'immutable' flag, to + // ensure that when the form is used, a new form build ID is generated when + // appropriate, to prevent information disclosure. + $request_policy = \Drupal::service('page_cache_request_policy'); + $request = \Drupal::requestStack()->getCurrentRequest(); + $request_is_cacheable = $request_policy->check($request) === RequestPolicyInterface::ALLOW; + if ($request_is_cacheable) { + $form_state->addBuildInfo('immutable', TRUE); + } +} diff --git a/core/modules/page_cache/page_cache.services.yml b/core/modules/page_cache/page_cache.services.yml new file mode 100644 index 0000000..3ac1d24 --- /dev/null +++ b/core/modules/page_cache/page_cache.services.yml @@ -0,0 +1,6 @@ +services: + http_middleware.page_cache: + class: Drupal\page_cache\StackMiddleware\PageCache + arguments: ['@cache.render', '@page_cache_request_policy', '@page_cache_response_policy', '@content_negotiation'] + tags: + - { name: http_middleware, priority: 200 } diff --git a/core/lib/Drupal/Core/StackMiddleware/PageCache.php b/core/modules/page_cache/src/StackMiddleware/PageCache.php similarity index 94% rename from core/lib/Drupal/Core/StackMiddleware/PageCache.php rename to core/modules/page_cache/src/StackMiddleware/PageCache.php index b381018..60afa5d 100644 --- a/core/lib/Drupal/Core/StackMiddleware/PageCache.php +++ b/core/modules/page_cache/src/StackMiddleware/PageCache.php @@ -2,10 +2,10 @@ /** * @file - * Contains \Drupal\Core\StackMiddleware\PageCache. + * Contains \Drupal\page_cache\StackMiddleware\PageCache. */ -namespace Drupal\Core\StackMiddleware; +namespace Drupal\page_cache\StackMiddleware; use Drupal\Core\Cache\Cache; use Drupal\Core\Cache\CacheBackendInterface; @@ -60,7 +60,7 @@ class PageCache implements HttpKernelInterface { protected $contentNegotiation; /** - * Constructs a ReverseProxyMiddleware object. + * Constructs a PageCache object. * * @param \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel * The decorated kernel. @@ -85,20 +85,8 @@ public function __construct(HttpKernelInterface $http_kernel, CacheBackendInterf * {@inheritdoc} */ public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = TRUE) { - if ($type !== static::MASTER_REQUEST) { - // Only allow page caching on master request. - $cache_enabled = FALSE; - } - elseif (Settings::get('page_cache_without_database')) { - // Check for a cache mode force from settings.php. - $cache_enabled = TRUE; - } - else { - $config = $this->config('system.performance'); - $cache_enabled = $config->get('cache.page.use_internal'); - } - - if ($cache_enabled && $this->requestPolicy->check($request) === RequestPolicyInterface::ALLOW) { + // Only allow page caching on master request. + if ($type === static::MASTER_REQUEST && $this->requestPolicy->check($request) === RequestPolicyInterface::ALLOW) { $response = $this->lookup($request, $type, $catch); } else { diff --git a/core/modules/system/src/Tests/Cache/PageCacheTagsIntegrationTest.php b/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php similarity index 95% rename from core/modules/system/src/Tests/Cache/PageCacheTagsIntegrationTest.php rename to core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php index 7ce1b5b..996362c 100644 --- a/core/modules/system/src/Tests/Cache/PageCacheTagsIntegrationTest.php +++ b/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php @@ -2,10 +2,10 @@ /** * @file - * Contains \Drupal\system\Tests\Cache\PageCacheTagsIntegrationTest. + * Contains \Drupal\page_cache\Tests\PageCacheTagsIntegrationTest. */ -namespace Drupal\system\Tests\Cache; +namespace Drupal\page_cache\Tests; use Drupal\Core\Url; use Drupal\simpletest\WebTestBase; @@ -15,7 +15,7 @@ * Enables the page cache and tests its cache tags in various scenarios. * * @group Cache - * @see \Drupal\system\Tests\Bootstrap\PageCacheTest + * @see \Drupal\page_cache\Tests\PageCacheTest * @see \Drupal\node\Tests\NodePageCacheTest * @see \Drupal\menu_ui\Tests\MenuTest::testMenuBlockPageCacheTags() */ @@ -23,6 +23,11 @@ class PageCacheTagsIntegrationTest extends WebTestBase { protected $profile = 'standard'; + /** + * {@inheritdoc} + */ + protected static $modules = ['page_cache']; + protected $dumpHeaders = TRUE; /** @@ -32,7 +37,6 @@ protected function setUp() { parent::setUp(); $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); $config->set('cache.page.max_age', 300); $config->save(); } diff --git a/core/modules/system/src/Tests/Bootstrap/PageCacheTest.php b/core/modules/page_cache/src/Tests/PageCacheTest.php similarity index 93% rename from core/modules/system/src/Tests/Bootstrap/PageCacheTest.php rename to core/modules/page_cache/src/Tests/PageCacheTest.php index c3538f2..0aef91f 100644 --- a/core/modules/system/src/Tests/Bootstrap/PageCacheTest.php +++ b/core/modules/page_cache/src/Tests/PageCacheTest.php @@ -2,10 +2,10 @@ /** * @file - * Definition of Drupal\system\Tests\Bootstrap\PageCacheTest. + * Contains \Drupal\page_cache\Tests\PageCacheTest. */ -namespace Drupal\system\Tests\Bootstrap; +namespace Drupal\page_cache\Tests; use Drupal\Component\Datetime\DateTimePlus; use Drupal\Core\Routing\RequestContext; @@ -15,7 +15,7 @@ /** * Enables the page cache and tests it with various HTTP requests. * - * @group Bootstrap + * @group page_cache */ class PageCacheTest extends WebTestBase { @@ -26,7 +26,7 @@ class PageCacheTest extends WebTestBase { * * @var array */ - public static $modules = array('test_page_test', 'system_test'); + public static $modules = array('test_page_test', 'system_test', 'page_cache'); protected function setUp() { parent::setUp(); @@ -35,6 +35,10 @@ protected function setUp() { ->set('name', 'Drupal') ->set('page.front', 'test-page') ->save(); + + $config = $this->config('system.performance'); + $config->set('cache.page.max_age', 300); + $config->save(); } /** @@ -44,11 +48,6 @@ protected function setUp() { * persisted. */ function testPageCacheTags() { - $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); - $config->set('cache.page.max_age', 300); - $config->save(); - $path = 'system-test/cache_tags_page'; $tags = array('system_test_cache_tags_page'); $this->drupalGet($path); @@ -77,11 +76,6 @@ function testPageCacheTags() { * Tests support for different cache items with different Accept headers. */ function testAcceptHeaderRequests() { - $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); - $config->set('cache.page.max_age', 300); - $config->save(); - $url_generator = \Drupal::urlGenerator(); $url_generator->setContext(new RequestContext()); $accept_header_cache_uri = $url_generator->getPathFromRoute('system_test.page_cache_accept_header'); @@ -104,11 +98,6 @@ function testAcceptHeaderRequests() { * Tests support of requests with If-Modified-Since and If-None-Match headers. */ function testConditionalRequests() { - $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); - $config->set('cache.page.max_age', 300); - $config->save(); - // Fill the cache. $this->drupalGet(''); // Verify the page is not printed twice when the cache is cold. @@ -150,8 +139,6 @@ function testConditionalRequests() { */ function testPageCache() { $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); - $config->set('cache.page.max_age', 300); $config->set('response.gzip', 1); $config->save(); @@ -195,11 +182,6 @@ function testPageCache() { * Tests the omit_vary_cookie setting. */ public function testPageCacheWithoutVaryCookie() { - $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); - $config->set('cache.page.max_age', 300); - $config->save(); - $settings['settings']['omit_vary_cookie'] = (object) array( 'value' => TRUE, 'required' => TRUE, @@ -226,8 +208,6 @@ public function testPageCacheWithoutVaryCookie() { */ function testPageCompression() { $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); - $config->set('cache.page.max_age', 300); $config->set('response.gzip', 1); $config->save(); diff --git a/core/modules/system/config/install/system.performance.yml b/core/modules/system/config/install/system.performance.yml index 1e75b4b..058f9e8 100644 --- a/core/modules/system/config/install/system.performance.yml +++ b/core/modules/system/config/install/system.performance.yml @@ -1,6 +1,5 @@ cache: page: - use_internal: false max_age: 0 css: preprocess: true diff --git a/core/modules/system/config/schema/system.schema.yml b/core/modules/system/config/schema/system.schema.yml index a8d13fa..c0f1906 100644 --- a/core/modules/system/config/schema/system.schema.yml +++ b/core/modules/system/config/schema/system.schema.yml @@ -161,14 +161,11 @@ system.performance: mapping: page: type: mapping - label: 'Page cache' + label: 'Page caching' mapping: - use_internal: - type: boolean - label: 'Use internal page cache' max_age: type: integer - label: 'Max age of page cache' + label: 'Max age' css: type: mapping label: 'CSS performance settings' diff --git a/core/modules/system/src/Form/PerformanceForm.php b/core/modules/system/src/Form/PerformanceForm.php index 9049c78..e007df9 100644 --- a/core/modules/system/src/Form/PerformanceForm.php +++ b/core/modules/system/src/Form/PerformanceForm.php @@ -121,6 +121,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#type' => 'details', '#title' => t('Caching'), '#open' => TRUE, + '#description' => $this->t('Note: Drupal provides an internal page cache module that is recommended for small to medium-sized websites.'), ); // Identical options to the ones for block caching. // @see \Drupal\Core\Block\BlockBase::buildConfigurationForm() @@ -132,14 +133,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#title' => t('Page cache maximum age'), '#default_value' => $config->get('cache.page.max_age'), '#options' => $period, - '#description' => t('The maximum time a page can be cached. This is used as the value for max-age in Cache-Control headers.'), - ); - - $form['caching']['cache'] = array( - '#type' => 'checkbox', - '#title' => t('Use internal page cache'), - '#description' => t("If a reverse proxy cache isn't available, use Drupal's internal cache system to store cached pages."), - '#default_value' => $config->get('cache.page.use_internal'), + '#description' => t('The maximum time a page can be cached by browsers and proxies. This is used as the value for max-age in Cache-Control headers.'), ); $directory = 'public://'; @@ -195,7 +189,6 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $this->renderCache->deleteAll(); $this->config('system.performance') - ->set('cache.page.use_internal', $form_state->getValue('cache')) ->set('cache.page.max_age', $form_state->getValue('page_cache_maximum_age')) ->set('response.gzip', $form_state->getValue('page_compression')) ->set('css.preprocess', $form_state->getValue('preprocess_css')) diff --git a/core/modules/system/src/Tests/Ajax/AjaxFormPageCacheTest.php b/core/modules/system/src/Tests/Ajax/AjaxFormPageCacheTest.php index 9da0935..3e36515 100644 --- a/core/modules/system/src/Tests/Ajax/AjaxFormPageCacheTest.php +++ b/core/modules/system/src/Tests/Ajax/AjaxFormPageCacheTest.php @@ -17,11 +17,15 @@ class AjaxFormPageCacheTest extends AjaxTestBase { /** * {@inheritdoc} */ + public static $modules = ['page_cache']; + + /** + * {@inheritdoc} + */ public function setUp() { parent::setUp(); $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); $config->set('cache.page.max_age', 300); $config->save(); } diff --git a/core/modules/system/src/Tests/Cache/PageCacheTagsTestBase.php b/core/modules/system/src/Tests/Cache/PageCacheTagsTestBase.php index 3e3b1bc..7909300 100644 --- a/core/modules/system/src/Tests/Cache/PageCacheTagsTestBase.php +++ b/core/modules/system/src/Tests/Cache/PageCacheTagsTestBase.php @@ -26,12 +26,16 @@ /** * {@inheritdoc} */ + protected static $modules = ['page_cache']; + + /** + * {@inheritdoc} + */ protected function setUp() { parent::setUp(); // Enable page caching. $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); $config->set('cache.page.max_age', 3600); $config->save(); } diff --git a/core/modules/system/src/Tests/Form/FormStoragePageCacheTest.php b/core/modules/system/src/Tests/Form/FormStoragePageCacheTest.php index d04be90..bac12db 100644 --- a/core/modules/system/src/Tests/Form/FormStoragePageCacheTest.php +++ b/core/modules/system/src/Tests/Form/FormStoragePageCacheTest.php @@ -19,7 +19,7 @@ class FormStoragePageCacheTest extends WebTestBase { /** * @var array */ - public static $modules = array('form_test'); + public static $modules = array('form_test', 'page_cache'); /** * {@inheritdoc} @@ -28,7 +28,6 @@ protected function setUp() { parent::setUp(); $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); $config->set('cache.page.max_age', 300); $config->save(); } diff --git a/core/modules/system/src/Tests/Session/SessionTest.php b/core/modules/system/src/Tests/Session/SessionTest.php index bbe23f6..95eae11 100644 --- a/core/modules/system/src/Tests/Session/SessionTest.php +++ b/core/modules/system/src/Tests/Session/SessionTest.php @@ -144,8 +144,8 @@ function testEmptyAnonymousSession() { $this->assertSessionEmpty(TRUE); // The same behavior is expected when caching is enabled. + $this->assertTrue($this->container->get('module_installer')->install(['page_cache']), 'Page cache module installed.'); $config = $this->config('system.performance'); - $config->set('cache.page.use_internal', 1); $config->set('cache.page.max_age', 300); $config->save(); $this->drupalGet(''); diff --git a/core/modules/system/system.module b/core/modules/system/system.module index 007595e..369e4a2 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -84,7 +84,7 @@ function system_help($route_name, RouteMatchInterface $route_match) { $output .= '
' . t('Managing themes') . '
'; $output .= '
' . t('The System module allows users with the appropriate permissions to install and uninstall themes on the Appearance administration page. Themes determine the design and presentation of your site. Drupal comes packaged with several core themes, and additional contributed themes are available at the Drupal.org theme page.', array('@themes' => \Drupal::url('system.themes_page'), '@drupal-themes' => 'http://drupal.org/project/themes')) . '
'; $output .= '
' . t('Managing caching') . '
'; - $output .= '
' . t("The System module allows users with the appropriate permissions to manage caching on the Performance settings page. Drupal has a robust caching system that allows the efficient re-use of previously-constructed web pages and web page components. Pages requested by anonymous users are stored in a compressed format; depending on your site configuration and the amount of your web traffic tied to anonymous visitors, the caching system may significantly increase the speed of your site.", array('@cache-settings' => \Drupal::url('system.performance_settings'))) . '
'; + $output .= '
' . t("The System module allows users with the appropriate permissions to manage caching on the Performance settings page. Drupal has a robust caching system that allows the efficient re-use of previously-constructed web page components.", array('@cache-settings' => \Drupal::url('system.performance_settings'))) . '
'; $output .= '
' . t('Performing system maintenance') . '
'; $output .= '
' . t('In order for the site and its modules to continue to operate well, a set of routine administrative operations must run on a regular basis. The System module manages this task by making use of a system cron job. You can verify the status of cron tasks by visiting the Status report page. For more information, see the online handbook entry for configuring cron jobs. You can set up cron job by visiting Cron configuration page', array('@status' => \Drupal::url('system.status'), '@handbook' => 'http://drupal.org/cron', '@cron' => \Drupal::url('system.cron_settings'))) . '
'; $output .= '
' . t('Configuring basic site settings') . '
'; diff --git a/core/tests/Drupal/Tests/Core/Form/FormCacheTest.php b/core/tests/Drupal/Tests/Core/Form/FormCacheTest.php index 138309e..c1f33fc 100644 --- a/core/tests/Drupal/Tests/Core/Form/FormCacheTest.php +++ b/core/tests/Drupal/Tests/Core/Form/FormCacheTest.php @@ -488,8 +488,10 @@ public function testSetCacheBuildIdMismatch() { /** * @covers ::setCache + * + * @todo Move this test to page_cache module. */ - public function testSetCacheImmutableForm() { + public function atestSetCacheImmutableForm() { $form_build_id = 'the_form_build_id'; $form = [ '#form_id' => 'the_form_id', @@ -508,7 +510,7 @@ public function testSetCacheImmutableForm() { ->with($form_build_id, $form_state_data, $this->isType('int')); // Rebuild the FormCache with a config factory that will return a config - // object with the internal page cache enabled. + // object with the page_cache module enabled. $this->configFactory = $this->getConfigFactoryStub(['system.performance' => ['cache.page.use_internal' => TRUE]]); $root = dirname(dirname(substr(__DIR__, 0, -strlen(__NAMESPACE__)))); $this->formCache = $this->getMockBuilder('Drupal\Core\Form\FormCache')