Index: wp-admin/includes/update.php
===================================================================
--- wp-admin/includes/update.php	(revision 17792)
+++ wp-admin/includes/update.php	(working copy)
@@ -309,4 +309,53 @@
 }
 add_action( 'admin_notices', 'maintenance_nag' );
 
+/**
+ * Display a nag in the footer if the user is using an outdated browser.  If
+ * that browser is IE < 8 mention that it is insecure
+ *
+ * @since 3.1.2
+ */
+function browser_upgrade_nag() {
+	$key = md5( $_SERVER['HTTP_USER_AGENT'] );
+
+	if ( false !== ($response = get_site_transient('browsehappy_' . $key) ) ) {
+
+		$options = array(
+			'body'			=> array( 'useragent' => $_SERVER['HTTP_USER_AGENT'] ),
+			'user-agent'	=> 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )
+		);
+
+		$raw_response = wp_remote_post( 'http://api.wordpress.org/core/browse-happy/1.0/', $options );
+
+		if ( is_wp_error( $raw_response ) || 200 != $raw_response['response']['code'] )
+			return;
+
+		/**
+		 * Response should be an array with:
+		 *  'name' - string- A user friendly browser name
+		 *  'version' - string - The most recent version of the browser
+		 *  'upgrade' - boolean - Whether the browser needs an upgrade
+		 *  'insecure' - boolean - Whether the browser is deemed insecure
+		 */
+		$response = unserialize( $raw_response['body'] );
+
+		if ( ! $response )
+			return;
+
+		set_site_transient( 'browsehappy_' . $key, $response, 604800 ); // cache for 1 week
+	}
+
+	if ( ! $response['upgrade'] )
+		return;
+
+	if ( $response['insecure'] ) {
+		$msg = sprintf( __( 'Your version of %s is insecure.  WordPress recommends an update.' ), $response['name'] );
+	} else {
+		$msg = sprintf( __( 'Your version of %s is out of date.  WordPress recommends an update.' ), $response['name'] );
+	}
+
+	echo apply_filters( 'browse-happy-notice', '<div id="bh"><a href="http://browsehappy.com/" title="' . esc_attr__( 'Browse Happy' ) . '">' . esc_html( $msg ) . '</a></div>' );
+}
+add_action( 'admin_footer', 'browser_upgrade_nag' );
+
 ?>
