dns_view.js revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This view displays information on the host resolver:
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   - Shows the default address family.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   - Has a button to enable IPv6, if it is disabled.
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   - Shows the current host cache contents.
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   - Has a button to clear the host cache.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   - Shows the parameters used to construct the host cache (capacity, ttl).
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(mmenke):  Add links for each address entry to the corresponding NetLog
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                source.  This could either be done by adding NetLog source ids
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                to cache entries, or tracking sources based on their type and
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                description.  Former is simpler, latter may be useful
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                elsewhere as well.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var DnsView = (function() {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'use strict';
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We inherit from DivView.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var superClass = DivView;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *  @constructor
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function DnsView() {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    assertFirstConstructorCall(DnsView);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Call superclass's constructor.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    superClass.call(this, DnsView.MAIN_BOX_ID);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    $(DnsView.ENABLE_IPV6_BUTTON_ID).onclick =
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        g_browser.enableIPv6.bind(g_browser);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    $(DnsView.IPV6_PROBE_BUTTON_ID).onclick = this.runIPv6Probe_.bind(this);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    $(DnsView.CLEAR_CACHE_BUTTON_ID).onclick =
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        g_browser.sendClearHostResolverCache.bind(g_browser);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Used to track IPv6 probes.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EventsTracker.getInstance().addLogEntryObserver(this);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // ID of most recently started IPv6 probe job.  Once the job completes,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // set back to -1.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.ipv6ProbeJobSourceId_ = -1;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Register to receive changes to the host resolver info.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    g_browser.addHostResolverInfoObserver(this, false);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ID for special HTML element in category_tabs.html
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.TAB_HANDLE_ID = 'tab-handle-dns';
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IDs for special HTML elements in dns_view.html
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.MAIN_BOX_ID = 'dns-view-tab-content';
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.DEFAULT_FAMILY_SPAN_ID = 'dns-view-default-family';
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.IPV6_DISABLED_SPAN_ID = 'dns-view-ipv6-disabled';
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.ENABLE_IPV6_BUTTON_ID = 'dns-view-enable-ipv6';
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.IPV6_PROBE_RUNNING_SPAN_ID = 'dns-view-ipv6-probe-running';
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.IPV6_PROBE_COMPLETE_SPAN_ID = 'dns-view-ipv6-probe-complete';
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.IPV6_PROBE_BUTTON_ID = 'dns-view-run-ipv6-probe';
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.INTERNAL_DNS_ENABLED_SPAN_ID = 'dns-view-internal-dns-enabled';
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.INTERNAL_DNS_INVALID_CONFIG_SPAN_ID =
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'dns-view-internal-dns-invalid-config';
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.INTERNAL_DNS_CONFIG_TBODY_ID = 'dns-view-internal-dns-config-tbody';
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.CLEAR_CACHE_BUTTON_ID = 'dns-view-clear-cache';
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.CAPACITY_SPAN_ID = 'dns-view-cache-capacity';
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.ACTIVE_SPAN_ID = 'dns-view-cache-active';
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.EXPIRED_SPAN_ID = 'dns-view-cache-expired';
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.CACHE_TBODY_ID = 'dns-view-cache-tbody';
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cr.addSingletonGetter(DnsView);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DnsView.prototype = {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Inherit the superclass's methods.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    __proto__: superClass.prototype,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onLoadLogStart: function(polledData, tabData, logDump) {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Clear information on whether or not an IPv6 probe is running.  Needs
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // to be done before loading the events.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setIPv6ProbeJobLookupRunning_(false, -1);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onLoadLogFinish: function(data) {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.onHostResolverInfoChanged(data.hostResolverInfo);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onHostResolverInfoChanged: function(hostResolverInfo) {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Clear the existing values.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      $(DnsView.DEFAULT_FAMILY_SPAN_ID).innerHTML = '';
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      $(DnsView.CAPACITY_SPAN_ID).innerHTML = '';
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      $(DnsView.CACHE_TBODY_ID).innerHTML = '';
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      $(DnsView.ACTIVE_SPAN_ID).innerHTML = '0';
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      $(DnsView.EXPIRED_SPAN_ID).innerHTML = '0';
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Update fields containing async DNS configuration information.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      displayAsyncDnsConfig_(hostResolverInfo);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // No info.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!hostResolverInfo || !hostResolverInfo.cache)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var family = hostResolverInfo.default_address_family;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      addTextNode($(DnsView.DEFAULT_FAMILY_SPAN_ID),
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  addressFamilyToString(family));
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var ipv6Disabled = (family == AddressFamily.ADDRESS_FAMILY_IPV4);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      setNodeDisplay($(DnsView.IPV6_DISABLED_SPAN_ID), ipv6Disabled);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Fill in the basic cache information.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var hostResolverCache = hostResolverInfo.cache;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      $(DnsView.CAPACITY_SPAN_ID).innerText = hostResolverCache.capacity;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var expiredEntries = 0;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Date the cache was logged.  This will be either now, when actively
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // logging data, or the date the log dump was created.
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var logDate;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (MainView.isViewingLoadedLog()) {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        logDate = new Date(ClientInfo.numericDate);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        logDate = new Date();
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Fill in the cache contents table.
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < hostResolverCache.entries.length; ++i) {
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var e = hostResolverCache.entries[i];
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var tr = addNode($(DnsView.CACHE_TBODY_ID), 'tr');
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var hostnameCell = addNode(tr, 'td');
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        addTextNode(hostnameCell, e.hostname);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var familyCell = addNode(tr, 'td');
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        addTextNode(familyCell,
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    addressFamilyToString(e.address_family));
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var addressesCell = addNode(tr, 'td');
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (e.error != undefined) {
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          var errorText =
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              e.error + ' (' + netErrorToString(e.error) + ')';
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          var errorNode = addTextNode(addressesCell, 'error: ' + errorText);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          addressesCell.classList.add('warning-text');
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } else {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          addListToNode_(addNode(addressesCell, 'div'), e.addresses);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var expiresDate = timeutil.convertTimeTicksToDate(e.expiration);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var expiresCell = addNode(tr, 'td');
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        timeutil.addNodeWithDate(expiresCell, expiresDate);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (logDate > timeutil.convertTimeTicksToDate(e.expiration)) {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ++expiredEntries;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          var expiredSpan = addNode(expiresCell, 'span');
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          expiredSpan.classList.add('warning-text');
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          addTextNode(expiredSpan, ' [Expired]');
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      $(DnsView.ACTIVE_SPAN_ID).innerText =
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          hostResolverCache.entries.length - expiredEntries;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      $(DnsView.EXPIRED_SPAN_ID).innerText = expiredEntries;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Must be called whenever an IPv6 probe job starts or stops running.
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {bool} running True if a probe job is running.
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {sourceId} sourceId Source ID of the running probe job, if there
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *     is one.  -1 if |running| is false or we don't yet have the ID.
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setIPv6ProbeJobLookupRunning_: function(running, sourceId) {
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      setNodeDisplay($(DnsView.IPV6_PROBE_RUNNING_SPAN_ID), running);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      setNodeDisplay($(DnsView.IPV6_PROBE_COMPLETE_SPAN_ID), !running);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.ipv6ProbeJobSourceId_ = sourceId;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Triggers a new IPv6 probe and displays the probe running message.
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    runIPv6Probe_: function() {
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Since there's no source ID yet, have to just use -1.  We'll get the
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // ID when we see the start event for the probe.
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setIPv6ProbeJobLookupRunning_(true, -1);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser.sendRunIPv6Probe();
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onReceivedLogEntries: function(logEntries) {
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < logEntries.length; ++i) {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (logEntries[i].source.type != EventSourceType.IPV6_PROBE_JOB ||
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            logEntries[i].type != EventType.IPV6_PROBE_RUNNING) {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          continue;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // For IPV6_PROBE_JOB events, update the display depending on whether or
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // not a probe job is running.  Only track the most recently started
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // probe job, as it will cancel any older jobs.
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (logEntries[i].phase == EventPhase.PHASE_BEGIN) {
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.setIPv6ProbeJobLookupRunning_(true, logEntries[i].source.id);
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } else if (logEntries[i].source.id == this.ipv6ProbeJobSourceId_) {
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.setIPv6ProbeJobLookupRunning_(false, -1);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          g_browser.sendGetHostResolverInfo();
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Since the only thing that matters is the source ID of the active probe
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * job, which clearing events doesn't change, do nothing.
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onAllLogEntriesDeleted: function() {
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Displays information corresponding to the current async DNS configuration.
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {Object} hostResolverInfo The host resolver information.
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function displayAsyncDnsConfig_(hostResolverInfo) {
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Clear the table.
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    $(DnsView.INTERNAL_DNS_CONFIG_TBODY_ID).innerHTML = '';
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Figure out if the internal DNS resolver is disabled or has no valid
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // configuration information, and update display accordingly.
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var enabled = hostResolverInfo &&
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  hostResolverInfo.dns_config !== undefined;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var noConfig = enabled &&
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   hostResolverInfo.dns_config.nameservers === undefined;
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    $(DnsView.INTERNAL_DNS_ENABLED_SPAN_ID).innerText = enabled;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setNodeDisplay($(DnsView.INTERNAL_DNS_INVALID_CONFIG_SPAN_ID), noConfig);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // If the internal DNS resolver is disabled or has no valid configuration,
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // we're done.
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!enabled || noConfig)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var dnsConfig = hostResolverInfo.dns_config;
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Display nameservers first.
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var nameserverRow = addNode($(DnsView.INTERNAL_DNS_CONFIG_TBODY_ID), 'tr');
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    addNodeWithText(nameserverRow, 'th', 'nameservers');
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    addListToNode_(addNode(nameserverRow, 'td'), dnsConfig.nameservers);
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Add everything else in |dnsConfig| to the table.
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (var key in dnsConfig) {
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (key == 'nameservers')
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        continue;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var tr = addNode($(DnsView.INTERNAL_DNS_CONFIG_TBODY_ID), 'tr');
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      addNodeWithText(tr, 'th', key);
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var td = addNode(tr, 'td');
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // For lists, display each list entry on a separate line.
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (typeof dnsConfig[key] == 'object' &&
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          dnsConfig[key].constructor == Array) {
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        addListToNode_(td, dnsConfig[key]);
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        continue;
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      addTextNode(td, dnsConfig[key]);
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Takes a last of strings and adds them all to a DOM node, displaying them
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * on separate lines.
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {DomNode} node The parent node.
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {Array.<String>} list List of strings to add to the node.
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function addListToNode_(node, list) {
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (var i = 0; i < list.length; ++i)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      addNodeWithText(node, 'div', list[i]);
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return DnsView;
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})();
278