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

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

Issue 7155031: Save net-internals log dumps directly to disk. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 6 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/dataview.js
===================================================================
--- chrome/browser/resources/net_internals/dataview.js (revision 89253)
+++ chrome/browser/resources/net_internals/dataview.js (working copy)
@@ -13,7 +13,6 @@
* @constructor
*/
function DataView(mainBoxId,
- outputTextBoxId,
exportTextButtonId,
securityStrippingCheckboxId,
byteLoggingCheckboxId,
@@ -27,8 +26,6 @@
loggingTextSpanId) {
DivView.call(this, mainBoxId);
- this.textPre_ = document.getElementById(outputTextBoxId);
-
var securityStrippingCheckbox =
document.getElementById(securityStrippingCheckboxId);
securityStrippingCheckbox.onclick =
@@ -38,8 +35,8 @@
byteLoggingCheckbox.onclick =
this.onSetByteLogging_.bind(this, byteLoggingCheckbox);
- var exportTextButton = document.getElementById(exportTextButtonId);
- exportTextButton.onclick = this.onExportToText_.bind(this);
+ this.exportTextButton_ = document.getElementById(exportTextButtonId);
+ this.exportTextButton_.onclick = this.onExportToText_.bind(this);
this.activelyCapturedCountBox_ =
document.getElementById(activelyCapturedCountId);
@@ -58,7 +55,6 @@
this.logFileChanged.bind(this, loadLogFileElement);
this.updateEventCounts_();
- this.waitingForUpdate_ = false;
g_browser.addLogObserver(this);
}
@@ -96,7 +92,6 @@
setNodeDisplay(this.dumpDataDiv_, !isViewingLogFile);
setNodeDisplay(this.capturingTextSpan_, !isViewingLogFile);
setNodeDisplay(this.loggingTextSpan_, isViewingLogFile);
- this.setText_('');
};
/**
@@ -130,11 +125,7 @@
g_browser.setSecurityStripping(securityStrippingCheckbox.checked);
};
-/**
- * Clears displayed text when security stripping is toggled.
- */
DataView.prototype.onSecurityStrippingChanged = function() {
- this.setText_('');
}
/**
@@ -168,15 +159,19 @@
g_browser.loadedLogFile(event.target.result);
}
+DataView.prototype.EnableExportTextButton_ = function(enabled) {
eroman 2011/06/16 00:42:02 nit: use lowercaseCamelCase for function names in
mmenke 2011/06/16 16:16:53 Done.
+ this.exportTextButton_.disabled = !enabled;
+}
+
/**
* If not already waiting for results from all updates, triggers all
* updates and starts waiting for them to complete.
*/
DataView.prototype.onExportToText_ = function() {
- if (this.waitingForUpdate_)
+ if (this.exportTextButton_.disabled)
return;
- this.waitingForUpdate = true;
- this.setText_('Generating...');
+ this.EnableExportTextButton_(false);
+
g_browser.updateAllInfo(this.onUpdateAllCompleted.bind(this));
};
@@ -404,12 +399,45 @@
}
}
- // Open a new window to display this text.
- this.setText_(text.join('\n'));
-
- this.selectText_();
+ var chunkSize = 100 * 1024;
eroman 2011/06/16 00:42:02 chunkSize is unused.
mmenke 2011/06/16 16:16:53 Removed. Accidentally left over from one of the a
+ var flatText = text.join('\n');
+ window.webkitRequestFileSystem(
+ window.TEMPORARY, 10*1024 + flatText.length,
eroman 2011/06/16 00:42:02 nit: the assumption here is that 1 character = 1 b
mmenke 2011/06/16 16:16:53 Fixed. Thanks for catching that. Be a pain to ru
+ this.OnFileSystemCreate_.bind(this, flatText),
+ this.OnFileError_.bind(this, 'Unable to create file system.'));
};
+DataView.prototype.OnFileSystemCreate_ = function(text, fileSystem) {
eroman 2011/06/16 00:42:02 I believe javascript style stipulates lowercase fo
mmenke 2011/06/16 16:16:53 Fixed everywhere.
+ fileSystem.root.getFile(
+ 'net_internals_log.txt', {create: true},
eroman 2011/06/16 00:42:02 I wander if we should include a unique identifier
mmenke 2011/06/16 16:16:53 I considered that, but wasn't sure it was worth th
+ this.OnFileCreate_.bind(this, text),
+ this.OnFileError_.bind(this, 'Unable to create file.'));
+}
eroman 2011/06/16 00:42:02 nit: can you put semicolon after all of these "sta
mmenke 2011/06/16 16:16:53 Done.
+
+DataView.prototype.OnFileCreate_ = function(text, fileEntry) {
+ fileEntry.createWriter(
+ this.OnFileCreateWriter_.bind(this, text, fileEntry),
+ this.OnFileError_.bind(this, 'Unable to create writer.'));
+}
+
+DataView.prototype.OnFileCreateWriter_ = function(text, fileEntry, fileWriter) {
+ fileWriter.onerror = this.OnFileError_.bind(this, 'Write failed.')
+ fileWriter.onwriteend = this.OnFileWriteComplete_.bind(this, fileEntry)
+ var blobBuilder = new WebKitBlobBuilder();
+ blobBuilder.append(text);
eroman 2011/06/16 00:42:02 Do you know how it serializes strings? UTF16? UTF8
mmenke 2011/06/16 16:16:53 Experimentally, just writes out UTF8.
+ fileWriter.write(blobBuilder.getBlob('octet/stream'));
eroman 2011/06/16 00:42:02 One annoyance is line ending on Windows are CR LF,
mmenke 2011/06/16 16:16:53 Fixed (Use CRLF on Windows only).
+}
+
+DataView.prototype.OnFileWriteComplete_ = function(fileEntry) {
+ window.location = fileEntry.toURL();
eroman 2011/06/16 00:42:02 Not a big deal, but this might cause a flicker in
mmenke 2011/06/16 16:16:53 We don't actually update the address bar until we'
mmenke 2011/06/16 16:26:59 Well...I was wrong about this. I'll go ahead and
+ this.EnableExportTextButton_(true);
+}
+
+DataView.prototype.OnFileError_ = function(errorText, error) {
+ this.EnableExportTextButton_(true);
+ alert(errorText + ' Error: ' + error.code);
eroman 2011/06/16 00:42:02 I suggest giving a more informative message, since
mmenke 2011/06/16 16:16:53 Done.
+}
+
DataView.prototype.appendEventsPrintedAsText_ = function(out) {
var allEvents = g_browser.getAllCapturedEvents();
@@ -480,14 +508,6 @@
};
/**
- * Helper function to set this view's content to |text|.
- */
-DataView.prototype.setText_ = function(text) {
- this.textPre_.innerHTML = '';
- addTextNode(this.textPre_, text);
-};
-
-/**
* Format a time ticks count as a timestamp.
*/
DataView.prototype.formatExpirationTime_ = function(timeTicks) {
@@ -495,15 +515,3 @@
var isExpired = d.getTime() < (new Date()).getTime();
return 't=' + d.getTime() + (isExpired ? ' [EXPIRED]' : '');
};
-
-/**
- * Select all text from log dump.
- */
-DataView.prototype.selectText_ = function() {
- var selection = window.getSelection();
- selection.removeAllRanges();
-
- var range = document.createRange();
- range.selectNodeContents(this.textPre_);
- selection.addRange(range);
-};
« no previous file with comments | « no previous file | chrome/browser/resources/net_internals/index.html » ('j') | chrome/browser/resources/net_internals/index.html » ('J')

Powered by Google App Engine
This is Rietveld 408576698