Index: _source/plugins/wysiwygarea/plugin.js
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- _source/plugins/wysiwygarea/plugin.js	(revision 7397)
+++ _source/plugins/wysiwygarea/plugin.js	(revision )
@@ -476,7 +476,8 @@
 			var fixForBody = ( editor.config.enterMode != CKEDITOR.ENTER_BR && editor.config.autoParagraph !== false )
 				? editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p' : false;
 
-			var frameLabel = editor.lang.editorTitle.replace( '%1', editor.name );
+			var frameLabel = editor.lang.editor,
+				frameDesc = editor.lang.editorTitle.replace( '%1', editor.name );
 
 			var win = CKEDITOR.document.getWindow();
 			var contentDomReadyHandler;
@@ -520,10 +521,14 @@
 							:
 								'';
 
+						var labelId = CKEDITOR.tools.getNextId();
 						iframe = CKEDITOR.dom.element.createFromHtml( '<iframe' +
   							' style="width:100%;height:100%"' +
   							' frameBorder="0"' +
+  							' aria-describedby="' + labelId + '"' +
+							' aria-label="'+ frameLabel +'"' +
-  							' title="' + frameLabel + '"' +
+							' title="' + frameLabel + '"' +
+							' role="textbox"' +
   							' src="' + src + '"' +
 							' tabIndex="' + ( CKEDITOR.env.webkit? -1 : editor.tabIndex ) + '"' +
   							' allowTransparency="true"' +
@@ -549,6 +554,10 @@
 						if ( document.location.protocol == 'chrome:' )
 							CKEDITOR.event.useCapture = false;
 
+						mainElement.append( CKEDITOR.dom.element.createFromHtml(
+							'<span role="label" id="' + labelId + '" class="cke_voice_label">' +
+							frameDesc + '</span>'));
+
 						mainElement.append( iframe );
 
 						// Webkit: iframe size doesn't auto fit well. (#7360)
@@ -1007,7 +1016,7 @@
 										'<html dir="' + config.contentsLangDirection + '"' +
 											' lang="' + ( config.contentsLanguage || editor.langCode ) + '">' +
 										'<head>' +
-											'<title>' + frameLabel + '</title>' +
+											'<title></title>' +
 											baseTag +
 											headExtra +
 										'</head>' +
@@ -1142,14 +1151,14 @@
 					}, null, null, 1 );
 				});
 
-			var titleBackup;
-			// Setting voice label as window title, backup the original one
-			// and restore it before running into use.
-			editor.on( 'contentDom', function()
+			// [IE] JAWS will not recognize the aria label we used on the iframe
+			// unless the frame window title string is used as the voice label,
+			// backup the original one and restore it on output.
+			CKEDITOR.env.ie && editor.on( 'contentDom', function()
 				{
 					var title = editor.document.getElementsByTag( 'title' ).getItem( 0 );
 					title.data( 'cke-title', editor.document.$.title );
-					editor.document.$.title = frameLabel;
+					editor.document.$.title = [ frameLabel, frameDesc ].join( ' ' );
 				});
 
 			editor.on( 'readOnly', function()
