Index: src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php
===================================================================
--- src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php	(revision 47069)
+++ src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php	(working copy)
@@ -109,17 +109,53 @@
 			$formats                           = get_theme_support( 'post-formats' );
 			$formats                           = is_array( $formats ) ? array_values( $formats[0] ) : array();
 			$formats                           = array_merge( array( 'standard' ), $formats );
-			$data['theme_supports']['formats'] = $formats;
 
-			$data['theme_supports']['post-thumbnails']   = false;
-			$data['theme_supports']['responsive-embeds'] = (bool) get_theme_support( 'responsive-embeds' );
-			$post_thumbnails                             = get_theme_support( 'post-thumbnails' );
+			$data['theme_supports']['automatic-feed-links']      			= (bool) get_theme_support( 'automatic-feed-links' );
+			$data['theme_supports']['custom-header']             			= false;
+			$data['theme_supports']['custom-logo']               			= false;
+			$data['theme_supports']['customize-selective-refresh-widgets'] 	= (bool) get_theme_support( 'customize-selective-refresh-widgets' );
+			$data['theme_supports']['disable-custom-colors']     			= (bool) get_theme_support( 'disable-custom-colors' );
+			$data['theme_supports']['disable-custom-font-sizes'] 			= (bool) get_theme_support( 'disable-custom-font-sizes' );
+			$data['theme_supports']['editor-color-palette']      			= false;
+			$data['theme_supports']['editor-font-sizes']         			= false;
+			$data['theme_supports']['formats']                   			= $formats;
+			$data['theme_supports']['html5']               		 			= false;
+			$data['theme_supports']['post-thumbnails']           			= false;
+			$data['theme_supports']['responsive-embeds']         			= (bool) get_theme_support( 'responsive-embeds' );
+			$data['theme_supports']['title-tag']				 			= (bool) get_theme_support( 'title-tag' );
+			
+			$custom_header			= get_theme_support( 'custom-header' ); 
+			$custom_logo			= get_theme_support( 'custom-logo' );
+			$html5 					= get_theme_support( 'html5' );
+			$post_thumbnails      	= get_theme_support( 'post-thumbnails' );
+			$editor_color_palette 	= get_theme_support( 'editor-color-palette' );
+			$editor_font_sizes    	= get_theme_support( 'editor-font-sizes' );
 
+			if( $custom_header ) {
+				$data['theme_supports']['custom-header'] = $custom_header[0];
+			} 
+
+			if( $custom_logo ) {
+				$data['theme_supports']['custom-logo'] = $custom_logo[0];
+			}
+
+			if( $html5 ) {
+				$data['theme_supports']['html5'] = $html5[0];
+			}
+
 			if ( $post_thumbnails ) {
 				// $post_thumbnails can contain a nested array of post types.
 				// e.g. array( array( 'post', 'page' ) ).
 				$data['theme_supports']['post-thumbnails'] = is_array( $post_thumbnails ) ? $post_thumbnails[0] : true;
 			}
+
+			if ( is_array( $editor_color_palette ) ) {
+			    $data['theme_supports']['editor-color-palette'] = $editor_color_palette[0];
+			}
+				
+			if ( is_array( $editor_font_sizes ) ) {
+				$data['theme_supports']['editor-font-sizes'] = $editor_font_sizes[0];
+			}
 		}
 
 		$data = $this->add_additional_fields_to_object( $data, $request );
