Index: src/wp-includes/js/tinymce/plugins/wplink/plugin.js
===================================================================
--- src/wp-includes/js/tinymce/plugins/wplink/plugin.js	(revision 36977)
+++ src/wp-includes/js/tinymce/plugins/wplink/plugin.js	(working copy)
@@ -1,4 +1,4 @@
-( function( tinymce ) {
+( function( tinymce, wp ) {
 	tinymce.ui.WPLinkPreview = tinymce.ui.Control.extend( {
 		url: '#',
 		renderHtml: function() {
@@ -56,7 +56,7 @@
 		renderHtml: function() {
 			return (
 				'<div id="' + this._id + '" class="wp-link-input">' +
-					'<input type="text" value="" tabindex="-1" placeholder="' + tinymce.translate('Paste URL or type to search') + '" />' +
+					'<input type="text" value="" placeholder="' + tinymce.translate( 'Paste URL or type to search' ) + '" />' +
 					'<input type="text" style="display:none" value="" />' +
 				'</div>'
 			);
@@ -231,6 +231,8 @@
 
 			inputInstance.reset();
 			editor.nodeChanged();
+			// Audible confirmation message when a link has been inserted in the Editor.
+			wp.a11y.speak( ( typeof window.uiAutocompleteL10n !== 'undefined' ) ? window.uiAutocompleteL10n.linkInserted : '' );
 		} );
 
 		editor.addCommand( 'wp_link_cancel', function() {
@@ -348,11 +350,19 @@
 						},
 						focus: function( event, ui ) {
 							$input.attr( 'aria-activedescendant', 'mce-wp-autocomplete-' + ui.item.ID );
+							/*
+							 * Don't empty the URL input field, when using the arrow keys to
+							 * highlight items. See api.jqueryui.com/autocomplete/#event-focus
+							 */
 							event.preventDefault();
 						},
 						select: function( event, ui ) {
 							$input.val( ui.item.permalink );
 							$( element.firstChild.nextSibling ).val( ui.item.title );
+							if ( 9 === event.keyCode ) {
+								// Audible confirmation message when a link has been selected.
+								wp.a11y.speak( ( typeof window.uiAutocompleteL10n !== 'undefined' ) ? window.uiAutocompleteL10n.linkSelected : '' );
+							}
 							return false;
 						},
 						open: function() {
@@ -390,13 +400,21 @@
 						'aria-autocomplete': 'list',
 						'aria-expanded': 'false',
 						'aria-owns': $input.autocomplete( 'widget' ).attr( 'id' )
-					}  )
+					} )
 					.on( 'focus', function() {
-						$input.autocomplete( 'search' );
+						var $inputValue = $input.val();
+						/*
+						 * Don't trigger a search if the URL field already has a link or is empty.
+						 * Also, avoids screen readers announce `No search results`.
+						 */
+						if ( ! /^https?:/.test( $inputValue ) && '' !== $inputValue ) {
+							$input.autocomplete( 'search' );
+						}
 					} )
 					.autocomplete( 'widget' )
 						.addClass( 'wplink-autocomplete' )
-						.attr( 'role', 'listbox' );
+						.attr( 'role', 'listbox' )
+						.removeAttr( 'tabindex' ); // Remove the `tabindex=0` attribute added by jQuery UI.
 				}
 
 				tinymce.$( input ).on( 'keydown', function( event ) {
@@ -460,7 +478,16 @@
 					var url = inputInstance.getURL() || null,
 						text = inputInstance.getLinkText() || null;
 
-					editor.focus(); // Needed for IE
+					/*
+					 * Accessibility note: moving focus back to the editor confuses
+					 * screen readers. They will announce again the Editor ARIA role
+					 * `application` and the iframe `title` attribute.
+					 * Should be preferably limited to IE or removed if not strictly
+					 * necessary.
+					 */
+					if ( tinymce.Env.ie ) {
+						editor.focus(); // Needed for IE
+					}
 					window.wpLink.open( editor.id, url, text, linkNode );
 
 					editToolbar.tempHide = true;
@@ -483,4 +510,4 @@
 			}
 		};
 	} );
-} )( window.tinymce );
+} )( window.tinymce, window.wp );
Index: src/wp-includes/js/wplink.js
===================================================================
--- src/wp-includes/js/wplink.js	(revision 36977)
+++ src/wp-includes/js/wplink.js	(working copy)
@@ -1,7 +1,7 @@
 
 var wpLink;
 
