Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: sky/framework/inspector/inspector.sky

Issue 727593004: Wire up the Inspector V8 Debugger (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Actually works Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <import src="/mojo/public/sky/connection.sky" as="connection" /> 1 <import src="/mojo/public/sky/connection.sky" as="connection" />
2 <import src="/mojo/public/sky/core.sky" as="core" /> 2 <import src="/mojo/public/sky/core.sky" as="core" />
3 <import src="/mojo/public/sky/support.sky" as="support" /> 3 <import src="/mojo/public/sky/support.sky" as="support" />
4 <import src="/sky/services/inspector/inspector.mojom.sky" as="inspector" /> 4 <import src="/sky/services/inspector/inspector.mojom.sky" as="inspector" />
5 <import src="console-agent.sky" as="ConsoleAgent" /> 5 <import src="console-agent.sky" as="ConsoleAgent" />
6 <import src="dom-agent.sky" as="DOMAgent" /> 6 <import src="dom-agent.sky" as="DOMAgent" />
7 <import src="page-agent.sky" as="PageAgent" /> 7 <import src="page-agent.sky" as="PageAgent" />
8 <import src="worker-agent.sky" as="WorkerAgent" /> 8 <import src="worker-agent.sky" as="WorkerAgent" />
9 <import src="runtime-agent.sky" as="RuntimeAgent" /> 9 <import src="runtime-agent.sky" as="RuntimeAgent" />
10 <import src="indexeddb-agent.sky" as="IndexedDBAgent" /> 10 <import src="indexeddb-agent.sky" as="IndexedDBAgent" />
11 <import src="css-agent.sky" as="CSSAgent" /> 11 <import src="css-agent.sky" as="CSSAgent" />
12 <script> 12 <script>
13 function InspectorBackend(frontend) { 13 function InspectorBackend(frontend) {
14 this.frontend = frontend; 14 this.frontend = frontend;
15 var domAgent = new DOMAgent(this); 15 var domAgent = new DOMAgent(this);
16 this.agents = { 16 this.agents = {
17 Console: new ConsoleAgent(), 17 Console: new ConsoleAgent(),
18 DOM: domAgent, 18 DOM: domAgent,
19 Page: new PageAgent(), 19 Page: new PageAgent(this),
20 Worker: new WorkerAgent(), 20 Worker: new WorkerAgent(),
21 Runtime: new RuntimeAgent(this), 21 Runtime: new RuntimeAgent(this),
22 CSS: new CSSAgent(domAgent), 22 CSS: new CSSAgent(domAgent),
23 IndexedDB: new IndexedDBAgent(), 23 IndexedDB: new IndexedDBAgent(),
24 }; 24 };
25 this.missingNames_ = {}; 25 this.missingNames_ = {};
26 this.unansweredMessages_ = [];
26 } 27 }
27 28
28 InspectorBackend.prototype = Object.create( 29 InspectorBackend.prototype = Object.create(
29 inspector.InspectorBackend.stubClass.prototype); 30 inspector.InspectorBackend.stubClass.prototype);
30 31
32 InspectorBackend.prototype.ASYNC_RESPONSE = "ASYNC_RESPONSE";
33 InspectorBackend.prototype.MESSAGE_TIMEOUT_MS = 30000;
34
31 InspectorBackend.prototype.onConnect = function() { 35 InspectorBackend.prototype.onConnect = function() {
32 }; 36 };
33 37
34 InspectorBackend.prototype.onDisconnect = function() { 38 InspectorBackend.prototype.onDisconnect = function() {
35 }; 39 };
36 40
37 InspectorBackend.prototype.logMissing_ = function(name) { 41 InspectorBackend.prototype.logMissing_ = function(name) {
38 if (name in this.missingNames_) 42 if (name in this.missingNames_)
39 return; 43 return;
40 this.missingNames_[name] = true; 44 this.missingNames_[name] = true;
41 console.log("InspectorBackend missing " + name); 45 console.log("InspectorBackend missing " + name);
42 } 46 }
43 47
44 InspectorBackend.prototype.dispatch_ = function(descriptor, params) { 48 InspectorBackend.prototype.dispatch_ = function(descriptor, params, message_id) {
45 var parsed = descriptor.split('.'); 49 var parsed = descriptor.split('.');
46 50
47 var agentName = parsed[0]; 51 var agentName = parsed[0];
48 var methodName = parsed[1]; 52 var methodName = parsed[1];
49 53
54 // Debugger is implemented in c++.
55 if (agentName == "Debugger")
56 return;
57
50 if (!(agentName in this.agents)) { 58 if (!(agentName in this.agents)) {
51 this.logMissing_(agentName); 59 this.logMissing_(agentName);
52 return {}; 60 return {};
53 } 61 }
54 62
55 var agent = this.agents[agentName]; 63 var agent = this.agents[agentName];
56 64
57 if (!(methodName in agent)) { 65 if (!(methodName in agent)) {
58 this.logMissing_(agentName + "." + methodName); 66 this.logMissing_(descriptor);
59 return {}; 67 return {};
60 } 68 }
61 69
62 try { 70 try {
63 return agent[methodName](params); 71 return agent[methodName](params, message_id);
64 } catch(ex) { 72 } catch(ex) {
65 console.log(descriptor + ": " + ex); 73 console.log(descriptor + ": " + ex);
66 } 74 }
67 }; 75 };
68 76
69 InspectorBackend.prototype.onMessage = function(data) { 77 InspectorBackend.prototype.onMessage = function(data) {
70 var message = JSON.parse(data); 78 var message = JSON.parse(data);
71 var result = this.dispatch_(message.method, message.params); 79 var result = this.dispatch_(message.method, message.params, message.id);
80 this.unansweredMessages_.push(message.id);
81 // FIXME: This magic return value is kinda hacky.
82 if (result != this.ASYNC_RESPONSE)
83 this.sendResponse(message.id, result);
84 else {
85 window.setTimeout(function(message_id) {
86 if (this.unansweredMessages_.indexOf(message_id) == -1)
87 return;
88 console.log("Error, failed to reply to " + descriptor
89 + " message id " + message_id);
90 }, this.MESSAGE_TIMEOUT_MS, this, message.id);
91 }
92 };
93
94 InspectorBackend.prototype.sendResponse = function(message_id, result) {
95 var messageIndex = this.unansweredMessages_.indexOf(message_id);
96 if (messageIndex != -1)
97 this.unansweredMessages_.splice(messageIndex, 1);
98 else
99 console.log("Error, responding to unknown message id " + message_id);
72 var response = { 100 var response = {
73 id: message.id, 101 id: message_id,
74 }; 102 };
75 if (typeof result !== "undefined") 103 if (typeof result !== "undefined")
76 response.result = result; 104 response.result = result;
77 this.frontend.sendMessage(JSON.stringify(response)); 105 this.frontend.sendMessage(JSON.stringify(response));
78 }; 106 }
79 107
80 InspectorBackend.prototype.sendMessage = function(method, params) { 108 InspectorBackend.prototype.sendMessage = function(method, params) {
81 var message = JSON.stringify({ 109 var message = JSON.stringify({
82 method: method, 110 method: method,
83 params: params, 111 params: params,
84 }); 112 });
85 this.frontend.sendMessage(message); 113 this.frontend.sendMessage(message);
86 }; 114 };
87 115
88 var frontendHandle = internals.connectToService( 116 var frontendHandle = internals.connectToService(
89 "mojo:sky_inspector_server", inspector.InspectorFrontend.name); 117 "mojo:sky_inspector_server", inspector.InspectorFrontend.name);
90 window.frontendConnection = new connection.Connection( 118 window.frontendConnection = new connection.Connection(
91 frontendHandle, 119 frontendHandle,
92 InspectorBackend, 120 InspectorBackend,
93 inspector.InspectorFrontend.proxyClass); 121 inspector.InspectorFrontend.proxyClass);
94 122
95 window.frontend = frontendConnection.remote; 123 window.frontend = frontendConnection.remote;
96 </script> 124 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698