summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-24 11:24:40 +0100
committerBen Murdoch <benm@google.com>2011-06-02 09:53:15 +0100
commit81bc750723a18f21cd17d1b173cd2a4dda9cea6e (patch)
tree7a9e5ed86ff429fd347a25153107221543909b19 /Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
parent94088a6d336c1dd80a1e734af51e96abcbb689a7 (diff)
downloadexternal_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.zip
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.gz
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.bz2
Merge WebKit at r80534: Intial merge by Git
Change-Id: Ia7a83357124c9e1cdb1debf55d9661ec0bd09a61
Diffstat (limited to 'Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp')
-rw-r--r--Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp102
1 files changed, 73 insertions, 29 deletions
diff --git a/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
index 5fe9937..0cba775 100644
--- a/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
+++ b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
@@ -35,10 +35,11 @@
#if ENABLE(INSPECTOR) && ENABLE(JAVASCRIPT_DEBUGGER)
#include "HTMLElement.h"
-#include "InspectorAgent.h"
#include "InspectorDOMAgent.h"
#include "InspectorDebuggerAgent.h"
#include "InspectorState.h"
+#include "InspectorValues.h"
+#include "InstrumentingAgents.h"
#include <wtf/text/CString.h>
namespace {
@@ -65,26 +66,61 @@ namespace BrowserDebuggerAgentState {
static const char browserBreakpoints[] = "browserBreakpoints";
}
-PassOwnPtr<InspectorBrowserDebuggerAgent> InspectorBrowserDebuggerAgent::create(InspectorAgent* inspectorAgent, bool eraseStickyBreakpoints)
+PassOwnPtr<InspectorBrowserDebuggerAgent> InspectorBrowserDebuggerAgent::create(InstrumentingAgents* instrumentingAgents, InspectorState* inspectorState, InspectorDOMAgent* domAgent, InspectorDebuggerAgent* debuggerAgent, InspectorAgent* inspectorAgent)
{
- return adoptPtr(new InspectorBrowserDebuggerAgent(inspectorAgent, eraseStickyBreakpoints));
+ return adoptPtr(new InspectorBrowserDebuggerAgent(instrumentingAgents, inspectorState, domAgent, debuggerAgent, inspectorAgent));
}
-InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent(InspectorAgent* inspectorAgent, bool eraseStickyBreakpoints)
- : m_inspectorAgent(inspectorAgent)
+InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent(InstrumentingAgents* instrumentingAgents, InspectorState* inspectorState, InspectorDOMAgent* domAgent, InspectorDebuggerAgent* debuggerAgent, InspectorAgent* inspectorAgent)
+ : m_instrumentingAgents(instrumentingAgents)
+ , m_inspectorState(inspectorState)
+ , m_domAgent(domAgent)
+ , m_debuggerAgent(debuggerAgent)
+ , m_inspectorAgent(inspectorAgent)
, m_hasXHRBreakpointWithEmptyURL(false)
{
- if (eraseStickyBreakpoints)
- inspectorAgent->state()->setObject(BrowserDebuggerAgentState::browserBreakpoints, InspectorObject::create());
+ m_debuggerAgent->setListener(this);
}
InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent()
{
+ m_debuggerAgent->setListener(0);
+ ASSERT(!m_instrumentingAgents->inspectorBrowserDebuggerAgent());
}
-void InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints(PassRefPtr<InspectorObject> breakpoints)
+// Browser debugger agent enabled only when JS debugger is enabled.
+void InspectorBrowserDebuggerAgent::debuggerWasEnabled()
{
- m_inspectorAgent->state()->setObject(BrowserDebuggerAgentState::browserBreakpoints, breakpoints);
+ m_instrumentingAgents->setInspectorBrowserDebuggerAgent(this);
+}
+
+void InspectorBrowserDebuggerAgent::debuggerWasDisabled()
+{
+ disable();
+}
+
+void InspectorBrowserDebuggerAgent::disable()
+{
+ m_instrumentingAgents->setInspectorBrowserDebuggerAgent(0);
+ clear();
+}
+
+void InspectorBrowserDebuggerAgent::setFrontend(InspectorFrontend*)
+{
+ // Erase sticky breakpoints. If we are restoring from a cookie setFrontend msut be called
+ // before the state is loaded from the cookie.
+ m_inspectorState->setObject(BrowserDebuggerAgentState::browserBreakpoints, InspectorObject::create());
+}
+
+void InspectorBrowserDebuggerAgent::clearFrontend()
+{
+ disable();
+}
+
+void InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints(ErrorString*, PassRefPtr<InspectorObject> breakpoints)
+{
+ m_inspectorState->setObject(BrowserDebuggerAgentState::browserBreakpoints, breakpoints);
+ // FIXME: remove this call to inspector agent and dependency on the inspector agent.
inspectedURLChanged(m_inspectorAgent->inspectedURLWithoutFragment());
}
@@ -94,7 +130,7 @@ void InspectorBrowserDebuggerAgent::inspectedURLChanged(const String& url)
m_XHRBreakpoints.clear();
m_hasXHRBreakpointWithEmptyURL = false;
- RefPtr<InspectorObject> allBreakpoints = m_inspectorAgent->state()->getObject(BrowserDebuggerAgentState::browserBreakpoints);
+ RefPtr<InspectorObject> allBreakpoints = m_inspectorState->getObject(BrowserDebuggerAgentState::browserBreakpoints);
RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(url);
if (!breakpoints)
return;
@@ -116,20 +152,21 @@ void InspectorBrowserDebuggerAgent::restoreStickyBreakpoint(PassRefPtr<Inspector
if (!condition)
return;
+ ErrorString error;
if (type == eventListenerNativeBreakpointType) {
if (!enabled)
return;
String eventName;
if (!condition->getString("eventName", &eventName))
return;
- setEventListenerBreakpoint(eventName);
+ setEventListenerBreakpoint(&error, eventName);
} else if (type == xhrNativeBreakpointType) {
if (!enabled)
return;
String url;
if (!condition->getString("url", &url))
return;
- setXHRBreakpoint(url);
+ setXHRBreakpoint(&error, url);
}
}
@@ -138,12 +175,12 @@ void InspectorBrowserDebuggerAgent::discardBindings()
m_domBreakpoints.clear();
}
-void InspectorBrowserDebuggerAgent::setEventListenerBreakpoint(const String& eventName)
+void InspectorBrowserDebuggerAgent::setEventListenerBreakpoint(ErrorString*, const String& eventName)
{
m_eventListenerBreakpoints.add(eventName);
}
-void InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint(const String& eventName)
+void InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint(ErrorString*, const String& eventName)
{
m_eventListenerBreakpoints.remove(eventName);
}
@@ -176,9 +213,9 @@ void InspectorBrowserDebuggerAgent::didRemoveDOMNode(Node* node)
}
}
-void InspectorBrowserDebuggerAgent::setDOMBreakpoint(long nodeId, long type)
+void InspectorBrowserDebuggerAgent::setDOMBreakpoint(ErrorString*, long nodeId, long type)
{
- Node* node = m_inspectorAgent->domAgent()->nodeForId(nodeId);
+ Node* node = m_domAgent->nodeForId(nodeId);
if (!node)
return;
@@ -190,9 +227,9 @@ void InspectorBrowserDebuggerAgent::setDOMBreakpoint(long nodeId, long type)
}
}
-void InspectorBrowserDebuggerAgent::removeDOMBreakpoint(long nodeId, long type)
+void InspectorBrowserDebuggerAgent::removeDOMBreakpoint(ErrorString*, long nodeId, long type)
{
- Node* node = m_inspectorAgent->domAgent()->nodeForId(nodeId);
+ Node* node = m_domAgent->nodeForId(nodeId);
if (!node)
return;
@@ -211,7 +248,7 @@ void InspectorBrowserDebuggerAgent::removeDOMBreakpoint(long nodeId, long type)
void InspectorBrowserDebuggerAgent::willInsertDOMNode(Node*, Node* parent)
{
- InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent();
+ InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
if (!debuggerAgent)
return;
@@ -225,7 +262,7 @@ void InspectorBrowserDebuggerAgent::willInsertDOMNode(Node*, Node* parent)
void InspectorBrowserDebuggerAgent::willRemoveDOMNode(Node* node)
{
- InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent();
+ InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
if (!debuggerAgent)
return;
@@ -244,7 +281,7 @@ void InspectorBrowserDebuggerAgent::willRemoveDOMNode(Node* node)
void InspectorBrowserDebuggerAgent::willModifyDOMAttr(Element* element)
{
- InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent();
+ InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
if (!debuggerAgent)
return;
@@ -264,9 +301,8 @@ 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_inspectorAgent->domAgent()->pushNodePathToFrontend(target);
- ASSERT(targetNodeId);
- description->setNumber("targetNodeId", targetNodeId);
+ RefPtr<InspectorObject> targetNodeObject = m_domAgent->resolveNode(target, "");
+ description->setObject("targetNode", targetNodeObject);
// Find breakpoint owner node.
if (!insertion)
@@ -281,7 +317,7 @@ void InspectorBrowserDebuggerAgent::descriptionForDOMEvent(Node* target, long br
description->setBoolean("insertion", insertion);
}
- long breakpointOwnerNodeId = m_inspectorAgent->domAgent()->pushNodePathToFrontend(breakpointOwner);
+ long breakpointOwnerNodeId = m_domAgent->boundNodeId(breakpointOwner);
ASSERT(breakpointOwnerNodeId);
description->setNumber("nodeId", breakpointOwnerNodeId);
description->setNumber("type", breakpointType);
@@ -314,7 +350,7 @@ void InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints(Node* node, uint32_
void InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded(const String& categoryType, const String& eventName, bool synchronous)
{
- InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent();
+ InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
if (!debuggerAgent)
return;
@@ -331,7 +367,7 @@ void InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded(const String& cat
debuggerAgent->schedulePauseOnNextStatement(NativeBreakpointDebuggerEventType, eventData.release());
}
-void InspectorBrowserDebuggerAgent::setXHRBreakpoint(const String& url)
+void InspectorBrowserDebuggerAgent::setXHRBreakpoint(ErrorString*, const String& url)
{
if (url.isEmpty())
m_hasXHRBreakpointWithEmptyURL = true;
@@ -339,7 +375,7 @@ void InspectorBrowserDebuggerAgent::setXHRBreakpoint(const String& url)
m_XHRBreakpoints.add(url);
}
-void InspectorBrowserDebuggerAgent::removeXHRBreakpoint(const String& url)
+void InspectorBrowserDebuggerAgent::removeXHRBreakpoint(ErrorString*, const String& url)
{
if (url.isEmpty())
m_hasXHRBreakpointWithEmptyURL = false;
@@ -349,7 +385,7 @@ void InspectorBrowserDebuggerAgent::removeXHRBreakpoint(const String& url)
void InspectorBrowserDebuggerAgent::willSendXMLHttpRequest(const String& url)
{
- InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent();
+ InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
if (!debuggerAgent)
return;
@@ -375,6 +411,14 @@ void InspectorBrowserDebuggerAgent::willSendXMLHttpRequest(const String& url)
debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
}
+void InspectorBrowserDebuggerAgent::clear()
+{
+ m_domBreakpoints.clear();
+ m_eventListenerBreakpoints.clear();
+ m_XHRBreakpoints.clear();
+ m_hasXHRBreakpointWithEmptyURL = false;
+}
+
} // namespace WebCore
#endif // ENABLE(INSPECTOR) && ENABLE(JAVASCRIPT_DEBUGGER)