Changeset 249305 in webkit
- Timestamp:
- Aug 29, 2019 6:08:03 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 18 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r249301 r249305 1 2019-08-29 Devin Rousso <drousso@apple.com> 2 3 Web Inspector: DOMDebugger: support event breakpoints in Worker contexts 4 https://bugs.webkit.org/show_bug.cgi?id=200651 5 6 Reviewed by Joseph Pecoraro. 7 8 * inspector/worker/dom-debugger-dom-breakpoints.html: Added. 9 * inspector/worker/dom-debugger-dom-breakpoints-expected.txt: Added. 10 * inspector/worker/dom-debugger-event-animation-frame-breakpoints.html: Added. 11 * inspector/worker/dom-debugger-event-animation-frame-breakpoints-expected.txt: Added. 12 * inspector/worker/dom-debugger-event-interval-breakpoints.html: Added. 13 * inspector/worker/dom-debugger-event-interval-breakpoints-expected.txt: Added. 14 * inspector/worker/dom-debugger-event-listener-breakpoints.html: Added. 15 * inspector/worker/dom-debugger-event-listener-breakpoints-expected.txt: Added. 16 * inspector/worker/dom-debugger-event-timeout-breakpoints.html: Added. 17 * inspector/worker/dom-debugger-event-timeout-breakpoints-expected.txt: Added. 18 * inspector/worker/dom-debugger-url-breakpoints.html: Added. 19 * inspector/worker/dom-debugger-url-breakpoints-expected.txt: Added. 20 21 * inspector/debugger/resources/log-active-stack-trace.js: Added. 22 (TestPage.registerInitializer.window.logStackTrace): Added. 23 (TestPage.registerInitializer.window.logActiveStackTrace): 24 25 * inspector/worker/resources/dom-debugger-utilities.js: Added. 26 (TestPage.registerInitializer.InspectorTest.Worker.DOMDebugger.createWorkerTarget): 27 * inspector/worker/resources/worker-dom-debugger.js: Added. 28 1 29 2019-08-29 Devin Rousso <drousso@apple.com> 2 30 -
trunk/LayoutTests/inspector/debugger/resources/log-active-stack-trace.js
r220119 r249305 1 1 TestPage.registerInitializer(() => { 2 window.logStackTrace = function(stackTrace) { 3 let foundAsyncBoundary = false; 4 let callFrameIndex = 0; 5 6 function logCallFrame(callFrame, isAsyncBoundary) { 7 let label = callFrame.functionName; 8 if (isAsyncBoundary) 9 InspectorTest.log(`${callFrameIndex}: --- ${label} ---`); 10 else { 11 let code = callFrame.nativeCode ? "N" : (callFrame.programCode ? "P" : "F"); 12 InspectorTest.log(`${callFrameIndex}: [${code}] ${label}`); 13 } 14 callFrameIndex++; 15 } 16 17 InspectorTest.log("CALL STACK:"); 18 19 while (stackTrace) { 20 let callFrames = stackTrace.callFrames; 21 let topCallFrameIsBoundary = stackTrace.topCallFrameIsBoundary; 22 let truncated = stackTrace.truncated; 23 stackTrace = stackTrace.parentStackTrace; 24 if (!callFrames || !callFrames.length) 25 continue; 26 27 if (topCallFrameIsBoundary) { 28 if (!foundAsyncBoundary) { 29 InspectorTest.log("ASYNC CALL STACK:"); 30 foundAsyncBoundary = true; 31 } 32 logCallFrame(callFrames[0], true); 33 } 34 35 for (let i = topCallFrameIsBoundary ? 1 : 0; i < callFrames.length; ++i) { 36 let callFrame = callFrames[i]; 37 logCallFrame(callFrame); 38 39 // Skip call frames after the test harness entry point. 40 if (callFrame.programCode) 41 break; 42 } 43 44 if (truncated) 45 InspectorTest.log("(remaining call frames truncated)"); 46 } 47 }; 48 2 49 window.getActiveStackTrace = function() { 3 50 InspectorTest.assert(WI.debuggerManager.activeCallFrame, "Active call frame should exist."); … … 16 63 17 64 window.logActiveStackTrace = function() { 18 function logStackTrace(stackTrace) {19 let foundAsyncBoundary = false;20 let callFrameIndex = 0;21 22 function logCallFrame(callFrame, isAsyncBoundary) {23 let label = callFrame.functionName;24 if (isAsyncBoundary)25 InspectorTest.log(`${callFrameIndex}: --- ${label} ---`);26 else {27 let code = callFrame.nativeCode ? "N" : (callFrame.programCode ? "P" : "F");28 InspectorTest.log(`${callFrameIndex}: [${code}] ${label}`);29 }30 callFrameIndex++;31 }32 33 InspectorTest.log("CALL STACK:");34 35 while (stackTrace) {36 let callFrames = stackTrace.callFrames;37 let topCallFrameIsBoundary = stackTrace.topCallFrameIsBoundary;38 let truncated = stackTrace.truncated;39 stackTrace = stackTrace.parentStackTrace;40 if (!callFrames || !callFrames.length)41 continue;42 43 if (topCallFrameIsBoundary) {44 if (!foundAsyncBoundary) {45 InspectorTest.log("ASYNC CALL STACK:");46 foundAsyncBoundary = true;47 }48 logCallFrame(callFrames[0], true);49 }50 51 for (let i = topCallFrameIsBoundary ? 1 : 0; i < callFrames.length; ++i) {52 let callFrame = callFrames[i];53 logCallFrame(callFrame);54 55 // Skip call frames after the test harness entry point.56 if (callFrame.programCode)57 break;58 }59 60 if (truncated)61 InspectorTest.log("(remaining call frames truncated)");62 }63 }64 65 65 logStackTrace(getActiveStackTrace()); 66 66 } -
trunk/Source/JavaScriptCore/ChangeLog
r249304 r249305 1 2019-08-29 Devin Rousso <drousso@apple.com> 2 3 Web Inspector: DOMDebugger: support event breakpoints in Worker contexts 4 https://bugs.webkit.org/show_bug.cgi?id=200651 5 6 Reviewed by Joseph Pecoraro. 7 8 * inspector/protocol/DOMDebugger.json: 9 Make the domain available in "worker" contexts as well. 10 1 11 2019-08-29 Keith Rollin <krollin@apple.com> 2 12 -
trunk/Source/JavaScriptCore/inspector/protocol/DOMDebugger.json
r248201 r249305 2 2 "domain": "DOMDebugger", 3 3 "description": "DOM debugging allows setting breakpoints on particular DOM operations and events. JavaScript execution will stop on these operations as if there was a regular breakpoint set.", 4 "availability": ["web" ],4 "availability": ["web", "worker"], 5 5 "types": [ 6 6 { -
trunk/Source/WebCore/ChangeLog
r249302 r249305 1 2019-08-29 Devin Rousso <drousso@apple.com> 2 3 Web Inspector: DOMDebugger: support event breakpoints in Worker contexts 4 https://bugs.webkit.org/show_bug.cgi?id=200651 5 6 Reviewed by Joseph Pecoraro. 7 8 Tests: inspector/worker/dom-debugger-dom-breakpoints.html 9 inspector/worker/dom-debugger-event-animation-frame-breakpoints.html 10 inspector/worker/dom-debugger-event-interval-breakpoints.html 11 inspector/worker/dom-debugger-event-listener-breakpoints.html 12 inspector/worker/dom-debugger-event-timeout-breakpoints.html 13 inspector/worker/dom-debugger-url-breakpoints.html 14 15 * inspector/agents/InspectorDOMDebuggerAgent.h: 16 * inspector/agents/InspectorDOMDebuggerAgent.cpp: 17 (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent): 18 (WebCore::InspectorDOMDebuggerAgent::enabled const): 19 (WebCore::InspectorDOMDebuggerAgent::enable): 20 (WebCore::InspectorDOMDebuggerAgent::disable): 21 (WebCore::InspectorDOMDebuggerAgent::debuggerWasEnabled): 22 (WebCore::InspectorDOMDebuggerAgent::debuggerWasDisabled): 23 (WebCore::InspectorDOMDebuggerAgent::setEventBreakpoint): 24 (WebCore::InspectorDOMDebuggerAgent::removeEventBreakpoint): 25 (WebCore::InspectorDOMDebuggerAgent::~InspectorDOMDebuggerAgent): Deleted. 26 (WebCore::InspectorDOMDebuggerAgent::frameDocumentUpdated): Deleted. 27 (WebCore::InspectorDOMDebuggerAgent::willInvalidateStyleAttr): Deleted. 28 (WebCore::InspectorDOMDebuggerAgent::didInsertDOMNode): Deleted. 29 (WebCore::InspectorDOMDebuggerAgent::didRemoveDOMNode): Deleted. 30 (WebCore::domTypeForName): Deleted. 31 (WebCore::domTypeName): Deleted. 32 (WebCore::InspectorDOMDebuggerAgent::setDOMBreakpoint): Deleted. 33 (WebCore::InspectorDOMDebuggerAgent::removeDOMBreakpoint): Deleted. 34 (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode): Deleted. 35 (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode): Deleted. 36 (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr): Deleted. 37 (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent): Deleted. 38 (WebCore::InspectorDOMDebuggerAgent::hasBreakpoint): Deleted. 39 (WebCore::InspectorDOMDebuggerAgent::updateSubtreeBreakpoints): Deleted. 40 (WebCore::InspectorDOMDebuggerAgent::willFireAnimationFrame): Deleted. 41 * inspector/agents/page/PageDOMDebuggerAgent.h: Added. 42 * inspector/agents/page/PageDOMDebuggerAgent.cpp: Added. 43 (WebCore::domTypeForName): 44 (WebCore::domTypeName): 45 (WebCore::PageDOMDebuggerAgent::PageDOMDebuggerAgent): 46 (WebCore::PageDOMDebuggerAgent::enabled const): 47 (WebCore::PageDOMDebuggerAgent::enable): 48 (WebCore::PageDOMDebuggerAgent::disable): 49 (WebCore::PageDOMDebuggerAgent::setDOMBreakpoint): 50 (WebCore::PageDOMDebuggerAgent::removeDOMBreakpoint): 51 (WebCore::PageDOMDebuggerAgent::frameDocumentUpdated): 52 (WebCore::PageDOMDebuggerAgent::willInsertDOMNode): 53 (WebCore::PageDOMDebuggerAgent::didInsertDOMNode): 54 (WebCore::PageDOMDebuggerAgent::willRemoveDOMNode): 55 (WebCore::PageDOMDebuggerAgent::didRemoveDOMNode): 56 (WebCore::PageDOMDebuggerAgent::willModifyDOMAttr): 57 (WebCore::PageDOMDebuggerAgent::willFireAnimationFrame): 58 (WebCore::PageDOMDebuggerAgent::willInvalidateStyleAttr): 59 (WebCore::PageDOMDebuggerAgent::setAnimationFrameBreakpoint): 60 (WebCore::PageDOMDebuggerAgent::descriptionForDOMEvent): 61 (WebCore::PageDOMDebuggerAgent::updateSubtreeBreakpoints): 62 (WebCore::PageDOMDebuggerAgent::hasBreakpoint): 63 * inspector/agents/worker/WorkerDOMDebuggerAgent.h: Added. 64 * inspector/agents/worker/WorkerDOMDebuggerAgent.cpp: Added. 65 (WebCore::WorkerDOMDebuggerAgent::WorkerDOMDebuggerAgent): 66 (WebCore::WorkerDOMDebuggerAgent::setDOMBreakpoint): 67 (WebCore::WorkerDOMDebuggerAgent::removeDOMBreakpoint): 68 (WebCore::WorkerDOMDebuggerAgent::setAnimationFrameBreakpoint): 69 Split the `InspectorDOMDebuggerAgent` into two subclasses depending on the inspected target 70 type, as certain `DOMDebugger` commands don't make sense for a `Worker` context: 71 - DOM breakpoints, as there is no DOM in a `Worker` context 72 - animation frame event breakpoints, as there is no `requestAnimationFrame` function 73 74 * inspector/InspectorController.cpp: 75 (WebCore::InspectorController::createLazyAgents): 76 * inspector/WorkerInspectorController.cpp: 77 (WebCore::WorkerInspectorController::createLazyAgents): 78 79 * inspector/InstrumentingAgents.h: 80 (WebCore::InstrumentingAgents::pageDOMDebuggerAgent const): Added. 81 (WebCore::InstrumentingAgents::setPageDOMDebuggerAgent): Added. 82 * inspector/InstrumentingAgents.cpp: 83 (WebCore::InstrumentingAgents::reset): 84 85 * inspector/InspectorInstrumentation.cpp: 86 (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl): 87 (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl): 88 (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl): 89 (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl): 90 (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl): 91 (WebCore::InspectorInstrumentation::willInvalidateStyleAttrImpl): 92 (WebCore::InspectorInstrumentation::frameDocumentUpdatedImpl): 93 (WebCore::InspectorInstrumentation::willFireAnimationFrameImpl): 94 95 * Sources.txt: 96 * WebCore.xcodeproj/project.pbxproj: 97 1 98 2019-08-29 Keith Rollin <krollin@apple.com> 2 99 -
trunk/Source/WebCore/Sources.txt
r249212 r249305 1373 1373 inspector/agents/page/PageAuditAgent.cpp 1374 1374 inspector/agents/page/PageConsoleAgent.cpp 1375 inspector/agents/page/PageDOMDebuggerAgent.cpp 1375 1376 inspector/agents/page/PageDebuggerAgent.cpp 1376 1377 inspector/agents/page/PageHeapAgent.cpp … … 1381 1382 inspector/agents/worker/WorkerAuditAgent.cpp 1382 1383 inspector/agents/worker/WorkerConsoleAgent.cpp 1384 inspector/agents/worker/WorkerDOMDebuggerAgent.cpp 1383 1385 inspector/agents/worker/WorkerDebuggerAgent.cpp 1384 1386 inspector/agents/worker/WorkerNetworkAgent.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r249217 r249305 2533 2533 91B952241F58A58F00931DC2 /* RecordingSwizzleTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 91B952221F58A58000931DC2 /* RecordingSwizzleTypes.h */; }; 2534 2534 91C9F2F91AE3BEB00095B61C /* AXTextStateChangeIntent.h in Headers */ = {isa = PBXBuildFile; fileRef = 91C9F2F81AE3BE240095B61C /* AXTextStateChangeIntent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2535 91E0DDC1230B41E50019E1E3 /* PageDOMDebuggerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 91E0DDBF230B41E50019E1E3 /* PageDOMDebuggerAgent.h */; }; 2536 91E0DDC4230B41F10019E1E3 /* WorkerDOMDebuggerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 91E0DDC2230B41F00019E1E3 /* WorkerDOMDebuggerAgent.h */; }; 2535 2537 9302B0BF0D79F82C00C7EE83 /* PageGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 9302B0BE0D79F82C00C7EE83 /* PageGroup.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2536 2538 9305B24D098F1B6B00C28855 /* Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9305B24C098F1B6B00C28855 /* Timer.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 10384 10386 91B952221F58A58000931DC2 /* RecordingSwizzleTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RecordingSwizzleTypes.h; sourceTree = "<group>"; }; 10385 10387 91C9F2F81AE3BE240095B61C /* AXTextStateChangeIntent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AXTextStateChangeIntent.h; sourceTree = "<group>"; }; 10388 91E0DDBD230B41E40019E1E3 /* PageDOMDebuggerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PageDOMDebuggerAgent.cpp; sourceTree = "<group>"; }; 10389 91E0DDBF230B41E50019E1E3 /* PageDOMDebuggerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageDOMDebuggerAgent.h; sourceTree = "<group>"; }; 10390 91E0DDC2230B41F00019E1E3 /* WorkerDOMDebuggerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerDOMDebuggerAgent.h; sourceTree = "<group>"; }; 10391 91E0DDC3230B41F00019E1E3 /* WorkerDOMDebuggerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WorkerDOMDebuggerAgent.cpp; sourceTree = "<group>"; }; 10386 10392 9302B0BC0D79F82900C7EE83 /* PageGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PageGroup.cpp; sourceTree = "<group>"; }; 10387 10393 9302B0BE0D79F82C00C7EE83 /* PageGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageGroup.h; sourceTree = "<group>"; }; … … 22516 22522 A5B81CBD1FAA44B70037D1E6 /* PageDebuggerAgent.cpp */, 22517 22523 A5B81CBE1FAA44B70037D1E6 /* PageDebuggerAgent.h */, 22524 91E0DDBD230B41E40019E1E3 /* PageDOMDebuggerAgent.cpp */, 22525 91E0DDBF230B41E50019E1E3 /* PageDOMDebuggerAgent.h */, 22518 22526 A5B81CBA1FAA44B70037D1E6 /* PageHeapAgent.cpp */, 22519 22527 A5B81CBC1FAA44B70037D1E6 /* PageHeapAgent.h */, … … 22537 22545 A5B81CC81FAA44DA0037D1E6 /* WorkerDebuggerAgent.cpp */, 22538 22546 A5B81CCC1FAA44DA0037D1E6 /* WorkerDebuggerAgent.h */, 22547 91E0DDC3230B41F00019E1E3 /* WorkerDOMDebuggerAgent.cpp */, 22548 91E0DDC2230B41F00019E1E3 /* WorkerDOMDebuggerAgent.h */, 22539 22549 A5CB05221FB51F2300089B97 /* WorkerNetworkAgent.cpp */, 22540 22550 A5CB05231FB51F2400089B97 /* WorkerNetworkAgent.h */, … … 30915 30925 A5A2AF0C1829734300DE1729 /* PageDebuggable.h in Headers */, 30916 30926 A5B81CC31FAA44BC0037D1E6 /* PageDebuggerAgent.h in Headers */, 30927 91E0DDC1230B41E50019E1E3 /* PageDOMDebuggerAgent.h in Headers */, 30917 30928 9302B0BF0D79F82C00C7EE83 /* PageGroup.h in Headers */, 30918 30929 7A674BDC0F9EBF4E006CF099 /* PageGroupLoadDeferrer.h in Headers */, … … 32294 32305 A5B81CCE1FAA44DE0037D1E6 /* WorkerDebuggerAgent.h in Headers */, 32295 32306 A52B349E1FA41703008B6246 /* WorkerDebuggerProxy.h in Headers */, 32307 91E0DDC4230B41F10019E1E3 /* WorkerDOMDebuggerAgent.h in Headers */, 32296 32308 A3E2643114748991005A8588 /* WorkerEventQueue.h in Headers */, 32297 32309 2E4346490F546A8200B0F1BA /* WorkerGlobalScope.h in Headers */, -
trunk/Source/WebCore/inspector/InspectorController.cpp
r248846 r249305 45 45 #include "InspectorClient.h" 46 46 #include "InspectorDOMAgent.h" 47 #include "InspectorDOMDebuggerAgent.h"48 47 #include "InspectorDOMStorageAgent.h" 49 48 #include "InspectorDatabaseAgent.h" … … 65 64 #include "PageAuditAgent.h" 66 65 #include "PageConsoleAgent.h" 66 #include "PageDOMDebuggerAgent.h" 67 67 #include "PageDebuggerAgent.h" 68 68 #include "PageHeapAgent.h" … … 163 163 m_agents.append(makeUnique<InspectorCSSAgent>(pageContext)); 164 164 ensureDOMAgent(); 165 m_agents.append(makeUnique< InspectorDOMDebuggerAgent>(pageContext, debuggerAgentPtr));165 m_agents.append(makeUnique<PageDOMDebuggerAgent>(pageContext, debuggerAgentPtr)); 166 166 m_agents.append(makeUnique<InspectorApplicationCacheAgent>(pageContext)); 167 167 m_agents.append(makeUnique<InspectorLayerTreeAgent>(pageContext)); -
trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp
r248286 r249305 144 144 void InspectorInstrumentation::willInsertDOMNodeImpl(InstrumentingAgents& instrumentingAgents, Node& parent) 145 145 { 146 if ( InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent())147 domDebuggerAgent->willInsertDOMNode(parent);146 if (auto* pageDOMDebuggerAgent = instrumentingAgents.pageDOMDebuggerAgent()) 147 pageDOMDebuggerAgent->willInsertDOMNode(parent); 148 148 } 149 149 … … 152 152 if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) 153 153 domAgent->didInsertDOMNode(node); 154 if ( InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent())155 domDebuggerAgent->didInsertDOMNode(node);154 if (auto* pageDOMDebuggerAgent = instrumentingAgents.pageDOMDebuggerAgent()) 155 pageDOMDebuggerAgent->didInsertDOMNode(node); 156 156 } 157 157 158 158 void InspectorInstrumentation::willRemoveDOMNodeImpl(InstrumentingAgents& instrumentingAgents, Node& node) 159 159 { 160 if ( InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent())161 domDebuggerAgent->willRemoveDOMNode(node);160 if (auto* pageDOMDebuggerAgent = instrumentingAgents.pageDOMDebuggerAgent()) 161 pageDOMDebuggerAgent->willRemoveDOMNode(node); 162 162 } 163 163 164 164 void InspectorInstrumentation::didRemoveDOMNodeImpl(InstrumentingAgents& instrumentingAgents, Node& node) 165 165 { 166 if ( InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent())167 domDebuggerAgent->didRemoveDOMNode(node);166 if (auto* pageDOMDebuggerAgent = instrumentingAgents.pageDOMDebuggerAgent()) 167 pageDOMDebuggerAgent->didRemoveDOMNode(node); 168 168 if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) 169 169 domAgent->didRemoveDOMNode(node); … … 172 172 void InspectorInstrumentation::willModifyDOMAttrImpl(InstrumentingAgents& instrumentingAgents, Element& element, const AtomString& oldValue, const AtomString& newValue) 173 173 { 174 if ( InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent())175 domDebuggerAgent->willModifyDOMAttr(element);174 if (auto* pageDOMDebuggerAgent = instrumentingAgents.pageDOMDebuggerAgent()) 175 pageDOMDebuggerAgent->willModifyDOMAttr(element); 176 176 if (InspectorDOMAgent* domAgent = instrumentingAgents.inspectorDOMAgent()) 177 177 domAgent->willModifyDOMAttr(element, oldValue, newValue); … … 192 192 void InspectorInstrumentation::willInvalidateStyleAttrImpl(InstrumentingAgents& instrumentingAgents, Element& element) 193 193 { 194 if (auto* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent())195 domDebuggerAgent->willInvalidateStyleAttr(element);194 if (auto* pageDOMDebuggerAgent = instrumentingAgents.pageDOMDebuggerAgent()) 195 pageDOMDebuggerAgent->willInvalidateStyleAttr(element); 196 196 } 197 197 … … 765 765 domAgent->frameDocumentUpdated(frame); 766 766 767 if ( InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent())768 domDebuggerAgent->frameDocumentUpdated(frame);767 if (auto* pageDOMDebuggerAgent = instrumentingAgents.pageDOMDebuggerAgent()) 768 pageDOMDebuggerAgent->frameDocumentUpdated(frame); 769 769 } 770 770 … … 1142 1142 pageDebuggerAgent->willFireAnimationFrame(callbackId); 1143 1143 1144 if ( InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents.inspectorDOMDebuggerAgent())1145 domDebuggerAgent->willFireAnimationFrame();1144 if (auto* pageDOMDebuggerAgent = instrumentingAgents.pageDOMDebuggerAgent()) 1145 pageDOMDebuggerAgent->willFireAnimationFrame(); 1146 1146 1147 1147 int timelineAgentId = 0; -
trunk/Source/WebCore/inspector/InstrumentingAgents.cpp
r248286 r249305 68 68 m_pageHeapAgent = nullptr; 69 69 m_inspectorDOMDebuggerAgent = nullptr; 70 m_pageDOMDebuggerAgent = nullptr; 70 71 m_inspectorCanvasAgent = nullptr; 71 72 } -
trunk/Source/WebCore/inspector/InstrumentingAgents.h
r248286 r249305 60 60 class InspectorWorkerAgent; 61 61 class Page; 62 class PageDOMDebuggerAgent; 62 63 class PageDebuggerAgent; 63 64 class PageHeapAgent; … … 142 143 void setInspectorDOMDebuggerAgent(InspectorDOMDebuggerAgent* agent) { m_inspectorDOMDebuggerAgent = agent; } 143 144 145 PageDOMDebuggerAgent* pageDOMDebuggerAgent() const { return m_pageDOMDebuggerAgent; } 146 void setPageDOMDebuggerAgent(PageDOMDebuggerAgent* agent) { m_pageDOMDebuggerAgent = agent; } 147 144 148 InspectorLayerTreeAgent* inspectorLayerTreeAgent() const { return m_inspectorLayerTreeAgent; } 145 149 void setInspectorLayerTreeAgent(InspectorLayerTreeAgent* agent) { m_inspectorLayerTreeAgent = agent; } … … 176 180 PageHeapAgent* m_pageHeapAgent { nullptr }; 177 181 InspectorDOMDebuggerAgent* m_inspectorDOMDebuggerAgent { nullptr }; 182 PageDOMDebuggerAgent* m_pageDOMDebuggerAgent { nullptr }; 178 183 InspectorCanvasAgent* m_inspectorCanvasAgent { nullptr }; 179 184 }; -
trunk/Source/WebCore/inspector/WorkerInspectorController.cpp
r248846 r249305 35 35 #include "WorkerAuditAgent.h" 36 36 #include "WorkerConsoleAgent.h" 37 #include "WorkerDOMDebuggerAgent.h" 37 38 #include "WorkerDebuggerAgent.h" 38 39 #include "WorkerGlobalScope.h" … … 175 176 176 177 m_agents.append(makeUnique<WebHeapAgent>(workerContext)); 177 m_agents.append(makeUnique<WorkerDebuggerAgent>(workerContext)); 178 179 auto debuggerAgent = makeUnique<WorkerDebuggerAgent>(workerContext); 180 auto debuggerAgentPtr = debuggerAgent.get(); 181 m_agents.append(WTFMove(debuggerAgent)); 182 183 m_agents.append(makeUnique<WorkerDOMDebuggerAgent>(workerContext, debuggerAgentPtr)); 178 184 m_agents.append(makeUnique<WorkerAuditAgent>(workerContext)); 179 185 -
trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp
r249132 r249305 34 34 35 35 #include "Event.h" 36 #include "Frame.h" 37 #include "HTMLElement.h" 36 #include "EventTarget.h" 38 37 #include "InspectorDOMAgent.h" 39 38 #include "InstrumentingAgents.h" 40 39 #include "JSEvent.h" 41 40 #include "RegisteredEventListener.h" 41 #include "ScriptExecutionContext.h" 42 42 #include <JavaScriptCore/ContentSearchUtilities.h> 43 43 #include <JavaScriptCore/InjectedScript.h> … … 47 47 #include <wtf/JSONValues.h> 48 48 49 namespace {50 51 enum DOMBreakpointType {52 SubtreeModified,53 AttributeModified,54 NodeRemoved,55 DOMBreakpointTypesCount56 };57 58 const uint32_t inheritableDOMBreakpointTypesMask = (1 << SubtreeModified);59 const int domBreakpointDerivedTypeShift = 16;60 61 }62 63 64 49 namespace WebCore { 65 50 … … 68 53 InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(WebAgentContext& context, InspectorDebuggerAgent* debuggerAgent) 69 54 : InspectorAgentBase("DOMDebugger"_s, context) 55 , m_debuggerAgent(debuggerAgent) 70 56 , m_backendDispatcher(Inspector::DOMDebuggerBackendDispatcher::create(context.backendDispatcher, this)) 71 57 , m_injectedScriptManager(context.injectedScriptManager) 72 , m_debuggerAgent(debuggerAgent)73 58 { 74 59 m_debuggerAgent->addListener(*this); … … 77 62 InspectorDOMDebuggerAgent::~InspectorDOMDebuggerAgent() = default; 78 63 79 // Browser debugger agent enabled only when JS debugger is enabled. 80 void InspectorDOMDebuggerAgent::debuggerWasEnabled() 64 bool InspectorDOMDebuggerAgent::enabled() const 65 { 66 return m_instrumentingAgents.inspectorDOMDebuggerAgent() == this; 67 } 68 69 void InspectorDOMDebuggerAgent::enable() 81 70 { 82 71 m_instrumentingAgents.setInspectorDOMDebuggerAgent(this); 83 72 } 84 73 85 void InspectorDOMDebuggerAgent::debuggerWasDisabled()86 {87 disable();88 }89 90 74 void InspectorDOMDebuggerAgent::disable() 91 75 { 92 76 m_instrumentingAgents.setInspectorDOMDebuggerAgent(nullptr); 93 m_domBreakpoints.clear(); 77 94 78 m_listenerBreakpoints.clear(); 95 79 m_urlBreakpoints.clear(); 96 m_pauseOnAllAnimationFramesEnabled = false;97 80 m_pauseOnAllIntervalsEnabled = false; 98 81 m_pauseOnAllListenersEnabled = false; … … 101 84 } 102 85 86 // Browser debugger agent enabled only when JS debugger is enabled. 87 void InspectorDOMDebuggerAgent::debuggerWasEnabled() 88 { 89 ASSERT(!enabled()); 90 enable(); 91 } 92 93 void InspectorDOMDebuggerAgent::debuggerWasDisabled() 94 { 95 ASSERT(enabled()); 96 disable(); 97 } 98 103 99 void InspectorDOMDebuggerAgent::didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) 104 100 { … … 114 110 m_debuggerAgent->removeListener(*this); 115 111 m_debuggerAgent = nullptr; 116 }117 118 void InspectorDOMDebuggerAgent::frameDocumentUpdated(Frame& frame)119 {120 if (!frame.isMainFrame())121 return;122 123 m_domBreakpoints.clear();124 112 } 125 113 … … 150 138 switch (breakpointType.value()) { 151 139 case Inspector::Protocol::DOMDebugger::EventBreakpointType::AnimationFrame: 152 if (m_pauseOnAllAnimationFramesEnabled) 153 errorString = "Breakpoint for AnimationFrame already exists"_s; 154 m_pauseOnAllAnimationFramesEnabled = true; 140 setAnimationFrameBreakpoint(errorString, true); 155 141 break; 156 142 … … 201 187 switch (breakpointType.value()) { 202 188 case Inspector::Protocol::DOMDebugger::EventBreakpointType::AnimationFrame: 203 if (!m_pauseOnAllAnimationFramesEnabled) 204 errorString = "Breakpoint for AnimationFrame missing"_s; 205 m_pauseOnAllAnimationFramesEnabled = false; 189 setAnimationFrameBreakpoint(errorString, false); 206 190 break; 207 191 … … 224 208 break; 225 209 } 226 }227 228 void InspectorDOMDebuggerAgent::willInvalidateStyleAttr(Element& element)229 {230 if (!m_debuggerAgent->breakpointsActive())231 return;232 233 if (hasBreakpoint(&element, AttributeModified)) {234 Ref<JSON::Object> eventData = JSON::Object::create();235 descriptionForDOMEvent(element, AttributeModified, false, eventData.get());236 m_debuggerAgent->breakProgram(Inspector::DebuggerFrontendDispatcher::Reason::DOM, WTFMove(eventData));237 }238 }239 240 void InspectorDOMDebuggerAgent::didInsertDOMNode(Node& node)241 {242 if (m_domBreakpoints.size()) {243 uint32_t mask = m_domBreakpoints.get(InspectorDOMAgent::innerParentNode(&node));244 uint32_t inheritableTypesMask = (mask | (mask >> domBreakpointDerivedTypeShift)) & inheritableDOMBreakpointTypesMask;245 if (inheritableTypesMask)246 updateSubtreeBreakpoints(&node, inheritableTypesMask, true);247 }248 }249 250 void InspectorDOMDebuggerAgent::didRemoveDOMNode(Node& node)251 {252 if (m_domBreakpoints.size()) {253 // Remove subtree breakpoints.254 m_domBreakpoints.remove(&node);255 Vector<Node*> stack(1, InspectorDOMAgent::innerFirstChild(&node));256 do {257 Node* node = stack.last();258 stack.removeLast();259 if (!node)260 continue;261 m_domBreakpoints.remove(node);262 stack.append(InspectorDOMAgent::innerFirstChild(node));263 stack.append(InspectorDOMAgent::innerNextSibling(node));264 } while (!stack.isEmpty());265 }266 }267 268 static int domTypeForName(ErrorString& errorString, const String& typeString)269 {270 if (typeString == "subtree-modified")271 return SubtreeModified;272 if (typeString == "attribute-modified")273 return AttributeModified;274 if (typeString == "node-removed")275 return NodeRemoved;276 errorString = makeString("Unknown type: ", typeString);277 return -1;278 }279 280 static String domTypeName(int type)281 {282 switch (type) {283 case SubtreeModified: return "subtree-modified"_s;284 case AttributeModified: return "attribute-modified"_s;285 case NodeRemoved: return "node-removed"_s;286 default: break;287 }288 return emptyString();289 }290 291 void InspectorDOMDebuggerAgent::setDOMBreakpoint(ErrorString& errorString, int nodeId, const String& typeString)292 {293 auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();294 if (!domAgent) {295 errorString = "DOM domain must be enabled"_s;296 return;297 }298 299 Node* node = domAgent->assertNode(errorString, nodeId);300 if (!node)301 return;302 303 int type = domTypeForName(errorString, typeString);304 if (type == -1)305 return;306 307 uint32_t rootBit = 1 << type;308 m_domBreakpoints.set(node, m_domBreakpoints.get(node) | rootBit);309 if (rootBit & inheritableDOMBreakpointTypesMask) {310 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child))311 updateSubtreeBreakpoints(child, rootBit, true);312 }313 }314 315 void InspectorDOMDebuggerAgent::removeDOMBreakpoint(ErrorString& errorString, int nodeId, const String& typeString)316 {317 auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();318 if (!domAgent) {319 errorString = "DOM domain must be enabled"_s;320 return;321 }322 323 Node* node = domAgent->assertNode(errorString, nodeId);324 if (!node)325 return;326 327 int type = domTypeForName(errorString, typeString);328 if (type == -1)329 return;330 331 uint32_t rootBit = 1 << type;332 uint32_t mask = m_domBreakpoints.get(node) & ~rootBit;333 if (mask)334 m_domBreakpoints.set(node, mask);335 else336 m_domBreakpoints.remove(node);337 338 if ((rootBit & inheritableDOMBreakpointTypesMask) && !(mask & (rootBit << domBreakpointDerivedTypeShift))) {339 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child))340 updateSubtreeBreakpoints(child, rootBit, false);341 }342 }343 344 void InspectorDOMDebuggerAgent::willInsertDOMNode(Node& parent)345 {346 if (!m_debuggerAgent->breakpointsActive())347 return;348 349 if (hasBreakpoint(&parent, SubtreeModified)) {350 Ref<JSON::Object> eventData = JSON::Object::create();351 descriptionForDOMEvent(parent, SubtreeModified, true, eventData.get());352 m_debuggerAgent->breakProgram(Inspector::DebuggerFrontendDispatcher::Reason::DOM, WTFMove(eventData));353 }354 }355 356 void InspectorDOMDebuggerAgent::willRemoveDOMNode(Node& node)357 {358 if (!m_debuggerAgent->breakpointsActive())359 return;360 361 Node* parentNode = InspectorDOMAgent::innerParentNode(&node);362 if (hasBreakpoint(&node, NodeRemoved)) {363 Ref<JSON::Object> eventData = JSON::Object::create();364 descriptionForDOMEvent(node, NodeRemoved, false, eventData.get());365 m_debuggerAgent->breakProgram(Inspector::DebuggerFrontendDispatcher::Reason::DOM, WTFMove(eventData));366 } else if (parentNode && hasBreakpoint(parentNode, SubtreeModified)) {367 Ref<JSON::Object> eventData = JSON::Object::create();368 descriptionForDOMEvent(node, SubtreeModified, false, eventData.get());369 m_debuggerAgent->breakProgram(Inspector::DebuggerFrontendDispatcher::Reason::DOM, WTFMove(eventData));370 }371 }372 373 void InspectorDOMDebuggerAgent::willModifyDOMAttr(Element& element)374 {375 if (!m_debuggerAgent->breakpointsActive())376 return;377 378 if (hasBreakpoint(&element, AttributeModified)) {379 Ref<JSON::Object> eventData = JSON::Object::create();380 descriptionForDOMEvent(element, AttributeModified, false, eventData.get());381 m_debuggerAgent->breakProgram(Inspector::DebuggerFrontendDispatcher::Reason::DOM, WTFMove(eventData));382 }383 }384 385 void InspectorDOMDebuggerAgent::descriptionForDOMEvent(Node& target, int breakpointType, bool insertion, JSON::Object& description)386 {387 ASSERT(m_debuggerAgent->breakpointsActive());388 ASSERT(hasBreakpoint(&target, breakpointType));389 390 auto* domAgent = m_instrumentingAgents.inspectorDOMAgent();391 392 Node* breakpointOwner = ⌖393 if ((1 << breakpointType) & inheritableDOMBreakpointTypesMask) {394 if (domAgent) {395 // For inheritable breakpoint types, target node isn't always the same as the node that owns a breakpoint.396 // Target node may be unknown to frontend, so we need to push it first.397 RefPtr<Inspector::Protocol::Runtime::RemoteObject> targetNodeObject = domAgent->resolveNode(&target, InspectorDebuggerAgent::backtraceObjectGroup);398 description.setValue("targetNode", targetNodeObject);399 }400 401 // Find breakpoint owner node.402 if (!insertion)403 breakpointOwner = InspectorDOMAgent::innerParentNode(&target);404 ASSERT(breakpointOwner);405 while (!(m_domBreakpoints.get(breakpointOwner) & (1 << breakpointType))) {406 Node* parentNode = InspectorDOMAgent::innerParentNode(breakpointOwner);407 if (!parentNode)408 break;409 breakpointOwner = parentNode;410 }411 412 if (breakpointType == SubtreeModified)413 description.setBoolean("insertion", insertion);414 }415 416 if (domAgent) {417 int breakpointOwnerNodeId = domAgent->boundNodeId(breakpointOwner);418 ASSERT(breakpointOwnerNodeId);419 description.setInteger("nodeId", breakpointOwnerNodeId);420 }421 422 description.setString("type", domTypeName(breakpointType));423 }424 425 bool InspectorDOMDebuggerAgent::hasBreakpoint(Node* node, int type)426 {427 uint32_t rootBit = 1 << type;428 uint32_t derivedBit = rootBit << domBreakpointDerivedTypeShift;429 return m_domBreakpoints.get(node) & (rootBit | derivedBit);430 }431 432 void InspectorDOMDebuggerAgent::updateSubtreeBreakpoints(Node* node, uint32_t rootMask, bool set)433 {434 uint32_t oldMask = m_domBreakpoints.get(node);435 uint32_t derivedMask = rootMask << domBreakpointDerivedTypeShift;436 uint32_t newMask = set ? oldMask | derivedMask : oldMask & ~derivedMask;437 if (newMask)438 m_domBreakpoints.set(node, newMask);439 else440 m_domBreakpoints.remove(node);441 442 uint32_t newRootMask = rootMask & ~newMask;443 if (!newRootMask)444 return;445 446 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child))447 updateSubtreeBreakpoints(child, newRootMask, set);448 210 } 449 211 … … 497 259 auto breakReason = oneShot ? Inspector::DebuggerFrontendDispatcher::Reason::Timeout : Inspector::DebuggerFrontendDispatcher::Reason::Interval; 498 260 m_debuggerAgent->schedulePauseOnNextStatement(breakReason, nullptr); 499 }500 501 void InspectorDOMDebuggerAgent::willFireAnimationFrame()502 {503 if (!m_debuggerAgent->breakpointsActive())504 return;505 506 bool shouldPause = m_debuggerAgent->pauseOnNextStatementEnabled() || m_pauseOnAllAnimationFramesEnabled;507 if (!shouldPause)508 return;509 510 m_debuggerAgent->schedulePauseOnNextStatement(Inspector::DebuggerFrontendDispatcher::Reason::AnimationFrame, nullptr);511 261 } 512 262 -
trunk/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.h
r249132 r249305 45 45 namespace WebCore { 46 46 47 class Element;48 47 class Event; 49 class Frame;50 class Node;51 48 class RegisteredEventListener; 52 49 53 50 typedef String ErrorString; 54 51 55 class InspectorDOMDebuggerAgent final: public InspectorAgentBase, public Inspector::DOMDebuggerBackendDispatcherHandler, public Inspector::InspectorDebuggerAgent::Listener {52 class InspectorDOMDebuggerAgent : public InspectorAgentBase, public Inspector::DOMDebuggerBackendDispatcherHandler, public Inspector::InspectorDebuggerAgent::Listener { 56 53 WTF_MAKE_NONCOPYABLE(InspectorDOMDebuggerAgent); 57 54 WTF_MAKE_FAST_ALLOCATED; 58 55 public: 59 InspectorDOMDebuggerAgent(WebAgentContext&, Inspector::InspectorDebuggerAgent*);60 56 virtual ~InspectorDOMDebuggerAgent(); 61 57 … … 64 60 void willDestroyFrontendAndBackend(Inspector::DisconnectReason); 65 61 void discardAgent(); 62 virtual bool enabled() const; 66 63 67 64 // DOMDebuggerBackendDispatcherHandler 68 void setURLBreakpoint(ErrorString&, const String& url, const bool* optionalIsRegex); 69 void removeURLBreakpoint(ErrorString&, const String& url); 70 void setEventBreakpoint(ErrorString&, const String& breakpointType, const String* eventName); 71 void removeEventBreakpoint(ErrorString&, const String& breakpointType, const String* eventName); 72 void setDOMBreakpoint(ErrorString&, int nodeId, const String& type); 73 void removeDOMBreakpoint(ErrorString&, int nodeId, const String& type); 65 void setURLBreakpoint(ErrorString&, const String& url, const bool* optionalIsRegex) final; 66 void removeURLBreakpoint(ErrorString&, const String& url) final; 67 void setEventBreakpoint(ErrorString&, const String& breakpointType, const String* eventName) final; 68 void removeEventBreakpoint(ErrorString&, const String& breakpointType, const String* eventName) final; 74 69 75 70 // InspectorDebuggerAgent::Listener … … 78 73 79 74 // InspectorInstrumentation 80 void willInsertDOMNode(Node& parent);81 void willInvalidateStyleAttr(Element&);82 void didInsertDOMNode(Node&);83 void willRemoveDOMNode(Node&);84 void didRemoveDOMNode(Node&);85 void willModifyDOMAttr(Element&);86 75 void willSendXMLHttpRequest(const String& url); 87 76 void willFetch(const String& url); 88 void frameDocumentUpdated(Frame&);89 77 void willHandleEvent(Event&, const RegisteredEventListener&); 90 78 void didHandleEvent(); 91 79 void willFireTimer(bool oneShot); 92 void willFireAnimationFrame();93 void mainFrameDOMContentLoaded();94 80 95 void disable(); 81 protected: 82 InspectorDOMDebuggerAgent(WebAgentContext&, Inspector::InspectorDebuggerAgent*); 83 virtual void enable(); 84 virtual void disable(); 85 86 virtual void setAnimationFrameBreakpoint(ErrorString&, bool enabled) = 0; 87 88 Inspector::InspectorDebuggerAgent* m_debuggerAgent { nullptr }; 96 89 97 90 private: … … 99 92 void breakOnURLIfNeeded(const String& url, URLBreakpointSource); 100 93 101 void descriptionForDOMEvent(Node& target, int breakpointType, bool insertion, JSON::Object& description);102 void updateSubtreeBreakpoints(Node*, uint32_t rootMask, bool set);103 bool hasBreakpoint(Node*, int type);104 105 94 RefPtr<Inspector::DOMDebuggerBackendDispatcher> m_backendDispatcher; 106 95 Inspector::InjectedScriptManager& m_injectedScriptManager; 107 96 108 Inspector::InspectorDebuggerAgent* m_debuggerAgent { nullptr };109 110 HashMap<Node*, uint32_t> m_domBreakpoints;111 97 HashSet<String> m_listenerBreakpoints; 112 98 … … 114 100 HashMap<String, URLBreakpointType> m_urlBreakpoints; 115 101 116 bool m_pauseOnAllAnimationFramesEnabled { false };117 102 bool m_pauseOnAllIntervalsEnabled { false }; 118 103 bool m_pauseOnAllListenersEnabled { false }; -
trunk/Source/WebInspectorUI/ChangeLog
r249301 r249305 1 2019-08-29 Devin Rousso <drousso@apple.com> 2 3 Web Inspector: DOMDebugger: support event breakpoints in Worker contexts 4 https://bugs.webkit.org/show_bug.cgi?id=200651 5 6 Reviewed by Joseph Pecoraro. 7 8 * UserInterface/Controllers/DOMDebuggerManager.js: 9 (WI.DOMDebuggerManager.prototype._updateDOMBreakpoint): 10 (WI.DOMDebuggerManager.prototype._updateEventBreakpoint): 11 Add assertions when adding/removing DOM breakpoints or animation frame event breakpoints if 12 the target is a `WI.WorkerTarget`, as neither are supported by `Worker`s. 13 1 14 2019-08-29 Devin Rousso <drousso@apple.com> 2 15 -
trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMDebuggerManager.js
r249301 r249305 604 604 _updateDOMBreakpoint(breakpoint, target) 605 605 { 606 console.assert(target.type !== WI.Target.Type.Worker, "Worker targets do not support DOM breakpoints"); 607 if (target.type === WI.Target.Type.Worker) 608 return; 609 606 610 if (!target.DOMDebuggerAgent || !target.DOMDebuggerAgent.setDOMBreakpoint || !target.DOMDebuggerAgent.removeDOMBreakpoint) 607 611 return; … … 622 626 _updateEventBreakpoint(breakpoint, target) 623 627 { 628 // Worker targets do not support `requestAnimationFrame` breakpoints. 629 if (breakpoint === this._allAnimationFramesBreakpoint && target.type === WI.Target.Type.Worker) 630 return; 631 624 632 if (!target.DOMDebuggerAgent) 625 633 return; … … 686 694 } 687 695 696 const callback = null; 697 688 698 if (breakpoint.disabled) 689 target.DOMDebuggerAgent.removeEventBreakpoint.invoke(commandArguments );699 target.DOMDebuggerAgent.removeEventBreakpoint.invoke(commandArguments, callback, target.DOMDebuggerAgent); 690 700 else { 691 701 if (!this._restoringBreakpoints && !WI.debuggerManager.breakpointsDisabledTemporarily) 692 702 WI.debuggerManager.breakpointsEnabled = true; 693 703 694 target.DOMDebuggerAgent.setEventBreakpoint.invoke(commandArguments );704 target.DOMDebuggerAgent.setEventBreakpoint.invoke(commandArguments, callback, target.DOMDebuggerAgent); 695 705 } 696 706 }
Note: See TracChangeset
for help on using the changeset viewer.