@@ -161,11 +197,105 @@
 					'type'        => 'array',
 					'readonly'    => true,
 					'properties'  => array(
+						'automatic-feed-links'     => array(
+							'description' => __( 'Whether posts and comments RSS feed links are added to head.' ),
+							'type'        => 'bool',
+							'readonly'    => true,
+						),
+						'custom-header'     => array(
+							'description' => __( 'Custom header if defined by the theme.' ),
+							'type'        => array( 'array', 'bool' ),
+							'items'       => [
+								'type'       => 'object',
+								'properties' => array(
+									'default-image'          => '',
+									'random-default'         => 'bool',
+									'width'                  => 'number',
+									'height'                 => 'number',
+									'flex-height'            => 'bool',
+									'flex-width'             => 'bool',
+									'default-text-color'     => 'string',
+									'header-text'            => 'bool',
+									'uploads'                => 'bool',
+									'wp-head-callback'       => 'string',
+									'admin-head-callback'    => 'string',
+									'admin-preview-callback' => 'string',
+									'video'                  => 'bool',
+									'video-active-callback'  => 'string',
+								),
+							],
+							'readonly'    => true,
+						),
+						'custom-logo'     => array(
+							'description' => __( 'Custom logo if defined by the theme.' ),
+							'type'        => array( 'array', 'bool' ),
+							'items'       => [
+								'type'       => 'object',
+								'properties' => array(
+									'width'  => 'number',
+									'height'  => 'number',
+									'flex-width' => 'bool',
+									'flex-height' => 'bool',
+									'header-text' => 'array',
+								),
+							],
+							'readonly'    => true,
+						),
+						'customize-selective-refresh-widgets'     => array(
+							'description' => __( 'Whether the theme enables Selective Refresh for Widgets being managed with the Customizer.' ),
+							'type'        => 'bool',
+							'readonly'    => true,
+						),
+						'disable-custom-colors'     => array(
+								'description' => __( 'Whether the theme disables custom colors.' ),
+								'type'        => 'bool',
+								'readonly'    => true,
+						),
+						'disable-custom-font-sizes' => array(
+								'description' => __( 'Whether the theme disables custom font sizes.' ),
+								'type'        => 'bool',
+								'readonly'    => true,
+						),
+						'editor-color-palette'      => array(
+								'description' => __( 'Custom color palette if defined by the theme.' ),
+								'type'        => array( 'array', 'bool' ),
+								'items'       => [
+										'type'       => 'object',
+										'properties' => array(
+												'name'  => 'string',
+												'slug'  => 'string',
+												'color' => 'string',
+										),
+								],
+								'readonly'    => true,
+						),
+						'editor-font-sizes'         => array(
+								'description' => __( 'Custom font sizes if defined by the theme.' ),
+								'type'        => array( 'array', 'bool' ),
+								'items'       => array(
+										'type'       => 'object',
+										'properties' => array(
+												'name' => 'string',
+												'size' => 'number',
+												'slug' => 'string',
+										),
+								),
+								'readonly'    => true,
+						),
 						'formats'           => array(
 							'description' => __( 'Post formats supported.' ),
 							'type'        => 'array',
 							'readonly'    => true,
 						),
+						'html5'     => array(
+							'description' => __( 'Allows use of html5 markup for search forms, comment forms, comment lists, gallery, and caption.' ),
+							'type'        => array( 'array', 'bool' ),
+							'items'       => [
+								'type'       => 'array',
+								'properties' => array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption', 'script', 'style' ),
+							],
+							'readonly'    => true,
+						),
 						'post-thumbnails'   => array(
 							'description' => __( 'Whether the theme supports post thumbnails.' ),
 							'type'        => array( 'array', 'bool' ),
@@ -176,6 +306,11 @@
 							'type'        => 'bool',
 							'readonly'    => true,
 						),
+						'title-tag' => array(
+							'description' => __( 'Whether the theme can manage the document title tag.' ),
+							'type'        => 'bool',
+							'readonly'    => true,
+						),
 					),
 				),
 			),
Index: tests/phpunit/tests/rest-api/rest-themes-controller.php
===================================================================
--- tests/phpunit/tests/rest-api/rest-themes-controller.php	(revision 47069)
+++ tests/phpunit/tests/rest-api/rest-themes-controller.php	(working copy)
@@ -188,14 +188,346 @@
 		$properties = $data['schema']['properties'];
 		$this->assertEquals( 1, count( $properties ) );
 		$this->assertArrayHasKey( 'theme_supports', $properties );
-
-		$this->assertEquals( 3, count( $properties['theme_supports']['properties'] ) );
+		$this->assertEquals( 13, count( $properties['theme_supports']['properties'] ) );
+		$this->assertArrayHasKey( 'automatic-feed-links', $properties['theme_supports']['properties'] );
+		$this->assertArrayHasKey( 'custom-header', $properties['theme_supports']['properties'] );
+		$this->assertArrayHasKey( 'custom-logo', $properties['theme_supports']['properties'] );
+		$this->assertArrayHasKey( 'customize-selective-refresh-widgets', $properties['theme_supports']['properties'] );
+ 	    $this->assertArrayHasKey( 'disable-custom-colors', $properties['theme_supports']['properties'] );
+ 	    $this->assertArrayHasKey( 'disable-custom-font-sizes', $properties['theme_supports']['properties'] );
+ 	    $this->assertArrayHasKey( 'editor-color-palette', $properties['theme_supports']['properties'] );
+ 	    $this->assertArrayHasKey( 'editor-font-sizes', $properties['theme_supports']['properties'] );
 		$this->assertArrayHasKey( 'formats', $properties['theme_supports']['properties'] );
+		$this->assertArrayHasKey( 'html5', $properties['theme_supports']['properties'] );
 		$this->assertArrayHasKey( 'post-thumbnails', $properties['theme_supports']['properties'] );
 		$this->assertArrayHasKey( 'responsive-embeds', $properties['theme_supports']['properties'] );
