Index: wp-includes/class-wp-editor.php
===================================================================
--- wp-includes/class-wp-editor.php	(revision 21948)
+++ wp-includes/class-wp-editor.php	(working copy)
@@ -28,11 +28,14 @@
 	private function __construct() {}
 
 	public static function parse_settings($editor_id, $settings) {
-		$set = wp_parse_args( $settings,  array(
+		if ( isset( $settings['textarea_rows'] ) && ! isset( $settings['editor_height'] ) )
+			$settings['editor_height'] = $settings['textarea_rows'] * 19; // Convert rows="" to pixels.
+
+		$set = wp_parse_args( $settings, array(
 			'wpautop' => true, // use wpautop?
 			'media_buttons' => true, // show insert/upload button(s)
 			'textarea_name' => $editor_id, // set the textarea name to something different, square brackets [] can be used here
-			'textarea_rows' => get_option('default_post_edit_rows', 10), // rows="..."
+			'editor_height' => 380, // editor height in px (380px is about 20 textarea rows)
 			'tabindex' => '',
 			'tabfocus_elements' => ':prev,:next', // the previous and next element ID to move the focus to when pressing the Tab key in TinyMCE
 			'editor_css' => '', // intended for extra styles for both visual and Text editors buttons, needs to include the <style> tags, can use "scoped".
@@ -52,6 +55,25 @@
 		if ( self::$this_quicktags )
 			self::$has_quicktags = true;
 
+		if ( 'content' === $editor_id ) {
+			// A cookie (set when a user resizes the editor) overrides the default height.
+			$cookie = (int) get_user_setting( 'ed_s_' . $editor_id );
+
+			// Upgrade an old TinyMCE cookie if it is still around, and the new one isn't.
+			if ( ! $cookie && isset( $_COOKIE['TinyMCE_' . $editor_id . '_size'] ) ) {
+				parse_str( $_COOKIE['TinyMCE_' . $editor_id . '_size'], $cookie );
+				$cookie = $cookie['cw'];
+			}
+
+			if ( $cookie )
+				$set['editor_height'] = $cookie;
+		}
+
+		// 50px is the minimum height for TinyMCE and all things reasonable.
+		if ( $set['editor_height'] < 50 )
+			$set['editor_height'] = 50;
+
+		var_dump( $set );
 		return $set;
 	}
 
@@ -67,7 +89,7 @@
 		$set = self::parse_settings($editor_id, $settings);
 		$editor_class = ' class="' . trim( $set['editor_class'] . ' wp-editor-area' ) . '"';
 		$tabindex = $set['tabindex'] ? ' tabindex="' . (int) $set['tabindex'] . '"' : '';
-		$rows = ' rows="' . (int) $set['textarea_rows'] . '"';
+		$editor_height = ' style="height: ' . $set['editor_height'] . 'px;"';
 		$switch_class = 'html-active';
 		$toolbar = $buttons = '';
 
@@ -116,7 +138,7 @@
 			echo "</div>\n";
 		}
 
-		$the_editor = apply_filters('the_editor', '<div id="wp-' . $editor_id . '-editor-container" class="wp-editor-container"><textarea' . $editor_class . $rows . $tabindex . ' cols="40" name="' . $set['textarea_name'] . '" id="' . $editor_id . '">%s</textarea></div>');
+		$the_editor = apply_filters('the_editor', '<div id="wp-' . $editor_id . '-editor-container" class="wp-editor-container"><textarea' . $editor_class . $editor_height . $tabindex . ' cols="40" name="' . $set['textarea_name'] . '" id="' . $editor_id . '">%s</textarea></div>');
 		$content = apply_filters('the_editor_content', $content);
 
 		printf($the_editor, $content);
@@ -403,6 +425,8 @@
 				'body_class' => $body_class
 			);
 
+			$mceInit['theme_advanced_resizing_use_cookie'] = 'content' !== $editor_id;
+
 			if ( $first_run )
 				$mceInit = array_merge(self::$first_init, $mceInit);
 
Index: wp-admin/js/editor.js
===================================================================
--- wp-admin/js/editor.js	(revision 21948)
+++ wp-admin/js/editor.js	(working copy)
@@ -1,4 +1,21 @@
 
+(function($,win){
+	if ( typeof win.setUserSetting === 'undefined' )
+		return;
+
+	$(document).ready( function() {
+		var container = $('#wp-content-editor-container');
+		if ( ! container.length )
+			return;
+		$(win).unload( function() {
+			var height = container.height() - ( $('#content').height() ? 35 : 34 );
+			if ( height < 50 )
+				return;
+			win.setUserSetting( 'ed_s_content', height );
+		});
+	});
+})(jQuery, window);
+
 var switchEditors = {
 
 	switchto: function(el) {
