Bug 5779 - Local cursor doesn't work in IE/Edge or on touch devices
Summary: Local cursor doesn't work in IE/Edge or on touch devices
Status: CLOSED FIXED
Alias: None
Product: ThinLinc
Classification: Unclassified
Component: Web Access (show other bugs)
Version: pre-1.0
Hardware: PC Unknown
: P2 Normal
Target Milestone: 4.11.0
Assignee: Niko Lehto
URL:
Keywords: ossman_tester, relnotes, upstream
Depends on: 7365
Blocks: 6349
  Show dependency treegraph
 
Reported: 2016-01-25 17:29 CET by Samuel Mannehed
Modified: 2019-10-24 10:10 CEST (History)
2 users (show)

See Also:
Acceptance Criteria:


Attachments

Description Samuel Mannehed cendio 2016-01-25 17:29:24 CET
Normally we use a data uri to give the canvas a custom cursor. However, this isn't supported in any version of Internet Explorer or Microsoft Edge. This results in a forced server side cursor (see bug 5148).

We should investigate other ways of providing a local cursor in the HTML5 client for IE and Edge.
Comment 1 Samuel Mannehed cendio 2016-01-25 17:32:54 CET
http://caniuse.com/#feat=datauri
Comment 2 Samuel Mannehed cendio 2016-01-25 18:05:51 CET
We currently use the style cursor property, which supports a URI value in all browsers except for Edge, according to this:

http://caniuse.com/#search=cursor

The problem is that the cursor sent from the server is stored in a Data URI, which isn't supported. Could we perhaps try to, from the server, present the url of the cursor?
Comment 3 Samuel Mannehed cendio 2016-01-25 18:09:44 CET
Upstream bug: https://github.com/kanaka/noVNC/issues/572
Comment 4 Samuel Mannehed cendio 2016-01-26 10:02:27 CET
From upstream:
> Here is another couple of relevant links:
>
> https://msdn.microsoft.com/en-us/library/aa358795(v=vs.85).asp 
> http://stackoverflow.com/questions/2636068/hide-cursor-in-chrome-and-ie
>
> Unfortunately, it doesn't seem that IE/Edge are going to support either data
> URIs or the "none" option to hide the cursor. One option we could explore is
> the PointerLock API which would allow us to hide the cursor and then render our
> own directly in the canvas. However the downside is that the captures the
> pointer inside the canvas and it requires user permission.
>
> Probably the best option that would work everywhere (all browsers and older
> versions too) would be to change the cursor to a blank cursor file and then
> directly render the mouse in the canvas. It's not as nice as just having the
> browser to the work of rendering the cursor for us, but it's the best option I
> can think of for supporting this widely if we think it's important.
Comment 5 Samuel Mannehed cendio 2019-04-17 12:24:47 CEST
This also applies to touch devices.
Comment 7 Samuel Mannehed cendio 2019-04-17 12:26:25 CEST
Now fixed upstream in noVNC.
Comment 9 Niko Lehto cendio 2019-10-10 13:03:53 CEST
Tested on:
* Windows 10
  - IE, Edge, Firefox and Chrome
* macOS
  - Safari, Firefox and Chrome

Does work fine on everything but windows with touch. For this it works fine on Chrome but not on Firefox, IE 11 or Edge 18. 

The local cursor on IE and Edge works fine using mouse/track-pad but not with touch. The cursor is only visible during a touch event and disappears as soon as  the finger is lifted.

On Firefox the local cursor disappears as soon as touch is used. This could be bug 7395.

I also tested on TL 4.10.1 and the local cursor is not used on IE or Edge but the cursor is always visible.

Might be related to upstream issue:
https://github.com/novnc/noVNC/issues/1300
Even though the problem upstream is only on Edge and Chrome.
Comment 10 Niko Lehto cendio 2019-10-10 15:20:04 CEST
(In reply to comment #9)
> 
> On Firefox the local cursor disappears as soon as touch is used. This could be
> bug 7395.
> 

Further testing in Firefox version 66 on Lamina (Windows 10) and  touch with  local cursor works.
Comment 11 Pierre Ossman cendio 2019-10-11 10:54:47 CEST
Apparently this change breaks Firefox in touch emulation mode. Simply log in and click anywhere which touch emulation active and you get:

> TypeError: event.changedTouches[0] is undefined[Learn More] cursor.js:163:9
>     _handleTouchMove https://10.47.254.219:300/core/util/cursor.js:163
>     _handleTouchStart https://10.47.254.219:300/core/util/cursor.js:157
>     _handleTouchStart self-hosted:975
>     sendTouchEvent resource://devtools/server/actors/emulation/touch-simulator.js:274
>     handleEvent resource://devtools/server/actors/emulation/touch-simulator.js:211
Comment 12 Pierre Ossman cendio 2019-10-14 10:59:36 CEST
Definitely a bug in Firefox. I've added a report here:

https://bugzilla.mozilla.org/show_bug.cgi?id=1588438

I don't think it's worth trying to work around this right now. We'll just have to live without that tool for now.
Comment 13 Samuel Mannehed cendio 2019-10-21 14:15:16 CEST
(In reply to comment #9)
> Does work fine on everything but windows with touch. For this, it works fine on
> Chrome but not on Firefox, IE 11 or Edge 18.

Actually we have problems in Chrome as well when using a touch device. After a mouse click, the cursor disappears until the mouse is moved.

> The local cursor on IE and Edge works fine using mouse/track-pad but not with
> touch. The cursor is only visible during a touch event and disappears as soon
> as the finger is lifted.

Due to the many layers of this problem, we missed that the disappearing-after-touch issue did not happen on Edge, only on IE with touch.

So to summarize, we have seen two problems after the new noVNC vendordrop:

 * When using touch devices and Windows 10 the cursor disappears in IE after lifting the finger.

 * The cursor also disappears after a click in Edge always and in Chrome when using touch.
Comment 15 Samuel Mannehed cendio 2019-10-21 14:34:07 CEST
The new noVNC vendordrop fixes the two problems with disappearing cursors. We have verified this on the following platforms:

Windows 10 with touch screen (*):
---------------------------------

 ✓ IE 11 (**)
 ✓ Edge 18
 ✓ Firefox 66 (***)
 ✓ Chrome 77

Windows 10 without touch:
-------------------------

 ✓ IE 11 (**)
 ✓ Edge 18
 ✓ Firefox 69
 ✓ Chrome 77

iOS 13:
-------

 ✓ Safari 13

Android 9:
----------

 ✓ Firefox 69
 ✓ Chrome 77

Fedora 30 without touch:
------------------------

 ✓ Firefox 69
 ✓ Chrome 77

macOS 10.14 with touch:
-----------------------

 ✓ Safari 14
 ✓ Firefox 69
 ✓ Chrome 77

macOS 10.14 without touch:
--------------------------

 ✓ Safari 14
 ✓ Firefox 69
 ✓ Chrome 77


(*)   Note bug 7402
(**)  Note bug 7403 and bug 7404
(***) Note bug 7395
Comment 17 Niko Lehto cendio 2019-10-22 10:17:58 CEST
(In reply to comment #15)
Re-tested on Nightly build, following same test sheet as earlier. Works fine!
Comment 19 Pierre Ossman cendio 2019-10-24 10:10:37 CEST
Seems to work well. I tested capture handling in the session and the control bar handle, as well as the appearance of the mouse cursor in:

 * Firefox on Fedora and Android
 * Chrome on Fedora
 * Internet Explorer on Windows 2008 R2

Release notes look good.

Note You need to log in before you can comment on or make changes to this bug.