blob: 100b2953015ba6d81040e7b86c684b12af3143bf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
// Copyright 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview Keeps the websocket connection and allows sending messages
*/
const Connection = {
initialize() {
const connect = document.querySelector('#connect');
connect.addEventListener('click', () => {
var url = document.querySelector('#url').value;
if (!url) {
var http_requester = new XMLHttpRequest();
// Sync request to avoid complexity but is poor form.
try {
http_requester.open("GET", location.origin + '/discover.html', false);
http_requester.send(null);
}
catch (req_error) {
window.alert("Visual Debugger local server is inaccessible. \n" +
"Please launch the server with command:\n " +
" ./launchdebugger {app_port} {remote_port} \n" +
" remote_port defaults to 7777 \n" +
" corresponds to the chromium command line\n " +
" --remote-debugging-port=7777 \n" +
" app_port defaults to 8777. Currently app_port=" + location.port);
console.log(req_error);
return;
}
if (http_requester.status != 200) {
window.alert("Server reports error=" + http_requester.responseText);
return;
}
else {
var discover_json = JSON.parse(http_requester.responseText);
// console.log(discover_json);
url = discover_json.webSocketDebuggerUrl;
}
}
// Create WebSocket connection.
this.socket = new WebSocket(url);
const status = document.querySelector('#connection-status');
const connect = document.querySelector('#connect');
const disconnect = document.querySelector('#disconnect');
this.next_command_id = 1;
// Connection opened
this.socket.addEventListener('open', (event) => {
const message = {};
message['method'] = 'VisualDebugger.startStream';
this.sendMessage(message)
connect.setAttribute('disabled', true);
disconnect.removeAttribute('disabled');
status.classList.remove('disconnected');
});
// Listen for messages
this.socket.addEventListener('message', (event) => {
const json = JSON.parse(event.data);
// We now use devtool events so our frame data is packed
// into the args of the method.
if (json.method === "VisualDebugger.frameResponse") {
const frame_json = json.params.frameData;
if (frame_json.connection == "ok") {
Filter.sendStreamFilters();
} else if (frame_json.frame && frame_json.drawcalls) {
processIncomingFrame(frame_json);
}
}
else if (json.error) {
window.alert("Visual Debugger could not start stream.\n " +
"please add 'use_viz_debugger=true' to args.gn");
console.log(json.error);
this.socket.close();
}
});
this.socket.addEventListener('close', () => {
connect.removeAttribute('disabled');
disconnect.setAttribute('disabled', true);
status.classList.add('disconnected');
});
disconnect.addEventListener('click', () => {
const message = {};
message['method'] = 'VisualDebugger.stopStream';
this.sendMessage(message)
this.socket.close();
});
});
},
sendMessage(message) {
if (!this.socket)
return;
message['id'] = this.next_command_id++;
this.socket.send(JSON.stringify(message));
}
};
|