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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js

Issue 2869293002: DevTools: make CompilerScriptMapping / SASSSourceMapping manage UISourceCodes (Closed)
Patch Set: address comments 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
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 10 *
(...skipping 22 matching lines...) Expand all
33 constructor() { 33 constructor() {
34 super(); 34 super();
35 this.registerRequiredCSS('sources/navigatorView.css'); 35 this.registerRequiredCSS('sources/navigatorView.css');
36 36
37 this._scriptsTree = new UI.TreeOutlineInShadow(); 37 this._scriptsTree = new UI.TreeOutlineInShadow();
38 this._scriptsTree.registerRequiredCSS('sources/navigatorTree.css'); 38 this._scriptsTree.registerRequiredCSS('sources/navigatorTree.css');
39 this._scriptsTree.setComparator(Sources.NavigatorView._treeElementsCompare); 39 this._scriptsTree.setComparator(Sources.NavigatorView._treeElementsCompare);
40 this.element.appendChild(this._scriptsTree.element); 40 this.element.appendChild(this._scriptsTree.element);
41 this.setDefaultFocusedElement(this._scriptsTree.element); 41 this.setDefaultFocusedElement(this._scriptsTree.element);
42 42
43 /** @type {!Map.<!Workspace.UISourceCode, !Array<!Sources.NavigatorUISourceC odeTreeNode>>} */ 43 /** @type {!Multimap<!Workspace.UISourceCode, !Sources.NavigatorUISourceCode TreeNode>} */
44 this._uiSourceCodeNodes = new Map(); 44 this._uiSourceCodeNodes = new Multimap();
45 /** @type {!Map.<string, !Sources.NavigatorFolderTreeNode>} */ 45 /** @type {!Map.<string, !Sources.NavigatorFolderTreeNode>} */
46 this._subfolderNodes = new Map(); 46 this._subfolderNodes = new Map();
47 47
48 this._rootNode = new Sources.NavigatorRootTreeNode(this); 48 this._rootNode = new Sources.NavigatorRootTreeNode(this);
49 this._rootNode.populate(); 49 this._rootNode.populate();
50 50
51 /** @type {!Map.<!SDK.ResourceTreeFrame, !Sources.NavigatorGroupTreeNode>} * / 51 /** @type {!Map.<!SDK.ResourceTreeFrame, !Sources.NavigatorGroupTreeNode>} * /
52 this._frameNodes = new Map(); 52 this._frameNodes = new Map();
53 53
54 this.element.addEventListener('contextmenu', this.handleContextMenu.bind(thi s), false); 54 this.element.addEventListener('contextmenu', this.handleContextMenu.bind(thi s), false);
(...skipping 12 matching lines...) Expand all
67 Persistence.persistence.addEventListener( 67 Persistence.persistence.addEventListener(
68 Persistence.Persistence.Events.BindingCreated, this._onBindingCreated, this); 68 Persistence.Persistence.Events.BindingCreated, this._onBindingCreated, this);
69 Persistence.persistence.addEventListener( 69 Persistence.persistence.addEventListener(
70 Persistence.Persistence.Events.BindingRemoved, this._onBindingRemoved, this); 70 Persistence.Persistence.Events.BindingRemoved, this._onBindingRemoved, this);
71 } 71 }
72 SDK.targetManager.addEventListener(SDK.TargetManager.Events.NameChanged, thi s._targetNameChanged, this); 72 SDK.targetManager.addEventListener(SDK.TargetManager.Events.NameChanged, thi s._targetNameChanged, this);
73 73
74 SDK.targetManager.observeTargets(this); 74 SDK.targetManager.observeTargets(this);
75 this._resetWorkspace(Workspace.workspace); 75 this._resetWorkspace(Workspace.workspace);
76 this._workspace.uiSourceCodes().forEach(this._addUISourceCode.bind(this)); 76 this._workspace.uiSourceCodes().forEach(this._addUISourceCode.bind(this));
77 Bindings.networkProjectManager.addEventListener(
78 Bindings.NetworkProjectManager.Events.FrameAttributionAdded, this._frame AttributionAdded, this);
79 Bindings.networkProjectManager.addEventListener(
80 Bindings.NetworkProjectManager.Events.FrameAttributionRemoved, this._fra meAttributionRemoved, this);
77 } 81 }
78 82
79 /** 83 /**
80 * @param {!UI.TreeElement} treeElement 84 * @param {!UI.TreeElement} treeElement
81 */ 85 */
82 static _treeElementOrder(treeElement) { 86 static _treeElementOrder(treeElement) {
83 if (treeElement._boostOrder) 87 if (treeElement._boostOrder)
84 return 0; 88 return 0;
85 89
86 if (!Sources.NavigatorView._typeOrders) { 90 if (!Sources.NavigatorView._typeOrders) {
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 this._addUISourceCode(binding.network); 179 this._addUISourceCode(binding.network);
176 } 180 }
177 181
178 /** 182 /**
179 * @param {!Common.Event} event 183 * @param {!Common.Event} event
180 */ 184 */
181 _onBindingChanged(event) { 185 _onBindingChanged(event) {
182 var binding = /** @type {!Persistence.PersistenceBinding} */ (event.data); 186 var binding = /** @type {!Persistence.PersistenceBinding} */ (event.data);
183 187
184 // Update UISourceCode titles. 188 // Update UISourceCode titles.
185 var networkNodes = this._uiSourceCodeNodes.get(binding.network) || []; 189 var networkNodes = this._uiSourceCodeNodes.get(binding.network);
186 for (var networkNode of networkNodes) 190 for (var networkNode of networkNodes)
187 networkNode.updateTitle(); 191 networkNode.updateTitle();
188 var fileSystemNodes = this._uiSourceCodeNodes.get(binding.fileSystem) || []; 192 var fileSystemNodes = this._uiSourceCodeNodes.get(binding.fileSystem);
189 for (var fileSystemNode of fileSystemNodes) 193 for (var fileSystemNode of fileSystemNodes)
190 fileSystemNode.updateTitle(); 194 fileSystemNode.updateTitle();
191 195
192 // Update folder titles. 196 // Update folder titles.
193 var pathTokens = Persistence.FileSystemWorkspaceBinding.relativePath(binding .fileSystem); 197 var pathTokens = Persistence.FileSystemWorkspaceBinding.relativePath(binding .fileSystem);
194 var folderPath = ''; 198 var folderPath = '';
195 for (var i = 0; i < pathTokens.length - 1; ++i) { 199 for (var i = 0; i < pathTokens.length - 1; ++i) {
196 folderPath += pathTokens[i]; 200 folderPath += pathTokens[i];
197 var folderId = 201 var folderId =
198 this._folderNodeId(binding.fileSystem.project(), null, null, binding.f ileSystem.origin(), folderPath); 202 this._folderNodeId(binding.fileSystem.project(), null, null, binding.f ileSystem.origin(), folderPath);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 239
236 /** 240 /**
237 * @param {!Workspace.UISourceCode} uiSourceCode 241 * @param {!Workspace.UISourceCode} uiSourceCode
238 * @return {boolean} 242 * @return {boolean}
239 */ 243 */
240 accept(uiSourceCode) { 244 accept(uiSourceCode) {
241 return !uiSourceCode.project().isServiceProject(); 245 return !uiSourceCode.project().isServiceProject();
242 } 246 }
243 247
244 /** 248 /**
249 * @param {!Common.Event} event
250 */
251 _frameAttributionAdded(event) {
252 var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data.uiSour ceCode);
253 if (!this._acceptsUISourceCode(uiSourceCode))
254 return;
255
256 var addedFrame = /** @type {?SDK.ResourceTreeFrame} */ (event.data.frame);
257 this._addUISourceCodeNode(uiSourceCode, addedFrame);
dgozman 2017/05/12 19:12:50 // This event does not happen for UISourceCodes wi
lushnikov 2017/05/15 21:05:02 Done.
258 }
259
260 /**
261 * @param {!Common.Event} event
262 */
263 _frameAttributionRemoved(event) {
264 var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (event.data.uiSour ceCode);
265 if (!this._acceptsUISourceCode(uiSourceCode))
266 return;
267
268 var removedFrame = /** @type {?SDK.ResourceTreeFrame} */ (event.data.frame);
269 var node = Array.from(this._uiSourceCodeNodes.get(uiSourceCode)).find(node = > node.frame() === removedFrame);
270 this._removeUISourceCodeNode(node);
271 }
272
273 /**
274 * @param {!Workspace.UISourceCode} uiSourceCode
275 * @return {boolean}
276 */
277 _acceptsUISourceCode(uiSourceCode) {
278 if (!this.accept(uiSourceCode))
279 return false;
280
281 var binding = Persistence.persistence.binding(uiSourceCode);
282 if (!Runtime.experiments.isEnabled('persistence2') && binding && binding.net work === uiSourceCode)
283 return false;
284 return true;
285 }
286
287 /**
245 * @param {!Workspace.UISourceCode} uiSourceCode 288 * @param {!Workspace.UISourceCode} uiSourceCode
246 */ 289 */
247 _addUISourceCode(uiSourceCode) { 290 _addUISourceCode(uiSourceCode) {
248 if (!this.accept(uiSourceCode)) 291 if (!this._acceptsUISourceCode(uiSourceCode))
249 return; 292 return;
250 293
251 var binding = Persistence.persistence.binding(uiSourceCode); 294 var frames = Bindings.NetworkProject.framesForUISourceCode(uiSourceCode);
252 if (!Runtime.experiments.isEnabled('persistence2') && binding && binding.net work === uiSourceCode) 295 if (frames.length) {
253 return; 296 for (var frame of frames)
297 this._addUISourceCodeNode(uiSourceCode, frame);
298 } else {
299 this._addUISourceCodeNode(uiSourceCode, null);
300 }
301 this.uiSourceCodeAdded(uiSourceCode);
302 }
254 303
304 /**
305 * @param {!Workspace.UISourceCode} uiSourceCode
306 * @param {?SDK.ResourceTreeFrame} frame
307 */
308 _addUISourceCodeNode(uiSourceCode, frame) {
255 var isFromSourceMap = uiSourceCode.contentType().isFromSourceMap(); 309 var isFromSourceMap = uiSourceCode.contentType().isFromSourceMap();
256 var path; 310 var path;
257 if (uiSourceCode.project().type() === Workspace.projectTypes.FileSystem) 311 if (uiSourceCode.project().type() === Workspace.projectTypes.FileSystem)
258 path = Persistence.FileSystemWorkspaceBinding.relativePath(uiSourceCode).s lice(0, -1); 312 path = Persistence.FileSystemWorkspaceBinding.relativePath(uiSourceCode).s lice(0, -1);
259 else 313 else
260 path = Common.ParsedURL.extractPath(uiSourceCode.url()).split('/').slice(1 , -1); 314 path = Common.ParsedURL.extractPath(uiSourceCode.url()).split('/').slice(1 , -1);
261 315
262 var project = uiSourceCode.project(); 316 var project = uiSourceCode.project();
263 var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode); 317 var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
264 var frames = Bindings.NetworkProject.framesForUISourceCode(uiSourceCode); 318 var folderNode =
265 var uiSourceCodeNodes = []; 319 this._folderNode(uiSourceCode, project, target, frame, uiSourceCode.orig in(), path, isFromSourceMap);
266 if (frames.length) { 320 var uiSourceCodeNode = new Sources.NavigatorUISourceCodeTreeNode(this, uiSou rceCode, frame);
267 for (var frame of frames) { 321 folderNode.appendChild(uiSourceCodeNode);
268 var folderNode = 322 this._uiSourceCodeNodes.set(uiSourceCode, uiSourceCodeNode);
269 this._folderNode(uiSourceCode, project, target, frame, uiSourceCode. origin(), path, isFromSourceMap);
270 var uiSourceCodeNode = new Sources.NavigatorUISourceCodeTreeNode(this, u iSourceCode, frame);
271 folderNode.appendChild(uiSourceCodeNode);
272 uiSourceCodeNodes.push(uiSourceCodeNode);
273 }
274 } else {
275 var folderNode =
276 this._folderNode(uiSourceCode, project, target, null, uiSourceCode.ori gin(), path, isFromSourceMap);
277 var uiSourceCodeNode = new Sources.NavigatorUISourceCodeTreeNode(this, uiS ourceCode, null);
278 folderNode.appendChild(uiSourceCodeNode);
279 uiSourceCodeNodes.push(uiSourceCodeNode);
280 }
281 this._uiSourceCodeNodes.set(uiSourceCode, uiSourceCodeNodes);
282 this.uiSourceCodeAdded(uiSourceCode);
283 } 323 }
284 324
285 /** 325 /**
286 * @param {!Workspace.UISourceCode} uiSourceCode 326 * @param {!Workspace.UISourceCode} uiSourceCode
287 */ 327 */
288 uiSourceCodeAdded(uiSourceCode) { 328 uiSourceCodeAdded(uiSourceCode) {
289 } 329 }
290 330
291 /** 331 /**
292 * @param {!Common.Event} event 332 * @param {!Common.Event} event
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 return (prettyURL || projectOrigin); 525 return (prettyURL || projectOrigin);
486 } 526 }
487 527
488 /** 528 /**
489 * @param {!Workspace.UISourceCode} uiSourceCode 529 * @param {!Workspace.UISourceCode} uiSourceCode
490 * @param {boolean=} select 530 * @param {boolean=} select
491 * @return {?Sources.NavigatorUISourceCodeTreeNode} 531 * @return {?Sources.NavigatorUISourceCodeTreeNode}
492 */ 532 */
493 revealUISourceCode(uiSourceCode, select) { 533 revealUISourceCode(uiSourceCode, select) {
494 var nodes = this._uiSourceCodeNodes.get(uiSourceCode); 534 var nodes = this._uiSourceCodeNodes.get(uiSourceCode);
495 if (!nodes) 535 var node = nodes.firstValue();
536 if (!node)
496 return null; 537 return null;
497 if (this._scriptsTree.selectedTreeElement) 538 if (this._scriptsTree.selectedTreeElement)
498 this._scriptsTree.selectedTreeElement.deselect(); 539 this._scriptsTree.selectedTreeElement.deselect();
499 this._lastSelectedUISourceCode = uiSourceCode; 540 this._lastSelectedUISourceCode = uiSourceCode;
500 // TODO(dgozman): figure out revealing multiple. 541 // TODO(dgozman): figure out revealing multiple.
501 nodes[0].reveal(select); 542 node.reveal(select);
502 return nodes[0]; 543 return node;
503 } 544 }
504 545
505 /** 546 /**
506 * @param {!Workspace.UISourceCode} uiSourceCode 547 * @param {!Workspace.UISourceCode} uiSourceCode
507 * @param {boolean} focusSource 548 * @param {boolean} focusSource
508 */ 549 */
509 _sourceSelected(uiSourceCode, focusSource) { 550 _sourceSelected(uiSourceCode, focusSource) {
510 this._lastSelectedUISourceCode = uiSourceCode; 551 this._lastSelectedUISourceCode = uiSourceCode;
511 Common.Revealer.reveal(uiSourceCode, !focusSource); 552 Common.Revealer.reveal(uiSourceCode, !focusSource);
512 } 553 }
513 554
514 /** 555 /**
515 * @param {!Workspace.UISourceCode} uiSourceCode 556 * @param {!Workspace.UISourceCode} uiSourceCode
516 */ 557 */
517 sourceDeleted(uiSourceCode) { 558 sourceDeleted(uiSourceCode) {
518 } 559 }
519 560
520 /** 561 /**
521 * @param {!Workspace.UISourceCode} uiSourceCode 562 * @param {!Workspace.UISourceCode} uiSourceCode
522 */ 563 */
523 _removeUISourceCode(uiSourceCode) { 564 _removeUISourceCode(uiSourceCode) {
524 var nodes = this._uiSourceCodeNodes.get(uiSourceCode) || []; 565 var nodes = this._uiSourceCodeNodes.get(uiSourceCode);
525 for (var i = 0; i < nodes.length; i++) { 566 for (var node of nodes)
526 var node = nodes[i]; 567 this._removeUISourceCodeNode(node);
568 }
527 569
528 var project = uiSourceCode.project(); 570 /**
529 var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode); 571 * @param {!Sources.NavigatorUISourceCodeTreeNode} node
530 var frame = node.frame(); 572 */
573 _removeUISourceCodeNode(node) {
574 var uiSourceCode = node.uiSourceCode();
575 this._uiSourceCodeNodes.remove(uiSourceCode, node);
576 var project = uiSourceCode.project();
577 var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
578 var frame = node.frame();
531 579
532 var parentNode = node.parent; 580 var parentNode = node.parent;
581 parentNode.removeChild(node);
582 node = parentNode;
583
584 while (node) {
585 parentNode = node.parent;
586 if (!parentNode || !node.isEmpty())
587 break;
588 if (!(node instanceof Sources.NavigatorGroupTreeNode || node instanceof So urces.NavigatorFolderTreeNode))
589 break;
590 if (node._type === Sources.NavigatorView.Types.Frame) {
591 this._discardFrame(/** @type {!SDK.ResourceTreeFrame} */ (frame));
592 break;
593 }
594
595 var folderId = this._folderNodeId(project, target, frame, uiSourceCode.ori gin(), node._folderPath);
596 this._subfolderNodes.delete(folderId);
533 parentNode.removeChild(node); 597 parentNode.removeChild(node);
534 node = parentNode; 598 node = parentNode;
535
536 while (node) {
537 parentNode = node.parent;
538 if (!parentNode || !node.isEmpty())
539 break;
540 if (!(node instanceof Sources.NavigatorGroupTreeNode || node instanceof Sources.NavigatorFolderTreeNode))
541 break;
542 if (node._type === Sources.NavigatorView.Types.Frame) {
543 this._discardFrame(/** @type {!SDK.ResourceTreeFrame} */ (frame));
544 break;
545 }
546
547 var folderId = this._folderNodeId(project, target, frame, uiSourceCode.o rigin(), node._folderPath);
548 this._subfolderNodes.delete(folderId);
549 parentNode.removeChild(node);
550 node = parentNode;
551 }
552 } 599 }
553 this._uiSourceCodeNodes.delete(uiSourceCode);
554 } 600 }
555 601
556 reset() { 602 reset() {
557 for (var entry of this._uiSourceCodeNodes) { 603 for (var node of this._uiSourceCodeNodes.valuesArray())
558 var nodes = /** @type {!Array<!Sources.NavigatorUISourceCodeTreeNode>} */ (entry[1]); 604 node.dispose();
559 for (var i = 0; i < nodes.length; i++)
560 nodes[i].dispose();
561 }
562 605
563 this._scriptsTree.removeChildren(); 606 this._scriptsTree.removeChildren();
564 this._uiSourceCodeNodes.clear(); 607 this._uiSourceCodeNodes.clear();
565 this._subfolderNodes.clear(); 608 this._subfolderNodes.clear();
566 this._frameNodes.clear(); 609 this._frameNodes.clear();
567 this._rootNode.reset(); 610 this._rootNode.reset();
568 } 611 }
569 612
570 /** 613 /**
571 * @param {!Event} event 614 * @param {!Event} event
(...skipping 1023 matching lines...) Expand 10 before | Expand all | Expand 10 after
1595 /** 1638 /**
1596 * @param {string} title 1639 * @param {string} title
1597 * @override 1640 * @override
1598 */ 1641 */
1599 setTitle(title) { 1642 setTitle(title) {
1600 this._title = title; 1643 this._title = title;
1601 if (this._treeElement) 1644 if (this._treeElement)
1602 this._treeElement.title = this._title; 1645 this._treeElement.title = this._title;
1603 } 1646 }
1604 }; 1647 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698