| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * Each row in the filtered items list is backed by a SourceEntry. This | 6 * Each row in the filtered items list is backed by a SourceEntry. This |
| 7 * instance contains all of the data pertaining to that row, and notifies | 7 * instance contains all of the data pertaining to that row, and notifies |
| 8 * its parent view (the RequestsView) whenever its data changes. | 8 * its parent view (the RequestsView) whenever its data changes. |
| 9 * | 9 * |
| 10 * @constructor | 10 * @constructor |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 this.row_.style.display = 'none'; | 60 this.row_.style.display = 'none'; |
| 61 } | 61 } |
| 62 }; | 62 }; |
| 63 | 63 |
| 64 SourceEntry.prototype.update = function(logEntry) { | 64 SourceEntry.prototype.update = function(logEntry) { |
| 65 var prevStartEntry = this.getStartEntry_(); | 65 var prevStartEntry = this.getStartEntry_(); |
| 66 this.entries_.push(logEntry); | 66 this.entries_.push(logEntry); |
| 67 var curStartEntry = this.getStartEntry_(); | 67 var curStartEntry = this.getStartEntry_(); |
| 68 | 68 |
| 69 // If we just got the first entry for this source. | 69 // If we just got the first entry for this source. |
| 70 if (!prevStartEntry && curStartEntry) { | 70 if (prevStartEntry != curStartEntry) { |
| 71 this.createRow_(); | 71 if (!prevStartEntry) |
| 72 this.createRow_(); |
| 73 else |
| 74 this.updateDescription_(); |
| 72 | 75 |
| 73 // Only apply the filter during the first update. | 76 // Only apply the filter during the first update. |
| 74 // TODO(eroman): once filters use other data, apply it on each update. | 77 // TODO(eroman): once filters use other data, apply it on each update. |
| 75 var matchesFilter = this.matchesFilter(this.parentView_.currentFilter_); | 78 var matchesFilter = this.matchesFilter(this.parentView_.currentFilter_); |
| 76 this.setIsMatchedByFilter(matchesFilter); | 79 this.setIsMatchedByFilter(matchesFilter); |
| 77 } | 80 } |
| 78 }; | 81 }; |
| 79 | 82 |
| 80 SourceEntry.prototype.onCheckboxToggled_ = function() { | 83 SourceEntry.prototype.onCheckboxToggled_ = function() { |
| 81 this.setSelected(this.getSelectionCheckbox().checked); | 84 this.setSelected(this.getSelectionCheckbox().checked); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 109 }; | 112 }; |
| 110 | 113 |
| 111 SourceEntry.prototype.onMouseover_ = function() { | 114 SourceEntry.prototype.onMouseover_ = function() { |
| 112 this.setMouseoverStyle(true); | 115 this.setMouseoverStyle(true); |
| 113 }; | 116 }; |
| 114 | 117 |
| 115 SourceEntry.prototype.onMouseout_ = function() { | 118 SourceEntry.prototype.onMouseout_ = function() { |
| 116 this.setMouseoverStyle(false); | 119 this.setMouseoverStyle(false); |
| 117 }; | 120 }; |
| 118 | 121 |
| 122 SourceEntry.prototype.updateDescription_ = function() { |
| 123 this.descriptionCell_.innerHTML = ''; |
| 124 addTextNode(this.descriptionCell_, this.getDescription()); |
| 125 } |
| 126 |
| 119 SourceEntry.prototype.createRow_ = function() { | 127 SourceEntry.prototype.createRow_ = function() { |
| 120 // Create a row. | 128 // Create a row. |
| 121 var tr = addNode(this.parentView_.tableBody_, 'tr'); | 129 var tr = addNode(this.parentView_.tableBody_, 'tr'); |
| 122 tr.style.display = 'none'; | 130 tr.style.display = 'none'; |
| 123 this.row_ = tr; | 131 this.row_ = tr; |
| 124 | 132 |
| 125 var selectionCol = addNode(tr, 'td'); | 133 var selectionCol = addNode(tr, 'td'); |
| 126 var checkbox = addNode(selectionCol, 'input'); | 134 var checkbox = addNode(selectionCol, 'input'); |
| 127 checkbox.type = 'checkbox'; | 135 checkbox.type = 'checkbox'; |
| 128 | 136 |
| 129 var idCell = addNode(tr, 'td'); | 137 var idCell = addNode(tr, 'td'); |
| 130 idCell.style.textAlign = 'right'; | 138 idCell.style.textAlign = 'right'; |
| 131 | 139 |
| 132 var typeCell = addNode(tr, 'td'); | 140 var typeCell = addNode(tr, 'td'); |
| 133 var descriptionCell = addNode(tr, 'td'); | 141 var descriptionCell = addNode(tr, 'td'); |
| 142 this.descriptionCell_ = descriptionCell; |
| 134 | 143 |
| 135 // Connect listeners. | 144 // Connect listeners. |
| 136 checkbox.onchange = this.onCheckboxToggled_.bind(this); | 145 checkbox.onchange = this.onCheckboxToggled_.bind(this); |
| 137 | 146 |
| 138 var onclick = this.onClicked_.bind(this); | 147 var onclick = this.onClicked_.bind(this); |
| 139 idCell.onclick = onclick; | 148 idCell.onclick = onclick; |
| 140 typeCell.onclick = onclick; | 149 typeCell.onclick = onclick; |
| 141 descriptionCell.onclick = onclick; | 150 descriptionCell.onclick = onclick; |
| 142 | 151 |
| 143 tr.onmouseover = this.onMouseover_.bind(this); | 152 tr.onmouseover = this.onMouseover_.bind(this); |
| 144 tr.onmouseout = this.onMouseout_.bind(this); | 153 tr.onmouseout = this.onMouseout_.bind(this); |
| 145 | 154 |
| 146 // Set the cell values to match this source's data. | 155 // Set the cell values to match this source's data. |
| 147 if (this.getSourceId() >= 0) | 156 if (this.getSourceId() >= 0) |
| 148 addTextNode(idCell, this.getSourceId()); | 157 addTextNode(idCell, this.getSourceId()); |
| 149 else | 158 else |
| 150 addTextNode(idCell, "-"); | 159 addTextNode(idCell, "-"); |
| 151 var sourceTypeString = this.getSourceTypeString(); | 160 var sourceTypeString = this.getSourceTypeString(); |
| 152 addTextNode(typeCell, sourceTypeString); | 161 addTextNode(typeCell, sourceTypeString); |
| 153 addTextNode(descriptionCell, this.getDescription()); | 162 this.updateDescription_(); |
| 154 | 163 |
| 155 // Add a CSS classname specific to this source type (so CSS can specify | 164 // Add a CSS classname specific to this source type (so CSS can specify |
| 156 // different stylings for different types). | 165 // different stylings for different types). |
| 157 changeClassName(this.row_, "source_" + sourceTypeString, true); | 166 changeClassName(this.row_, "source_" + sourceTypeString, true); |
| 158 }; | 167 }; |
| 159 | 168 |
| 160 /** | 169 /** |
| 161 * Returns a description for this source log stream, which will be displayed | 170 * Returns a description for this source log stream, which will be displayed |
| 162 * in the list view. Most often this is a URL that identifies the request, | 171 * in the list view. Most often this is a URL that identifies the request, |
| 163 * or a hostname for a connect job, etc... | 172 * or a hostname for a connect job, etc... |
| (...skipping 11 matching lines...) Expand all Loading... |
| 175 | 184 |
| 176 if (e.params == undefined) | 185 if (e.params == undefined) |
| 177 return ''; | 186 return ''; |
| 178 | 187 |
| 179 switch (e.source.type) { | 188 switch (e.source.type) { |
| 180 case LogSourceType.URL_REQUEST: | 189 case LogSourceType.URL_REQUEST: |
| 181 case LogSourceType.SOCKET_STREAM: | 190 case LogSourceType.SOCKET_STREAM: |
| 182 return e.params.url; | 191 return e.params.url; |
| 183 case LogSourceType.CONNECT_JOB: | 192 case LogSourceType.CONNECT_JOB: |
| 184 return e.params.group_name; | 193 return e.params.group_name; |
| 194 case LogSourceType.HOST_RESOLVER_IMPL_REQUEST: |
| 195 case LogSourceType.HOST_RESOLVER_IMPL_JOB: |
| 196 return e.params.host; |
| 185 } | 197 } |
| 186 | 198 |
| 187 return ''; | 199 return ''; |
| 188 }; | 200 }; |
| 189 | 201 |
| 190 /** | 202 /** |
| 191 * Returns the starting entry for this source. Conceptually this is the | 203 * Returns the starting entry for this source. Conceptually this is the |
| 192 * first entry that was logged to this source. However, we skip over the | 204 * first entry that was logged to this source. However, we skip over the |
| 193 * TYPE_REQUEST_ALIVE entries which wrap TYPE_URL_REQUEST_START_JOB / | 205 * TYPE_REQUEST_ALIVE entries which wrap TYPE_URL_REQUEST_START_JOB / |
| 194 * TYPE_SOCKET_STREAM_CONNECT. | 206 * TYPE_SOCKET_STREAM_CONNECT. |
| 195 */ | 207 */ |
| 196 SourceEntry.prototype.getStartEntry_ = function() { | 208 SourceEntry.prototype.getStartEntry_ = function() { |
| 197 if (this.entries_.length < 1) | 209 if (this.entries_.length < 1) |
| 198 return undefined; | 210 return undefined; |
| 199 if (this.entries_[0].type != LogEventType.REQUEST_ALIVE) | 211 if (this.entries_.length >= 2) { |
| 200 return this.entries_[0]; | 212 if (this.entries_[0].type == LogEventType.REQUEST_ALIVE || |
| 201 if (this.entries_.length < 2) | 213 this.entries_[0].type == LogEventType.SOCKET_POOL_CONNECT_JOB) |
| 202 return undefined; | 214 return this.entries_[1]; |
| 203 return this.entries_[1]; | 215 } |
| 216 return this.entries_[0]; |
| 204 }; | 217 }; |
| 205 | 218 |
| 206 SourceEntry.prototype.getLogEntries = function() { | 219 SourceEntry.prototype.getLogEntries = function() { |
| 207 return this.entries_; | 220 return this.entries_; |
| 208 }; | 221 }; |
| 209 | 222 |
| 210 SourceEntry.prototype.getSourceTypeString = function() { | 223 SourceEntry.prototype.getSourceTypeString = function() { |
| 211 return getKeyWithValue(LogSourceType, this.entries_[0].source.type); | 224 return getKeyWithValue(LogSourceType, this.entries_[0].source.type); |
| 212 }; | 225 }; |
| 213 | 226 |
| 214 SourceEntry.prototype.getSelectionCheckbox = function() { | 227 SourceEntry.prototype.getSelectionCheckbox = function() { |
| 215 return this.row_.childNodes[0].firstChild; | 228 return this.row_.childNodes[0].firstChild; |
| 216 }; | 229 }; |
| 217 | 230 |
| 218 SourceEntry.prototype.getSourceId = function() { | 231 SourceEntry.prototype.getSourceId = function() { |
| 219 return this.id_; | 232 return this.id_; |
| 220 }; | 233 }; |
| 221 | 234 |
| 222 SourceEntry.prototype.remove = function() { | 235 SourceEntry.prototype.remove = function() { |
| 223 this.setSelected(false); | 236 this.setSelected(false); |
| 224 this.setIsMatchedByFilter(false); | 237 this.setIsMatchedByFilter(false); |
| 225 this.row_.parentNode.removeChild(this.row_); | 238 this.row_.parentNode.removeChild(this.row_); |
| 226 }; | 239 }; |
| 227 | 240 |
| OLD | NEW |