Skip to content
This repository was archived by the owner on Jul 28, 2023. It is now read-only.

Commit 184065c

Browse files
committed
it works now
1 parent d3a4538 commit 184065c

File tree

5 files changed

+139
-78
lines changed

5 files changed

+139
-78
lines changed

front_end/ndb/FileSystem.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ Ndb.FileSystem = class extends Persistence.PlatformFileSystem {
7777
*/
7878
getMetadata(path) {
7979
// This method should never be called as long as we are matching using file urls.
80-
throw new Error('not implemented');
80+
// throw new Error('not implemented');
81+
return Promise.resolve('');
8182
}
8283

8384
/**

front_end/ndb/InspectorFrontendHostOverrides.js

+47-47
Original file line numberDiff line numberDiff line change
@@ -31,52 +31,52 @@
3131
}
3232
};
3333

34-
InspectorFrontendHost.sendMessageToBackend = async rawMessage => {
35-
const parsedMes = JSON.parse(rawMessage);
36-
if (parsedMes.method !== 'Network.getResponseBody')
37-
return;
38-
39-
const mes = await target.runtimeAgent().invoke_evaluate({
40-
expression: `process._sendMessage(${JSON.stringify(JSON.parse(rawMessage))})`,
41-
awaitPromise: true
42-
});
43-
44-
if (!mes.result) return;
45-
try {
46-
const [id, result] = mes.result.value;
47-
if (result) {
48-
InspectorFrontendHost.events.dispatchEventToListeners(
49-
InspectorFrontendHostAPI.Events.DispatchMessage,
50-
{
51-
id,
52-
result
53-
}
54-
);
55-
}
56-
} catch (err) {
57-
console.log(err);
58-
}
59-
};
60-
61-
while (true) {
62-
const message = await target.runtimeAgent().invoke_evaluate({
63-
expression: 'process._getNetworkMessages()',
64-
awaitPromise: true
65-
});
66-
67-
if (!message.result) return;
68-
const arrMessages = JSON.parse(message.result.value);
69-
70-
for (const mes of arrMessages) {
71-
const { type, payload } = mes;
72-
73-
if (type) {
74-
SDK._mainConnection._onMessage(JSON.stringify({
75-
method: type,
76-
params: payload
77-
}));
78-
}
79-
}
80-
}
34+
// InspectorFrontendHost.sendMessageToBackend = rawMessage => {
35+
// const parsedMes = JSON.parse(rawMessage);
36+
// if (parsedMes.method !== 'Network.getResponseBody')
37+
// return;
38+
//
39+
// const mes = await target.runtimeAgent().invoke_evaluate({
40+
// expression: `process._sendMessage(${JSON.stringify(JSON.parse(rawMessage))})`,
41+
// awaitPromise: true
42+
// });
43+
//
44+
// if (!mes.result) return;
45+
// try {
46+
// const [id, result] = mes.result.value;
47+
// if (result) {
48+
// InspectorFrontendHost.events.dispatchEventToListeners(
49+
// InspectorFrontendHostAPI.Events.DispatchMessage,
50+
// {
51+
// id,
52+
// result
53+
// }
54+
// );
55+
// }
56+
// } catch (err) {
57+
// console.log(err);
58+
// }
59+
// };
60+
//
61+
// while (true) {
62+
// const message = await target.runtimeAgent().invoke_evaluate({
63+
// expression: 'process._getNetworkMessages()',
64+
// awaitPromise: true
65+
// });
66+
//
67+
// if (!message.result) return;
68+
// const arrMessages = JSON.parse(message.result.value);
69+
//
70+
// for (const mes of arrMessages) {
71+
// const { type, payload } = mes;
72+
//
73+
// if (type) {
74+
// SDK._mainConnection._onMessage(JSON.stringify({
75+
// method: type,
76+
// params: payload
77+
// }));
78+
// }
79+
// }
80+
// }
8181

8282
})();

front_end/ndb/NdbMain.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -204,19 +204,20 @@ Ndb.NodeProcessManager = class extends Common.Object {
204204

205205
async detected(info, channel) {
206206
const connection = await Ndb.Connection.create(channel);
207-
const networkInterceptor = new Ndb.NetworkInterceptor();
208-
connection.addInterceptor(networkInterceptor);
209207
const target = this._targetManager.createTarget(
210208
info.id, userFriendlyName(info), SDK.Target.Type.Node,
211209
this._targetManager.targetById(info.ppid) || this._targetManager.mainTarget(), undefined, false, connection);
212-
networkInterceptor.setTarget(target);
213-
target[NdbSdk.connectionSymbol] = connection;
214210

215211
target.runtimeAgent().invoke_evaluate({
216212
expression: await Ndb.backend.httpMonkeyPatchingSource(),
217213
includeCommandLineAPI: true
218214
});
219215

216+
const networkInterceptor = new Ndb.NetworkInterceptor();
217+
connection.addInterceptor(networkInterceptor);
218+
networkInterceptor.setTarget(target);
219+
target[NdbSdk.connectionSymbol] = connection;
220+
220221
await this.addFileSystem(info.cwd, info.scriptName);
221222
if (info.scriptName) {
222223
const scriptURL = Common.ParsedURL.platformPathToURL(info.scriptName);

front_end/ndb/NetworkInterceptor.js

+76-21
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ Ndb.NetworkInterceptor = class extends Ndb.ConnectionInterceptor {
22
constructor() {
33
super();
44
this._buffer = [];
5+
this._cacheRequests = [];
56
}
67

78
setTarget(target) {
@@ -20,31 +21,85 @@ Ndb.NetworkInterceptor = class extends Ndb.ConnectionInterceptor {
2021
return false;
2122
}
2223

24+
setOnMessage(onMessage) {
25+
this._onMessage = onMessage;
26+
}
27+
28+
dispatchMessage(message) {
29+
if (this._onMessage) this._onMessage(message);
30+
}
31+
2332
disconnect() {
2433
this._target = null;
2534
}
2635

27-
_sendRawMessage(message) {
28-
if (this._target) {
29-
this._target.runtimeAgent().invoke_evaluate({
30-
expression: `process._sendNetworkCommand(${message})`
31-
});
32-
} else {
33-
this._buffer.push(message);
34-
}
35-
}
36+
_sendRawMessage(rawMessage) {}
3637

37-
async _listen() {
38-
while (this._target) {
39-
const {result: { value: messages }} = await this._target.runtimeAgent().invoke_evaluate({
40-
expression: `process._fetchNetworkMessages()`,
41-
awaitPromise: true,
42-
returnByValue: true
43-
});
44-
if (!messages || typeof messages !== 'array')
45-
continue;
46-
for (const message of messages)
47-
this.dispatchMessage(message);
48-
}
38+
_listen() {
39+
InspectorFrontendHost.sendMessageToBackend = rawMessage => {
40+
const message = JSON.parse(rawMessage);
41+
42+
const request = this._cacheRequests.filter(res => {
43+
if (
44+
res.type === 'Network.getResponseBody' &&
45+
res.payload.requestId === message.params.requestId
46+
)
47+
return res;
48+
})[0];
49+
50+
if (request) {
51+
InspectorFrontendHost.events.dispatchEventToListeners(
52+
InspectorFrontendHostAPI.Events.DispatchMessage,
53+
{
54+
id: message.id,
55+
result: {
56+
base64Encoded: true,
57+
body: request.payload.data
58+
}
59+
}
60+
);
61+
}
62+
};
63+
64+
// we need to setTimeout here because the httpMonkeyPatchingSource is loaded
65+
// after this script
66+
setTimeout(async() => {
67+
while (this._target) {
68+
try {
69+
const raw = await this._target
70+
.runtimeAgent()
71+
.invoke_evaluate({
72+
expression: `process._fetchNetworkMessages()`,
73+
awaitPromise: true,
74+
returnByValue: true
75+
});
76+
77+
const {
78+
result: { value: messages }
79+
} = raw;
80+
81+
if (!messages) return;
82+
83+
// messages is array-like
84+
const messagesArr = Array.from(JSON.parse(messages));
85+
86+
for (const message of messagesArr) {
87+
const { type, payload } = message;
88+
this._cacheRequests.push(message);
89+
90+
// this is on the way back, this way doesn't work
91+
if (type !== 'Network.getResponseBody') {
92+
// but this does
93+
SDK._mainConnection._onMessage(JSON.stringify({
94+
method: type,
95+
params: payload
96+
}));
97+
}
98+
}
99+
} catch (err) {
100+
console.log({ err });
101+
}
102+
}
103+
}, 0);
49104
}
50105
};

lib/preload/ndb/httpMonkeyPatching.js

+9-5
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ const getMineType = mimeType => {
3636
return mimeType;
3737
};
3838

39-
let cacheRequests = {};
39+
const cacheRequests = {};
4040
let id = 1;
4141
const getId = () => id++;
4242

43-
let messages = [];
43+
const messages = [];
4444
let messageAdded = null;
4545

4646
function reportMessage(message) {
@@ -51,19 +51,22 @@ function reportMessage(message) {
5151
}
5252
}
5353

54-
process._getNetworkMessages = async function() {
54+
process._fetchNetworkMessages = async function() {
5555
if (!messages.length)
5656
await new Promise(resolve => messageAdded = resolve);
5757
return JSON.stringify(messages.splice(0));
5858
};
5959

60-
process._sendMessage = async function(rawMessage) {
60+
process._sendNetworkCommand = async function(rawMessage) {
6161
return new Promise(resolve => {
62-
const message = rawMessage;
62+
const message = JSON.parse(rawMessage);
63+
console.log({ cacheRequests });
64+
console.log({ cacheRequests: cacheRequests[message.params.requestId] });
6365
if (!cacheRequests[message.params.requestId]) {
6466
resolve(JSON.stringify({}));
6567
} else {
6668
if (message.method === 'Network.getResponseBody') {
69+
console.log({ message });
6770
const { base64Encoded, data } = cacheRequests[message.params.requestId];
6871

6972
console.log({ cacheRequests });
@@ -142,6 +145,7 @@ const callbackWrapper = (callback, req) => res => {
142145
// Send the response back.
143146
reportMessage({ payload: payload, type: 'Network.responseReceived' });
144147
reportMessage({ payload: payload, type: 'Network.loadingFinished' });
148+
reportMessage({ payload: payload, type: 'Network.getResponseBody' });
145149
};
146150

147151
if (encoding === 'gzip' || encoding === 'x-gzip') {

0 commit comments

Comments
 (0)