Added: trunk/LayoutTests/inspector/inspector-backend-commands-generation-expected.txt (0 => 144722)
--- trunk/LayoutTests/inspector/inspector-backend-commands-generation-expected.txt (rev 0)
+++ trunk/LayoutTests/inspector/inspector-backend-commands-generation-expected.txt 2013-03-05 06:12:18 UTC (rev 144722)
@@ -0,0 +1,7 @@
+Tests correctness of code generated by InspectorBackend.
+
+InspectorBackend.registerEnum("Page.ResourceType", {Document: "Document", XHR: "XHR", ConsoleAPI: "console-api", Other: "other"});
+InspectorBackend.registerCommand("Page.addScriptToEvaluateOnLoad", [{"name": "scriptSource", "type": "string", "optional": false}], ["identifier"]);
+InspectorBackend.registerEvent("Page.domContentEventFired", ["timestamp"]);
+InspectorBackend.registerPageDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "Page");
+
Added: trunk/LayoutTests/inspector/inspector-backend-commands-generation.html (0 => 144722)
--- trunk/LayoutTests/inspector/inspector-backend-commands-generation.html (rev 0)
+++ trunk/LayoutTests/inspector/inspector-backend-commands-generation.html 2013-03-05 06:12:18 UTC (rev 144722)
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<script src=""
+<script>
+function test()
+{
+ var inspectorJson = {"domains": [{
+ "domain": "Page",
+ "types": [{
+ "id": "ResourceType",
+ "type": "string",
+ "enum": ["Document", "XHR", "console-api", "other"]
+ }],
+ "commands": [{
+ "name": "addScriptToEvaluateOnLoad",
+ "parameters": [
+ {"name": "scriptSource", "type": "string"}
+ ],
+ "returns": [
+ {"name": "identifier", "type": "string"}
+ ]
+ }],
+ "events": [{
+ "name": "domContentEventFired",
+ "parameters": [
+ {"name": "timestamp", "type": "number"}
+ ]
+ }]
+ }]};
+ var commands = InspectorBackendClass._generateCommands(inspectorJson);
+ InspectorTest.addResult(commands);
+ InspectorTest.completeTest();
+}
+</script>
+</head>
+<body _onload_="runTest()">
+<p>Tests correctness of code generated by InspectorBackend.</p>
+</body>
+</html>
Modified: trunk/Source/WebCore/inspector/front-end/InspectorBackend.js (144721 => 144722)
--- trunk/Source/WebCore/inspector/front-end/InspectorBackend.js 2013-03-05 06:09:40 UTC (rev 144721)
+++ trunk/Source/WebCore/inspector/front-end/InspectorBackend.js 2013-03-05 06:12:18 UTC (rev 144722)
@@ -56,7 +56,7 @@
callback.methodName = method;
if (this.dumpInspectorTimeStats)
callback.sendRequestTime = Date.now();
-
+
return callbackId;
},
@@ -280,101 +280,110 @@
var xhr = new XMLHttpRequest();
xhr.open("GET", jsonUrl, false);
xhr.send(null);
-
+
var schema = JSON.parse(xhr.responseText);
- var jsTypes = { integer: "number", array: "object" };
- var rawTypes = {};
-
- var domains = schema["domains"];
- for (var i = 0; i < domains.length; ++i) {
- var domain = domains[i];
- for (var j = 0; domain.types && j < domain.types.length; ++j) {
- var type = domain.types[j];
- rawTypes[domain.domain + "." + type.id] = jsTypes[type.type] || type.type;
- }
+ var code = InspectorBackendClass._generateCommands(schema);
+ eval(code);
+ }
+}
+
+/**
+ * @param {*} schema
+ * @return {string}
+ */
+InspectorBackendClass._generateCommands = function(schema) {
+ var jsTypes = { integer: "number", array: "object" };
+ var rawTypes = {};
+ var result = [];
+
+ var domains = schema["domains"] || [];
+ for (var i = 0; i < domains.length; ++i) {
+ var domain = domains[i];
+ for (var j = 0; domain.types && j < domain.types.length; ++j) {
+ var type = domain.types[j];
+ rawTypes[domain.domain + "." + type.id] = jsTypes[type.type] || type.type;
}
+ }
- function toUpperCase(groupIndex, group0, group1)
- {
- return [group0, group1][groupIndex].toUpperCase();
+ function toUpperCase(groupIndex, group0, group1)
+ {
+ return [group0, group1][groupIndex].toUpperCase();
+ }
+ function generateEnum(enumName, items)
+ {
+ var members = []
+ for (var m = 0; m < items.length; ++m) {
+ var value = items[m];
+ var name = value.replace(/-(\w)/g, toUpperCase.bind(null, 1)).toTitleCase();
+ name = name.replace(/HTML|XML|WML|API/ig, toUpperCase.bind(null, 0));
+ members.push(name + ": \"" + value +"\"");
}
- function generateEnum(enumName, items)
- {
- var members = []
- for (var m = 0; m < items.length; ++m) {
- var value = items[m];
- var name = value.replace(/-(\w)/g, toUpperCase.bind(null, 1)).toTitleCase();
- name = name.replace(/HTML|XML|WML|API/ig, toUpperCase.bind(null, 0));
- members.push(name + ": \"" + value +"\"");
+ return "InspectorBackend.registerEnum(\"" + enumName + "\", {" + members.join(", ") + "});";
+ }
+
+ for (var i = 0; i < domains.length; ++i) {
+ var domain = domains[i];
+
+ var types = domain["types"] || [];
+ for (var j = 0; j < types.length; ++j) {
+ var type = types[j];
+ if ((type["type"] === "string") && type["enum"])
+ result.push(generateEnum(domain.domain + "." + type.id, type["enum"]));
+ else if (type["type"] === "object") {
+ var properties = type["properties"] || [];
+ for (var k = 0; k < properties.length; ++k) {
+ var property = properties[k];
+ if ((property["type"] === "string") && property["enum"])
+ result.push(generateEnum(domain.domain + "." + type.id + property["name"].toTitleCase(), property["enum"]));
+ }
}
- return "InspectorBackend.registerEnum(\"" + enumName + "s\", {" + members.join(", ") + "});\n";
}
-
- var result = [];
- for (var i = 0; i < domains.length; ++i) {
- var domain = domains[i];
- var types = domain["types"] || [];
- for (var j = 0; j < types.length; ++j) {
- var type = types[j];
- if ((type["type"] === "string") && type["enum"])
- result.push(generateEnum(domain.domain + "." + type.id, type["enum"]));
- else if (type["type"] === "object") {
- var properties = type["properties"] || [];
- for (var k = 0; k < properties.length; ++k) {
- var property = properties[k];
- if ((property["type"] === "string") && property["enum"])
- result.push(generateEnum(domain.domain + "." + type.id + property["name"].toTitleCase(), property["enum"]));
- }
+ var commands = domain["commands"] || [];
+ for (var j = 0; j < commands.length; ++j) {
+ var command = commands[j];
+ var parameters = command["parameters"];
+ var paramsText = [];
+ for (var k = 0; parameters && k < parameters.length; ++k) {
+ var parameter = parameters[k];
+
+ var type;
+ if (parameter.type)
+ type = jsTypes[parameter.type] || parameter.type;
+ else {
+ var ref = parameter["$ref"];
+ if (ref.indexOf(".") !== -1)
+ type = rawTypes[ref];
+ else
+ type = rawTypes[domain.domain + "." + ref];
}
+
+ var text = "{\"name\": \"" + parameter.name + "\", \"type\": \"" + type + "\", \"optional\": " + (parameter.optional ? "true" : "false") + "}";
+ paramsText.push(text);
}
- var commands = domain["commands"] || [];
- for (var j = 0; j < commands.length; ++j) {
- var command = commands[j];
- var parameters = command["parameters"];
- var paramsText = [];
- for (var k = 0; parameters && k < parameters.length; ++k) {
- var parameter = parameters[k];
-
- var type;
- if (parameter.type)
- type = jsTypes[parameter.type] || parameter.type;
- else {
- var ref = parameter["$ref"];
- if (ref.indexOf(".") !== -1)
- type = rawTypes[ref];
- else
- type = rawTypes[domain.domain + "." + ref];
- }
-
- var text = "{\"name\": \"" + parameter.name + "\", \"type\": \"" + type + "\", \"optional\": " + (parameter.optional ? "true" : "false") + "}";
- paramsText.push(text);
- }
-
- var returnsText = [];
- var returns = command["returns"] || [];
- for (var k = 0; k < returns.length; ++k) {
- var parameter = returns[k];
- returnsText.push("\"" + parameter.name + "\"");
- }
- result.push("InspectorBackend.registerCommand(\"" + domain.domain + "." + command.name + "\", [" + paramsText.join(", ") + "], [" + returnsText.join(", ") + "]);");
+ var returnsText = [];
+ var returns = command["returns"] || [];
+ for (var k = 0; k < returns.length; ++k) {
+ var parameter = returns[k];
+ returnsText.push("\"" + parameter.name + "\"");
}
-
- for (var j = 0; domain.events && j < domain.events.length; ++j) {
- var event = domain.events[j];
- var paramsText = [];
- for (var k = 0; event.parameters && k < event.parameters.length; ++k) {
- var parameter = event.parameters[k];
- paramsText.push("\"" + parameter.name + "\"");
- }
- result.push("InspectorBackend.registerEvent(\"" + domain.domain + "." + event.name + "\", [" + paramsText.join(", ") + "]);");
+ result.push("InspectorBackend.registerCommand(\"" + domain.domain + "." + command.name + "\", [" + paramsText.join(", ") + "], [" + returnsText.join(", ") + "]);");
+ }
+
+ for (var j = 0; domain.events && j < domain.events.length; ++j) {
+ var event = domain.events[j];
+ var paramsText = [];
+ for (var k = 0; event.parameters && k < event.parameters.length; ++k) {
+ var parameter = event.parameters[k];
+ paramsText.push("\"" + parameter.name + "\"");
}
-
- result.push("InspectorBackend.register" + domain.domain + "Dispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, \"" + domain.domain + "\");");
+ result.push("InspectorBackend.registerEvent(\"" + domain.domain + "." + event.name + "\", [" + paramsText.join(", ") + "]);");
}
- eval(result.join("\n"));
+
+ result.push("InspectorBackend.register" + domain.domain + "Dispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, \"" + domain.domain + "\");");
}
+ return result.join("\n");
}
InspectorBackend = new InspectorBackendClass();