diff --git a/core/modules/system/src/Tests/Menu/MenuTranslateTest.php b/core/modules/system/src/Tests/Menu/MenuAccessTest.php
similarity index 57%
rename from core/modules/system/src/Tests/Menu/MenuTranslateTest.php
rename to core/modules/system/src/Tests/Menu/MenuAccessTest.php
index 3641ab1fb0ddb7941d0ad655d698c7da0a899572..8867dcb390c28fe01c606c09b815975413154997 100644
--- a/core/modules/system/src/Tests/Menu/MenuTranslateTest.php
+++ b/core/modules/system/src/Tests/Menu/MenuAccessTest.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\system\Tests\Menu\MenuTranslateTest.
+ * Contains \Drupal\system\Tests\Menu\MenuAccessTest.
  */
 
 namespace Drupal\system\Tests\Menu;
@@ -11,12 +11,11 @@
 use Drupal\simpletest\WebTestBase;
 
 /**
- * Tests the _menu_translate() method.
+ * Tests the route access checks on menu links.
  *
  * @group Menu
- * @see _menu_translate().
  */
-class MenuTranslateTest extends WebTestBase {
+class MenuAccessTest extends WebTestBase {
 
   /**
    * Modules to enable.
@@ -35,9 +34,23 @@ protected function setUp() {
   }
 
   /**
-   * Tests _menu_translate().
+   * Tests menu link for route with access check.
+   *
+   * @see \Drupal\menu_test\Access\AccessCheck::access()
    */
-  public function testMenuTranslate() {
+  public function testMenuBlockLinksAccessCheck() {
+    $this->drupalPlaceBlock('system_menu_block:account');
+    // Test that there's link rendered on the route.
+    $this->drupalGet('menu_test_access_check_session');
+    $this->assertLink('Test custom route access check');
+    // Page still accessible but thre should not be menu link.
+    $this->drupalGet('menu_test_access_check_session');
+    $this->assertResponse(200);
+    $this->assertNoLink('Test custom route access check');
+    // Test that page is no more accessible.
+    $this->drupalGet('menu_test_access_check_session');
+    $this->assertResponse(403);
+
     // Check for access to a restricted local task from a default local task.
     $this->drupalGet('foo/asdf');
     $this->assertResponse(200);
diff --git a/core/modules/system/tests/modules/menu_test/menu_test.links.menu.yml b/core/modules/system/tests/modules/menu_test/menu_test.links.menu.yml
index 613bc9211776ca4956be4c00eb4446cb0aa7ebec..eecd42c9a1da56bcff7ef124ec310a1d40ecc08c 100644
--- a/core/modules/system/tests/modules/menu_test/menu_test.links.menu.yml
+++ b/core/modules/system/tests/modules/menu_test/menu_test.links.menu.yml
@@ -83,3 +83,8 @@ menu_test.child:
 menu_test.unsafe:
   route_name: menu_test.menu_name_test
   deriver: '\Drupal\menu_test\Plugin\Derivative\MenuLinkTestWithUnsafeTitle'
+
+menu_test.access_check:
+  title: 'Test custom route access check'
+  route_name: menu_test.router_test_session
+  menu_name: account
diff --git a/core/modules/system/tests/modules/menu_test/menu_test.routing.yml b/core/modules/system/tests/modules/menu_test/menu_test.routing.yml
index b69d72259bc20d6574f38c42c93ecbe2db9ef458..751bdf7bc41d72f4b2c614ca4cbf84f83b96a4bf 100644
--- a/core/modules/system/tests/modules/menu_test/menu_test.routing.yml
+++ b/core/modules/system/tests/modules/menu_test/menu_test.routing.yml
@@ -74,6 +74,15 @@ menu_test.router_test4:
   requirements:
     _access: 'TRUE'
 
+menu_test.router_test_session:
+  path: '/menu_test_access_check_session'
+  defaults:
+    _controller: '\Drupal\menu_test\TestControllers::testSession'
+  options:
+    no_cache: TRUE
+  requirements:
+    _menu_test_session_access: 'TRUE'
+
 menu_test.local_action1:
   path: '/menu-test-local-action'
   defaults:
diff --git a/core/modules/system/tests/modules/menu_test/menu_test.services.yml b/core/modules/system/tests/modules/menu_test/menu_test.services.yml
index 8841320535a90954acf43c97359eff9f191b0889..81f1f50b95786b8087bf42f1a2718e7e7c58a0a3 100644
--- a/core/modules/system/tests/modules/menu_test/menu_test.services.yml
+++ b/core/modules/system/tests/modules/menu_test/menu_test.services.yml
@@ -3,3 +3,8 @@ services:
     class: Drupal\menu_test\Theme\TestThemeNegotiator
     tags:
       - { name: theme_negotiator }
+
+  access_check.menu_test_session:
+    class: Drupal\menu_test\Access\AccessCheck
+    tags:
+      - { name: access_check, applies_to: _menu_test_session_access }
diff --git a/core/modules/system/tests/modules/menu_test/src/Access/AccessCheck.php b/core/modules/system/tests/modules/menu_test/src/Access/AccessCheck.php
new file mode 100644
index 0000000000000000000000000000000000000000..c6b9054a1704eb3ce7984d30aa45d04c24e47ea5
--- /dev/null
+++ b/core/modules/system/tests/modules/menu_test/src/Access/AccessCheck.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\menu_test\Access\AccessCheck.
+ */
+
+namespace Drupal\menu_test\Access;
+
+use Drupal\Core\Access\AccessResult;
+use Drupal\Core\Routing\Access\AccessInterface;
+
+/**
+ * Checks access based on the 'menu_test' key in session.
+ */
+class AccessCheck implements AccessInterface {
+
+  /**
+   * Check to see if user accessed this page.
+   *
+   * @return \Drupal\Core\Access\AccessResultInterface
+   *   The access result.
+   */
+  public function access() {
+    if (!isset($_SESSION['menu_test'])) {
+      $result = AccessResult::allowed();
+    }
+    else {
+      $result = AccessResult::allowedIf($_SESSION['menu_test'] < 2);
+    }
+    return $result->setCacheMaxAge(0);
+  }
+
+}
diff --git a/core/modules/system/tests/modules/menu_test/src/TestControllers.php b/core/modules/system/tests/modules/menu_test/src/TestControllers.php
index 2a91286412ce34cbcd182a848c30e8d873b9ff53..364c77b01651eb2504dc252fc87906904510d5c1 100644
--- a/core/modules/system/tests/modules/menu_test/src/TestControllers.php
+++ b/core/modules/system/tests/modules/menu_test/src/TestControllers.php
@@ -36,6 +36,17 @@ public function test2() {
     return ['#markup' => 'test2'];
   }
 
+  /**
+   * Prints out test data.
+   */
+  public function testSession() {
+    if (!isset($_SESSION['menu_test'])) {
+      $_SESSION['menu_test'] = 0;
+    }
+    $_SESSION['menu_test']++;
+    return ['#markup' => SafeMarkup::format('Session menu_test is @count', ['@count' => $_SESSION['menu_test']])];
+  }
+
   /**
    * Prints out test data.
    */