| Index: sky/framework/inspector/inspector.sky
|
| diff --git a/sky/framework/inspector/inspector.sky b/sky/framework/inspector/inspector.sky
|
| index 6e73f78f1903cb044707fa46e7c19dd0d1c5709c..b5f3f12ef7d7fddf6f8b7f88dab0bc90dc799529 100644
|
| --- a/sky/framework/inspector/inspector.sky
|
| +++ b/sky/framework/inspector/inspector.sky
|
| @@ -16,18 +16,22 @@ function InspectorBackend(frontend) {
|
| this.agents = {
|
| Console: new ConsoleAgent(),
|
| DOM: domAgent,
|
| - Page: new PageAgent(),
|
| + Page: new PageAgent(this),
|
| Worker: new WorkerAgent(),
|
| Runtime: new RuntimeAgent(this),
|
| CSS: new CSSAgent(domAgent),
|
| IndexedDB: new IndexedDBAgent(),
|
| };
|
| this.missingNames_ = {};
|
| + this.unansweredMessages_ = [];
|
| }
|
|
|
| InspectorBackend.prototype = Object.create(
|
| inspector.InspectorBackend.stubClass.prototype);
|
|
|
| +InspectorBackend.prototype.ASYNC_RESPONSE = "ASYNC_RESPONSE";
|
| +InspectorBackend.prototype.MESSAGE_TIMEOUT_MS = 30000;
|
| +
|
| InspectorBackend.prototype.onConnect = function() {
|
| };
|
|
|
| @@ -41,12 +45,16 @@ InspectorBackend.prototype.logMissing_ = function(name) {
|
| console.log("InspectorBackend missing " + name);
|
| }
|
|
|
| -InspectorBackend.prototype.dispatch_ = function(descriptor, params) {
|
| +InspectorBackend.prototype.dispatch_ = function(descriptor, params, message_id) {
|
| var parsed = descriptor.split('.');
|
|
|
| var agentName = parsed[0];
|
| var methodName = parsed[1];
|
|
|
| + // Debugger is implemented in c++.
|
| + if (agentName == "Debugger")
|
| + return;
|
| +
|
| if (!(agentName in this.agents)) {
|
| this.logMissing_(agentName);
|
| return {};
|
| @@ -55,12 +63,12 @@ InspectorBackend.prototype.dispatch_ = function(descriptor, params) {
|
| var agent = this.agents[agentName];
|
|
|
| if (!(methodName in agent)) {
|
| - this.logMissing_(agentName + "." + methodName);
|
| + this.logMissing_(descriptor);
|
| return {};
|
| }
|
|
|
| try {
|
| - return agent[methodName](params);
|
| + return agent[methodName](params, message_id);
|
| } catch(ex) {
|
| console.log(descriptor + ": " + ex);
|
| }
|
| @@ -68,14 +76,34 @@ InspectorBackend.prototype.dispatch_ = function(descriptor, params) {
|
|
|
| InspectorBackend.prototype.onMessage = function(data) {
|
| var message = JSON.parse(data);
|
| - var result = this.dispatch_(message.method, message.params);
|
| + var result = this.dispatch_(message.method, message.params, message.id);
|
| + this.unansweredMessages_.push(message.id);
|
| + // FIXME: This magic return value is kinda hacky.
|
| + if (result != this.ASYNC_RESPONSE)
|
| + this.sendResponse(message.id, result);
|
| + else {
|
| + window.setTimeout(function(message_id) {
|
| + if (this.unansweredMessages_.indexOf(message_id) == -1)
|
| + return;
|
| + console.log("Error, failed to reply to " + descriptor
|
| + + " message id " + message_id);
|
| + }, this.MESSAGE_TIMEOUT_MS, this, message.id);
|
| + }
|
| +};
|
| +
|
| +InspectorBackend.prototype.sendResponse = function(message_id, result) {
|
| + var messageIndex = this.unansweredMessages_.indexOf(message_id);
|
| + if (messageIndex != -1)
|
| + this.unansweredMessages_.splice(messageIndex, 1);
|
| + else
|
| + console.log("Error, responding to unknown message id " + message_id);
|
| var response = {
|
| - id: message.id,
|
| + id: message_id,
|
| };
|
| if (typeof result !== "undefined")
|
| response.result = result;
|
| this.frontend.sendMessage(JSON.stringify(response));
|
| -};
|
| +}
|
|
|
| InspectorBackend.prototype.sendMessage = function(method, params) {
|
| var message = JSON.stringify({
|
|
|