summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSolly Ross <sross@redhat.com>2015-03-24 15:05:38 -0400
committerSolly Ross <sross@redhat.com>2015-03-26 17:09:05 -0400
commit58ded70d150c31df2fbd78c0320af6edc72610fc (patch)
tree76d6829e35ae6b5f4d2278a547e58f2a1ca1840c
parent16b3ef77d15179076144d45c9edfdb6d37beb41e (diff)
downloadnovnc-bug/auth-errors-not-displayed.tar.gz
Create RFB object on connectbug/auth-errors-not-displayed
In e543525faa9cf0d683f41e183e89cd909f3dd229, we switched to creating a new RFB object on disconnect. This caused issues, however, since any errors were only displayed briefly before the new "loaded" text was displayed instead. Now, we create the RFB object on connect. This essentially removes the usefulness of the "loaded" state, but prevents the aforementioned problem. To facilitate this, the code which does detection of cursor URI support was moved from this Display constructor (which now calls the new function) into its own function, `Util.browserSupportsCursorURIs()`. Fixes #467
-rw-r--r--include/display.js26
-rw-r--r--include/ui.js36
-rw-r--r--include/util.js23
-rw-r--r--tests/test.display.js16
-rw-r--r--vnc.html4
5 files changed, 50 insertions, 55 deletions
diff --git a/include/display.js b/include/display.js
index d10d9b9..201acf3 100644
--- a/include/display.js
+++ b/include/display.js
@@ -86,29 +86,9 @@ var Display;
}
// Determine browser support for setting the cursor via data URI scheme
- var curDat = [];
- for (var i = 0; i < 8 * 8 * 4; i++) {
- curDat.push(255);
- }
- try {
- var curSave = this._target.style.cursor;
- Display.changeCursor(this._target, curDat, curDat, 2, 2, 8, 8);
- if (this._target.style.cursor) {
- if (this._cursor_uri === null || this._cursor_uri === undefined) {
- this._cursor_uri = true;
- }
- Util.Info("Data URI scheme cursor supported");
- this._target.style.cursor = curSave;
- } else {
- if (this._cursor_uri === null || this._cursor_uri === undefined) {
- this._cursor_uri = false;
- }
- Util.Warn("Data URI scheme cursor not supported");
- this._target.style.cursor = "none";
- }
- } catch (exc) {
- Util.Error("Data URI scheme cursor test exception: " + exc);
- this._cursor_uri = false;
+ if (this._cursor_uri || this._cursor_uri === null ||
+ this._cursor_uri === undefined) {
+ this._cursor_uri = Util.browserSupportsCursorURIs(this._target);
}
Util.Debug("<< Display.constructor");
diff --git a/include/ui.js b/include/ui.js
index 25f8617..a72d5fa 100644
--- a/include/ui.js
+++ b/include/ui.js
@@ -97,8 +97,6 @@ var UI;
UI.initSetting('path', 'websockify');
UI.initSetting('repeaterID', '');
- UI.initRFB();
-
var autoconnect = WebUtil.getQueryVar('autoconnect', false);
if (autoconnect === 'true' || autoconnect == '1') {
autoconnect = true;
@@ -136,7 +134,7 @@ var UI;
Util.addEvent(window, 'load', UI.keyboardinputReset);
Util.addEvent(window, 'beforeunload', function () {
- if (UI.rfb_state === 'normal') {
+ if (UI.rfb && UI.rfb_state === 'normal') {
return "You are currently connected.";
}
} );
@@ -213,12 +211,14 @@ var UI;
$D("noVNC_connect_button").onclick = UI.connect;
$D("noVNC_resize").onchange = function () {
- var connected = UI.rfb_state === 'normal' ? true : false;
+ var connected = UI.rfb && UI.rfb_state === 'normal';
UI.enableDisableClip(connected);
};
},
onresize: function (callback) {
+ if (!UI.rfb) return;
+
var size = UI.getCanvasLimit();
if (size && UI.rfb_state === 'normal' && UI.rfb.get_display()) {
@@ -480,7 +480,7 @@ var UI;
} else {
UI.updateSetting('encrypt');
UI.updateSetting('true_color');
- if (UI.rfb.get_display().get_cursor_uri()) {
+ if (Util.browserSupportsCursorURIs()) {
UI.updateSetting('cursor');
} else {
UI.updateSetting('cursor', !UI.isTouchDevice);
@@ -536,7 +536,7 @@ var UI;
//Util.Debug(">> settingsApply");
UI.saveSetting('encrypt');
UI.saveSetting('true_color');
- if (UI.rfb.get_display().get_cursor_uri()) {
+ if (Util.browserSupportsCursorURIs()) {
UI.saveSetting('cursor');
}
@@ -558,7 +558,7 @@ var UI;
WebUtil.selectStylesheet(UI.getSetting('stylesheet'));
WebUtil.init_logging(UI.getSetting('logging'));
UI.setViewClip();
- UI.setViewDrag(UI.rfb.get_viewportDrag());
+ UI.setViewDrag(UI.rfb && UI.rfb.get_viewportDrag());
//Util.Debug("<< settingsApply");
},
@@ -642,13 +642,6 @@ var UI;
break;
}
- switch (state) {
- case 'fatal':
- case 'failed':
- case 'disconnected':
- UI.initRFB();
- }
-
if (typeof(msg) !== 'undefined') {
$D('noVNC-control-bar').setAttribute("class", klass);
$D('noVNC_status').innerHTML = msg;
@@ -659,13 +652,12 @@ var UI;
// Disable/enable controls depending on connection state
updateVisualState: function() {
- var connected = UI.rfb_state === 'normal' ? true : false;
+ var connected = UI.rfb && UI.rfb_state === 'normal';
//Util.Debug(">> updateVisualState");
$D('noVNC_encrypt').disabled = connected;
$D('noVNC_true_color').disabled = connected;
- if (UI.rfb && UI.rfb.get_display() &&
- UI.rfb.get_display().get_cursor_uri()) {
+ if (Util.browserSupportsCursorURIs()) {
$D('noVNC_cursor').disabled = connected;
} else {
UI.updateSetting('cursor', !UI.isTouchDevice);
@@ -780,6 +772,8 @@ var UI;
throw new Error("Must set host and port");
}
+ UI.initRFB();
+
UI.rfb.set_encrypt(UI.getSetting('encrypt'));
UI.rfb.set_true_color(UI.getSetting('true_color'));
UI.rfb.set_local_cursor(UI.getSetting('cursor'));
@@ -809,11 +803,15 @@ var UI;
},
displayBlur: function() {
+ if (!UI.rfb) return;
+
UI.rfb.get_keyboard().set_focused(false);
UI.rfb.get_mouse().set_focused(false);
},
displayFocus: function() {
+ if (!UI.rfb) return;
+
UI.rfb.get_keyboard().set_focused(true);
UI.rfb.get_mouse().set_focused(true);
},
@@ -882,7 +880,7 @@ var UI;
// Toggle/set/unset the viewport drag/move button
setViewDrag: function(drag) {
- if (!UI.rfb) { return; }
+ if (!UI.rfb) return;
UI.updateViewDragButton();
@@ -953,7 +951,7 @@ var UI;
// sending keyCodes in the normal keyboard events when using on screen keyboards.
keyInput: function(event) {
- if (!UI.rfb) { return; }
+ if (!UI.rfb) return;
var newValue = event.target.value;
diff --git a/include/util.js b/include/util.js
index 02e7225..ed0e3cd 100644
--- a/include/util.js
+++ b/include/util.js
@@ -508,6 +508,29 @@ Util.stopEvent = function (e) {
else { e.returnValue = false; }
};
+Util._cursor_uris_supported = null;
+
+Util.browserSupportsCursorURIs = function () {
+ if (Util._cursor_uris_supported === null) {
+ try {
+ var target = document.createElement('canvas');
+ target.style.cursor = 'url("data:image/x-icon;base64,AAACAAEACAgAAAIAAgA4AQAAFgAAACgAAAAIAAAAEAAAAAEAIAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAA==") 2 2, default';
+
+ if (target.style.cursor) {
+ Util.Info("Data URI scheme cursor supported");
+ Util._cursor_uris_supported = true;
+ } else {
+ Util.Warn("Data URI scheme cursor not supported");
+ Util._cursor_uris_supported = false;
+ }
+ } catch (exc) {
+ Util.Error("Data URI scheme cursor test exception: " + exc);
+ Util._cursor_uris_supported = false;
+ }
+ }
+
+ return Util._cursor_uris_supported;
+};
// Set browser engine versions. Based on mootools.
Util.Features = {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)};
diff --git a/tests/test.display.js b/tests/test.display.js
index d54cb82..56dfc22 100644
--- a/tests/test.display.js
+++ b/tests/test.display.js
@@ -28,35 +28,29 @@ describe('Display/Canvas Helper', function () {
describe('checking for cursor uri support', function () {
beforeEach(function () {
- this._old_change_cursor = Display.changeCursor;
+ this._old_browser_supports_cursor_uris = Util.browserSupportsCursorURIs;
});
it('should disable cursor URIs if there is no support', function () {
- Display.changeCursor = function(target) {
- target.style.cursor = undefined;
- };
+ Util.browserSupportsCursorURIs = function () { return false; };
var display = new Display({ target: document.createElement('canvas'), prefer_js: true, viewport: false });
expect(display._cursor_uri).to.be.false;
});
it('should enable cursor URIs if there is support', function () {
- Display.changeCursor = function(target) {
- target.style.cursor = 'pointer';
- };
+ Util.browserSupportsCursorURIs = function () { return true; };
var display = new Display({ target: document.createElement('canvas'), prefer_js: true, viewport: false });
expect(display._cursor_uri).to.be.true;
});
it('respect the cursor_uri option if there is support', function () {
- Display.changeCursor = function(target) {
- target.style.cursor = 'pointer';
- };
+ Util.browserSupportsCursorURIs = function () { return false; };
var display = new Display({ target: document.createElement('canvas'), prefer_js: true, viewport: false, cursor_uri: false });
expect(display._cursor_uri).to.be.false;
});
afterEach(function () {
- Display.changeCursor = this._old_change_cursor;
+ Util.browserSupportsCursorURIs = this._old_browser_supports_cursor_uris;
});
});
diff --git a/vnc.html b/vnc.html
index b8bda05..b8d11c7 100644
--- a/vnc.html
+++ b/vnc.html
@@ -46,7 +46,7 @@
</head>
<body>
- <div id="noVNC-control-bar">
+ <div id="noVNC-control-bar" class="noVNC_status_normal">
<!--noVNC Mobile Device only Buttons-->
<div class="noVNC-buttons-left">
<input type="image" alt="viewport drag" src="images/drag.png"
@@ -87,7 +87,7 @@
</div>
</div>
- <div id="noVNC_status">Loading</div>
+ <div id="noVNC_status"></div>
<!--noVNC Buttons-->
<div class="noVNC-buttons-right">