worker_stream.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. /**
  2. * @licstart The following is the entire license notice for the
  3. * Javascript code in this page
  4. *
  5. * Copyright 2019 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. Object.defineProperty(exports, "__esModule", {
  24. value: true
  25. });
  26. exports.PDFWorkerStream = void 0;
  27. var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
  28. var _util = require("../shared/util");
  29. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  30. function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
  31. function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
  32. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  33. function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
  34. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  35. var PDFWorkerStream =
  36. /*#__PURE__*/
  37. function () {
  38. function PDFWorkerStream(msgHandler) {
  39. _classCallCheck(this, PDFWorkerStream);
  40. this._msgHandler = msgHandler;
  41. this._contentLength = null;
  42. this._fullRequestReader = null;
  43. this._rangeRequestReaders = [];
  44. }
  45. _createClass(PDFWorkerStream, [{
  46. key: "getFullReader",
  47. value: function getFullReader() {
  48. (0, _util.assert)(!this._fullRequestReader);
  49. this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler);
  50. return this._fullRequestReader;
  51. }
  52. }, {
  53. key: "getRangeReader",
  54. value: function getRangeReader(begin, end) {
  55. var reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler);
  56. this._rangeRequestReaders.push(reader);
  57. return reader;
  58. }
  59. }, {
  60. key: "cancelAllRequests",
  61. value: function cancelAllRequests(reason) {
  62. if (this._fullRequestReader) {
  63. this._fullRequestReader.cancel(reason);
  64. }
  65. var readers = this._rangeRequestReaders.slice(0);
  66. readers.forEach(function (reader) {
  67. reader.cancel(reason);
  68. });
  69. }
  70. }]);
  71. return PDFWorkerStream;
  72. }();
  73. exports.PDFWorkerStream = PDFWorkerStream;
  74. var PDFWorkerStreamReader =
  75. /*#__PURE__*/
  76. function () {
  77. function PDFWorkerStreamReader(msgHandler) {
  78. var _this = this;
  79. _classCallCheck(this, PDFWorkerStreamReader);
  80. this._msgHandler = msgHandler;
  81. this.onProgress = null;
  82. this._contentLength = null;
  83. this._isRangeSupported = false;
  84. this._isStreamingSupported = false;
  85. var readableStream = this._msgHandler.sendWithStream('GetReader');
  86. this._reader = readableStream.getReader();
  87. this._headersReady = this._msgHandler.sendWithPromise('ReaderHeadersReady').then(function (data) {
  88. _this._isStreamingSupported = data.isStreamingSupported;
  89. _this._isRangeSupported = data.isRangeSupported;
  90. _this._contentLength = data.contentLength;
  91. });
  92. }
  93. _createClass(PDFWorkerStreamReader, [{
  94. key: "read",
  95. value: function () {
  96. var _read = _asyncToGenerator(
  97. /*#__PURE__*/
  98. _regenerator["default"].mark(function _callee() {
  99. var _ref, value, done;
  100. return _regenerator["default"].wrap(function _callee$(_context) {
  101. while (1) {
  102. switch (_context.prev = _context.next) {
  103. case 0:
  104. _context.next = 2;
  105. return this._reader.read();
  106. case 2:
  107. _ref = _context.sent;
  108. value = _ref.value;
  109. done = _ref.done;
  110. if (!done) {
  111. _context.next = 7;
  112. break;
  113. }
  114. return _context.abrupt("return", {
  115. value: undefined,
  116. done: true
  117. });
  118. case 7:
  119. return _context.abrupt("return", {
  120. value: value.buffer,
  121. done: false
  122. });
  123. case 8:
  124. case "end":
  125. return _context.stop();
  126. }
  127. }
  128. }, _callee, this);
  129. }));
  130. function read() {
  131. return _read.apply(this, arguments);
  132. }
  133. return read;
  134. }()
  135. }, {
  136. key: "cancel",
  137. value: function cancel(reason) {
  138. this._reader.cancel(reason);
  139. }
  140. }, {
  141. key: "headersReady",
  142. get: function get() {
  143. return this._headersReady;
  144. }
  145. }, {
  146. key: "contentLength",
  147. get: function get() {
  148. return this._contentLength;
  149. }
  150. }, {
  151. key: "isStreamingSupported",
  152. get: function get() {
  153. return this._isStreamingSupported;
  154. }
  155. }, {
  156. key: "isRangeSupported",
  157. get: function get() {
  158. return this._isRangeSupported;
  159. }
  160. }]);
  161. return PDFWorkerStreamReader;
  162. }();
  163. var PDFWorkerStreamRangeReader =
  164. /*#__PURE__*/
  165. function () {
  166. function PDFWorkerStreamRangeReader(begin, end, msgHandler) {
  167. _classCallCheck(this, PDFWorkerStreamRangeReader);
  168. this._msgHandler = msgHandler;
  169. this.onProgress = null;
  170. var readableStream = this._msgHandler.sendWithStream('GetRangeReader', {
  171. begin: begin,
  172. end: end
  173. });
  174. this._reader = readableStream.getReader();
  175. }
  176. _createClass(PDFWorkerStreamRangeReader, [{
  177. key: "read",
  178. value: function () {
  179. var _read2 = _asyncToGenerator(
  180. /*#__PURE__*/
  181. _regenerator["default"].mark(function _callee2() {
  182. var _ref2, value, done;
  183. return _regenerator["default"].wrap(function _callee2$(_context2) {
  184. while (1) {
  185. switch (_context2.prev = _context2.next) {
  186. case 0:
  187. _context2.next = 2;
  188. return this._reader.read();
  189. case 2:
  190. _ref2 = _context2.sent;
  191. value = _ref2.value;
  192. done = _ref2.done;
  193. if (!done) {
  194. _context2.next = 7;
  195. break;
  196. }
  197. return _context2.abrupt("return", {
  198. value: undefined,
  199. done: true
  200. });
  201. case 7:
  202. return _context2.abrupt("return", {
  203. value: value.buffer,
  204. done: false
  205. });
  206. case 8:
  207. case "end":
  208. return _context2.stop();
  209. }
  210. }
  211. }, _callee2, this);
  212. }));
  213. function read() {
  214. return _read2.apply(this, arguments);
  215. }
  216. return read;
  217. }()
  218. }, {
  219. key: "cancel",
  220. value: function cancel(reason) {
  221. this._reader.cancel(reason);
  222. }
  223. }, {
  224. key: "isStreamingSupported",
  225. get: function get() {
  226. return false;
  227. }
  228. }]);
  229. return PDFWorkerStreamRangeReader;
  230. }();