diff --git a/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php b/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php index 6104b0a..33a2b59 100644 --- a/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php +++ b/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php @@ -277,8 +277,7 @@ protected function processAssetLibraries(array $attached, array $placeholders) { // Take Ajax page state into account, to allow for something like Turbolinks // to be implemented without altering core. // @see https://github.com/rails/turbolinks/ - // @todo https://www.drupal.org/node/2497115 - Below line is broken due to ->request. - $ajax_page_state = $this->requestStack->getCurrentRequest()->request->get('ajax_page_state'); + $ajax_page_state = $this->requestStack->getCurrentRequest()->get('ajax_page_state'); $assets->setAlreadyLoadedLibraries(isset($ajax_page_state) ? explode(',', $ajax_page_state['libraries']) : []); $variables = []; diff --git a/core/modules/system/src/Tests/Render/AjaxPageStateTest.php b/core/modules/system/src/Tests/Render/AjaxPageStateTest.php new file mode 100644 index 0000000..0acd207 --- /dev/null +++ b/core/modules/system/src/Tests/Render/AjaxPageStateTest.php @@ -0,0 +1,115 @@ +adminUser = $this->drupalCreateUser(array_keys(\Drupal::service('user.permissions') + ->getPermissions())); + + // Login so there are more libraries to test with otherwise only html5shiv + // is the only one in the source we can easily test for. + $this->drupalLogin($this->adminUser); + } + + /** + * Default functionality without the param ajax_page_state[libraries]. + * + * The libraries html5shiv and drupalSettings are loaded default from core + * and available in code as scripts. Do this as the base test. + */ + public function testLibrariesAvailable() { + $this->drupalGet('node', array()); + $this->assertRaw( + '/core/assets/vendor/html5shiv/html5shiv.min.js', + 'The html5shiv library from core should be loaded.' + ); + $this->assertRaw( + '/core/misc/drupalSettingsLoader.js', + 'The Dupalsettings library from core should be loaded.' + ); + } + + /** + * Give ajax_page_state[libraries]=core/html5shiv to exclude the library. + * + * When called with ajax_page_state[libraries]=core/html5shiv the library + * should be excluded as it is already loaded. This should not affect other + * libraries so test if drupalSettings is still available. + * + */ + public function testHtml5ShivIsNotLoaded() { + $this->drupalGet('node', + array( + "query" => + array( + 'ajax_page_state' => array( + 'libraries' => 'core/html5shiv' + ) + ) + ) + ); + $this->assertNoRaw( + '/core/assets/vendor/html5shiv/html5shiv.min.js', + 'The html5shiv library from core should be excluded from loading' + ); + + $this->assertRaw( + '/core/misc/drupalSettingsLoader.js', + 'The Dupalsettings library from core should be loaded.' + ); + } + + /** + * Test if multiple libaries can be excluded. + * + * ajax_page_state[libraries] should be able to support multiple libraries + * comma separated. + * + */ + public function testMultipleLibrariesAreNotLoaded() { + $this->drupalGet('node', + array( + "query" => + array( + 'ajax_page_state' => array( + 'libraries' => 'core/html5shiv,core/drupalSettings' + ) + ) + ) + ); + $this->assertNoRaw( + '/core/assets/vendor/html5shiv/html5shiv.min.js', + 'The html5shiv library from core should be excluded from loading.' + ); + + $this->assertNoRaw( + '/core/misc/drupalSettingsLoader.js', + 'The Dupalsettings library from core should be excluded from loading.' + ); + } +}