You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@guacamole.apache.org by vn...@apache.org on 2017/09/04 01:10:57 UTC

[3/4] incubator-guacamole-client git commit: GUACAMOLE-128: Do not allow overlapping clipboard read attempts.

GUACAMOLE-128: Do not allow overlapping clipboard read attempts.


Project: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/commit/75a575d0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/tree/75a575d0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/diff/75a575d0

Branch: refs/heads/master
Commit: 75a575d050abcca8c8dec98df39ee0b3bb322dea
Parents: ab88eb2
Author: Michael Jumper <mj...@apache.org>
Authored: Sun Sep 3 16:07:21 2017 -0700
Committer: Michael Jumper <mj...@apache.org>
Committed: Sun Sep 3 18:02:46 2017 -0700

----------------------------------------------------------------------
 .../app/clipboard/services/clipboardService.js   | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/75a575d0/guacamole/src/main/webapp/app/clipboard/services/clipboardService.js
----------------------------------------------------------------------
diff --git a/guacamole/src/main/webapp/app/clipboard/services/clipboardService.js b/guacamole/src/main/webapp/app/clipboard/services/clipboardService.js
index 07091f3..939161e 100644
--- a/guacamole/src/main/webapp/app/clipboard/services/clipboardService.js
+++ b/guacamole/src/main/webapp/app/clipboard/services/clipboardService.js
@@ -45,6 +45,14 @@ angular.module('clipboard').factory('clipboardService', ['$injector',
     var CLIPBOARD_READ_DELAY = 100;
 
     /**
+     * The promise associated with the current pending clipboard read attempt.
+     * If no clipboard read is active, this will be null.
+     *
+     * @type Promise.<ClipboardData>
+     */
+    var pendingRead = null;
+
+    /**
      * Reference to the window.document object.
      *
      * @private
@@ -398,8 +406,16 @@ angular.module('clipboard').factory('clipboardService', ['$injector',
      */
     service.getLocalClipboard = function getLocalClipboard() {
 
+        // If the clipboard is already being read, do not overlap the read
+        // attempts; instead share the result across all requests
+        if (pendingRead)
+            return pendingRead;
+
         var deferred = $q.defer();
 
+        // Mark read attempt as in progress
+        pendingRead = deferred.promise;
+
         // Wait for the next event queue run before attempting to read
         // clipboard data (in case the copy/cut has not yet completed)
         $window.setTimeout(function deferredClipboardRead() {
@@ -467,6 +483,9 @@ angular.module('clipboard').factory('clipboardService', ['$injector',
                 originalElement.focus();
                 popSelection();
 
+                // No read is pending any longer
+                pendingRead = null;
+
             });
 
             // Ensure clipboard element is blurred (and that the "focus" event