diff --git a/core/includes/common.inc b/core/includes/common.inc
index 79f16db..9a1cf73 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -501,7 +501,7 @@ function _format_date_callback(array $matches = NULL, $new_langcode = NULL) {
  *   from the same sub-domain that are not handled by Drupal controllers should
  *   use the base: scheme. For example:
  * @code
- * $installer_url = \Drupal\Core\Url::fromUri('base:core/install.php')->toString();
+ * $installer_url = \Drupal\Core\Url::fromUri(Url::BASE . ':core/install.php')->toString();
  * $external_url = \Drupal\Core\Url::fromUri('http://example.com', ['query' => ['foo' => 'bar']])->toString();
  * $internal_url = \Drupal\Core\Url::fromRoute('system.admin')->toString();
  * @endcode
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index 4191cdf..dd21eb5 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -584,7 +584,7 @@ function install_run_task($task, &$install_state) {
       // Otherwise, the batch will complete.
       // Disable the default script for the URL and clone the object, as
       // batch_process() will add additional options to the batch URL.
-      $url = Url::fromUri('base:install.php', ['query' => $install_state['parameters'], 'script' => '']);
+      $url = Url::fromUri(Url::BASE . ':install.php', ['query' => $install_state['parameters'], 'script' => '']);
       $response = batch_process($url, clone $url);
       if ($response instanceof Response) {
         // Save $_SESSION data from batch.
diff --git a/core/lib/Drupal/Core/Form/ConfirmFormHelper.php b/core/lib/Drupal/Core/Form/ConfirmFormHelper.php
index 6cbf234..a5d2dfe 100644
--- a/core/lib/Drupal/Core/Form/ConfirmFormHelper.php
+++ b/core/lib/Drupal/Core/Form/ConfirmFormHelper.php
@@ -34,7 +34,7 @@ public static function buildCancelLink(ConfirmFormInterface $form, Request $requ
     // If a destination is specified, that serves as the cancel link.
     if ($query->has('destination')) {
       $options = UrlHelper::parse($query->get('destination'));
-      $url = Url::fromUri('user-path:' . $options['path'], $options);
+      $url = Url::fromUri(Url::USER_PATH . $options['path'], $options);
     }
     // Check for a route-based cancel link.
     else {
diff --git a/core/lib/Drupal/Core/Url.php b/core/lib/Drupal/Core/Url.php
index 37550a4..7b94e15 100644
--- a/core/lib/Drupal/Core/Url.php
+++ b/core/lib/Drupal/Core/Url.php
@@ -22,6 +22,10 @@
 class Url {
   use DependencySerializationTrait;
 
+  const ENTITY = 'entity';
+  const USER_PATH = 'user-path';
+  const BASE = 'base';
+
   /**
    * The URL generator.
    *
@@ -250,15 +254,15 @@ public static function fromUri($uri, $options = array()) {
     }
 
     $uri_parts += ['path' => ''];
-    if ($uri_parts['scheme'] === 'entity') {
+    if ($uri_parts['scheme'] === static::ENTITY) {
       $url = static::fromEntityUri($uri);
     }
-    elseif ($uri_parts['scheme'] === 'user-path') {
+    elseif ($uri_parts['scheme'] === static::USER_PATH) {
       $url = static::fromUserPathUri($uri, $options);
     }
     else {
       $url = new static($uri, array(), $options);
-      if ($uri_parts['scheme'] !== 'base') {
+      if ($uri_parts['scheme'] !== static::BASE) {
         $url->external = TRUE;
         $url->setOption('external', TRUE);
       }
@@ -304,7 +308,7 @@ protected static function fromEntityUri($uri) {
   protected static function fromUserPathUri($uri, array $options) {
     $uri_reference = explode(':', $uri, 2)[1];
     $url = \Drupal::pathValidator()
-      ->getUrlIfValidWithoutAccessCheck($uri_reference) ?: static::fromUri('base:' . $uri_reference);
+      ->getUrlIfValidWithoutAccessCheck($uri_reference) ?: static::fromUri(static::BASE . ':' . $uri_reference);
     // Allow to specify additional or override options from the path.
     $url->setOptions($options + $url->getOptions());
 
diff --git a/core/modules/field_ui/src/FieldUI.php b/core/modules/field_ui/src/FieldUI.php
index dcac29a..23b6620 100644
--- a/core/modules/field_ui/src/FieldUI.php
+++ b/core/modules/field_ui/src/FieldUI.php
@@ -61,7 +61,7 @@ public static function getNextDestination(array $destinations) {
         $options['query']['destinations'] = $destinations;
       }
       // Redirect to any given path within the same domain.
-      $next_destination = Url::fromUri('user-path:' . $options['path']);
+      $next_destination = Url::fromUri(Url::USER_PATH . ':' . $options['path']);
     }
     return $next_destination;
   }
diff --git a/core/modules/hal/src/Tests/DenormalizeTest.php b/core/modules/hal/src/Tests/DenormalizeTest.php
index 799585b..79f3780 100644
--- a/core/modules/hal/src/Tests/DenormalizeTest.php
+++ b/core/modules/hal/src/Tests/DenormalizeTest.php
@@ -25,7 +25,7 @@ public function testTypeHandling() {
     $data_with_valid_type = array(
       '_links' => array(
         'type' => array(
-          'href' => Url::fromUri('base:rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
+          'href' => Url::fromUri(Url::BASE . ':rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
         ),
       ),
     );
@@ -37,10 +37,10 @@ public function testTypeHandling() {
       '_links' => array(
         'type' => array(
           array(
-            'href' => Url::fromUri('base:rest/types/foo', array('absolute' => TRUE))->toString(),
+            'href' => Url::fromUri(Url::BASE . ':rest/types/foo', array('absolute' => TRUE))->toString(),
           ),
           array(
-            'href' => Url::fromUri('base:rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
+            'href' => Url::fromUri(Url::BASE . ':rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
           ),
         ),
       ),
@@ -52,7 +52,7 @@ public function testTypeHandling() {
     $data_with_invalid_type = array(
       '_links' => array(
         'type' => array(
-          'href' => Url::fromUri('base:rest/types/foo', array('absolute' => TRUE))->toString(),
+          'href' => Url::fromUri(Url::BASE . ':rest/types/foo', array('absolute' => TRUE))->toString(),
         ),
       ),
     );
@@ -85,7 +85,7 @@ public function testMarkFieldForDeletion() {
     $no_field_data = array(
       '_links' => array(
         'type' => array(
-          'href' => Url::fromUri('base:rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
+          'href' => Url::fromUri(Url::BASE . ':rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
         ),
       ),
     );
@@ -95,7 +95,7 @@ public function testMarkFieldForDeletion() {
     $empty_field_data = array(
       '_links' => array(
         'type' => array(
-          'href' => Url::fromUri('base:rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
+          'href' => Url::fromUri(Url::BASE . ':rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
         ),
       ),
       'field_test_text' => array(),
@@ -113,7 +113,7 @@ public function testBasicFieldDenormalization() {
     $data = array(
       '_links' => array(
         'type' => array(
-          'href' => Url::fromUri('base:rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
+          'href' => Url::fromUri(Url::BASE . ':rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
         ),
       ),
       'uuid' => array(
@@ -183,7 +183,7 @@ public function testPatchDenormailzation() {
     $data = array(
       '_links' => array(
         'type' => array(
-          'href' => Url::fromUri('base:rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
+          'href' => Url::fromUri(Url::BASE . ':rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString(),
         ),
       ),
       'field_test_text' => array(
diff --git a/core/modules/hal/src/Tests/NormalizeTest.php b/core/modules/hal/src/Tests/NormalizeTest.php
index 9525f05..701ea95 100644
--- a/core/modules/hal/src/Tests/NormalizeTest.php
+++ b/core/modules/hal/src/Tests/NormalizeTest.php
@@ -61,8 +61,8 @@ public function testNormalize() {
     $entity->getTranslation('en')->set('field_test_entity_reference', array(0 => $translation_values['field_test_entity_reference']));
     $entity->save();
 
-    $type_uri = Url::fromUri('base:rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString();
-    $relation_uri = Url::fromUri('base:rest/relation/entity_test/entity_test/field_test_entity_reference', array('absolute' => TRUE))->toString();
+    $type_uri = Url::fromUri(Url::BASE . ':rest/type/entity_test/entity_test', array('absolute' => TRUE))->toString();
+    $relation_uri = Url::fromUri(Url::BASE . ':rest/relation/entity_test/entity_test/field_test_entity_reference', array('absolute' => TRUE))->toString();
 
     $expected_array = array(
       '_links' => array(
diff --git a/core/modules/image/src/Entity/ImageStyle.php b/core/modules/image/src/Entity/ImageStyle.php
index 4c37751..3d42997 100644
--- a/core/modules/image/src/Entity/ImageStyle.php
+++ b/core/modules/image/src/Entity/ImageStyle.php
@@ -225,7 +225,7 @@ public function buildUrl($path, $clean_urls = NULL) {
     // built.
     if ($clean_urls === FALSE && file_uri_scheme($uri) == 'public' && !file_exists($uri)) {
       $directory_path = file_stream_wrapper_get_instance_by_uri($uri)->getDirectoryPath();
-      return Url::fromUri('base:' . $directory_path . '/' . file_uri_target($uri), array('absolute' => TRUE, 'query' => $token_query))->toString();
+      return Url::fromUri(Url::BASE . ':' . $directory_path . '/' . file_uri_target($uri), array('absolute' => TRUE, 'query' => $token_query))->toString();
     }
 
     $file_url = file_create_url($uri);
diff --git a/core/modules/image/src/Tests/ImageThemeFunctionTest.php b/core/modules/image/src/Tests/ImageThemeFunctionTest.php
index ad7af4d..04a6d0d 100644
--- a/core/modules/image/src/Tests/ImageThemeFunctionTest.php
+++ b/core/modules/image/src/Tests/ImageThemeFunctionTest.php
@@ -87,7 +87,7 @@ function testImageFormatterTheme() {
       '#theme' => 'image_formatter',
       '#image_style' => 'test',
       '#item' => $entity->image_test,
-      '#url' => Url::fromUri('base:' . $path),
+      '#url' => Url::fromUri(Url::BASE . ':' . $path),
     );
 
     // Test using theme_image_formatter() with a NULL value for the alt option.
diff --git a/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php b/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
index 3230a41..a3920bd 100644
--- a/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
+++ b/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
@@ -13,6 +13,7 @@
 use Drupal\Core\Field\WidgetBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\link\LinkItemInterface;
+use Drupal\Core\Url;
 use Symfony\Component\Validator\ConstraintViolation;
 use Symfony\Component\Validator\ConstraintViolationInterface;
 use Symfony\Component\Validator\ConstraintViolationListInterface;
@@ -227,7 +228,7 @@ public function massageFormValues(array $values, array $form, FormStateInterface
         // Users can enter relative URLs, but we need a valid URI, so add an
         // explicit scheme when necessary.
         if (parse_url($value['uri'], PHP_URL_SCHEME) === NULL) {
-          $value['uri'] = 'user-path:' . $value['uri'];
+          $value['uri'] = Url::USER_PATH . ':' . $value['uri'];
         }
 
         $value += ['options' => []];
diff --git a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
index a12f373..420ebca 100644
--- a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
+++ b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
@@ -136,15 +136,20 @@ public function getChangedTime() {
   }
 
   /**
-   * {@inheritdoc}
+   * Builds up the menu link plugin definition for this entity.
+   *
+   * @return array
+   *   The plugin definition corresponding to this entity.
+   *
+   * @see \Drupal\Core\Menu\MenuLinkTree::$defaults
    */
-  public function getPluginDefinition() {
+  protected function getPluginDefinition() {
     $definition = array();
     $definition['class'] = 'Drupal\menu_link_content\Plugin\Menu\MenuLinkContent';
     $definition['menu_name'] = $this->getMenuName();
 
     if ($url_object = $this->getUrlObject()) {
-      if (!$url_object->isRouted()) {
+      if ($url_object->isExternal()) {
         $definition['url'] = $url_object->getUri();
       }
       else {
@@ -281,6 +286,8 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDescription(t('The location this menu link points to.'))
       ->setRequired(TRUE)
       ->setSettings(array(
+        'default_value' => '',
+        'max_length' => 560,
         'link_type' => LinkItemInterface::LINK_GENERIC,
         'title' => DRUPAL_DISABLED,
       ))
diff --git a/core/modules/menu_link_content/src/MenuLinkContentInterface.php b/core/modules/menu_link_content/src/MenuLinkContentInterface.php
index 650b3d2..3f385e4 100644
--- a/core/modules/menu_link_content/src/MenuLinkContentInterface.php
+++ b/core/modules/menu_link_content/src/MenuLinkContentInterface.php
@@ -92,14 +92,4 @@ public function getParentId();
    */
   public function getWeight();
 
-  /**
-   * Builds up the menu link plugin definition for this entity.
-   *
-   * @return array
-   *   The plugin definition corresponding to this entity.
-   *
-   * @see \Drupal\Core\Menu\MenuLinkTree::$defaults
-   */
-  public function getPluginDefinition();
-
 }
diff --git a/core/modules/path/src/Controller/PathController.php b/core/modules/path/src/Controller/PathController.php
index f352de1..8721040 100644
--- a/core/modules/path/src/Controller/PathController.php
+++ b/core/modules/path/src/Controller/PathController.php
@@ -86,11 +86,11 @@ public function adminOverview(Request $request) {
     $destination = drupal_get_destination();
     foreach ($this->aliasStorage->getAliasesForAdminListing($header, $keys) as $data) {
       $row = array();
-      $row['data']['alias'] = $this->l(Unicode::truncate($data->alias, 50, FALSE, TRUE), Url::fromUri('base:' . $data->source, array(
+      $row['data']['alias'] = $this->l(Unicode::truncate($data->alias, 50, FALSE, TRUE), Url::fromUri(Url::BASE .':' . $data->source, array(
         'path_processing' => TRUE,
         'attributes' => array('title' => $data->alias),
       )));
-      $row['data']['source'] = $this->l(Unicode::truncate($data->source, 50, FALSE, TRUE), Url::fromUri('base:' . $data->source, array(
+      $row['data']['source'] = $this->l(Unicode::truncate($data->source, 50, FALSE, TRUE), Url::fromUri(Url::BASE .':' . $data->source, array(
         'alias' => TRUE,
         'attributes' => array('title' => $data->source),
       )));
diff --git a/core/modules/rest/src/LinkManager/RelationLinkManager.php b/core/modules/rest/src/LinkManager/RelationLinkManager.php
index 38bf4cf..1db0dab 100644
--- a/core/modules/rest/src/LinkManager/RelationLinkManager.php
+++ b/core/modules/rest/src/LinkManager/RelationLinkManager.php
@@ -11,6 +11,7 @@
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Entity\ContentEntityTypeInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Url;
 use Drupal\Core\Utility\UnroutedUrlAssemblerInterface;
 
 class RelationLinkManager implements RelationLinkManagerInterface {
@@ -54,7 +55,7 @@ public function __construct(CacheBackendInterface $cache, EntityManagerInterface
    * {@inheritdoc}
    */
   public function getRelationUri($entity_type, $bundle, $field_name) {
-    return $this->urlAssembler->assemble("base:rest/relation/$entity_type/$bundle/$field_name", array('absolute' => TRUE));
+    return $this->urlAssembler->assemble(Url::BASE . ":rest/relation/$entity_type/$bundle/$field_name", array('absolute' => TRUE));
   }
 
   /**
diff --git a/core/modules/rest/src/LinkManager/TypeLinkManager.php b/core/modules/rest/src/LinkManager/TypeLinkManager.php
index 4160b2b..aee4f64 100644
--- a/core/modules/rest/src/LinkManager/TypeLinkManager.php
+++ b/core/modules/rest/src/LinkManager/TypeLinkManager.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal/Core/Url;
 use Drupal\Core\Utility\UnroutedUrlAssemblerInterface;
 
 class TypeLinkManager implements TypeLinkManagerInterface {
@@ -53,7 +54,7 @@ public function __construct(CacheBackendInterface $cache, UnroutedUrlAssemblerIn
    */
   public function getTypeUri($entity_type, $bundle) {
     // @todo Make the base path configurable.
-    return $this->urlAssembler->assemble("base:rest/type/$entity_type/$bundle", array('absolute' => TRUE));
+    return $this->urlAssembler->assemble(Url::BASE . ":rest/type/$entity_type/$bundle", array('absolute' => TRUE));
   }
 
   /**
diff --git a/core/modules/rest/src/Tests/NodeTest.php b/core/modules/rest/src/Tests/NodeTest.php
index 7169102..0afa97b 100644
--- a/core/modules/rest/src/Tests/NodeTest.php
+++ b/core/modules/rest/src/Tests/NodeTest.php
@@ -35,9 +35,9 @@ class NodeTest extends RESTTestBase {
    *   The operation, one of 'view', 'create', 'update' or 'delete'.
    */
   protected function enableNodeConfiguration($method, $operation) {
-    $this->enableService('entity:node', $method);
+    $this->enableService(Url::ENTITY . ':node', $method);
     $permissions = $this->entityPermissions('node', $operation);
-    $permissions[] = 'restful ' . strtolower($method) . ' entity:node';
+    $permissions[] = 'restful ' . strtolower($method) . Url::ENTITY . ' :node';
     $account = $this->drupalCreateUser($permissions);
     $this->drupalLogin($account);
   }
@@ -57,7 +57,7 @@ public function testNodes() {
 
     // Also check that JSON works and the routing system selects the correct
     // REST route.
-    $this->enableService('entity:node', 'GET', 'json');
+    $this->enableService(Url::ENTITY . ':node', 'GET', 'json');
     $this->httpRequest($node->urlInfo(), 'GET', NULL, 'application/json');
     $this->assertResponse(200);
     $this->assertHeader('Content-type', 'application/json');
@@ -70,7 +70,7 @@ public function testNodes() {
     $data = array(
       '_links' => array(
         'type' => array(
-          'href' => Url::fromUri('base:rest/type/node/resttest', array('absolute' => TRUE))->toString(),
+          'href' => Url::fromUri(Url::BASE . ':rest/type/node/resttest', array('absolute' => TRUE))->toString(),
         ),
       ),
       'title' => array(
diff --git a/core/modules/serialization/src/Tests/EntityResolverTest.php b/core/modules/serialization/src/Tests/EntityResolverTest.php
index 7d7c00d..82ca98a 100644
--- a/core/modules/serialization/src/Tests/EntityResolverTest.php
+++ b/core/modules/serialization/src/Tests/EntityResolverTest.php
@@ -63,12 +63,12 @@ function testUuidEntityResolver() {
     $entity->set('field_test_entity_reference', array(array('target_id' => 1)));
     $entity->save();
 
-    $field_uri = Url::fromUri('base:rest/relation/entity_test_mulrev/entity_test_mulrev/field_test_entity_reference', array('absolute' => TRUE))->toString();
+    $field_uri = Url::fromUri(Url::BASE . ':rest/relation/entity_test_mulrev/entity_test_mulrev/field_test_entity_reference', array('absolute' => TRUE))->toString();
 
     $data = array(
       '_links' => array(
         'type' => array(
-          'href' => Url::fromUri('base:rest/type/entity_test_mulrev/entity_test_mulrev', array('absolute' => TRUE))->toString(),
+          'href' => Url::fromUri(Url::BASE . ':rest/type/entity_test_mulrev/entity_test_mulrev', array('absolute' => TRUE))->toString(),
         ),
         $field_uri => array(
           array(
diff --git a/core/modules/shortcut/src/Entity/Shortcut.php b/core/modules/shortcut/src/Entity/Shortcut.php
index e8e9aed..1a0765d 100644
--- a/core/modules/shortcut/src/Entity/Shortcut.php
+++ b/core/modules/shortcut/src/Entity/Shortcut.php
@@ -151,6 +151,8 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDescription(t('The location this shortcut points to.'))
       ->setRequired(TRUE)
       ->setSettings(array(
+        'default_value' => '',
+        'max_length' => 560,
         'link_type' => LinkItemInterface::LINK_INTERNAL,
         'title' => DRUPAL_DISABLED,
       ))
diff --git a/core/modules/simpletest/src/Tests/SimpleTestBrowserTest.php b/core/modules/simpletest/src/Tests/SimpleTestBrowserTest.php
index e384a3c..b53e61e 100644
--- a/core/modules/simpletest/src/Tests/SimpleTestBrowserTest.php
+++ b/core/modules/simpletest/src/Tests/SimpleTestBrowserTest.php
@@ -77,7 +77,7 @@ public function testInternalBrowser() {
     // @see drupal_valid_test_ua()
     // Not using File API; a potential error must trigger a PHP warning.
     unlink($this->siteDirectory . '/.htkey');
-    $this->drupalGet(Url::fromUri('base:core/install.php', array('external' => TRUE, 'absolute' => TRUE))->toString());
+    $this->drupalGet(Url::fromUri(Url::BASE . ':core/install.php', array('external' => TRUE, 'absolute' => TRUE))->toString());
     $this->assertResponse(403, 'Cannot access install.php.');
   }
 
diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module
index 5d84cb9..424bcf1 100644
--- a/core/modules/statistics/statistics.module
+++ b/core/modules/statistics/statistics.module
@@ -40,7 +40,7 @@ function statistics_help($route_name, RouteMatchInterface $route_match) {
 function statistics_node_view(array &$build, EntityInterface $node, EntityViewDisplayInterface $display, $view_mode) {
   if (!$node->isNew() && $view_mode == 'full' && node_is_page($node) && empty($node->in_preview)) {
     $build['statistics_content_counter']['#attached']['library'][] = 'statistics/drupal.statistics';
-    $settings = array('data' => array('nid' => $node->id()), 'url' => Url::fromUri('base:' . drupal_get_path('module', 'statistics') . '/statistics.php')->toString());
+    $settings = array('data' => array('nid' => $node->id()), 'url' => Url::fromUri(Url::BASE . ':' . drupal_get_path('module', 'statistics') . '/statistics.php')->toString());
     $build['statistics_content_counter']['#attached']['drupalSettings']['statistics'] = $settings;
   }
 }
diff --git a/core/modules/system/src/Tests/Common/AddFeedTest.php b/core/modules/system/src/Tests/Common/AddFeedTest.php
index 75a20d0..9e77d3c 100644
--- a/core/modules/system/src/Tests/Common/AddFeedTest.php
+++ b/core/modules/system/src/Tests/Common/AddFeedTest.php
@@ -23,11 +23,11 @@ class AddFeedTest extends WebTestBase {
   function testBasicFeedAddNoTitle() {
     $path = $this->randomMachineName(12);
     $external_url = 'http://' . $this->randomMachineName(12) . '/' . $this->randomMachineName(12);
-    $fully_qualified_local_url = Url::fromUri('base:' . $this->randomMachineName(12), array('absolute' => TRUE))->toString();
+    $fully_qualified_local_url = Url::fromUri(Url::BASE . ':' . $this->randomMachineName(12), array('absolute' => TRUE))->toString();
 
     $path_for_title = $this->randomMachineName(12);
     $external_for_title = 'http://' . $this->randomMachineName(12) . '/' . $this->randomMachineName(12);
-    $fully_qualified_for_title = Url::fromUri('base:' . $this->randomMachineName(12), array('absolute' => TRUE))->toString();
+    $fully_qualified_for_title = Url::fromUri(Url::BASE . ':' . $this->randomMachineName(12), array('absolute' => TRUE))->toString();
 
     $urls = array(
       'path without title' => array(
@@ -43,7 +43,7 @@ function testBasicFeedAddNoTitle() {
         'title' => '',
       ),
       'path with title' => array(
-        'url' => Url::fromUri('base:' . $path_for_title, array('absolute' => TRUE))->toString(),
+        'url' => Url::fromUri(Url::BASE . ':' . $path_for_title, array('absolute' => TRUE))->toString(),
         'title' => $this->randomMachineName(12),
       ),
       'external URL with title' => array(
diff --git a/core/modules/system/src/Tests/Menu/LocalTasksTest.php b/core/modules/system/src/Tests/Menu/LocalTasksTest.php
index ea376d6..b937f2a 100644
--- a/core/modules/system/src/Tests/Menu/LocalTasksTest.php
+++ b/core/modules/system/src/Tests/Menu/LocalTasksTest.php
@@ -35,7 +35,7 @@ protected function assertLocalTasks(array $hrefs, $level = 0) {
     ));
     $this->assertTrue(count($elements), 'Local tasks found.');
     foreach ($hrefs as $index => $element) {
-      $expected = Url::fromUri('base:' . $hrefs[$index])->toString();
+      $expected = Url::fromUri(Url::BASE . ':' . $hrefs[$index])->toString();
       $method = ($elements[$index]['href'] == $expected ? 'pass' : 'fail');
       $this->{$method}(format_string('Task @number href @value equals @expected.', array(
         '@number' => $index + 1,
diff --git a/core/modules/system/tests/modules/form_test/src/Form/FormTestRedirectForm.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestRedirectForm.php
index c99105a..a4c02ae 100644
--- a/core/modules/system/tests/modules/form_test/src/Form/FormTestRedirectForm.php
+++ b/core/modules/system/tests/modules/form_test/src/Form/FormTestRedirectForm.php
@@ -55,7 +55,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     if (!$form_state->isValueEmpty('redirection')) {
       if (!$form_state->isValueEmpty('destination')) {
         // The destination is a random URL, so we can't use routed URLs.
-        $form_state->setRedirectUrl(Url::fromUri('user-path:' . $form_state->getValue('destination')));
+        $form_state->setRedirectUrl(Url::fromUri(Url::USER_PATH . ':' . $form_state->getValue('destination')));
       }
     }
     else {
diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
index ac4d9ba..61c9e84 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
@@ -25,9 +25,30 @@
 use Symfony\Component\DependencyInjection\Exception\RuntimeException as DependencyInjectionRuntimeException;
 
 /**
+ * @defgroup views_display_plugins Views display plugins
+ * @{
+ * Plugins to handle the overall display of views.
+ *
+ * Display plugins are responsible for controlling where a view is rendered;
+ * that is, how it is exposed to other parts of Drupal. 'Page' and 'block' are
+ * the most commonly used display plugins. Each view also has a 'master' (or
+ * 'default') display that includes information shared between all its
+ * displays (see \Drupal\views\Plugin\views\display\DefaultDisplay).
+ *
+ * Display plugins extend \Drupal\views\Plugin\views\display\DisplayPluginBase.
+ * They must be annotated with \Drupal\views\Annotation\ViewsDisplay
+ * annotation, and they must be in namespace directory Plugin\views\display.
+ *
+ * @ingroup views_plugins
+ *
+ * @see plugin_api
+ * @see views_display_extender_plugins
+ */
+
+/**
  * Base class for views display plugins.
  */
-abstract class DisplayPluginBase extends PluginBase implements DisplayPluginInterface {
+abstract class DisplayPluginBase extends PluginBase {
 
   /**
    * The top object of a view.
@@ -135,9 +156,6 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
     parent::__construct(array(), $plugin_id, $plugin_definition);
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function initDisplay(ViewExecutable $view, array &$display, array &$options = NULL) {
     $this->view = $view;
 
@@ -210,9 +228,6 @@ public function initDisplay(ViewExecutable $view, array &$display, array &$optio
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function destroy() {
     parent::destroy();
 
@@ -234,12 +249,14 @@ public function destroy() {
   }
 
   /**
-   * {@inheritdoc}
+   * Determines if this display is the 'default' display.
+   *
+   * 'Default' display contains fallback settings.
    */
   public function isDefaultDisplay() { return FALSE; }
 
   /**
-   * {@inheritdoc}
+   * Determines if this display uses exposed filters.
    */
   public function usesExposed() {
     if (!isset($this->has_exposed)) {
@@ -264,21 +281,29 @@ public function usesExposed() {
   }
 
   /**
-   * {@inheritdoc}
+   * Determines if this display should display the exposed filters widgets.
+   *
+   * Regardless of what this function
+   * returns, exposed filters will not be used nor
+   * displayed unless usesExposed() returns TRUE.
    */
   public function displaysExposed() {
     return TRUE;
   }
 
   /**
-   * {@inheritdoc}
+   * Whether the display allows the use of AJAX or not.
+   *
+   * @return bool
    */
   public function usesAJAX() {
     return $this->usesAJAX;
   }
 
   /**
-   * {@inheritdoc}
+   * Whether the display is actually using AJAX or not.
+   *
+   * @return bool
    */
   public function ajaxEnabled() {
     if ($this->usesAJAX()) {
@@ -288,21 +313,29 @@ public function ajaxEnabled() {
   }
 
   /**
-   * {@inheritdoc}
+   * Whether the display is enabled.
+   *
+   * @return bool
+   *   Returns TRUE if the display is marked as enabled, else FALSE.
    */
   public function isEnabled() {
     return (bool) $this->getOption('enabled');
   }
 
   /**
-   * {@inheritdoc}
+   * Whether the display allows the use of a pager or not.
+   *
+   * @return bool
    */
+
   public function usesPager() {
     return $this->usesPager;
   }
 
   /**
-   * {@inheritdoc}
+   * Whether the display is using a pager or not.
+   *
+   * @return bool
    */
   public function isPagerEnabled() {
     if ($this->usesPager()) {
@@ -315,14 +348,18 @@ public function isPagerEnabled() {
   }
 
   /**
-   * {@inheritdoc}
+   * Whether the display allows the use of a 'more' link or not.
+   *
+   * @return bool
    */
   public function usesMore() {
     return $this->usesMore;
   }
 
   /**
-   * {@inheritdoc}
+   * Whether the display is using the 'more' link or not.
+   *
+   * @return bool
    */
   public function isMoreEnabled() {
     if ($this->usesMore()) {
@@ -332,14 +369,14 @@ public function isMoreEnabled() {
   }
 
   /**
-   * {@inheritdoc}
+   * Does the display have groupby enabled?
    */
   public function useGroupBy() {
     return $this->getOption('group_by');
   }
 
   /**
-   * {@inheritdoc}
+   * Should the enabled display more link be shown when no more items?
    */
   public function useMoreAlways() {
     if ($this->usesMore()) {
@@ -349,7 +386,7 @@ public function useMoreAlways() {
   }
 
   /**
-   * {@inheritdoc}
+   * Does the display have custom link text?
    */
   public function useMoreText() {
     if ($this->usesMore()) {
@@ -359,7 +396,9 @@ public function useMoreText() {
   }
 
   /**
-   * {@inheritdoc}
+   * Determines whether this display can use attachments.
+   *
+   * @return bool
    */
   public function acceptAttachments() {
     // To be able to accept attachments this display have to be able to use
@@ -380,26 +419,38 @@ public function acceptAttachments() {
   }
 
   /**
-   * {@inheritdoc}
+   * Returns whether the display can use attachments.
+   *
+   * @return bool
    */
   public function usesAttachments() {
     return $this->usesAttachments;
   }
 
   /**
-   * {@inheritdoc}
+   * Returns whether the display can use areas.
+   *
+   * @return bool
+   *   TRUE if the display can use areas, or FALSE otherwise.
    */
   public function usesAreas() {
     return $this->usesAreas;
   }
 
   /**
-   * {@inheritdoc}
+   * Allows displays to attach to other views.
+   *
+   * @param \Drupal\views\ViewExecutable $view
+   *   The views executable.
+   * @param string $display_id
+   *   The display to attach to.
+   * @param array $build
+   *   The parent view render array.
    */
   public function attachTo(ViewExecutable $view, $display_id, array &$build) { }
 
   /**
-   * {@inheritdoc}
+   * Lists the 'defaultable' sections and what items each section contains.
    */
   public function defaultableSections($section = NULL) {
     $sections = array(
@@ -671,22 +722,40 @@ protected function defineOptions() {
   }
 
   /**
-   * {@inheritdoc}
+   * Checks to see if the display has a 'path' field.
+   *
+   * This is a pure function and not just a setting on the definition
+   * because some displays (such as a panel pane) may have a path based
+   * upon configuration.
+   *
+   * By default, displays do not have a path.
    */
   public function hasPath() { return FALSE; }
 
   /**
-   * {@inheritdoc}
+   * Checks to see if the display has some need to link to another display.
+   *
+   * For the most part, displays without a path will use a link display.
+   * However, sometimes displays that have a path might also need to link to
+   * another display. This is true for feeds.
    */
   public function usesLinkDisplay() { return !$this->hasPath(); }
 
   /**
-   * {@inheritdoc}
+   * Checks to see if the display can put the exposed form in a block.
+   *
+   * By default, displays that do not have a path cannot disconnect
+   * the exposed form and put it in a block, because the form has no
+   * place to go and Views really wants the forms to go to a specific
+   * page.
    */
   public function usesExposedFormInBlock() { return $this->hasPath(); }
 
   /**
-   * {@inheritdoc}
+   * Find out all displays which are attached to this display.
+   *
+   * The method is just using the pure storage object to avoid loading of the
+   * sub displays which would kill lazy loading.
    */
   public function getAttachedDisplays() {
     $current_display_id = $this->display['id'];
@@ -706,7 +775,7 @@ public function getAttachedDisplays() {
   }
 
   /**
-   * {@inheritdoc}
+   * Returns the ID of the display to use when making links.
    */
   public function getLinkDisplay() {
     $display_id = $this->getOption('link_display');
@@ -725,7 +794,10 @@ public function getLinkDisplay() {
   }
 
   /**
-   * {@inheritdoc}
+   * Returns the base path to use for this display.
+   *
+   * This can be overridden for displays that do strange things
+   * with the path.
    */
   public function getPath() {
     if ($this->hasPath()) {
@@ -738,22 +810,22 @@ public function getPath() {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
   public function getUrl() {
     return $this->view->getUrl();
   }
 
   /**
-   * {@inheritdoc}
+   * Determines if an option is set to use the default or current display.
+   *
+   * @return
+   *   TRUE for the default display.
    */
   public function isDefaulted($option) {
     return !$this->isDefaultDisplay() && !empty($this->default_display) && !empty($this->options['defaults'][$option]);
   }
 
   /**
-   * {@inheritdoc}
+   * Gets an option, from this display or the default display.
    */
   public function getOption($option) {
     if ($this->isDefaulted($option)) {
@@ -766,14 +838,21 @@ public function getOption($option) {
   }
 
   /**
-   * {@inheritdoc}
+   * Determines if the display's style uses fields.
+   *
+   * @return bool
    */
   public function usesFields() {
     return $this->getPlugin('style')->usesFields();
   }
 
   /**
-   * {@inheritdoc}
+   * Get the instance of a plugin, for example style or row.
+   *
+   * @param string $type
+   *   The type of the plugin.
+   *
+   * @return \Drupal\views\Plugin\views\ViewsPluginInterface
    */
   public function getPlugin($type) {
     // Look up the plugin name to use for this instance.
@@ -807,7 +886,7 @@ public function getPlugin($type) {
   }
 
   /**
-   * {@inheritdoc}
+   * Get the handler object for a single handler.
    */
   public function &getHandler($type, $id) {
     if (!isset($this->handlers[$type])) {
@@ -824,7 +903,9 @@ public function &getHandler($type, $id) {
   }
 
   /**
-   * {@inheritdoc}
+   * Get a full array of handlers for $type. This caches them.
+   *
+   * @return \Drupal\views\Plugin\views\ViewsHandlerInterface[]
    */
   public function &getHandlers($type) {
     if (!isset($this->handlers[$type])) {
@@ -886,7 +967,16 @@ public function &getHandlers($type) {
   }
 
   /**
-   * {@inheritdoc}
+   * Retrieves a list of fields for the current display.
+   *
+   * This also takes into account any associated relationships, if they exist.
+   *
+   * @param bool $groupable_only
+   *   (optional) TRUE to only return an array of field labels from handlers
+   *   that support the useStringGroupBy method, defaults to FALSE.
+   *
+   * @return array
+   *   An array of applicable field options, keyed by ID.
    */
   public function getFieldLabels($groupable_only = FALSE) {
     $options = array();
@@ -913,7 +1003,7 @@ public function getFieldLabels($groupable_only = FALSE) {
   }
 
   /**
-   * {@inheritdoc}
+   * Sets an option, on this display or the default display.
    */
   public function setOption($option, $value) {
     if ($this->isDefaulted($option)) {
@@ -928,7 +1018,7 @@ public function setOption($option, $value) {
   }
 
   /**
-   * {@inheritdoc}
+   * Set an option and force it to be an override.
    */
   public function overrideOption($option, $value) {
     $this->setOverride($option, FALSE);
@@ -936,7 +1026,10 @@ public function overrideOption($option, $value) {
   }
 
   /**
-   * {@inheritdoc}
+   * Returns a link to a section of a form.
+   *
+   * Because forms may be split up into sections, this provides an easy URL
+   * to exactly the right section. Don't override this.
    */
   public function optionLink($text, $section, $class = '', $title = '') {
     if (!empty($class)) {
@@ -955,7 +1048,10 @@ public function optionLink($text, $section, $class = '', $title = '') {
   }
 
   /**
-   * {@inheritdoc}
+   * Returns to tokens for arguments.
+   *
+   * This function is similar to views_handler_field::getRenderTokens()
+   * but without fields tokens.
    */
   public function getArgumentsTokens() {
     $tokens = array();
@@ -979,7 +1075,9 @@ public function getArgumentsTokens() {
   }
 
   /**
-   * {@inheritdoc}
+   * Provides the default summary for options in the views UI.
+   *
+   * This output is returned as an array.
    */
   public function optionsSummary(&$categories, &$options) {
     $categories = array(
@@ -1301,7 +1399,7 @@ public function optionsSummary(&$categories, &$options) {
   }
 
   /**
-   * {@inheritdoc}
+   * Provides the default form for setting options.
    */
   public function buildOptionsForm(&$form, FormStateInterface $form_state) {
     parent::buildOptionsForm($form, $form_state);
@@ -1793,7 +1891,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
   }
 
   /**
-   * {@inheritdoc}
+   * Validates the options form.
    */
   public function validateOptionsForm(&$form, FormStateInterface $form_state) {
     $section = $form_state->get('section');
@@ -1845,7 +1943,9 @@ public function validateOptionsForm(&$form, FormStateInterface $form_state) {
   }
 
   /**
-   * {@inheritdoc}
+   * Performs any necessary changes to the form values prior to storage.
+   *
+   * There is no need for this function to actually store the data.
    */
   public function submitOptionsForm(&$form, FormStateInterface $form_state) {
     // Not sure I like this being here, but it seems (?) like a logical place.
@@ -1957,14 +2057,21 @@ public function submitOptionsForm(&$form, FormStateInterface $form_state) {
   }
 
   /**
-   * {@inheritdoc}
+   * If override/revert was clicked, perform the proper toggle.
    */
   public function optionsOverride($form, FormStateInterface $form_state) {
     $this->setOverride($form_state->get('section'));
   }
 
   /**
-   * {@inheritdoc}
+   * Flip the override setting for the given section.
+   *
+   * @param string $section
+   *   Which option should be marked as overridden, for example "filters".
+   * @param bool $new_state
+   *   Select the new state of the option:
+   *   - TRUE: Revert new state option to default.
+   *   - FALSE: Mark it as overridden.
    */
   public function setOverride($section, $new_state = NULL) {
     $options = $this->defaultableSections($section);
@@ -1994,7 +2101,7 @@ public function setOverride($section, $new_state = NULL) {
   }
 
   /**
-   * {@inheritdoc}
+   * Injects anything into the query that the display handler needs.
    */
   public function query() {
     foreach ($this->extenders as $extender) {
@@ -2003,19 +2110,21 @@ public function query() {
   }
 
   /**
-   * {@inheritdoc}
+   * Does nothing (obsolete function).
+   *
+   * @todo This function no longer seems to be used.
    */
   public function renderFilters() { }
 
   /**
-   * {@inheritdoc}
+   * Checks to see if the display plugins support pager rendering.
    */
   public function renderPager() {
     return TRUE;
   }
 
   /**
-   * {@inheritdoc}
+   * Renders the 'more' link.
    */
   public function renderMoreLink() {
     if ($this->isMoreEnabled() && ($this->useMoreAlways() || (!empty($this->view->pager) && $this->view->pager->hasMoreRecords()))) {
@@ -2048,14 +2157,19 @@ public function renderMoreLink() {
   }
 
   /**
-   * {@inheritdoc}
+   * Gets menu links, if this display provides some.
+   *
+   * @return array
+   *   The menu links registers for this display.
+   *
+   * @see \Drupal\views\Plugin\Derivative\ViewsMenuLink
    */
   public function getMenuLinks() {
     return array();
   }
 
   /**
-   * {@inheritdoc}
+   * Renders this display.
    */
   public function render() {
     $rows = (!empty($this->view->result) || $this->view->style_plugin->evenEmpty()) ? $this->view->style_plugin->render($this->view->result) : array();
@@ -2076,7 +2190,15 @@ public function render() {
   }
 
   /**
-   * {@inheritdoc}
+   * #pre_render callback for view display rendering.
+   *
+   * @see self::render()
+   *
+   * @param array $element
+   *   The element to #pre_render
+   *
+   * @return array
+   *   The processed element.
    */
   public function elementPreRender(array $element) {
     $view = $element['#view'];
@@ -2137,7 +2259,16 @@ public function elementPreRender(array $element) {
   }
 
   /**
-   * {@inheritdoc}
+   * Renders one of the available areas.
+   *
+   * @param string $area
+   *   Identifier of the specific area to render.
+   * @param bool $empty
+   *   (optional) Indicator whether or not the view result is empty. Defaults to
+   *   FALSE
+   *
+   * @return array
+   *   A render array for the given area.
    */
   public function renderArea($area, $empty = FALSE) {
     $return = array();
@@ -2147,8 +2278,9 @@ public function renderArea($area, $empty = FALSE) {
     return $return;
   }
 
+
   /**
-   * {@inheritdoc}
+   * Determines if the user has access to this display of the view.
    */
   public function access(AccountInterface $account = NULL) {
     if (!isset($account)) {
@@ -2166,7 +2298,10 @@ public function access(AccountInterface $account = NULL) {
   }
 
   /**
-   * {@inheritdoc}
+   * Sets up any variables on the view prior to execution.
+   *
+   * These are separated from execute because they are extremely common
+   * and unlikely to be overridden on an individual display.
    */
   public function preExecute() {
     $this->view->setAjaxEnabled($this->ajaxEnabled());
@@ -2185,7 +2320,12 @@ public function preExecute() {
   }
 
   /**
-   * {@inheritdoc}
+   * Calculates the display's cache metadata by inspecting each handler/plugin.
+   *
+   * @return array
+   *   Returns an array:
+   *   - first value: (boolean) Whether the display is cacheable.
+   *   - second value: (string[]) The cache contexts the display varies by.
    */
   public function calculateCacheMetadata () {
     $is_cacheable = TRUE;
@@ -2224,12 +2364,20 @@ public function calculateCacheMetadata () {
   }
 
   /**
-   * {@inheritdoc}
+   * Executes the view and returns data in the format required.
+   *
+   * The base class cannot be executed.
    */
   public function execute() { }
 
   /**
-   * {@inheritdoc}
+   * Builds a renderable array of the view.
+   *
+   * Note: This does not yet contain the executed view, but just the loaded view
+   * executable.
+   *
+   * @return array
+   *   The render array of a view.
    */
   public function buildRenderable(array $args = []) {
     return [
@@ -2244,7 +2392,9 @@ public function buildRenderable(array $args = []) {
   }
 
   /**
-   * {@inheritdoc}
+   * Renders the display for the purposes of a live preview.
+   *
+   * Also might be used for some other AJAXy reason.
    */
   function preview() {
     return $this->view->render();
@@ -2268,7 +2418,11 @@ protected function getType() {
   }
 
   /**
-   * {@inheritdoc}
+   * Make sure the display and all associated handlers are valid.
+   *
+   * @return
+   *   Empty array if the display is valid; an array of error strings if it is
+   *   not.
    */
   public function validate() {
     $errors = array();
@@ -2323,13 +2477,15 @@ public function validate() {
   }
 
   /**
-   * {@inheritdoc}
+   * Reacts on adding a display.
+   *
+   * @see \Drupal\views\Entity\View::newDisplay()
    */
   public function newDisplay() {
   }
 
   /**
-   * {@inheritdoc}
+   * Reacts on deleting a display.
    */
   public function remove() {
     $menu_links = $this->getMenuLinks();
@@ -2341,7 +2497,16 @@ public function remove() {
   }
 
   /**
-   * {@inheritdoc}
+   * Checks if the provided identifier is unique.
+   *
+   * @param string $id
+   *   The id of the handler which is checked.
+   * @param string $identifier
+   *   The actual get identifier configured in the exposed settings.
+   *
+   * @return bool
+   *   Returns whether the identifier is unique on all handlers.
+   *
    */
   public function isIdentifierUnique($id, $identifier) {
     foreach (ViewExecutable::getHandlerTypes() as $type => $info) {
@@ -2364,7 +2529,13 @@ public function isIdentifierUnique($id, $identifier) {
   }
 
   /**
-   * {@inheritdoc}
+   * Is the output of the view empty.
+   *
+   * If a view has no result and neither the empty, nor the footer nor the header
+   * does show anything return FALSE.
+   *
+   * @return bool
+   *   Returns TRUE if the output is empty, else FALSE.
    */
   public function outputIsEmpty() {
     if (!empty($this->view->result)) {
@@ -2386,7 +2557,7 @@ public function outputIsEmpty() {
   }
 
   /**
-   * {@inheritdoc}
+   * Provides the block system with any exposed widget blocks for this display.
    */
   public function getSpecialBlocks() {
     $blocks = array();
@@ -2404,7 +2575,10 @@ public function getSpecialBlocks() {
   }
 
   /**
-   * {@inheritdoc}
+   * Renders the exposed form as block.
+   *
+   * @return string|null
+   *  The rendered exposed form as string or NULL otherwise.
    */
   public function viewExposedFormBlocks() {
     // Avoid interfering with the admin forms.
@@ -2421,7 +2595,17 @@ public function viewExposedFormBlocks() {
   }
 
   /**
-   * {@inheritdoc}
+   * Provides help text for the arguments.
+   *
+   * @return array
+   *   Returns an array which contains text for the argument fieldset:
+   *   - filter value present: The title of the fieldset in the argument
+   *     where you can configure what should be done with a given argument.
+   *   - filter value not present: The title of the fieldset in the argument
+   *     where you can configure what should be done if the argument does not
+   *     exist.
+   *   - description: A description about how arguments are passed
+   *     to the display. For example blocks can't get arguments from url.
    */
   public function getArgumentText() {
     return array(
@@ -2432,7 +2616,15 @@ public function getArgumentText() {
   }
 
   /**
-   * {@inheritdoc}
+   * Provides help text for pagers.
+   *
+   * @return array
+   *   Returns an array which contains text for the items_per_page form
+   *   element:
+   *   - items per page title: The title text for the items_per_page form
+   *     element.
+   *   - items per page description: The description text for the
+   *     items_per_page form element.
    */
   public function getPagerText() {
     return array(
@@ -2442,7 +2634,7 @@ public function getPagerText() {
   }
 
   /**
-   * {@inheritdoc}
+   * Merges default values for all plugin types.
    */
   public function mergeDefaults() {
     $defined_options = $this->defineOptions();
@@ -2501,7 +2693,9 @@ protected function mergeHandler($type) {
   }
 
   /**
-   * {@inheritdoc}
+   * Gets the display extenders.
+   *
+   * @return \Drupal\views\Plugin\views\display_extender\DisplayExtenderPluginBase[]
    */
   public function getExtenders() {
     return $this->extenders;
diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginInterface.php b/core/modules/views/src/Plugin/views/display/DisplayPluginInterface.php
deleted file mode 100644
index e84348c..0000000
--- a/core/modules/views/src/Plugin/views/display/DisplayPluginInterface.php
+++ /dev/null
@@ -1,552 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\views\Plugin\views\display\DisplayPluginInterface.
- */
-
-namespace Drupal\views\Plugin\views\display;
-
-use Drupal\views\ViewExecutable;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Session\AccountInterface;
-
-/**
- * @defgroup views_display_plugins Views display plugins
- * @{
- * Plugins to handle the overall display of views.
- *
- * Display plugins are responsible for controlling where a view is rendered;
- * that is, how it is exposed to other parts of Drupal. 'Page' and 'block' are
- * the most commonly used display plugins. Each view also has a 'master' (or
- * 'default') display that includes information shared between all its
- * displays (see \Drupal\views\Plugin\views\display\DefaultDisplay).
- *
- * Display plugins extend \Drupal\views\Plugin\views\display\DisplayPluginBase.
- * They must be annotated with \Drupal\views\Annotation\ViewsDisplay
- * annotation, and they must be in namespace directory Plugin\views\display.
- *
- * @ingroup views_plugins
- *
- * @see plugin_api
- * @see views_display_extender_plugins
- */
-interface DisplayPluginInterface {
-
-  public function initDisplay(ViewExecutable $view, array &$display, array &$options = NULL);
-
-  public function destroy();
-
-  /**
-   * Determines if this display is the 'default' display.
-   *
-   * 'Default' display contains fallback settings.
-   */
-  public function isDefaultDisplay();
-
-  /**
-   * Determines if this display uses exposed filters.
-   */
-  public function usesExposed();
-
-  /**
-   * Determines if this display should display the exposed filters widgets.
-   *
-   * Regardless of what this function
-   * returns, exposed filters will not be used nor
-   * displayed unless usesExposed() returns TRUE.
-   */
-  public function displaysExposed();
-
-  /**
-   * Whether the display allows the use of AJAX or not.
-   *
-   * @return bool
-   */
-  public function usesAJAX();
-
-  /**
-   * Whether the display is actually using AJAX or not.
-   *
-   * @return bool
-   */
-  public function ajaxEnabled();
-
-  /**
-   * Whether the display is enabled.
-   *
-   * @return bool
-   *   Returns TRUE if the display is marked as enabled, else FALSE.
-   */
-  public function isEnabled();
-
-  /**
-   * Whether the display allows the use of a pager or not.
-   *
-   * @return bool
-   */
-  public function usesPager();
-
-  /**
-   * Whether the display is using a pager or not.
-   *
-   * @return bool
-   */
-  public function isPagerEnabled();
-
-  /**
-   * Whether the display allows the use of a 'more' link or not.
-   *
-   * @return bool
-   */
-  public function usesMore();
-
-  /**
-   * Whether the display is using the 'more' link or not.
-   *
-   * @return bool
-   */
-  public function isMoreEnabled();
-
-  /**
-   * Does the display have groupby enabled?
-   */
-  public function useGroupBy();
-
-  /**
-   * Should the enabled display more link be shown when no more items?
-   */
-  public function useMoreAlways();
-
-  /**
-   * Does the display have custom link text?
-   */
-  public function useMoreText();
-
-  /**
-   * Determines whether this display can use attachments.
-   *
-   * @return bool
-   */
-  public function acceptAttachments();
-
-  /**
-   * Returns whether the display can use attachments.
-   *
-   * @return bool
-   */
-  public function usesAttachments();
-
-  /**
-   * Returns whether the display can use areas.
-   *
-   * @return bool
-   *   TRUE if the display can use areas, or FALSE otherwise.
-   */
-  public function usesAreas();
-
-  /**
-   * Allows displays to attach to other views.
-   *
-   * @param \Drupal\views\ViewExecutable $view
-   *   The views executable.
-   * @param string $display_id
-   *   The display to attach to.
-   * @param array $build
-   *   The parent view render array.
-   */
-  public function attachTo(ViewExecutable $view, $display_id, array &$build);
-
-  /**
-   * Lists the 'defaultable' sections and what items each section contains.
-   */
-  public function defaultableSections($section = NULL);
-
-  /**
-   * Checks to see if the display has a 'path' field.
-   *
-   * This is a pure function and not just a setting on the definition
-   * because some displays (such as a panel pane) may have a path based
-   * upon configuration.
-   *
-   * By default, displays do not have a path.
-   */
-  public function hasPath();
-
-  /**
-   * Checks to see if the display has some need to link to another display.
-   *
-   * For the most part, displays without a path will use a link display.
-   * However, sometimes displays that have a path might also need to link to
-   * another display. This is true for feeds.
-   */
-  public function usesLinkDisplay();
-
-  /**
-   * Checks to see if the display can put the exposed form in a block.
-   *
-   * By default, displays that do not have a path cannot disconnect
-   * the exposed form and put it in a block, because the form has no
-   * place to go and Views really wants the forms to go to a specific
-   * page.
-   */
-  public function usesExposedFormInBlock();
-
-  /**
-   * Find out all displays which are attached to this display.
-   *
-   * The method is just using the pure storage object to avoid loading of the
-   * sub displays which would kill lazy loading.
-   */
-  public function getAttachedDisplays();
-
-  /**
-   * Returns the ID of the display to use when making links.
-   */
-  public function getLinkDisplay();
-
-  /**
-   * Returns the base path to use for this display.
-   *
-   * This can be overridden for displays that do strange things
-   * with the path.
-   */
-  public function getPath();
-
-  public function getUrl();
-
-  /**
-   * Determines if an option is set to use the default or current display.
-   *
-   * @return
-   *   TRUE for the default display.
-   */
-  public function isDefaulted($option);
-
-  /**
-   * Gets an option, from this display or the default display.
-   */
-  public function getOption($option);
-
-  /**
-   * Determines if the display's style uses fields.
-   *
-   * @return bool
-   */
-  public function usesFields();
-
-  /**
-   * Get the instance of a plugin, for example style or row.
-   *
-   * @param string $type
-   *   The type of the plugin.
-   *
-   * @return \Drupal\views\Plugin\views\ViewsPluginInterface
-   */
-  public function getPlugin($type);
-
-  /**
-   * Get the handler object for a single handler.
-   */
-  public function getHandler($type, $id);
-
-  /**
-   * Get a full array of handlers for $type. This caches them.
-   *
-   * @return \Drupal\views\Plugin\views\ViewsHandlerInterface[]
-   */
-  public function getHandlers($type);
-
-  /**
-   * Retrieves a list of fields for the current display.
-   *
-   * This also takes into account any associated relationships, if they exist.
-   *
-   * @param bool $groupable_only
-   *   (optional) TRUE to only return an array of field labels from handlers
-   *   that support the useStringGroupBy method, defaults to FALSE.
-   *
-   * @return array
-   *   An array of applicable field options, keyed by ID.
-   */
-  public function getFieldLabels($groupable_only = FALSE);
-
-  /**
-   * Sets an option, on this display or the default display.
-   */
-  public function setOption($option, $value);
-
-  /**
-   * Set an option and force it to be an override.
-   */
-  public function overrideOption($option, $value);
-
-  /**
-   * Returns a link to a section of a form.
-   *
-   * Because forms may be split up into sections, this provides an easy URL
-   * to exactly the right section. Don't override this.
-   */
-  public function optionLink($text, $section, $class = '', $title = '');
-
-  /**
-   * Returns to tokens for arguments.
-   *
-   * This function is similar to views_handler_field::getRenderTokens()
-   * but without fields tokens.
-   */
-  public function getArgumentsTokens();
-
-  /**
-   * Provides the default summary for options in the views UI.
-   *
-   * This output is returned as an array.
-   */
-  public function optionsSummary(&$categories, &$options);
-
-  /**
-   * Provides the default form for setting options.
-   */
-  public function buildOptionsForm(&$form, FormStateInterface $form_state);
-
-  /**
-   * Validates the options form.
-   */
-  public function validateOptionsForm(&$form, FormStateInterface $form_state);
-
-  /**
-   * Performs any necessary changes to the form values prior to storage.
-   *
-   * There is no need for this function to actually store the data.
-   */
-  public function submitOptionsForm(&$form, FormStateInterface $form_state);
-
-  /**
-   * If override/revert was clicked, perform the proper toggle.
-   */
-  public function optionsOverride($form, FormStateInterface $form_state);
-
-  /**
-   * Flip the override setting for the given section.
-   *
-   * @param string $section
-   *   Which option should be marked as overridden, for example "filters".
-   * @param bool $new_state
-   *   Select the new state of the option:
-   *   - TRUE: Revert new state option to default.
-   *   - FALSE: Mark it as overridden.
-   */
-  public function setOverride($section, $new_state = NULL);
-
-  /**
-   * Injects anything into the query that the display handler needs.
-   */
-  public function query();
-
-  /**
-   * Does nothing (obsolete function).
-   *
-   * @todo This function no longer seems to be used.
-   */
-  public function renderFilters();
-
-  /**
-   * Checks to see if the display plugins support pager rendering.
-   */
-  public function renderPager();
-
-  /**
-   * Renders the 'more' link.
-   */
-  public function renderMoreLink();
-
-  /**
-   * Gets menu links, if this display provides some.
-   *
-   * @return array
-   *   The menu links registers for this display.
-   *
-   * @see \Drupal\views\Plugin\Derivative\ViewsMenuLink
-   */
-  public function getMenuLinks();
-
-  /**
-   * Renders this display.
-   */
-  public function render();
-
-  /**
-   * #pre_render callback for view display rendering.
-   *
-   * @see self::render()
-   *
-   * @param array $element
-   *   The element to #pre_render
-   *
-   * @return array
-   *   The processed element.
-   */
-  public function elementPreRender(array $element);
-
-  /**
-   * Renders one of the available areas.
-   *
-   * @param string $area
-   *   Identifier of the specific area to render.
-   * @param bool $empty
-   *   (optional) Indicator whether or not the view result is empty. Defaults to
-   *   FALSE
-   *
-   * @return array
-   *   A render array for the given area.
-   */
-  public function renderArea($area, $empty = FALSE);
-
-  /**
-   * Determines if the user has access to this display of the view.
-   */
-  public function access(AccountInterface $account = NULL);
-
-  /**
-   * Sets up any variables on the view prior to execution.
-   *
-   * These are separated from execute because they are extremely common
-   * and unlikely to be overridden on an individual display.
-   */
-  public function preExecute();
-
-  /**
-   * Calculates the display's cache metadata by inspecting each handler/plugin.
-   *
-   * @return array
-   *   Returns an array:
-   *   - first value: (boolean) Whether the display is cacheable.
-   *   - second value: (string[]) The cache contexts the display varies by.
-   */
-  public function calculateCacheMetadata();
-
-  /**
-   * Executes the view and returns data in the format required.
-   *
-   * The base class cannot be executed.
-   */
-  public function execute();
-
-  /**
-   * Builds a renderable array of the view.
-   *
-   * Note: This does not yet contain the executed view, but just the loaded view
-   * executable.
-   *
-   * @return array
-   *   The render array of a view.
-   */
-  public function buildRenderable(array $args = []);
-
-  /**
-   * Renders the display for the purposes of a live preview.
-   *
-   * Also might be used for some other AJAXy reason.
-   */
-  function preview();
-
-  /**
-   * Make sure the display and all associated handlers are valid.
-   *
-   * @return
-   *   Empty array if the display is valid; an array of error strings if it is
-   *   not.
-   */
-  public function validate();
-
-  /**
-   * Reacts on adding a display.
-   *
-   * @see \Drupal\views\Entity\View::newDisplay()
-   */
-  public function newDisplay();
-
-  /**
-   * Reacts on deleting a display.
-   */
-  public function remove();
-
-  /**
-   * Checks if the provided identifier is unique.
-   *
-   * @param string $id
-   *   The id of the handler which is checked.
-   * @param string $identifier
-   *   The actual get identifier configured in the exposed settings.
-   *
-   * @return bool
-   *   Returns whether the identifier is unique on all handlers.
-   *
-   */
-  public function isIdentifierUnique($id, $identifier);
-
-  /**
-   * Is the output of the view empty.
-   *
-   * If a view has no result and neither the empty, nor the footer nor the header
-   * does show anything return FALSE.
-   *
-   * @return bool
-   *   Returns TRUE if the output is empty, else FALSE.
-   */
-  public function outputIsEmpty();
-
-  /**
-   * Provides the block system with any exposed widget blocks for this display.
-   */
-  public function getSpecialBlocks();
-
-  /**
-   * Renders the exposed form as block.
-   *
-   * @return string|null
-   *  The rendered exposed form as string or NULL otherwise.
-   */
-  public function viewExposedFormBlocks();
-
-  /**
-   * Provides help text for the arguments.
-   *
-   * @return array
-   *   Returns an array which contains text for the argument fieldset:
-   *   - filter value present: The title of the fieldset in the argument
-   *     where you can configure what should be done with a given argument.
-   *   - filter value not present: The title of the fieldset in the argument
-   *     where you can configure what should be done if the argument does not
-   *     exist.
-   *   - description: A description about how arguments are passed
-   *     to the display. For example blocks can't get arguments from url.
-   */
-  public function getArgumentText();
-
-  /**
-   * Provides help text for pagers.
-   *
-   * @return array
-   *   Returns an array which contains text for the items_per_page form
-   *   element:
-   *   - items per page title: The title text for the items_per_page form
-   *     element.
-   *   - items per page description: The description text for the
-   *     items_per_page form element.
-   */
-  public function getPagerText();
-
-  /**
-   * Merges default values for all plugin types.
-   */
-  public function mergeDefaults();
-
-  /**
-   * Gets the display extenders.
-   *
-   * @return \Drupal\views\Plugin\views\display_extender\DisplayExtenderPluginBase[]
-   */
-  public function getExtenders();
-
-}
diff --git a/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php b/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php
index 6223c52..70eb191 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php
@@ -15,7 +15,7 @@
  * In addition to implementing the interface, specify 'uses_routes' in the
  * plugin definition.
  */
-interface DisplayRouterInterface extends DisplayPluginInterface {
+interface DisplayRouterInterface {
 
   /**
    * Adds the route entry of a view to the collection.
diff --git a/core/modules/views/src/Tests/Handler/FieldUrlTest.php b/core/modules/views/src/Tests/Handler/FieldUrlTest.php
index 67616ca..af0f927 100644
--- a/core/modules/views/src/Tests/Handler/FieldUrlTest.php
+++ b/core/modules/views/src/Tests/Handler/FieldUrlTest.php
@@ -71,7 +71,7 @@ public function testFieldUrl() {
 
     $this->executeView($view);
 
-    $this->assertEqual(\Drupal::l('John', Url::fromUri('base:John')), $view->field['name']->advancedRender($view->result[0]));
+    $this->assertEqual(\Drupal::l('John', Url::fromUri(Url::BASE . ':John')), $view->field['name']->advancedRender($view->result[0]));
   }
 
 }
diff --git a/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php b/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php
index 56ec973..27b32da 100644
--- a/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php
+++ b/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\Tests\views\Unit\Plugin\display;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Core\Url;
 use Drupal\Tests\UnitTestCase;
 use Symfony\Component\Routing\Route;
 use Symfony\Component\Routing\RouteCollection;
@@ -245,7 +246,7 @@ public function testAlterRoutesWithParameters() {
    */
   public function testAlterRoutesWithParametersAndUpcasting() {
     $collection = new RouteCollection();
-    $collection->add('test_route', new Route('test_route/{parameter}', ['_controller' => 'Drupal\Tests\Core\Controller\TestController::content'], [], ['parameters' => ['taxonomy_term' => 'entity:entity_test']]));
+    $collection->add('test_route', new Route('test_route/{parameter}', ['_controller' => 'Drupal\Tests\Core\Controller\TestController::content'], [], ['parameters' => ['taxonomy_term' => Url::ENTITY . ':entity_test']]));
 
     list($view) = $this->setupViewExecutableAccessPlugin();
 
@@ -271,7 +272,7 @@ public function testAlterRoutesWithParametersAndUpcasting() {
     $this->assertInstanceOf('\Symfony\Component\Routing\Route', $route);
     $this->assertEquals('test_id', $route->getDefault('view_id'));
     $this->assertEquals('page_1', $route->getDefault('display_id'));
-    $this->assertEquals(['taxonomy_term' => 'entity:entity_test'], $route->getOption('parameters'));
+    $this->assertEquals(['taxonomy_term' => Url::ENTITY . ':entity_test'], $route->getOption('parameters'));
     // Ensure that the path did not changed and placeholders are respected  kk.
     $this->assertEquals('/test_route/{parameter}', $route->getPath());
     $this->assertEquals(['arg_0' => 'parameter'], $route->getOption('_view_argument_map'));
diff --git a/core/modules/views_ui/src/ViewEditForm.php b/core/modules/views_ui/src/ViewEditForm.php
index 363474d..8f73ea7 100644
--- a/core/modules/views_ui/src/ViewEditForm.php
+++ b/core/modules/views_ui/src/ViewEditForm.php
@@ -318,7 +318,7 @@ public function save(array $form, FormStateInterface $form_state) {
       }
       // @todo Use Url::fromPath() once https://www.drupal.org/node/2351379 is
       //   resolved.
-      $form_state->setRedirectUrl(Url::fromUri("base:$destination"));
+      $form_state->setRedirectUrl(Url::fromUri(Url::BASE . ":$destination"));
     }
 
     $view->save();
@@ -424,7 +424,7 @@ public function getDisplayDetails($view, $display) {
               '#options' => array('alt' => array($this->t("Go to the real page for this display"))),
               // @todo Use Url::fromPath() once
               //   https://www.drupal.org/node/2351379 is resolved.
-              '#url' => Url::fromUri("base:$path"),
+              '#url' => Url::fromUri(Url::BASE . ":$path"),
               '#prefix' => '<li class="view">',
               "#suffix" => '</li>',
             );
diff --git a/core/modules/views_ui/src/ViewListBuilder.php b/core/modules/views_ui/src/ViewListBuilder.php
index b4a53c6..cb1d035 100644
--- a/core/modules/views_ui/src/ViewListBuilder.php
+++ b/core/modules/views_ui/src/ViewListBuilder.php
@@ -263,7 +263,7 @@ protected function getDisplayPaths(EntityInterface $view) {
       if ($display->hasPath()) {
         $path = $display->getPath();
         if ($view->status() && strpos($path, '%') === FALSE) {
-          $all_paths[] = \Drupal::l('/' . $path, Url::fromUri('user-path:' . $path));
+          $all_paths[] = \Drupal::l('/' . $path, Url::fromUri(Url::USER_PATH . ':' . $path));
         }
         else {
           $all_paths[] = String::checkPlain('/' . $path);
diff --git a/core/modules/views_ui/src/ViewUI.php b/core/modules/views_ui/src/ViewUI.php
index c5ef9f7..2afdd7e 100644
--- a/core/modules/views_ui/src/ViewUI.php
+++ b/core/modules/views_ui/src/ViewUI.php
@@ -702,7 +702,7 @@ public function renderPreview($display_id, $args = array()) {
               Xss::filterAdmin($this->executable->getTitle()),
             );
             if (isset($path)) {
-              $path = \Drupal::l($path, Url::fromUri('user-path:' . $path));
+              $path = \Drupal::l($path, Url::fromUri(Url::USER_PATH . ':' . $path));
             }
             else {
               $path = t('This display has no path.');
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php
index df59a98..1853e27 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php
@@ -13,6 +13,7 @@
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormInterface;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
 use Drupal\Tests\UnitTestCase;
 use Symfony\Component\Routing\Route;
 
@@ -208,7 +209,7 @@ public function testSetRouteOptionsWithEntityTypeUpcasting($controller) {
     $this->entityResolverManager->setRouteOptions($route);
     $this->assertEquals($defaults, $route->getDefaults());
     $parameters = $route->getOption('parameters');
-    $this->assertEquals(array('entity_test' => array('type' => 'entity:entity_test')), $parameters);
+    $this->assertEquals(array('entity_test' => array('type' => Url::ENTITY . ':entity_test')), $parameters);
   }
 
   /**
@@ -240,7 +241,7 @@ public function testSetRouteOptionsWithEntityFormUpcasting() {
     $this->entityResolverManager->setRouteOptions($route);
     $this->assertEquals($defaults, $route->getDefaults());
     $parameters = $route->getOption('parameters');
-    $this->assertEquals(array('entity_test' => array('type' => 'entity:entity_test')), $parameters);
+    $this->assertEquals(array('entity_test' => array('type' => Url::ENTITY . ':entity_test')), $parameters);
   }
 
   /**
@@ -262,7 +263,7 @@ public function testSetRouteOptionsWithEntityUpcastingNoCreate() {
     $this->entityResolverManager->setRouteOptions($route);
     $this->assertEquals($defaults, $route->getDefaults());
     $parameters = $route->getOption('parameters');
-    $this->assertEquals(array('entity_test' => array('type' => 'entity:entity_test')), $parameters);
+    $this->assertEquals(array('entity_test' => array('type' => Url::ENTITY . ':entity_test')), $parameters);
   }
 
   /**
@@ -305,7 +306,7 @@ public function testSetRouteOptionsWithEntityViewRouteAndManualParameters() {
       array(
         'parameters' => array(
           'foo' => array(
-            'type' => 'entity:entity_test',
+            'type' => Url::ENTITY . ':entity_test',
           ),
         ),
       )
@@ -315,7 +316,7 @@ public function testSetRouteOptionsWithEntityViewRouteAndManualParameters() {
     $this->entityResolverManager->setRouteOptions($route);
     $this->assertEquals($defaults, $route->getDefaults());
     $parameters = $route->getOption('parameters');
-    $this->assertEquals(array('foo' => array('type' => 'entity:entity_test')), $parameters);
+    $this->assertEquals(array('foo' => array('type' => Url::ENTITY . ':entity_test')), $parameters);
   }
 
   /**
@@ -337,7 +338,7 @@ public function testSetRouteOptionsWithEntityViewRoute() {
     $this->entityResolverManager->setRouteOptions($route);
     $this->assertEquals($defaults, $route->getDefaults());
     $parameters = $route->getOption('parameters');
-    $this->assertEquals(array('entity_test' => array('type' => 'entity:entity_test')), $parameters);
+    $this->assertEquals(array('entity_test' => array('type' => Url::ENTITY . ':entity_test')), $parameters);
   }
 
   /**
@@ -381,7 +382,7 @@ public function testSetRouteOptionsWithEntityFormRoute() {
     $this->entityResolverManager->setRouteOptions($route);
     $this->assertEquals($defaults, $route->getDefaults());
     $parameters = $route->getOption('parameters');
-    $this->assertEquals(array('entity_test' => array('type' => 'entity:entity_test')), $parameters);
+    $this->assertEquals(array('entity_test' => array('type' => Url::ENTITY . ':entity_test')), $parameters);
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Core/ParamConverter/EntityConverterTest.php b/core/tests/Drupal/Tests/Core/ParamConverter/EntityConverterTest.php
index 36919a6..fb3d1d0 100644
--- a/core/tests/Drupal/Tests/Core/ParamConverter/EntityConverterTest.php
+++ b/core/tests/Drupal/Tests/Core/ParamConverter/EntityConverterTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\Tests\Core\ParamConverter;
 
 use Drupal\Core\ParamConverter\EntityConverter;
+use Drupal\Core\Url;
 use Drupal\Tests\UnitTestCase;
 use Symfony\Component\Routing\Route;
 
@@ -64,11 +65,11 @@ public function testApplies(array $definition, $name, Route $route, $applies) {
    */
   public function providerTestApplies() {
     $data = [];
-    $data[] = [['type' => 'entity:foo'], 'foo', new Route('/test/{foo}/bar'), FALSE];
-    $data[] = [['type' => 'entity:entity_test'], 'foo', new Route('/test/{foo}/bar'), TRUE];
-    $data[] = [['type' => 'entity:entity_test'], 'entity_test', new Route('/test/{entity_test}/bar'), TRUE];
-    $data[] = [['type' => 'entity:{entity_test}'], 'entity_test', new Route('/test/{entity_test}/bar'), FALSE];
-    $data[] = [['type' => 'entity:{entity_type}'], 'entity_test', new Route('/test/{entity_type}/{entity_test}/bar'), TRUE];
+    $data[] = [['type' => Url::ENTITY . ':foo'], 'foo', new Route('/test/{foo}/bar'), FALSE];
+    $data[] = [['type' => Url::ENTITY . ':entity_test'], 'foo', new Route('/test/{foo}/bar'), TRUE];
+    $data[] = [['type' => Url::ENTITY . ':entity_test'], 'entity_test', new Route('/test/{entity_test}/bar'), TRUE];
+    $data[] = [['type' => Url::ENTITY . ':{entity_test}'], 'entity_test', new Route('/test/{entity_test}/bar'), FALSE];
+    $data[] = [['type' => Url::ENTITY . ':{entity_type}'], 'entity_test', new Route('/test/{entity_type}/{entity_test}/bar'), TRUE];
     $data[] = [['type' => 'foo'], 'entity_test', new Route('/test/{entity_type}/{entity_test}/bar'), FALSE];
 
     return $data;
@@ -103,11 +104,11 @@ public function testConvert($value, array $definition, array $defaults, $expecte
   public function providerTestConvert() {
     $data = [];
     // Existing entity type.
-    $data[] = ['valid_id', ['type' => 'entity:entity_test'], ['foo' => 'valid_id'], (object) ['id' => 'valid_id']];
+    $data[] = ['valid_id', ['type' => Url::ENTITY . ':entity_test'], ['foo' => 'valid_id'], (object) ['id' => 'valid_id']];
     // Invalid ID.
-    $data[] = ['invalid_id', ['type' => 'entity:entity_test'], ['foo' => 'invalid_id'], NULL];
+    $data[] = ['invalid_id', ['type' => Url::ENTITY . ':entity_test'], ['foo' => 'invalid_id'], NULL];
     // Entity type placeholder.
-    $data[] = ['valid_id', ['type' => 'entity:{entity_type}'], ['foo' => 'valid_id', 'entity_type' => 'entity_test'], (object) ['id' => 'valid_id']];
+    $data[] = ['valid_id', ['type' => Url::ENTITY . ':{entity_type}'], ['foo' => 'valid_id', 'entity_type' => 'entity_test'], (object) ['id' => 'valid_id']];
 
     return $data;
   }
@@ -123,7 +124,7 @@ public function testConvertWithInvalidEntityType() {
       ->with('invalid_id')
       ->willThrowException(new \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException('invalid_id'));
 
-    $this->entityConverter->convert('id', ['type' => 'entity:invalid_id'], 'foo', ['foo' => 'id']);
+    $this->entityConverter->convert('id', ['type' => Url::ENTITY . ':invalid_id'], 'foo', ['foo' => 'id']);
   }
 
   /**
@@ -133,7 +134,7 @@ public function testConvertWithInvalidEntityType() {
    * @expectedExceptionMessage The "foo" parameter was not converted because the "invalid_id" parameter is missing
    */
   public function testConvertWithInvalidDynamicEntityType() {
-    $this->entityConverter->convert('id', ['type' => 'entity:{invalid_id}'], 'foo', ['foo' => 'id']);
+    $this->entityConverter->convert('id', ['type' => Url::ENTITY . ':{invalid_id}'], 'foo', ['foo' => 'id']);
   }
 
 }
diff --git a/core/tests/Drupal/Tests/Core/UnroutedUrlTest.php b/core/tests/Drupal/Tests/Core/UnroutedUrlTest.php
index f237422..6c332eb 100644
--- a/core/tests/Drupal/Tests/Core/UnroutedUrlTest.php
+++ b/core/tests/Drupal/Tests/Core/UnroutedUrlTest.php
@@ -85,9 +85,9 @@ public function testFromUri($uri, $is_external) {
   public function providerFromUri() {
     return [
       ['http://drupal.org', TRUE],
-      ['base:robots.txt', FALSE],
-      ['base:AKI@&hO@', FALSE],
-      ['base:(:;2&+h^', FALSE],
+      [Url::BASE . ':robots.txt', FALSE],
+      [Url::BASE . ':AKI@&hO@', FALSE],
+      [Url::BASE . ':(:;2&+h^', FALSE],
     ];
   }
 
@@ -107,11 +107,11 @@ public function testFromInvalidUri($uri) {
    */
   public function providerFromInvalidUri() {
     return [
-      ['base://AKI@&hO@'],
+      [Url::BASE . '://AKI@&hO@'],
       ['#foo'],
       ['foo?bar'],
       ['?bar'],
-      ['base://(:;2&+h^'],
+      [Url::BASE . '://(:;2&+h^'],
       ['test'],
       ['/test'],
       ['//test'],
diff --git a/core/tests/Drupal/Tests/Core/UrlTest.php b/core/tests/Drupal/Tests/Core/UrlTest.php
index 9d883d7..42b7ea2 100644
--- a/core/tests/Drupal/Tests/Core/UrlTest.php
+++ b/core/tests/Drupal/Tests/Core/UrlTest.php
@@ -184,7 +184,7 @@ public function testFromRoutedPathWithInvalidRoute() {
       ->willReturn(FALSE);
     $url = Url::fromUri('user-path:invalid-path');
     $this->assertSame(FALSE, $url->isRouted());
-    $this->assertSame('base:invalid-path', $url->getUri());
+    $this->assertSame(Url::BASE . ':' . 'invalid-path', $url->getUri());
   }
 
   /**
@@ -444,7 +444,7 @@ public function testAccessRouted($access) {
    */
   public function testAccessUnrouted() {
     $account = $this->getMock('Drupal\Core\Session\AccountInterface');
-    $url = TestUrl::fromUri('base:kittens');
+    $url = TestUrl::fromUri(Url::BASE . ':kittens');
     $access_manager = $this->getMock('Drupal\Core\Access\AccessManagerInterface');
     $access_manager->expects($this->never())
       ->method('checkNamedRoute');
@@ -481,12 +481,12 @@ public function testFromRouteMatch() {
   }
 
   /**
-   * Tests the fromUri() method with an entity: URI.
+   * Tests the fromUri() method with an Url::ENTITY URI.
    *
    * @covers ::fromUri
    */
   public function testEntityUris() {
-    $url = Url::fromUri('entity:test_entity/1');
+    $url = Url::fromUri(Url::ENTITY . ':test_entity/1');
     $this->assertSame('entity.test_entity.canonical', $url->getRouteName());
     $this->assertEquals(['test_entity' => '1'], $url->getRouteParameters());
   }
@@ -504,7 +504,7 @@ public function testInvalidEntityUriParameter() {
       ->with('entity.test_entity.canonical', ['test_entity' => '1/blah'])
       ->willThrowException(new InvalidParameterException('Parameter "test_entity" for route "/test_entity/{test_entity}" must match "[^/]++" ("1/blah" given) to generate a corresponding URL..'));
 
-    Url::fromUri('entity:test_entity/1/blah')->toString();
+    Url::fromUri(Url::ENTITY . ':test_entity/1/blah')->toString();
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php b/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
index b6253f0..3522369 100644
--- a/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
+++ b/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Tests\Core\Utility;
 
+use Drupal\Core\Url;
 use Drupal\Core\Utility\UnroutedUrlAssembler;
 use Drupal\Tests\UnitTestCase;
 use Symfony\Component\HttpFoundation\Request;
@@ -108,13 +109,14 @@ public function testAssembleWithLocalUri($uri, array $options, $subdir, $expecte
    * @return array
    */
   public function providerTestAssembleWithLocalUri() {
+    return 123;
     return [
-      ['base:example', [], FALSE, '/example'],
-      ['base:example', ['query' => ['foo' => 'bar']], FALSE, '/example?foo=bar'],
-      ['base:example', ['fragment' => 'example', ], FALSE, '/example#example'],
-      ['base:example', [], TRUE, '/subdir/example'],
-      ['base:example', ['query' => ['foo' => 'bar']], TRUE, '/subdir/example?foo=bar'],
-      ['base:example', ['fragment' => 'example', ], TRUE, '/subdir/example#example'],
+      [Url::BASE . ':example', [], FALSE, '/example'],
+      [Url::BASE . ':example', ['query' => ['foo' => 'bar']], FALSE, '/example?foo=bar'],
+      [Url::BASE . ':example', ['fragment' => 'example', ], FALSE, '/example#example'],
+      [Url::BASE . ':example', [], TRUE, '/subdir/example'],
+      [Url::BASE . ':example', ['query' => ['foo' => 'bar']], TRUE, '/subdir/example?foo=bar'],
+      [Url::BASE . ':example', ['fragment' => 'example', ], TRUE, '/subdir/example#example'],
     ];
   }
 
@@ -125,7 +127,7 @@ public function testAssembleWithNotEnabledProcessing() {
     $this->setupRequestStack(FALSE);
     $this->pathProcessor->expects($this->never())
       ->method('processOutbound');
-    $result = $this->unroutedUrlAssembler->assemble('base:test-uri', []);
+    $result = $this->unroutedUrlAssembler->assemble(Url::BASE . ':test-uri', []);
     $this->assertEquals('/test-uri', $result);
   }
 
@@ -138,7 +140,7 @@ public function testAssembleWithEnabledProcessing() {
       ->method('processOutbound')
       ->with('test-uri', ['path_processing' => TRUE, 'fragment' => NULL, 'query' => [], 'absolute' => NULL, 'prefix' => NULL, 'script' => NULL])
       ->willReturn('test-other-uri');
-    $result = $this->unroutedUrlAssembler->assemble('base:test-uri', ['path_processing' => TRUE]);
+    $result = $this->unroutedUrlAssembler->assemble(Url::BASE . ':test-uri', ['path_processing' => TRUE]);
     $this->assertEquals('/test-other-uri', $result);
   }
 
diff --git a/core/tests/Drupal/Tests/Core/Validation/Plugin/Validation/Constraint/PrimitiveTypeConstraintValidatorTest.php b/core/tests/Drupal/Tests/Core/Validation/Plugin/Validation/Constraint/PrimitiveTypeConstraintValidatorTest.php
index e12189f..079c375 100644
--- a/core/tests/Drupal/Tests/Core/Validation/Plugin/Validation/Constraint/PrimitiveTypeConstraintValidatorTest.php
+++ b/core/tests/Drupal/Tests/Core/Validation/Plugin/Validation/Constraint/PrimitiveTypeConstraintValidatorTest.php
@@ -11,6 +11,7 @@
 use Drupal\Core\Validation\Plugin\Validation\Constraint\PrimitiveTypeConstraint;
 use Drupal\Core\Validation\Plugin\Validation\Constraint\PrimitiveTypeConstraintValidator;
 use Drupal\Tests\UnitTestCase;
+use Drupal\Core\Url;
 
 /**
  * @coversDefaultClass Drupal\Core\Validation\Plugin\Validation\Constraint\PrimitiveTypeConstraintValidator
@@ -70,10 +71,10 @@ public function provideTestValidate() {
     $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), 'http://www.drupal.org', TRUE];
     $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), 'https://www.drupal.org', TRUE];
     $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), 'Invalid', FALSE];
-    $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), 'entity:node/1', TRUE];
-    $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), 'base:', TRUE];
-    $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), 'base:node', TRUE];
-    $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), 'user-path:', TRUE];
+    $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), Url::ENTITY . ':node/1', TRUE];
+    $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), Url::BASE . ':', TRUE];
+    $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), Url::BASE .':node', TRUE];
+    $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), Url::USER_PATH . ':', TRUE];
     $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), 'public://', FALSE];
     $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), 'public://foo.png', TRUE];
     $data[] = [$this->getMock('Drupal\Core\TypedData\Type\UriInterface'), 'private://', FALSE];
