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