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

Side by Side Diff: Source/core/inspector/InspectorDOMDebuggerAgent.cpp

Issue 322893006: Revert of DevTools: Expand protocol to allow setting DOM event breakpoints on a given event target. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: 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
« no previous file with comments | « Source/core/inspector/InspectorDOMDebuggerAgent.h ('k') | Source/devtools/protocol.json » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 static const char setTimerEventName[] = "setTimer"; 62 static const char setTimerEventName[] = "setTimer";
63 static const char clearTimerEventName[] = "clearTimer"; 63 static const char clearTimerEventName[] = "clearTimer";
64 static const char timerFiredEventName[] = "timerFired"; 64 static const char timerFiredEventName[] = "timerFired";
65 static const char customElementCallbackName[] = "customElementCallback"; 65 static const char customElementCallbackName[] = "customElementCallback";
66 static const char webglErrorFiredEventName[] = "webglErrorFired"; 66 static const char webglErrorFiredEventName[] = "webglErrorFired";
67 static const char webglWarningFiredEventName[] = "webglWarningFired"; 67 static const char webglWarningFiredEventName[] = "webglWarningFired";
68 static const char webglErrorNameProperty[] = "webglErrorName"; 68 static const char webglErrorNameProperty[] = "webglErrorName";
69 69
70 namespace DOMDebuggerAgentState { 70 namespace DOMDebuggerAgentState {
71 static const char eventListenerBreakpoints[] = "eventListenerBreakpoints"; 71 static const char eventListenerBreakpoints[] = "eventListenerBreakpoints";
72 static const char eventTargetAny[] = "*";
73 static const char pauseOnAllXHRs[] = "pauseOnAllXHRs"; 72 static const char pauseOnAllXHRs[] = "pauseOnAllXHRs";
74 static const char xhrBreakpoints[] = "xhrBreakpoints"; 73 static const char xhrBreakpoints[] = "xhrBreakpoints";
75 } 74 }
76 75
77 PassOwnPtr<InspectorDOMDebuggerAgent> InspectorDOMDebuggerAgent::create(Inspecto rDOMAgent* domAgent, InspectorDebuggerAgent* debuggerAgent) 76 PassOwnPtr<InspectorDOMDebuggerAgent> InspectorDOMDebuggerAgent::create(Inspecto rDOMAgent* domAgent, InspectorDebuggerAgent* debuggerAgent)
78 { 77 {
79 return adoptPtr(new InspectorDOMDebuggerAgent(domAgent, debuggerAgent)); 78 return adoptPtr(new InspectorDOMDebuggerAgent(domAgent, debuggerAgent));
80 } 79 }
81 80
82 InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(InspectorDOMAgent* domAgent , InspectorDebuggerAgent* debuggerAgent) 81 InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(InspectorDOMAgent* domAgent , InspectorDebuggerAgent* debuggerAgent)
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 { 146 {
148 disable(); 147 disable();
149 } 148 }
150 149
151 void InspectorDOMDebuggerAgent::discardAgent() 150 void InspectorDOMDebuggerAgent::discardAgent()
152 { 151 {
153 m_debuggerAgent->setListener(0); 152 m_debuggerAgent->setListener(0);
154 m_debuggerAgent = 0; 153 m_debuggerAgent = 0;
155 } 154 }
156 155
157 void InspectorDOMDebuggerAgent::setEventListenerBreakpoint(ErrorString* error, c onst String& eventName, const String* targetName) 156 void InspectorDOMDebuggerAgent::setEventListenerBreakpoint(ErrorString* error, c onst String& eventName)
158 { 157 {
159 setBreakpoint(error, String(listenerEventCategoryType) + eventName, targetNa me); 158 setBreakpoint(error, String(listenerEventCategoryType) + eventName);
160 } 159 }
161 160
162 void InspectorDOMDebuggerAgent::setInstrumentationBreakpoint(ErrorString* error, const String& eventName) 161 void InspectorDOMDebuggerAgent::setInstrumentationBreakpoint(ErrorString* error, const String& eventName)
163 { 162 {
164 setBreakpoint(error, String(instrumentationEventCategoryType) + eventName, 0 ); 163 setBreakpoint(error, String(instrumentationEventCategoryType) + eventName);
165 } 164 }
166 165
167 static PassRefPtr<JSONObject> ensurePropertyObject(JSONObject* object, const Str ing& propertyName) 166 void InspectorDOMDebuggerAgent::setBreakpoint(ErrorString* error, const String& eventName)
168 {
169 JSONObject::iterator it = object->find(propertyName);
170 if (it != object->end())
171 return it->value->asObject();
172
173 RefPtr<JSONObject> result = JSONObject::create();
174 object->setObject(propertyName, result);
175 return result.release();
176 }
177
178 void InspectorDOMDebuggerAgent::setBreakpoint(ErrorString* error, const String& eventName, const String* targetName)
179 { 167 {
180 if (eventName.isEmpty()) { 168 if (eventName.isEmpty()) {
181 *error = "Event name is empty"; 169 *error = "Event name is empty";
182 return; 170 return;
183 } 171 }
184 172
185 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebugger AgentState::eventListenerBreakpoints); 173 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebugger AgentState::eventListenerBreakpoints);
186 RefPtr<JSONObject> breakpointsByTarget = ensurePropertyObject(eventListenerB reakpoints.get(), eventName); 174 eventListenerBreakpoints->setBoolean(eventName, true);
187 if (!targetName || targetName->isEmpty()) 175 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, eventLis tenerBreakpoints);
188 breakpointsByTarget->setBoolean(DOMDebuggerAgentState::eventTargetAny, t rue);
189 else
190 breakpointsByTarget->setBoolean(targetName->lower(), true);
191 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, eventLis tenerBreakpoints.release());
192 } 176 }
193 177
194 void InspectorDOMDebuggerAgent::removeEventListenerBreakpoint(ErrorString* error , const String& eventName, const String* targetName) 178 void InspectorDOMDebuggerAgent::removeEventListenerBreakpoint(ErrorString* error , const String& eventName)
195 { 179 {
196 removeBreakpoint(error, String(listenerEventCategoryType) + eventName, targe tName); 180 removeBreakpoint(error, String(listenerEventCategoryType) + eventName);
197 } 181 }
198 182
199 void InspectorDOMDebuggerAgent::removeInstrumentationBreakpoint(ErrorString* err or, const String& eventName) 183 void InspectorDOMDebuggerAgent::removeInstrumentationBreakpoint(ErrorString* err or, const String& eventName)
200 { 184 {
201 removeBreakpoint(error, String(instrumentationEventCategoryType) + eventName , 0); 185 removeBreakpoint(error, String(instrumentationEventCategoryType) + eventName );
202 } 186 }
203 187
204 void InspectorDOMDebuggerAgent::removeBreakpoint(ErrorString* error, const Strin g& eventName, const String* targetName) 188 void InspectorDOMDebuggerAgent::removeBreakpoint(ErrorString* error, const Strin g& eventName)
205 { 189 {
206 if (eventName.isEmpty()) { 190 if (eventName.isEmpty()) {
207 *error = "Event name is empty"; 191 *error = "Event name is empty";
208 return; 192 return;
209 } 193 }
210 194
211 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebugger AgentState::eventListenerBreakpoints); 195 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebugger AgentState::eventListenerBreakpoints);
212 RefPtr<JSONObject> breakpointsByTarget = ensurePropertyObject(eventListenerB reakpoints.get(), eventName); 196 eventListenerBreakpoints->remove(eventName);
213 if (!targetName || targetName->isEmpty()) 197 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, eventLis tenerBreakpoints);
214 breakpointsByTarget->remove(DOMDebuggerAgentState::eventTargetAny);
215 else
216 breakpointsByTarget->remove(targetName->lower());
217 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, eventLis tenerBreakpoints.release());
218 } 198 }
219 199
220 void InspectorDOMDebuggerAgent::didInvalidateStyleAttr(Node* node) 200 void InspectorDOMDebuggerAgent::didInvalidateStyleAttr(Node* node)
221 { 201 {
222 if (hasBreakpoint(node, AttributeModified)) { 202 if (hasBreakpoint(node, AttributeModified)) {
223 RefPtr<JSONObject> eventData = JSONObject::create(); 203 RefPtr<JSONObject> eventData = JSONObject::create();
224 descriptionForDOMEvent(node, AttributeModified, false, eventData.get()); 204 descriptionForDOMEvent(node, AttributeModified, false, eventData.get());
225 m_debuggerAgent->breakProgram(InspectorFrontend::Debugger::Reason::DOM, eventData.release()); 205 m_debuggerAgent->breakProgram(InspectorFrontend::Debugger::Reason::DOM, eventData.release());
226 } 206 }
227 } 207 }
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(PassRefPtr<JSONObject > eventData, bool synchronous) 390 void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(PassRefPtr<JSONObject > eventData, bool synchronous)
411 { 391 {
412 if (!eventData) 392 if (!eventData)
413 return; 393 return;
414 if (synchronous) 394 if (synchronous)
415 m_debuggerAgent->breakProgram(InspectorFrontend::Debugger::Reason::Event Listener, eventData); 395 m_debuggerAgent->breakProgram(InspectorFrontend::Debugger::Reason::Event Listener, eventData);
416 else 396 else
417 m_debuggerAgent->schedulePauseOnNextStatement(InspectorFrontend::Debugge r::Reason::EventListener, eventData); 397 m_debuggerAgent->schedulePauseOnNextStatement(InspectorFrontend::Debugge r::Reason::EventListener, eventData);
418 } 398 }
419 399
420 PassRefPtr<JSONObject> InspectorDOMDebuggerAgent::preparePauseOnNativeEventData( const String& eventName, const AtomicString* targetName) 400 PassRefPtr<JSONObject> InspectorDOMDebuggerAgent::preparePauseOnNativeEventData( bool isDOMEvent, const String& eventName)
421 { 401 {
422 String fullEventName = (targetName ? listenerEventCategoryType : instrumenta tionEventCategoryType) + eventName; 402 String fullEventName = (isDOMEvent ? listenerEventCategoryType : instrumenta tionEventCategoryType) + eventName;
423 if (m_pauseInNextEventListener) { 403 if (m_pauseInNextEventListener)
424 m_pauseInNextEventListener = false; 404 m_pauseInNextEventListener = false;
425 } else { 405 else {
426 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebu ggerAgentState::eventListenerBreakpoints); 406 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebu ggerAgentState::eventListenerBreakpoints);
427 JSONObject::iterator it = eventListenerBreakpoints->find(fullEventName); 407 if (eventListenerBreakpoints->find(fullEventName) == eventListenerBreakp oints->end())
428 if (it == eventListenerBreakpoints->end())
429 return nullptr;
430 bool match = false;
431 RefPtr<JSONObject> breakpointsByTarget = it->value->asObject();
432 breakpointsByTarget->getBoolean(DOMDebuggerAgentState::eventTargetAny, & match);
433 if (!match && targetName)
434 breakpointsByTarget->getBoolean(targetName->lower(), &match);
435 if (!match)
436 return nullptr; 408 return nullptr;
437 } 409 }
438 410
439 RefPtr<JSONObject> eventData = JSONObject::create(); 411 RefPtr<JSONObject> eventData = JSONObject::create();
440 eventData->setString("eventName", fullEventName); 412 eventData->setString("eventName", fullEventName);
441 if (targetName)
442 eventData->setString("targetName", *targetName);
443 return eventData.release(); 413 return eventData.release();
444 } 414 }
445 415
446 void InspectorDOMDebuggerAgent::didInstallTimer(ExecutionContext*, int, int, boo l) 416 void InspectorDOMDebuggerAgent::didInstallTimer(ExecutionContext*, int, int, boo l)
447 { 417 {
448 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(setTimerEventName, 0), true); 418 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(false, setTimerEven tName), true);
449 } 419 }
450 420
451 void InspectorDOMDebuggerAgent::didRemoveTimer(ExecutionContext*, int) 421 void InspectorDOMDebuggerAgent::didRemoveTimer(ExecutionContext*, int)
452 { 422 {
453 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(clearTimerEventName , 0), true); 423 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(false, clearTimerEv entName), true);
454 } 424 }
455 425
456 void InspectorDOMDebuggerAgent::willFireTimer(ExecutionContext*, int) 426 void InspectorDOMDebuggerAgent::willFireTimer(ExecutionContext*, int)
457 { 427 {
458 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(timerFiredEventName , 0), false); 428 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(false, timerFiredEv entName), false);
459 } 429 }
460 430
461 void InspectorDOMDebuggerAgent::didRequestAnimationFrame(Document*, int) 431 void InspectorDOMDebuggerAgent::didRequestAnimationFrame(Document*, int)
462 { 432 {
463 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(requestAnimationFra meEventName, 0), true); 433 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(false, requestAnima tionFrameEventName), true);
464 } 434 }
465 435
466 void InspectorDOMDebuggerAgent::didCancelAnimationFrame(Document*, int) 436 void InspectorDOMDebuggerAgent::didCancelAnimationFrame(Document*, int)
467 { 437 {
468 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(cancelAnimationFram eEventName, 0), true); 438 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(false, cancelAnimat ionFrameEventName), true);
469 } 439 }
470 440
471 void InspectorDOMDebuggerAgent::willFireAnimationFrame(Document*, int) 441 void InspectorDOMDebuggerAgent::willFireAnimationFrame(Document*, int)
472 { 442 {
473 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(animationFrameFired EventName, 0), false); 443 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(false, animationFra meFiredEventName), false);
474 } 444 }
475 445
476 void InspectorDOMDebuggerAgent::willHandleEvent(EventTarget* target, const Atomi cString& eventType, EventListener*, bool) 446 void InspectorDOMDebuggerAgent::willHandleEvent(EventTarget*, const AtomicString & eventType, EventListener*, bool)
477 { 447 {
478 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(eventType, &target- >interfaceName()), false); 448 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(true, eventType), f alse);
479 } 449 }
480 450
481 void InspectorDOMDebuggerAgent::willExecuteCustomElementCallback(Element*) 451 void InspectorDOMDebuggerAgent::willExecuteCustomElementCallback(Element*)
482 { 452 {
483 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(customElementCallba ckName, 0), false); 453 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(false, customElemen tCallbackName), false);
484 } 454 }
485 455
486 void InspectorDOMDebuggerAgent::didFireWebGLError(const String& errorName) 456 void InspectorDOMDebuggerAgent::didFireWebGLError(const String& errorName)
487 { 457 {
488 RefPtr<JSONObject> eventData = preparePauseOnNativeEventData(webglErrorFired EventName, 0); 458 RefPtr<JSONObject> eventData = preparePauseOnNativeEventData(false, webglErr orFiredEventName);
489 if (!eventData) 459 if (!eventData)
490 return; 460 return;
491 if (!errorName.isEmpty()) 461 if (!errorName.isEmpty())
492 eventData->setString(webglErrorNameProperty, errorName); 462 eventData->setString(webglErrorNameProperty, errorName);
493 pauseOnNativeEventIfNeeded(eventData.release(), m_debuggerAgent->canBreakPro gram()); 463 pauseOnNativeEventIfNeeded(eventData.release(), m_debuggerAgent->canBreakPro gram());
494 } 464 }
495 465
496 void InspectorDOMDebuggerAgent::didFireWebGLWarning() 466 void InspectorDOMDebuggerAgent::didFireWebGLWarning()
497 { 467 {
498 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(webglWarningFiredEv entName, 0), m_debuggerAgent->canBreakProgram()); 468 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(false, webglWarning FiredEventName), m_debuggerAgent->canBreakProgram());
499 } 469 }
500 470
501 void InspectorDOMDebuggerAgent::didFireWebGLErrorOrWarning(const String& message ) 471 void InspectorDOMDebuggerAgent::didFireWebGLErrorOrWarning(const String& message )
502 { 472 {
503 if (message.findIgnoringCase("error") != WTF::kNotFound) 473 if (message.findIgnoringCase("error") != WTF::kNotFound)
504 didFireWebGLError(String()); 474 didFireWebGLError(String());
505 else 475 else
506 didFireWebGLWarning(); 476 didFireWebGLWarning();
507 } 477 }
508 478
509 void InspectorDOMDebuggerAgent::setXHRBreakpoint(ErrorString*, const String& url ) 479 void InspectorDOMDebuggerAgent::setXHRBreakpoint(ErrorString*, const String& url )
510 { 480 {
511 if (url.isEmpty()) { 481 if (url.isEmpty()) {
512 m_state->setBoolean(DOMDebuggerAgentState::pauseOnAllXHRs, true); 482 m_state->setBoolean(DOMDebuggerAgentState::pauseOnAllXHRs, true);
513 return; 483 return;
514 } 484 }
515 485
516 RefPtr<JSONObject> xhrBreakpoints = m_state->getObject(DOMDebuggerAgentState ::xhrBreakpoints); 486 RefPtr<JSONObject> xhrBreakpoints = m_state->getObject(DOMDebuggerAgentState ::xhrBreakpoints);
517 xhrBreakpoints->setBoolean(url, true); 487 xhrBreakpoints->setBoolean(url, true);
518 m_state->setObject(DOMDebuggerAgentState::xhrBreakpoints, xhrBreakpoints.rel ease()); 488 m_state->setObject(DOMDebuggerAgentState::xhrBreakpoints, xhrBreakpoints);
519 } 489 }
520 490
521 void InspectorDOMDebuggerAgent::removeXHRBreakpoint(ErrorString*, const String& url) 491 void InspectorDOMDebuggerAgent::removeXHRBreakpoint(ErrorString*, const String& url)
522 { 492 {
523 if (url.isEmpty()) { 493 if (url.isEmpty()) {
524 m_state->setBoolean(DOMDebuggerAgentState::pauseOnAllXHRs, false); 494 m_state->setBoolean(DOMDebuggerAgentState::pauseOnAllXHRs, false);
525 return; 495 return;
526 } 496 }
527 497
528 RefPtr<JSONObject> xhrBreakpoints = m_state->getObject(DOMDebuggerAgentState ::xhrBreakpoints); 498 RefPtr<JSONObject> xhrBreakpoints = m_state->getObject(DOMDebuggerAgentState ::xhrBreakpoints);
529 xhrBreakpoints->remove(url); 499 xhrBreakpoints->remove(url);
530 m_state->setObject(DOMDebuggerAgentState::xhrBreakpoints, xhrBreakpoints.rel ease()); 500 m_state->setObject(DOMDebuggerAgentState::xhrBreakpoints, xhrBreakpoints);
531 } 501 }
532 502
533 void InspectorDOMDebuggerAgent::willSendXMLHttpRequest(const String& url) 503 void InspectorDOMDebuggerAgent::willSendXMLHttpRequest(const String& url)
534 { 504 {
535 String breakpointURL; 505 String breakpointURL;
536 if (m_state->getBoolean(DOMDebuggerAgentState::pauseOnAllXHRs)) 506 if (m_state->getBoolean(DOMDebuggerAgentState::pauseOnAllXHRs))
537 breakpointURL = ""; 507 breakpointURL = "";
538 else { 508 else {
539 RefPtr<JSONObject> xhrBreakpoints = m_state->getObject(DOMDebuggerAgentS tate::xhrBreakpoints); 509 RefPtr<JSONObject> xhrBreakpoints = m_state->getObject(DOMDebuggerAgentS tate::xhrBreakpoints);
540 for (JSONObject::iterator it = xhrBreakpoints->begin(); it != xhrBreakpo ints->end(); ++it) { 510 for (JSONObject::iterator it = xhrBreakpoints->begin(); it != xhrBreakpo ints->end(); ++it) {
(...skipping 14 matching lines...) Expand all
555 } 525 }
556 526
557 void InspectorDOMDebuggerAgent::clear() 527 void InspectorDOMDebuggerAgent::clear()
558 { 528 {
559 m_domBreakpoints.clear(); 529 m_domBreakpoints.clear();
560 m_pauseInNextEventListener = false; 530 m_pauseInNextEventListener = false;
561 } 531 }
562 532
563 } // namespace WebCore 533 } // namespace WebCore
564 534
OLDNEW
« no previous file with comments | « Source/core/inspector/InspectorDOMDebuggerAgent.h ('k') | Source/devtools/protocol.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698