-( function( $, wpLinkL10n ) {
+( function( $, wpLinkL10n, wp ) {
 	var editor, correctedURL, linkNode,
 		inputs = {},
 		isTouch = ( 'ontouchend' in document );
@@ -76,6 +76,10 @@
 				},
 				focus: function( event, ui ) {
 					$input.attr( 'aria-activedescendant', 'mce-wp-autocomplete-' + ui.item.ID );
+					/*
+					 * Don't empty the URL input field, when using the arrow keys to
+					 * highlight items. See api.jqueryui.com/autocomplete/#event-focus
+					 */
 					event.preventDefault();
 				},
 				select: function( event, ui ) {
@@ -85,6 +89,8 @@
 						inputs.text.val( ui.item.title );
 					}
 
+					// Audible confirmation message when a link has been selected.
+					wp.a11y.speak( ( typeof window.uiAutocompleteL10n !== 'undefined' ) ? window.uiAutocompleteL10n.linkSelected : '' );
 					return false;
 				},
 				open: function() {
@@ -117,15 +123,21 @@
 
 			$input.attr( {
 				'aria-owns': $input.autocomplete( 'widget' ).attr( 'id' )
-			}  )
+			} )
 			.on( 'focus', function() {
-				$input.autocomplete( 'search' );
+				var $inputValue = $input.val();
+				/*
+				 * Don't trigger a search if the URL field already has a link or is empty.
+				 * Also, avoids screen readers announce `No search results`.
+				 */
+				if ( ! /^https?:/.test( $inputValue ) && '' !== $inputValue ) {
+					$input.autocomplete( 'search' );
+				}
 			} )
 			.autocomplete( 'widget' )
 				.addClass( 'wplink-autocomplete' )
-				.attr( 'role', 'listbox' );
-
-
+				.attr( 'role', 'listbox' )
+				.removeAttr( 'tabindex' ); // Remove the `tabindex=0` attribute added by jQuery UI.
 		},
 
 		// If URL wasn't corrected last time and doesn't start with http:, https:, ? # or /, prepend http://
@@ -402,6 +414,8 @@
 
 			wpLink.close();
 			textarea.focus();
+			// Audible confirmation message when a link has been inserted in the Editor.
+			wp.a11y.speak( ( typeof window.uiAutocompleteL10n !== 'undefined' ) ? window.uiAutocompleteL10n.linkInserted : '' );
 		},
 
 		mceUpdate: function() {
@@ -450,6 +464,8 @@
 			wpLink.close( 'noReset' );
 			editor.focus();
 			editor.nodeChanged();
+			// Audible confirmation message when a link has been inserted in the Editor.
+			wp.a11y.speak( ( typeof window.uiAutocompleteL10n !== 'undefined' ) ? window.uiAutocompleteL10n.linkInserted : '' );
 		},
 
 		keydown: function( event ) {
@@ -511,4 +527,4 @@
 	};
 
 	$( document ).ready( wpLink.init );
-})( jQuery, window.wpLinkL10n );
+})( jQuery, window.wpLinkL10n, window.wp );
Index: src/wp-includes/script-loader.php
===================================================================
--- src/wp-includes/script-loader.php	(revision 36977)
+++ src/wp-includes/script-loader.php	(working copy)
@@ -204,7 +204,7 @@
 	$scripts->add( 'jquery-effects-transfer', "/wp-includes/js/jquery/ui/effect-transfer$dev_suffix.js", array('jquery-effects-core'), '1.11.4', 1 );
 
 	$scripts->add( 'jquery-ui-accordion', "/wp-includes/js/jquery/ui/accordion$dev_suffix.js", array('jquery-ui-core', 'jquery-ui-widget'), '1.11.4', 1 );
-	$scripts->add( 'jquery-ui-autocomplete', "/wp-includes/js/jquery/ui/autocomplete$dev_suffix.js", array('jquery-ui-menu'), '1.11.4', 1 );
+	$scripts->add( 'jquery-ui-autocomplete', "/wp-includes/js/jquery/ui/autocomplete$dev_suffix.js", array( 'jquery-ui-menu', 'wp-a11y' ), '1.11.4', 1 );
 	$scripts->add( 'jquery-ui-button', "/wp-includes/js/jquery/ui/button$dev_suffix.js", array('jquery-ui-core', 'jquery-ui-widget'), '1.11.4', 1 );
 	$scripts->add( 'jquery-ui-datepicker', "/wp-includes/js/jquery/ui/datepicker$dev_suffix.js", array('jquery-ui-core'), '1.11.4', 1 );
 	$scripts->add( 'jquery-ui-dialog', "/wp-includes/js/jquery/ui/dialog$dev_suffix.js", array('jquery-ui-resizable', 'jquery-ui-draggable', 'jquery-ui-button', 'jquery-ui-position'), '1.11.4', 1 );
@@ -226,10 +226,12 @@
 
 	// Strings for 'jquery-ui-autocomplete' live region messages
 	did_action( 'init' ) && $scripts->localize( 'jquery-ui-autocomplete', 'uiAutocompleteL10n', array(
-			'noResults' => __( 'No search results.' ),
+			'noResults'    => __( 'No search results.' ),
 			/* translators: Number of results found when using jQuery UI Autocomplete */
-			'oneResult' => __( '1 result found. Use up and down arrow keys to navigate.' ),
-			'manyResults' => __( '%d results found. Use up and down arrow keys to navigate.' ),
+			'oneResult'    => __( '1 result found. Use up and down arrow keys to navigate.' ),
+			'manyResults'  => __( '%d results found. Use up and down arrow keys to navigate.' ),
+			'linkSelected' => __( 'Link selected.' ),
+			'linkInserted' => __( 'Link inserted.' ),
 	) );
 
 	// deprecated, not used in core, most functionality is included in jQuery 1.3
@@ -401,7 +403,7 @@
 
 	$scripts->add( 'admin-bar', "/wp-includes/js/admin-bar$suffix.js", array(), false, 1 );
 
-	$scripts->add( 'wplink', "/wp-includes/js/wplink$suffix.js", array( 'jquery' ), false, 1 );
+	$scripts->add( 'wplink', "/wp-includes/js/wplink$suffix.js", array( 'jquery', 'wp-a11y' ), false, 1 );
 	did_action( 'init' ) && $scripts->localize( 'wplink', 'wpLinkL10n', array(
 		'title' => __('Insert/edit link'),
 		'update' => __('Update'),
