From 99bc5e7fb66471da9638848277a26c553879b373 Mon Sep 17 00:00:00 2001
From: Ella Iseulde Van Dorpe <iseulde@git.wordpress.org>
Date: Sun, 28 Aug 2016 18:28:52 +0000
Subject: [PATCH] Editor: Use Beacon API over sync request

See https://www.w3.org/TR/beacon/ for more information.



git-svn-id: https://develop.svn.wordpress.org/trunk@38425 602fd350-edb4-49c9-b593-d223f7449a82
---
 src/wp-admin/js/post.js | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/src/wp-admin/js/post.js b/src/wp-admin/js/post.js
index 1ead4bed1c..5ca772b963 100644
--- a/src/wp-admin/js/post.js
+++ b/src/wp-admin/js/post.js
@@ -407,16 +407,31 @@ jQuery(document).ready( function($) {
 			return;
 		}
 
-		$.ajax({
-			type: 'POST',
-			url: ajaxurl,
-			async: false,
-			data: {
-				action: 'wp-remove-post-lock',
-				_wpnonce: $('#_wpnonce').val(),
-				post_ID: $('#post_ID').val(),
-				active_post_lock: $('#active_post_lock').val()
+		var data = {
+			action: 'wp-remove-post-lock',
+			_wpnonce: $('#_wpnonce').val(),
+			post_ID: $('#post_ID').val(),
+			active_post_lock: $('#active_post_lock').val()
+		};
+
+		if (window.FormData && window.navigator.sendBeacon) {
+			var formData = new window.FormData();
+
+			$.each(data, function(key, value) {
+				formData.append(key, value);
+			});
+
+			if (window.navigator.sendBeacon(ajaxurl, formData)) {
+				return;
 			}
+		}
+
+		// Fall back to a synchronous POST request.
+		// See https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon
+		$.post({
+			async: false,
+			data: data,
+			url: ajaxurl
 		});
 	});