// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /** * This view displays information on installed Chrome extensions / apps as well * as Winsock layered service providers and namespace providers. * * For each layered service provider, shows the name, dll, and type * information. For each namespace provider, shows the name and * whether or not it's active. */ var ModulesView = (function() { 'use strict'; // We inherit from DivView. var superClass = DivView; /** * @constructor */ function ModulesView() { assertFirstConstructorCall(ModulesView); // Call superclass's constructor. superClass.call(this, ModulesView.MAIN_BOX_ID); this.serviceProvidersTbody_ = $(ModulesView.SERVICE_PROVIDERS_TBODY_ID); this.namespaceProvidersTbody_ = $(ModulesView.NAMESPACE_PROVIDERS_TBODY_ID); g_browser.addServiceProvidersObserver(this, false); g_browser.addExtensionInfoObserver(this, true); } ModulesView.TAB_ID = 'tab-handle-modules'; ModulesView.TAB_NAME = 'Modules'; ModulesView.TAB_HASH = '#modules'; // IDs for special HTML elements in modules_view.html. ModulesView.MAIN_BOX_ID = 'modules-view-tab-content'; ModulesView.EXTENSION_INFO_ID = 'modules-view-extension-info'; ModulesView.WINDOWS_SERVICE_PROVIDERS_ID = 'modules-view-windows-service-providers'; cr.addSingletonGetter(ModulesView); ModulesView.prototype = { // Inherit the superclass's methods. __proto__: superClass.prototype, onLoadLogFinish: function(data) { // Show the tab if there are either service providers or extension info. var hasExtensionInfo = this.onExtensionInfoChanged(data.extensionInfo); var hasSpiInfo = this.onServiceProvidersChanged(data.serviceProviders); return hasExtensionInfo || hasSpiInfo; }, onExtensionInfoChanged: function(extensionInfo) { var input = new JsEvalContext({extensionInfo: extensionInfo}); jstProcess(input, $(ModulesView.EXTENSION_INFO_ID)); return !!extensionInfo; }, onServiceProvidersChanged: function(serviceProviders) { var input = new JsEvalContext(serviceProviders); jstProcess(input, $(ModulesView.WINDOWS_SERVICE_PROVIDERS_ID)); return !!serviceProviders; }, }; /** * Returns type of a layered service provider. */ ModulesView.getLayeredServiceProviderType = function(serviceProvider) { if (serviceProvider.chain_length == 0) return 'Layer'; if (serviceProvider.chain_length == 1) return 'Base'; return 'Chain'; }; var SOCKET_TYPE = { '1': 'SOCK_STREAM', '2': 'SOCK_DGRAM', '3': 'SOCK_RAW', '4': 'SOCK_RDM', '5': 'SOCK_SEQPACKET' }; /** * Returns socket type of a layered service provider as a string. */ ModulesView.getLayeredServiceProviderSocketType = function(serviceProvider) { return tryGetValueWithKey(SOCKET_TYPE, serviceProvider.socket_type); }; var PROTOCOL_TYPE = { '1': 'IPPROTO_ICMP', '6': 'IPPROTO_TCP', '17': 'IPPROTO_UDP', '58': 'IPPROTO_ICMPV6' }; /** * Returns protocol type of a layered service provider as a string. */ ModulesView.getLayeredServiceProviderProtocolType = function(serviceProvider) { return tryGetValueWithKey(PROTOCOL_TYPE, serviceProvider.socket_protocol); } var NAMESPACE_PROVIDER_PTYPE = { '12': 'NS_DNS', '15': 'NS_NLA', '16': 'NS_BTH', '32': 'NS_NTDS', '37': 'NS_EMAIL', '38': 'NS_PNRPNAME', '39': 'NS_PNRPCLOUD' }; /** * Returns the type of a namespace provider as a string. */ ModulesView.getNamespaceProviderType = function(namespaceProvider) { return tryGetValueWithKey(NAMESPACE_PROVIDER_PTYPE, namespaceProvider.type); }; return ModulesView; })();