blob: bc4e728f3a58f9b5f82f8c51411dc7a5d544b518 [file] [log] [blame]
// Copyright (c) 2011 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 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 ServiceProvidersView = (function() {
'use strict';
// We inherit from DivView.
var superClass = DivView;
/**
* @constructor
*/
function ServiceProvidersView() {
assertFirstConstructorCall(ServiceProvidersView);
// Call superclass's constructor.
superClass.call(this, ServiceProvidersView.MAIN_BOX_ID);
this.serviceProvidersTbody_ =
$(ServiceProvidersView.SERVICE_PROVIDERS_TBODY_ID);
this.namespaceProvidersTbody_ =
$(ServiceProvidersView.NAMESPACE_PROVIDERS_TBODY_ID);
g_browser.addServiceProvidersObserver(this, true);
}
// ID for special HTML element in category_tabs.html
ServiceProvidersView.TAB_HANDLE_ID = 'tab-handle-service-providers';
// IDs for special HTML elements in service_providers_view.html
ServiceProvidersView.MAIN_BOX_ID = 'service-providers-view-tab-content';
ServiceProvidersView.SERVICE_PROVIDERS_TBODY_ID =
'service-providers-view-tbody';
ServiceProvidersView.NAMESPACE_PROVIDERS_TBODY_ID =
'service-providers-view-namespace-providers-tbody';
cr.addSingletonGetter(ServiceProvidersView);
ServiceProvidersView.prototype = {
// Inherit the superclass's methods.
__proto__: superClass.prototype,
onLoadLogFinish: function(data) {
return this.onServiceProvidersChanged(data.serviceProviders);
},
onServiceProvidersChanged: function(serviceProviders) {
return serviceProviders &&
this.updateServiceProviders_(serviceProviders['service_providers']) &&
this.updateNamespaceProviders_(
serviceProviders['namespace_providers']);
},
/**
* Updates the table of layered service providers.
*/
updateServiceProviders_: function(serviceProviders) {
this.serviceProvidersTbody_.innerHTML = '';
if (!serviceProviders)
return false;
// Add a table row for each service provider.
for (var i = 0; i < serviceProviders.length; ++i) {
var tr = addNode(this.serviceProvidersTbody_, 'tr');
var entry = serviceProviders[i];
addNodeWithText(tr, 'td', entry.name);
addNodeWithText(tr, 'td', entry.version);
addNodeWithText(tr, 'td', getLayeredServiceProviderType(entry));
addNodeWithText(tr, 'td', getSocketType(entry));
addNodeWithText(tr, 'td', getProtocolType(entry));
addNodeWithText(tr, 'td', entry.path);
}
return true;
},
/**
* Updates the lable of namespace providers.
*/
updateNamespaceProviders_: function(namespaceProviders) {
this.namespaceProvidersTbody_.innerHTML = '';
if (!namespaceProviders)
return false;
// Add a table row for each namespace provider.
for (var i = 0; i < namespaceProviders.length; ++i) {
var tr = addNode(this.namespaceProvidersTbody_, 'tr');
var entry = namespaceProviders[i];
addNodeWithText(tr, 'td', entry.name);
addNodeWithText(tr, 'td', entry.version);
addNodeWithText(tr, 'td', getNamespaceProviderType(entry));
addNodeWithText(tr, 'td', entry.active);
}
return true;
}
};
/**
* Returns type of a layered service provider.
*/
function getLayeredServiceProviderType(serviceProvider) {
if (serviceProvider.chain_length == 0)
return 'Layer';
if (serviceProvider.chain_length == 1)
return 'Base';
return 'Chain';
}
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.
*/
function getNamespaceProviderType(namespaceProvider) {
return tryGetValueWithKey(NAMESPACE_PROVIDER_PTYPE,
namespaceProvider.type);
};
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.
*/
function getSocketType(layeredServiceProvider) {
return tryGetValueWithKey(SOCKET_TYPE,
layeredServiceProvider.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.
*/
function getProtocolType(layeredServiceProvider) {
return tryGetValueWithKey(PROTOCOL_TYPE,
layeredServiceProvider.socket_protocol);
}
return ServiceProvidersView;
})();