Some browsers suffer from a memory leak when reading image data
repeatedly using the Image object. Reading from Blobs does not exhibit
the same behavior. While reading from Blobs has previously been seen to
perform poorly compared to data URIs, this was observed when reading
using createObjectURL(). The createImageBitmap() function appears to
perform identically to reading data URIs using Image.
As described in the discussion surrounding the original pull request:
* An extension throws `GuacamoleInsufficientCredentialsException`
specifically to indicate tentative acceptance of the credentials
passed thus far.
* Just as such an extension that fully accepts credentials takes
priority over an extension that refuses to accept the same, it makes
sense to allow an extension that *tentatively* accepts those credentials
to also take priority.
With the above perspective, authentication result priorities are as
follows, with ties broken by the inherent order of the auth providers:
1. Acceptance (returning an `AuthenticedUser` instance).
2. Tentative acceptance (throwing
`GuacamoleInvalidCredentialsException`).
3. Complete refusal (any other subclass of
`GuacamoleCredentialsException`).
4. Neither refusal nor acceptance (returning `null`).
See: https://github.com/apache/guacamole-client/pull/352
Creating a new injector re-initializes services and providers within
its modules. If those services or providers rely on being singletons
(as colorPickerService does), this produces unexpected behavior.
Enclosing the entire field within the <label> results in problems when
the field is large and when the field contains multiple interactive
elements. Clicking within interactive elements of a complex field
triggers the <label>, refocusing the first input element. If the field
is large, the <label> will contain empty space which also refocuses the
input field upon being clicked, despite appearing to be the background
of the page.
$evalAsync() does not necessarily guarantee execution within a timer;
the provided function may well execute after the current $digest loop
without control returning to the browser. If we need a timer to ensure
focus() behaves reliably, we should explicitly use one via $timeout.
Additionally reporting whether the affected element receives or loses focus causes trouble if the source of the original value is non-assignable. It also seems like it could cause unexpected side effects if usages of guacFocus expect to separate their intent (assigning a value via the expression watched by guacFocus) from the result of attempting to set/remove focus. If tracking of focus is needed, that would best be served by another directive dedicated solely to tracking.
Commit f92bf9c moved the getClientIdentifier() function to the
GroupListItem class, thus making the function available as
item.getClientIdentifier() within the connection or connection group
templates referenced by an instance of the guacGroupList directive.
This change correctly updated all but the connection group template for
the home screen, which was incorrectly updated to reference the
function as if it were directly on the scope. As such a function
doesn't exist, AngularJS didn't substitute any value, resulting in a
non-functional link.
Checking `timezone != null & !timezone.isEmpty()` will result in a
`NullPointerException` when `timezone` is null, as the `&` ensures
`timezone.isEmpty()` will run in all cases.
Parameter tokens are intended to be interpreted by the connections
stored within LDAP. This was previously done through explicitly using a
TokenFilter and the StandardTokens class, however usage of
StandardTokens is now deprecated and the values of tokens to be applied
are now expected to be received through connect(). Usage of
StandardTokens was removed from LDAP with commit 1210d56, but this is
insufficient. An additional parameter must also be provided to the
SimpleConnection constructor to enable its automatic token handling
behavior.
Internet Explorer 11 interprets the "disabled" attribute on all HTML
elements, even unknown elements like AngularJS directives, disabling any
input fields that end up on the DOM tree within those elements. This
breaks the login form.
The alternative "data-disabled" attribute form supported by AngularJS
allows things to work without interference.
Placing the fade animation on the login dialog (which also handles the
error shake-head animation) results in the dialog fading in each time
the login process changes state. It really should only fade when the
overall login interface initially appears.
IE 11 appears to ignore the `Cache-Control` header on requests despite
RFC 7234 and does not invalidate cache after changes are made to a
resource via PUT/DELETE/POST despite RFC 2616. It _does_ behave
correctly when the `Pragma` header is included.
This behavior is not observed for Chrome/Firefox which both correctly
honor the `Cache-Control` header and correctly invalidate cache after
changes.
While this query is generally functioning as described above for all
supported databases, it is not functioning properly for the
non-recursive variant of the MySQL/MariaDB query. This change corrects
that behavior.