Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Unified Diff: chrome/browser/resources/net_internals/eventsview.js

Issue 7531005: Rename the net_internals file names to include hyphens. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Add some missing files Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/net_internals/eventsview.js
===================================================================
--- chrome/browser/resources/net_internals/eventsview.js (revision 94551)
+++ chrome/browser/resources/net_internals/eventsview.js (working copy)
@@ -1,660 +0,0 @@
-// Copyright (c) 2011 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.
-
-/**
- * EventsView displays a filtered list of all events sharing a source, and
- * a details pane for the selected sources.
- *
- * +----------------------++----------------+
- * | filter box || |
- * +----------------------+| |
- * | || |
- * | || |
- * | || |
- * | || |
- * | source list || details |
- * | || view |
- * | || |
- * | || |
- * | || |
- * | || |
- * +----------------------++ |
- * | action bar || |
- * +----------------------++----------------+
- *
- * @constructor
- */
-function EventsView() {
- const tableBodyId = 'eventsListTableBody';
- const filterInputId = 'filterInput';
- const filterCountId = 'filterCount';
- const deleteSelectedId = 'deleteSelected';
- const deleteAllId = 'deleteAll';
- const selectAllId = 'selectAll';
- const sortByIdId = 'sortById';
- const sortBySourceTypeId = 'sortBySource';
- const sortByDescriptionId = 'sortByDescription';
- const tabHandlesContainerId = 'detailsTabHandles';
- const logTabId = 'detailsLogTab';
- const timelineTabId = 'detailsTimelineTab';
- const detailsLogBoxId = 'detailsLogBox';
- const detailsTimelineBoxId = 'detailsTimelineBox';
- const topbarId = 'filterBox';
- const middleboxId = 'eventsBox';
- const bottombarId = 'actionBox';
- const sizerId = 'splitterBoxForEventDetails';
-
- View.call(this);
-
- // Initialize the sub-views.
- var leftPane = new TopMidBottomView(new DivView(topbarId),
- new DivView(middleboxId),
- new DivView(bottombarId));
-
- this.detailsView_ = new DetailsView(tabHandlesContainerId,
- logTabId,
- timelineTabId,
- detailsLogBoxId,
- detailsTimelineBoxId);
-
- this.splitterView_ = new ResizableVerticalSplitView(
- leftPane, this.detailsView_, new DivView(sizerId));
-
- g_browser.sourceTracker.addObserver(this);
-
- this.tableBody_ = $(tableBodyId);
-
- this.filterInput_ = $(filterInputId);
- this.filterCount_ = $(filterCountId);
-
- this.filterInput_.addEventListener('search',
- this.onFilterTextChanged_.bind(this), true);
-
- $(deleteSelectedId).onclick = this.deleteSelected_.bind(this);
-
- $(deleteAllId).onclick = g_browser.sourceTracker.deleteAllSourceEntries.bind(
- g_browser.sourceTracker);
-
- $(selectAllId).addEventListener('click', this.selectAll_.bind(this), true);
-
- $(sortByIdId).addEventListener('click', this.sortById_.bind(this), true);
-
- $(sortBySourceTypeId).addEventListener(
- 'click', this.sortBySourceType_.bind(this), true);
-
- $(sortByDescriptionId).addEventListener(
- 'click', this.sortByDescription_.bind(this), true);
-
- // Sets sort order and filter.
- this.setFilter_('');
-
- this.initializeSourceList_();
-}
-
-inherits(EventsView, View);
-
-/**
- * Initializes the list of source entries. If source entries are already,
- * being displayed, removes them all in the process.
- */
-EventsView.prototype.initializeSourceList_ = function() {
- this.currentSelectedRows_ = [];
- this.sourceIdToRowMap_ = {};
- this.tableBody_.innerHTML = '';
- this.numPrefilter_ = 0;
- this.numPostfilter_ = 0;
- this.invalidateFilterCounter_();
- this.invalidateDetailsView_();
-};
-
-// How soon after updating the filter list the counter should be updated.
-EventsView.REPAINT_FILTER_COUNTER_TIMEOUT_MS = 0;
-
-EventsView.prototype.setGeometry = function(left, top, width, height) {
- EventsView.superClass_.setGeometry.call(this, left, top, width, height);
- this.splitterView_.setGeometry(left, top, width, height);
-};
-
-EventsView.prototype.show = function(isVisible) {
- EventsView.superClass_.show.call(this, isVisible);
- this.splitterView_.show(isVisible);
-};
-
-EventsView.prototype.getFilterText_ = function() {
- return this.filterInput_.value;
-};
-
-EventsView.prototype.setFilterText_ = function(filterText) {
- this.filterInput_.value = filterText;
- this.onFilterTextChanged_();
-};
-
-EventsView.prototype.onFilterTextChanged_ = function() {
- this.setFilter_(this.getFilterText_());
-};
-
-/**
- * Updates text in the details view when security stripping is toggled.
- */
-EventsView.prototype.onSecurityStrippingChanged = function() {
- this.invalidateDetailsView_();
-}
-
-/**
- * Sorts active entries first. If both entries are inactive, puts the one
- * that was active most recently first. If both are active, uses source ID,
- * which puts longer lived events at the top, and behaves better than using
- * duration or time of first event.
- */
-EventsView.compareActive_ = function(source1, source2) {
- if (!source1.isInactive() && source2.isInactive())
- return -1;
- if (source1.isInactive() && !source2.isInactive())
- return 1;
- if (source1.isInactive()) {
- var deltaEndTime = source1.getEndTime() - source2.getEndTime();
- if (deltaEndTime != 0) {
- // The one that ended most recently (Highest end time) should be sorted
- // first.
- return -deltaEndTime;
- }
- // If both ended at the same time, then odds are they were related events,
- // started one after another, so sort in the opposite order of their
- // source IDs to get a more intuitive ordering.
- return -EventsView.compareSourceId_(source1, source2);
- }
- return EventsView.compareSourceId_(source1, source2);
-};
-
-EventsView.compareDescription_ = function(source1, source2) {
- var source1Text = source1.getDescription().toLowerCase();
- var source2Text = source2.getDescription().toLowerCase();
- var compareResult = source1Text.localeCompare(source2Text);
- if (compareResult != 0)
- return compareResult;
- return EventsView.compareSourceId_(source1, source2);
-};
-
-EventsView.compareDuration_ = function(source1, source2) {
- var durationDifference = source2.getDuration() - source1.getDuration();
- if (durationDifference)
- return durationDifference;
- return EventsView.compareSourceId_(source1, source2);
-};
-
-/**
- * For the purposes of sorting by source IDs, entries without a source
- * appear right after the SourceEntry with the highest source ID received
- * before the sourceless entry. Any ambiguities are resolved by ordering
- * the entries without a source by the order in which they were received.
- */
-EventsView.compareSourceId_ = function(source1, source2) {
- var sourceId1 = source1.getSourceId();
- if (sourceId1 < 0)
- sourceId1 = source1.getMaxPreviousEntrySourceId();
- var sourceId2 = source2.getSourceId();
- if (sourceId2 < 0)
- sourceId2 = source2.getMaxPreviousEntrySourceId();
-
- if (sourceId1 != sourceId2)
- return sourceId1 - sourceId2;
-
- // One or both have a negative ID. In either case, the source with the
- // highest ID should be sorted first.
- return source2.getSourceId() - source1.getSourceId();
-};
-
-EventsView.compareSourceType_ = function(source1, source2) {
- var source1Text = source1.getSourceTypeString();
- var source2Text = source2.getSourceTypeString();
- var compareResult = source1Text.localeCompare(source2Text);
- if (compareResult != 0)
- return compareResult;
- return EventsView.compareSourceId_(source1, source2);
-};
-
-EventsView.prototype.comparisonFuncWithReversing_ = function(a, b) {
- var result = this.comparisonFunction_(a, b);
- if (this.doSortBackwards_)
- result *= -1;
- return result;
-};
-
-EventsView.comparisonFunctionTable_ = {
- // sort: and sort:- are allowed
- '': EventsView.compareSourceId_,
- 'active': EventsView.compareActive_,
- 'desc': EventsView.compareDescription_,
- 'description': EventsView.compareDescription_,
- 'duration': EventsView.compareDuration_,
- 'id': EventsView.compareSourceId_,
- 'source': EventsView.compareSourceType_,
- 'type': EventsView.compareSourceType_
-};
-
-EventsView.prototype.Sort_ = function() {
- var sourceEntries = [];
- for (var id in this.sourceIdToRowMap_) {
- sourceEntries.push(this.sourceIdToRowMap_[id].getSourceEntry());
- }
- sourceEntries.sort(this.comparisonFuncWithReversing_.bind(this));
-
- // Reposition source rows from back to front.
- for (var i = sourceEntries.length - 2; i >= 0; --i) {
- var sourceRow = this.sourceIdToRowMap_[sourceEntries[i].getSourceId()];
- var nextSourceId = sourceEntries[i + 1].getSourceId();
- if (sourceRow.getNextNodeSourceId() != nextSourceId) {
- var nextSourceRow = this.sourceIdToRowMap_[nextSourceId];
- sourceRow.moveBefore(nextSourceRow);
- }
- }
-};
-
-/**
- * Looks for the first occurence of |directive|:parameter in |sourceText|.
- * Parameter can be an empty string.
- *
- * On success, returns an object with two fields:
- * |remainingText| - |sourceText| with |directive|:parameter removed,
- and excess whitespace deleted.
- * |parameter| - the parameter itself.
- *
- * On failure, returns null.
- */
-EventsView.prototype.parseDirective_ = function(sourceText, directive) {
- // Adding a leading space allows a single regexp to be used, regardless of
- // whether or not the directive is at the start of the string.
- sourceText = ' ' + sourceText;
- regExp = new RegExp('\\s+' + directive + ':(\\S*)\\s*', 'i');
- matchInfo = regExp.exec(sourceText);
- if (matchInfo == null)
- return null;
-
- return {'remainingText': sourceText.replace(regExp, ' ').trim(),
- 'parameter': matchInfo[1]};
-};
-
-/**
- * Just like parseDirective_, except can optionally be a '-' before or
- * the parameter, to negate it. Before is more natural, after
- * allows more convenient toggling.
- *
- * Returned value has the additional field |isNegated|, and a leading
- * '-' will be removed from |parameter|, if present.
- */
-EventsView.prototype.parseNegatableDirective_ = function(sourceText,
- directive) {
- var matchInfo = this.parseDirective_(sourceText, directive);
- if (matchInfo == null)
- return null;
-
- // Remove any leading or trailing '-' from the directive.
- var negationInfo = /^(-?)(\S*?)$/.exec(matchInfo.parameter);
- matchInfo.parameter = negationInfo[2];
- matchInfo.isNegated = (negationInfo[1] == '-');
- return matchInfo;
-};
-
-/**
- * Parse any "sort:" directives, and update |comparisonFunction_| and
- * |doSortBackwards_|as needed. Note only the last valid sort directive
- * is used.
- *
- * Returns |filterText| with all sort directives removed, including
- * invalid ones.
- */
-EventsView.prototype.parseSortDirectives_ = function(filterText) {
- this.comparisonFunction_ = EventsView.compareSourceId_;
- this.doSortBackwards_ = false;
-
- while (true) {
- var sortInfo = this.parseNegatableDirective_(filterText, 'sort');
- if (sortInfo == null)
- break;
- var comparisonName = sortInfo.parameter.toLowerCase();
- if (EventsView.comparisonFunctionTable_[comparisonName] != null) {
- this.comparisonFunction_ =
- EventsView.comparisonFunctionTable_[comparisonName];
- this.doSortBackwards_ = sortInfo.isNegated;
- }
- filterText = sortInfo.remainingText;
- }
-
- return filterText;
-};
-
-/**
- * Parse any "is:" directives, and update |filter| accordingly.
- *
- * Returns |filterText| with all "is:" directives removed, including
- * invalid ones.
- */
-EventsView.prototype.parseRestrictDirectives_ = function(filterText, filter) {
- while (true) {
- var filterInfo = this.parseNegatableDirective_(filterText, 'is');
- if (filterInfo == null)
- break;
- if (filterInfo.parameter == 'active') {
- if (!filterInfo.isNegated) {
- filter.isActive = true;
- } else {
- filter.isInactive = true;
- }
- }
- if (filterInfo.parameter == 'error') {
- if (!filterInfo.isNegated) {
- filter.isError = true;
- } else {
- filter.isNotError = true;
- }
- }
- filterText = filterInfo.remainingText;
- }
- return filterText;
-};
-
-/**
- * Parses all directives that take arbitrary strings as input,
- * and updates |filter| accordingly. Directives of these types
- * are stored as lists.
- *
- * Returns |filterText| with all recognized directives removed.
- */
-EventsView.prototype.parseStringDirectives_ = function(filterText, filter) {
- var directives = ['type', 'id'];
- for (var i = 0; i < directives.length; ++i) {
- while (true) {
- var directive = directives[i];
- var filterInfo = this.parseDirective_(filterText, directive);
- if (filterInfo == null)
- break;
- if (!filter[directive])
- filter[directive] = [];
- filter[directive].push(filterInfo.parameter);
- filterText = filterInfo.remainingText;
- }
- }
- return filterText;
-};
-
-/*
- * Converts |filterText| into an object representing the filter.
- */
-EventsView.prototype.createFilter_ = function(filterText) {
- var filter = {};
- filterText = filterText.toLowerCase();
- filterText = this.parseRestrictDirectives_(filterText, filter);
- filterText = this.parseStringDirectives_(filterText, filter);
- filter.text = filterText.trim();
- return filter;
-};
-
-EventsView.prototype.setFilter_ = function(filterText) {
- var lastComparisonFunction = this.comparisonFunction_;
- var lastDoSortBackwards = this.doSortBackwards_;
-
- filterText = this.parseSortDirectives_(filterText);
-
- if (lastComparisonFunction != this.comparisonFunction_ ||
- lastDoSortBackwards != this.doSortBackwards_) {
- this.Sort_();
- }
-
- this.currentFilter_ = this.createFilter_(filterText);
-
- // Iterate through all of the rows and see if they match the filter.
- for (var id in this.sourceIdToRowMap_) {
- var entry = this.sourceIdToRowMap_[id];
- entry.setIsMatchedByFilter(entry.matchesFilter(this.currentFilter_));
- }
-};
-
-/**
- * Repositions |sourceRow|'s in the table using an insertion sort.
- * Significantly faster than sorting the entire table again, when only
- * one entry has changed.
- */
-EventsView.prototype.InsertionSort_ = function(sourceRow) {
- // SourceRow that should be after |sourceRow|, if it needs
- // to be moved earlier in the list.
- var sourceRowAfter = sourceRow;
- while (true) {
- var prevSourceId = sourceRowAfter.getPreviousNodeSourceId();
- if (prevSourceId == null)
- break;
- var prevSourceRow = this.sourceIdToRowMap_[prevSourceId];
- if (this.comparisonFuncWithReversing_(
- sourceRow.getSourceEntry(),
- prevSourceRow.getSourceEntry()) >= 0) {
- break;
- }
- sourceRowAfter = prevSourceRow;
- }
- if (sourceRowAfter != sourceRow) {
- sourceRow.moveBefore(sourceRowAfter);
- return;
- }
-
- var sourceRowBefore = sourceRow;
- while (true) {
- var nextSourceId = sourceRowBefore.getNextNodeSourceId();
- if (nextSourceId == null)
- break;
- var nextSourceRow = this.sourceIdToRowMap_[nextSourceId];
- if (this.comparisonFuncWithReversing_(
- sourceRow.getSourceEntry(),
- nextSourceRow.getSourceEntry()) <= 0) {
- break;
- }
- sourceRowBefore = nextSourceRow;
- }
- if (sourceRowBefore != sourceRow)
- sourceRow.moveAfter(sourceRowBefore);
-};
-
-EventsView.prototype.onSourceEntryUpdated = function(sourceEntry) {
- // Lookup the row.
- var sourceRow = this.sourceIdToRowMap_[sourceEntry.getSourceId()];
-
- if (!sourceRow) {
- sourceRow = new SourceRow(this, sourceEntry);
- this.sourceIdToRowMap_[sourceEntry.getSourceId()] = sourceRow;
- }
-
- sourceRow.onSourceUpdated();
-
- if (sourceRow.isSelected())
- this.invalidateDetailsView_();
-
- // TODO(mmenke): Fix sorting when sorting by duration.
- // Duration continuously increases for all entries that are
- // still active. This can result in incorrect sorting, until
- // Sort_ is called.
- this.InsertionSort_(sourceRow);
-};
-
-/**
- * Returns the SourceRow with the specified ID, if there is one.
- * Otherwise, returns undefined.
- */
-EventsView.prototype.getSourceRow = function(id) {
- return this.sourceIdToRowMap_[id];
-};
-
-/**
- * Called whenever some log events are deleted. |sourceIds| lists
- * the source IDs of all deleted log entries.
- */
-EventsView.prototype.onSourceEntriesDeleted = function(sourceIds) {
- for (var i = 0; i < sourceIds.length; ++i) {
- var id = sourceIds[i];
- var sourceRow = this.sourceIdToRowMap_[id];
- if (sourceRow) {
- sourceRow.remove();
- delete this.sourceIdToRowMap_[id];
- this.incrementPrefilterCount(-1);
- }
- }
-};
-
-/**
- * Called whenever all log events are deleted.
- */
-EventsView.prototype.onAllSourceEntriesDeleted = function() {
- this.initializeSourceList_();
-};
-
-/**
- * Called when either a log file is loaded, after clearing the old entries,
- * but before getting any new ones.
- */
-EventsView.prototype.onLoadLogStart = function() {
- // Needed to sort new sourceless entries correctly.
- this.maxReceivedSourceId_ = 0;
-};
-
-EventsView.prototype.onLoadLogFinish = function(data) {
- return true;
-};
-
-EventsView.prototype.incrementPrefilterCount = function(offset) {
- this.numPrefilter_ += offset;
- this.invalidateFilterCounter_();
-};
-
-EventsView.prototype.incrementPostfilterCount = function(offset) {
- this.numPostfilter_ += offset;
- this.invalidateFilterCounter_();
-};
-
-EventsView.prototype.onSelectionChanged = function() {
- this.invalidateDetailsView_();
-};
-
-EventsView.prototype.clearSelection = function() {
- var prevSelection = this.currentSelectedRows_;
- this.currentSelectedRows_ = [];
-
- // Unselect everything that is currently selected.
- for (var i = 0; i < prevSelection.length; ++i) {
- prevSelection[i].setSelected(false);
- }
-
- this.onSelectionChanged();
-};
-
-EventsView.prototype.deleteSelected_ = function() {
- var sourceIds = [];
- for (var i = 0; i < this.currentSelectedRows_.length; ++i) {
- var sourceRow = this.currentSelectedRows_[i];
- sourceIds.push(sourceRow.getSourceEntry().getSourceId());
- }
- g_browser.sourceTracker.deleteSourceEntries(sourceIds);
-};
-
-EventsView.prototype.selectAll_ = function(event) {
- for (var id in this.sourceIdToRowMap_) {
- var sourceRow = this.sourceIdToRowMap_[id];
- if (sourceRow.isMatchedByFilter()) {
- sourceRow.setSelected(true);
- }
- }
- event.preventDefault();
-};
-
-EventsView.prototype.unselectAll_ = function() {
- var entries = this.currentSelectedRows_.slice(0);
- for (var i = 0; i < entries.length; ++i) {
- entries[i].setSelected(false);
- }
-};
-
-/**
- * If |params| includes a query, replaces the current filter and unselects.
- * all items.
- */
-EventsView.prototype.setParameters = function(params) {
- if (params.q) {
- this.unselectAll_();
- this.setFilterText_(params.q);
- }
-};
-
-/**
- * If already using the specified sort method, flips direction. Otherwise,
- * removes pre-existing sort parameter before adding the new one.
- */
-EventsView.prototype.toggleSortMethod_ = function(sortMethod) {
- // Remove old sort directives, if any.
- var filterText = this.parseSortDirectives_(this.getFilterText_());
-
- // If already using specified sortMethod, sort backwards.
- if (!this.doSortBackwards_ &&
- EventsView.comparisonFunctionTable_[sortMethod] ==
- this.comparisonFunction_)
- sortMethod = '-' + sortMethod;
-
- filterText = 'sort:' + sortMethod + ' ' + filterText;
- this.setFilterText_(filterText.trim());
-};
-
-EventsView.prototype.sortById_ = function(event) {
- this.toggleSortMethod_('id');
-};
-
-EventsView.prototype.sortBySourceType_ = function(event) {
- this.toggleSortMethod_('source');
-};
-
-EventsView.prototype.sortByDescription_ = function(event) {
- this.toggleSortMethod_('desc');
-};
-
-EventsView.prototype.modifySelectionArray = function(
- sourceRow, addToSelection) {
- // Find the index for |sourceEntry| in the current selection list.
- var index = -1;
- for (var i = 0; i < this.currentSelectedRows_.length; ++i) {
- if (this.currentSelectedRows_[i] == sourceRow) {
- index = i;
- break;
- }
- }
-
- if (index != -1 && !addToSelection) {
- // Remove from the selection.
- this.currentSelectedRows_.splice(index, 1);
- }
-
- if (index == -1 && addToSelection) {
- this.currentSelectedRows_.push(sourceRow);
- }
-};
-
-EventsView.prototype.getSelectedSourceEntries_ = function() {
- var sourceEntries = [];
- for (var id in this.currentSelectedRows_) {
- sourceEntries.push(this.currentSelectedRows_[id].getSourceEntry());
- }
- return sourceEntries;
-};
-
-EventsView.prototype.invalidateDetailsView_ = function() {
- this.detailsView_.setData(this.getSelectedSourceEntries_());
-};
-
-EventsView.prototype.invalidateFilterCounter_ = function() {
- if (!this.outstandingRepaintFilterCounter_) {
- this.outstandingRepaintFilterCounter_ = true;
- window.setTimeout(this.repaintFilterCounter_.bind(this),
- EventsView.REPAINT_FILTER_COUNTER_TIMEOUT_MS);
- }
-};
-
-EventsView.prototype.repaintFilterCounter_ = function() {
- this.outstandingRepaintFilterCounter_ = false;
- this.filterCount_.innerHTML = '';
- addTextNode(this.filterCount_,
- this.numPostfilter_ + ' of ' + this.numPrefilter_);
-};
« no previous file with comments | « chrome/browser/resources/net_internals/events_view.js ('k') | chrome/browser/resources/net_internals/hsts-view.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698