Index: chrome/browser/resources/net_internals/source_entry.js |
diff --git a/chrome/browser/resources/net_internals/source_entry.js b/chrome/browser/resources/net_internals/source_entry.js |
index f881d0e1a443a5527acfda14500fce9b7cecc526..5efde4c057e84d8eda4013faa313fbe199b6e626 100644 |
--- a/chrome/browser/resources/net_internals/source_entry.js |
+++ b/chrome/browser/resources/net_internals/source_entry.js |
@@ -1,298 +1,298 @@ |
-// 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. |
- |
-var SourceEntry = (function() { |
- 'use strict'; |
- |
- /** |
- * A SourceEntry gathers all log entries with the same source. |
- * |
- * @constructor |
- */ |
- function SourceEntry(logEntry, maxPreviousSourceId) { |
- this.maxPreviousSourceId_ = maxPreviousSourceId; |
- this.entries_ = []; |
- this.description_ = ''; |
- |
- // Set to true on most net errors. |
- this.isError_ = false; |
- |
- // If the first entry is a BEGIN_PHASE, set to false. |
- // Set to true when an END_PHASE matching the first entry is encountered. |
- this.isInactive_ = true; |
- |
- if (logEntry.phase == LogEventPhase.PHASE_BEGIN) |
- this.isInactive_ = false; |
- |
- this.update(logEntry); |
- } |
- |
- SourceEntry.prototype = { |
- update: function(logEntry) { |
- // Only the last event should have the same type first event, |
- if (!this.isInactive_ && |
- logEntry.phase == LogEventPhase.PHASE_END && |
- logEntry.type == this.entries_[0].type) { |
- this.isInactive_ = true; |
- } |
- |
- // If we have a net error code, update |this.isError_| if apporpriate. |
- if (logEntry.params) { |
- var netErrorCode = logEntry.params.net_error; |
- // Skip both cases where netErrorCode is undefined, and cases where it |
- // is 0, indicating no actual error occurred. |
- if (netErrorCode) { |
- // Ignore error code caused by not finding an entry in the cache. |
- if (logEntry.type != LogEventType.HTTP_CACHE_OPEN_ENTRY || |
- netErrorCode != NetError.FAILED) { |
- this.isError_ = true; |
- } |
- } |
- } |
- |
- var prevStartEntry = this.getStartEntry_(); |
- this.entries_.push(logEntry); |
- var curStartEntry = this.getStartEntry_(); |
- |
- // If we just got the first entry for this source. |
- if (prevStartEntry != curStartEntry) |
- this.updateDescription_(); |
- }, |
- |
- updateDescription_: function() { |
- var e = this.getStartEntry_(); |
- this.description_ = ''; |
- if (!e) |
- return; |
- |
- if (e.source.type == LogSourceType.NONE) { |
- // NONE is what we use for global events that aren't actually grouped |
- // by a "source ID", so we will just stringize the event's type. |
- this.description_ = getKeyWithValue(LogEventType, e.type); |
- return; |
- } |
- |
- if (e.params == undefined) { |
- return; |
- } |
- |
- switch (e.source.type) { |
- case LogSourceType.URL_REQUEST: |
- case LogSourceType.SOCKET_STREAM: |
- case LogSourceType.HTTP_STREAM_JOB: |
- this.description_ = e.params.url; |
- break; |
- case LogSourceType.CONNECT_JOB: |
- this.description_ = e.params.group_name; |
- break; |
- case LogSourceType.HOST_RESOLVER_IMPL_REQUEST: |
- case LogSourceType.HOST_RESOLVER_IMPL_JOB: |
- case LogSourceType.HOST_RESOLVER_IMPL_PROC_TASK: |
- this.description_ = e.params.host; |
- break; |
- case LogSourceType.DISK_CACHE_ENTRY: |
- case LogSourceType.MEMORY_CACHE_ENTRY: |
- this.description_ = e.params.key; |
- break; |
- case LogSourceType.SPDY_SESSION: |
- if (e.params.host) |
- this.description_ = e.params.host + ' (' + e.params.proxy + ')'; |
- break; |
- case LogSourceType.HTTP_PIPELINED_CONNECTION: |
- if (e.params.host_and_port) |
- this.description_ = e.params.host_and_port; |
- break; |
- case LogSourceType.SOCKET: |
- // Use description of parent source, if any. |
- if (e.params.source_dependency != undefined) { |
- var parentId = e.params.source_dependency.id; |
- this.description_ = |
- g_browser.sourceTracker.getDescription(parentId); |
- } |
- break; |
- case LogSourceType.UDP_SOCKET: |
- if (e.params.address != undefined) { |
- this.description_ = e.params.address; |
- // If the parent of |this| is a DNS_TRANSACTION, use |
- // '<DNS Server IP> [<DNS we're resolving>]'. |
- if (this.entries_[0].type == LogEventType.SOCKET_ALIVE && |
- this.entries_[0].params.source_dependency != undefined) { |
- var parentId = this.entries_[0].params.source_dependency.id; |
- var parent = g_browser.sourceTracker.getSourceEntry(parentId); |
- if (parent && |
- parent.getSourceType() == LogSourceType.DNS_TRANSACTION && |
- parent.getDescription().length > 0) { |
- this.description_ += ' [' + parent.getDescription() + ']'; |
- } |
- } |
- } |
- break; |
- case LogSourceType.ASYNC_HOST_RESOLVER_REQUEST: |
- case LogSourceType.DNS_TRANSACTION: |
- this.description_ = e.params.hostname; |
- break; |
- case LogSourceType.DOWNLOAD: |
- switch (e.type) { |
- case LogEventType.DOWNLOAD_FILE_RENAMED: |
- this.description_ = e.params.new_filename; |
- break; |
- case LogEventType.DOWNLOAD_FILE_OPENED: |
- this.description_ = e.params.file_name; |
- break; |
- case LogEventType.DOWNLOAD_ITEM_ACTIVE: |
- this.description_ = e.params.file_name; |
- break; |
- } |
- break; |
- case LogSourceType.FILESTREAM: |
- this.description_ = e.params.file_name; |
- break; |
- } |
- |
- if (this.description_ == undefined) |
- this.description_ = ''; |
- }, |
- |
- /** |
- * Returns a description for this source log stream, which will be displayed |
- * in the list view. Most often this is a URL that identifies the request, |
- * or a hostname for a connect job, etc... |
- */ |
- getDescription: function() { |
- return this.description_; |
- }, |
- |
- /** |
- * Returns the starting entry for this source. Conceptually this is the |
- * first entry that was logged to this source. However, we skip over the |
- * TYPE_REQUEST_ALIVE entries which wrap TYPE_URL_REQUEST_START_JOB / |
- * TYPE_SOCKET_STREAM_CONNECT. |
- */ |
- getStartEntry_: function() { |
- if (this.entries_.length < 1) |
- return undefined; |
- if (this.entries_[0].source.type == LogSourceType.FILESTREAM) { |
- var e = this.findLogEntryByType_(LogEventType.FILE_STREAM_OPEN); |
- if (e != undefined) |
- return e; |
- } |
- if (this.entries_[0].source.type == LogSourceType.DOWNLOAD) { |
- // If any rename occurred, use the last name |
- e = this.findLastLogEntryStartByType_( |
- LogEventType.DOWNLOAD_FILE_RENAMED); |
- if (e != undefined) |
- return e; |
- // Otherwise, if the file was opened, use that name |
- e = this.findLogEntryByType_(LogEventType.DOWNLOAD_FILE_OPENED); |
- if (e != undefined) |
- return e; |
- // History items are never opened, so use the activation info |
- e = this.findLogEntryByType_(LogEventType.DOWNLOAD_ITEM_ACTIVE); |
- if (e != undefined) |
- return e; |
- } |
- if (this.entries_.length >= 2) { |
- if (this.entries_[0].type == LogEventType.REQUEST_ALIVE || |
- this.entries_[0].type == LogEventType.SOCKET_POOL_CONNECT_JOB || |
- this.entries_[1].type == LogEventType.UDP_CONNECT) { |
- return this.entries_[1]; |
- } |
- } |
- return this.entries_[0]; |
- }, |
- |
- /** |
- * Returns the first entry with the specified type, or undefined if not |
- * found. |
- */ |
- findLogEntryByType_: function(type) { |
- for (var i = 0; i < this.entries_.length; ++i) { |
- if (this.entries_[i].type == type) { |
- return this.entries_[i]; |
- } |
- } |
- return undefined; |
- }, |
- |
- /** |
- * Returns the beginning of the last entry with the specified type, or |
- * undefined if not found. |
- */ |
- findLastLogEntryStartByType_: function(type) { |
- for (var i = this.entries_.length - 1; i >= 0; --i) { |
- if (this.entries_[i].type == type) { |
- if (this.entries_[i].phase == LogEventPhase.PHASE_BEGIN) |
- return this.entries_[i]; |
- } |
- } |
- return undefined; |
- }, |
- |
- getLogEntries: function() { |
- return this.entries_; |
- }, |
- |
- getSourceTypeString: function() { |
- return getKeyWithValue(LogSourceType, this.entries_[0].source.type); |
- }, |
- |
- getSourceType: function() { |
- return this.entries_[0].source.type; |
- }, |
- |
- getSourceId: function() { |
- return this.entries_[0].source.id; |
- }, |
- |
- /** |
- * Returns the largest source ID seen before this object was received. |
- * Used only for sorting SourceEntries without a source by source ID. |
- */ |
- getMaxPreviousEntrySourceId: function() { |
- return this.maxPreviousSourceId_; |
- }, |
- |
- isInactive: function() { |
- return this.isInactive_; |
- }, |
- |
- isError: function() { |
- return this.isError_; |
- }, |
- |
- /** |
- * Returns time of last event if inactive. Returns current time otherwise. |
- */ |
- getEndTime: function() { |
- if (!this.isInactive_) { |
- return timeutil.getCurrentTime(); |
- } else { |
- var endTicks = this.entries_[this.entries_.length - 1].time; |
- return timeutil.convertTimeTicksToDate(endTicks).getTime(); |
- } |
- }, |
- |
- /** |
- * Returns the time between the first and last events with a matching |
- * source ID. If source is still active, uses the current time for the |
- * last event. |
- */ |
- getDuration: function() { |
- var startTicks = this.entries_[0].time; |
- var startTime = timeutil.convertTimeTicksToDate(startTicks).getTime(); |
- var endTime = this.getEndTime(); |
- return endTime - startTime; |
- }, |
- |
- /** |
- * Prints descriptive text about |entries_| to a new node added to the end |
- * of |parent|. |
- */ |
- printAsText: function(parent) { |
- printLogEntriesAsText(this.entries_, parent); |
- } |
- }; |
- |
- return SourceEntry; |
-})(); |
+// 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. |
+ |
+var SourceEntry = (function() { |
+ 'use strict'; |
+ |
+ /** |
+ * A SourceEntry gathers all log entries with the same source. |
+ * |
+ * @constructor |
+ */ |
+ function SourceEntry(logEntry, maxPreviousSourceId) { |
+ this.maxPreviousSourceId_ = maxPreviousSourceId; |
+ this.entries_ = []; |
+ this.description_ = ''; |
+ |
+ // Set to true on most net errors. |
+ this.isError_ = false; |
+ |
+ // If the first entry is a BEGIN_PHASE, set to false. |
+ // Set to true when an END_PHASE matching the first entry is encountered. |
+ this.isInactive_ = true; |
+ |
+ if (logEntry.phase == LogEventPhase.PHASE_BEGIN) |
+ this.isInactive_ = false; |
+ |
+ this.update(logEntry); |
+ } |
+ |
+ SourceEntry.prototype = { |
+ update: function(logEntry) { |
+ // Only the last event should have the same type first event, |
+ if (!this.isInactive_ && |
+ logEntry.phase == LogEventPhase.PHASE_END && |
+ logEntry.type == this.entries_[0].type) { |
+ this.isInactive_ = true; |
+ } |
+ |
+ // If we have a net error code, update |this.isError_| if apporpriate. |
+ if (logEntry.params) { |
+ var netErrorCode = logEntry.params.net_error; |
+ // Skip both cases where netErrorCode is undefined, and cases where it |
+ // is 0, indicating no actual error occurred. |
+ if (netErrorCode) { |
+ // Ignore error code caused by not finding an entry in the cache. |
+ if (logEntry.type != LogEventType.HTTP_CACHE_OPEN_ENTRY || |
+ netErrorCode != NetError.FAILED) { |
+ this.isError_ = true; |
+ } |
+ } |
+ } |
+ |
+ var prevStartEntry = this.getStartEntry_(); |
+ this.entries_.push(logEntry); |
+ var curStartEntry = this.getStartEntry_(); |
+ |
+ // If we just got the first entry for this source. |
+ if (prevStartEntry != curStartEntry) |
+ this.updateDescription_(); |
+ }, |
+ |
+ updateDescription_: function() { |
+ var e = this.getStartEntry_(); |
+ this.description_ = ''; |
+ if (!e) |
+ return; |
+ |
+ if (e.source.type == LogSourceType.NONE) { |
+ // NONE is what we use for global events that aren't actually grouped |
+ // by a "source ID", so we will just stringize the event's type. |
+ this.description_ = getKeyWithValue(LogEventType, e.type); |
+ return; |
+ } |
+ |
+ if (e.params == undefined) { |
+ return; |
+ } |
+ |
+ switch (e.source.type) { |
+ case LogSourceType.URL_REQUEST: |
+ case LogSourceType.SOCKET_STREAM: |
+ case LogSourceType.HTTP_STREAM_JOB: |
+ this.description_ = e.params.url; |
+ break; |
+ case LogSourceType.CONNECT_JOB: |
+ this.description_ = e.params.group_name; |
+ break; |
+ case LogSourceType.HOST_RESOLVER_IMPL_REQUEST: |
+ case LogSourceType.HOST_RESOLVER_IMPL_JOB: |
+ case LogSourceType.HOST_RESOLVER_IMPL_PROC_TASK: |
+ this.description_ = e.params.host; |
+ break; |
+ case LogSourceType.DISK_CACHE_ENTRY: |
+ case LogSourceType.MEMORY_CACHE_ENTRY: |
+ this.description_ = e.params.key; |
+ break; |
+ case LogSourceType.SPDY_SESSION: |
+ if (e.params.host) |
+ this.description_ = e.params.host + ' (' + e.params.proxy + ')'; |
+ break; |
+ case LogSourceType.HTTP_PIPELINED_CONNECTION: |
+ if (e.params.host_and_port) |
+ this.description_ = e.params.host_and_port; |
+ break; |
+ case LogSourceType.SOCKET: |
+ // Use description of parent source, if any. |
+ if (e.params.source_dependency != undefined) { |
+ var parentId = e.params.source_dependency.id; |
+ this.description_ = |
+ g_browser.sourceTracker.getDescription(parentId); |
+ } |
+ break; |
+ case LogSourceType.UDP_SOCKET: |
+ if (e.params.address != undefined) { |
+ this.description_ = e.params.address; |
+ // If the parent of |this| is a DNS_TRANSACTION, use |
+ // '<DNS Server IP> [<DNS we're resolving>]'. |
+ if (this.entries_[0].type == LogEventType.SOCKET_ALIVE && |
+ this.entries_[0].params.source_dependency != undefined) { |
+ var parentId = this.entries_[0].params.source_dependency.id; |
+ var parent = g_browser.sourceTracker.getSourceEntry(parentId); |
+ if (parent && |
+ parent.getSourceType() == LogSourceType.DNS_TRANSACTION && |
+ parent.getDescription().length > 0) { |
+ this.description_ += ' [' + parent.getDescription() + ']'; |
+ } |
+ } |
+ } |
+ break; |
+ case LogSourceType.ASYNC_HOST_RESOLVER_REQUEST: |
+ case LogSourceType.DNS_TRANSACTION: |
+ this.description_ = e.params.hostname; |
+ break; |
+ case LogSourceType.DOWNLOAD: |
+ switch (e.type) { |
+ case LogEventType.DOWNLOAD_FILE_RENAMED: |
+ this.description_ = e.params.new_filename; |
+ break; |
+ case LogEventType.DOWNLOAD_FILE_OPENED: |
+ this.description_ = e.params.file_name; |
+ break; |
+ case LogEventType.DOWNLOAD_ITEM_ACTIVE: |
+ this.description_ = e.params.file_name; |
+ break; |
+ } |
+ break; |
+ case LogSourceType.FILESTREAM: |
+ this.description_ = e.params.file_name; |
+ break; |
+ } |
+ |
+ if (this.description_ == undefined) |
+ this.description_ = ''; |
+ }, |
+ |
+ /** |
+ * Returns a description for this source log stream, which will be displayed |
+ * in the list view. Most often this is a URL that identifies the request, |
+ * or a hostname for a connect job, etc... |
+ */ |
+ getDescription: function() { |
+ return this.description_; |
+ }, |
+ |
+ /** |
+ * Returns the starting entry for this source. Conceptually this is the |
+ * first entry that was logged to this source. However, we skip over the |
+ * TYPE_REQUEST_ALIVE entries which wrap TYPE_URL_REQUEST_START_JOB / |
+ * TYPE_SOCKET_STREAM_CONNECT. |
+ */ |
+ getStartEntry_: function() { |
+ if (this.entries_.length < 1) |
+ return undefined; |
+ if (this.entries_[0].source.type == LogSourceType.FILESTREAM) { |
+ var e = this.findLogEntryByType_(LogEventType.FILE_STREAM_OPEN); |
+ if (e != undefined) |
+ return e; |
+ } |
+ if (this.entries_[0].source.type == LogSourceType.DOWNLOAD) { |
+ // If any rename occurred, use the last name |
+ e = this.findLastLogEntryStartByType_( |
+ LogEventType.DOWNLOAD_FILE_RENAMED); |
+ if (e != undefined) |
+ return e; |
+ // Otherwise, if the file was opened, use that name |
+ e = this.findLogEntryByType_(LogEventType.DOWNLOAD_FILE_OPENED); |
+ if (e != undefined) |
+ return e; |
+ // History items are never opened, so use the activation info |
+ e = this.findLogEntryByType_(LogEventType.DOWNLOAD_ITEM_ACTIVE); |
+ if (e != undefined) |
+ return e; |
+ } |
+ if (this.entries_.length >= 2) { |
+ if (this.entries_[0].type == LogEventType.REQUEST_ALIVE || |
+ this.entries_[0].type == LogEventType.SOCKET_POOL_CONNECT_JOB || |
+ this.entries_[1].type == LogEventType.UDP_CONNECT) { |
+ return this.entries_[1]; |
+ } |
+ } |
+ return this.entries_[0]; |
+ }, |
+ |
+ /** |
+ * Returns the first entry with the specified type, or undefined if not |
+ * found. |
+ */ |
+ findLogEntryByType_: function(type) { |
+ for (var i = 0; i < this.entries_.length; ++i) { |
+ if (this.entries_[i].type == type) { |
+ return this.entries_[i]; |
+ } |
+ } |
+ return undefined; |
+ }, |
+ |
+ /** |
+ * Returns the beginning of the last entry with the specified type, or |
+ * undefined if not found. |
+ */ |
+ findLastLogEntryStartByType_: function(type) { |
+ for (var i = this.entries_.length - 1; i >= 0; --i) { |
+ if (this.entries_[i].type == type) { |
+ if (this.entries_[i].phase != LogEventPhase.PHASE_END) |
+ return this.entries_[i]; |
+ } |
+ } |
+ return undefined; |
+ }, |
+ |
+ getLogEntries: function() { |
+ return this.entries_; |
+ }, |
+ |
+ getSourceTypeString: function() { |
+ return getKeyWithValue(LogSourceType, this.entries_[0].source.type); |
+ }, |
+ |
+ getSourceType: function() { |
+ return this.entries_[0].source.type; |
+ }, |
+ |
+ getSourceId: function() { |
+ return this.entries_[0].source.id; |
+ }, |
+ |
+ /** |
+ * Returns the largest source ID seen before this object was received. |
+ * Used only for sorting SourceEntries without a source by source ID. |
+ */ |
+ getMaxPreviousEntrySourceId: function() { |
+ return this.maxPreviousSourceId_; |
+ }, |
+ |
+ isInactive: function() { |
+ return this.isInactive_; |
+ }, |
+ |
+ isError: function() { |
+ return this.isError_; |
+ }, |
+ |
+ /** |
+ * Returns time of last event if inactive. Returns current time otherwise. |
+ */ |
+ getEndTime: function() { |
+ if (!this.isInactive_) { |
+ return timeutil.getCurrentTime(); |
+ } else { |
+ var endTicks = this.entries_[this.entries_.length - 1].time; |
+ return timeutil.convertTimeTicksToDate(endTicks).getTime(); |
+ } |
+ }, |
+ |
+ /** |
+ * Returns the time between the first and last events with a matching |
+ * source ID. If source is still active, uses the current time for the |
+ * last event. |
+ */ |
+ getDuration: function() { |
+ var startTicks = this.entries_[0].time; |
+ var startTime = timeutil.convertTimeTicksToDate(startTicks).getTime(); |
+ var endTime = this.getEndTime(); |
+ return endTime - startTime; |
+ }, |
+ |
+ /** |
+ * Prints descriptive text about |entries_| to a new node added to the end |
+ * of |parent|. |
+ */ |
+ printAsText: function(parent) { |
+ printLogEntriesAsText(this.entries_, parent); |
+ } |
+ }; |
+ |
+ return SourceEntry; |
+})(); |