blob: 0958951e3fd49c25db44475488dace406aaedd7f [file] [log] [blame]
// Copyright (c) 2012 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 related to Prerendering.
*/
var PrerenderView = (function() {
'use strict';
// We inherit from DivView.
var superClass = DivView;
/**
* @constructor
*/
function PrerenderView() {
assertFirstConstructorCall(PrerenderView);
// Call superclass's constructor.
superClass.call(this, PrerenderView.MAIN_BOX_ID);
g_browser.addPrerenderInfoObserver(this, true);
this.prerenderEnabledSpan_ = $(PrerenderView.ENABLED_SPAN_ID);
this.prerenderOmniboxEnabledSpan_ =
$(PrerenderView.OMNIBOX_ENABLED_SPAN_ID);
this.prerenderHistoryDiv_ = $(PrerenderView.HISTORY_DIV_ID);
this.prerenderActiveDiv_ = $(PrerenderView.ACTIVE_DIV_ID);
}
// ID for special HTML element in category_tabs.html
PrerenderView.TAB_HANDLE_ID = 'tab-handle-prerender';
// IDs for special HTML elements in prerender_view.html
PrerenderView.MAIN_BOX_ID = 'prerender-view-tab-content';
PrerenderView.ENABLED_SPAN_ID = 'prerender-view-enabled-span';
PrerenderView.OMNIBOX_ENABLED_SPAN_ID = 'prerender-view-omnibox-enabled-span';
PrerenderView.HISTORY_DIV_ID = 'prerender-view-history-div';
PrerenderView.ACTIVE_DIV_ID = 'prerender-view-active-div';
cr.addSingletonGetter(PrerenderView);
PrerenderView.prototype = {
// Inherit the superclass's methods.
__proto__: superClass.prototype,
onLoadLogFinish: function(data) {
return this.onPrerenderInfoChanged(data.prerenderInfo);
},
onPrerenderInfoChanged: function(prerenderInfo) {
this.prerenderEnabledSpan_.textContent = '';
this.prerenderOmniboxEnabledSpan_.textContent = '';
this.prerenderHistoryDiv_.innerHTML = '';
this.prerenderActiveDiv_.innerHTML = '';
if (prerenderInfo && ('enabled' in prerenderInfo)) {
this.prerenderEnabledSpan_.textContent =
prerenderInfo.enabled.toString();
if (prerenderInfo.enabled_note) {
this.prerenderEnabledSpan_.textContent +=
' ' + prerenderInfo.enabled_note;
}
}
if (prerenderInfo && ('omnibox_enabled' in prerenderInfo)) {
this.prerenderOmniboxEnabledSpan_.textContent =
prerenderInfo.omnibox_enabled.toString();
}
if (!isValidPrerenderInfo(prerenderInfo))
return false;
var tabPrinter = createHistoryTablePrinter(prerenderInfo.history);
tabPrinter.toHTML(this.prerenderHistoryDiv_, 'styled-table');
var tabPrinter = createActiveTablePrinter(prerenderInfo.active);
tabPrinter.toHTML(this.prerenderActiveDiv_, 'styled-table');
return true;
}
};
function isValidPrerenderInfo(prerenderInfo) {
if (prerenderInfo == null) {
return false;
}
if (!('history' in prerenderInfo) ||
!('active' in prerenderInfo) ||
!('enabled' in prerenderInfo)) {
return false;
}
return true;
}
function createHistoryTablePrinter(prerenderHistory) {
var tablePrinter = new TablePrinter();
tablePrinter.addHeaderCell('Origin');
tablePrinter.addHeaderCell('URL');
tablePrinter.addHeaderCell('Final Status');
tablePrinter.addHeaderCell('Time');
for (var i = 0; i < prerenderHistory.length; i++) {
var historyEntry = prerenderHistory[i];
tablePrinter.addRow();
tablePrinter.addCell(historyEntry.origin);
tablePrinter.addCell(historyEntry.url);
tablePrinter.addCell(historyEntry.final_status);
var date = new Date(parseInt(historyEntry.end_time));
// TODO(eroman): Switch to addNodeWithDate()
tablePrinter.addCell(timeutil.dateToString(date));
}
return tablePrinter;
}
function createActiveTablePrinter(prerenderActive) {
var tablePrinter = new TablePrinter();
tablePrinter.addHeaderCell('URL');
tablePrinter.addHeaderCell('Duration');
for (var i = 0; i < prerenderActive.length; i++) {
var activeEntry = prerenderActive[i];
tablePrinter.addRow();
tablePrinter.addCell(activeEntry.url);
tablePrinter.addCell(activeEntry.duration);
}
return tablePrinter;
}
return PrerenderView;
})();