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

Side by Side Diff: Source/devtools/front_end/sources/BreakpointsSidebarPane.js

Issue 321113005: DevTools: Support XHR event listener breakpoints on frontend. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: addressed Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2008 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 WebInspector.SidebarPane.call(this, WebInspector.UIString("Event Listener Br eakpoints")); 514 WebInspector.SidebarPane.call(this, WebInspector.UIString("Event Listener Br eakpoints"));
515 this.registerRequiredCSS("breakpointsList.css"); 515 this.registerRequiredCSS("breakpointsList.css");
516 516
517 this.categoriesElement = document.createElement("ol"); 517 this.categoriesElement = document.createElement("ol");
518 this.categoriesElement.tabIndex = 0; 518 this.categoriesElement.tabIndex = 0;
519 this.categoriesElement.classList.add("properties-tree"); 519 this.categoriesElement.classList.add("properties-tree");
520 this.categoriesElement.classList.add("event-listener-breakpoints"); 520 this.categoriesElement.classList.add("event-listener-breakpoints");
521 this.categoriesTreeOutline = new TreeOutline(this.categoriesElement); 521 this.categoriesTreeOutline = new TreeOutline(this.categoriesElement);
522 this.bodyElement.appendChild(this.categoriesElement); 522 this.bodyElement.appendChild(this.categoriesElement);
523 523
524 this._breakpointItems = {}; 524 this._categoryItems = [];
525 // FIXME: uncomment following once inspector stops being drop targer in majo r ports. 525 // FIXME: uncomment following once inspector stops being drop targer in majo r ports.
526 // Otherwise, inspector page reacts on drop event and tries to load the even t data. 526 // Otherwise, inspector page reacts on drop event and tries to load the even t data.
527 // this._createCategory(WebInspector.UIString("Drag"), true, ["drag", "drop" , "dragstart", "dragend", "dragenter", "dragleave", "dragover"]); 527 // this._createCategory(WebInspector.UIString("Drag"), ["drag", "drop", "dra gstart", "dragend", "dragenter", "dragleave", "dragover"]);
528 this._createCategory(WebInspector.UIString("Animation"), false, ["requestAni mationFrame", "cancelAnimationFrame", "animationFrameFired"]); 528 this._createCategory(WebInspector.UIString("Animation"), ["requestAnimationF rame", "cancelAnimationFrame", "animationFrameFired"], true);
529 this._createCategory(WebInspector.UIString("Control"), true, ["resize", "scr oll", "zoom", "focus", "blur", "select", "change", "submit", "reset"]); 529 this._createCategory(WebInspector.UIString("Control"), ["resize", "scroll", "zoom", "focus", "blur", "select", "change", "submit", "reset"]);
530 this._createCategory(WebInspector.UIString("Clipboard"), true, ["copy", "cut ", "paste", "beforecopy", "beforecut", "beforepaste"]); 530 this._createCategory(WebInspector.UIString("Clipboard"), ["copy", "cut", "pa ste", "beforecopy", "beforecut", "beforepaste"]);
531 this._createCategory(WebInspector.UIString("DOM Mutation"), true, ["DOMActiv ate", "DOMFocusIn", "DOMFocusOut", "DOMAttrModified", "DOMCharacterDataModified" , "DOMNodeInserted", "DOMNodeInsertedIntoDocument", "DOMNodeRemoved", "DOMNodeRe movedFromDocument", "DOMSubtreeModified", "DOMContentLoaded"]); 531 this._createCategory(WebInspector.UIString("DOM Mutation"), ["DOMActivate", "DOMFocusIn", "DOMFocusOut", "DOMAttrModified", "DOMCharacterDataModified", "DOM NodeInserted", "DOMNodeInsertedIntoDocument", "DOMNodeRemoved", "DOMNodeRemovedF romDocument", "DOMSubtreeModified", "DOMContentLoaded"]);
532 this._createCategory(WebInspector.UIString("Device"), true, ["deviceorientat ion", "devicemotion"]); 532 this._createCategory(WebInspector.UIString("Device"), ["deviceorientation", "devicemotion"]);
533 this._createCategory(WebInspector.UIString("Drag / drop"), true, ["dragenter ", "dragover", "dragleave", "drop"]); 533 this._createCategory(WebInspector.UIString("Drag / drop"), ["dragenter", "dr agover", "dragleave", "drop"]);
534 this._createCategory(WebInspector.UIString("Keyboard"), true, ["keydown", "k eyup", "keypress", "input"]); 534 this._createCategory(WebInspector.UIString("Keyboard"), ["keydown", "keyup", "keypress", "input"]);
535 this._createCategory(WebInspector.UIString("Load"), true, ["load", "beforeun load", "unload", "abort", "error", "hashchange", "popstate"]); 535 this._createCategory(WebInspector.UIString("Load"), ["load", "beforeunload", "unload", "abort", "error", "hashchange", "popstate"]);
536 this._createCategory(WebInspector.UIString("Mouse"), true, ["click", "dblcli ck", "mousedown", "mouseup", "mouseover", "mousemove", "mouseout", "mousewheel", "wheel"]); 536 this._createCategory(WebInspector.UIString("Mouse"), ["click", "dblclick", " mousedown", "mouseup", "mouseover", "mousemove", "mouseout", "mousewheel", "whee l"]);
537 this._createCategory(WebInspector.UIString("Timer"), false, ["setTimer", "cl earTimer", "timerFired"]); 537 this._createCategory(WebInspector.UIString("Timer"), ["setTimer", "clearTime r", "timerFired"], true);
538 this._createCategory(WebInspector.UIString("Touch"), true, ["touchstart", "t ouchmove", "touchend", "touchcancel"]); 538 this._createCategory(WebInspector.UIString("Touch"), ["touchstart", "touchmo ve", "touchend", "touchcancel"]);
539 this._createCategory(WebInspector.UIString("WebGL"), false, ["webglErrorFire d", "webglWarningFired"]); 539 this._createCategory(WebInspector.UIString("XHR"), ["readystatechange", "loa d", "loadstart", "loadend", "abort", "error", "progress", "timeout"], false, ["X MLHttpRequest", "XMLHttpRequestUpload"]);
yurys 2014/06/16 12:22:10 It is a bit confusing that we mix categories and t
540 this._createCategory(WebInspector.UIString("WebGL"), ["webglErrorFired", "we bglWarningFired"], true);
540 541
541 this._restoreBreakpoints(); 542 this._restoreBreakpoints();
542 } 543 }
543 544
544 WebInspector.EventListenerBreakpointsSidebarPane.categotyListener = "listener:"; 545 WebInspector.EventListenerBreakpointsSidebarPane.categoryListener = "listener:";
545 WebInspector.EventListenerBreakpointsSidebarPane.categotyInstrumentation = "inst rumentation:"; 546 WebInspector.EventListenerBreakpointsSidebarPane.categoryInstrumentation = "inst rumentation:";
547 WebInspector.EventListenerBreakpointsSidebarPane.eventTargetAny = "*";
546 548
547 /** 549 /**
548 * @param {string} eventName 550 * @param {string} eventName
549 * @param {!Object=} auxData 551 * @param {!Object=} auxData
550 * @return {string} 552 * @return {string}
551 */ 553 */
552 WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI = function(event Name, auxData) 554 WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI = function(event Name, auxData)
553 { 555 {
554 if (!WebInspector.EventListenerBreakpointsSidebarPane._eventNamesForUI) { 556 if (!WebInspector.EventListenerBreakpointsSidebarPane._eventNamesForUI) {
555 WebInspector.EventListenerBreakpointsSidebarPane._eventNamesForUI = { 557 WebInspector.EventListenerBreakpointsSidebarPane._eventNamesForUI = {
(...skipping 12 matching lines...) Expand all
568 var errorName = auxData["webglErrorName"]; 570 var errorName = auxData["webglErrorName"];
569 // If there is a hex code of the error, display only this. 571 // If there is a hex code of the error, display only this.
570 errorName = errorName.replace(/^.*(0x[0-9a-f]+).*$/i, "$1"); 572 errorName = errorName.replace(/^.*(0x[0-9a-f]+).*$/i, "$1");
571 return WebInspector.UIString("WebGL Error Fired (%s)", errorName); 573 return WebInspector.UIString("WebGL Error Fired (%s)", errorName);
572 } 574 }
573 } 575 }
574 return WebInspector.EventListenerBreakpointsSidebarPane._eventNamesForUI[eve ntName] || eventName.substring(eventName.indexOf(":") + 1); 576 return WebInspector.EventListenerBreakpointsSidebarPane._eventNamesForUI[eve ntName] || eventName.substring(eventName.indexOf(":") + 1);
575 } 577 }
576 578
577 WebInspector.EventListenerBreakpointsSidebarPane.prototype = { 579 WebInspector.EventListenerBreakpointsSidebarPane.prototype = {
578 _createCategory: function(name, isDOMEvent, eventNames) 580 /**
581 * @param {string} name
582 * @param {!Array.<string>} eventNames
583 * @param {boolean=} isInstrumentationEvent
584 * @param {!Array.<string>=} targetNames
585 */
586 _createCategory: function(name, eventNames, isInstrumentationEvent, targetNa mes)
579 { 587 {
580 var labelNode = document.createElement("label"); 588 var labelNode = document.createElement("label");
581 labelNode.textContent = name; 589 labelNode.textContent = name;
582 590
583 var categoryItem = {}; 591 var categoryItem = {};
584 categoryItem.element = new TreeElement(labelNode); 592 categoryItem.element = new TreeElement(labelNode);
585 this.categoriesTreeOutline.appendChild(categoryItem.element); 593 this.categoriesTreeOutline.appendChild(categoryItem.element);
586 categoryItem.element.listItemElement.classList.add("event-category"); 594 categoryItem.element.listItemElement.classList.add("event-category");
587 categoryItem.element.selectable = true; 595 categoryItem.element.selectable = true;
588 596
589 categoryItem.checkbox = this._createCheckbox(labelNode); 597 categoryItem.checkbox = this._createCheckbox(labelNode);
590 categoryItem.checkbox.addEventListener("click", this._categoryCheckboxCl icked.bind(this, categoryItem), true); 598 categoryItem.checkbox.addEventListener("click", this._categoryCheckboxCl icked.bind(this, categoryItem), true);
591 599
600 categoryItem.targetNames = this._stringArrayToLowerCase(targetNames || [ WebInspector.EventListenerBreakpointsSidebarPane.eventTargetAny]);
592 categoryItem.children = {}; 601 categoryItem.children = {};
602 var category = (isInstrumentationEvent ? WebInspector.EventListenerBreak pointsSidebarPane.categoryInstrumentation : WebInspector.EventListenerBreakpoin tsSidebarPane.categoryListener);
593 for (var i = 0; i < eventNames.length; ++i) { 603 for (var i = 0; i < eventNames.length; ++i) {
594 var eventName = (isDOMEvent ? WebInspector.EventListenerBreakpointsS idebarPane.categotyListener : WebInspector.EventListenerBreakpointsSidebarPane. categotyInstrumentation) + eventNames[i]; 604 var eventName = category + eventNames[i];
595 605
596 var breakpointItem = {}; 606 var breakpointItem = {};
597 var title = WebInspector.EventListenerBreakpointsSidebarPane.eventNa meForUI(eventName); 607 var title = WebInspector.EventListenerBreakpointsSidebarPane.eventNa meForUI(eventName);
598 608
599 labelNode = document.createElement("label"); 609 labelNode = document.createElement("label");
600 labelNode.textContent = title; 610 labelNode.textContent = title;
601 611
602 breakpointItem.element = new TreeElement(labelNode); 612 breakpointItem.element = new TreeElement(labelNode);
603 categoryItem.element.appendChild(breakpointItem.element); 613 categoryItem.element.appendChild(breakpointItem.element);
604 614
605 var hitMarker = document.createElement("div"); 615 breakpointItem.element.listItemElement.createChild("div", "breakpoin t-hit-marker");
606 hitMarker.className = "breakpoint-hit-marker";
607 breakpointItem.element.listItemElement.appendChild(hitMarker);
608 breakpointItem.element.listItemElement.classList.add("source-code"); 616 breakpointItem.element.listItemElement.classList.add("source-code");
609 breakpointItem.element.selectable = false; 617 breakpointItem.element.selectable = false;
610 618
611 breakpointItem.checkbox = this._createCheckbox(labelNode); 619 breakpointItem.checkbox = this._createCheckbox(labelNode);
612 breakpointItem.checkbox.addEventListener("click", this._breakpointCh eckboxClicked.bind(this, eventName), true); 620 breakpointItem.checkbox.addEventListener("click", this._breakpointCh eckboxClicked.bind(this, eventName, categoryItem.targetNames), true);
613 breakpointItem.parent = categoryItem; 621 breakpointItem.parent = categoryItem;
614 622
615 this._breakpointItems[eventName] = breakpointItem;
616 categoryItem.children[eventName] = breakpointItem; 623 categoryItem.children[eventName] = breakpointItem;
617 } 624 }
625 this._categoryItems.push(categoryItem);
618 }, 626 },
619 627
628 /**
629 * @param {!Array.<string>} array
630 * @return {!Array.<string>}
631 */
632 _stringArrayToLowerCase: function(array)
633 {
634 return array.map(function(value) {
635 return value.toLowerCase();
636 });
637 },
638
639 /**
640 * @param {!Element} labelNode
641 * @return {!Element}
642 */
620 _createCheckbox: function(labelNode) 643 _createCheckbox: function(labelNode)
621 { 644 {
622 var checkbox = document.createElement("input"); 645 var checkbox = document.createElement("input");
623 checkbox.className = "checkbox-elem"; 646 checkbox.className = "checkbox-elem";
624 checkbox.type = "checkbox"; 647 checkbox.type = "checkbox";
625 648
626 labelNode.insertBefore(checkbox, labelNode.firstChild); 649 labelNode.insertBefore(checkbox, labelNode.firstChild);
627 return checkbox; 650 return checkbox;
628 }, 651 },
629 652
630 _categoryCheckboxClicked: function(categoryItem) 653 _categoryCheckboxClicked: function(categoryItem)
631 { 654 {
632 var checked = categoryItem.checkbox.checked; 655 var checked = categoryItem.checkbox.checked;
633 for (var eventName in categoryItem.children) { 656 for (var eventName in categoryItem.children) {
634 var breakpointItem = categoryItem.children[eventName]; 657 var breakpointItem = categoryItem.children[eventName];
635 if (breakpointItem.checkbox.checked === checked) 658 if (breakpointItem.checkbox.checked === checked)
636 continue; 659 continue;
637 if (checked) 660 if (checked)
638 this._setBreakpoint(eventName); 661 this._setBreakpoint(eventName, categoryItem.targetNames);
639 else 662 else
640 this._removeBreakpoint(eventName); 663 this._removeBreakpoint(eventName, categoryItem.targetNames);
641 } 664 }
642 this._saveBreakpoints(); 665 this._saveBreakpoints();
643 }, 666 },
644 667
645 _breakpointCheckboxClicked: function(eventName, event) 668 /**
669 * @param {string} eventName
670 * @param {!Array.<string>} targetNames
671 * @param {?Event} event
672 */
673 _breakpointCheckboxClicked: function(eventName, targetNames, event)
646 { 674 {
647 if (event.target.checked) 675 if (event.target.checked)
648 this._setBreakpoint(eventName); 676 this._setBreakpoint(eventName, targetNames);
649 else 677 else
650 this._removeBreakpoint(eventName); 678 this._removeBreakpoint(eventName, targetNames);
651 this._saveBreakpoints(); 679 this._saveBreakpoints();
652 }, 680 },
653 681
654 _setBreakpoint: function(eventName) 682 /**
683 * @param {string} eventName
684 * @param {?Array.<string>=} targetNames
685 */
686 _setBreakpoint: function(eventName, targetNames)
655 { 687 {
656 var breakpointItem = this._breakpointItems[eventName]; 688 targetNames = targetNames || [WebInspector.EventListenerBreakpointsSideb arPane.eventTargetAny];
657 if (!breakpointItem) 689 for (var i = 0; i < targetNames.length; ++i) {
658 return; 690 var targetName = targetNames[i];
659 breakpointItem.checkbox.checked = true; 691 var breakpointItem = this._findBreakpointItem(eventName, targetName) ;
660 if (eventName.startsWith(WebInspector.EventListenerBreakpointsSidebarPan e.categotyListener)) 692 if (!breakpointItem)
661 DOMDebuggerAgent.setEventListenerBreakpoint(eventName.substring(WebI nspector.EventListenerBreakpointsSidebarPane.categotyListener.length)); 693 continue;
662 else if (eventName.startsWith(WebInspector.EventListenerBreakpointsSideb arPane.categotyInstrumentation)) 694 breakpointItem.checkbox.checked = true;
663 DOMDebuggerAgent.setInstrumentationBreakpoint(eventName.substring(We bInspector.EventListenerBreakpointsSidebarPane.categotyInstrumentation.length)); 695 breakpointItem.parent.dirtyCheckbox = true;
664 this._updateCategoryCheckbox(breakpointItem.parent); 696 if (eventName.startsWith(WebInspector.EventListenerBreakpointsSideba rPane.categoryListener))
697 DOMDebuggerAgent.setEventListenerBreakpoint(eventName.substring( WebInspector.EventListenerBreakpointsSidebarPane.categoryListener.length), targe tName);
698 else if (eventName.startsWith(WebInspector.EventListenerBreakpointsS idebarPane.categoryInstrumentation))
699 DOMDebuggerAgent.setInstrumentationBreakpoint(eventName.substrin g(WebInspector.EventListenerBreakpointsSidebarPane.categoryInstrumentation.lengt h));
700 }
701 this._updateCategoryCheckboxes();
665 }, 702 },
666 703
667 _removeBreakpoint: function(eventName) 704 /**
705 * @param {string} eventName
706 * @param {?Array.<string>=} targetNames
707 */
708 _removeBreakpoint: function(eventName, targetNames)
668 { 709 {
669 var breakpointItem = this._breakpointItems[eventName]; 710 targetNames = targetNames || [WebInspector.EventListenerBreakpointsSideb arPane.eventTargetAny];
670 if (!breakpointItem) 711 for (var i = 0; i < targetNames.length; ++i) {
671 return; 712 var targetName = targetNames[i];
672 breakpointItem.checkbox.checked = false; 713 var breakpointItem = this._findBreakpointItem(eventName, targetName) ;
673 if (eventName.startsWith(WebInspector.EventListenerBreakpointsSidebarPan e.categotyListener)) 714 if (!breakpointItem)
674 DOMDebuggerAgent.removeEventListenerBreakpoint(eventName.substring(W ebInspector.EventListenerBreakpointsSidebarPane.categotyListener.length)); 715 continue;
675 else if (eventName.startsWith(WebInspector.EventListenerBreakpointsSideb arPane.categotyInstrumentation)) 716 breakpointItem.checkbox.checked = false;
676 DOMDebuggerAgent.removeInstrumentationBreakpoint(eventName.substring (WebInspector.EventListenerBreakpointsSidebarPane.categotyInstrumentation.length )); 717 breakpointItem.parent.dirtyCheckbox = true;
677 this._updateCategoryCheckbox(breakpointItem.parent); 718 if (eventName.startsWith(WebInspector.EventListenerBreakpointsSideba rPane.categoryListener))
719 DOMDebuggerAgent.removeEventListenerBreakpoint(eventName.substri ng(WebInspector.EventListenerBreakpointsSidebarPane.categoryListener.length), ta rgetName);
720 else if (eventName.startsWith(WebInspector.EventListenerBreakpointsS idebarPane.categoryInstrumentation))
721 DOMDebuggerAgent.removeInstrumentationBreakpoint(eventName.subst ring(WebInspector.EventListenerBreakpointsSidebarPane.categoryInstrumentation.le ngth));
722 }
723 this._updateCategoryCheckboxes();
678 }, 724 },
679 725
680 _updateCategoryCheckbox: function(categoryItem) 726 _updateCategoryCheckboxes: function()
681 { 727 {
682 var hasEnabled = false, hasDisabled = false; 728 for (var i = 0; i < this._categoryItems.length; ++i) {
683 for (var eventName in categoryItem.children) { 729 var categoryItem = this._categoryItems[i];
684 var breakpointItem = categoryItem.children[eventName]; 730 if (!categoryItem.dirtyCheckbox)
685 if (breakpointItem.checkbox.checked) 731 continue;
686 hasEnabled = true; 732 delete categoryItem.dirtyCheckbox;
yurys 2014/06/16 12:07:24 categoryItem.dirtyCheckbox = false;
aandrey 2014/06/16 12:23:39 Done.
687 else 733 var hasEnabled = false, hasDisabled = false;
yurys 2014/06/16 12:07:24 one assignment per line please
aandrey 2014/06/16 12:23:39 Done.
688 hasDisabled = true; 734 for (var eventName in categoryItem.children) {
735 var breakpointItem = categoryItem.children[eventName];
736 if (breakpointItem.checkbox.checked)
737 hasEnabled = true;
738 else
739 hasDisabled = true;
740 }
741 categoryItem.checkbox.checked = hasEnabled;
742 categoryItem.checkbox.indeterminate = hasEnabled && hasDisabled;
689 } 743 }
690 categoryItem.checkbox.checked = hasEnabled;
691 categoryItem.checkbox.indeterminate = hasEnabled && hasDisabled;
692 }, 744 },
693 745
694 highlightBreakpoint: function(eventName) 746 /**
747 * @param {string} eventName
748 * @param {string=} targetName
749 * @return {?Object}
750 */
751 _findBreakpointItem: function(eventName, targetName)
695 { 752 {
696 var breakpointItem = this._breakpointItems[eventName]; 753 targetName = (targetName || WebInspector.EventListenerBreakpointsSidebar Pane.eventTargetAny).toLowerCase();
754 for (var i = 0; i < this._categoryItems.length; ++i) {
755 var categoryItem = this._categoryItems[i];
756 if (categoryItem.targetNames.indexOf(targetName) === -1)
757 continue;
758 var breakpointItem = categoryItem.children[eventName];
759 if (breakpointItem)
760 return breakpointItem;
yurys 2014/06/16 12:07:24 Consider doing "return breakpointItem || null;" un
aandrey 2014/06/16 12:23:39 depending on the condition, we may have to proceed
761 }
762 return null;
763 },
764
765 /**
766 * @param {string} eventName
767 * @param {string=} targetName
768 */
769 highlightBreakpoint: function(eventName, targetName)
770 {
771 var breakpointItem = this._findBreakpointItem(eventName, targetName);
772 if (!breakpointItem || !breakpointItem.checkbox.checked)
773 breakpointItem = this._findBreakpointItem(eventName, WebInspector.Ev entListenerBreakpointsSidebarPane.eventTargetAny);
697 if (!breakpointItem) 774 if (!breakpointItem)
698 return; 775 return;
699 this.expand(); 776 this.expand();
700 breakpointItem.parent.element.expand(); 777 breakpointItem.parent.element.expand();
701 breakpointItem.element.listItemElement.classList.add("breakpoint-hit"); 778 breakpointItem.element.listItemElement.classList.add("breakpoint-hit");
702 this._highlightedElement = breakpointItem.element.listItemElement; 779 this._highlightedElement = breakpointItem.element.listItemElement;
703 }, 780 },
704 781
705 clearBreakpointHighlight: function() 782 clearBreakpointHighlight: function()
706 { 783 {
707 if (this._highlightedElement) { 784 if (this._highlightedElement) {
708 this._highlightedElement.classList.remove("breakpoint-hit"); 785 this._highlightedElement.classList.remove("breakpoint-hit");
709 delete this._highlightedElement; 786 delete this._highlightedElement;
710 } 787 }
711 }, 788 },
712 789
713 _saveBreakpoints: function() 790 _saveBreakpoints: function()
714 { 791 {
715 var breakpoints = []; 792 var breakpoints = [];
716 for (var eventName in this._breakpointItems) { 793 for (var i = 0; i < this._categoryItems.length; ++i) {
717 if (this._breakpointItems[eventName].checkbox.checked) 794 var categoryItem = this._categoryItems[i];
718 breakpoints.push({ eventName: eventName }); 795 for (var eventName in categoryItem.children) {
796 var breakpointItem = categoryItem.children[eventName];
797 if (breakpointItem.checkbox.checked)
798 breakpoints.push({ eventName: eventName, targetNames: catego ryItem.targetNames });
799 }
719 } 800 }
720 WebInspector.settings.eventListenerBreakpoints.set(breakpoints); 801 WebInspector.settings.eventListenerBreakpoints.set(breakpoints);
721 }, 802 },
722 803
723 _restoreBreakpoints: function() 804 _restoreBreakpoints: function()
724 { 805 {
725 var breakpoints = WebInspector.settings.eventListenerBreakpoints.get(); 806 var breakpoints = WebInspector.settings.eventListenerBreakpoints.get();
726 for (var i = 0; i < breakpoints.length; ++i) { 807 for (var i = 0; i < breakpoints.length; ++i) {
727 var breakpoint = breakpoints[i]; 808 var breakpoint = breakpoints[i];
728 if (breakpoint && typeof breakpoint.eventName === "string") 809 if (breakpoint && typeof breakpoint.eventName === "string")
729 this._setBreakpoint(breakpoint.eventName); 810 this._setBreakpoint(breakpoint.eventName, breakpoint.targetNames );
730 } 811 }
731 }, 812 },
732 813
733 __proto__: WebInspector.SidebarPane.prototype 814 __proto__: WebInspector.SidebarPane.prototype
734 } 815 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698