diff options
author | Ben Murdoch <benm@google.com> | 2011-05-16 16:25:10 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-05-23 18:54:14 +0100 |
commit | ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb (patch) | |
tree | db769fadd053248f85db67434a5b275224defef7 /Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp | |
parent | 52e2557aeb8477967e97fd24f20f8f407a10fa15 (diff) | |
download | external_webkit-ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb.zip external_webkit-ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb.tar.gz external_webkit-ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb.tar.bz2 |
Merge WebKit at r76408: Initial merge by git.
Change-Id: I5b91decbd693ccbf5c1b8354b37cd68cc9a1ea53
Diffstat (limited to 'Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp')
-rw-r--r-- | Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp | 117 |
1 files changed, 86 insertions, 31 deletions
diff --git a/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp index a33bacc..023dc49 100644 --- a/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp +++ b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp @@ -71,9 +71,71 @@ InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent() { } +void InspectorBrowserDebuggerAgent::inspectedURLChanged(const KURL& url) +{ + m_eventListenerBreakpoints.clear(); + m_XHRBreakpoints.clear(); + m_hasXHRBreakpointWithEmptyURL = false; + + RefPtr<InspectorObject> allBreakpoints = m_inspectorController->state()->getObject(InspectorState::browserBreakpoints); + KURL urlCopy = url; + urlCopy.removeFragmentIdentifier(); + RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(urlCopy); + if (!breakpoints) + return; + for (unsigned i = 0; i < breakpoints->length(); ++i) + restoreStickyBreakpoint(breakpoints->get(i)->asObject()); +} + +void InspectorBrowserDebuggerAgent::restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint) +{ + DEFINE_STATIC_LOCAL(String, eventListenerBreakpointType, ("EventListener")); + DEFINE_STATIC_LOCAL(String, javaScriptBreakpointType, ("JS")); + DEFINE_STATIC_LOCAL(String, xhrBreakpointType, ("XHR")); + + if (!breakpoint) + return; + String type; + if (!breakpoint->getString("type", &type)) + return; + bool enabled; + if (!breakpoint->getBoolean("enabled", &enabled)) + return; + RefPtr<InspectorObject> condition = breakpoint->getObject("condition"); + if (!condition) + return; + + if (type == eventListenerBreakpointType) { + if (!enabled) + return; + String eventName; + if (!condition->getString("eventName", &eventName)) + return; + setEventListenerBreakpoint(eventName); + } else if (type == javaScriptBreakpointType && m_inspectorController->debuggerAgent()) { + String url; + if (!condition->getString("url", &url)) + return; + double lineNumber; + if (!condition->getNumber("lineNumber", &lineNumber)) + return; + String javaScriptCondition; + if (!condition->getString("condition", &javaScriptCondition)) + return; + m_inspectorController->debuggerAgent()->setStickyBreakpoint(url, static_cast<unsigned>(lineNumber), javaScriptCondition, enabled); + } else if (type == xhrBreakpointType) { + if (!enabled) + return; + String url; + if (!condition->getString("url", &url)) + return; + setXHRBreakpoint(url); + } +} + void InspectorBrowserDebuggerAgent::discardBindings() { - m_breakpoints.clear(); + m_domBreakpoints.clear(); } void InspectorBrowserDebuggerAgent::setEventListenerBreakpoint(const String& eventName) @@ -88,8 +150,8 @@ void InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint(const String& void InspectorBrowserDebuggerAgent::didInsertDOMNode(Node* node) { - if (m_breakpoints.size()) { - uint32_t mask = m_breakpoints.get(InspectorDOMAgent::innerParentNode(node)); + if (m_domBreakpoints.size()) { + uint32_t mask = m_domBreakpoints.get(InspectorDOMAgent::innerParentNode(node)); uint32_t inheritableTypesMask = (mask | (mask >> domBreakpointDerivedTypeShift)) & inheritableDOMBreakpointTypesMask; if (inheritableTypesMask) updateSubtreeBreakpoints(node, inheritableTypesMask, true); @@ -98,16 +160,16 @@ void InspectorBrowserDebuggerAgent::didInsertDOMNode(Node* node) void InspectorBrowserDebuggerAgent::didRemoveDOMNode(Node* node) { - if (m_breakpoints.size()) { + if (m_domBreakpoints.size()) { // Remove subtree breakpoints. - m_breakpoints.remove(node); + m_domBreakpoints.remove(node); Vector<Node*> stack(1, InspectorDOMAgent::innerFirstChild(node)); do { Node* node = stack.last(); stack.removeLast(); if (!node) continue; - m_breakpoints.remove(node); + m_domBreakpoints.remove(node); stack.append(InspectorDOMAgent::innerFirstChild(node)); stack.append(InspectorDOMAgent::innerNextSibling(node)); } while (!stack.isEmpty()); @@ -116,12 +178,12 @@ void InspectorBrowserDebuggerAgent::didRemoveDOMNode(Node* node) void InspectorBrowserDebuggerAgent::setDOMBreakpoint(long nodeId, long type) { - Node* node = m_inspectorController->m_domAgent->nodeForId(nodeId); + Node* node = m_inspectorController->domAgent()->nodeForId(nodeId); if (!node) return; uint32_t rootBit = 1 << type; - m_breakpoints.set(node, m_breakpoints.get(node) | rootBit); + m_domBreakpoints.set(node, m_domBreakpoints.get(node) | rootBit); if (rootBit & inheritableDOMBreakpointTypesMask) { for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child)) updateSubtreeBreakpoints(child, rootBit, true); @@ -130,16 +192,16 @@ void InspectorBrowserDebuggerAgent::setDOMBreakpoint(long nodeId, long type) void InspectorBrowserDebuggerAgent::removeDOMBreakpoint(long nodeId, long type) { - Node* node = m_inspectorController->m_domAgent->nodeForId(nodeId); + Node* node = m_inspectorController->domAgent()->nodeForId(nodeId); if (!node) return; uint32_t rootBit = 1 << type; - uint32_t mask = m_breakpoints.get(node) & ~rootBit; + uint32_t mask = m_domBreakpoints.get(node) & ~rootBit; if (mask) - m_breakpoints.set(node, mask); + m_domBreakpoints.set(node, mask); else - m_breakpoints.remove(node); + m_domBreakpoints.remove(node); if ((rootBit & inheritableDOMBreakpointTypesMask) && !(mask & (rootBit << domBreakpointDerivedTypeShift))) { for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child)) @@ -149,7 +211,7 @@ void InspectorBrowserDebuggerAgent::removeDOMBreakpoint(long nodeId, long type) void InspectorBrowserDebuggerAgent::willInsertDOMNode(Node*, Node* parent) { - InspectorDebuggerAgent* debuggerAgent = m_inspectorController->m_debuggerAgent.get(); + InspectorDebuggerAgent* debuggerAgent = m_inspectorController->debuggerAgent(); if (!debuggerAgent) return; @@ -163,7 +225,7 @@ void InspectorBrowserDebuggerAgent::willInsertDOMNode(Node*, Node* parent) void InspectorBrowserDebuggerAgent::willRemoveDOMNode(Node* node) { - InspectorDebuggerAgent* debuggerAgent = m_inspectorController->m_debuggerAgent.get(); + InspectorDebuggerAgent* debuggerAgent = m_inspectorController->debuggerAgent(); if (!debuggerAgent) return; @@ -182,7 +244,7 @@ void InspectorBrowserDebuggerAgent::willRemoveDOMNode(Node* node) void InspectorBrowserDebuggerAgent::willModifyDOMAttr(Element* element) { - InspectorDebuggerAgent* debuggerAgent = m_inspectorController->m_debuggerAgent.get(); + InspectorDebuggerAgent* debuggerAgent = m_inspectorController->debuggerAgent(); if (!debuggerAgent) return; @@ -202,7 +264,7 @@ void InspectorBrowserDebuggerAgent::descriptionForDOMEvent(Node* target, long br if ((1 << breakpointType) & inheritableDOMBreakpointTypesMask) { // For inheritable breakpoint types, target node isn't always the same as the node that owns a breakpoint. // Target node may be unknown to frontend, so we need to push it first. - long targetNodeId = m_inspectorController->m_domAgent->pushNodePathToFrontend(target); + long targetNodeId = m_inspectorController->domAgent()->pushNodePathToFrontend(target); ASSERT(targetNodeId); description->setNumber("targetNodeId", targetNodeId); @@ -210,7 +272,7 @@ void InspectorBrowserDebuggerAgent::descriptionForDOMEvent(Node* target, long br if (!insertion) breakpointOwner = InspectorDOMAgent::innerParentNode(target); ASSERT(breakpointOwner); - while (!(m_breakpoints.get(breakpointOwner) & (1 << breakpointType))) { + while (!(m_domBreakpoints.get(breakpointOwner) & (1 << breakpointType))) { breakpointOwner = InspectorDOMAgent::innerParentNode(breakpointOwner); ASSERT(breakpointOwner); } @@ -219,7 +281,7 @@ void InspectorBrowserDebuggerAgent::descriptionForDOMEvent(Node* target, long br description->setBoolean("insertion", insertion); } - long breakpointOwnerNodeId = m_inspectorController->m_domAgent->pushNodePathToFrontend(breakpointOwner); + long breakpointOwnerNodeId = m_inspectorController->domAgent()->pushNodePathToFrontend(breakpointOwner); ASSERT(breakpointOwnerNodeId); description->setNumber("nodeId", breakpointOwnerNodeId); description->setNumber("type", breakpointType); @@ -229,18 +291,18 @@ bool InspectorBrowserDebuggerAgent::hasBreakpoint(Node* node, long type) { uint32_t rootBit = 1 << type; uint32_t derivedBit = rootBit << domBreakpointDerivedTypeShift; - return m_breakpoints.get(node) & (rootBit | derivedBit); + return m_domBreakpoints.get(node) & (rootBit | derivedBit); } void InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints(Node* node, uint32_t rootMask, bool set) { - uint32_t oldMask = m_breakpoints.get(node); + uint32_t oldMask = m_domBreakpoints.get(node); uint32_t derivedMask = rootMask << domBreakpointDerivedTypeShift; uint32_t newMask = set ? oldMask | derivedMask : oldMask & ~derivedMask; if (newMask) - m_breakpoints.set(node, newMask); + m_domBreakpoints.set(node, newMask); else - m_breakpoints.remove(node); + m_domBreakpoints.remove(node); uint32_t newRootMask = rootMask & ~newMask; if (!newRootMask) @@ -252,7 +314,7 @@ void InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints(Node* node, uint32_ void InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded(const String& categoryType, const String& eventName, bool synchronous) { - InspectorDebuggerAgent* debuggerAgent = m_inspectorController->m_debuggerAgent.get(); + InspectorDebuggerAgent* debuggerAgent = m_inspectorController->debuggerAgent(); if (!debuggerAgent) return; @@ -287,7 +349,7 @@ void InspectorBrowserDebuggerAgent::removeXHRBreakpoint(const String& url) void InspectorBrowserDebuggerAgent::willSendXMLHttpRequest(const String& url) { - InspectorDebuggerAgent* debuggerAgent = m_inspectorController->m_debuggerAgent.get(); + InspectorDebuggerAgent* debuggerAgent = m_inspectorController->debuggerAgent(); if (!debuggerAgent) return; @@ -313,13 +375,6 @@ void InspectorBrowserDebuggerAgent::willSendXMLHttpRequest(const String& url) debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release()); } -void InspectorBrowserDebuggerAgent::clearForPageNavigation() -{ - m_eventListenerBreakpoints.clear(); - m_XHRBreakpoints.clear(); - m_hasXHRBreakpointWithEmptyURL = false; -} - } // namespace WebCore #endif // ENABLE(INSPECTOR) && ENABLE(JAVASCRIPT_DEBUGGER) |