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 21 matching lines...) Expand all Loading... |
32 | 32 |
33 #include "bindings/core/v8/ScriptEventListener.h" | 33 #include "bindings/core/v8/ScriptEventListener.h" |
34 #include "bindings/core/v8/V8EventTarget.h" | 34 #include "bindings/core/v8/V8EventTarget.h" |
35 #include "core/dom/Element.h" | 35 #include "core/dom/Element.h" |
36 #include "core/dom/Node.h" | 36 #include "core/dom/Node.h" |
37 #include "core/events/Event.h" | 37 #include "core/events/Event.h" |
38 #include "core/events/EventTarget.h" | 38 #include "core/events/EventTarget.h" |
39 #include "core/frame/LocalDOMWindow.h" | 39 #include "core/frame/LocalDOMWindow.h" |
40 #include "core/inspector/InspectorDOMAgent.h" | 40 #include "core/inspector/InspectorDOMAgent.h" |
41 #include "core/inspector/InstrumentingAgents.h" | 41 #include "core/inspector/InstrumentingAgents.h" |
42 #include "platform/JSONValues.h" | 42 #include "platform/inspector_protocol/Values.h" |
43 #include "platform/v8_inspector/public/V8DebuggerAgent.h" | 43 #include "platform/v8_inspector/public/V8DebuggerAgent.h" |
44 #include "platform/v8_inspector/public/V8EventListenerInfo.h" | 44 #include "platform/v8_inspector/public/V8EventListenerInfo.h" |
45 #include "platform/v8_inspector/public/V8RuntimeAgent.h" | 45 #include "platform/v8_inspector/public/V8RuntimeAgent.h" |
46 | 46 |
47 namespace { | 47 namespace { |
48 | 48 |
49 enum DOMBreakpointType { | 49 enum DOMBreakpointType { |
50 SubtreeModified = 0, | 50 SubtreeModified = 0, |
51 AttributeModified, | 51 AttributeModified, |
52 NodeRemoved, | 52 NodeRemoved, |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 void InspectorDOMDebuggerAgent::setEventListenerBreakpoint(ErrorString* error, c
onst String& eventName, const Maybe<String>& targetName) | 172 void InspectorDOMDebuggerAgent::setEventListenerBreakpoint(ErrorString* error, c
onst String& eventName, const Maybe<String>& targetName) |
173 { | 173 { |
174 setBreakpoint(error, String(listenerEventCategoryType) + eventName, targetNa
me.fromMaybe(String())); | 174 setBreakpoint(error, String(listenerEventCategoryType) + eventName, targetNa
me.fromMaybe(String())); |
175 } | 175 } |
176 | 176 |
177 void InspectorDOMDebuggerAgent::setInstrumentationBreakpoint(ErrorString* error,
const String& eventName) | 177 void InspectorDOMDebuggerAgent::setInstrumentationBreakpoint(ErrorString* error,
const String& eventName) |
178 { | 178 { |
179 setBreakpoint(error, String(instrumentationEventCategoryType) + eventName, S
tring()); | 179 setBreakpoint(error, String(instrumentationEventCategoryType) + eventName, S
tring()); |
180 } | 180 } |
181 | 181 |
182 static PassRefPtr<JSONObject> ensurePropertyObject(PassRefPtr<JSONObject> object
, const String& propertyName) | 182 static PassRefPtr<protocol::DictionaryValue> ensurePropertyObject(PassRefPtr<pro
tocol::DictionaryValue> object, const String& propertyName) |
183 { | 183 { |
184 JSONObject::iterator it = object->find(propertyName); | 184 protocol::DictionaryValue::iterator it = object->find(propertyName); |
185 if (it != object->end()) | 185 if (it != object->end()) |
186 return JSONObject::cast(it->value); | 186 return protocol::DictionaryValue::cast(it->value); |
187 | 187 |
188 RefPtr<JSONObject> result = JSONObject::create(); | 188 RefPtr<protocol::DictionaryValue> result = protocol::DictionaryValue::create
(); |
189 object->setObject(propertyName, result); | 189 object->setObject(propertyName, result); |
190 return result.release(); | 190 return result.release(); |
191 } | 191 } |
192 | 192 |
193 PassRefPtr<JSONObject> InspectorDOMDebuggerAgent::eventListenerBreakpoints() | 193 PassRefPtr<protocol::DictionaryValue> InspectorDOMDebuggerAgent::eventListenerBr
eakpoints() |
194 { | 194 { |
195 RefPtr<JSONObject> breakpoints = m_state->getObject(DOMDebuggerAgentState::e
ventListenerBreakpoints); | 195 RefPtr<protocol::DictionaryValue> breakpoints = m_state->getObject(DOMDebugg
erAgentState::eventListenerBreakpoints); |
196 if (!breakpoints) { | 196 if (!breakpoints) { |
197 breakpoints = JSONObject::create(); | 197 breakpoints = protocol::DictionaryValue::create(); |
198 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, brea
kpoints); | 198 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, brea
kpoints); |
199 } | 199 } |
200 return breakpoints; | 200 return breakpoints; |
201 } | 201 } |
202 | 202 |
203 PassRefPtr<JSONObject> InspectorDOMDebuggerAgent::xhrBreakpoints() | 203 PassRefPtr<protocol::DictionaryValue> InspectorDOMDebuggerAgent::xhrBreakpoints(
) |
204 { | 204 { |
205 RefPtr<JSONObject> breakpoints = m_state->getObject(DOMDebuggerAgentState::x
hrBreakpoints); | 205 RefPtr<protocol::DictionaryValue> breakpoints = m_state->getObject(DOMDebugg
erAgentState::xhrBreakpoints); |
206 if (!breakpoints) { | 206 if (!breakpoints) { |
207 breakpoints = JSONObject::create(); | 207 breakpoints = protocol::DictionaryValue::create(); |
208 m_state->setObject(DOMDebuggerAgentState::xhrBreakpoints, breakpoints); | 208 m_state->setObject(DOMDebuggerAgentState::xhrBreakpoints, breakpoints); |
209 } | 209 } |
210 return breakpoints; | 210 return breakpoints; |
211 } | 211 } |
212 | 212 |
213 void InspectorDOMDebuggerAgent::setBreakpoint(ErrorString* error, const String&
eventName, const String& targetName) | 213 void InspectorDOMDebuggerAgent::setBreakpoint(ErrorString* error, const String&
eventName, const String& targetName) |
214 { | 214 { |
215 if (eventName.isEmpty()) { | 215 if (eventName.isEmpty()) { |
216 *error = "Event name is empty"; | 216 *error = "Event name is empty"; |
217 return; | 217 return; |
218 } | 218 } |
219 | 219 |
220 RefPtr<JSONObject> breakpointsByTarget = ensurePropertyObject(eventListenerB
reakpoints(), eventName); | 220 RefPtr<protocol::DictionaryValue> breakpointsByTarget = ensurePropertyObject
(eventListenerBreakpoints(), eventName); |
221 if (targetName.isEmpty()) | 221 if (targetName.isEmpty()) |
222 breakpointsByTarget->setBoolean(DOMDebuggerAgentState::eventTargetAny, t
rue); | 222 breakpointsByTarget->setBoolean(DOMDebuggerAgentState::eventTargetAny, t
rue); |
223 else | 223 else |
224 breakpointsByTarget->setBoolean(targetName.lower(), true); | 224 breakpointsByTarget->setBoolean(targetName.lower(), true); |
225 didAddBreakpoint(); | 225 didAddBreakpoint(); |
226 } | 226 } |
227 | 227 |
228 void InspectorDOMDebuggerAgent::removeEventListenerBreakpoint(ErrorString* error
, const String& eventName, const Maybe<String>& targetName) | 228 void InspectorDOMDebuggerAgent::removeEventListenerBreakpoint(ErrorString* error
, const String& eventName, const Maybe<String>& targetName) |
229 { | 229 { |
230 removeBreakpoint(error, String(listenerEventCategoryType) + eventName, targe
tName.fromMaybe(String())); | 230 removeBreakpoint(error, String(listenerEventCategoryType) + eventName, targe
tName.fromMaybe(String())); |
231 } | 231 } |
232 | 232 |
233 void InspectorDOMDebuggerAgent::removeInstrumentationBreakpoint(ErrorString* err
or, const String& eventName) | 233 void InspectorDOMDebuggerAgent::removeInstrumentationBreakpoint(ErrorString* err
or, const String& eventName) |
234 { | 234 { |
235 removeBreakpoint(error, String(instrumentationEventCategoryType) + eventName
, String()); | 235 removeBreakpoint(error, String(instrumentationEventCategoryType) + eventName
, String()); |
236 } | 236 } |
237 | 237 |
238 void InspectorDOMDebuggerAgent::removeBreakpoint(ErrorString* error, const Strin
g& eventName, const String& targetName) | 238 void InspectorDOMDebuggerAgent::removeBreakpoint(ErrorString* error, const Strin
g& eventName, const String& targetName) |
239 { | 239 { |
240 if (eventName.isEmpty()) { | 240 if (eventName.isEmpty()) { |
241 *error = "Event name is empty"; | 241 *error = "Event name is empty"; |
242 return; | 242 return; |
243 } | 243 } |
244 | 244 |
245 RefPtr<JSONObject> breakpointsByTarget = ensurePropertyObject(eventListenerB
reakpoints(), eventName); | 245 RefPtr<protocol::DictionaryValue> breakpointsByTarget = ensurePropertyObject
(eventListenerBreakpoints(), eventName); |
246 if (targetName.isEmpty()) | 246 if (targetName.isEmpty()) |
247 breakpointsByTarget->remove(DOMDebuggerAgentState::eventTargetAny); | 247 breakpointsByTarget->remove(DOMDebuggerAgentState::eventTargetAny); |
248 else | 248 else |
249 breakpointsByTarget->remove(targetName.lower()); | 249 breakpointsByTarget->remove(targetName.lower()); |
250 didRemoveBreakpoint(); | 250 didRemoveBreakpoint(); |
251 } | 251 } |
252 | 252 |
253 void InspectorDOMDebuggerAgent::didInvalidateStyleAttr(Node* node) | 253 void InspectorDOMDebuggerAgent::didInvalidateStyleAttr(Node* node) |
254 { | 254 { |
255 if (hasBreakpoint(node, AttributeModified)) { | 255 if (hasBreakpoint(node, AttributeModified)) { |
256 RefPtr<JSONObject> eventData = JSONObject::create(); | 256 RefPtr<protocol::DictionaryValue> eventData = protocol::DictionaryValue:
:create(); |
257 descriptionForDOMEvent(node, AttributeModified, false, eventData.get()); | 257 descriptionForDOMEvent(node, AttributeModified, false, eventData.get()); |
258 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::DO
M, eventData.release()); | 258 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::DO
M, eventData.release()); |
259 } | 259 } |
260 } | 260 } |
261 | 261 |
262 void InspectorDOMDebuggerAgent::didInsertDOMNode(Node* node) | 262 void InspectorDOMDebuggerAgent::didInsertDOMNode(Node* node) |
263 { | 263 { |
264 if (m_domBreakpoints.size()) { | 264 if (m_domBreakpoints.size()) { |
265 uint32_t mask = m_domBreakpoints.get(InspectorDOMAgent::innerParentNode(
node)); | 265 uint32_t mask = m_domBreakpoints.get(InspectorDOMAgent::innerParentNode(
node)); |
266 uint32_t inheritableTypesMask = (mask | (mask >> domBreakpointDerivedTyp
eShift)) & inheritableDOMBreakpointTypesMask; | 266 uint32_t inheritableTypesMask = (mask | (mask >> domBreakpointDerivedTyp
eShift)) & inheritableDOMBreakpointTypesMask; |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 if (!objectGroupId.isEmpty()) { | 416 if (!objectGroupId.isEmpty()) { |
417 value->setHandler(m_runtimeAgent->wrapObject(context, function, objectGr
oupId)); | 417 value->setHandler(m_runtimeAgent->wrapObject(context, function, objectGr
oupId)); |
418 value->setOriginalHandler(m_runtimeAgent->wrapObject(context, info.handl
er, objectGroupId)); | 418 value->setOriginalHandler(m_runtimeAgent->wrapObject(context, info.handl
er, objectGroupId)); |
419 } | 419 } |
420 return value.release(); | 420 return value.release(); |
421 } | 421 } |
422 | 422 |
423 void InspectorDOMDebuggerAgent::willInsertDOMNode(Node* parent) | 423 void InspectorDOMDebuggerAgent::willInsertDOMNode(Node* parent) |
424 { | 424 { |
425 if (hasBreakpoint(parent, SubtreeModified)) { | 425 if (hasBreakpoint(parent, SubtreeModified)) { |
426 RefPtr<JSONObject> eventData = JSONObject::create(); | 426 RefPtr<protocol::DictionaryValue> eventData = protocol::DictionaryValue:
:create(); |
427 descriptionForDOMEvent(parent, SubtreeModified, true, eventData.get()); | 427 descriptionForDOMEvent(parent, SubtreeModified, true, eventData.get()); |
428 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::DO
M, eventData.release()); | 428 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::DO
M, eventData.release()); |
429 } | 429 } |
430 } | 430 } |
431 | 431 |
432 void InspectorDOMDebuggerAgent::willRemoveDOMNode(Node* node) | 432 void InspectorDOMDebuggerAgent::willRemoveDOMNode(Node* node) |
433 { | 433 { |
434 Node* parentNode = InspectorDOMAgent::innerParentNode(node); | 434 Node* parentNode = InspectorDOMAgent::innerParentNode(node); |
435 if (hasBreakpoint(node, NodeRemoved)) { | 435 if (hasBreakpoint(node, NodeRemoved)) { |
436 RefPtr<JSONObject> eventData = JSONObject::create(); | 436 RefPtr<protocol::DictionaryValue> eventData = protocol::DictionaryValue:
:create(); |
437 descriptionForDOMEvent(node, NodeRemoved, false, eventData.get()); | 437 descriptionForDOMEvent(node, NodeRemoved, false, eventData.get()); |
438 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::DO
M, eventData.release()); | 438 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::DO
M, eventData.release()); |
439 } else if (parentNode && hasBreakpoint(parentNode, SubtreeModified)) { | 439 } else if (parentNode && hasBreakpoint(parentNode, SubtreeModified)) { |
440 RefPtr<JSONObject> eventData = JSONObject::create(); | 440 RefPtr<protocol::DictionaryValue> eventData = protocol::DictionaryValue:
:create(); |
441 descriptionForDOMEvent(node, SubtreeModified, false, eventData.get()); | 441 descriptionForDOMEvent(node, SubtreeModified, false, eventData.get()); |
442 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::DO
M, eventData.release()); | 442 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::DO
M, eventData.release()); |
443 } | 443 } |
444 didRemoveDOMNode(node); | 444 didRemoveDOMNode(node); |
445 } | 445 } |
446 | 446 |
447 void InspectorDOMDebuggerAgent::willModifyDOMAttr(Element* element, const Atomic
String&, const AtomicString&) | 447 void InspectorDOMDebuggerAgent::willModifyDOMAttr(Element* element, const Atomic
String&, const AtomicString&) |
448 { | 448 { |
449 if (hasBreakpoint(element, AttributeModified)) { | 449 if (hasBreakpoint(element, AttributeModified)) { |
450 RefPtr<JSONObject> eventData = JSONObject::create(); | 450 RefPtr<protocol::DictionaryValue> eventData = protocol::DictionaryValue:
:create(); |
451 descriptionForDOMEvent(element, AttributeModified, false, eventData.get(
)); | 451 descriptionForDOMEvent(element, AttributeModified, false, eventData.get(
)); |
452 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::DO
M, eventData.release()); | 452 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::DO
M, eventData.release()); |
453 } | 453 } |
454 } | 454 } |
455 | 455 |
456 void InspectorDOMDebuggerAgent::willSetInnerHTML() | 456 void InspectorDOMDebuggerAgent::willSetInnerHTML() |
457 { | 457 { |
458 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(setInnerHTMLEventNa
me, 0), true); | 458 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(setInnerHTMLEventNa
me, 0), true); |
459 } | 459 } |
460 | 460 |
461 void InspectorDOMDebuggerAgent::descriptionForDOMEvent(Node* target, int breakpo
intType, bool insertion, JSONObject* description) | 461 void InspectorDOMDebuggerAgent::descriptionForDOMEvent(Node* target, int breakpo
intType, bool insertion, protocol::DictionaryValue* description) |
462 { | 462 { |
463 ASSERT(hasBreakpoint(target, breakpointType)); | 463 ASSERT(hasBreakpoint(target, breakpointType)); |
464 | 464 |
465 Node* breakpointOwner = target; | 465 Node* breakpointOwner = target; |
466 if ((1 << breakpointType) & inheritableDOMBreakpointTypesMask) { | 466 if ((1 << breakpointType) & inheritableDOMBreakpointTypesMask) { |
467 // For inheritable breakpoint types, target node isn't always the same a
s the node that owns a breakpoint. | 467 // For inheritable breakpoint types, target node isn't always the same a
s the node that owns a breakpoint. |
468 // Target node may be unknown to frontend, so we need to push it first. | 468 // Target node may be unknown to frontend, so we need to push it first. |
469 OwnPtr<protocol::Runtime::RemoteObject> targetNodeObject = m_domAgent->r
esolveNode(target, V8DebuggerAgent::backtraceObjectGroup); | 469 OwnPtr<protocol::Runtime::RemoteObject> targetNodeObject = m_domAgent->r
esolveNode(target, V8DebuggerAgent::backtraceObjectGroup); |
470 description->setValue("targetNode", targetNodeObject->serialize()); | 470 description->setValue("targetNode", targetNodeObject->serialize()); |
471 | 471 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 m_domBreakpoints.remove(node); | 510 m_domBreakpoints.remove(node); |
511 | 511 |
512 uint32_t newRootMask = rootMask & ~newMask; | 512 uint32_t newRootMask = rootMask & ~newMask; |
513 if (!newRootMask) | 513 if (!newRootMask) |
514 return; | 514 return; |
515 | 515 |
516 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child =
InspectorDOMAgent::innerNextSibling(child)) | 516 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child =
InspectorDOMAgent::innerNextSibling(child)) |
517 updateSubtreeBreakpoints(child, newRootMask, set); | 517 updateSubtreeBreakpoints(child, newRootMask, set); |
518 } | 518 } |
519 | 519 |
520 void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(PassRefPtr<JSONObject
> eventData, bool synchronous) | 520 void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(PassRefPtr<protocol::
DictionaryValue> eventData, bool synchronous) |
521 { | 521 { |
522 if (!eventData) | 522 if (!eventData) |
523 return; | 523 return; |
524 if (!m_debuggerAgent->enabled()) | 524 if (!m_debuggerAgent->enabled()) |
525 return; | 525 return; |
526 if (synchronous) | 526 if (synchronous) |
527 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::Ev
entListener, eventData); | 527 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::Ev
entListener, eventData); |
528 else | 528 else |
529 m_debuggerAgent->schedulePauseOnNextStatement(protocol::Debugger::Paused
::ReasonEnum::EventListener, eventData); | 529 m_debuggerAgent->schedulePauseOnNextStatement(protocol::Debugger::Paused
::ReasonEnum::EventListener, eventData); |
530 } | 530 } |
531 | 531 |
532 PassRefPtr<JSONObject> InspectorDOMDebuggerAgent::preparePauseOnNativeEventData(
const String& eventName, const String* targetName) | 532 PassRefPtr<protocol::DictionaryValue> InspectorDOMDebuggerAgent::preparePauseOnN
ativeEventData(const String& eventName, const String* targetName) |
533 { | 533 { |
534 String fullEventName = (targetName ? listenerEventCategoryType : instrumenta
tionEventCategoryType) + eventName; | 534 String fullEventName = (targetName ? listenerEventCategoryType : instrumenta
tionEventCategoryType) + eventName; |
535 RefPtr<JSONObject> breakpoints = eventListenerBreakpoints(); | 535 RefPtr<protocol::DictionaryValue> breakpoints = eventListenerBreakpoints(); |
536 JSONObject::iterator it = breakpoints->find(fullEventName); | 536 protocol::DictionaryValue::iterator it = breakpoints->find(fullEventName); |
537 if (it == breakpoints->end()) | 537 if (it == breakpoints->end()) |
538 return nullptr; | 538 return nullptr; |
539 bool match = false; | 539 bool match = false; |
540 RefPtr<JSONObject> breakpointsByTarget = JSONObject::cast(it->value); | 540 RefPtr<protocol::DictionaryValue> breakpointsByTarget = protocol::Dictionary
Value::cast(it->value); |
541 breakpointsByTarget->getBoolean(DOMDebuggerAgentState::eventTargetAny, &matc
h); | 541 breakpointsByTarget->getBoolean(DOMDebuggerAgentState::eventTargetAny, &matc
h); |
542 if (!match && targetName) | 542 if (!match && targetName) |
543 breakpointsByTarget->getBoolean(targetName->lower(), &match); | 543 breakpointsByTarget->getBoolean(targetName->lower(), &match); |
544 if (!match) | 544 if (!match) |
545 return nullptr; | 545 return nullptr; |
546 | 546 |
547 RefPtr<JSONObject> eventData = JSONObject::create(); | 547 RefPtr<protocol::DictionaryValue> eventData = protocol::DictionaryValue::cre
ate(); |
548 eventData->setString("eventName", fullEventName); | 548 eventData->setString("eventName", fullEventName); |
549 if (targetName) | 549 if (targetName) |
550 eventData->setString("targetName", *targetName); | 550 eventData->setString("targetName", *targetName); |
551 return eventData.release(); | 551 return eventData.release(); |
552 } | 552 } |
553 | 553 |
554 void InspectorDOMDebuggerAgent::didInstallTimer(ExecutionContext*, int, int, boo
l) | 554 void InspectorDOMDebuggerAgent::didInstallTimer(ExecutionContext*, int, int, boo
l) |
555 { | 555 { |
556 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(setTimerEventName,
0), true); | 556 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(setTimerEventName,
0), true); |
557 } | 557 } |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
603 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(scriptFirstStatemen
tEventName, 0), false); | 603 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(scriptFirstStatemen
tEventName, 0), false); |
604 } | 604 } |
605 | 605 |
606 void InspectorDOMDebuggerAgent::willCloseWindow() | 606 void InspectorDOMDebuggerAgent::willCloseWindow() |
607 { | 607 { |
608 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(windowCloseEventNam
e, 0), true); | 608 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(windowCloseEventNam
e, 0), true); |
609 } | 609 } |
610 | 610 |
611 void InspectorDOMDebuggerAgent::didFireWebGLError(const String& errorName) | 611 void InspectorDOMDebuggerAgent::didFireWebGLError(const String& errorName) |
612 { | 612 { |
613 RefPtr<JSONObject> eventData = preparePauseOnNativeEventData(webglErrorFired
EventName, 0); | 613 RefPtr<protocol::DictionaryValue> eventData = preparePauseOnNativeEventData(
webglErrorFiredEventName, 0); |
614 if (!eventData) | 614 if (!eventData) |
615 return; | 615 return; |
616 if (!errorName.isEmpty()) | 616 if (!errorName.isEmpty()) |
617 eventData->setString(webglErrorNameProperty, errorName); | 617 eventData->setString(webglErrorNameProperty, errorName); |
618 pauseOnNativeEventIfNeeded(eventData.release(), m_debuggerAgent->canBreakPro
gram()); | 618 pauseOnNativeEventIfNeeded(eventData.release(), m_debuggerAgent->canBreakPro
gram()); |
619 } | 619 } |
620 | 620 |
621 void InspectorDOMDebuggerAgent::didFireWebGLWarning() | 621 void InspectorDOMDebuggerAgent::didFireWebGLWarning() |
622 { | 622 { |
623 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(webglWarningFiredEv
entName, 0), m_debuggerAgent->canBreakProgram()); | 623 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(webglWarningFiredEv
entName, 0), m_debuggerAgent->canBreakProgram()); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
661 break; | 661 break; |
662 } | 662 } |
663 } | 663 } |
664 } | 664 } |
665 | 665 |
666 if (breakpointURL.isNull()) | 666 if (breakpointURL.isNull()) |
667 return; | 667 return; |
668 if (!m_debuggerAgent->enabled()) | 668 if (!m_debuggerAgent->enabled()) |
669 return; | 669 return; |
670 | 670 |
671 RefPtr<JSONObject> eventData = JSONObject::create(); | 671 RefPtr<protocol::DictionaryValue> eventData = protocol::DictionaryValue::cre
ate(); |
672 eventData->setString("breakpointURL", breakpointURL); | 672 eventData->setString("breakpointURL", breakpointURL); |
673 eventData->setString("url", url); | 673 eventData->setString("url", url); |
674 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::XHR, e
ventData.release()); | 674 m_debuggerAgent->breakProgram(protocol::Debugger::Paused::ReasonEnum::XHR, e
ventData.release()); |
675 } | 675 } |
676 | 676 |
677 void InspectorDOMDebuggerAgent::didAddBreakpoint() | 677 void InspectorDOMDebuggerAgent::didAddBreakpoint() |
678 { | 678 { |
679 if (m_state->booleanProperty(DOMDebuggerAgentState::enabled, false)) | 679 if (m_state->booleanProperty(DOMDebuggerAgentState::enabled, false)) |
680 return; | 680 return; |
681 setEnabled(true); | 681 setEnabled(true); |
682 } | 682 } |
683 | 683 |
684 static bool isEmpty(PassRefPtr<JSONObject> object) | 684 static bool isEmpty(PassRefPtr<protocol::DictionaryValue> object) |
685 { | 685 { |
686 return object->begin() == object->end(); | 686 return object->begin() == object->end(); |
687 } | 687 } |
688 | 688 |
689 void InspectorDOMDebuggerAgent::didRemoveBreakpoint() | 689 void InspectorDOMDebuggerAgent::didRemoveBreakpoint() |
690 { | 690 { |
691 if (!m_domBreakpoints.isEmpty()) | 691 if (!m_domBreakpoints.isEmpty()) |
692 return; | 692 return; |
693 if (!isEmpty(eventListenerBreakpoints())) | 693 if (!isEmpty(eventListenerBreakpoints())) |
694 return; | 694 return; |
(...skipping 14 matching lines...) Expand all Loading... |
709 m_instrumentingAgents->setInspectorDOMDebuggerAgent(nullptr); | 709 m_instrumentingAgents->setInspectorDOMDebuggerAgent(nullptr); |
710 } | 710 } |
711 } | 711 } |
712 | 712 |
713 void InspectorDOMDebuggerAgent::didCommitLoadForLocalFrame(LocalFrame*) | 713 void InspectorDOMDebuggerAgent::didCommitLoadForLocalFrame(LocalFrame*) |
714 { | 714 { |
715 m_domBreakpoints.clear(); | 715 m_domBreakpoints.clear(); |
716 } | 716 } |
717 | 717 |
718 } // namespace blink | 718 } // namespace blink |
OLD | NEW |