blob: 9f33bbc10991e72d652bc761ba769e0f56202a30 [file] [log] [blame]
Blink Reformat4c46d092018-04-07 15:32:371// Copyright (c) 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
Paul Lewis3b8ed652020-01-08 12:47:594
5import {InspectorFrontendHostInstance} from './InspectorFrontendHost.js';
6
7export const ResourceLoader = {};
Blink Reformat4c46d092018-04-07 15:32:378
Tim van der Lippec96ccd92019-11-29 16:23:549let _lastStreamId = 0;
Tim van der Lippe50cfa9b2019-10-01 10:40:5810
Blink Reformat4c46d092018-04-07 15:32:3711/** @type {!Object.<number, !Common.OutputStream>} */
Tim van der Lippec96ccd92019-11-29 16:23:5412const _boundStreams = {};
Blink Reformat4c46d092018-04-07 15:32:3713
14/**
15 * @param {!Common.OutputStream} stream
16 * @return {number}
17 */
Tim van der Lippec96ccd92019-11-29 16:23:5418const _bindOutputStream = function(stream) {
Tim van der Lippe50cfa9b2019-10-01 10:40:5819 _boundStreams[++_lastStreamId] = stream;
20 return _lastStreamId;
Blink Reformat4c46d092018-04-07 15:32:3721};
22
23/**
24 * @param {number} id
25 */
Tim van der Lippec96ccd92019-11-29 16:23:5426const _discardOutputStream = function(id) {
Tim van der Lippe50cfa9b2019-10-01 10:40:5827 _boundStreams[id].close();
28 delete _boundStreams[id];
Blink Reformat4c46d092018-04-07 15:32:3729};
30
31/**
32 * @param {number} id
33 * @param {string} chunk
34 */
Tim van der Lippe50cfa9b2019-10-01 10:40:5835export const streamWrite = function(id, chunk) {
36 _boundStreams[id].write(chunk);
Blink Reformat4c46d092018-04-07 15:32:3737};
38
39/**
40 * @param {string} url
41 * @param {?Object.<string, string>} headers
Sigurd Schneider4c5f0c62019-12-11 12:24:0942 * @param {function(number, !Object.<string, string>, string, number)} callback
Blink Reformat4c46d092018-04-07 15:32:3743 */
Tim van der Lippe50cfa9b2019-10-01 10:40:5844export function load(url, headers, callback) {
Blink Reformat4c46d092018-04-07 15:32:3745 const stream = new Common.StringOutputStream();
Tim van der Lippe50cfa9b2019-10-01 10:40:5846 loadAsStream(url, headers, stream, mycallback);
Blink Reformat4c46d092018-04-07 15:32:3747
48 /**
49 * @param {number} statusCode
50 * @param {!Object.<string, string>} headers
Sigurd Schneider4c5f0c62019-12-11 12:24:0951 * @param {number} netError
Blink Reformat4c46d092018-04-07 15:32:3752 */
Sigurd Schneider4c5f0c62019-12-11 12:24:0953 function mycallback(statusCode, headers, netError) {
54 callback(statusCode, headers, stream.data(), netError);
Blink Reformat4c46d092018-04-07 15:32:3755 }
Tim van der Lippe50cfa9b2019-10-01 10:40:5856}
Blink Reformat4c46d092018-04-07 15:32:3757
58/**
59 * @param {string} url
60 * @param {?Object.<string, string>} headers
61 * @param {!Common.OutputStream} stream
Sigurd Schneider4c5f0c62019-12-11 12:24:0962 * @param {function(number, !Object.<string, string>, number)=} callback
Blink Reformat4c46d092018-04-07 15:32:3763 */
Tim van der Lippe50cfa9b2019-10-01 10:40:5864export const loadAsStream = function(url, headers, stream, callback) {
65 const streamId = _bindOutputStream(stream);
Blink Reformat4c46d092018-04-07 15:32:3766 const parsedURL = new Common.ParsedURL(url);
67 if (parsedURL.isDataURL()) {
68 loadXHR(url).then(dataURLDecodeSuccessful).catch(dataURLDecodeFailed);
69 return;
70 }
71
72 const rawHeaders = [];
73 if (headers) {
Tim van der Lippe1d6e57a2019-09-30 11:55:3474 for (const key in headers) {
Blink Reformat4c46d092018-04-07 15:32:3775 rawHeaders.push(key + ': ' + headers[key]);
Tim van der Lippe1d6e57a2019-09-30 11:55:3476 }
Blink Reformat4c46d092018-04-07 15:32:3777 }
Paul Lewis3b8ed652020-01-08 12:47:5978 InspectorFrontendHostInstance.loadNetworkResource(url, rawHeaders.join('\r\n'), streamId, finishedCallback);
Blink Reformat4c46d092018-04-07 15:32:3779
80 /**
81 * @param {!InspectorFrontendHostAPI.LoadNetworkResourceResult} response
82 */
83 function finishedCallback(response) {
Tim van der Lippe1d6e57a2019-09-30 11:55:3484 if (callback) {
Sigurd Schneider4c5f0c62019-12-11 12:24:0985 callback(response.statusCode, response.headers || {}, response.netError || 0);
Tim van der Lippe1d6e57a2019-09-30 11:55:3486 }
Tim van der Lippe50cfa9b2019-10-01 10:40:5887 _discardOutputStream(streamId);
Blink Reformat4c46d092018-04-07 15:32:3788 }
89
90 /**
91 * @param {string} text
92 */
93 function dataURLDecodeSuccessful(text) {
Tim van der Lippe50cfa9b2019-10-01 10:40:5894 streamWrite(streamId, text);
Blink Reformat4c46d092018-04-07 15:32:3795 finishedCallback(/** @type {!InspectorFrontendHostAPI.LoadNetworkResourceResult} */ ({statusCode: 200}));
96 }
97
98 function dataURLDecodeFailed() {
99 finishedCallback(/** @type {!InspectorFrontendHostAPI.LoadNetworkResourceResult} */ ({statusCode: 404}));
100 }
101};