GUACAMOLE-884: Merge Leverage createImageBitmap() for reading image data where supported

diff --git a/extensions/guacamole-auth-ldap/schema/guacConfigGroup.schema b/extensions/guacamole-auth-ldap/schema/guacConfigGroup.schema
index eff1766..129a41b 100644
--- a/extensions/guacamole-auth-ldap/schema/guacConfigGroup.schema
+++ b/extensions/guacamole-auth-ldap/schema/guacConfigGroup.schema
@@ -26,6 +26,6 @@
 objectClass ( 1.3.6.1.4.1.38971.1.2.1 NAME 'guacConfigGroup'
     DESC 'Guacamole configuration group'
     SUP groupOfNames
-    MUST protocol
-    MAY parameter )
+    MUST guacConfigProtocol
+    MAY guacConfigParameter )
 
diff --git a/guacamole/src/main/webapp/app/index/controllers/indexController.js b/guacamole/src/main/webapp/app/index/controllers/indexController.js
index 15e7819..ac2fec4 100644
--- a/guacamole/src/main/webapp/app/index/controllers/indexController.js
+++ b/guacamole/src/main/webapp/app/index/controllers/indexController.js
@@ -138,6 +138,12 @@
         keyboard.reset();
     };
 
+    // Release all keys upon form submission (there may not be corresponding
+    // keyup events for key presses involved in submitting a form)
+    $document.on('submit', function formSubmitted() {
+        keyboard.reset();
+    });
+
     /**
      * Checks whether the clipboard data has changed, firing a new
      * "guacClipboard" event if it has.
@@ -188,6 +194,11 @@
         $scope.fatalError = error;
     });
 
+    // Ensure new pages always start with clear keyboard state
+    $scope.$on('$routeChangeStart', function routeChanging() {
+        keyboard.reset();
+    });
+
     // Update title and CSS class upon navigation
     $scope.$on('$routeChangeSuccess', function(event, current, previous) {