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 state of all socket pools.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   - Shows a summary of the state of each socket pool at the top.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   - For each pool with allocated sockets or connect jobs, shows all its
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *     groups with any allocated sockets.
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var SocketsView = (function() {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'use strict';
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We inherit from DivView.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var superClass = DivView;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function SocketsView() {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    assertFirstConstructorCall(SocketsView);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Call superclass's constructor.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    superClass.call(this, SocketsView.MAIN_BOX_ID);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    g_browser.addSocketPoolInfoObserver(this, true);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.socketPoolDiv_ = $(SocketsView.SOCKET_POOL_DIV_ID);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.socketPoolGroupsDiv_ = $(SocketsView.SOCKET_POOL_GROUPS_DIV_ID);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var closeIdleButton = $(SocketsView.CLOSE_IDLE_SOCKETS_BUTTON_ID);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    closeIdleButton.onclick = this.closeIdleSockets.bind(this);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var flushSocketsButton = $(SocketsView.SOCKET_POOL_FLUSH_BUTTON_ID);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    flushSocketsButton.onclick = this.flushSocketPools.bind(this);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SocketsView.TAB_ID = 'tab-handle-sockets';
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SocketsView.TAB_NAME = 'Sockets';
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SocketsView.TAB_HASH = '#sockets';
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IDs for special HTML elements in sockets_view.html
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SocketsView.MAIN_BOX_ID = 'sockets-view-tab-content';
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SocketsView.SOCKET_POOL_DIV_ID = 'sockets-view-pool-div';
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SocketsView.SOCKET_POOL_GROUPS_DIV_ID = 'sockets-view-pool-groups-div';
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SocketsView.CLOSE_IDLE_SOCKETS_BUTTON_ID = 'sockets-view-close-idle-button';
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SocketsView.SOCKET_POOL_FLUSH_BUTTON_ID = 'sockets-view-flush-button';
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cr.addSingletonGetter(SocketsView);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SocketsView.prototype = {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Inherit the superclass's methods.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    __proto__: superClass.prototype,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onLoadLogFinish: function(data) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.onSocketPoolInfoChanged(data.socketPoolInfo);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onSocketPoolInfoChanged: function(socketPoolInfo) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.socketPoolDiv_.innerHTML = '';
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.socketPoolGroupsDiv_.innerHTML = '';
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!socketPoolInfo)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var socketPools = SocketPoolWrapper.createArrayFrom(socketPoolInfo);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var tablePrinter = SocketPoolWrapper.createTablePrinter(socketPools);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tablePrinter.toHTML(this.socketPoolDiv_, 'styled-table');
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Add table for each socket pool with information on each of its groups.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < socketPools.length; ++i) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (socketPools[i].origPool.groups != undefined) {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          var p = addNode(this.socketPoolGroupsDiv_, 'p');
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          var br = addNode(p, 'br');
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          var groupTablePrinter = socketPools[i].createGroupTablePrinter();
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          groupTablePrinter.toHTML(p, 'styled-table');
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    closeIdleSockets: function() {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser.sendCloseIdleSockets();
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser.checkForUpdatedInfo(false);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    flushSocketPools: function() {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser.sendFlushSocketPools();
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      g_browser.checkForUpdatedInfo(false);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SocketsView;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})();
95