| 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 // This should be executed immediately after InspectorBackend and InspectorBacke
ndCommands | |
| 5 | |
| 6 SDK.InspectorBackendHostedMode = {}; | |
| 7 | |
| 8 SDK.InspectorBackendHostedMode.loadFromJSONIfNeeded = function() { | |
| 9 if (InspectorBackend.isInitialized()) | |
| 10 return; | |
| 11 | |
| 12 for (var url of Object.keys(Runtime.cachedResources)) { | |
| 13 if (url.indexOf('protocol.json') !== -1) { | |
| 14 var protocol = Runtime.cachedResources[url]; | |
| 15 var code = SDK.InspectorBackendHostedMode.generateCommands(JSON.parse(prot
ocol)); | |
| 16 eval(code); | |
| 17 } | |
| 18 } | |
| 19 }; | |
| 20 | |
| 21 /** | |
| 22 * @param {*} schema | |
| 23 * @return {string} | |
| 24 */ | |
| 25 SDK.InspectorBackendHostedMode.generateCommands = function(schema) { | |
| 26 var jsTypes = {integer: 'number', array: 'object'}; | |
| 27 var rawTypes = {}; | |
| 28 var result = []; | |
| 29 | |
| 30 var domains = schema['domains'] || []; | |
| 31 for (var i = 0; i < domains.length; ++i) { | |
| 32 var domain = domains[i]; | |
| 33 for (var j = 0; domain.types && j < domain.types.length; ++j) { | |
| 34 var type = domain.types[j]; | |
| 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'])); | |
| 73 } | |
| 74 } | |
| 75 } | |
| 76 | |
| 77 var commands = domain['commands'] || []; | |
| 78 for (var j = 0; j < commands.length; ++j) { | |
| 79 var command = commands[j]; | |
| 80 var parameters = command['parameters']; | |
| 81 var paramsText = []; | |
| 82 for (var k = 0; parameters && k < parameters.length; ++k) { | |
| 83 var parameter = parameters[k]; | |
| 84 | |
| 85 var type; | |
| 86 if (parameter.type) { | |
| 87 type = jsTypes[parameter.type] || parameter.type; | |
| 88 } else { | |
| 89 var ref = parameter['$ref']; | |
| 90 if (ref.indexOf('.') !== -1) | |
| 91 type = rawTypes[ref]; | |
| 92 else | |
| 93 type = rawTypes[domain.domain + '.' + ref]; | |
| 94 } | |
| 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 + ');'); | |
| 111 } | |
| 112 | |
| 113 for (var j = 0; domain.events && j < domain.events.length; ++j) { | |
| 114 var event = domain.events[j]; | |
| 115 var paramsText = []; | |
| 116 for (var k = 0; event.parameters && k < event.parameters.length; ++k) { | |
| 117 var parameter = event.parameters[k]; | |
| 118 paramsText.push('"' + parameter.name + '"'); | |
| 119 } | |
| 120 result.push( | |
| 121 'InspectorBackend.registerEvent("' + domain.domain + '.' + event.name
+ '", [' + paramsText.join(', ') + | |
| 122 ']);'); | |
| 123 } | |
| 124 } | |
| 125 return result.join('\n'); | |
| 126 }; | |
| 127 | |
| 128 SDK.InspectorBackendHostedMode.loadFromJSONIfNeeded(); | |
| OLD | NEW |