diff --git a/core/modules/editor/tests/src/Kernel/QuickEditIntegrationTest.php b/core/modules/editor/tests/src/Kernel/QuickEditIntegrationTest.php
index d62cb68..c04fe2d 100644
--- a/core/modules/editor/tests/src/Kernel/QuickEditIntegrationTest.php
+++ b/core/modules/editor/tests/src/Kernel/QuickEditIntegrationTest.php
@@ -9,7 +9,7 @@
 use Drupal\entity_test\Entity\EntityTest;
 use Drupal\quickedit\MetadataGenerator;
 use Drupal\Tests\quickedit\Kernel\QuickEditTestBase;
-use Drupal\quickedit_test\MockEditEntityFieldAccessCheck;
+use Drupal\quickedit_test\MockQuickEditEntityFieldAccessCheck;
 use Drupal\editor\EditorController;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
@@ -52,7 +52,7 @@ class QuickEditIntegrationTest extends QuickEditTestBase {
   /**
    * The access checker object to be used by the metadata generator object.
    *
-   * @var \Drupal\quickedit\Access\EditEntityFieldAccessCheckInterface
+   * @var \Drupal\quickedit\Access\QuickEditEntityFieldAccessCheckInterface
    */
   protected $accessChecker;
 
@@ -165,7 +165,7 @@ public function testEditorSelection() {
    */
   public function testMetadata() {
     $this->editorManager = $this->container->get('plugin.manager.quickedit.editor');
-    $this->accessChecker = new MockEditEntityFieldAccessCheck();
+    $this->accessChecker = new MockQuickEditEntityFieldAccessCheck();
     $this->editorSelector = $this->container->get('quickedit.editor.selector');
     $this->metadataGenerator = new MetadataGenerator($this->accessChecker, $this->editorSelector, $this->editorManager);
 
diff --git a/core/modules/quickedit/quickedit.services.yml b/core/modules/quickedit/quickedit.services.yml
index 692ba2f..3d7d934 100644
--- a/core/modules/quickedit/quickedit.services.yml
+++ b/core/modules/quickedit/quickedit.services.yml
@@ -3,7 +3,7 @@ services:
     class: Drupal\quickedit\Plugin\InPlaceEditorManager
     parent: default_plugin_manager
   access_check.quickedit.entity_field:
-    class: Drupal\quickedit\Access\EditEntityFieldAccessCheck
+    class: Drupal\quickedit\Access\QuickEditEntityFieldAccessCheck
     tags:
       - { name: access_check, applies_to: _access_quickedit_entity_field }
   quickedit.editor.selector:
diff --git a/core/modules/quickedit/src/Access/EditEntityFieldAccessCheck.php b/core/modules/quickedit/src/Access/EditEntityFieldAccessCheck.php
index 7b38838..52f3e20 100644
--- a/core/modules/quickedit/src/Access/EditEntityFieldAccessCheck.php
+++ b/core/modules/quickedit/src/Access/EditEntityFieldAccessCheck.php
@@ -8,55 +8,13 @@
 use Drupal\Core\Entity\EntityInterface;
 
 /**
+ * @deprecated in Drupal 8.3.x, will be removed before Drupal 9.x
+ */
+/**
  * Access check for editing entity fields.
  */
-class EditEntityFieldAccessCheck implements AccessInterface, EditEntityFieldAccessCheckInterface {
-
+class EditEntityFieldAccessCheck extends QuickEditEntityFieldAccessCheck {
   /**
    * Checks Quick Edit access to the field.
-   *
-   * @param \Drupal\Core\Entity\EntityInterface $entity
-   *   The entity containing the field.
-   * @param string $field_name
-   *   The field name.
-   * @param string $langcode
-   *   The langcode.
-   * @param \Drupal\Core\Session\AccountInterface $account
-   *   The currently logged in account.
-   *
-   * @return \Drupal\Core\Access\AccessResultInterface
-   *   The access result.
-   *
-   * @todo Use the $account argument: https://www.drupal.org/node/2266809.
-   */
-  public function access(EntityInterface $entity, $field_name, $langcode, AccountInterface $account) {
-    if (!$this->validateRequestAttributes($entity, $field_name, $langcode)) {
-      return AccessResult::forbidden();
-    }
-
-    return $this->accessEditEntityField($entity, $field_name);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function accessEditEntityField(EntityInterface $entity, $field_name) {
-    return $entity->access('update', NULL, TRUE)->andIf($entity->get($field_name)->access('edit', NULL, TRUE));
-  }
-
-  /**
-   * Validates request attributes.
    */
-  protected function validateRequestAttributes(EntityInterface $entity, $field_name, $langcode) {
-    // Validate the field name and language.
-    if (!$field_name || !$entity->hasField($field_name)) {
-      return FALSE;
-    }
-    if (!$langcode || !$entity->hasTranslation($langcode)) {
-      return FALSE;
-    }
-
-    return TRUE;
-  }
-
 }
diff --git a/core/modules/quickedit/src/Access/EditEntityFieldAccessCheckInterface.php b/core/modules/quickedit/src/Access/EditEntityFieldAccessCheckInterface.php
index c7f14e2..d8f3f28 100644
--- a/core/modules/quickedit/src/Access/EditEntityFieldAccessCheckInterface.php
+++ b/core/modules/quickedit/src/Access/EditEntityFieldAccessCheckInterface.php
@@ -7,19 +7,10 @@
 /**
  * Access check for editing entity fields.
  */
-interface EditEntityFieldAccessCheckInterface {
+interface EditEntityFieldAccessCheckInterface extends QuickEditEntityFieldAccessCheckInterface {
 
   /**
    * Checks access to edit the requested field of the requested entity.
-   *
-   * @param \Drupal\Core\Entity\EntityInterface $entity
-   *   The entity.
-   * @param string $field_name
-   *   The field name.
-   *
-   * @return \Drupal\Core\Access\AccessResultInterface
-   *   The access result.
    */
-  public function accessEditEntityField(EntityInterface $entity, $field_name);
 
 }
diff --git a/core/modules/quickedit/src/Access/QuickEditEntityFieldAccessCheck.php b/core/modules/quickedit/src/Access/QuickEditEntityFieldAccessCheck.php
new file mode 100644
index 0000000..9998a2e
--- /dev/null
+++ b/core/modules/quickedit/src/Access/QuickEditEntityFieldAccessCheck.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Drupal\quickedit\Access;
+
+use Drupal\Core\Access\AccessResult;
+use Drupal\Core\Routing\Access\AccessInterface;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\Entity\EntityInterface;
+
+/**
+ * @deprecated in Drupal 8.3.x, will be removed before Drupal 9.x
+ */
+/**
+ * Access check for in-place editing entity fields.
+ */
+class QuickEditEntityFieldAccessCheck implements AccessInterface, QuickEditEntityFieldAccessCheckInterface {
+
+  /**
+   * Checks Quick Edit access to the field.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity containing the field.
+   * @param string $field_name
+   *   The field name.
+   * @param string $langcode
+   *   The langcode.
+   * @param \Drupal\Core\Session\AccountInterface $account
+   *   The currently logged in account.
+   *
+   * @return \Drupal\Core\Access\AccessResultInterface
+   *   The access result.
+   *
+   * @todo Use the $account argument: https://www.drupal.org/node/2266809.
+   */
+  public function access(EntityInterface $entity, $field_name, $langcode, AccountInterface $account) {
+    if (!$this->validateRequestAttributes($entity, $field_name, $langcode)) {
+      return AccessResult::forbidden();
+    }
+
+    return $this->accessEditEntityField($entity, $field_name);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function accessEditEntityField(EntityInterface $entity, $field_name) {
+    return $entity->access('update', NULL, TRUE)->andIf($entity->get($field_name)->access('edit', NULL, TRUE));
+  }
+
+  /**
+   * Validates request attributes.
+   */
+  protected function validateRequestAttributes(EntityInterface $entity, $field_name, $langcode) {
+    // Validate the field name and language.
+    if (!$field_name || !$entity->hasField($field_name)) {
+      return FALSE;
+    }
+    if (!$langcode || !$entity->hasTranslation($langcode)) {
+      return FALSE;
+    }
+
+    return TRUE;
+  }
+
+}
diff --git a/core/modules/quickedit/src/Access/QuickEditEntityFieldAccessCheckInterface.php b/core/modules/quickedit/src/Access/QuickEditEntityFieldAccessCheckInterface.php
new file mode 100644
index 0000000..2e0a2c2
--- /dev/null
+++ b/core/modules/quickedit/src/Access/QuickEditEntityFieldAccessCheckInterface.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Drupal\quickedit\Access;
+
+use Drupal\Core\Entity\EntityInterface;
+
+/**
+ * @deprecated in Drupal 8.3.x, will be removed before Drupal 9.x
+ */
+/**
+ * Access check for in-place editing entity fields.
+ */
+interface QuickEditEntityFieldAccessCheckInterface {
+
+  /**
+   * Checks access to edit the requested field of the requested entity.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity.
+   * @param string $field_name
+   *   The field name.
+   *
+   * @return \Drupal\Core\Access\AccessResultInterface
+   *   The access result.
+   */
+  public function accessEditEntityField(EntityInterface $entity, $field_name);
+
+}
diff --git a/core/modules/quickedit/src/MetadataGenerator.php b/core/modules/quickedit/src/MetadataGenerator.php
index a22bf65..06f0daf 100644
--- a/core/modules/quickedit/src/MetadataGenerator.php
+++ b/core/modules/quickedit/src/MetadataGenerator.php
@@ -5,7 +5,7 @@
 use Drupal\Component\Plugin\PluginManagerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Field\FieldItemListInterface;
-use Drupal\quickedit\Access\EditEntityFieldAccessCheckInterface;
+use Drupal\quickedit\Access\QuickEditEntityFieldAccessCheckInterface;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
 
 /**
@@ -16,7 +16,7 @@ class MetadataGenerator implements MetadataGeneratorInterface {
   /**
    * An object that checks if a user has access to edit a given entity field.
    *
-   * @var \Drupal\quickedit\Access\EditEntityFieldAccessCheckInterface
+   * @var \Drupal\quickedit\Access\QuickEditEntityFieldAccessCheckInterface
    */
   protected $accessChecker;
 
@@ -37,14 +37,14 @@ class MetadataGenerator implements MetadataGeneratorInterface {
   /**
    * Constructs a new MetadataGenerator.
    *
-   * @param \Drupal\quickedit\Access\EditEntityFieldAccessCheckInterface $access_checker
+   * @param \Drupal\quickedit\Access\QuickEditEntityFieldAccessCheckInterface $access_checker
    *   An object that checks if a user has access to edit a given field.
    * @param \Drupal\quickedit\EditorSelectorInterface $editor_selector
    *   An object that determines which editor to attach to a given field.
    * @param \Drupal\Component\Plugin\PluginManagerInterface $editor_manager
    *   The manager for editor plugins.
    */
-  public function __construct(EditEntityFieldAccessCheckInterface $access_checker, EditorSelectorInterface $editor_selector, PluginManagerInterface $editor_manager) {
+  public function __construct(QuickEditEntityFieldAccessCheckInterface $access_checker, EditorSelectorInterface $editor_selector, PluginManagerInterface $editor_manager) {
     $this->accessChecker = $access_checker;
     $this->editorSelector = $editor_selector;
     $this->editorManager = $editor_manager;
diff --git a/core/modules/quickedit/tests/modules/src/MockEditEntityFieldAccessCheck.php b/core/modules/quickedit/tests/modules/src/MockEditEntityFieldAccessCheck.php
index b5d9456..3691a0c 100644
--- a/core/modules/quickedit/tests/modules/src/MockEditEntityFieldAccessCheck.php
+++ b/core/modules/quickedit/tests/modules/src/MockEditEntityFieldAccessCheck.php
@@ -3,18 +3,14 @@
 namespace Drupal\quickedit_test;
 
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\quickedit\Access\EditEntityFieldAccessCheckInterface;
+use Drupal\quickedit\Access\QuickEditEntityFieldAccessCheckInterface;
 
 /**
+ * @deprecated in Drupal 8.3.x, will be removed before Drupal 9.x
+ */
+/**
  * Access check for editing entity fields.
  */
-class MockEditEntityFieldAccessCheck implements EditEntityFieldAccessCheckInterface {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function accessEditEntityField(EntityInterface $entity, $field_name) {
-    return TRUE;
-  }
+class MockEditEntityFieldAccessCheck extends MockQuickEditEntityFieldAccessCheck {
 
 }
diff --git a/core/modules/quickedit/tests/modules/src/MockQuickEditEntityFieldAccessCheck.php b/core/modules/quickedit/tests/modules/src/MockQuickEditEntityFieldAccessCheck.php
new file mode 100644
index 0000000..bc33a33
--- /dev/null
+++ b/core/modules/quickedit/tests/modules/src/MockQuickEditEntityFieldAccessCheck.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Drupal\quickedit_test;
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\quickedit\Access\QuickEditEntityFieldAccessCheckInterface;
+
+/**
+ * @deprecated in Drupal 8.3.x, will be removed before Drupal 9.x
+ */
+/**
+ * Access check for in-place editing entity fields.
+ */
+class MockQuickEditEntityFieldAccessCheck implements QuickEditEntityFieldAccessCheckInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function accessEditEntityField(EntityInterface $entity, $field_name) {
+    return TRUE;
+  }
+
+}
diff --git a/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php b/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php
index 7fdc8fb..28480f4 100644
--- a/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php
+++ b/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php
@@ -5,7 +5,7 @@
 use Drupal\entity_test\Entity\EntityTest;
 use Drupal\quickedit\EditorSelector;
 use Drupal\quickedit\MetadataGenerator;
-use Drupal\quickedit_test\MockEditEntityFieldAccessCheck;
+use Drupal\quickedit_test\MockQuickEditEntityFieldAccessCheck;
 use Drupal\filter\Entity\FilterFormat;
 
 /**
@@ -44,7 +44,7 @@ class MetadataGeneratorTest extends QuickEditTestBase {
   /**
    * The access checker object to be used by the metadata generator object.
    *
-   * @var \Drupal\quickedit\Access\EditEntityFieldAccessCheckInterface
+   * @var \Drupal\quickedit\Access\QuickEditEntityFieldAccessCheckInterface
    */
   protected $accessChecker;
 
@@ -52,7 +52,7 @@ protected function setUp() {
     parent::setUp();
 
     $this->editorManager = $this->container->get('plugin.manager.quickedit.editor');
-    $this->accessChecker = new MockEditEntityFieldAccessCheck();
+    $this->accessChecker = new MockQuickEditEntityFieldAccessCheck();
     $this->editorSelector = new EditorSelector($this->editorManager, $this->container->get('plugin.manager.field.formatter'));
     $this->metadataGenerator = new MetadataGenerator($this->accessChecker, $this->editorSelector, $this->editorManager);
   }
diff --git a/core/modules/quickedit/tests/src/Unit/Access/EditEntityFieldAccessCheckTest.php b/core/modules/quickedit/tests/src/Unit/Access/EditEntityFieldAccessCheckTest.php
index d7ceb59..6a158e0 100644
--- a/core/modules/quickedit/tests/src/Unit/Access/EditEntityFieldAccessCheckTest.php
+++ b/core/modules/quickedit/tests/src/Unit/Access/EditEntityFieldAccessCheckTest.php
@@ -5,12 +5,12 @@
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Cache\Context\CacheContextsManager;
 use Drupal\Core\DependencyInjection\Container;
-use Drupal\quickedit\Access\EditEntityFieldAccessCheck;
+use Drupal\quickedit\Access\QuickEditEntityFieldAccessCheck;
 use Drupal\Tests\UnitTestCase;
 use Drupal\Core\Language\LanguageInterface;
 
 /**
- * @coversDefaultClass \Drupal\quickedit\Access\EditEntityFieldAccessCheck
+ * @coversDefaultClass \Drupal\quickedit\Access\QuickEditEntityFieldAccessCheck
  * @group Access
  * @group quickedit
  */
@@ -19,7 +19,7 @@ class EditEntityFieldAccessCheckTest extends UnitTestCase {
   /**
    * The tested access checker.
    *
-   * @var \Drupal\quickedit\Access\EditEntityFieldAccessCheck
+   * @var \Drupal\quickedit\Access\QuickEditEntityFieldAccessCheck
    */
   protected $editAccessCheck;
 
@@ -27,7 +27,7 @@ class EditEntityFieldAccessCheckTest extends UnitTestCase {
    * {@inheritdoc}
    */
   protected function setUp() {
-    $this->editAccessCheck = new EditEntityFieldAccessCheck();
+    $this->editAccessCheck = new QuickEditEntityFieldAccessCheck();
 
     $cache_contexts_manager = $this->prophesize(CacheContextsManager::class);
     $cache_contexts_manager->assertValidTokens()->willReturn(TRUE);
@@ -40,7 +40,7 @@ protected function setUp() {
   /**
    * Provides test data for testAccess().
    *
-   * @see \Drupal\Tests\edit\Unit\quickedit\Access\EditEntityFieldAccessCheckTest::testAccess()
+   * @see \Drupal\Tests\edit\Unit\quickedit\Access\QuickEditEntityFieldAccessCheckTest::testAccess()
    */
   public function providerTestAccess() {
     $data = array();
diff --git a/core/modules/quickedit/tests/src/Unit/Access/QuickEditEntityFieldAccessCheckTest.php b/core/modules/quickedit/tests/src/Unit/Access/QuickEditEntityFieldAccessCheckTest.php
new file mode 100644
index 0000000..9f35057
--- /dev/null
+++ b/core/modules/quickedit/tests/src/Unit/Access/QuickEditEntityFieldAccessCheckTest.php
@@ -0,0 +1,149 @@
+<?php
+
+namespace Drupal\Tests\quickedit\Unit\Access;
+
+use Drupal\Core\Access\AccessResult;
+use Drupal\Core\Cache\Context\CacheContextsManager;
+use Drupal\Core\DependencyInjection\Container;
+use Drupal\quickedit\Access\QuickEditEntityFieldAccessCheck;
+use Drupal\Tests\UnitTestCase;
+use Drupal\Core\Language\LanguageInterface;
+
+/**
+ * @coversDefaultClass \Drupal\quickedit\Access\QuickEditEntityFieldAccessCheck
+ * @group Access
+ * @group quickedit
+ */
+class QuickEditEntityFieldAccessCheckTest extends UnitTestCase {
+
+  /**
+   * The tested access checker.
+   *
+   * @var \Drupal\quickedit\Access\QuickEditEntityFieldAccessCheck
+   */
+  protected $editAccessCheck;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    $this->editAccessCheck = new QuickEditEntityFieldAccessCheck();
+
+    $cache_contexts_manager = $this->prophesize(CacheContextsManager::class);
+    $cache_contexts_manager->assertValidTokens()->willReturn(TRUE);
+    $cache_contexts_manager->reveal();
+    $container = new Container();
+    $container->set('cache_contexts_manager', $cache_contexts_manager);
+    \Drupal::setContainer($container);
+  }
+
+  /**
+   * Provides test data for testAccess().
+   *
+   * @see \Drupal\Tests\edit\Unit\quickedit\Access\QuickEditEntityFieldAccessCheckTest::testAccess()
+   */
+  public function providerTestAccess() {
+    $data = array();
+    $data[] = array(TRUE, TRUE, AccessResult::allowed());
+    $data[] = array(FALSE, TRUE, AccessResult::neutral());
+    $data[] = array(TRUE, FALSE, AccessResult::neutral());
+    $data[] = array(FALSE, FALSE, AccessResult::neutral());
+
+    return $data;
+  }
+
+  /**
+   * Tests the method for checking access to routes.
+   *
+   * @param bool $entity_is_editable
+   *   Whether the subject entity is editable.
+   * @param bool $field_storage_is_accessible
+   *   Whether the user has access to the field storage entity.
+   * @param \Drupal\Core\Access\AccessResult $expected_result
+   *   The expected result of the access call.
+   *
+   * @dataProvider providerTestAccess
+   */
+  public function testAccess($entity_is_editable, $field_storage_is_accessible, AccessResult $expected_result) {
+    $entity = $this->createMockEntity();
+    $entity->expects($this->any())
+      ->method('access')
+      ->willReturn(AccessResult::allowedIf($entity_is_editable)->cachePerPermissions());
+
+    $field_storage = $this->getMock('Drupal\field\FieldStorageConfigInterface');
+    $field_storage->expects($this->any())
+      ->method('access')
+      ->willReturn(AccessResult::allowedIf($field_storage_is_accessible));
+
+    $expected_result->cachePerPermissions();
+
+    $field_name = 'valid';
+    $entity_with_field = clone $entity;
+    $entity_with_field->expects($this->any())
+      ->method('get')
+      ->with($field_name)
+      ->will($this->returnValue($field_storage));
+    $entity_with_field->expects($this->once())
+      ->method('hasTranslation')
+      ->with(LanguageInterface::LANGCODE_NOT_SPECIFIED)
+      ->will($this->returnValue(TRUE));
+
+    $account = $this->getMock('Drupal\Core\Session\AccountInterface');
+    $access = $this->editAccessCheck->access($entity_with_field, $field_name, LanguageInterface::LANGCODE_NOT_SPECIFIED, $account);
+    $this->assertEquals($expected_result, $access);
+  }
+
+  /**
+   * Tests checking access to routes that result in AccessResult::isForbidden().
+   *
+   * @dataProvider providerTestAccessForbidden
+   */
+  public function testAccessForbidden($field_name, $langcode) {
+    $account = $this->getMock('Drupal\Core\Session\AccountInterface');
+    $entity = $this->createMockEntity();
+    $this->assertEquals(AccessResult::forbidden(), $this->editAccessCheck->access($entity, $field_name, $langcode, $account));
+  }
+
+  /**
+   * Provides test data for testAccessForbidden.
+   */
+  public function providerTestAccessForbidden() {
+    $data = array();
+    // Tests the access method without a field_name.
+    $data[] = array(NULL, LanguageInterface::LANGCODE_NOT_SPECIFIED);
+    // Tests the access method with a non-existent field.
+    $data[] = array('not_valid', LanguageInterface::LANGCODE_NOT_SPECIFIED);
+    // Tests the access method without a langcode.
+    $data[] = array('valid', NULL);
+    // Tests the access method with an invalid langcode.
+    $data[] = array('valid', 'xx-lolspeak');
+    return $data;
+  }
+
+  /**
+   * Returns a mock entity.
+   *
+   * @return \Drupal\Core\Entity\EntityInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected function createMockEntity() {
+    $entity = $this->getMockBuilder('Drupal\entity_test\Entity\EntityTest')
+      ->disableOriginalConstructor()
+      ->getMock();
+
+    $entity->expects($this->any())
+      ->method('hasTranslation')
+      ->will($this->returnValueMap(array(
+        array(LanguageInterface::LANGCODE_NOT_SPECIFIED, TRUE),
+        array('xx-lolspeak', FALSE),
+      )));
+    $entity->expects($this->any())
+      ->method('hasField')
+      ->will($this->returnValueMap(array(
+        array('valid', TRUE),
+        array('not_valid', FALSE),
+      )));
+
+    return $entity;
+  }
+
+}
