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

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

Issue 9296012: Hooked up NetLog to DownloadItem, DownloadFile, and FileStream. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged with trunk Created 8 years, 10 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
« no previous file with comments | « chrome/browser/download/download_service.cc ('k') | content/browser/download/download_create_info.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
+})();
« no previous file with comments | « chrome/browser/download/download_service.cc ('k') | content/browser/download/download_create_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698