Chromium Code Reviews| 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()) | |
|
yurys
2014/11/18 12:35:25
Now we can remove runningNestedMessageLoop from th
| |
| 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 |