Index: src/wp-admin/edit-form-advanced.php
===================================================================
--- src/wp-admin/edit-form-advanced.php	(revision 31273)
+++ src/wp-admin/edit-form-advanced.php	(working copy)
@@ -86,6 +86,7 @@
 		/* translators: Publish box date format, see http://php.net/date */
 		date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( $permalink ) ),
 	10 => sprintf( __('Post draft updated. <a target="_blank" href="%s">Preview post</a>'), esc_url( add_query_arg( 'preview', 'true', $permalink ) ) ),
+	11 => __( 'You attempted to save or publish an empty post. Provide some content before saving.' ),
 );
 $messages['page'] = array(
 	 0 => '', // Unused. Messages start at index 1.
@@ -99,6 +100,7 @@
 	 8 => sprintf( __('Page submitted. <a target="_blank" href="%s">Preview page</a>'), esc_url( add_query_arg( 'preview', 'true', $permalink ) ) ),
 	 9 => sprintf( __('Page scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview page</a>'), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( $permalink ) ),
 	10 => sprintf( __('Page draft updated. <a target="_blank" href="%s">Preview page</a>'), esc_url( add_query_arg( 'preview', 'true', $permalink ) ) ),
+	11 => __( 'You attempted to save or publish an empty page. Provide some content before saving.' ),
 );
 $messages['attachment'] = array_fill( 1, 10, __( 'Media attachment updated.' ) ); // Hack, for now.
 
Index: src/wp-admin/js/post.js
===================================================================
--- src/wp-admin/js/post.js	(revision 31273)
+++ src/wp-admin/js/post.js	(working copy)
@@ -416,8 +416,16 @@
 
 	// The form is being submitted by the user
 	$submitButtons = $submitpost.find( ':submit, a.submitdelete, #post-preview' ).on( 'click.edit-post', function( event ) {
-		var $button = $(this);
+		var $button  = $(this),
+			content  = tinymce.get('content').getContent(),
+			title    = $( 'input#title' ).prop( 'value' ),
+			excerpt  = $( 'textarea#excerpt' ).prop( 'value' );
 
+		if ( '' == content && '' == title && '' == excerpt ){
+			event.preventDefault();
+			return;
+		}
+
 		if ( $button.hasClass('disabled') ) {
 			event.preventDefault();
 			return;
Index: src/wp-admin/post.php
===================================================================
--- src/wp-admin/post.php	(revision 31273)
+++ src/wp-admin/post.php	(working copy)
@@ -50,6 +50,9 @@
 				case 'future':
 					$message = 9;
 					break;
+				case 'auto-draft':
+					$message = 11;
+					break;
 				default:
 					$message = 6;
 			}
