network_spec.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /**
  2. * @licstart The following is the entire license notice for the
  3. * Javascript code in this page
  4. *
  5. * Copyright 2020 Mozilla Foundation
  6. *
  7. * Licensed under the Apache License, Version 2.0 (the "License");
  8. * you may not use this file except in compliance with the License.
  9. * You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing, software
  14. * distributed under the License is distributed on an "AS IS" BASIS,
  15. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. * See the License for the specific language governing permissions and
  17. * limitations under the License.
  18. *
  19. * @licend The above is the entire license notice for the
  20. * Javascript code in this page
  21. */
  22. "use strict";
  23. var _util = require("../../shared/util.js");
  24. var _network = require("../../display/network.js");
  25. describe("network", function () {
  26. var pdf1 = new URL("../pdfs/tracemonkey.pdf", window.location).href;
  27. var pdf1Length = 1016315;
  28. it("read without stream and range", function (done) {
  29. var stream = new _network.PDFNetworkStream({
  30. url: pdf1,
  31. rangeChunkSize: 65536,
  32. disableStream: true,
  33. disableRange: true
  34. });
  35. var fullReader = stream.getFullReader();
  36. var isStreamingSupported, isRangeSupported;
  37. var promise = fullReader.headersReady.then(function () {
  38. isStreamingSupported = fullReader.isStreamingSupported;
  39. isRangeSupported = fullReader.isRangeSupported;
  40. });
  41. var len = 0,
  42. count = 0;
  43. var read = function () {
  44. return fullReader.read().then(function (result) {
  45. if (result.done) {
  46. return undefined;
  47. }
  48. count++;
  49. len += result.value.byteLength;
  50. return read();
  51. });
  52. };
  53. var readPromise = Promise.all([read(), promise]);
  54. readPromise.then(function (page) {
  55. expect(len).toEqual(pdf1Length);
  56. expect(count).toEqual(1);
  57. expect(isStreamingSupported).toEqual(false);
  58. expect(isRangeSupported).toEqual(false);
  59. done();
  60. }).catch(function (reason) {
  61. done.fail(reason);
  62. });
  63. });
  64. it("read custom ranges", function (done) {
  65. var rangeSize = 32768;
  66. var stream = new _network.PDFNetworkStream({
  67. url: pdf1,
  68. length: pdf1Length,
  69. rangeChunkSize: rangeSize,
  70. disableStream: true,
  71. disableRange: false
  72. });
  73. var fullReader = stream.getFullReader();
  74. var isStreamingSupported, isRangeSupported, fullReaderCancelled;
  75. var promise = fullReader.headersReady.then(function () {
  76. isStreamingSupported = fullReader.isStreamingSupported;
  77. isRangeSupported = fullReader.isRangeSupported;
  78. fullReader.cancel(new _util.AbortException("Don't need fullReader."));
  79. fullReaderCancelled = true;
  80. });
  81. var tailSize = pdf1Length % rangeSize || rangeSize;
  82. var range1Reader = stream.getRangeReader(pdf1Length - tailSize - rangeSize, pdf1Length - tailSize);
  83. var range2Reader = stream.getRangeReader(pdf1Length - tailSize, pdf1Length);
  84. var result1 = {
  85. value: 0
  86. },
  87. result2 = {
  88. value: 0
  89. };
  90. var read = function (reader, lenResult) {
  91. return reader.read().then(function (result) {
  92. if (result.done) {
  93. return undefined;
  94. }
  95. lenResult.value += result.value.byteLength;
  96. return read(reader, lenResult);
  97. });
  98. };
  99. var readPromises = Promise.all([read(range1Reader, result1), read(range2Reader, result2), promise]);
  100. readPromises.then(function () {
  101. expect(result1.value).toEqual(rangeSize);
  102. expect(result2.value).toEqual(tailSize);
  103. expect(isStreamingSupported).toEqual(false);
  104. expect(isRangeSupported).toEqual(true);
  105. expect(fullReaderCancelled).toEqual(true);
  106. done();
  107. }).catch(function (reason) {
  108. done.fail(reason);
  109. });
  110. });
  111. });