+		$this->assertArrayHasKey( 'title-tag', $properties['theme_supports']['properties'] );
 	}
 
 	/**
+	 * Test when a theme does not disable custom colors.
+	 *
+	 * @ticket 48798
+	 */
+	public function test_theme_supports_disable_custom_colors_false() {
+		remove_theme_support( 'disable-custom-colors' );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( isset( $result[0]['theme_supports']['disable-custom-colors'] ) );
+		$this->assertFalse( $result[0]['theme_supports']['disable-custom-colors'] );
+	}
+
+	/**
+	 * Test when a theme disables custom colors.
+	 *
+	 * @ticket 48798
+	 */
+	public function test_theme_supports_disable_custom_colors_true() {
+		remove_theme_support( 'disable-custom-colors' );
+		add_theme_support( 'disable-custom-colors' );
+		$response = self::perform_active_theme_request();
+		$result   = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( $result[0]['theme_supports']['disable-custom-colors'] );
+	}
+
+	/**
+	 * Test when a theme does not disable custom font sizes.
+	 *
+	 * @ticket 48798
+	 */
+	public function test_theme_supports_disable_custom_font_sizes_false() {
+		remove_theme_support( 'disable-custom-font-sizes' );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( isset( $result[0]['theme_supports']['disable-custom-font-sizes'] ) );
+		$this->assertFalse( $result[0]['theme_supports']['disable-custom-font-sizes'] );
+	}
+
+	/**
+	 * Test when a theme disables custom font sizes.
+	 *
+	 * @ticket 48798
+	 */
+	public function test_theme_supports_disable_custom_font_sizes_true() {
+		remove_theme_support( 'disable-custom-font-sizes' );
+		add_theme_support( 'disable-custom-font-sizes' );
+		$response = self::perform_active_theme_request();
+		$result   = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( $result[0]['theme_supports']['disable-custom-font-sizes'] );
+	}
+
+	/**
+	 * Test when a theme doesn't support custom font sizes.
+	 *
+	 * @ticket 48798
+	 */
+	public function test_theme_supports_editor_font_sizes_false() {
+		remove_theme_support( 'editor-font-sizes' );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( isset( $result[0]['theme_supports']['editor-font-sizes'] ) );
+		$this->assertFalse( $result[0]['theme_supports']['editor-font-sizes'] );
+	}
+
+	/**
+	 * Test when a theme supports custom font sizes.
+	 *
+	 * @ticket 48798
+	 */
+	public function test_theme_supports_editor_font_sizes_array() {
+		remove_theme_support( 'editor-font-sizes' );
+		$tiny = array(
+				'name' => 'Tiny',
+				'size' => 8,
+				'slug' => 'tiny',
+		);
+		add_theme_support( 'editor-font-sizes', array( $tiny ) );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertEquals( array( $tiny ), $result[0]['theme_supports']['editor-font-sizes'] );
+	}
+
+	/**
+	 * Test when a theme doesn't support a custom color palette.
+	 *
+	 * @ticket 48798
+	 */
+	public function test_theme_supports_editor_color_palette_false() {
+		remove_theme_support( 'editor-color-palette' );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( isset( $result[0]['theme_supports']['editor-color-palette'] ) );
+		$this->assertFalse( $result[0]['theme_supports']['editor-color-palette'] );
+	}
+
+	/**
+	 * Test when a theme supports a custom color palette.
+	 *
+	 * @ticket 48798
+	 */
+	public function test_theme_supports_editor_color_palette_array() {
+		remove_theme_support( 'editor-color-palette' );
+		$wordpress_blue = array(
+				'name'  => 'WordPress Blue',
+				'slug'  => 'wordpress-blue',
+				'color' => '#0073AA',
+		);
+		add_theme_support( 'editor-color-palette', array( $wordpress_blue ) );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertEquals( array( $wordpress_blue), $result[0]['theme_supports']['editor-color-palette'] );
+	}
+
+	/**
+	 * Test when a theme enables automatic feed links.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_supports_enable_automatic_feed_links() {
+		remove_theme_support( 'automatic-feed-links' );
+		add_theme_support( 'automatic-feed-links' );
+		$response = self::perform_active_theme_request();
+		$result   = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( $result[0]['theme_supports']['automatic-feed-links'] );
+	}
+
+	/**
+	 * Test when a theme does not enable automatic feed links.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_supports_does_not_enable_automatic_feed_links() {
+		remove_theme_support( 'automatic-feed-links' );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( isset( $result[0]['theme_supports']['automatic-feed-links'] ) );
+		$this->assertFalse( $result[0]['theme_supports']['automatic-feed-links'] );
+	}
+
+	/**
+	 * Test when a theme doesn't support a custom logo.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_does_not_support_custom_logo() {
+		remove_theme_support( 'custom-logo' );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( isset( $result[0]['theme_supports']['custom-logo'] ) );
+		$this->assertFalse( $result[0]['theme_supports']['custom-logo'] );
+	}
+
+	/**
+	 * Test when a theme supports a custom logo.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_supports_custom_logo() {
+		remove_theme_support( 'custom-logo' );
+		$wordpress_logo = array(
+				'height'  => 100,
+				'width'  => 400,
+				'flex-height' => true,
+				'flex-width' => true,
+				'header-text' => array( 'site-title', 'site-description' ), 
+		);
+		add_theme_support( 'custom-logo', $wordpress_logo );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertEquals( $wordpress_logo, $result[0]['theme_supports']['custom-logo'] );
+	}
+
+	/**
+	 * Test when a theme doesn't support a custom header.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_does_not_support_custom_header() {
+		remove_theme_support( 'custom-header' );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( isset( $result[0]['theme_supports']['custom-header'] ) );
+		$this->assertFalse( $result[0]['theme_supports']['custom-header'] );
+	}
+
+	/**
+	 * Test when a theme supports a custom header.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_supports_custom_header() {
+		remove_theme_support( 'custom-header' );
+		$wordpress_header = array(
+			'default-image'          => '',
+			'random-default'         => false,
+			'width'                  => 0,
+			'height'                 => 0,
+			'flex-height'            => false,
+			'flex-width'             => false,
+			'default-text-color'     => '',
+			'header-text'            => true,
+			'uploads'                => true,
+			'wp-head-callback'       => '',
+			'admin-head-callback'    => '',
+			'admin-preview-callback' => '',
+			'video'                  => false,
+			'video-active-callback'  => 'is_front_page',
+		);
+		add_theme_support( 'custom-header', $wordpress_header );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertEquals( $wordpress_header, $result[0]['theme_supports']['custom-header'] );
+	}
+
+	/**
+	 * Test when a theme doesn't support html5 markup.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_does_not_support_html5() {
+		remove_theme_support( 'html5' );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( isset( $result[0]['theme_supports']['html5'] ) );
+		$this->assertFalse( $result[0]['theme_supports']['html5'] );
+	}
+
+	/**
+	 * Test when a theme supports html5 markup.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_supports_html5() {
+		remove_theme_support( 'html5' );
+		$html5 = array(
+			'search-form',
+			'comment-form',
+			'comment-list',
+			'gallery',
+			'caption',
+			'script',
+			'style',
+		);
+		add_theme_support( 'html5', $html5 );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertEquals( $html5, $result[0]['theme_supports']['html5'] );
+	}
+
+	/**
+	 * Test when a theme cannot manage title tag.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_cannot_manage_title_tag() {
+		remove_theme_support( 'title-tag' );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( isset( $result[0]['theme_supports']['title-tag'] ) );
+		$this->assertFalse( $result[0]['theme_supports']['title-tag'] );
+	}
+
+	/**
+	 * Test when a theme can mange title tag.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_can_manage_title_tag() {
+		remove_theme_support( 'title-tag' );
+		add_theme_support( 'title-tag' );
+		$response = self::perform_active_theme_request();
+		$result   = $response->get_data();
+		global $_wp_theme_features;
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( $result[0]['theme_supports']['title-tag'] );
+	}
+
+	/**
+	 * Test when a theme cannot manage Selective Refresh for Widgets.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_cannot_manage_selective_refresh_for_widgets() {
+		remove_theme_support( 'customize-selective-refresh-widgets' );
+		$response = self::perform_active_theme_request();
+		$result = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( isset( $result[0]['theme_supports']['customize-selective-refresh-widgets'] ) );
+		$this->assertFalse( $result[0]['theme_supports']['customize-selective-refresh-widgets'] );
+	}
+
+	/**
+	 * Test when a theme can mange Selective Refresh for Widgets.
+	 *
+	 * @ticket 49037
+	 */
+	public function test_theme_can_manage_selective_refresh_for_widgets() {
+		remove_theme_support( 'customize-selective-refresh-widgets' );
+		add_theme_support( 'customize-selective-refresh-widgets' );
+		$response = self::perform_active_theme_request();
+		$result   = $response->get_data();
+		$this->assertTrue( isset( $result[0]['theme_supports'] ) );
+		$this->assertTrue( $result[0]['theme_supports']['customize-selective-refresh-widgets'] );
+	}
+
+	/**
 	 * Should include relevant data in the 'theme_supports' key.
 	 *
 	 * @ticket 45016
