// Copyright (c) 2010 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 a summary of the state of each SPDY sessions, and * has links to display them in the events tab. * * @constructor */ function SpdyView(mainBoxId, spdyEnabledSpanId, spdyUseAlternateProtocolSpanId, spdyForceAlwaysSpanId, spdyForceOverSslSpanId, spdyNextProtocolsSpanId, spdyAlternateProtocolMappingsDivId, spdySessionNoneSpanId, spdySessionLinkSpanId, spdySessionDivId) { DivView.call(this, mainBoxId); g_browser.addSpdySessionInfoObserver(this); g_browser.addSpdyStatusObserver(this); g_browser.addSpdyAlternateProtocolMappingsObserver(this); this.spdyEnabledSpan_ = document.getElementById(spdyEnabledSpanId); this.spdyUseAlternateProtocolSpan_ = document.getElementById(spdyUseAlternateProtocolSpanId); this.spdyForceAlwaysSpan_ = document.getElementById(spdyForceAlwaysSpanId); this.spdyForceOverSslSpan_ = document.getElementById(spdyForceOverSslSpanId); this.spdyNextProtocolsSpan_ = document.getElementById(spdyNextProtocolsSpanId); this.spdyAlternateProtocolMappingsDiv_ = document.getElementById(spdyAlternateProtocolMappingsDivId); this.spdySessionNoneSpan_ = document.getElementById(spdySessionNoneSpanId); this.spdySessionLinkSpan_ = document.getElementById(spdySessionLinkSpanId); this.spdySessionDiv_ = document.getElementById(spdySessionDivId); } inherits(SpdyView, DivView); /** * If |spdySessionInfo| is not null, displays a single table with information * on each SPDY session. Otherwise, displays "None". */ SpdyView.prototype.onSpdySessionInfoChanged = function(spdySessionInfo) { this.spdySessionDiv_.innerHTML = ''; var hasNoSession = (spdySessionInfo == null || spdySessionInfo.length == 0); setNodeDisplay(this.spdySessionNoneSpan_, hasNoSession); setNodeDisplay(this.spdySessionLinkSpan_, !hasNoSession); if (hasNoSession) return; var tablePrinter = SpdyView.createSessionTablePrinter(spdySessionInfo); tablePrinter.toHTML(this.spdySessionDiv_, 'styledTable'); }; /** * Displays information on the global SPDY status. */ SpdyView.prototype.onSpdyStatusChanged = function(spdyStatus) { this.spdyEnabledSpan_.innerText = spdyStatus.spdy_enabled; this.spdyUseAlternateProtocolSpan_.innerText = spdyStatus.use_alternate_protocols; this.spdyForceAlwaysSpan_.innerText = spdyStatus.force_spdy_always; this.spdyForceOverSslSpan_.innerText = spdyStatus.force_spdy_over_ssl; this.spdyNextProtocolsSpan_.innerText = spdyStatus.next_protos; } /** * If |spdyAlternateProtocolMappings| is not empty, displays a single table * with information on each alternate protocol enabled server. Otherwise, * displays "None". */ SpdyView.prototype.onSpdyAlternateProtocolMappingsChanged = function(spdyAlternateProtocolMappings) { this.spdyAlternateProtocolMappingsDiv_.innerHTML = ''; if (spdyAlternateProtocolMappings != null && spdyAlternateProtocolMappings.length > 0) { var tabPrinter = SpdyView.createAlternateProtocolMappingsTablePrinter( spdyAlternateProtocolMappings); tabPrinter.toHTML(this.spdyAlternateProtocolMappingsDiv_, 'styledTable'); } else { this.spdyAlternateProtocolMappingsDiv_.innerHTML = 'None'; } }; /** * Creates a table printer to print out the state of list of SPDY sessions. */ SpdyView.createSessionTablePrinter = function(spdySessions) { var tablePrinter = new TablePrinter(); tablePrinter.addHeaderCell('Host'); tablePrinter.addHeaderCell('Proxy'); tablePrinter.addHeaderCell('ID'); tablePrinter.addHeaderCell('Active streams'); tablePrinter.addHeaderCell('Unclaimed pushed'); tablePrinter.addHeaderCell('Max'); tablePrinter.addHeaderCell('Initiated'); tablePrinter.addHeaderCell('Pushed'); tablePrinter.addHeaderCell('Pushed and claimed'); tablePrinter.addHeaderCell('Abandoned'); tablePrinter.addHeaderCell('Received frames'); tablePrinter.addHeaderCell('Secure'); tablePrinter.addHeaderCell('Sent settings'); tablePrinter.addHeaderCell('Received settings'); tablePrinter.addHeaderCell('Error'); for (var i = 0; i < spdySessions.length; i++) { var session = spdySessions[i]; tablePrinter.addRow(); tablePrinter.addCell(session.host_port_pair); tablePrinter.addCell(session.proxy); var idCell = tablePrinter.addCell(session.source_id); idCell.link = '#events&q=id:' + session.source_id; tablePrinter.addCell(session.active_streams); tablePrinter.addCell(session.unclaimed_pushed_streams); tablePrinter.addCell(session.max_concurrent_streams); tablePrinter.addCell(session.streams_initiated_count); tablePrinter.addCell(session.streams_pushed_count); tablePrinter.addCell(session.streams_pushed_and_claimed_count); tablePrinter.addCell(session.streams_abandoned_count); tablePrinter.addCell(session.frames_received); tablePrinter.addCell(session.is_secure); tablePrinter.addCell(session.sent_settings); tablePrinter.addCell(session.received_settings); tablePrinter.addCell(session.error); } return tablePrinter; }; /** * Creates a table printer to print out the list of alternate protocol * mappings. */ SpdyView.createAlternateProtocolMappingsTablePrinter = function(spdyAlternateProtocolMappings) { var tablePrinter = new TablePrinter(); tablePrinter.addHeaderCell('Host'); tablePrinter.addHeaderCell('Alternate Protocol'); for (var i = 0; i < spdyAlternateProtocolMappings.length; i++) { var entry = spdyAlternateProtocolMappings[i]; tablePrinter.addRow(); tablePrinter.addCell(entry.host_port_pair); tablePrinter.addCell(entry.alternate_protocol); } return tablePrinter; };