Diff
Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/ChangeLog (193458 => 193459)
--- branches/safari-601.1.46-branch/Source/_javascript_Core/ChangeLog 2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/ChangeLog 2015-12-04 20:54:23 UTC (rev 193459)
@@ -1,5 +1,44 @@
2015-12-04 Timothy Hatcher <timo...@apple.com>
+ Merge r190542. rdar://problem/23581597
+
+ 2015-10-02 Matt Baker <mattba...@apple.com>
+
+ Web Inspector: Add breakpoint option to ignore n times before stopping
+ https://bugs.webkit.org/show_bug.cgi?id=147664
+
+ Reviewed by Timothy Hatcher.
+
+ * debugger/Breakpoint.h:
+ (JSC::Breakpoint::Breakpoint):
+ Added ignoreCount and hitCount fields. Cleaned up initializers.
+
+ * debugger/Debugger.cpp:
+ (JSC::Debugger::hasBreakpoint):
+ If a breakpoint matches the current text position, increment breakpoint hit count and
+ compare with ignore count before testing the breakpoint condition.
+
+ * inspector/ScriptBreakpoint.h:
+ (Inspector::ScriptBreakpoint::ScriptBreakpoint):
+ Added ignoreCount field. Cleaned up initializers.
+
+ * inspector/ScriptDebugServer.cpp:
+ (Inspector::ScriptDebugServer::setBreakpoint):
+ Added ignoreCount field.
+
+ * inspector/agents/InspectorDebuggerAgent.cpp:
+ (Inspector::buildObjectForBreakpointCookie):
+ (Inspector::InspectorDebuggerAgent::setBreakpointByUrl):
+ (Inspector::InspectorDebuggerAgent::setBreakpoint):
+ (Inspector::InspectorDebuggerAgent::continueToLocation):
+ (Inspector::InspectorDebuggerAgent::didParseSource):
+ Plumbing for ignoreCount property.
+
+ * inspector/protocol/Debugger.json:
+ Added optional ignoreCount property to BreakpointOptions object.
+
+2015-12-04 Timothy Hatcher <timo...@apple.com>
+
Merge r189415. rdar://problem/23581597
2015-09-04 Joseph Pecoraro <pecor...@apple.com>
Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Breakpoint.h (193458 => 193459)
--- branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Breakpoint.h 2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Breakpoint.h 2015-12-04 20:54:23 UTC (rev 193459)
@@ -35,21 +35,16 @@
struct Breakpoint : public DoublyLinkedListNode<Breakpoint> {
Breakpoint()
- : id(noBreakpointID)
- , sourceID(noSourceID)
- , line(0)
- , column(0)
- , autoContinue(false)
{
}
- Breakpoint(SourceID sourceID, unsigned line, unsigned column, const String& condition, bool autoContinue)
- : id(noBreakpointID)
- , sourceID(sourceID)
+ Breakpoint(SourceID sourceID, unsigned line, unsigned column, const String& condition, bool autoContinue, unsigned ignoreCount)
+ : sourceID(sourceID)
, line(line)
, column(column)
, condition(condition)
, autoContinue(autoContinue)
+ , ignoreCount(ignoreCount)
{
}
@@ -60,15 +55,19 @@
, column(other.column)
, condition(other.condition)
, autoContinue(other.autoContinue)
+ , ignoreCount(other.ignoreCount)
+ , hitCount(other.hitCount)
{
}
- BreakpointID id;
- SourceID sourceID;
- unsigned line;
- unsigned column;
+ BreakpointID id { noBreakpointID };
+ SourceID sourceID { noSourceID };
+ unsigned line { 0 };
+ unsigned column { 0 };
String condition;
- bool autoContinue;
+ bool autoContinue { false };
+ unsigned ignoreCount { 0 };
+ unsigned hitCount { 0 };
static const unsigned unspecifiedColumn = UINT_MAX;
Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Debugger.cpp (193458 => 193459)
--- branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Debugger.cpp 2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Debugger.cpp 2015-12-04 20:54:23 UTC (rev 193459)
@@ -480,6 +480,10 @@
if (hitBreakpoint)
*hitBreakpoint = *breakpoint;
+ breakpoint->hitCount++;
+ if (breakpoint->ignoreCount >= breakpoint->hitCount)
+ return false;
+
if (breakpoint->condition.isEmpty())
return true;
Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptBreakpoint.h (193458 => 193459)
--- branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptBreakpoint.h 2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptBreakpoint.h 2015-12-04 20:54:23 UTC (rev 193459)
@@ -62,28 +62,31 @@
{
}
- ScriptBreakpoint(int lineNumber, int columnNumber, const String& condition, bool autoContinue)
+ ScriptBreakpoint(int lineNumber, int columnNumber, const String& condition, bool autoContinue, unsigned ignoreCount)
: lineNumber(lineNumber)
, columnNumber(columnNumber)
, condition(condition)
, autoContinue(autoContinue)
+ , ignoreCount(ignoreCount)
{
}
- ScriptBreakpoint(int lineNumber, int columnNumber, const String& condition, BreakpointActions& actions, bool autoContinue)
+ ScriptBreakpoint(int lineNumber, int columnNumber, const String& condition, BreakpointActions& actions, bool autoContinue, unsigned ignoreCount)
: lineNumber(lineNumber)
, columnNumber(columnNumber)
, condition(condition)
, actions(actions)
, autoContinue(autoContinue)
+ , ignoreCount(ignoreCount)
{
}
- int lineNumber;
- int columnNumber;
+ int lineNumber { 0 };
+ int columnNumber { 0 };
String condition;
BreakpointActions actions;
- bool autoContinue;
+ bool autoContinue { false };
+ unsigned ignoreCount { 0 };
};
} // namespace Inspector
Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptDebugServer.cpp (193458 => 193459)
--- branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptDebugServer.cpp 2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptDebugServer.cpp 2015-12-04 20:54:23 UTC (rev 193459)
@@ -61,7 +61,7 @@
if (!sourceID)
return JSC::noBreakpointID;
- JSC::Breakpoint breakpoint(sourceID, scriptBreakpoint.lineNumber, scriptBreakpoint.columnNumber, scriptBreakpoint.condition, scriptBreakpoint.autoContinue);
+ JSC::Breakpoint breakpoint(sourceID, scriptBreakpoint.lineNumber, scriptBreakpoint.columnNumber, scriptBreakpoint.condition, scriptBreakpoint.autoContinue, scriptBreakpoint.ignoreCount);
JSC::BreakpointID id = Debugger::setBreakpoint(breakpoint, *actualLineNumber, *actualColumnNumber);
if (id != JSC::noBreakpointID && !scriptBreakpoint.actions.isEmpty()) {
#ifndef NDEBUG
Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/agents/InspectorDebuggerAgent.cpp (193458 => 193459)
--- branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/agents/InspectorDebuggerAgent.cpp 2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/agents/InspectorDebuggerAgent.cpp 2015-12-04 20:54:23 UTC (rev 193459)
@@ -189,7 +189,7 @@
breakProgram(DebuggerFrontendDispatcher::Reason::Assert, buildAssertPauseReason(message));
}
-static Ref<InspectorObject> buildObjectForBreakpointCookie(const String& url, int lineNumber, int columnNumber, const String& condition, RefPtr<InspectorArray>& actions, bool isRegex, bool autoContinue)
+static Ref<InspectorObject> buildObjectForBreakpointCookie(const String& url, int lineNumber, int columnNumber, const String& condition, RefPtr<InspectorArray>& actions, bool isRegex, bool autoContinue, unsigned ignoreCount)
{
Ref<InspectorObject> breakpointObject = InspectorObject::create();
breakpointObject->setString(ASCIILiteral("url"), url);
@@ -198,6 +198,7 @@
breakpointObject->setString(ASCIILiteral("condition"), condition);
breakpointObject->setBoolean(ASCIILiteral("isRegex"), isRegex);
breakpointObject->setBoolean(ASCIILiteral("autoContinue"), autoContinue);
+ breakpointObject->setInteger(ASCIILiteral("ignoreCount"), ignoreCount);
if (actions)
breakpointObject->setArray(ASCIILiteral("actions"), actions);
@@ -300,20 +301,22 @@
String condition = emptyString();
bool autoContinue = false;
+ unsigned ignoreCount = 0;
RefPtr<InspectorArray> actions;
if (options) {
options->getString(ASCIILiteral("condition"), condition);
options->getBoolean(ASCIILiteral("autoContinue"), autoContinue);
options->getArray(ASCIILiteral("actions"), actions);
+ options->getInteger(ASCIILiteral("ignoreCount"), ignoreCount);
}
BreakpointActions breakpointActions;
if (!breakpointActionsFromProtocol(errorString, actions, &breakpointActions))
return;
- m_javaScriptBreakpoints.set(breakpointIdentifier, buildObjectForBreakpointCookie(url, lineNumber, columnNumber, condition, actions, isRegex, autoContinue));
+ m_javaScriptBreakpoints.set(breakpointIdentifier, buildObjectForBreakpointCookie(url, lineNumber, columnNumber, condition, actions, isRegex, autoContinue, ignoreCount));
- ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition, breakpointActions, autoContinue);
+ ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition, breakpointActions, autoContinue, ignoreCount);
for (ScriptsMap::iterator it = m_scripts.begin(); it != m_scripts.end(); ++it) {
String scriptURL = !it->value.sourceURL.isEmpty() ? it->value.sourceURL : it->value.url;
if (!matches(scriptURL, url, isRegex))
@@ -351,11 +354,13 @@
String condition = emptyString();
bool autoContinue = false;
+ unsigned ignoreCount = 0;
RefPtr<InspectorArray> actions;
if (options) {
options->getString(ASCIILiteral("condition"), condition);
options->getBoolean(ASCIILiteral("autoContinue"), autoContinue);
options->getArray(ASCIILiteral("actions"), actions);
+ options->getInteger(ASCIILiteral("ignoreCount"), ignoreCount);
}
BreakpointActions breakpointActions;
@@ -368,7 +373,7 @@
return;
}
- ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition, breakpointActions, autoContinue);
+ ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition, breakpointActions, autoContinue, ignoreCount);
actualLocation = resolveBreakpoint(breakpointIdentifier, sourceID, breakpoint);
if (!actualLocation) {
errorString = ASCIILiteral("Could not resolve breakpoint");
@@ -406,7 +411,7 @@
if (!parseLocation(errorString, location, sourceID, lineNumber, columnNumber))
return;
- ScriptBreakpoint breakpoint(lineNumber, columnNumber, "", false);
+ ScriptBreakpoint breakpoint(lineNumber, columnNumber, "", false, 0);
m_continueToLocationBreakpointID = scriptDebugServer().setBreakpoint(sourceID, breakpoint, &lineNumber, &columnNumber);
resume(errorString);
}
@@ -641,6 +646,7 @@
breakpointObject->getInteger(ASCIILiteral("columnNumber"), breakpoint.columnNumber);
breakpointObject->getString(ASCIILiteral("condition"), breakpoint.condition);
breakpointObject->getBoolean(ASCIILiteral("autoContinue"), breakpoint.autoContinue);
+ breakpointObject->getInteger(ASCIILiteral("ignoreCount"), breakpoint.ignoreCount);
ErrorString errorString;
RefPtr<InspectorArray> actions;
breakpointObject->getArray(ASCIILiteral("actions"), actions);
Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/protocol/Debugger.json (193458 => 193459)
--- branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/protocol/Debugger.json 2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/protocol/Debugger.json 2015-12-04 20:54:23 UTC (rev 193459)
@@ -48,7 +48,8 @@
"properties": [
{ "name": "condition", "type": "string", "optional": true, "description": "_expression_ to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this _expression_ evaluates to true." },
{ "name": "actions", "type": "array", "optional": true, "items": { "$ref": "BreakpointAction" }, "description": "Actions to perform automatically when the breakpoint is triggered." },
- { "name": "autoContinue", "type": "boolean", "optional": true, "description": "Automatically continue after hitting this breakpoint and running actions." }
+ { "name": "autoContinue", "type": "boolean", "optional": true, "description": "Automatically continue after hitting this breakpoint and running actions." },
+ { "name": "ignoreCount", "type": "integer", "optional": true, "description": "Number of times to ignore this breakpoint, before stopping on the breakpoint and running actions." }
],
"description": "Extra options that modify breakpoint behavior."
},