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

Side by Side Diff: chrome/browser/resources/options/password_manager.js

Issue 2439453005: Improve updateOriginsEliding_ performance. (Closed)
Patch Set: Created 4 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 cr.define('options', function() { 5 cr.define('options', function() {
6 /** @const */ var Page = cr.ui.pageManager.Page; 6 /** @const */ var Page = cr.ui.pageManager.Page;
7 /** @const */ var PageManager = cr.ui.pageManager.PageManager; 7 /** @const */ var PageManager = cr.ui.pageManager.PageManager;
8 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; 8 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel;
9 9
10 ///////////////////////////////////////////////////////////////////////////// 10 /////////////////////////////////////////////////////////////////////////////
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 */ 179 */
180 updateOriginsEliding_: function(list) { 180 updateOriginsEliding_: function(list) {
181 var entries = list.getElementsByClassName('deletable-item'); 181 var entries = list.getElementsByClassName('deletable-item');
182 if (entries.length == 0) 182 if (entries.length == 0)
183 return; 183 return;
184 var entry = entries[0]; 184 var entry = entries[0];
185 var computedStyle = window.getComputedStyle(entry.urlDiv); 185 var computedStyle = window.getComputedStyle(entry.urlDiv);
186 var columnWidth = entry.urlDiv.offsetWidth - 186 var columnWidth = entry.urlDiv.offsetWidth -
187 parseInt(computedStyle.webkitMarginStart, 10) - 187 parseInt(computedStyle.webkitMarginStart, 10) -
188 parseInt(computedStyle.webkitPaddingStart, 10); 188 parseInt(computedStyle.webkitPaddingStart, 10);
189
190 // We use a canvas context to compute text widths. This canvas is not
191 // part of the DOM and thus avoids layout thrashing when updating the
192 // contained text.
193 var canvas = document.createElement('canvas');
194 var ctx = canvas.getContext('2d');
195 ctx.font = computedStyle.font;
196
189 for (var i = 0; i < entries.length; ++i) { 197 for (var i = 0; i < entries.length; ++i) {
190 entry = entries[i]; 198 entry = entries[i];
191 // For android://com.example, elide from the right. 199 // For android://com.example, elide from the right.
192 if (!entry.isClickable) 200 if (!entry.isClickable)
193 continue; 201 continue;
194 var cellWidth = columnWidth; 202 var cellWidth = columnWidth;
195 if (entry.androidUriSuffix) 203 if (entry.androidUriSuffix)
196 cellWidth -= entry.androidUriSuffix.offsetWidth; 204 cellWidth -= entry.androidUriSuffix.offsetWidth;
197 var urlLink = entry.urlLink; 205 var urlLink = entry.urlLink;
198 if (cellWidth <= 0) { 206 if (cellWidth <= 0) {
199 console.error('cellWidth <= 0. Skip origins eliding for ' + 207 console.error('cellWidth <= 0. Skip origins eliding for ' +
200 urlLink.textContent); 208 urlLink.textContent);
201 continue; 209 continue;
202 } 210 }
203 if (urlLink.offsetWidth <= cellWidth) 211
212 var textContent = urlLink.textContent;
213 if (ctx.measureText(textContent).width <= cellWidth) {
204 continue; 214 continue;
205 urlLink.textContent = '…' + urlLink.textContent.substring(1); 215 }
stevenjb 2016/10/21 19:58:40 nit: {} not needed
jdoerrie 2016/10/24 07:34:54 Done.
206 while (urlLink.offsetWidth > cellWidth) 216
207 urlLink.textContent = '…' + urlLink.textContent.substring(2); 217 textContent = '…' + textContent.substring(1);
218 while (ctx.measureText(textContent).width > cellWidth) {
219 textContent = '…' + textContent.substring(2);
vabr (Chromium) 2016/10/21 13:15:31 optional, because not introduced by this CL: It s
jdoerrie 2016/10/21 14:15:00 We need different numbers because textContent[0] w
vabr (Chromium) 2016/10/21 14:20:45 Thanks for the explanation, Jan, and sorry for my
220 }
stevenjb 2016/10/21 19:58:40 nit: {} also not needed here.
jdoerrie 2016/10/24 07:34:54 Done.
221
222 // Write the elided origin back to the DOM.
223 urlLink.textContent = textContent;
208 } 224 }
209 }, 225 },
210 226
211 /** 227 /**
212 * Updates the data model for the saved passwords list with the values from 228 * Updates the data model for the saved passwords list with the values from
213 * |entries|. 229 * |entries|.
214 * @param {!Array} entries The list of saved password data. 230 * @param {!Array} entries The list of saved password data.
215 */ 231 */
216 setSavedPasswordsList_: function(entries) { 232 setSavedPasswordsList_: function(entries) {
217 if (this.lastQuery_) { 233 if (this.lastQuery_) {
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 'showImportExportButton', 338 'showImportExportButton',
323 'showPassword', 339 'showPassword',
324 ]); 340 ]);
325 341
326 // Export 342 // Export
327 return { 343 return {
328 PasswordManager: PasswordManager 344 PasswordManager: PasswordManager
329 }; 345 };
330 346
331 }); 347 });
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698