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.'
+ );
+ }
+}