xpra icon
Bug tracker and wiki

Ticket #2705: final.patch

File final.patch, 14.3 KB (added by brief, 3 months ago)
  • src/html5/connect.html

     
    346346                        v = default_settings[prop];
    347347                }
    348348                return v;
    349         }
     349        };
    350350        const getboolparam = function(prop, default_value) {
    351351                let v = Utilities.getparam(prop);
    352352                if (v==null && prop in default_settings) {
  • src/html5/index.html

     
    214214                                        v = default_settings[prop];
    215215                                }
    216216                                return v;
    217                         }
     217                        };
    218218                        const getboolparam = function(prop, default_value) {
    219219                                let v = Utilities.getparam(prop);
    220220                                if (v==null && prop in default_settings) {
     
    232232
    233233                        let cdebug = function () {
    234234                                Utilities.clog.apply(Utilities, arguments);
    235                         }
     235                        };
    236236                        let clog = function () {
    237237                                Utilities.clog.apply(Utilities, arguments);
    238238                        };
     
    829829
    830830                        function init_file_transfer(client) {
    831831                                function send_file(f) {
    832                                         clog("file:", f.name, ", type:", f.type, ", size:", f.size, "last modified:", f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a');
     832                                        clog("file:", f.name, ", type:", f.type, ", size:", f.size, "last modified:", f.hasOwnProperty("lastModifiedDate") ? f.lastModifiedDate.toLocaleDateString() : 'n/a');
    833833                                        const fileReader = new FileReader();
    834834                                        fileReader.onloadend = function (evt) {
    835835                                                const u8a = new Uint8Array(evt.target.result);
     
    969969                                                        document.exitFullscreen();
    970970                                                } else if (document.webkitExitFullscreen) {
    971971                                                        document.webkitExitFullscreen();
    972                                                 } else if (document.mozCancelFullScreen) {
     972                                                } else if (document.hasOwnProperty("mozCancelFullScreen") && typeof document.mozCancelFullScreen === "function") {
    973973                                                        document.mozCancelFullScreen();
    974                                                 } else if (document.msExitFullscreen) {
     974                                                } else if (document.hasOwnProperty("msExitFullscreen") && typeof document.msExitFullscreen === "function") {
    975975                                                        document.msExitFullscreen();
    976976                                                }
    977977                                        }
  • src/html5/js/Client.js

     
    134134        this.clipboard_server_buffers = {};
    135135        this.clipboard_pending = false;
    136136        this.clipboard_targets = ["UTF8_STRING", "TEXT", "STRING", "text/plain"];
    137         if (CLIPBOARD_IMAGES && navigator.clipboard && navigator.clipboard.write) {
     137        if (CLIPBOARD_IMAGES && navigator.clipboard && navigator.clipboard.hasOwnProperty("write")) {
    138138                this.clipboard_targets.push("image/png");
    139139        }
    140140        else {
     
    446446                        "batch"           : {"reset" : true},
    447447                },
    448448                {},     //no client_properties
    449                 ])
     449                ]);
    450450};
    451451
    452452XpraClient.prototype.redraw_windows = function() {
     
    748748        if (str=="AltGraph" || (keyname=="Alt_R" && Utilities.isWindows())) {
    749749                this.altgr_state = pressed;
    750750                keyname = "ISO_Level3_Shift";
    751                 str = "AltGraph"
     751                str = "AltGraph";
    752752        }
    753753
    754754        //if (this.num_lock && keycode>=96 && keycode<106)
     
    10811081        if (this.bandwidth_limit>0) {
    10821082                this._update_capabilities({
    10831083                        "bandwidth-limit"       : this.bandwidth_limit,
    1084                 })
     1084                });
    10851085        }
    10861086        const ci = Utilities.getConnectionInfo();
    10871087        if (ci) {
    10881088                this._update_capabilities({
    10891089                        "connection-data"       : ci,
    1090                 })
     1090                });
    10911091        }
    10921092        const LZ4 = require('lz4');
    10931093        if(LZ4) {
     
    19401940        img.className = "menu-content-left";
    19411941        img.height = 24;
    19421942        img.width = 24;
    1943         return img
     1943        return img;
    19441944};
    19451945
    19461946
     
    23122312                        direction = packet[4],
    23132313                        button = packet[5],
    23142314                        source_indication = packet[6];
    2315                 win.initiate_moveresize(ctx.mousedown_event, x_root, y_root, direction, button, source_indication)
     2315                win.initiate_moveresize(ctx.mousedown_event, x_root, y_root, direction, button, source_indication);
    23162316        }
    23172317};
    23182318
     
    24432443                gainNode.gain.setValueAtTime(percent, ctx.audio_context.currentTime);
    24442444                oscillator.frequency.setValueAtTime(pitch, ctx.audio_context.currentTime);
    24452445                oscillator.start();
    2446                 setTimeout(function(){oscillator.stop()}, duration);
     2446                setTimeout(function(){oscillator.stop();}, duration);
    24472447        }
    24482448        else {
    24492449                const snd = new Audio("data:audio/wav;base64,//uQRAAAAWMSLwUIYAAsYkXgoQwAEaYLWfkWgAI0wWs/ItAAAGDgYtAgAyN+QWaAAihwMWm4G8QQRDiMcCBcH3Cc+CDv/7xA4Tvh9Rz/y8QADBwMWgQAZG/ILNAARQ4GLTcDeIIIhxGOBAuD7hOfBB3/94gcJ3w+o5/5eIAIAAAVwWgQAVQ2ORaIQwEMAJiDg95G4nQL7mQVWI6GwRcfsZAcsKkJvxgxEjzFUgfHoSQ9Qq7KNwqHwuB13MA4a1q/DmBrHgPcmjiGoh//EwC5nGPEmS4RcfkVKOhJf+WOgoxJclFz3kgn//dBA+ya1GhurNn8zb//9NNutNuhz31f////9vt///z+IdAEAAAK4LQIAKobHItEIYCGAExBwe8jcToF9zIKrEdDYIuP2MgOWFSE34wYiR5iqQPj0JIeoVdlG4VD4XA67mAcNa1fhzA1jwHuTRxDUQ//iYBczjHiTJcIuPyKlHQkv/LHQUYkuSi57yQT//uggfZNajQ3Vmz+Zt//+mm3Wm3Q576v////+32///5/EOgAAADVghQAAAAA//uQZAUAB1WI0PZugAAAAAoQwAAAEk3nRd2qAAAAACiDgAAAAAAABCqEEQRLCgwpBGMlJkIz8jKhGvj4k6jzRnqasNKIeoh5gI7BJaC1A1AoNBjJgbyApVS4IDlZgDU5WUAxEKDNmmALHzZp0Fkz1FMTmGFl1FMEyodIavcCAUHDWrKAIA4aa2oCgILEBupZgHvAhEBcZ6joQBxS76AgccrFlczBvKLC0QI2cBoCFvfTDAo7eoOQInqDPBtvrDEZBNYN5xwNwxQRfw8ZQ5wQVLvO8OYU+mHvFLlDh05Mdg7BT6YrRPpCBznMB2r//xKJjyyOh+cImr2/4doscwD6neZjuZR4AgAABYAAAABy1xcdQtxYBYYZdifkUDgzzXaXn98Z0oi9ILU5mBjFANmRwlVJ3/6jYDAmxaiDG3/6xjQQCCKkRb/6kg/wW+kSJ5//rLobkLSiKmqP/0ikJuDaSaSf/6JiLYLEYnW/+kXg1WRVJL/9EmQ1YZIsv/6Qzwy5qk7/+tEU0nkls3/zIUMPKNX/6yZLf+kFgAfgGyLFAUwY//uQZAUABcd5UiNPVXAAAApAAAAAE0VZQKw9ISAAACgAAAAAVQIygIElVrFkBS+Jhi+EAuu+lKAkYUEIsmEAEoMeDmCETMvfSHTGkF5RWH7kz/ESHWPAq/kcCRhqBtMdokPdM7vil7RG98A2sc7zO6ZvTdM7pmOUAZTnJW+NXxqmd41dqJ6mLTXxrPpnV8avaIf5SvL7pndPvPpndJR9Kuu8fePvuiuhorgWjp7Mf/PRjxcFCPDkW31srioCExivv9lcwKEaHsf/7ow2Fl1T/9RkXgEhYElAoCLFtMArxwivDJJ+bR1HTKJdlEoTELCIqgEwVGSQ+hIm0NbK8WXcTEI0UPoa2NbG4y2K00JEWbZavJXkYaqo9CRHS55FcZTjKEk3NKoCYUnSQ0rWxrZbFKbKIhOKPZe1cJKzZSaQrIyULHDZmV5K4xySsDRKWOruanGtjLJXFEmwaIbDLX0hIPBUQPVFVkQkDoUNfSoDgQGKPekoxeGzA4DUvnn4bxzcZrtJyipKfPNy5w+9lnXwgqsiyHNeSVpemw4bWb9psYeq//uQZBoABQt4yMVxYAIAAAkQoAAAHvYpL5m6AAgAACXDAAAAD59jblTirQe9upFsmZbpMudy7Lz1X1DYsxOOSWpfPqNX2WqktK0DMvuGwlbNj44TleLPQ+Gsfb+GOWOKJoIrWb3cIMeeON6lz2umTqMXV8Mj30yWPpjoSa9ujK8SyeJP5y5mOW1D6hvLepeveEAEDo0mgCRClOEgANv3B9a6fikgUSu/DmAMATrGx7nng5p5iimPNZsfQLYB2sDLIkzRKZOHGAaUyDcpFBSLG9MCQALgAIgQs2YunOszLSAyQYPVC2YdGGeHD2dTdJk1pAHGAWDjnkcLKFymS3RQZTInzySoBwMG0QueC3gMsCEYxUqlrcxK6k1LQQcsmyYeQPdC2YfuGPASCBkcVMQQqpVJshui1tkXQJQV0OXGAZMXSOEEBRirXbVRQW7ugq7IM7rPWSZyDlM3IuNEkxzCOJ0ny2ThNkyRai1b6ev//3dzNGzNb//4uAvHT5sURcZCFcuKLhOFs8mLAAEAt4UWAAIABAAAAAB4qbHo0tIjVkUU//uQZAwABfSFz3ZqQAAAAAngwAAAE1HjMp2qAAAAACZDgAAAD5UkTE1UgZEUExqYynN1qZvqIOREEFmBcJQkwdxiFtw0qEOkGYfRDifBui9MQg4QAHAqWtAWHoCxu1Yf4VfWLPIM2mHDFsbQEVGwyqQoQcwnfHeIkNt9YnkiaS1oizycqJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=");
     
    24992499                        };
    25002500                        notification.onclick = function() {
    25012501                                ctx.log("user clicked on notification", nid);
    2502                         }
     2502                        };
    25032503                }
    25042504                //we have notification support in the browser
    25052505                if (Notification.permission === "granted") {
     
    32673267                                                        ctx.debug("clipboard", "writeText succeeded");
    32683268                                                        ctx.clipboard_pending = false;
    32693269                                                }, function() {
    3270                                                         ctx.debug("clipboard", "writeText failed")
     3270                                                        ctx.debug("clipboard", "writeText failed");
    32713271                                                });
    32723272                                        }
    32733273                                }
    32743274                        }
    32753275                }
    3276                 else if (CLIPBOARD_IMAGES && dtype=="image/png" && dformat==8 && wire_encoding=="bytes" && navigator.clipboard && navigator.clipboard.write) {
     3276                else if (CLIPBOARD_IMAGES && dtype=="image/png" && dformat==8 && wire_encoding=="bytes"
     3277                        && navigator.clipboard && navigator.clipboard.hasOwnProperty("write")
     3278                        && typeof navigator.clipboard.write === 'function') {
    32773279                        ctx.debug("clipboard", "png image received");
    32783280                        const blob = new Blob([wire_data], {type: dtype});
    32793281                        ctx.debug("clipboard", "created blob", blob);
     
    33163318        }
    33173319
    33183320        if (navigator.clipboard) {
    3319                 if (navigator.clipboard.read) {
     3321                if (navigator.clipboard.hasOwnProperty("read") && typeof navigator.clipboard.read === 'function') {
    33203322                        ctx.debug("clipboard", "request using read()");
    33213323                        navigator.clipboard.read().then(function(data) {
    33223324                                let item = null;
     
    33643366                        });
    33653367                        return;
    33663368                }
    3367                 else if (navigator.clipboard.readText) {
     3369                else if (typeof navigator.clipboard.hasOwnProperty("readText") && typeof navigator.clipboard.readText === 'function') {
    33683370                        ctx.debug("clipboard", "clipboard request using readText()");
    33693371                        navigator.clipboard.readText().then(function(text) {
    33703372                                ctx.debug("clipboard", "clipboard request via readText() text=", text);
     
    35023504        if (!ctx.open_url) {
    35033505                ctx.cwarn("Warning: received a request to open URL '%s'", url);
    35043506                ctx.clog(" but opening of URLs is disabled");
    3505                 return
     3507                return;
    35063508        }
    35073509        ctx.clog("opening url:", url);
    35083510        const new_window = window.open(url, '_blank');
  • src/html5/js/Menu-custom.js

     
    6868        img2.src="icons/close.png";
    6969        img2.title="Close";
    7070        img2.className="menu-content-right";
    71         img2.onclick=function(){client._window_closed(client.id_to_window[wid])};
     71        img2.onclick=function(){ client._window_closed(client.id_to_window[wid]); };
    7272        const img3 = new Image();
    7373        img3.id = "windowlistitemmax"+wid;
    7474        img3.src="icons/maximize.png";
    7575        img3.title="Maximize";
    76         img3.onclick=function(){client.id_to_window[wid].toggle_maximized()};
     76        img3.onclick=function(){ client.id_to_window[wid].toggle_maximized(); };
    7777        img3.className="menu-content-right";
    7878        const img4 = new Image();
    7979        img4.id = "windowlistitemmin"+wid;
    8080        img4.src="icons/minimize.png";
    8181        img4.title="Minimize";
    82         img4.onclick=function(){client.id_to_window[wid].toggle_minimized()};
     82        img4.onclick=function(){ client.id_to_window[wid].toggle_minimized(); };
    8383        img4.className="menu-content-right";
    8484
    8585        divRight.appendChild(img2);
  • src/html5/js/Menu.js

     
    5858        ul.classList.add("-animating");
    5959        ul.classList.add("-visible");
    6060        setTimeout(function(){
    61             ul.classList.remove("-animating")
     61            ul.classList.remove("-animating");
    6262        }, 25);
    6363    }
    6464
  • src/html5/js/Protocol.js

     
    335335                        for (let index in this.raw_packets) {
    336336                                packet[index] = this.raw_packets[index];
    337337                        }
    338                         this.raw_packets = {}
     338                        this.raw_packets = {};
    339339                }
    340340                catch (e) {
    341341                        //FIXME: maybe we should error out and disconnect here?
     
    529529
    530530
    531531// initialise LZ4 library
    532 var Buffer = require('buffer').Buffer;
    533 var LZ4 = require('lz4');
     532const Buffer = require('buffer').Buffer;
     533const LZ4 = require('lz4');
  • src/html5/js/Utilities.js

     
    9595                        return navigator.oscpu;
    9696                }
    9797                //ie:
    98                 if (navigator.cpuClass) {
     98                if (navigator.hasOwnProperty("cpuClass")) {
    9999                        return navigator.cpuClass;
    100100                }
    101101                return 'unknown';
     
    260260
    261261        is_64bit : function() {
    262262                let _to_check = [] ;
    263                 if (window.navigator.cpuClass)
     263                if (window.navigator.hasOwnProperty("cpuClass"))
    264264                        _to_check.push((window.navigator.cpuClass + "").toLowerCase());
    265265                if (window.navigator.platform)
    266266                        _to_check.push((window.navigator.platform + "").toLowerCase());
     
    569569
    570570
    571571        getConnectionInfo : function() {
    572                 const c = navigator.connection;
    573                 if (!c) {
     572                if (!navigator.hasOwnProperty("connection")) {
    574573                        return {};
    575574                }
     575                const c = navigator.connection;
    576576                const i = {};
    577577                if (c.type) {
    578578                        i["type"] = c.type;
    579579                }
    580                 if (c.effectiveType) {
     580                if (c.hasOwnProperty("effectiveType")) {
    581581                        i["effective-type"] = c.effectiveType;
    582582                }
    583583                if (!isNaN(c.downlink) && !isNaN(c.downlink) && c.downlink>0 && isFinite(c.downlink)) {
    584584                        i["downlink"] = Math.round(c.downlink*1000*1000);
    585585                }
    586                 if (!isNaN(c.downlinkMax) && !isNaN(c.downlinkMax) && c.downlinkMax>0 && isFinite(c.downlinkMax)) {
     586                if (c.hasOwnProperty("downlinkMax") && !isNaN(c.downlinkMax) && !isNaN(c.downlinkMax) && c.downlinkMax>0 && isFinite(c.downlinkMax)) {
    587587                        i["downlink.max"] = Math.round(c.downlinkMax*1000*1000);
    588588                }
    589589                if (!isNaN(c.rtt) && c.rtt>0) {
  • src/html5/js/Window.js

     
    460460        if(safe) {
    461461                this.set_metadata_safe(metadata);
    462462        } else {
    463                 this.set_metadata(metadata)
     463                this.set_metadata(metadata);
    464464        }
    465465        this.update_zindex();
    466466};