Index: src/wp-admin/css/common.css
===================================================================
--- src/wp-admin/css/common.css	(revision 37336)
+++ src/wp-admin/css/common.css	(working copy)
@@ -605,6 +605,7 @@
 	text-shadow: none;
 	font-weight: 600;
 	font-size: 13px;
+	cursor: pointer;
 }
 
 .wrap .add-new-h2:hover, /* deprecated */
Index: src/wp-admin/css/themes.css
===================================================================
--- src/wp-admin/css/themes.css	(revision 37335)
+++ src/wp-admin/css/themes.css	(working copy)
@@ -1073,7 +1073,7 @@
 	box-sizing: border-box;
 	display: none;
 	margin: 0;
-	padding: 0;
+	padding: 50px 0;
 	width: 100%;
 	overflow: hidden;
 	position: relative;
@@ -1100,13 +1100,9 @@
 	font-size: 18px;
 	font-style: normal;
 	margin: 0;
-	padding: 40px 0 0;
+	padding: 0;
 	text-align: center;
 }
-body.show-upload-theme .upload-theme + .wp-filter,
-body.show-upload-theme .upload-theme + .wp-filter + .theme-browser {
-	display: none;
-}
 
 p.no-themes {
 	clear: both;
@@ -1119,14 +1115,10 @@
 	display: none;
 }
 
-body.no-results p.no-themes {
+.no-results p.no-themes {
 	display: block;
 }
 
-body.show-upload-theme p.no-themes {
-	display: none !important;
-}
-
 .theme-install-php .add-new-theme {
 	display: none !important;
 }
Index: src/wp-admin/js/theme.js
===================================================================
--- src/wp-admin/js/theme.js	(revision 37335)
+++ src/wp-admin/js/theme.js	(working copy)
@@ -1606,22 +1606,17 @@
 
 	/*
 	 * When a user presses the "Upload Theme" button, show the upload form in place.
-	 * @todo consider to abstract this in a generic, reusable, utility, see plugin-install.js
 	 */
 	uploader: function() {
 		var uploadViewToggle = $( '.upload-view-toggle' ),
 			$body = $( document.body );
 
-		uploadViewToggle
-			.attr({
-				role: 'button',
-				'aria-expanded': 'false'
-			})
-			.on( 'click', function( event ) {
-				event.preventDefault();
-				$body.toggleClass( 'show-upload-view' );
-				uploadViewToggle.attr( 'aria-expanded', $body.hasClass( 'show-upload-view' ) );
-			});
+		uploadViewToggle.on( 'click', function() {
+			// Toggle the upload view.
+			$body.toggleClass( 'show-upload-view' );
+			// Toggle the `aria-expanded` button attribute.
+			uploadViewToggle.attr( 'aria-expanded', $body.hasClass( 'show-upload-view' ) );
+		});
 	},
 
 	// Toggle the full filters navigation
@@ -1675,7 +1670,6 @@
 	routes: {
 		'theme-install.php?theme=:slug': 'preview',
 		'theme-install.php?browse=:sort': 'sort',
-		'theme-install.php?upload': 'upload',
 		'theme-install.php?search=:query': 'search',
 		'theme-install.php': 'sort'
 	},
@@ -1757,11 +1751,6 @@
 			self.view.trigger( 'theme:close' );
 		});
 
-		// Support the `upload` route by going straight to upload section
-		themes.router.on( 'route:upload', function() {
-			$( 'a.upload' ).trigger( 'click' );
-		});
-
 		// The `search` route event. The router populates the input field.
 		themes.router.on( 'route:search', function() {
 			$( '.wp-filter-search' ).focus().trigger( 'keyup' );
Index: src/wp-admin/theme-install.php
===================================================================
--- src/wp-admin/theme-install.php	(revision 37335)
+++ src/wp-admin/theme-install.php	(working copy)
@@ -127,17 +127,20 @@
 	 */
 	$tabs = apply_filters( 'install_themes_tabs', array( 'upload' => __( 'Upload Theme' ) ) );
 	if ( ! empty( $tabs['upload'] ) && current_user_can( 'upload_themes' ) ) {
-		echo ' <a href="#" class="upload-view-toggle page-title-action">' . __( 'Upload Theme' ) . '</a>';
+		echo ' <button type="button" class="upload-view-toggle page-title-action hide-if-no-js" aria-expanded="false">' . __( 'Upload Theme' ) . '</button>';
 	}
 	?></h1>
+	<div class="error hide-if-js">
+		<p><?php _e( 'The Theme Installer screen requires JavaScript.' ); ?></p>
+	</div>
 
 	<div class="upload-theme">
 	<?php install_themes_upload(); ?>
 	</div>
 
-	<h2 class="screen-reader-text"><?php _e( 'Filter themes list' ); ?></h2>
+	<h2 class="screen-reader-text hide-if-no-js"><?php _e( 'Filter themes list' ); ?></h2>
 
-	<div class="wp-filter">
+	<div class="wp-filter hide-if-no-js">
 		<div class="filter-count">
 			<span class="count theme-count"></span>
 		</div>
@@ -201,7 +204,7 @@
 			</div>
 		</div>
 	</div>
-	<h2 class="screen-reader-text"><?php _e( 'Themes list' ); ?></h2>
+	<h2 class="screen-reader-text hide-if-no-js"><?php _e( 'Themes list' ); ?></h2>
 	<div class="theme-browser content-filterable"></div>
 	<div class="theme-install-overlay wp-full-overlay expanded"></div>
 
