Explorar el Código

making feature detection work as intended in chrome

El RIDO hace 7 años
padre
commit
a6aef109cc
Se han modificado 5 ficheros con 30 adiciones y 26 borrados
  1. 14 4
      js/privatebin.js
  2. 9 9
      js/test/Alert.js
  3. 5 11
      js/test/InitialCheck.js
  4. 1 1
      tpl/bootstrap.php
  5. 1 1
      tpl/page.php

+ 14 - 4
js/privatebin.js

@@ -566,10 +566,10 @@ jQuery.PrivateBin = (function($, RawDeflate) {
 
             // if $element is given, apply text to element
             if ($element !== null) {
-                // get last text node of element
+                // set the last text node of element
                 let content = $element.contents();
                 if (content.length > 1) {
-                    content[content.length - 1].nodeValue = ' ' + output;
+                    $element.html(' ' + output).prepend(content[0]);
                 } else {
                     $element.text(output);
                 }
@@ -4803,11 +4803,21 @@ jQuery.PrivateBin = (function($, RawDeflate) {
          */
         function isOldBrowser() {
             // webcrypto support
-            if (typeof window.crypto !== 'object') {
+            if (!(
+                'crypto' in window &&
+                'getRandomValues' in window.crypto &&
+                'subtle' in window.crypto &&
+                'encrypt' in window.crypto.subtle &&
+                'decrypt' in window.crypto.subtle &&
+                'Uint32Array' in window
+            )) {
                 return true;
             }
 
-            if (typeof WebAssembly !== 'object' && typeof WebAssembly.instantiate !== 'function') {
+            if (!(
+                'WebAssembly' in window &&
+                'instantiate' in window.WebAssembly
+            )) {
                 return true;
             }
             try {

+ 9 - 9
js/test/Alert.js

@@ -10,7 +10,7 @@ describe('Alert', function () {
             function (icon, message) {
                 icon = icon.join('');
                 message = message.join('');
-                var expected = '<div id="status" role="alert" ' +
+                const expected = '<div id="status" role="alert" ' +
                     'class="statusmessage alert alert-info"><span ' +
                     'class="glyphicon glyphicon-' + icon +
                     '" aria-hidden="true"></span> ' + message + '</div>';
@@ -21,7 +21,7 @@ describe('Alert', function () {
                 );
                 $.PrivateBin.Alert.init();
                 $.PrivateBin.Alert.showStatus(message, icon);
-                var result = $('body').html();
+                const result = $('body').html();
                 return expected === result;
             }
         );
@@ -39,7 +39,7 @@ describe('Alert', function () {
             function (icon, message) {
                 icon = icon.join('');
                 message = message.join('');
-                var expected = '<div id="errormessage" role="alert" ' +
+                const expected = '<div id="errormessage" role="alert" ' +
                     'class="statusmessage alert alert-danger"><span ' +
                     'class="glyphicon glyphicon-' + icon +
                     '" aria-hidden="true"></span> ' + message + '</div>';
@@ -50,7 +50,7 @@ describe('Alert', function () {
                 );
                 $.PrivateBin.Alert.init();
                 $.PrivateBin.Alert.showError(message, icon);
-                var result = $('body').html();
+                const result = $('body').html();
                 return expected === result;
             }
         );
@@ -69,7 +69,7 @@ describe('Alert', function () {
             function (message, string, number) {
                 message = message.join('');
                 string = string.join('');
-                var expected = '<div id="remainingtime" role="alert" ' +
+                const expected = '<div id="remainingtime" role="alert" ' +
                     'class="alert alert-info"><span ' +
                     'class="glyphicon glyphicon-fire" aria-hidden="true">' +
                     '</span> ' + string + message + number + '</div>';
@@ -80,7 +80,7 @@ describe('Alert', function () {
                 );
                 $.PrivateBin.Alert.init();
                 $.PrivateBin.Alert.showRemaining(['%s' + message + '%d', string, number]);
-                var result = $('body').html();
+                const result = $('body').html();
                 return expected === result;
             }
         );
@@ -98,7 +98,7 @@ describe('Alert', function () {
             function (message, icon) {
                 message = message.join('');
                 icon = icon.join('');
-                var defaultMessage = 'Loading…';
+                const defaultMessage = 'Loading…';
                 if (message.length === 0) {
                     message = defaultMessage;
                 }
@@ -114,7 +114,7 @@ describe('Alert', function () {
                 );
                 $.PrivateBin.Alert.init();
                 $.PrivateBin.Alert.showLoading(message, icon);
-                var result = $('body').html();
+                const result = $('body').html();
                 return expected === result;
             }
         );
@@ -182,7 +182,7 @@ describe('Alert', function () {
             jsc.array(common.jscAlnumString()),
             function (trigger, message) {
                 message = message.join('');
-                var handlerCalled = false,
+                let handlerCalled = false,
                     defaultMessage = 'Loading…',
                     functions = [
                         $.PrivateBin.Alert.showStatus,

+ 5 - 11
js/test/InitialCheck.js

@@ -22,7 +22,6 @@ describe('InitialCheck', function () {
                         '</body></html>'
                     );
                     $.PrivateBin.Alert.init();
-                    window.crypto = null;
                     const result1 = !$.PrivateBin.InitialCheck.init(),
                           result2 = !$('#errormessage').hasClass('hidden');
                     clean();
@@ -61,24 +60,19 @@ describe('InitialCheck', function () {
         jsc.property(
             'shows error, if HTTP only site is detected',
             'bool',
-            jsc.elements(['localhost', '127.0.0.1', '[::1]', '']),
             jsc.nearray(common.jscA2zString()),
-            jsc.elements(['.onion', '.i2p', '']),
-            function (secureProtocol, localhost, domain, tld) {
-                const isDomain = localhost === '',
-                      isSecureContext = secureProtocol || !isDomain || tld.length > 0,
-                      clean = jsdom('', {
-                          'url': (secureProtocol ? 'https' : 'http' ) + '://' +
-                               (isDomain ? domain.join('') + tld : localhost) + '/'
+            function (secureProtocol, domain) {
+                const clean = jsdom('', {
+                          'url': (secureProtocol ? 'https' : 'http' ) + '://' + domain.join('') + '/'
                       });
                 $('body').html(
                     '<html><body><div id="httpnotice" class="hidden"></div>'+
                     '</body></html>'
                 );
                 $.PrivateBin.Alert.init();
-                window.crypto = null;
+                window.crypto = new WebCrypto();
                 const result1 = $.PrivateBin.InitialCheck.init(),
-                      result2 = isSecureContext === $('#httpnotice').hasClass('hidden');
+                      result2 = secureProtocol === $('#httpnotice').hasClass('hidden');
                 clean();
                 return result1 && result2;
             }

+ 1 - 1
tpl/bootstrap.php

@@ -71,7 +71,7 @@ if ($MARKDOWN):
 endif;
 ?>
 		<script type="text/javascript" data-cfasync="false" src="js/purify-1.0.11.js" integrity="sha512-p7UyJuyBkhMcMgE4mDsgK0Lz70OvetLefua1oXs1OujWv9gOxh4xy8InFux7bZ4/DAZsTmO4rgVwZW9BHKaTaw==" crossorigin="anonymous"></script>
-		<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-aACEZbSPO13YywWwP/gTTBdZgYlKuDfKAJU5PJyqVRsuZiT7rAAhFRf1KdF8OX8QFHqTrQhQ47qlFtIslJMnkg==" crossorigin="anonymous"></script>
+		<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-wPZVhFyyfvXUeXfRMp8hDUmYd5kG/sbCPiCdn+J+4t8YQNGuhXNa7g992HayQOQuiZeCU4/VczTaoGrQgsyjkg==" crossorigin="anonymous"></script>
 		<!--[if IE]>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;}</style>
 		<![endif]-->

+ 1 - 1
tpl/page.php

@@ -49,7 +49,7 @@ if ($MARKDOWN):
 endif;
 ?>
 		<script type="text/javascript" data-cfasync="false" src="js/purify-1.0.11.js" integrity="sha512-p7UyJuyBkhMcMgE4mDsgK0Lz70OvetLefua1oXs1OujWv9gOxh4xy8InFux7bZ4/DAZsTmO4rgVwZW9BHKaTaw==" crossorigin="anonymous"></script>
-		<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-aACEZbSPO13YywWwP/gTTBdZgYlKuDfKAJU5PJyqVRsuZiT7rAAhFRf1KdF8OX8QFHqTrQhQ47qlFtIslJMnkg==" crossorigin="anonymous"></script>
+		<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-wPZVhFyyfvXUeXfRMp8hDUmYd5kG/sbCPiCdn+J+4t8YQNGuhXNa7g992HayQOQuiZeCU4/VczTaoGrQgsyjkg==" crossorigin="anonymous"></script>
 		<!--[if IE]>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;}</style>
 		<![endif]-->