OLD | NEW |
| (Empty) |
1 <import src="/gen/mojo/public/interfaces/application/shell.mojom.sky" as="shellM
ojom" /> | |
2 <import src="/gen/mojo/public/sky/connection.sky" as="connection" /> | |
3 <import src="/gen/mojo/public/sky/core.sky" as="core" /> | |
4 <import src="/gen/mojo/public/sky/support.sky" as="support" /> | |
5 <import src="/gen/mojo/services/public/sky/shell.sky" as="shell" /> | |
6 <import src="/gen/sky/services/inspector/inspector.mojom.sky" as="inspector" /> | |
7 <import src="console-agent.sky" as="ConsoleAgent" /> | |
8 <import src="css-agent.sky" as="CSSAgent" /> | |
9 <import src="dom-agent.sky" as="DOMAgent" /> | |
10 <import src="indexeddb-agent.sky" as="IndexedDBAgent" /> | |
11 <import src="page-agent.sky" as="PageAgent" /> | |
12 <import src="runtime-agent.sky" as="RuntimeAgent" /> | |
13 <import src="worker-agent.sky" as="WorkerAgent" /> | |
14 <script> | |
15 class InspectorBackend extends inspector.InspectorBackend.stubClass { | |
16 constructor(frontend) { | |
17 var domAgent = new DOMAgent(this); | |
18 this.agents = { | |
19 Console: new ConsoleAgent(), | |
20 DOM: domAgent, | |
21 Page: new PageAgent(this), | |
22 Worker: new WorkerAgent(), | |
23 Runtime: new RuntimeAgent(this), | |
24 CSS: new CSSAgent(domAgent), | |
25 IndexedDB: new IndexedDBAgent(), | |
26 }; | |
27 this.missingNames_ = {}; | |
28 this.unansweredMessages_ = []; | |
29 | |
30 this.IMPLEMENTED_IN_CPP = "IMPLEMENTED_IN_CPP"; | |
31 this.ASYNC_RESPONSE = "ASYNC_RESPONSE"; | |
32 this.MESSAGE_TIMEOUT_MS = 30000; | |
33 | |
34 Object.preventExtensions(this); | |
35 } | |
36 | |
37 onConnect() { | |
38 } | |
39 | |
40 onDisconnect() { | |
41 } | |
42 | |
43 logMissing_(name) { | |
44 if (name in this.missingNames_) | |
45 return; | |
46 this.missingNames_[name] = true; | |
47 console.log("InspectorBackend missing " + name); | |
48 } | |
49 | |
50 dispatch_(descriptor, params, message_id) { | |
51 var parsed = descriptor.split('.'); | |
52 | |
53 var agentName = parsed[0]; | |
54 var methodName = parsed[1]; | |
55 | |
56 // Debugger is implemented in c++. | |
57 if (agentName == "Debugger") | |
58 return this.IMPLEMENTED_IN_CPP; | |
59 | |
60 if (!(agentName in this.agents)) { | |
61 this.logMissing_(agentName); | |
62 return {}; | |
63 } | |
64 | |
65 var agent = this.agents[agentName]; | |
66 | |
67 if (!(methodName in agent)) { | |
68 this.logMissing_(descriptor); | |
69 return {}; | |
70 } | |
71 | |
72 try { | |
73 return agent[methodName](params, message_id); | |
74 } catch(ex) { | |
75 console.log(descriptor + ": " + ex); | |
76 } | |
77 } | |
78 | |
79 onMessage(data) { | |
80 var message = JSON.parse(data); | |
81 var result = this.dispatch_(message.method, message.params, message.id); | |
82 if (result === this.IMPLEMENTED_IN_CPP) | |
83 return; | |
84 this.unansweredMessages_.push(message.id); | |
85 // FIXME: This magic return value is kinda hacky. | |
86 if (result !== this.ASYNC_RESPONSE) | |
87 this.sendResponse(message.id, result); | |
88 else { | |
89 window.setTimeout(function() { | |
90 if (this.unansweredMessages_.indexOf(message.id) == -1) | |
91 return; | |
92 console.log("Error, failed to reply to message id " + message.id); | |
93 }.bind(this), this.MESSAGE_TIMEOUT_MS); | |
94 } | |
95 } | |
96 | |
97 sendResponse(message_id, result) { | |
98 var messageIndex = this.unansweredMessages_.indexOf(message_id); | |
99 if (messageIndex != -1) | |
100 this.unansweredMessages_.splice(messageIndex, 1); | |
101 else | |
102 console.log("Error, responding to unknown message id " + message_id); | |
103 var response = { | |
104 id: message_id, | |
105 }; | |
106 if (typeof result !== "undefined") | |
107 response.result = result; | |
108 window.frontend.sendMessage(JSON.stringify(response)); | |
109 } | |
110 | |
111 sendMessage(method, params) { | |
112 var message = JSON.stringify({ | |
113 method: method, | |
114 params: params, | |
115 }); | |
116 window.frontend.sendMessage(message); | |
117 } | |
118 } | |
119 | |
120 (function() { | |
121 var shellHandle = internals.takeShellProxyHandle(); | |
122 var shellProxy = connection.bindHandleToProxy(shellHandle, shellMojom.Shell); | |
123 var myShell = new shell.Shell(shellProxy) | |
124 var tracingApp = myShell.connectToApplication("mojo:sky_inspector_server"); | |
125 tracingApp.provideService(inspector.InspectorBackend, InspectorBackend); | |
126 | |
127 window.frontend = tracingApp.requestService(inspector.InspectorFrontend); | |
128 })(); | |
129 </script> | |
OLD | NEW |