1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/**
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch * This view displays information on the host resolver:
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *
8731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick *   - Shows the default address family.
9731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick *   - Has a button to enable IPv6, if it is disabled.
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *   - Shows the current host cache contents.
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *   - Has a button to clear the host cache.
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *   - Shows the parameters used to construct the host cache (capacity, ttl).
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *  @constructor
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch */
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochfunction DnsView(mainBoxId,
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 cacheTbodyId,
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 clearCacheButtonId,
19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                 defaultFamilySpanId,
20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                 ipv6DisabledSpanId,
21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                 enableIPv6ButtonId,
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 capacitySpanId,
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 ttlSuccessSpanId,
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 ttlFailureSpanId) {
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DivView.call(this, mainBoxId);
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Hook up the UI components.
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  this.cacheTbody_ = document.getElementById(cacheTbodyId);
29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  this.defaultFamilySpan_ = document.getElementById(defaultFamilySpanId);
30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  this.ipv6DisabledSpan_ = document.getElementById(ipv6DisabledSpanId);
31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  document.getElementById(enableIPv6ButtonId).onclick =
33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      g_browser.enableIPv6.bind(g_browser);
34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  this.capacitySpan_ = document.getElementById(capacitySpanId);
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  this.ttlSuccessSpan_ = document.getElementById(ttlSuccessSpanId);
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  this.ttlFailureSpan_ = document.getElementById(ttlFailureSpanId);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  var clearCacheButton = document.getElementById(clearCacheButtonId);
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  clearCacheButton.onclick =
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      g_browser.sendClearHostResolverCache.bind(g_browser);
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Register to receive changes to the host resolver info.
44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  g_browser.addHostResolverInfoObserver(this);
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinherits(DnsView, DivView);
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
49731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickDnsView.prototype.onHostResolverInfoChanged = function(hostResolverInfo) {
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Clear the existing values.
51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  this.defaultFamilySpan_.innerHTML = '';
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  this.capacitySpan_.innerHTML = '';
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  this.ttlSuccessSpan_.innerHTML = '';
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  this.ttlFailureSpan_.innerHTML = '';
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  this.cacheTbody_.innerHTML = '';
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // No info.
58731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  if (!hostResolverInfo)
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return;
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  var family = hostResolverInfo.default_address_family;
62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  addTextNode(this.defaultFamilySpan_, getKeyWithValue(AddressFamily, family));
63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
64731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  var ipv6Disabled = (family == AddressFamily.ADDRESS_FAMILY_IPV4);
65731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  setNodeDisplay(this.ipv6DisabledSpan_, ipv6Disabled);
66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Fill in the basic cache information.
68731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  var hostResolverCache = hostResolverInfo.cache;
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  addTextNode(this.capacitySpan_, hostResolverCache.capacity);
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  addTextNode(this.ttlSuccessSpan_, hostResolverCache.ttl_success_ms);
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  addTextNode(this.ttlFailureSpan_, hostResolverCache.ttl_failure_ms);
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Fill in the cache contents table.
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (var i = 0; i < hostResolverCache.entries.length; ++i) {
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    var e = hostResolverCache.entries[i];
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    var tr = addNode(this.cacheTbody_, 'tr');
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    var hostnameCell = addNode(tr, 'td');
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    addTextNode(hostnameCell, e.hostname);
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    var familyCell = addNode(tr, 'td');
82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    addTextNode(familyCell, getKeyWithValue(AddressFamily, e.address_family));
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    var addressesCell = addNode(tr, 'td');
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (e.error != undefined) {
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      addTextNode(addressesCell, 'error: ' + e.error);
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    } else {
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      for (var j = 0; j < e.addresses.length; ++j) {
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        var address = e.addresses[j];
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        if (j != 0)
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          addNode(addressesCell, 'br');
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        addTextNode(addressesCell, address);
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      }
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    var expiresDate = g_browser.convertTimeTicksToDate(e.expiration);
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    var expiresCell = addNode(tr, 'td');
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    addTextNode(expiresCell, expiresDate.toLocaleString());
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
102