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

Side by Side Diff: chrome/browser/resources/net_internals/export_view.js

Issue 2856223006: Delete chrome://net-internals/#export (Closed)
Patch Set: Created 3 years, 7 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /**
6 * This view displays options for exporting the captured data.
7 */
8 var ExportView = (function() {
9 'use strict';
10
11 // We inherit from DivView.
12 var superClass = DivView;
13
14 /**
15 * @constructor
16 */
17 function ExportView() {
18 assertFirstConstructorCall(ExportView);
19
20 // Call superclass's constructor.
21 superClass.call(this, ExportView.MAIN_BOX_ID);
22
23 this.deprecatedNoticeUI_ = $(ExportView.DEPRECATED_NOTICE_UI_ID);
24 this.showDeprecatedUIButton_ = $(ExportView.SHOW_DEPRECATED_UI_BUTTON_ID);
25 this.showDeprecatedUIButton_.onclick = this.onShowDeprecatedUI_.bind(this);
26 this.deprecatedExportUI_ = $(ExportView.DEPRECATED_EXPORT_UI_ID);
27
28 var privacyStrippingCheckbox = $(ExportView.PRIVACY_STRIPPING_CHECKBOX_ID);
29 privacyStrippingCheckbox.onclick =
30 this.onSetPrivacyStripping_.bind(this, privacyStrippingCheckbox);
31
32 this.saveFileButton_ = $(ExportView.SAVE_FILE_BUTTON_ID);
33 this.saveFileButton_.onclick = this.onSaveFile_.bind(this);
34 this.saveStatusText_ = $(ExportView.SAVE_STATUS_TEXT_ID);
35 this.isSaving_ = false;
36
37 this.userCommentsTextArea_ = $(ExportView.USER_COMMENTS_TEXT_AREA_ID);
38 this.updateSaveFileButton_();
39 this.userCommentsTextArea_.onkeyup = this.onUserCommentsUpdated_.bind(this);
40
41 // Track blob for previous log dump so it can be revoked when a new dump is
42 // saved.
43 this.lastBlobURL_ = null;
44
45 // Cached copy of the last loaded log dump, for use when exporting.
46 this.loadedLogDump_ = null;
47 }
48
49 ExportView.TAB_ID = 'tab-handle-export';
50 ExportView.TAB_NAME = 'Export';
51 ExportView.TAB_HASH = '#export';
52
53 // IDs for special HTML elements in export_view.html
54 ExportView.DEPRECATED_NOTICE_UI_ID = 'export-view-deprecated-notice';
55 ExportView.SHOW_DEPRECATED_UI_BUTTON_ID = 'export-view-show-deprecated-ui';
56 ExportView.DEPRECATED_EXPORT_UI_ID = 'export-view-ui-deprecated';
57
58 ExportView.MAIN_BOX_ID = 'export-view-tab-content';
59 ExportView.DOWNLOAD_ANCHOR_ID = 'export-view-download-anchor';
60 ExportView.SAVE_FILE_BUTTON_ID = 'export-view-save-log-file';
61 ExportView.SAVE_STATUS_TEXT_ID = 'export-view-save-status-text';
62 ExportView.PRIVACY_STRIPPING_CHECKBOX_ID =
63 'export-view-privacy-stripping-checkbox';
64 ExportView.USER_COMMENTS_TEXT_AREA_ID = 'export-view-user-comments';
65 ExportView.PRIVACY_WARNING_ID = 'export-view-privacy-warning';
66
67 cr.addSingletonGetter(ExportView);
68
69 ExportView.prototype = {
70 // Inherit the superclass's methods.
71 __proto__: superClass.prototype,
72
73 /**
74 * Hides the export-view deprecation warning message and shows the
75 * deprecated export-view UI.
76 */
77 onShowDeprecatedUI_: function() {
78 setNodeDisplay(this.deprecatedNoticeUI_, false);
79 setNodeDisplay(this.deprecatedExportUI_, true);
80 },
81
82 /**
83 * Depending on the value of the checkbox, enables or disables stripping
84 * cookies and passwords from log dumps and displayed events.
85 */
86 onSetPrivacyStripping_: function(privacyStrippingCheckbox) {
87 SourceTracker.getInstance().setPrivacyStripping(
88 privacyStrippingCheckbox.checked);
89 },
90
91 /**
92 * When loading a log dump, cache it for future export and continue showing
93 * the ExportView.
94 */
95 onLoadLogFinish: function(polledData, tabData, logDump) {
96 this.loadedLogDump_ = logDump;
97 this.setUserComments_(logDump.userComments);
98 return true;
99 },
100
101 /**
102 * Sets the save to file status text, displayed below the save to file
103 * button, to |text|. Also enables or disables the save button based on the
104 * value of |isSaving|, which must be true if the save process is still
105 * ongoing, and false when the operation has stopped, regardless of success
106 * of failure.
107 */
108 setSaveFileStatus: function(text, isSaving) {
109 this.isSaving_ = isSaving;
110 this.updateSaveFileButton_();
111 this.saveStatusText_.textContent = text;
112 },
113
114 updateSaveFileButton_: function() {
115 this.saveFileButton_.disabled =
116 this.userCommentsTextArea_.value == '' || this.isSaving_;
117 },
118
119 showPrivacyWarning: function() {
120 setNodeDisplay($(ExportView.PRIVACY_WARNING_ID), true);
121 $(ExportView.PRIVACY_STRIPPING_CHECKBOX_ID).checked = false;
122 $(ExportView.PRIVACY_STRIPPING_CHECKBOX_ID).disabled = true;
123
124 // Updating the checkbox doesn't actually disable privacy stripping, since
125 // the onclick function will not be called.
126 this.onSetPrivacyStripping_($(ExportView.PRIVACY_STRIPPING_CHECKBOX_ID));
127 },
128
129 /**
130 * If not already busy saving a log dump, triggers asynchronous
131 * generation of log dump and starts waiting for it to complete.
132 */
133 onSaveFile_: function() {
134 if (this.saveFileButton_.disabled)
135 return;
136
137 // Clean up previous blob, if any, to reduce resource usage.
138 if (this.lastBlobURL_) {
139 window.URL.revokeObjectURL(this.lastBlobURL_);
140 this.lastBlobURL_ = null;
141 }
142 this.createLogDump_(this.onLogDumpCreated_.bind(this));
143 },
144
145 /**
146 * Creates a log dump, and either synchronously or asynchronously calls
147 * |callback| if it succeeds. Separate from onSaveFile_ for unit tests.
148 */
149 createLogDump_: function(callback) {
150 // Get an explanation for the dump file (this is mandatory!)
151 var userComments = this.userCommentsTextArea_.value;
152
153 this.setSaveFileStatus('Preparing data...', true);
154
155 var privacyStripping = SourceTracker.getInstance().getPrivacyStripping();
156
157 // If we have a cached log dump, update it synchronously.
158 if (this.loadedLogDump_) {
159 var dumpText = log_util.createUpdatedLogDump(
160 userComments, this.loadedLogDump_, privacyStripping);
161 callback(dumpText);
162 return;
163 }
164
165 // Otherwise, poll information from the browser before creating one.
166 log_util.createLogDumpAsync(userComments, callback, privacyStripping);
167 },
168
169 /**
170 * Sets the user comments.
171 */
172 setUserComments_: function(userComments) {
173 this.userCommentsTextArea_.value = userComments;
174 this.onUserCommentsUpdated_();
175 },
176
177 /**
178 * User comments are updated.
179 */
180 onUserCommentsUpdated_: function() {
181 this.updateSaveFileButton_();
182 },
183
184 /**
185 * Creates a blob url and starts downloading it.
186 */
187 onLogDumpCreated_: function(dumpText) {
188 var textBlob = new Blob([dumpText], {type: 'octet/stream'});
189 this.lastBlobURL_ = window.URL.createObjectURL(textBlob);
190
191 // Update the anchor tag and simulate a click on it to start the
192 // download.
193 var downloadAnchor = $(ExportView.DOWNLOAD_ANCHOR_ID);
194 downloadAnchor.href = this.lastBlobURL_;
195 downloadAnchor.click();
196
197 this.setSaveFileStatus('Dump successful', false);
198 }
199 };
200
201 return ExportView;
202 })();
OLDNEW
« no previous file with comments | « chrome/browser/resources/net_internals/export_view.html ('k') | chrome/browser/resources/net_internals/index.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698