OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 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 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 static const char requestAnimationFrameEventName[] = "requestAnimationFrame"; | 60 static const char requestAnimationFrameEventName[] = "requestAnimationFrame"; |
61 static const char cancelAnimationFrameEventName[] = "cancelAnimationFrame"; | 61 static const char cancelAnimationFrameEventName[] = "cancelAnimationFrame"; |
62 static const char animationFrameFiredEventName[] = "animationFrameFired"; | 62 static const char animationFrameFiredEventName[] = "animationFrameFired"; |
63 static const char setTimerEventName[] = "setTimer"; | 63 static const char setTimerEventName[] = "setTimer"; |
64 static const char clearTimerEventName[] = "clearTimer"; | 64 static const char clearTimerEventName[] = "clearTimer"; |
65 static const char timerFiredEventName[] = "timerFired"; | 65 static const char timerFiredEventName[] = "timerFired"; |
66 static const char newPromiseEventName[] = "newPromise"; | 66 static const char newPromiseEventName[] = "newPromise"; |
67 static const char promiseResolvedEventName[] = "promiseResolved"; | 67 static const char promiseResolvedEventName[] = "promiseResolved"; |
68 static const char promiseRejectedEventName[] = "promiseRejected"; | 68 static const char promiseRejectedEventName[] = "promiseRejected"; |
69 static const char windowCloseEventName[] = "close"; | 69 static const char windowCloseEventName[] = "close"; |
70 static const char customElementCallbackName[] = "customElementCallback"; | |
71 static const char webglErrorFiredEventName[] = "webglErrorFired"; | 70 static const char webglErrorFiredEventName[] = "webglErrorFired"; |
72 static const char webglWarningFiredEventName[] = "webglWarningFired"; | 71 static const char webglWarningFiredEventName[] = "webglWarningFired"; |
73 static const char webglErrorNameProperty[] = "webglErrorName"; | 72 static const char webglErrorNameProperty[] = "webglErrorName"; |
74 | 73 |
75 namespace DOMDebuggerAgentState { | 74 namespace DOMDebuggerAgentState { |
76 static const char eventListenerBreakpoints[] = "eventListenerBreakpoints"; | 75 static const char eventListenerBreakpoints[] = "eventListenerBreakpoints"; |
77 static const char eventTargetAny[] = "*"; | 76 static const char eventTargetAny[] = "*"; |
78 static const char pauseOnAllXHRs[] = "pauseOnAllXHRs"; | 77 static const char pauseOnAllXHRs[] = "pauseOnAllXHRs"; |
79 static const char xhrBreakpoints[] = "xhrBreakpoints"; | 78 static const char xhrBreakpoints[] = "xhrBreakpoints"; |
80 } | 79 } |
81 | 80 |
82 PassOwnPtrWillBeRawPtr<InspectorDOMDebuggerAgent> InspectorDOMDebuggerAgent::cre
ate(InspectorDOMAgent* domAgent, InspectorDebuggerAgent* debuggerAgent) | 81 PassOwnPtrWillBeRawPtr<InspectorDOMDebuggerAgent> InspectorDOMDebuggerAgent::cre
ate(InspectorDOMAgent* domAgent, InspectorDebuggerAgent* debuggerAgent) |
83 { | 82 { |
84 return adoptPtrWillBeNoop(new InspectorDOMDebuggerAgent(domAgent, debuggerAg
ent)); | 83 return adoptPtrWillBeNoop(new InspectorDOMDebuggerAgent(domAgent, debuggerAg
ent)); |
85 } | 84 } |
86 | 85 |
87 InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(InspectorDOMAgent* domAgent
, InspectorDebuggerAgent* debuggerAgent) | 86 InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(InspectorDOMAgent* domAgent
, InspectorDebuggerAgent* debuggerAgent) |
88 : InspectorBaseAgent<InspectorDOMDebuggerAgent>("DOMDebugger") | 87 : InspectorBaseAgent<InspectorDOMDebuggerAgent>("DOMDebugger") |
89 , m_domAgent(domAgent) | 88 , m_domAgent(domAgent) |
90 , m_debuggerAgent(debuggerAgent) | 89 , m_debuggerAgent(debuggerAgent) |
91 , m_pauseInNextEventListener(false) | |
92 { | 90 { |
93 m_debuggerAgent->setListener(this); | 91 m_debuggerAgent->setListener(this); |
94 m_domAgent->setListener(this); | 92 m_domAgent->setListener(this); |
95 } | 93 } |
96 | 94 |
97 InspectorDOMDebuggerAgent::~InspectorDOMDebuggerAgent() | 95 InspectorDOMDebuggerAgent::~InspectorDOMDebuggerAgent() |
98 { | 96 { |
99 #if !ENABLE(OILPAN) | 97 #if !ENABLE(OILPAN) |
100 ASSERT(!m_debuggerAgent); | 98 ASSERT(!m_debuggerAgent); |
101 ASSERT(!m_instrumentingAgents->inspectorDOMDebuggerAgent()); | 99 ASSERT(!m_instrumentingAgents->inspectorDOMDebuggerAgent()); |
(...skipping 26 matching lines...) Expand all Loading... |
128 { | 126 { |
129 if (m_domAgent->enabled() && m_debuggerAgent->enabled()) | 127 if (m_domAgent->enabled() && m_debuggerAgent->enabled()) |
130 m_instrumentingAgents->setInspectorDOMDebuggerAgent(this); | 128 m_instrumentingAgents->setInspectorDOMDebuggerAgent(this); |
131 } | 129 } |
132 | 130 |
133 void InspectorDOMDebuggerAgent::domAgentWasDisabled() | 131 void InspectorDOMDebuggerAgent::domAgentWasDisabled() |
134 { | 132 { |
135 disable(); | 133 disable(); |
136 } | 134 } |
137 | 135 |
138 void InspectorDOMDebuggerAgent::stepInto() | |
139 { | |
140 m_pauseInNextEventListener = true; | |
141 } | |
142 | |
143 void InspectorDOMDebuggerAgent::didPause() | |
144 { | |
145 m_pauseInNextEventListener = false; | |
146 } | |
147 | |
148 void InspectorDOMDebuggerAgent::didProcessTask() | |
149 { | |
150 if (!m_pauseInNextEventListener) | |
151 return; | |
152 if (m_debuggerAgent && m_debuggerAgent->runningNestedMessageLoop()) | |
153 return; | |
154 m_pauseInNextEventListener = false; | |
155 } | |
156 | |
157 void InspectorDOMDebuggerAgent::disable() | 136 void InspectorDOMDebuggerAgent::disable() |
158 { | 137 { |
159 m_instrumentingAgents->setInspectorDOMDebuggerAgent(0); | 138 m_instrumentingAgents->setInspectorDOMDebuggerAgent(0); |
160 clear(); | 139 clear(); |
161 } | 140 } |
162 | 141 |
163 void InspectorDOMDebuggerAgent::clearFrontend() | 142 void InspectorDOMDebuggerAgent::clearFrontend() |
164 { | 143 { |
165 disable(); | 144 disable(); |
166 } | 145 } |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 m_domBreakpoints.remove(node); | 404 m_domBreakpoints.remove(node); |
426 | 405 |
427 uint32_t newRootMask = rootMask & ~newMask; | 406 uint32_t newRootMask = rootMask & ~newMask; |
428 if (!newRootMask) | 407 if (!newRootMask) |
429 return; | 408 return; |
430 | 409 |
431 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child =
InspectorDOMAgent::innerNextSibling(child)) | 410 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child =
InspectorDOMAgent::innerNextSibling(child)) |
432 updateSubtreeBreakpoints(child, newRootMask, set); | 411 updateSubtreeBreakpoints(child, newRootMask, set); |
433 } | 412 } |
434 | 413 |
435 void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(PassRefPtr<JSONObject
> prpEventData, bool synchronous) | 414 void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(PassRefPtr<JSONObject
> eventData, bool synchronous) |
436 { | 415 { |
437 if (!prpEventData) | 416 if (!eventData) |
438 return; | 417 return; |
439 RefPtr<JSONObject> eventData = prpEventData; | |
440 InspectorFrontend::Debugger::Reason::Enum breakReason = InspectorFrontend::D
ebugger::Reason::EventListener; | |
441 if (m_pauseInNextEventListener) { | |
442 m_pauseInNextEventListener = false; | |
443 breakReason = InspectorFrontend::Debugger::Reason::Other; | |
444 eventData = nullptr; | |
445 } | |
446 if (synchronous) | 418 if (synchronous) |
447 m_debuggerAgent->breakProgram(breakReason, eventData.release()); | 419 m_debuggerAgent->breakProgram(InspectorFrontend::Debugger::Reason::Event
Listener, eventData); |
448 else | 420 else |
449 m_debuggerAgent->schedulePauseOnNextStatement(breakReason, eventData.rel
ease()); | 421 m_debuggerAgent->schedulePauseOnNextStatement(InspectorFrontend::Debugge
r::Reason::EventListener, eventData); |
450 } | 422 } |
451 | 423 |
452 PassRefPtr<JSONObject> InspectorDOMDebuggerAgent::preparePauseOnNativeEventData(
const String& eventName, const String* targetName) | 424 PassRefPtr<JSONObject> InspectorDOMDebuggerAgent::preparePauseOnNativeEventData(
const String& eventName, const String* targetName) |
453 { | 425 { |
454 String fullEventName = (targetName ? listenerEventCategoryType : instrumenta
tionEventCategoryType) + eventName; | 426 String fullEventName = (targetName ? listenerEventCategoryType : instrumenta
tionEventCategoryType) + eventName; |
455 if (!m_pauseInNextEventListener) { | 427 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebugger
AgentState::eventListenerBreakpoints); |
456 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebu
ggerAgentState::eventListenerBreakpoints); | 428 JSONObject::iterator it = eventListenerBreakpoints->find(fullEventName); |
457 JSONObject::iterator it = eventListenerBreakpoints->find(fullEventName); | 429 if (it == eventListenerBreakpoints->end()) |
458 if (it == eventListenerBreakpoints->end()) | 430 return nullptr; |
459 return nullptr; | 431 bool match = false; |
460 bool match = false; | 432 RefPtr<JSONObject> breakpointsByTarget = it->value->asObject(); |
461 RefPtr<JSONObject> breakpointsByTarget = it->value->asObject(); | 433 breakpointsByTarget->getBoolean(DOMDebuggerAgentState::eventTargetAny, &matc
h); |
462 breakpointsByTarget->getBoolean(DOMDebuggerAgentState::eventTargetAny, &
match); | 434 if (!match && targetName) |
463 if (!match && targetName) | 435 breakpointsByTarget->getBoolean(targetName->lower(), &match); |
464 breakpointsByTarget->getBoolean(targetName->lower(), &match); | 436 if (!match) |
465 if (!match) | 437 return nullptr; |
466 return nullptr; | |
467 } | |
468 | 438 |
469 RefPtr<JSONObject> eventData = JSONObject::create(); | 439 RefPtr<JSONObject> eventData = JSONObject::create(); |
470 eventData->setString("eventName", fullEventName); | 440 eventData->setString("eventName", fullEventName); |
471 if (targetName) | 441 if (targetName) |
472 eventData->setString("targetName", *targetName); | 442 eventData->setString("targetName", *targetName); |
473 return eventData.release(); | 443 return eventData.release(); |
474 } | 444 } |
475 | 445 |
476 void InspectorDOMDebuggerAgent::didInstallTimer(ExecutionContext*, int, int, boo
l) | 446 void InspectorDOMDebuggerAgent::didInstallTimer(ExecutionContext*, int, int, boo
l) |
477 { | 447 { |
478 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(setTimerEventName,
0), true); | 448 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(setTimerEventName,
0), true); |
479 } | 449 } |
480 | 450 |
481 void InspectorDOMDebuggerAgent::didRemoveTimer(ExecutionContext*, int) | 451 void InspectorDOMDebuggerAgent::didRemoveTimer(ExecutionContext*, int) |
482 { | 452 { |
483 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(clearTimerEventName
, 0), true); | 453 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(clearTimerEventName
, 0), true); |
484 } | 454 } |
485 | 455 |
486 void InspectorDOMDebuggerAgent::willFireTimer(ExecutionContext*, int) | 456 void InspectorDOMDebuggerAgent::willFireTimer(ExecutionContext*, int) |
487 { | 457 { |
488 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(timerFiredEventName
, 0), false); | 458 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(timerFiredEventName
, 0), false); |
489 } | 459 } |
490 | 460 |
491 bool InspectorDOMDebuggerAgent::canPauseOnPromiseEvent() | 461 bool InspectorDOMDebuggerAgent::canPauseOnPromiseEvent() |
492 { | 462 { |
493 if (m_pauseInNextEventListener) | |
494 return true; | |
495 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebugger
AgentState::eventListenerBreakpoints); | 463 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebugger
AgentState::eventListenerBreakpoints); |
496 JSONObject::iterator end = eventListenerBreakpoints->end(); | 464 JSONObject::iterator end = eventListenerBreakpoints->end(); |
497 return eventListenerBreakpoints->find(String(instrumentationEventCategoryTyp
e) + newPromiseEventName) != end | 465 return eventListenerBreakpoints->find(String(instrumentationEventCategoryTyp
e) + newPromiseEventName) != end |
498 || eventListenerBreakpoints->find(String(instrumentationEventCategoryTyp
e) + promiseResolvedEventName) != end | 466 || eventListenerBreakpoints->find(String(instrumentationEventCategoryTyp
e) + promiseResolvedEventName) != end |
499 || eventListenerBreakpoints->find(String(instrumentationEventCategoryTyp
e) + promiseRejectedEventName) != end; | 467 || eventListenerBreakpoints->find(String(instrumentationEventCategoryTyp
e) + promiseRejectedEventName) != end; |
500 } | 468 } |
501 | 469 |
502 void InspectorDOMDebuggerAgent::didCreatePromise() | 470 void InspectorDOMDebuggerAgent::didCreatePromise() |
503 { | 471 { |
504 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(newPromiseEventName
, 0), true); | 472 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(newPromiseEventName
, 0), true); |
(...skipping 29 matching lines...) Expand all Loading... |
534 Node* node = target->toNode(); | 502 Node* node = target->toNode(); |
535 String targetName = node ? node->nodeName() : target->interfaceName(); | 503 String targetName = node ? node->nodeName() : target->interfaceName(); |
536 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(event->type(), &tar
getName), false); | 504 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(event->type(), &tar
getName), false); |
537 } | 505 } |
538 | 506 |
539 void InspectorDOMDebuggerAgent::willCloseWindow() | 507 void InspectorDOMDebuggerAgent::willCloseWindow() |
540 { | 508 { |
541 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(windowCloseEventNam
e, 0), true); | 509 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(windowCloseEventNam
e, 0), true); |
542 } | 510 } |
543 | 511 |
544 void InspectorDOMDebuggerAgent::willExecuteCustomElementCallback(Element*) | |
545 { | |
546 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(customElementCallba
ckName, 0), false); | |
547 } | |
548 | |
549 void InspectorDOMDebuggerAgent::didFireWebGLError(const String& errorName) | 512 void InspectorDOMDebuggerAgent::didFireWebGLError(const String& errorName) |
550 { | 513 { |
551 RefPtr<JSONObject> eventData = preparePauseOnNativeEventData(webglErrorFired
EventName, 0); | 514 RefPtr<JSONObject> eventData = preparePauseOnNativeEventData(webglErrorFired
EventName, 0); |
552 if (!eventData) | 515 if (!eventData) |
553 return; | 516 return; |
554 if (!errorName.isEmpty()) | 517 if (!errorName.isEmpty()) |
555 eventData->setString(webglErrorNameProperty, errorName); | 518 eventData->setString(webglErrorNameProperty, errorName); |
556 pauseOnNativeEventIfNeeded(eventData.release(), m_debuggerAgent->canBreakPro
gram()); | 519 pauseOnNativeEventIfNeeded(eventData.release(), m_debuggerAgent->canBreakPro
gram()); |
557 } | 520 } |
558 | 521 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
613 | 576 |
614 RefPtr<JSONObject> eventData = JSONObject::create(); | 577 RefPtr<JSONObject> eventData = JSONObject::create(); |
615 eventData->setString("breakpointURL", breakpointURL); | 578 eventData->setString("breakpointURL", breakpointURL); |
616 eventData->setString("url", url); | 579 eventData->setString("url", url); |
617 m_debuggerAgent->breakProgram(InspectorFrontend::Debugger::Reason::XHR, even
tData.release()); | 580 m_debuggerAgent->breakProgram(InspectorFrontend::Debugger::Reason::XHR, even
tData.release()); |
618 } | 581 } |
619 | 582 |
620 void InspectorDOMDebuggerAgent::clear() | 583 void InspectorDOMDebuggerAgent::clear() |
621 { | 584 { |
622 m_domBreakpoints.clear(); | 585 m_domBreakpoints.clear(); |
623 m_pauseInNextEventListener = false; | |
624 } | 586 } |
625 | 587 |
626 } // namespace blink | 588 } // namespace blink |
627 | |
OLD | NEW |