| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // This should be executed immediately after InspectorBackend and InspectorBacke
ndCommands | |
| 6 | |
| 7 WebInspector.InspectorBackendHostedMode = {}; | |
| 8 | |
| 9 WebInspector.InspectorBackendHostedMode.loadFromJSONIfNeeded = function() | |
| 10 { | |
| 11 if (InspectorBackend.isInitialized()) | |
| 12 return; | |
| 13 | |
| 14 for (var url of Object.keys(Runtime.cachedResources)) { | |
| 15 if (url.indexOf("protocol.json") !== -1) { | |
| 16 var protocol = Runtime.cachedResources[url]; | |
| 17 var code = WebInspector.InspectorBackendHostedMode.generateCommands(
JSON.parse(protocol)); | |
| 18 eval(code); | |
| 19 } | |
| 20 } | |
| 21 }; | |
| 22 | |
| 23 /** | |
| 24 * @param {*} schema | |
| 25 * @return {string} | |
| 26 */ | |
| 27 WebInspector.InspectorBackendHostedMode.generateCommands = function(schema) | |
| 28 { | |
| 29 var jsTypes = { integer: "number", array: "object" }; | |
| 30 var rawTypes = {}; | |
| 31 var result = []; | |
| 32 | |
| 33 var domains = schema["domains"] || []; | |
| 34 for (var i = 0; i < domains.length; ++i) { | |
| 35 var domain = domains[i]; | |
| 36 for (var j = 0; domain.types && j < domain.types.length; ++j) { | |
| 37 var type = domain.types[j]; | |
| 38 rawTypes[domain.domain + "." + type.id] = jsTypes[type.type] || type
.type; | |
| 39 } | |
| 40 } | |
| 41 | |
| 42 function toUpperCase(groupIndex, group0, group1) | |
| 43 { | |
| 44 return [group0, group1][groupIndex].toUpperCase(); | |
| 45 } | |
| 46 function generateEnum(enumName, items) | |
| 47 { | |
| 48 var members = []; | |
| 49 for (var m = 0; m < items.length; ++m) { | |
| 50 var value = items[m]; | |
| 51 var name = value; | |
| 52 var prefix = ""; | |
| 53 if (name[0] === "-") { | |
| 54 prefix = "Negative"; | |
| 55 name = name.substring(1); | |
| 56 } | |
| 57 name = name.replace(/-(\w)/g, toUpperCase.bind(null, 1)).toTitleCase
(); | |
| 58 name = name.replace(/HTML|XML|WML|API/ig, toUpperCase.bind(null, 0))
; | |
| 59 members.push(prefix + name + ": \"" + value + "\""); | |
| 60 } | |
| 61 return "InspectorBackend.registerEnum(\"" + enumName + "\", {" + members
.join(", ") + "});"; | |
| 62 } | |
| 63 | |
| 64 for (var i = 0; i < domains.length; ++i) { | |
| 65 var domain = domains[i]; | |
| 66 | |
| 67 var types = domain["types"] || []; | |
| 68 for (var j = 0; j < types.length; ++j) { | |
| 69 var type = types[j]; | |
| 70 if ((type["type"] === "string") && type["enum"]) | |
| 71 result.push(generateEnum(domain.domain + "." + type.id, type["en
um"])); | |
| 72 else if (type["type"] === "object") { | |
| 73 var properties = type["properties"] || []; | |
| 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 } | |
| 125 return result.join("\n"); | |
| 126 }; | |
| 127 | |
| 128 WebInspector.InspectorBackendHostedMode.loadFromJSONIfNeeded(); | |
| OLD | NEW |