Home | History | Annotate | Download | only in net_internals
      1 // Copyright (c) 2010 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 Winsock layered service providers and
      7  * 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  * @constructor
     14  */
     15 function ServiceProvidersView(tabId,
     16                               mainBoxId,
     17                               serviceProvidersTbodyId,
     18                               namespaceProvidersTbodyId) {
     19   DivView.call(this, mainBoxId);
     20 
     21   var tab = document.getElementById(tabId);
     22   setNodeDisplay(tab, true);
     23 
     24   this.serviceProvidersTbody_ =
     25       document.getElementById(serviceProvidersTbodyId);
     26   this.namespaceProvidersTbody_ =
     27       document.getElementById(namespaceProvidersTbodyId);
     28 
     29   g_browser.addServiceProvidersObserver(this);
     30 }
     31 
     32 inherits(ServiceProvidersView, DivView);
     33 
     34 ServiceProvidersView.prototype.onServiceProvidersChanged =
     35 function(serviceProviders) {
     36   this.updateServiceProviders_(serviceProviders['service_providers']);
     37   this.updateNamespaceProviders_(serviceProviders['namespace_providers']);
     38 };
     39 
     40 /**
     41  * Returns type of a layered service provider.
     42  */
     43 ServiceProvidersView.getLayeredServiceProviderType =
     44 function(serviceProvider) {
     45   if (serviceProvider.chain_length == 0)
     46     return 'Layer';
     47   if (serviceProvider.chain_length == 1)
     48     return 'Base';
     49   return 'Chain';
     50 };
     51 
     52 ServiceProvidersView.namespaceProviderType_ = {
     53   '12': 'NS_DNS',
     54   '15': 'NS_NLA',
     55   '16': 'NS_BTH',
     56   '32': 'NS_NTDS',
     57   '37': 'NS_EMAIL',
     58   '38': 'NS_PNRPNAME',
     59   '39': 'NS_PNRPCLOUD'
     60 };
     61 
     62 /**
     63  * Returns the type of a namespace provider as a string.
     64  */
     65 ServiceProvidersView.getNamespaceProviderType = function(namespaceProvider) {
     66   return tryGetValueWithKey(ServiceProvidersView.namespaceProviderType_,
     67                             namespaceProvider.type);
     68 };
     69 
     70 ServiceProvidersView.socketType_ = {
     71   '1': 'SOCK_STREAM',
     72   '2': 'SOCK_DGRAM',
     73   '3': 'SOCK_RAW',
     74   '4': 'SOCK_RDM',
     75   '5': 'SOCK_SEQPACKET'
     76 };
     77 
     78 /**
     79  * Returns socket type of a layered service provider as a string.
     80  */
     81 ServiceProvidersView.getSocketType = function(layeredServiceProvider) {
     82   return tryGetValueWithKey(ServiceProvidersView.socketType_,
     83                             layeredServiceProvider.socket_type);
     84 };
     85 
     86 ServiceProvidersView.protocolType_ = {
     87   '1': 'IPPROTO_ICMP',
     88   '6': 'IPPROTO_TCP',
     89   '17': 'IPPROTO_UDP',
     90   '58': 'IPPROTO_ICMPV6'
     91 };
     92 
     93 /**
     94  * Returns protocol type of a layered service provider as a string.
     95  */
     96 ServiceProvidersView.getProtocolType = function(layeredServiceProvider) {
     97   return tryGetValueWithKey(ServiceProvidersView.protocolType_,
     98                             layeredServiceProvider.socket_protocol);
     99 };
    100 
    101  /**
    102  * Updates the table of layered service providers.
    103  */
    104 ServiceProvidersView.prototype.updateServiceProviders_ =
    105 function(serviceProviders) {
    106   this.serviceProvidersTbody_.innerHTML = '';
    107 
    108   // Add a table row for each service provider.
    109   for (var i = 0; i < serviceProviders.length; ++i) {
    110     var tr = addNode(this.serviceProvidersTbody_, 'tr');
    111     var entry = serviceProviders[i];
    112 
    113     addNodeWithText(tr, 'td', entry.name);
    114     addNodeWithText(tr, 'td', entry.version);
    115     addNodeWithText(tr, 'td',
    116                     ServiceProvidersView.getLayeredServiceProviderType(entry));
    117     addNodeWithText(tr, 'td', ServiceProvidersView.getSocketType(entry));
    118     addNodeWithText(tr, 'td', ServiceProvidersView.getProtocolType(entry));
    119     addNodeWithText(tr, 'td', entry.path);
    120   }
    121 };
    122 
    123 /**
    124  * Updates the lable of namespace providers.
    125  */
    126 ServiceProvidersView.prototype.updateNamespaceProviders_ =
    127 function(namespaceProviders) {
    128   this.namespaceProvidersTbody_.innerHTML = '';
    129 
    130   // Add a table row for each namespace provider.
    131   for (var i = 0; i < namespaceProviders.length; ++i) {
    132     var tr = addNode(this.namespaceProvidersTbody_, 'tr');
    133     var entry = namespaceProviders[i];
    134     addNodeWithText(tr, 'td', entry.name);
    135     addNodeWithText(tr, 'td', entry.version);
    136     addNodeWithText(tr, 'td',
    137                     ServiceProvidersView.getNamespaceProviderType(entry));
    138     addNodeWithText(tr, 'td', entry.active);
    139   }
    140 };
    141 
    142