diff --git a/wp-includes/formatting.php b/wp-includes/formatting.php
index 556c264bfe..3216363156 100644
--- a/wp-includes/formatting.php
+++ b/wp-includes/formatting.php
@@ -5012,7 +5012,7 @@ function _print_emoji_detection_script() {
*
* @param string The emoji base URL for png images.
*/
- 'baseUrl' => apply_filters( 'emoji_url', 'https://s.w.org/images/core/emoji/2.2.1/72x72/' ),
+ 'baseUrl' => apply_filters( 'emoji_url', 'https://s.w.org/images/core/emoji/2.2.5/72x72/' ),
/**
* Filters the extension of the emoji png files.
@@ -5030,7 +5030,7 @@ function _print_emoji_detection_script() {
*
* @param string The emoji base URL for svg images.
*/
- 'svgUrl' => apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2.2.1/svg/' ),
+ 'svgUrl' => apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2.2.5/svg/' ),
/**
* Filters the extension of the emoji SVG files.
@@ -5077,7 +5077,7 @@ function _print_emoji_detection_script() {
?>
$urls ) {
$unique_urls = array();
diff --git a/wp-includes/js/wp-emoji-loader.js b/wp-includes/js/wp-emoji-loader.js
index 236415c162..9c5043f499 100644
--- a/wp-includes/js/wp-emoji-loader.js
+++ b/wp-includes/js/wp-emoji-loader.js
@@ -19,7 +19,7 @@
*/
function browserSupportsEmoji( type ) {
var stringFromCharCode = String.fromCharCode,
- flag, flag2, technologist, technologist2;
+ flag, flag2, emoji41, emoji42;
if ( ! context || ! context.fillText ) {
return false;
@@ -79,6 +79,26 @@
return flag !== flag2;
case 'emoji4':
+ /*
+ * Emoji 4 support was implemented gradually, multiple tests are used to
+ * confirm support.
+ *
+ * In this test we try rendering man shrugging, light skin tone and compare
+ * it to how it would look if the browser does not render it correctly
+ * (person shrugging: light skin town + male sign).
+ */
+ context.fillText( stringFromCharCode( 55358, 56631, 55356, 57339, 8205, 9794, 65039 ), 0, 0 );
+ emoji41 = canvas.toDataURL();
+
+ context.clearRect( 0, 0, canvas.width, canvas.height );
+
+ context.fillText( stringFromCharCode( 55358, 56631, 55356, 57339, 9794, 65039 ), 0, 0 );
+ emoji42 = canvas.toDataURL();
+
+ if ( emoji41 !== emoji42 ) {
+ return false;
+ }
+
/*
* Emoji 4 has the best technologists. So does WordPress!
*
@@ -86,15 +106,18 @@
* then compare it to how it would look if the browser doesn't render it correctly
* (woman technologist: medium skin tone + personal computer).
*/
+ // Cleanup from previous test.
+ context.clearRect( 0, 0, canvas.width, canvas.height );
+
context.fillText( stringFromCharCode( 55357, 56425, 55356, 57341, 8205, 55357, 56507), 0, 0 );
- technologist = canvas.toDataURL();
+ emoji41 = canvas.toDataURL();
context.clearRect( 0, 0, canvas.width, canvas.height );
context.fillText( stringFromCharCode( 55357, 56425, 55356, 57341, 55357, 56507), 0, 0 );
- technologist2 = canvas.toDataURL();
+ emoji42 = canvas.toDataURL();
- return technologist !== technologist2;
+ return emoji41 !== emoji42;
}
return false;
diff --git a/wp-includes/js/wp-emoji-loader.min.js b/wp-includes/js/wp-emoji-loader.min.js
index 7a3312b821..ebc28c35e7 100644
--- a/wp-includes/js/wp-emoji-loader.min.js
+++ b/wp-includes/js/wp-emoji-loader.min.js
@@ -1 +1 @@
-!function(a,b,c){function d(a){var b,c,d,e,f=String.fromCharCode;if(!k||!k.fillText)return!1;switch(k.clearRect(0,0,j.width,j.height),k.textBaseline="top",k.font="600 32px Arial",a){case"flag":return k.fillText(f(55356,56826,55356,56819),0,0),b=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57331,8203,55356,57096),0,0),c=j.toDataURL(),b===c&&(k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57331,65039,8205,55356,57096),0,0),b=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57331,55356,57096),0,0),c=j.toDataURL(),b!==c);case"emoji4":return k.fillText(f(55357,56425,55356,57341,8205,55357,56507),0,0),d=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55357,56425,55356,57341,55357,56507),0,0),e=j.toDataURL(),d!==e}return!1}function e(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var f,g,h,i,j=b.createElement("canvas"),k=j.getContext&&j.getContext("2d");for(i=Array("flag","emoji4"),c.supports={everything:!0,everythingExceptFlag:!0},h=0;h