Index: src/js/_enqueues/admin/privacy-tools.js
===================================================================
--- src/js/_enqueues/admin/privacy-tools.js	(revision 47038)
+++ src/js/_enqueues/admin/privacy-tools.js	(working copy)
@@ -4,9 +4,15 @@
  * @output wp-admin/js/privacy-tools.js
  */
 
+/* global ClipboardJS, wp */
+
 // Privacy request action handling
 jQuery( document ).ready( function( $ ) {
+
+	var __ = wp.i18n.__;
+
 	var strings = window.privacyToolsL10n || {};
+	var clipboard = new ClipboardJS( '.privacy-text-copy-button' );
 
 	function setActionState( $action, state ) {
 		$action.children().addClass( 'hidden' );
@@ -230,34 +236,12 @@
 		doNextErasure( 1, 1 );
 	});
 
-	// Privacy policy page, copy button.
-	$( document ).on( 'click', function( event ) {
-		var $target = $( event.target );
-		var $parent, $container, range;
-
-		if ( $target.is( 'button.privacy-text-copy' ) ) {
-			$parent = $target.parent().parent();
-			$container = $parent.find( 'div.wp-suggested-text' );
-
-			if ( ! $container.length ) {
-				$container = $parent.find( 'div.policy-text' );
-			}
+	// Copy 'Suggested Privacy' section.
+	clipboard.on( 'success', function( e ) {
+		var $wrapper = $( e.trigger ).closest( 'div' );
+		$( '.success', $wrapper ).addClass( 'visible' );
 
-			if ( $container.length ) {
-				try {
-					window.getSelection().removeAllRanges();
-					range = document.createRange();
-					$container.addClass( 'hide-privacy-policy-tutorial' );
-
-					range.selectNodeContents( $container[0] );
-					window.getSelection().addRange( range );
-					document.execCommand( 'copy' );
-
-					$container.removeClass( 'hide-privacy-policy-tutorial' );
-					window.getSelection().removeAllRanges();
-				} catch ( er ) {}
-			}
-		}
-	});
+		wp.a11y.speak( __( 'Privacy Content has been added to your clipboard.' ) );
+	} );
 });
 
Index: src/wp-admin/css/edit.css
===================================================================
--- src/wp-admin/css/edit.css	(revision 47038)
+++ src/wp-admin/css/edit.css	(working copy)
@@ -688,7 +688,7 @@
 	margin: 1em 0 0.5em;
 }
 
-.privacy-text-section .privacy-text-copy {
+.privacy-text-section .privacy-text-copy-button {
 	float: right;
 }
 
@@ -714,6 +714,16 @@
 	padding-bottom: 6px;
 }
 
+.privacy-text-actions .success {
+	display: none;
+	color: #40860a;
+}
+
+.privacy-text-actions .success.visible {
+	display: inline-block;
+	height: 32px;
+}
+
 .wp-privacy-policy-guide .policy-text h2 {
 	margin: 1.2em 0 1em;
 	padding: 0;
Index: src/wp-admin/includes/class-wp-privacy-policy-content.php
===================================================================
--- src/wp-admin/includes/class-wp-privacy-policy-content.php	(revision 47038)
+++ src/wp-admin/includes/class-wp-privacy-policy-content.php	(working copy)
@@ -372,11 +372,12 @@
 
 		$content_array = self::get_suggested_policy_text();
 
-		$content       = '';
-		$toc           = array( '<li><a href="#wp-privacy-policy-guide-introduction">' . __( 'Introduction' ) . '</a></li>' );
-		$date_format   = __( 'F j, Y' );
-		$copy          = __( 'Copy this section to clipboard' );
-		$return_to_top = '<a href="#" class="return-to-top">' . __( '&uarr; Return to Top' ) . '</a>';
+		$content       		= '';
+		$toc           		= array( '<li><a href="#wp-privacy-policy-guide-introduction">' . __( 'Introduction' ) . '</a></li>' );
+		$date_format   		= __( 'F j, Y' );
+		$copy          		= __( 'Copy this section to clipboard' );
+		$return_to_top		= '<a href="#" class="return-to-top">' . __( '&uarr; Return to Top' ) . '</a>';
+		$on_copy_success	= __( 'Copied!' );
 
 		foreach ( $content_array as $section ) {
 			$class   = '';
@@ -417,15 +418,20 @@
 			$content .= $return_to_top;
 
 			if ( empty( $section['removed'] ) ) {
-				$content         .= '<div class="privacy-text-actions">';
-					$content     .= '<button type="button" class="privacy-text-copy button">';
-						$content .= $copy;
-						$content .= '<span class="screen-reader-text">';
+				$content			.= '<div class="privacy-text-actions">';
+					$content    	.= sprintf( '<button type="button" class="privacy-text-copy-button button" data-clipboard-text="%1$s">', esc_attr( self::get_default_content( false, false ) ) );
+					$content 		.= $copy;
+						$content	.= '<span class="screen-reader-text">';
 						/* translators: %s: Plugin name. */
-						$content .= sprintf( __( 'Copy suggested policy text from %s.' ), $plugin_name );
-						$content .= '</span>';
-					$content     .= '</button>';
-				$content         .= '</div>';
+						$content	.= sprintf( __( 'Copy suggested policy text from %s.' ), $plugin_name );
+						$content	.= '</span>';
+					$content    	.= '</button>';
+					
+					/* on Copy success feedback */
+					$content		.= '<span class="success" aria-hidden="true">';
+					$content		.= $on_copy_success;
+					$content		.= '</span>';
+				$content			.= '</div>';
 			}
 
 			$content .= "</div>\n"; // End of .privacy-text-section.
Index: src/wp-includes/script-loader.php
===================================================================
--- src/wp-includes/script-loader.php	(revision 47038)
+++ src/wp-includes/script-loader.php	(working copy)
@@ -1468,7 +1468,7 @@
 		$scripts->add( 'site-health', "/wp-admin/js/site-health$suffix.js", array( 'clipboard', 'jquery', 'wp-util', 'wp-a11y', 'wp-i18n' ), false, 1 );
 		$scripts->set_translations( 'site-health' );
 
-		$scripts->add( 'privacy-tools', "/wp-admin/js/privacy-tools$suffix.js", array( 'jquery' ), false, 1 );
+		$scripts->add( 'privacy-tools', "/wp-admin/js/privacy-tools$suffix.js", array( 'clipboard', 'jquery', 'wp-a11y', 'wp-i18n' ), false, 1 );
 		did_action( 'init' ) && $scripts->localize(
 			'privacy-tools',
 			'privacyToolsL10n',
