| 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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 { | 139 { |
| 140 if (m_domAgent->enabled() && m_debuggerAgent->enabled()) | 140 if (m_domAgent->enabled() && m_debuggerAgent->enabled()) |
| 141 m_instrumentingAgents->setInspectorDOMDebuggerAgent(this); | 141 m_instrumentingAgents->setInspectorDOMDebuggerAgent(this); |
| 142 } | 142 } |
| 143 | 143 |
| 144 void InspectorDOMDebuggerAgent::domAgentWasDisabled() | 144 void InspectorDOMDebuggerAgent::domAgentWasDisabled() |
| 145 { | 145 { |
| 146 disable(nullptr); | 146 disable(nullptr); |
| 147 } | 147 } |
| 148 | 148 |
| 149 bool InspectorDOMDebuggerAgent::checkEnabled(ErrorString* errorString) | |
| 150 { | |
| 151 if (!m_domAgent->enabled()) { | |
| 152 *errorString = "DOM domain required by DOMDebugger is not enabled"; | |
| 153 return false; | |
| 154 } | |
| 155 if (!m_debuggerAgent->enabled()) { | |
| 156 *errorString = "Debugger domain required by DOMDebugger is not enabled"; | |
| 157 return false; | |
| 158 } | |
| 159 return true; | |
| 160 } | |
| 161 | |
| 162 void InspectorDOMDebuggerAgent::disable(ErrorString*) | 149 void InspectorDOMDebuggerAgent::disable(ErrorString*) |
| 163 { | 150 { |
| 164 m_instrumentingAgents->setInspectorDOMDebuggerAgent(nullptr); | 151 m_instrumentingAgents->setInspectorDOMDebuggerAgent(nullptr); |
| 165 clear(); | 152 clear(); |
| 166 } | 153 } |
| 167 | 154 |
| 168 void InspectorDOMDebuggerAgent::discardAgent() | 155 void InspectorDOMDebuggerAgent::discardAgent() |
| 169 { | 156 { |
| 170 m_debuggerAgent->setListener(nullptr); | 157 m_debuggerAgent->setListener(nullptr); |
| 171 m_debuggerAgent = nullptr; | 158 m_debuggerAgent = nullptr; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 189 if (it != object->end()) | 176 if (it != object->end()) |
| 190 return it->value->asObject(); | 177 return it->value->asObject(); |
| 191 | 178 |
| 192 RefPtr<JSONObject> result = JSONObject::create(); | 179 RefPtr<JSONObject> result = JSONObject::create(); |
| 193 object->setObject(propertyName, result); | 180 object->setObject(propertyName, result); |
| 194 return result.release(); | 181 return result.release(); |
| 195 } | 182 } |
| 196 | 183 |
| 197 void InspectorDOMDebuggerAgent::setBreakpoint(ErrorString* error, const String&
eventName, const String* targetName) | 184 void InspectorDOMDebuggerAgent::setBreakpoint(ErrorString* error, const String&
eventName, const String* targetName) |
| 198 { | 185 { |
| 199 if (!checkEnabled(error)) | |
| 200 return; | |
| 201 if (eventName.isEmpty()) { | 186 if (eventName.isEmpty()) { |
| 202 *error = "Event name is empty"; | 187 *error = "Event name is empty"; |
| 203 return; | 188 return; |
| 204 } | 189 } |
| 205 | 190 |
| 191 // Backward compatibility. Some extensions expect that DOMDebuggerAgent is a
lways enabled. |
| 192 // See https://stackoverflow.com/questions/25764336/chrome-extension-domdebu
gger-api-does-not-work-anymore |
| 193 if (!m_domAgent->enabled()) |
| 194 m_domAgent->enable(error); |
| 195 |
| 196 if (error->length()) |
| 197 return; |
| 198 |
| 206 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebugger
AgentState::eventListenerBreakpoints); | 199 RefPtr<JSONObject> eventListenerBreakpoints = m_state->getObject(DOMDebugger
AgentState::eventListenerBreakpoints); |
| 207 RefPtr<JSONObject> breakpointsByTarget = ensurePropertyObject(eventListenerB
reakpoints.get(), eventName); | 200 RefPtr<JSONObject> breakpointsByTarget = ensurePropertyObject(eventListenerB
reakpoints.get(), eventName); |
| 208 if (!targetName || targetName->isEmpty()) | 201 if (!targetName || targetName->isEmpty()) |
| 209 breakpointsByTarget->setBoolean(DOMDebuggerAgentState::eventTargetAny, t
rue); | 202 breakpointsByTarget->setBoolean(DOMDebuggerAgentState::eventTargetAny, t
rue); |
| 210 else | 203 else |
| 211 breakpointsByTarget->setBoolean(targetName->lower(), true); | 204 breakpointsByTarget->setBoolean(targetName->lower(), true); |
| 212 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, eventLis
tenerBreakpoints.release()); | 205 m_state->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, eventLis
tenerBreakpoints.release()); |
| 213 } | 206 } |
| 214 | 207 |
| 215 void InspectorDOMDebuggerAgent::removeEventListenerBreakpoint(ErrorString* error
, const String& eventName, const String* targetName) | 208 void InspectorDOMDebuggerAgent::removeEventListenerBreakpoint(ErrorString* error
, const String& eventName, const String* targetName) |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 case SubtreeModified: return "subtree-modified"; | 286 case SubtreeModified: return "subtree-modified"; |
| 294 case AttributeModified: return "attribute-modified"; | 287 case AttributeModified: return "attribute-modified"; |
| 295 case NodeRemoved: return "node-removed"; | 288 case NodeRemoved: return "node-removed"; |
| 296 default: break; | 289 default: break; |
| 297 } | 290 } |
| 298 return ""; | 291 return ""; |
| 299 } | 292 } |
| 300 | 293 |
| 301 void InspectorDOMDebuggerAgent::setDOMBreakpoint(ErrorString* errorString, int n
odeId, const String& typeString) | 294 void InspectorDOMDebuggerAgent::setDOMBreakpoint(ErrorString* errorString, int n
odeId, const String& typeString) |
| 302 { | 295 { |
| 303 if (!checkEnabled(errorString)) | |
| 304 return; | |
| 305 Node* node = m_domAgent->assertNode(errorString, nodeId); | 296 Node* node = m_domAgent->assertNode(errorString, nodeId); |
| 306 if (!node) | 297 if (!node) |
| 307 return; | 298 return; |
| 308 | 299 |
| 309 int type = domTypeForName(errorString, typeString); | 300 int type = domTypeForName(errorString, typeString); |
| 310 if (type == -1) | 301 if (type == -1) |
| 311 return; | 302 return; |
| 312 | 303 |
| 313 uint32_t rootBit = 1 << type; | 304 uint32_t rootBit = 1 << type; |
| 314 m_domBreakpoints.set(node, m_domBreakpoints.get(node) | rootBit); | 305 m_domBreakpoints.set(node, m_domBreakpoints.get(node) | rootBit); |
| 315 if (rootBit & inheritableDOMBreakpointTypesMask) { | 306 if (rootBit & inheritableDOMBreakpointTypesMask) { |
| 316 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; chil
d = InspectorDOMAgent::innerNextSibling(child)) | 307 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; chil
d = InspectorDOMAgent::innerNextSibling(child)) |
| 317 updateSubtreeBreakpoints(child, rootBit, true); | 308 updateSubtreeBreakpoints(child, rootBit, true); |
| 318 } | 309 } |
| 319 } | 310 } |
| 320 | 311 |
| 321 void InspectorDOMDebuggerAgent::removeDOMBreakpoint(ErrorString* errorString, in
t nodeId, const String& typeString) | 312 void InspectorDOMDebuggerAgent::removeDOMBreakpoint(ErrorString* errorString, in
t nodeId, const String& typeString) |
| 322 { | 313 { |
| 323 if (!checkEnabled(errorString)) | |
| 324 return; | |
| 325 Node* node = m_domAgent->assertNode(errorString, nodeId); | 314 Node* node = m_domAgent->assertNode(errorString, nodeId); |
| 326 if (!node) | 315 if (!node) |
| 327 return; | 316 return; |
| 328 int type = domTypeForName(errorString, typeString); | 317 int type = domTypeForName(errorString, typeString); |
| 329 if (type == -1) | 318 if (type == -1) |
| 330 return; | 319 return; |
| 331 | 320 |
| 332 uint32_t rootBit = 1 << type; | 321 uint32_t rootBit = 1 << type; |
| 333 uint32_t mask = m_domBreakpoints.get(node) & ~rootBit; | 322 uint32_t mask = m_domBreakpoints.get(node) & ~rootBit; |
| 334 if (mask) | 323 if (mask) |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 } | 599 } |
| 611 | 600 |
| 612 void InspectorDOMDebuggerAgent::didFireWebGLErrorOrWarning(const String& message
) | 601 void InspectorDOMDebuggerAgent::didFireWebGLErrorOrWarning(const String& message
) |
| 613 { | 602 { |
| 614 if (message.findIgnoringCase("error") != WTF::kNotFound) | 603 if (message.findIgnoringCase("error") != WTF::kNotFound) |
| 615 didFireWebGLError(String()); | 604 didFireWebGLError(String()); |
| 616 else | 605 else |
| 617 didFireWebGLWarning(); | 606 didFireWebGLWarning(); |
| 618 } | 607 } |
| 619 | 608 |
| 620 void InspectorDOMDebuggerAgent::setXHRBreakpoint(ErrorString* errorString, const
String& url) | 609 void InspectorDOMDebuggerAgent::setXHRBreakpoint(ErrorString*, const String& url
) |
| 621 { | 610 { |
| 622 if (!checkEnabled(errorString)) | |
| 623 return; | |
| 624 if (url.isEmpty()) { | 611 if (url.isEmpty()) { |
| 625 m_state->setBoolean(DOMDebuggerAgentState::pauseOnAllXHRs, true); | 612 m_state->setBoolean(DOMDebuggerAgentState::pauseOnAllXHRs, true); |
| 626 return; | 613 return; |
| 627 } | 614 } |
| 628 | 615 |
| 629 RefPtr<JSONObject> xhrBreakpoints = m_state->getObject(DOMDebuggerAgentState
::xhrBreakpoints); | 616 RefPtr<JSONObject> xhrBreakpoints = m_state->getObject(DOMDebuggerAgentState
::xhrBreakpoints); |
| 630 xhrBreakpoints->setBoolean(url, true); | 617 xhrBreakpoints->setBoolean(url, true); |
| 631 m_state->setObject(DOMDebuggerAgentState::xhrBreakpoints, xhrBreakpoints.rel
ease()); | 618 m_state->setObject(DOMDebuggerAgentState::xhrBreakpoints, xhrBreakpoints.rel
ease()); |
| 632 } | 619 } |
| 633 | 620 |
| 634 void InspectorDOMDebuggerAgent::removeXHRBreakpoint(ErrorString* errorString, co
nst String& url) | 621 void InspectorDOMDebuggerAgent::removeXHRBreakpoint(ErrorString*, const String&
url) |
| 635 { | 622 { |
| 636 if (url.isEmpty()) { | 623 if (url.isEmpty()) { |
| 637 m_state->setBoolean(DOMDebuggerAgentState::pauseOnAllXHRs, false); | 624 m_state->setBoolean(DOMDebuggerAgentState::pauseOnAllXHRs, false); |
| 638 return; | 625 return; |
| 639 } | 626 } |
| 640 | 627 |
| 641 RefPtr<JSONObject> xhrBreakpoints = m_state->getObject(DOMDebuggerAgentState
::xhrBreakpoints); | 628 RefPtr<JSONObject> xhrBreakpoints = m_state->getObject(DOMDebuggerAgentState
::xhrBreakpoints); |
| 642 xhrBreakpoints->remove(url); | 629 xhrBreakpoints->remove(url); |
| 643 m_state->setObject(DOMDebuggerAgentState::xhrBreakpoints, xhrBreakpoints.rel
ease()); | 630 m_state->setObject(DOMDebuggerAgentState::xhrBreakpoints, xhrBreakpoints.rel
ease()); |
| 644 } | 631 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 666 eventData->setString("url", url); | 653 eventData->setString("url", url); |
| 667 m_debuggerAgent->breakProgram(InspectorFrontend::Debugger::Reason::XHR, even
tData.release()); | 654 m_debuggerAgent->breakProgram(InspectorFrontend::Debugger::Reason::XHR, even
tData.release()); |
| 668 } | 655 } |
| 669 | 656 |
| 670 void InspectorDOMDebuggerAgent::clear() | 657 void InspectorDOMDebuggerAgent::clear() |
| 671 { | 658 { |
| 672 m_domBreakpoints.clear(); | 659 m_domBreakpoints.clear(); |
| 673 } | 660 } |
| 674 | 661 |
| 675 } // namespace blink | 662 } // namespace blink |
| OLD | NEW |