Home | History | Annotate | Download | only in net_internals
      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.WINDOWS_SERVICE_PROVIDERS_ID =
     45       'modules-view-windows-service-providers';
     46 
     47   cr.addSingletonGetter(ModulesView);
     48 
     49   ModulesView.prototype = {
     50     // Inherit the superclass's methods.
     51     __proto__: superClass.prototype,
     52 
     53     onLoadLogFinish: function(data) {
     54       // Show the tab if there are either service providers or extension info.
     55       var hasExtensionInfo = this.onExtensionInfoChanged(data.extensionInfo);
     56       var hasSpiInfo = this.onServiceProvidersChanged(data.serviceProviders);
     57       return hasExtensionInfo || hasSpiInfo;
     58     },
     59 
     60     onExtensionInfoChanged: function(extensionInfo) {
     61       var input = new JsEvalContext({extensionInfo: extensionInfo});
     62       jstProcess(input, $(ModulesView.EXTENSION_INFO_ID));
     63       return !!extensionInfo;
     64     },
     65 
     66     onServiceProvidersChanged: function(serviceProviders) {
     67       var input = new JsEvalContext(serviceProviders);
     68       jstProcess(input, $(ModulesView.WINDOWS_SERVICE_PROVIDERS_ID));
     69       return !!serviceProviders;
     70     },
     71   };
     72 
     73   /**
     74    * Returns type of a layered service provider.
     75    */
     76   ModulesView.getLayeredServiceProviderType = function(serviceProvider) {
     77     if (serviceProvider.chain_length == 0)
     78       return 'Layer';
     79     if (serviceProvider.chain_length == 1)
     80       return 'Base';
     81     return 'Chain';
     82   };
     83 
     84   var SOCKET_TYPE = {
     85     '1': 'SOCK_STREAM',
     86     '2': 'SOCK_DGRAM',
     87     '3': 'SOCK_RAW',
     88     '4': 'SOCK_RDM',
     89     '5': 'SOCK_SEQPACKET'
     90   };
     91 
     92   /**
     93    * Returns socket type of a layered service provider as a string.
     94    */
     95   ModulesView.getLayeredServiceProviderSocketType = function(serviceProvider) {
     96     return tryGetValueWithKey(SOCKET_TYPE, serviceProvider.socket_type);
     97   };
     98 
     99   var PROTOCOL_TYPE = {
    100     '1': 'IPPROTO_ICMP',
    101     '6': 'IPPROTO_TCP',
    102     '17': 'IPPROTO_UDP',
    103     '58': 'IPPROTO_ICMPV6'
    104   };
    105 
    106   /**
    107    * Returns protocol type of a layered service provider as a string.
    108    */
    109   ModulesView.getLayeredServiceProviderProtocolType =
    110       function(serviceProvider) {
    111     return tryGetValueWithKey(PROTOCOL_TYPE, serviceProvider.socket_protocol);
    112   }
    113 
    114   var NAMESPACE_PROVIDER_PTYPE = {
    115     '12': 'NS_DNS',
    116     '15': 'NS_NLA',
    117     '16': 'NS_BTH',
    118     '32': 'NS_NTDS',
    119     '37': 'NS_EMAIL',
    120     '38': 'NS_PNRPNAME',
    121     '39': 'NS_PNRPCLOUD'
    122   };
    123 
    124   /**
    125    * Returns the type of a namespace provider as a string.
    126    */
    127   ModulesView.getNamespaceProviderType = function(namespaceProvider) {
    128     return tryGetValueWithKey(NAMESPACE_PROVIDER_PTYPE,
    129                               namespaceProvider.type);
    130   };
    131 
    132   return ModulesView;
    133 })();
    134