OLD | NEW |
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | |
5 // This should be executed immediately after InspectorBackend and InspectorBacke
ndCommands | 4 // This should be executed immediately after InspectorBackend and InspectorBacke
ndCommands |
6 | 5 |
7 WebInspector.InspectorBackendHostedMode = {}; | 6 WebInspector.InspectorBackendHostedMode = {}; |
8 | 7 |
9 WebInspector.InspectorBackendHostedMode.loadFromJSONIfNeeded = function() | 8 WebInspector.InspectorBackendHostedMode.loadFromJSONIfNeeded = function() { |
10 { | 9 if (InspectorBackend.isInitialized()) |
11 if (InspectorBackend.isInitialized()) | 10 return; |
12 return; | |
13 | 11 |
14 for (var url of Object.keys(Runtime.cachedResources)) { | 12 for (var url of Object.keys(Runtime.cachedResources)) { |
15 if (url.indexOf("protocol.json") !== -1) { | 13 if (url.indexOf('protocol.json') !== -1) { |
16 var protocol = Runtime.cachedResources[url]; | 14 var protocol = Runtime.cachedResources[url]; |
17 var code = WebInspector.InspectorBackendHostedMode.generateCommands(
JSON.parse(protocol)); | 15 var code = WebInspector.InspectorBackendHostedMode.generateCommands(JSON.p
arse(protocol)); |
18 eval(code); | 16 eval(code); |
19 } | |
20 } | 17 } |
| 18 } |
21 }; | 19 }; |
22 | 20 |
23 /** | 21 /** |
24 * @param {*} schema | 22 * @param {*} schema |
25 * @return {string} | 23 * @return {string} |
26 */ | 24 */ |
27 WebInspector.InspectorBackendHostedMode.generateCommands = function(schema) | 25 WebInspector.InspectorBackendHostedMode.generateCommands = function(schema) { |
28 { | 26 var jsTypes = {integer: 'number', array: 'object'}; |
29 var jsTypes = { integer: "number", array: "object" }; | 27 var rawTypes = {}; |
30 var rawTypes = {}; | 28 var result = []; |
31 var result = []; | |
32 | 29 |
33 var domains = schema["domains"] || []; | 30 var domains = schema['domains'] || []; |
34 for (var i = 0; i < domains.length; ++i) { | 31 for (var i = 0; i < domains.length; ++i) { |
35 var domain = domains[i]; | 32 var domain = domains[i]; |
36 for (var j = 0; domain.types && j < domain.types.length; ++j) { | 33 for (var j = 0; domain.types && j < domain.types.length; ++j) { |
37 var type = domain.types[j]; | 34 var type = domain.types[j]; |
38 rawTypes[domain.domain + "." + type.id] = jsTypes[type.type] || type
.type; | 35 rawTypes[domain.domain + '.' + type.id] = jsTypes[type.type] || type.type; |
| 36 } |
| 37 } |
| 38 |
| 39 function toUpperCase(groupIndex, group0, group1) { |
| 40 return [group0, group1][groupIndex].toUpperCase(); |
| 41 } |
| 42 function generateEnum(enumName, items) { |
| 43 var members = []; |
| 44 for (var m = 0; m < items.length; ++m) { |
| 45 var value = items[m]; |
| 46 var name = value; |
| 47 var prefix = ''; |
| 48 if (name[0] === '-') { |
| 49 prefix = 'Negative'; |
| 50 name = name.substring(1); |
| 51 } |
| 52 name = name.replace(/-(\w)/g, toUpperCase.bind(null, 1)).toTitleCase(); |
| 53 name = name.replace(/HTML|XML|WML|API/ig, toUpperCase.bind(null, 0)); |
| 54 members.push(prefix + name + ': "' + value + '"'); |
| 55 } |
| 56 return 'InspectorBackend.registerEnum("' + enumName + '", {' + members.join(
', ') + '});'; |
| 57 } |
| 58 |
| 59 for (var i = 0; i < domains.length; ++i) { |
| 60 var domain = domains[i]; |
| 61 |
| 62 var types = domain['types'] || []; |
| 63 for (var j = 0; j < types.length; ++j) { |
| 64 var type = types[j]; |
| 65 if ((type['type'] === 'string') && type['enum']) |
| 66 result.push(generateEnum(domain.domain + '.' + type.id, type['enum'])); |
| 67 else if (type['type'] === 'object') { |
| 68 var properties = type['properties'] || []; |
| 69 for (var k = 0; k < properties.length; ++k) { |
| 70 var property = properties[k]; |
| 71 if ((property['type'] === 'string') && property['enum']) |
| 72 result.push(generateEnum(domain.domain + '.' + type.id + property['n
ame'].toTitleCase(), property['enum'])); |
39 } | 73 } |
| 74 } |
40 } | 75 } |
41 | 76 |
42 function toUpperCase(groupIndex, group0, group1) | 77 var commands = domain['commands'] || []; |
43 { | 78 for (var j = 0; j < commands.length; ++j) { |
44 return [group0, group1][groupIndex].toUpperCase(); | 79 var command = commands[j]; |
45 } | 80 var parameters = command['parameters']; |
46 function generateEnum(enumName, items) | 81 var paramsText = []; |
47 { | 82 for (var k = 0; parameters && k < parameters.length; ++k) { |
48 var members = []; | 83 var parameter = parameters[k]; |
49 for (var m = 0; m < items.length; ++m) { | 84 |
50 var value = items[m]; | 85 var type; |
51 var name = value; | 86 if (parameter.type) |
52 var prefix = ""; | 87 type = jsTypes[parameter.type] || parameter.type; |
53 if (name[0] === "-") { | 88 else { |
54 prefix = "Negative"; | 89 var ref = parameter['$ref']; |
55 name = name.substring(1); | 90 if (ref.indexOf('.') !== -1) |
56 } | 91 type = rawTypes[ref]; |
57 name = name.replace(/-(\w)/g, toUpperCase.bind(null, 1)).toTitleCase
(); | 92 else |
58 name = name.replace(/HTML|XML|WML|API/ig, toUpperCase.bind(null, 0))
; | 93 type = rawTypes[domain.domain + '.' + ref]; |
59 members.push(prefix + name + ": \"" + value + "\""); | |
60 } | 94 } |
61 return "InspectorBackend.registerEnum(\"" + enumName + "\", {" + members
.join(", ") + "});"; | 95 |
| 96 var text = '{"name": "' + parameter.name + '", "type": "' + type + '", "
optional": ' + |
| 97 (parameter.optional ? 'true' : 'false') + '}'; |
| 98 paramsText.push(text); |
| 99 } |
| 100 |
| 101 var returnsText = []; |
| 102 var returns = command['returns'] || []; |
| 103 for (var k = 0; k < returns.length; ++k) { |
| 104 var parameter = returns[k]; |
| 105 returnsText.push('"' + parameter.name + '"'); |
| 106 } |
| 107 var hasErrorData = String(Boolean(command.error)); |
| 108 result.push( |
| 109 'InspectorBackend.registerCommand("' + domain.domain + '.' + command.n
ame + '", [' + paramsText.join(', ') + |
| 110 '], [' + returnsText.join(', ') + '], ' + hasErrorData + ');'); |
62 } | 111 } |
63 | 112 |
64 for (var i = 0; i < domains.length; ++i) { | 113 for (var j = 0; domain.events && j < domain.events.length; ++j) { |
65 var domain = domains[i]; | 114 var event = domain.events[j]; |
66 | 115 var paramsText = []; |
67 var types = domain["types"] || []; | 116 for (var k = 0; event.parameters && k < event.parameters.length; ++k) { |
68 for (var j = 0; j < types.length; ++j) { | 117 var parameter = event.parameters[k]; |
69 var type = types[j]; | 118 paramsText.push('"' + parameter.name + '"'); |
70 if ((type["type"] === "string") && type["enum"]) | 119 } |
71 result.push(generateEnum(domain.domain + "." + type.id, type["en
um"])); | 120 result.push( |
72 else if (type["type"] === "object") { | 121 'InspectorBackend.registerEvent("' + domain.domain + '.' + event.name
+ '", [' + paramsText.join(', ') + |
73 var properties = type["properties"] || []; | 122 ']);'); |
74 for (var k = 0; k < properties.length; ++k) { | |
75 var property = properties[k]; | |
76 if ((property["type"] === "string") && property["enum"]) | |
77 result.push(generateEnum(domain.domain + "." + type.id +
property["name"].toTitleCase(), property["enum"])); | |
78 } | |
79 } | |
80 } | |
81 | |
82 var commands = domain["commands"] || []; | |
83 for (var j = 0; j < commands.length; ++j) { | |
84 var command = commands[j]; | |
85 var parameters = command["parameters"]; | |
86 var paramsText = []; | |
87 for (var k = 0; parameters && k < parameters.length; ++k) { | |
88 var parameter = parameters[k]; | |
89 | |
90 var type; | |
91 if (parameter.type) | |
92 type = jsTypes[parameter.type] || parameter.type; | |
93 else { | |
94 var ref = parameter["$ref"]; | |
95 if (ref.indexOf(".") !== -1) | |
96 type = rawTypes[ref]; | |
97 else | |
98 type = rawTypes[domain.domain + "." + ref]; | |
99 } | |
100 | |
101 var text = "{\"name\": \"" + parameter.name + "\", \"type\": \""
+ type + "\", \"optional\": " + (parameter.optional ? "true" : "false") + "}"; | |
102 paramsText.push(text); | |
103 } | |
104 | |
105 var returnsText = []; | |
106 var returns = command["returns"] || []; | |
107 for (var k = 0; k < returns.length; ++k) { | |
108 var parameter = returns[k]; | |
109 returnsText.push("\"" + parameter.name + "\""); | |
110 } | |
111 var hasErrorData = String(Boolean(command.error)); | |
112 result.push("InspectorBackend.registerCommand(\"" + domain.domain +
"." + command.name + "\", [" + paramsText.join(", ") + "], [" + returnsText.join
(", ") + "], " + hasErrorData + ");"); | |
113 } | |
114 | |
115 for (var j = 0; domain.events && j < domain.events.length; ++j) { | |
116 var event = domain.events[j]; | |
117 var paramsText = []; | |
118 for (var k = 0; event.parameters && k < event.parameters.length; ++k
) { | |
119 var parameter = event.parameters[k]; | |
120 paramsText.push("\"" + parameter.name + "\""); | |
121 } | |
122 result.push("InspectorBackend.registerEvent(\"" + domain.domain + ".
" + event.name + "\", [" + paramsText.join(", ") + "]);"); | |
123 } | |
124 } | 123 } |
125 return result.join("\n"); | 124 } |
| 125 return result.join('\n'); |
126 }; | 126 }; |
127 | 127 |
128 WebInspector.InspectorBackendHostedMode.loadFromJSONIfNeeded(); | 128 WebInspector.InspectorBackendHostedMode.loadFromJSONIfNeeded(); |
OLD | NEW |