OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2012 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 /** |
| 6 * This view displays information on installed Chrome extensions / apps as well |
| 7 * as Winsock layered service providers and namespace providers. |
| 8 * |
| 9 * For each layered service provider, shows the name, dll, and type |
| 10 * information. For each namespace provider, shows the name and |
| 11 * whether or not it's active. |
| 12 */ |
| 13 var ModulesView = (function() { |
| 14 'use strict'; |
| 15 |
| 16 // We inherit from DivView. |
| 17 var superClass = DivView; |
| 18 |
| 19 /** |
| 20 * @constructor |
| 21 */ |
| 22 function ModulesView() { |
| 23 assertFirstConstructorCall(ModulesView); |
| 24 |
| 25 // Call superclass's constructor. |
| 26 superClass.call(this, ModulesView.MAIN_BOX_ID); |
| 27 |
| 28 this.serviceProvidersTbody_ = |
| 29 $(ModulesView.SERVICE_PROVIDERS_TBODY_ID); |
| 30 this.namespaceProvidersTbody_ = |
| 31 $(ModulesView.NAMESPACE_PROVIDERS_TBODY_ID); |
| 32 |
| 33 g_browser.addServiceProvidersObserver(this, false); |
| 34 g_browser.addExtensionInfoObserver(this, true); |
| 35 } |
| 36 |
| 37 ModulesView.TAB_ID = 'tab-handle-modules'; |
| 38 ModulesView.TAB_NAME = 'Modules'; |
| 39 ModulesView.TAB_HASH = '#modules'; |
| 40 |
| 41 // IDs for special HTML elements in modules_view.html. |
| 42 ModulesView.MAIN_BOX_ID = 'modules-view-tab-content'; |
| 43 ModulesView.EXTENSION_INFO_ID = 'modules-view-extension-info'; |
| 44 ModulesView.EXTENSION_INFO_UNAVAILABLE_ID = |
| 45 'modules-view-extension-info-unavailable'; |
| 46 ModulesView.EXTENSION_INFO_NO_CONTENT_ID = |
| 47 'modules-view-extension-info-no-content'; |
| 48 ModulesView.EXTENSION_INFO_CONTENT_ID = |
| 49 'modules-view-extension-info-content'; |
| 50 ModulesView.EXTENSION_INFO_TBODY_ID = |
| 51 'modules-view-extension-info-tbody'; |
| 52 ModulesView.WINDOWS_SERVICE_PROVIDERS_ID = |
| 53 'modules-view-windows-service-providers'; |
| 54 ModulesView.SERVICE_PROVIDERS_TBODY_ID = |
| 55 'modules-view-service-providers-tbody'; |
| 56 ModulesView.NAMESPACE_PROVIDERS_TBODY_ID = |
| 57 'modules-view-namespace-providers-tbody'; |
| 58 |
| 59 cr.addSingletonGetter(ModulesView); |
| 60 |
| 61 ModulesView.prototype = { |
| 62 // Inherit the superclass's methods. |
| 63 __proto__: superClass.prototype, |
| 64 |
| 65 onLoadLogFinish: function(data) { |
| 66 // Show the tab if there are either service providers or extension info. |
| 67 var hasExtensionInfo = this.onExtensionInfoChanged(data.extensionInfo); |
| 68 var hasSpiInfo = this.onServiceProvidersChanged(data.serviceProviders); |
| 69 return hasExtensionInfo || hasSpiInfo; |
| 70 }, |
| 71 |
| 72 onExtensionInfoChanged: function(extensionInfo) { |
| 73 setNodeDisplay($(ModulesView.EXTENSION_INFO_CONTENT_ID), |
| 74 extensionInfo && extensionInfo.length > 0); |
| 75 setNodeDisplay($(ModulesView.EXTENSION_INFO_UNAVAILABLE_ID), |
| 76 !extensionInfo); |
| 77 setNodeDisplay($(ModulesView.EXTENSION_INFO_NO_CONTENT_ID), |
| 78 extensionInfo && extensionInfo.length == 0); |
| 79 |
| 80 var tbodyExtension = $(ModulesView.EXTENSION_INFO_TBODY_ID); |
| 81 tbodyExtension.innerHTML = ''; |
| 82 |
| 83 if (extensionInfo && extensionInfo.length > 0) { |
| 84 // Fill in the extensions table. |
| 85 for (var i = 0; i < extensionInfo.length; ++i) { |
| 86 var e = extensionInfo[i]; |
| 87 var tr = addNode(tbodyExtension, 'tr'); |
| 88 tr.className = (e.enabled ? 'enabled' : ''); |
| 89 |
| 90 addNodeWithText(tr, 'td', e.id); |
| 91 addNodeWithText(tr, 'td', e.packagedApp); |
| 92 addNodeWithText(tr, 'td', e.enabled); |
| 93 addNodeWithText(tr, 'td', e.name); |
| 94 addNodeWithText(tr, 'td', e.version); |
| 95 addNodeWithText(tr, 'td', e.description); |
| 96 } |
| 97 } |
| 98 |
| 99 return !!extensionInfo; |
| 100 }, |
| 101 |
| 102 onServiceProvidersChanged: function(serviceProviders) { |
| 103 setNodeDisplay($(ModulesView.WINDOWS_SERVICE_PROVIDERS_ID), |
| 104 serviceProviders); |
| 105 if (serviceProviders) { |
| 106 var tbodyService = $(ModulesView.SERVICE_PROVIDERS_TBODY_ID); |
| 107 tbodyService.innerHTML = ''; |
| 108 |
| 109 // Fill in the service providers table. |
| 110 for (var i = 0; i < serviceProviders.service_providers.length; ++i) { |
| 111 var s = serviceProviders.service_providers[i]; |
| 112 var tr = addNode(tbodyService, 'tr'); |
| 113 |
| 114 addNodeWithText(tr, 'td', s.name); |
| 115 addNodeWithText(tr, 'td', s.version); |
| 116 addNodeWithText(tr, 'td', |
| 117 ModulesView.getLayeredServiceProviderType(s)); |
| 118 addNodeWithText(tr, 'td', |
| 119 ModulesView.getLayeredServiceProviderSocketType(s)); |
| 120 addNodeWithText(tr, 'td', |
| 121 ModulesView.getLayeredServiceProviderProtocolType(s)); |
| 122 } |
| 123 |
| 124 var tbodyNamespace = $(ModulesView.NAMESPACE_PROVIDERS_TBODY_ID); |
| 125 tbodyNamespace.innerHTML = ''; |
| 126 |
| 127 // Fill in the namespace providers table. |
| 128 for (var i = 0; i < serviceProviders.namespace_providers.length; ++i) { |
| 129 var n = serviceProviders.namespace_providers[i]; |
| 130 var tr = addNode(tbodyNamespace, 'tr'); |
| 131 |
| 132 addNodeWithText(tr, 'td', n.name); |
| 133 addNodeWithText(tr, 'td', n.version); |
| 134 addNodeWithText(tr, 'td', ModulesView.getNamespaceProviderType(n)); |
| 135 addNodeWithText(tr, 'td', n.active); |
| 136 } |
| 137 } |
| 138 |
| 139 return !!serviceProviders; |
| 140 }, |
| 141 }; |
| 142 |
| 143 /** |
| 144 * Returns type of a layered service provider. |
| 145 */ |
| 146 ModulesView.getLayeredServiceProviderType = function(serviceProvider) { |
| 147 if (serviceProvider.chain_length == 0) |
| 148 return 'Layer'; |
| 149 if (serviceProvider.chain_length == 1) |
| 150 return 'Base'; |
| 151 return 'Chain'; |
| 152 }; |
| 153 |
| 154 var SOCKET_TYPE = { |
| 155 '1': 'SOCK_STREAM', |
| 156 '2': 'SOCK_DGRAM', |
| 157 '3': 'SOCK_RAW', |
| 158 '4': 'SOCK_RDM', |
| 159 '5': 'SOCK_SEQPACKET' |
| 160 }; |
| 161 |
| 162 /** |
| 163 * Returns socket type of a layered service provider as a string. |
| 164 */ |
| 165 ModulesView.getLayeredServiceProviderSocketType = function(serviceProvider) { |
| 166 return tryGetValueWithKey(SOCKET_TYPE, serviceProvider.socket_type); |
| 167 }; |
| 168 |
| 169 var PROTOCOL_TYPE = { |
| 170 '1': 'IPPROTO_ICMP', |
| 171 '6': 'IPPROTO_TCP', |
| 172 '17': 'IPPROTO_UDP', |
| 173 '58': 'IPPROTO_ICMPV6' |
| 174 }; |
| 175 |
| 176 /** |
| 177 * Returns protocol type of a layered service provider as a string. |
| 178 */ |
| 179 ModulesView.getLayeredServiceProviderProtocolType = |
| 180 function(serviceProvider) { |
| 181 return tryGetValueWithKey(PROTOCOL_TYPE, serviceProvider.socket_protocol); |
| 182 }; |
| 183 |
| 184 var NAMESPACE_PROVIDER_PTYPE = { |
| 185 '12': 'NS_DNS', |
| 186 '15': 'NS_NLA', |
| 187 '16': 'NS_BTH', |
| 188 '32': 'NS_NTDS', |
| 189 '37': 'NS_EMAIL', |
| 190 '38': 'NS_PNRPNAME', |
| 191 '39': 'NS_PNRPCLOUD' |
| 192 }; |
| 193 |
| 194 /** |
| 195 * Returns the type of a namespace provider as a string. |
| 196 */ |
| 197 ModulesView.getNamespaceProviderType = function(namespaceProvider) { |
| 198 return tryGetValueWithKey(NAMESPACE_PROVIDER_PTYPE, |
| 199 namespaceProvider.type); |
| 200 }; |
| 201 |
| 202 return ModulesView; |
| 203 })(); |
OLD | NEW |