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 20 matching lines...) Expand all Loading... |
31 #include "config.h" | 31 #include "config.h" |
32 | 32 |
33 #include "InspectorDOMDebuggerAgent.h" | 33 #include "InspectorDOMDebuggerAgent.h" |
34 | 34 |
35 #if ENABLE(INSPECTOR) && ENABLE(JAVASCRIPT_DEBUGGER) | 35 #if ENABLE(INSPECTOR) && ENABLE(JAVASCRIPT_DEBUGGER) |
36 | 36 |
37 #include "HTMLElement.h" | 37 #include "HTMLElement.h" |
38 #include "InspectorAgent.h" | 38 #include "InspectorAgent.h" |
39 #include "InspectorDOMAgent.h" | 39 #include "InspectorDOMAgent.h" |
40 #include "InspectorDebuggerAgent.h" | 40 #include "InspectorDebuggerAgent.h" |
| 41 #include "InspectorInstrumentation.h" |
41 #include "InspectorState.h" | 42 #include "InspectorState.h" |
42 #include "InspectorValues.h" | 43 #include "InspectorValues.h" |
43 #include "InstrumentingAgents.h" | 44 #include "InstrumentingAgents.h" |
44 #include <wtf/text/WTFString.h> | 45 #include <wtf/text/WTFString.h> |
45 | 46 |
46 namespace { | 47 namespace { |
47 | 48 |
48 enum DOMBreakpointType { | 49 enum DOMBreakpointType { |
49 SubtreeModified = 0, | 50 SubtreeModified = 0, |
50 AttributeModified, | 51 AttributeModified, |
51 NodeRemoved, | 52 NodeRemoved, |
52 DOMBreakpointTypesCount | 53 DOMBreakpointTypesCount |
53 }; | 54 }; |
54 | 55 |
| 56 static const char* const listenerEventCategoryType = "listener:"; |
| 57 static const char* const instrumentationEventCategoryType = "instrumentation:"; |
| 58 |
55 static const char* const domNativeBreakpointType = "DOM"; | 59 static const char* const domNativeBreakpointType = "DOM"; |
56 static const char* const eventListenerNativeBreakpointType = "EventListener"; | 60 static const char* const eventListenerNativeBreakpointType = "EventListener"; |
57 static const char* const xhrNativeBreakpointType = "XHR"; | 61 static const char* const xhrNativeBreakpointType = "XHR"; |
58 | 62 |
59 const uint32_t inheritableDOMBreakpointTypesMask = (1 << SubtreeModified); | 63 const uint32_t inheritableDOMBreakpointTypesMask = (1 << SubtreeModified); |
60 const int domBreakpointDerivedTypeShift = 16; | 64 const int domBreakpointDerivedTypeShift = 16; |
61 | 65 |
62 } | 66 } |
63 | 67 |
64 namespace WebCore { | 68 namespace WebCore { |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 m_debuggerAgent = 0; | 121 m_debuggerAgent = 0; |
118 } | 122 } |
119 | 123 |
120 void InspectorDOMDebuggerAgent::discardBindings() | 124 void InspectorDOMDebuggerAgent::discardBindings() |
121 { | 125 { |
122 m_domBreakpoints.clear(); | 126 m_domBreakpoints.clear(); |
123 } | 127 } |
124 | 128 |
125 void InspectorDOMDebuggerAgent::setEventListenerBreakpoint(ErrorString* error, c
onst String& eventName) | 129 void InspectorDOMDebuggerAgent::setEventListenerBreakpoint(ErrorString* error, c
onst String& eventName) |
126 { | 130 { |
| 131 setBreakpoint(error, String(listenerEventCategoryType) + eventName); |
| 132 } |
| 133 |
| 134 void InspectorDOMDebuggerAgent::setInstrumentationBreakpoint(ErrorString* error,
const String& eventName) |
| 135 { |
| 136 setBreakpoint(error, String(instrumentationEventCategoryType) + eventName); |
| 137 } |
| 138 |
| 139 void InspectorDOMDebuggerAgent::setBreakpoint(ErrorString* error, const String&
eventName) |
| 140 { |
127 if (eventName.isEmpty()) { | 141 if (eventName.isEmpty()) { |
128 *error = "Event name is empty"; | 142 *error = "Event name is empty"; |
129 return; | 143 return; |
130 } | 144 } |
131 | 145 |
132 RefPtr<InspectorObject> eventListenerBreakpoints = m_state->getObject(DOMDeb
uggerAgentState::eventListenerBreakpoints); | 146 RefPtr<InspectorObject> eventListenerBreakpoints = m_state->getObject(DOMDeb
uggerAgentState::eventListenerBreakpoints); |
133 eventListenerBreakpoints->setBoolean(eventName, true); | 147 eventListenerBreakpoints->setBoolean(eventName, true); |
134 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, eventLis
tenerBreakpoints); | 148 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, eventLis
tenerBreakpoints); |
135 } | 149 } |
136 | 150 |
137 void InspectorDOMDebuggerAgent::removeEventListenerBreakpoint(ErrorString* error
, const String& eventName) | 151 void InspectorDOMDebuggerAgent::removeEventListenerBreakpoint(ErrorString* error
, const String& eventName) |
138 { | 152 { |
| 153 removeBreakpoint(error, String(listenerEventCategoryType) + eventName); |
| 154 } |
| 155 |
| 156 void InspectorDOMDebuggerAgent::removeInstrumentationBreakpoint(ErrorString* err
or, const String& eventName) |
| 157 { |
| 158 removeBreakpoint(error, String(instrumentationEventCategoryType) + eventName
); |
| 159 } |
| 160 |
| 161 void InspectorDOMDebuggerAgent::removeBreakpoint(ErrorString* error, const Strin
g& eventName) |
| 162 { |
139 if (eventName.isEmpty()) { | 163 if (eventName.isEmpty()) { |
140 *error = "Event name is empty"; | 164 *error = "Event name is empty"; |
141 return; | 165 return; |
142 } | 166 } |
143 | 167 |
144 RefPtr<InspectorObject> eventListenerBreakpoints = m_state->getObject(DOMDeb
uggerAgentState::eventListenerBreakpoints); | 168 RefPtr<InspectorObject> eventListenerBreakpoints = m_state->getObject(DOMDeb
uggerAgentState::eventListenerBreakpoints); |
145 eventListenerBreakpoints->remove(eventName); | 169 eventListenerBreakpoints->remove(eventName); |
146 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, eventLis
tenerBreakpoints); | 170 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, eventLis
tenerBreakpoints); |
147 } | 171 } |
148 | 172 |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 m_domBreakpoints.remove(node); | 350 m_domBreakpoints.remove(node); |
327 | 351 |
328 uint32_t newRootMask = rootMask & ~newMask; | 352 uint32_t newRootMask = rootMask & ~newMask; |
329 if (!newRootMask) | 353 if (!newRootMask) |
330 return; | 354 return; |
331 | 355 |
332 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child =
InspectorDOMAgent::innerNextSibling(child)) | 356 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child =
InspectorDOMAgent::innerNextSibling(child)) |
333 updateSubtreeBreakpoints(child, newRootMask, set); | 357 updateSubtreeBreakpoints(child, newRootMask, set); |
334 } | 358 } |
335 | 359 |
336 void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(const String& categor
yType, const String& eventName, bool synchronous) | 360 void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(bool isDOMEvent, cons
t String& eventName, bool synchronous) |
337 { | 361 { |
338 String fullEventName = categoryType + ':' + eventName; | 362 String fullEventName = (isDOMEvent ? listenerEventCategoryType : instrumenta
tionEventCategoryType) + eventName; |
339 RefPtr<InspectorObject> eventListenerBreakpoints = m_state->getObject(DOMDeb
uggerAgentState::eventListenerBreakpoints); | 363 RefPtr<InspectorObject> eventListenerBreakpoints = m_state->getObject(DOMDeb
uggerAgentState::eventListenerBreakpoints); |
340 if (eventListenerBreakpoints->find(fullEventName) == eventListenerBreakpoint
s->end()) | 364 if (eventListenerBreakpoints->find(fullEventName) == eventListenerBreakpoint
s->end()) |
341 return; | 365 return; |
342 | 366 |
343 RefPtr<InspectorObject> eventData = InspectorObject::create(); | 367 RefPtr<InspectorObject> eventData = InspectorObject::create(); |
344 eventData->setString("eventName", fullEventName); | 368 eventData->setString("eventName", fullEventName); |
345 if (synchronous) | 369 if (synchronous) |
346 m_debuggerAgent->breakProgram(eventListenerNativeBreakpointType, eventDa
ta.release()); | 370 m_debuggerAgent->breakProgram(eventListenerNativeBreakpointType, eventDa
ta.release()); |
347 else | 371 else |
348 m_debuggerAgent->schedulePauseOnNextStatement(eventListenerNativeBreakpo
intType, eventData.release()); | 372 m_debuggerAgent->schedulePauseOnNextStatement(eventListenerNativeBreakpo
intType, eventData.release()); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 } | 421 } |
398 | 422 |
399 void InspectorDOMDebuggerAgent::clear() | 423 void InspectorDOMDebuggerAgent::clear() |
400 { | 424 { |
401 m_domBreakpoints.clear(); | 425 m_domBreakpoints.clear(); |
402 } | 426 } |
403 | 427 |
404 } // namespace WebCore | 428 } // namespace WebCore |
405 | 429 |
406 #endif // ENABLE(INSPECTOR) && ENABLE(JAVASCRIPT_DEBUGGER) | 430 #endif // ENABLE(INSPECTOR) && ENABLE(JAVASCRIPT_DEBUGGER) |
OLD | NEW |