[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
commit-queue at webkit.org
commit-queue at webkit.org
Wed Dec 22 12:58:48 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit c990326cb011fe6a4aad1755f7fdcb4f4b17f2c7
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Sep 3 14:01:33 2010 +0000
2010-09-03 Pavel Podivilov <podivilov at chromium.org>
Reviewed by Yury Semikhatsky.
Web Inspector: provide more information to front-end when breaking on DOM event
https://bugs.webkit.org/show_bug.cgi?id=44679
* http/tests/inspector/debugger-test2.js:
(initialize_DebuggerTest.InspectorTest._pausedScript):
2010-09-03 Pavel Podivilov <podivilov at chromium.org>
Reviewed by Yury Semikhatsky.
Web Inspector: provide more information to front-end when breaking on DOM event
https://bugs.webkit.org/show_bug.cgi?id=44679
* dom/ContainerNode.cpp:
(WebCore::ContainerNode::insertBefore):
(WebCore::ContainerNode::parserInsertBefore):
(WebCore::ContainerNode::replaceChild):
(WebCore::ContainerNode::appendChild):
(WebCore::ContainerNode::parserAddChild):
(WebCore::notifyChildInserted):
(WebCore::dispatchChildRemovalEvents):
* dom/Element.cpp:
(WebCore::Element::setAttribute):
(WebCore::Element::removeAttribute):
* inspector/Inspector.idl:
* inspector/InspectorController.cpp:
(WebCore::InspectorController::willInsertDOMNodeImpl):
(WebCore::InspectorController::didInsertDOMNodeImpl):
(WebCore::InspectorController::willRemoveDOMNodeImpl):
(WebCore::InspectorController::didRemoveDOMNodeImpl):
(WebCore::InspectorController::willModifyDOMAttrImpl):
(WebCore::InspectorController::didModifyDOMAttrImpl):
* inspector/InspectorController.h:
(WebCore::InspectorController::willInsertDOMNode):
(WebCore::InspectorController::didInsertDOMNode):
(WebCore::InspectorController::willRemoveDOMNode):
(WebCore::InspectorController::willModifyDOMAttr):
(WebCore::InspectorController::didModifyDOMAttr):
(WebCore::InspectorController::inspectorControllerForNode):
* inspector/InspectorDOMAgent.cpp:
(WebCore::InspectorDOMAgent::~InspectorDOMAgent):
(WebCore::InspectorDOMAgent::shouldBreakOnNodeInsertion):
(WebCore::InspectorDOMAgent::shouldBreakOnNodeRemoval):
(WebCore::InspectorDOMAgent::shouldBreakOnAttributeModification):
(WebCore::InspectorDOMAgent::didInsertDOMNode):
(WebCore::InspectorDOMAgent::didRemoveDOMNode):
(WebCore::InspectorDOMAgent::didModifyDOMAttr):
(WebCore::InspectorDOMAgent::createBreakpoint):
* inspector/InspectorDOMAgent.h:
* inspector/InspectorDebuggerAgent.cpp:
(WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
(WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
(WebCore::InspectorDebuggerAgent::didPause):
(WebCore::InspectorDebuggerAgent::breakProgram):
* inspector/InspectorDebuggerAgent.h:
* inspector/InspectorValues.h:
(WebCore::InspectorValue::isNull):
* inspector/front-end/BreakpointsSidebarPane.js:
(WebInspector.BreakpointItem):
(WebInspector.BreakpointItem.prototype._enableChanged):
* inspector/front-end/Script.js:
(WebInspector.Script.prototype.get linesCount):
* inspector/front-end/inspector.js:
(WebInspector.pausedScript):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@66730 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 47a7f77..886cf7c 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,13 @@
+2010-09-03 Pavel Podivilov <podivilov at chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: provide more information to front-end when breaking on DOM event
+ https://bugs.webkit.org/show_bug.cgi?id=44679
+
+ * http/tests/inspector/debugger-test2.js:
+ (initialize_DebuggerTest.InspectorTest._pausedScript):
+
2010-09-03 Jeremy Orlow <jorlow at chromium.org>
Reviewed by Steve Block.
diff --git a/LayoutTests/http/tests/inspector/debugger-test2.js b/LayoutTests/http/tests/inspector/debugger-test2.js
index 80b98a6..6c19ff9 100644
--- a/LayoutTests/http/tests/inspector/debugger-test2.js
+++ b/LayoutTests/http/tests/inspector/debugger-test2.js
@@ -89,10 +89,10 @@ InspectorTest.captureStackTrace = function(callFrames)
}
};
-InspectorTest._pausedScript = function(callFrames)
+InspectorTest._pausedScript = function(details)
{
InspectorTest.addResult("Script execution paused.");
- InspectorTest._callFrames = callFrames;
+ InspectorTest._callFrames = details.callFrames;
if (InspectorTest._waitUntilPausedCallback) {
var callback = InspectorTest._waitUntilPausedCallback;
delete InspectorTest._waitUntilPausedCallback;
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 7bf67b9..9e6ea89 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,62 @@
+2010-09-03 Pavel Podivilov <podivilov at chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: provide more information to front-end when breaking on DOM event
+ https://bugs.webkit.org/show_bug.cgi?id=44679
+
+ * dom/ContainerNode.cpp:
+ (WebCore::ContainerNode::insertBefore):
+ (WebCore::ContainerNode::parserInsertBefore):
+ (WebCore::ContainerNode::replaceChild):
+ (WebCore::ContainerNode::appendChild):
+ (WebCore::ContainerNode::parserAddChild):
+ (WebCore::notifyChildInserted):
+ (WebCore::dispatchChildRemovalEvents):
+ * dom/Element.cpp:
+ (WebCore::Element::setAttribute):
+ (WebCore::Element::removeAttribute):
+ * inspector/Inspector.idl:
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::willInsertDOMNodeImpl):
+ (WebCore::InspectorController::didInsertDOMNodeImpl):
+ (WebCore::InspectorController::willRemoveDOMNodeImpl):
+ (WebCore::InspectorController::didRemoveDOMNodeImpl):
+ (WebCore::InspectorController::willModifyDOMAttrImpl):
+ (WebCore::InspectorController::didModifyDOMAttrImpl):
+ * inspector/InspectorController.h:
+ (WebCore::InspectorController::willInsertDOMNode):
+ (WebCore::InspectorController::didInsertDOMNode):
+ (WebCore::InspectorController::willRemoveDOMNode):
+ (WebCore::InspectorController::willModifyDOMAttr):
+ (WebCore::InspectorController::didModifyDOMAttr):
+ (WebCore::InspectorController::inspectorControllerForNode):
+ * inspector/InspectorDOMAgent.cpp:
+ (WebCore::InspectorDOMAgent::~InspectorDOMAgent):
+ (WebCore::InspectorDOMAgent::shouldBreakOnNodeInsertion):
+ (WebCore::InspectorDOMAgent::shouldBreakOnNodeRemoval):
+ (WebCore::InspectorDOMAgent::shouldBreakOnAttributeModification):
+ (WebCore::InspectorDOMAgent::didInsertDOMNode):
+ (WebCore::InspectorDOMAgent::didRemoveDOMNode):
+ (WebCore::InspectorDOMAgent::didModifyDOMAttr):
+ (WebCore::InspectorDOMAgent::createBreakpoint):
+ * inspector/InspectorDOMAgent.h:
+ * inspector/InspectorDebuggerAgent.cpp:
+ (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
+ (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
+ (WebCore::InspectorDebuggerAgent::didPause):
+ (WebCore::InspectorDebuggerAgent::breakProgram):
+ * inspector/InspectorDebuggerAgent.h:
+ * inspector/InspectorValues.h:
+ (WebCore::InspectorValue::isNull):
+ * inspector/front-end/BreakpointsSidebarPane.js:
+ (WebInspector.BreakpointItem):
+ (WebInspector.BreakpointItem.prototype._enableChanged):
+ * inspector/front-end/Script.js:
+ (WebInspector.Script.prototype.get linesCount):
+ * inspector/front-end/inspector.js:
+ (WebInspector.pausedScript):
+
2010-08-31 Jeremy Orlow <jorlow at chromium.org>
Reviewed by Steve Block.
diff --git a/WebCore/dom/ContainerNode.cpp b/WebCore/dom/ContainerNode.cpp
index 064d4e5..46de749 100644
--- a/WebCore/dom/ContainerNode.cpp
+++ b/WebCore/dom/ContainerNode.cpp
@@ -151,6 +151,8 @@ bool ContainerNode::insertBefore(PassRefPtr<Node> newChild, Node* refChild, Exce
if (child->parentNode())
break;
+ InspectorController::willInsertDOMNode(child, this);
+
insertBeforeCommon(next.get(), child);
// Send notification about the children change.
@@ -218,6 +220,8 @@ void ContainerNode::parserInsertBefore(PassRefPtr<Node> newChild, Node* nextChil
for (NodeVector::const_iterator it = targets.begin(); it != targets.end(); ++it) {
Node* child = it->get();
+ InspectorController::willInsertDOMNode(child, this);
+
insertBeforeCommon(next.get(), child);
childrenChanged(true, nextChildPreviousSibling.get(), nextChild, 1);
@@ -291,6 +295,8 @@ bool ContainerNode::replaceChild(PassRefPtr<Node> newChild, Node* oldChild, Exce
ASSERT(!child->nextSibling());
ASSERT(!child->previousSibling());
+ InspectorController::willInsertDOMNode(child.get(), this);
+
// Add child after "prev".
forbidEventDispatch();
Node* next;
@@ -572,6 +578,8 @@ bool ContainerNode::appendChild(PassRefPtr<Node> newChild, ExceptionCode& ec, bo
break;
}
+ InspectorController::willInsertDOMNode(child, this);
+
// Append child to the end of the list
forbidEventDispatch();
child->setParent(this);
@@ -610,6 +618,8 @@ void ContainerNode::parserAddChild(PassRefPtr<Node> newChild)
ASSERT(newChild);
ASSERT(!newChild->parent()); // Use appendChild if you need to handle reparenting (and want DOM mutation events).
+ InspectorController::willInsertDOMNode(newChild.get(), this);
+
forbidEventDispatch();
Node* last = m_lastChild;
// FIXME: This method should take a PassRefPtr.
@@ -981,12 +991,7 @@ static void notifyChildInserted(Node* child)
{
ASSERT(!eventDispatchForbidden());
-#if ENABLE(INSPECTOR)
- if (Page* page = child->document()->page()) {
- if (InspectorController* inspectorController = page->inspectorController())
- inspectorController->didInsertDOMNode(child);
- }
-#endif
+ InspectorController::didInsertDOMNode(child);
RefPtr<Node> c = child;
RefPtr<Document> document = child->document();
@@ -1020,12 +1025,7 @@ static void dispatchChildRemovalEvents(Node* child)
{
ASSERT(!eventDispatchForbidden());
-#if ENABLE(INSPECTOR)
- if (Page* page = child->document()->page()) {
- if (InspectorController* inspectorController = page->inspectorController())
- inspectorController->didRemoveDOMNode(child);
- }
-#endif
+ InspectorController::willRemoveDOMNode(child);
RefPtr<Node> c = child;
RefPtr<Document> document = child->document();
diff --git a/WebCore/dom/Element.cpp b/WebCore/dom/Element.cpp
index 1855101..7c888bc 100644
--- a/WebCore/dom/Element.cpp
+++ b/WebCore/dom/Element.cpp
@@ -540,6 +540,11 @@ void Element::setAttribute(const AtomicString& name, const AtomicString& value,
return;
}
+#if ENABLE(INSPECTOR)
+ if (!isSynchronizingStyleAttribute())
+ InspectorController::willModifyDOMAttr(this);
+#endif
+
const AtomicString& localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;
// Allocate attribute map if necessary.
@@ -563,17 +568,18 @@ void Element::setAttribute(const AtomicString& name, const AtomicString& value,
}
#if ENABLE(INSPECTOR)
- if (Page* page = document()->page()) {
- if (InspectorController* inspectorController = page->inspectorController()) {
- if (!isSynchronizingStyleAttribute())
- inspectorController->didModifyDOMAttr(this);
- }
- }
+ if (!isSynchronizingStyleAttribute())
+ InspectorController::didModifyDOMAttr(this);
#endif
}
void Element::setAttribute(const QualifiedName& name, const AtomicString& value, ExceptionCode&)
{
+#if ENABLE(INSPECTOR)
+ if (!isSynchronizingStyleAttribute())
+ InspectorController::willModifyDOMAttr(this);
+#endif
+
document()->incDOMTreeVersion();
// Allocate attribute map if necessary.
@@ -592,12 +598,8 @@ void Element::setAttribute(const QualifiedName& name, const AtomicString& value,
}
#if ENABLE(INSPECTOR)
- if (Page* page = document()->page()) {
- if (InspectorController* inspectorController = page->inspectorController()) {
- if (!isSynchronizingStyleAttribute())
- inspectorController->didModifyDOMAttr(this);
- }
- }
+ if (!isSynchronizingStyleAttribute())
+ InspectorController::didModifyDOMAttr(this);
#endif
}
@@ -1228,6 +1230,8 @@ void Element::setAttributeNS(const AtomicString& namespaceURI, const AtomicStrin
void Element::removeAttribute(const String& name, ExceptionCode& ec)
{
+ InspectorController::willModifyDOMAttr(this);
+
String localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;
if (m_attributeMap) {
@@ -1236,13 +1240,7 @@ void Element::removeAttribute(const String& name, ExceptionCode& ec)
ec = 0;
}
-#if ENABLE(INSPECTOR)
- if (Page* page = document()->page()) {
- if (InspectorController* inspectorController = page->inspectorController())
- inspectorController->didModifyDOMAttr(this);
- }
-#endif
-
+ InspectorController::didModifyDOMAttr(this);
}
void Element::removeAttributeNS(const String& namespaceURI, const String& localName, ExceptionCode& ec)
diff --git a/WebCore/inspector/Inspector.idl b/WebCore/inspector/Inspector.idl
index 1f034b2..169b188 100644
--- a/WebCore/inspector/Inspector.idl
+++ b/WebCore/inspector/Inspector.idl
@@ -72,7 +72,7 @@ module core {
[notify] void debuggerWasDisabled();
[notify] void failedToParseScriptSource(out String url, out String data, out int firstLine, out int errorLine, out String errorMessage);
[notify] void parsedScriptSource(out String sourceID, out String url, out String data, out int firstLine, out int scriptWorldType);
- [notify] void pausedScript(out Value callFrames);
+ [notify] void pausedScript(out Object details);
[notify] void profilerWasEnabled();
[notify] void profilerWasDisabled();
[notify] void restoredBreakpoint(out String sourceID, out String url, out int line, out boolean enabled, out String condition);
diff --git a/WebCore/inspector/InspectorController.cpp b/WebCore/inspector/InspectorController.cpp
index b9c11c7..1e131f7 100644
--- a/WebCore/inspector/InspectorController.cpp
+++ b/WebCore/inspector/InspectorController.cpp
@@ -59,11 +59,12 @@
#include "InspectorBackendDispatcher.h"
#include "InspectorCSSStore.h"
#include "InspectorClient.h"
-#include "InspectorFrontend.h"
-#include "InspectorFrontendClient.h"
+#include "InspectorDOMAgent.h"
#include "InspectorDOMStorageResource.h"
#include "InspectorDatabaseResource.h"
#include "InspectorDebuggerAgent.h"
+#include "InspectorFrontend.h"
+#include "InspectorFrontendClient.h"
#include "InspectorProfilerAgent.h"
#include "InspectorResource.h"
#include "InspectorStorageAgent.h"
@@ -1844,6 +1845,58 @@ void InspectorController::reloadPage()
m_inspectedPage->mainFrame()->redirectScheduler()->scheduleRefresh(true);
}
+void InspectorController::willInsertDOMNodeImpl(Node* node, Node* parent)
+{
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ if (!m_debuggerAgent || !m_domAgent)
+ return;
+ PassRefPtr<InspectorValue> details;
+ if (m_domAgent->shouldBreakOnNodeInsertion(node, parent, &details))
+ m_debuggerAgent->breakProgram(details);
+#endif
+}
+
+void InspectorController::didInsertDOMNodeImpl(Node* node)
+{
+ if (m_domAgent)
+ m_domAgent->didInsertDOMNode(node);
+}
+
+void InspectorController::willRemoveDOMNodeImpl(Node* node)
+{
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ if (!m_debuggerAgent || !m_domAgent)
+ return;
+ PassRefPtr<InspectorValue> details;
+ if (m_domAgent->shouldBreakOnNodeRemoval(node, &details))
+ m_debuggerAgent->breakProgram(details);
+#endif
+}
+
+void InspectorController::didRemoveDOMNodeImpl(Node* node)
+{
+ if (m_domAgent)
+ m_domAgent->didRemoveDOMNode(node);
+}
+
+void InspectorController::willModifyDOMAttrImpl(Element* element)
+{
+#if ENABLE(JAVASCRIPT_DEBUGGER)
+ if (!m_debuggerAgent || !m_domAgent)
+ return;
+ PassRefPtr<InspectorValue> details;
+ if (m_domAgent->shouldBreakOnAttributeModification(element, &details))
+ m_debuggerAgent->breakProgram(details);
+#endif
+}
+
+void InspectorController::didModifyDOMAttrImpl(Element* element)
+{
+ if (m_domAgent)
+ m_domAgent->didModifyDOMAttr(element);
+}
+
+
} // namespace WebCore
#endif // ENABLE(INSPECTOR)
diff --git a/WebCore/inspector/InspectorController.h b/WebCore/inspector/InspectorController.h
index 7ed2549..2368a1e 100644
--- a/WebCore/inspector/InspectorController.h
+++ b/WebCore/inspector/InspectorController.h
@@ -31,7 +31,8 @@
#include "Console.h"
#include "Cookie.h"
-#include "InspectorDOMAgent.h"
+#include "Element.h"
+#include "Page.h"
#include "PlatformString.h"
#include "ScriptState.h"
#include <wtf/HashMap.h>
@@ -58,6 +59,7 @@ class InspectorBackend;
class InspectorBackendDispatcher;
class InspectorClient;
class InspectorCSSStore;
+class InspectorDOMAgent;
class InspectorDOMStorageResource;
class InspectorDatabaseResource;
class InspectorDebuggerAgent;
@@ -183,9 +185,12 @@ public:
void mainResourceFiredLoadEvent(DocumentLoader*, const KURL&);
void mainResourceFiredDOMContentEvent(DocumentLoader*, const KURL&);
- void didInsertDOMNode(Node*);
- void didRemoveDOMNode(Node*);
- void didModifyDOMAttr(Element*);
+ static void willInsertDOMNode(Node* node, Node* parent);
+ static void didInsertDOMNode(Node*);
+ static void willRemoveDOMNode(Node*);
+ static void willModifyDOMAttr(Element*);
+ static void didModifyDOMAttr(Element*);
+
#if ENABLE(WORKERS)
enum WorkerAction { WorkerCreated, WorkerDestroyed };
@@ -306,6 +311,14 @@ private:
void didEvaluateForTestInFrontend(long callId, const String& jsonResult);
+ static InspectorController* inspectorControllerForNode(Node*);
+ void willInsertDOMNodeImpl(Node* node, Node* parent);
+ void didInsertDOMNodeImpl(Node*);
+ void willRemoveDOMNodeImpl(Node*);
+ void didRemoveDOMNodeImpl(Node*);
+ void willModifyDOMAttrImpl(Element*);
+ void didModifyDOMAttrImpl(Element*);
+
#if ENABLE(JAVASCRIPT_DEBUGGER)
friend class InspectorDebuggerAgent;
String breakpointsSettingKey();
@@ -376,30 +389,59 @@ private:
#endif
};
+inline void InspectorController::willInsertDOMNode(Node* node, Node* parent)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorController* inspectorController = inspectorControllerForNode(parent))
+ inspectorController->willInsertDOMNodeImpl(node, parent);
+#endif
+}
+
inline void InspectorController::didInsertDOMNode(Node* node)
{
#if ENABLE(INSPECTOR)
- if (m_domAgent)
- m_domAgent->didInsertDOMNode(node);
+ if (InspectorController* inspectorController = inspectorControllerForNode(node))
+ inspectorController->didInsertDOMNodeImpl(node);
#endif
}
-inline void InspectorController::didRemoveDOMNode(Node* node)
+inline void InspectorController::willRemoveDOMNode(Node* node)
{
#if ENABLE(INSPECTOR)
- if (m_domAgent)
- m_domAgent->didRemoveDOMNode(node);
+ if (InspectorController* inspectorController = inspectorControllerForNode(node)) {
+ inspectorController->willRemoveDOMNodeImpl(node);
+ inspectorController->didRemoveDOMNodeImpl(node);
+ }
+#endif
+}
+
+inline void InspectorController::willModifyDOMAttr(Element* element)
+{
+#if ENABLE(INSPECTOR)
+ if (InspectorController* inspectorController = inspectorControllerForNode(element))
+ inspectorController->willModifyDOMAttrImpl(element);
#endif
}
inline void InspectorController::didModifyDOMAttr(Element* element)
{
#if ENABLE(INSPECTOR)
- if (m_domAgent)
- m_domAgent->didModifyDOMAttr(element);
+ if (InspectorController* inspectorController = inspectorControllerForNode(element))
+ inspectorController->didModifyDOMAttrImpl(element);
#endif
}
+inline InspectorController* InspectorController::inspectorControllerForNode(Node* node)
+{
+ if (Page* page = node->document()->page()) {
+ if (InspectorController* inspectorController = page->inspectorController()) {
+ if (inspectorController->hasFrontend())
+ return inspectorController;
+ }
+ }
+ return 0;
+}
+
} // namespace WebCore
#endif // !defined(InspectorController_h)
diff --git a/WebCore/inspector/InspectorDOMAgent.cpp b/WebCore/inspector/InspectorDOMAgent.cpp
index d2760e4..23c22aa 100644
--- a/WebCore/inspector/InspectorDOMAgent.cpp
+++ b/WebCore/inspector/InspectorDOMAgent.cpp
@@ -64,7 +64,6 @@
#include "PlatformString.h"
#include "RenderStyle.h"
#include "RenderStyleConstants.h"
-#include "ScriptDebugServer.h"
#include "ScriptEventListener.h"
#include "StyleSheetList.h"
#include "Text.h"
@@ -210,8 +209,6 @@ const int domBreakpointDerivedTypeShift = 16;
}
-InspectorDOMAgent* InspectorDOMAgent::s_domAgentOnBreakpoint = 0;
-
InspectorDOMAgent::InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFrontend* frontend)
: EventListener(InspectorDOMAgentType)
, m_cssStore(cssStore)
@@ -224,9 +221,6 @@ InspectorDOMAgent::InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFront
InspectorDOMAgent::~InspectorDOMAgent()
{
reset();
-
- if (this == s_domAgentOnBreakpoint)
- s_domAgentOnBreakpoint = 0;
}
void InspectorDOMAgent::reset()
@@ -780,6 +774,42 @@ void InspectorDOMAgent::removeDOMBreakpoint(long nodeId, long type)
}
}
+bool InspectorDOMAgent::shouldBreakOnNodeInsertion(Node*, Node* parent, PassRefPtr<InspectorValue>* details)
+{
+ if (!hasBreakpoint(parent, SubtreeModified))
+ return false;
+ RefPtr<InspectorObject> detailsObject = InspectorObject::create();
+ detailsObject->setObject("breakpoint", createBreakpoint(parent, SubtreeModified));
+ *details = detailsObject;
+ return true;
+}
+
+bool InspectorDOMAgent::shouldBreakOnNodeRemoval(Node* node, PassRefPtr<InspectorValue>* details)
+{
+ bool hasNodeRemovedBreakpoint = hasBreakpoint(node, NodeRemoved);
+ bool hasAnyBreakpoint = hasNodeRemovedBreakpoint || hasBreakpoint(innerParentNode(node), SubtreeModified);
+ if (!hasAnyBreakpoint)
+ return false;
+
+ RefPtr<InspectorObject> detailsObject = InspectorObject::create();
+ if (hasNodeRemovedBreakpoint)
+ detailsObject->setObject("breakpoint", createBreakpoint(node, NodeRemoved));
+ else
+ detailsObject->setObject("breakpoint", createBreakpoint(innerParentNode(node), SubtreeModified));
+ *details = detailsObject;
+ return true;
+}
+
+bool InspectorDOMAgent::shouldBreakOnAttributeModification(Element* element, PassRefPtr<InspectorValue>* details)
+{
+ if (!hasBreakpoint(element, AttributeModified))
+ return false;
+ RefPtr<InspectorObject> detailsObject = InspectorObject::create();
+ detailsObject->setObject("breakpoint", createBreakpoint(element, AttributeModified));
+ *details = detailsObject;
+ return true;
+}
+
String InspectorDOMAgent::documentURLString(Document* document) const
{
if (!document || document->url().isNull())
@@ -985,12 +1015,7 @@ void InspectorDOMAgent::didInsertDOMNode(Node* node)
return;
if (m_breakpoints.size()) {
- Node* parent = innerParentNode(node);
- if (hasBreakpoint(parent, SubtreeModified)) {
- if (!pauseOnBreakpoint())
- return;
- }
- uint32_t mask = m_breakpoints.get(parent);
+ uint32_t mask = m_breakpoints.get(innerParentNode(node));
uint32_t inheritableTypesMask = (mask | (mask >> domBreakpointDerivedTypeShift)) & inheritableDOMBreakpointTypesMask;
if (inheritableTypesMask)
updateSubtreeBreakpoints(node, inheritableTypesMask, true);
@@ -1023,10 +1048,6 @@ void InspectorDOMAgent::didRemoveDOMNode(Node* node)
return;
if (m_breakpoints.size()) {
- if (hasBreakpoint(node, NodeRemoved) || hasBreakpoint(innerParentNode(node), SubtreeModified)) {
- if (!pauseOnBreakpoint())
- return;
- }
// Remove subtree breakpoints.
m_breakpoints.remove(node);
Vector<Node*> stack(1, innerFirstChild(node));
@@ -1063,12 +1084,24 @@ void InspectorDOMAgent::didModifyDOMAttr(Element* element)
if (!id)
return;
- if (hasBreakpoint(element, AttributeModified)) {
- if (!pauseOnBreakpoint())
- return;
+ m_frontend->attributesUpdated(id, buildArrayForElementAttributes(element));
+}
+
+PassRefPtr<InspectorObject> InspectorDOMAgent::createBreakpoint(Node* node, long type)
+{
+ RefPtr<InspectorObject> breakpoint = InspectorObject::create();
+
+ // Find breakpoint owner.
+ while (!(m_breakpoints.get(node) & (1 << type))) {
+ node = innerParentNode(node);
+ ASSERT(node);
}
+ long nodeId = m_documentNodeToIdMap.get(node);
+ ASSERT(nodeId);
- m_frontend->attributesUpdated(id, buildArrayForElementAttributes(element));
+ breakpoint->setNumber("nodeId", nodeId);
+ breakpoint->setNumber("type", type);
+ return breakpoint.release();
}
bool InspectorDOMAgent::hasBreakpoint(Node* node, long type)
@@ -1078,19 +1111,6 @@ bool InspectorDOMAgent::hasBreakpoint(Node* node, long type)
return m_breakpoints.get(node) & (rootBit | derivedBit);
}
-bool InspectorDOMAgent::pauseOnBreakpoint()
-{
-#if ENABLE(JAVASCRIPT_DEBUGGER)
- s_domAgentOnBreakpoint = this;
- ScriptDebugServer::shared().breakProgram();
- bool deleted = !s_domAgentOnBreakpoint;
- s_domAgentOnBreakpoint = 0;
- return !deleted;
-#else
- return true;
-#endif
-}
-
void InspectorDOMAgent::updateSubtreeBreakpoints(Node* node, uint32_t rootMask, bool set)
{
uint32_t oldMask = m_breakpoints.get(node);
diff --git a/WebCore/inspector/InspectorDOMAgent.h b/WebCore/inspector/InspectorDOMAgent.h
index fd3c5b5..9751e8e 100644
--- a/WebCore/inspector/InspectorDOMAgent.h
+++ b/WebCore/inspector/InspectorDOMAgent.h
@@ -36,7 +36,6 @@
#include "InspectorCSSStore.h"
#include "InspectorValues.h"
#include "NodeList.h"
-#include "ScriptState.h"
#include "Timer.h"
#include <wtf/Deque.h>
@@ -114,6 +113,9 @@ namespace WebCore {
void searchCanceled();
void setDOMBreakpoint(long nodeId, long type);
void removeDOMBreakpoint(long nodeId, long type);
+ bool shouldBreakOnNodeInsertion(Node* node, Node* parent, PassRefPtr<InspectorValue>* details);
+ bool shouldBreakOnNodeRemoval(Node* node, PassRefPtr<InspectorValue>* details);
+ bool shouldBreakOnAttributeModification(Element* element, PassRefPtr<InspectorValue>* details);
// Methods called from the frontend for CSS styles inspection.
void getStyles(long nodeId, bool authorOnly, RefPtr<InspectorValue>* styles);
@@ -160,7 +162,7 @@ namespace WebCore {
bool pushDocumentToFrontend();
bool hasBreakpoint(Node* node, long type);
- bool pauseOnBreakpoint();
+ PassRefPtr<InspectorObject> createBreakpoint(Node* node, long type);
void updateSubtreeBreakpoints(Node* root, uint32_t rootMask, bool value);
PassRefPtr<InspectorObject> buildObjectForAttributeStyles(Element* element);
@@ -217,8 +219,6 @@ namespace WebCore {
HashSet<RefPtr<Node> > m_searchResults;
Vector<long> m_inspectedNodes;
HashMap<Node*, uint32_t> m_breakpoints;
-
- static InspectorDOMAgent* s_domAgentOnBreakpoint;
};
#endif
diff --git a/WebCore/inspector/InspectorDebuggerAgent.cpp b/WebCore/inspector/InspectorDebuggerAgent.cpp
index 357a043..fd9fdf3 100644
--- a/WebCore/inspector/InspectorDebuggerAgent.cpp
+++ b/WebCore/inspector/InspectorDebuggerAgent.cpp
@@ -56,11 +56,14 @@ PassOwnPtr<InspectorDebuggerAgent> InspectorDebuggerAgent::create(InspectorContr
return agent.release();
}
+InspectorDebuggerAgent* InspectorDebuggerAgent::s_debuggerAgentOnBreakpoint = 0;
+
InspectorDebuggerAgent::InspectorDebuggerAgent(InspectorController* inspectorController, InspectorFrontend* frontend)
: m_inspectorController(inspectorController)
, m_frontend(frontend)
, m_pausedScriptState(0)
, m_breakpointsLoaded(false)
+ , m_breakProgramReason(InspectorValue::null())
{
}
@@ -68,6 +71,9 @@ InspectorDebuggerAgent::~InspectorDebuggerAgent()
{
ScriptDebugServer::shared().removeListener(this, m_inspectorController->inspectedPage());
m_pausedScriptState = 0;
+
+ if (this == s_debuggerAgentOnBreakpoint)
+ s_debuggerAgentOnBreakpoint = 0;
}
bool InspectorDebuggerAgent::isDebuggerAlwaysEnabled()
@@ -282,9 +288,12 @@ void InspectorDebuggerAgent::failedToParseSource(const String& url, const String
void InspectorDebuggerAgent::didPause(ScriptState* scriptState)
{
ASSERT(scriptState && !m_pausedScriptState);
+ ASSERT(m_breakProgramReason);
m_pausedScriptState = scriptState;
- RefPtr<InspectorValue> callFrames = currentCallFrames();
- m_frontend->pausedScript(callFrames.get());
+ RefPtr<InspectorObject> details = InspectorObject::create();
+ details->setValue("callFrames", currentCallFrames());
+ details->setValue("reason", m_breakProgramReason);
+ m_frontend->pausedScript(details);
}
void InspectorDebuggerAgent::didContinue()
@@ -293,6 +302,19 @@ void InspectorDebuggerAgent::didContinue()
m_frontend->resumedScript();
}
+void InspectorDebuggerAgent::breakProgram(PassRefPtr<InspectorValue> reason)
+{
+ s_debuggerAgentOnBreakpoint = this;
+ m_breakProgramReason = reason;
+
+ ScriptDebugServer::shared().breakProgram();
+ if (!s_debuggerAgentOnBreakpoint)
+ return;
+
+ s_debuggerAgentOnBreakpoint = 0;
+ m_breakProgramReason = InspectorValue::null();
+}
+
} // namespace WebCore
#endif // ENABLE(JAVASCRIPT_DEBUGGER)
diff --git a/WebCore/inspector/InspectorDebuggerAgent.h b/WebCore/inspector/InspectorDebuggerAgent.h
index 91bcd49..79b0a0e 100644
--- a/WebCore/inspector/InspectorDebuggerAgent.h
+++ b/WebCore/inspector/InspectorDebuggerAgent.h
@@ -61,6 +61,7 @@ public:
void getScriptSource(const String& sourceID, String* scriptSource);
void pause();
+ void breakProgram(PassRefPtr<InspectorValue> reason);
void resume();
void stepOverStatement();
void stepIntoStatement();
@@ -93,6 +94,8 @@ private:
HashMap<String, SourceBreakpoints> m_stickyBreakpoints;
HashMap<String, unsigned> m_breakpointsMapping;
bool m_breakpointsLoaded;
+ static InspectorDebuggerAgent* s_debuggerAgentOnBreakpoint;
+ RefPtr<InspectorValue> m_breakProgramReason;
};
} // namespace WebCore
diff --git a/WebCore/inspector/InspectorValues.h b/WebCore/inspector/InspectorValues.h
index 3dd9594..4036f55 100644
--- a/WebCore/inspector/InspectorValues.h
+++ b/WebCore/inspector/InspectorValues.h
@@ -67,6 +67,8 @@ public:
Type type() const { return m_type; }
+ bool isNull() const { return m_type == TypeNull; }
+
virtual bool asBoolean(bool* output) const;
virtual bool asNumber(double* output) const;
virtual bool asNumber(long* output) const;
diff --git a/WebCore/inspector/front-end/BreakpointsSidebarPane.js b/WebCore/inspector/front-end/BreakpointsSidebarPane.js
index 408829d..cda72fb 100644
--- a/WebCore/inspector/front-end/BreakpointsSidebarPane.js
+++ b/WebCore/inspector/front-end/BreakpointsSidebarPane.js
@@ -106,7 +106,7 @@ WebInspector.BreakpointItem = function(breakpoint)
this._element.appendChild(checkboxElement);
this._breakpoint.addEventListener("enable-changed", this._enableChanged, this);
- this._breakpoint.addEventListener("removed", this._removed, this);
+ this._breakpoint.addEventListener("removed", this.dispatchEventToListeners.bind(this, "removed"));
}
WebInspector.BreakpointItem.prototype = {
@@ -128,15 +128,10 @@ WebInspector.BreakpointItem.prototype = {
event.stopPropagation();
},
- _enableChanged: function()
+ _enableChanged: function(event)
{
var checkbox = this._element.firstChild;
checkbox.checked = this._breakpoint.enabled;
- },
-
- _removed: function()
- {
- this.dispatchEventToListeners("removed");
}
}
diff --git a/WebCore/inspector/front-end/Script.js b/WebCore/inspector/front-end/Script.js
index 42d6850..be3f020 100644
--- a/WebCore/inspector/front-end/Script.js
+++ b/WebCore/inspector/front-end/Script.js
@@ -62,11 +62,14 @@ WebInspector.Script.prototype = {
{
if (!this.source)
return 0;
+ if (this._linesCount)
+ return this._linesCount;
this._linesCount = 0;
var lastIndex = this.source.indexOf("\n");
while (lastIndex !== -1) {
lastIndex = this.source.indexOf("\n", lastIndex + 1)
this._linesCount++;
}
+ return this._linesCount;
}
}
diff --git a/WebCore/inspector/front-end/inspector.js b/WebCore/inspector/front-end/inspector.js
index 8292f7f..840745f 100644
--- a/WebCore/inspector/front-end/inspector.js
+++ b/WebCore/inspector/front-end/inspector.js
@@ -1445,9 +1445,9 @@ WebInspector.failedToParseScriptSource = function(sourceURL, source, startingLin
this.panels.scripts.addScript(null, sourceURL, source, startingLine, errorLine, errorMessage);
}
-WebInspector.pausedScript = function(callFrames)
+WebInspector.pausedScript = function(details)
{
- this.panels.scripts.debuggerPaused(callFrames);
+ this.panels.scripts.debuggerPaused(details.callFrames);
InspectorFrontendHost.bringToFront();
}
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list