2011-03-14 Pavel Podivilov <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor event listener breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=56305

        * inspector/debugger/event-listener-breakpoints-expected.txt: Added.
        * inspector/debugger/event-listener-breakpoints.html: Added.
        * platform/gtk/Skipped:
        * platform/mac/Skipped:
        * platform/qt/Skipped:
        * platform/win/Skipped:
2011-03-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor event listener breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=56305

        - restore event listener breakpoints one by one instead of using setAllBrowserBreakpoints
        - store event listener breakpoints in a separate separate setting
        - move presentation-related code from BreakpointManager to EventListenerBreakpointsSidebarPane

        Test: inspector/debugger/event-listener-breakpoints.html

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createDOMBreakpointId):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._categoryCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._updateCategoryCheckbox):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._saveBreakpoints):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._restoreBreakpoints):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.setStatus):
        (WebInspector.CallStackSidebarPane.prototype._domBreakpointHit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):

git-svn-id: svn://svn.chromium.org/blink/trunk@81243 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent aebe7b89
2011-03-14 Pavel Podivilov <podivilov@chromium.org>
Reviewed by Yury Semikhatsky.
Web Inspector: refactor event listener breakpoints.
https://bugs.webkit.org/show_bug.cgi?id=56305
* inspector/debugger/event-listener-breakpoints-expected.txt: Added.
* inspector/debugger/event-listener-breakpoints.html: Added.
* platform/gtk/Skipped:
* platform/mac/Skipped:
* platform/qt/Skipped:
* platform/win/Skipped:
2011-03-16 Alexander Pavlov <apavlov@chromium.org> 2011-03-16 Alexander Pavlov <apavlov@chromium.org>
[Chromium] Unreviewed, update expectations. [Chromium] Unreviewed, update expectations.
Tests event listener breakpoints.
Debugger was enabled.
Running: testClickBreakpoint
Script execution paused.
Call stack:
0) testElementClicked (event-listener-breakpoints.html:7)
1) addListenerAndClick (event-listener-breakpoints.html:16)
2) (:1)
Script execution resumed.
Running: testTimerFiredBreakpoint
Script execution paused.
Call stack:
0) timerFired (event-listener-breakpoints.html:19)
Script execution resumed.
Debugger was disabled.
<html>
<head>
<script src="../../http/tests/inspector/inspector-test.js"></script>
<script src="../../http/tests/inspector/debugger-test.js"></script>
<script>
function testElementClicked()
{
return 0;
}
function addListenerAndClick()
{
var element = document.getElementById("test");
element.addEventListener("click", testElementClicked, true);
element.click();
}
function timerFired()
{
return 0;
}
function test()
{
var pane = WebInspector.panels.scripts.sidebarPanes.eventListenerBreakpoints;
InspectorTest.runDebuggerTestSuite([
function testClickBreakpoint(next)
{
pane._setBreakpoint("listener:click");
InspectorTest.waitUntilPaused(paused);
InspectorTest.evaluateInPageWithTimeout("addListenerAndClick()");
function paused(callFrames)
{
InspectorTest.captureStackTrace(callFrames);
pane._removeBreakpoint("listener:click");
InspectorTest.resumeExecution(resumed);
}
function resumed()
{
InspectorTest.evaluateInPage("addListenerAndClick())", next);
}
},
function testTimerFiredBreakpoint(next)
{
pane._setBreakpoint("instrumentation:timerFired");
InspectorTest.waitUntilPaused(paused);
InspectorTest.evaluateInPage("setTimeout(timerFired, 10)");
function paused(callFrames)
{
InspectorTest.captureStackTrace(callFrames);
pane._removeBreakpoint("instrumentation:timerFired");
InspectorTest.resumeExecution(next);
}
}
]);
}
</script>
</head>
<body onload="runTest()">
<p>
Tests event listener breakpoints.
</p>
<input type=button id="test"></input>
</body>
</html>
...@@ -1184,6 +1184,7 @@ sputnik/Unicode/Unicode_510/S7.6_A5.3_T2.html ...@@ -1184,6 +1184,7 @@ sputnik/Unicode/Unicode_510/S7.6_A5.3_T2.html
# https://bugs.webkit.org/show_bug.cgi?id=43332 # https://bugs.webkit.org/show_bug.cgi?id=43332
inspector/debugger/dom-breakpoints.html inspector/debugger/dom-breakpoints.html
inspector/debugger/event-listener-breakpoints.html
inspector/debugger/xhr-breakpoints.html inspector/debugger/xhr-breakpoints.html
# https://bugs.webkit.org/show_bug.cgi?id=40300 # https://bugs.webkit.org/show_bug.cgi?id=40300
......
...@@ -234,6 +234,7 @@ animations/play-state.html ...@@ -234,6 +234,7 @@ animations/play-state.html
# https://bugs.webkit.org/show_bug.cgi?id=43332 # https://bugs.webkit.org/show_bug.cgi?id=43332
inspector/debugger/dom-breakpoints.html inspector/debugger/dom-breakpoints.html
inspector/debugger/event-listener-breakpoints.html
inspector/debugger/xhr-breakpoints.html inspector/debugger/xhr-breakpoints.html
# https://bugs.webkit.org/show_bug.cgi?id=40300 # https://bugs.webkit.org/show_bug.cgi?id=40300
......
...@@ -104,6 +104,7 @@ fast/text/hyphens.html ...@@ -104,6 +104,7 @@ fast/text/hyphens.html
# https://bugs.webkit.org/show_bug.cgi?id=43332 # https://bugs.webkit.org/show_bug.cgi?id=43332
inspector/debugger/dom-breakpoints.html inspector/debugger/dom-breakpoints.html
inspector/debugger/event-listener-breakpoints.html
inspector/debugger/xhr-breakpoints.html inspector/debugger/xhr-breakpoints.html
# https://bugs.webkit.org/show_bug.cgi?id=40300 # https://bugs.webkit.org/show_bug.cgi?id=40300
......
...@@ -1090,6 +1090,7 @@ http/tests/appcache/origin-quota.html ...@@ -1090,6 +1090,7 @@ http/tests/appcache/origin-quota.html
# https://bugs.webkit.org/show_bug.cgi?id=43332 # https://bugs.webkit.org/show_bug.cgi?id=43332
inspector/debugger/dom-breakpoints.html inspector/debugger/dom-breakpoints.html
inspector/debugger/event-listener-breakpoints.html
inspector/debugger/xhr-breakpoints.html inspector/debugger/xhr-breakpoints.html
# https://bugs.webkit.org/show_bug.cgi?id=40300 # https://bugs.webkit.org/show_bug.cgi?id=40300
......
2011-03-14 Pavel Podivilov <podivilov@chromium.org>
Reviewed by Yury Semikhatsky.
Web Inspector: refactor event listener breakpoints.
https://bugs.webkit.org/show_bug.cgi?id=56305
- restore event listener breakpoints one by one instead of using setAllBrowserBreakpoints
- store event listener breakpoints in a separate separate setting
- move presentation-related code from BreakpointManager to EventListenerBreakpointsSidebarPane
Test: inspector/debugger/event-listener-breakpoints.html
* inspector/Inspector.idl:
* inspector/InspectorAgent.cpp:
(WebCore::InspectorAgent::setFrontend):
* inspector/InspectorBrowserDebuggerAgent.cpp:
(WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint):
(WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint):
(WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
(WebCore::InspectorBrowserDebuggerAgent::clear):
* inspector/InspectorBrowserDebuggerAgent.h:
* inspector/InspectorInstrumentation.cpp:
(WebCore::InspectorInstrumentation::didCommitLoadImpl):
* inspector/front-end/BreakpointManager.js:
(WebInspector.BreakpointManager.prototype.setEventListenerBreakpoint):
(WebInspector.BreakpointManager.prototype.removeEventListenerBreakpoint):
(WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
(WebInspector.BreakpointManager.prototype._projectChanged):
(WebInspector.BreakpointManager.prototype._saveBreakpoints):
(WebInspector.BreakpointManager.prototype._validateBreakpoints):
(WebInspector.BreakpointManager.prototype._createDOMBreakpointId):
* inspector/front-end/BreakpointsSidebarPane.js:
(WebInspector.EventListenerBreakpointsSidebarPane):
(WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI):
(WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
(WebInspector.EventListenerBreakpointsSidebarPane.prototype._categoryCheckboxClicked):
(WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
(WebInspector.EventListenerBreakpointsSidebarPane.prototype._setBreakpoint):
(WebInspector.EventListenerBreakpointsSidebarPane.prototype._removeBreakpoint):
(WebInspector.EventListenerBreakpointsSidebarPane.prototype._updateCategoryCheckbox):
(WebInspector.EventListenerBreakpointsSidebarPane.prototype.highlightBreakpoint):
(WebInspector.EventListenerBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
(WebInspector.EventListenerBreakpointsSidebarPane.prototype._saveBreakpoints):
(WebInspector.EventListenerBreakpointsSidebarPane.prototype._restoreBreakpoints):
* inspector/front-end/CallStackSidebarPane.js:
(WebInspector.CallStackSidebarPane.prototype.update):
(WebInspector.CallStackSidebarPane.prototype.setStatus):
(WebInspector.CallStackSidebarPane.prototype._domBreakpointHit):
* inspector/front-end/ScriptsPanel.js:
(WebInspector.ScriptsPanel.prototype._debuggerPaused):
(WebInspector.ScriptsPanel.prototype._clearInterface):
* inspector/front-end/Settings.js:
(WebInspector.Settings):
2011-03-16 David Kilzer <ddkilzer@apple.com> 2011-03-16 David Kilzer <ddkilzer@apple.com>
Minor clean-up after r81156, r81172 Minor clean-up after r81156, r81172
......
...@@ -239,7 +239,6 @@ module core { ...@@ -239,7 +239,6 @@ module core {
#if defined(ENABLE_JAVASCRIPT_DEBUGGER) && ENABLE_JAVASCRIPT_DEBUGGER #if defined(ENABLE_JAVASCRIPT_DEBUGGER) && ENABLE_JAVASCRIPT_DEBUGGER
interface [Conditional=INSPECTOR] BrowserDebugger { interface [Conditional=INSPECTOR] BrowserDebugger {
void setAllBrowserBreakpoints(in Object breakpoints);
void setDOMBreakpoint(in long nodeId, in long type); void setDOMBreakpoint(in long nodeId, in long type);
void removeDOMBreakpoint(in long nodeId, in long type); void removeDOMBreakpoint(in long nodeId, in long type);
void setEventListenerBreakpoint(in String eventName); void setEventListenerBreakpoint(in String eventName);
......
...@@ -385,7 +385,6 @@ void InspectorAgent::setFrontend(InspectorFrontend* inspectorFrontend) ...@@ -385,7 +385,6 @@ void InspectorAgent::setFrontend(InspectorFrontend* inspectorFrontend)
m_resourceAgent->setFrontend(m_frontend); m_resourceAgent->setFrontend(m_frontend);
#if ENABLE(JAVASCRIPT_DEBUGGER) #if ENABLE(JAVASCRIPT_DEBUGGER)
m_debuggerAgent->setFrontend(m_frontend); m_debuggerAgent->setFrontend(m_frontend);
m_browserDebuggerAgent->setFrontend(m_frontend);
m_profilerAgent->setFrontend(m_frontend); m_profilerAgent->setFrontend(m_frontend);
#endif #endif
#if ENABLE(DATABASE) #if ENABLE(DATABASE)
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#include "InspectorState.h" #include "InspectorState.h"
#include "InspectorValues.h" #include "InspectorValues.h"
#include "InstrumentingAgents.h" #include "InstrumentingAgents.h"
#include <wtf/text/CString.h> #include <wtf/text/StringConcatenate.h>
namespace { namespace {
...@@ -64,7 +64,7 @@ const int domBreakpointDerivedTypeShift = 16; ...@@ -64,7 +64,7 @@ const int domBreakpointDerivedTypeShift = 16;
namespace WebCore { namespace WebCore {
namespace BrowserDebuggerAgentState { namespace BrowserDebuggerAgentState {
static const char browserBreakpoints[] = "browserBreakpoints"; static const char eventListenerBreakpoints[] = "eventListenerBreakpoints";
static const char pauseOnAllXHRs[] = "pauseOnAllXHRs"; static const char pauseOnAllXHRs[] = "pauseOnAllXHRs";
static const char xhrBreakpoints[] = "xhrBreakpoints"; static const char xhrBreakpoints[] = "xhrBreakpoints";
} }
...@@ -107,75 +107,38 @@ void InspectorBrowserDebuggerAgent::disable() ...@@ -107,75 +107,38 @@ void InspectorBrowserDebuggerAgent::disable()
clear(); 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() void InspectorBrowserDebuggerAgent::clearFrontend()
{ {
disable(); disable();
} }
void InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints(ErrorString*, PassRefPtr<InspectorObject> breakpoints) void InspectorBrowserDebuggerAgent::discardBindings()
{
m_inspectorState->setObject(BrowserDebuggerAgentState::browserBreakpoints, breakpoints);
// FIXME: remove this call to inspector agent and dependency on the inspector agent.
inspectedURLChanged(m_inspectorAgent->inspectedURLWithoutFragment());
}
void InspectorBrowserDebuggerAgent::inspectedURLChanged(const String& url)
{ {
m_eventListenerBreakpoints.clear(); m_domBreakpoints.clear();
RefPtr<InspectorObject> allBreakpoints = m_inspectorState->getObject(BrowserDebuggerAgentState::browserBreakpoints);
RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(url);
if (!breakpoints)
return;
for (unsigned i = 0; i < breakpoints->length(); ++i)
restoreStickyBreakpoint(breakpoints->get(i)->asObject());
} }
void InspectorBrowserDebuggerAgent::restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint) void InspectorBrowserDebuggerAgent::setEventListenerBreakpoint(ErrorString* error, const String& eventName)
{ {
if (!breakpoint) if (eventName.isEmpty()) {
return; *error = "Event name is empty";
String type;
if (!breakpoint->getString("type", &type))
return; return;
bool enabled;
if (!breakpoint->getBoolean("enabled", &enabled))
return;
RefPtr<InspectorObject> condition = breakpoint->getObject("condition");
if (!condition)
return;
ErrorString error;
if (type == eventListenerNativeBreakpointType) {
if (!enabled)
return;
String eventName;
if (!condition->getString("eventName", &eventName))
return;
setEventListenerBreakpoint(&error, eventName);
} }
}
void InspectorBrowserDebuggerAgent::discardBindings() RefPtr<InspectorObject> eventListenerBreakpoints = m_inspectorState->getObject(BrowserDebuggerAgentState::eventListenerBreakpoints);
{ eventListenerBreakpoints->setBoolean(eventName, true);
m_domBreakpoints.clear(); m_inspectorState->setObject(BrowserDebuggerAgentState::eventListenerBreakpoints, eventListenerBreakpoints);
} }
void InspectorBrowserDebuggerAgent::setEventListenerBreakpoint(ErrorString*, const String& eventName) void InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint(ErrorString* error, const String& eventName)
{ {
m_eventListenerBreakpoints.add(eventName); if (eventName.isEmpty()) {
} *error = "Event name is empty";
return;
}
void InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint(ErrorString*, const String& eventName) RefPtr<InspectorObject> eventListenerBreakpoints = m_inspectorState->getObject(BrowserDebuggerAgentState::eventListenerBreakpoints);
{ eventListenerBreakpoints->remove(eventName);
m_eventListenerBreakpoints.remove(eventName); m_inspectorState->setObject(BrowserDebuggerAgentState::eventListenerBreakpoints, eventListenerBreakpoints);
} }
void InspectorBrowserDebuggerAgent::didInsertDOMNode(Node* node) void InspectorBrowserDebuggerAgent::didInsertDOMNode(Node* node)
...@@ -347,8 +310,9 @@ void InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded(const String& cat ...@@ -347,8 +310,9 @@ void InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded(const String& cat
if (!debuggerAgent) if (!debuggerAgent)
return; return;
String fullEventName = String::format("%s:%s", categoryType.utf8().data(), eventName.utf8().data()); String fullEventName = makeString(categoryType, ":", eventName);
if (!m_eventListenerBreakpoints.contains(fullEventName)) RefPtr<InspectorObject> eventListenerBreakpoints = m_inspectorState->getObject(BrowserDebuggerAgentState::eventListenerBreakpoints);
if (eventListenerBreakpoints->find(fullEventName) == eventListenerBreakpoints->end())
return; return;
RefPtr<InspectorObject> eventData = InspectorObject::create(); RefPtr<InspectorObject> eventData = InspectorObject::create();
...@@ -416,7 +380,6 @@ void InspectorBrowserDebuggerAgent::willSendXMLHttpRequest(const String& url) ...@@ -416,7 +380,6 @@ void InspectorBrowserDebuggerAgent::willSendXMLHttpRequest(const String& url)
void InspectorBrowserDebuggerAgent::clear() void InspectorBrowserDebuggerAgent::clear()
{ {
m_domBreakpoints.clear(); m_domBreakpoints.clear();
m_eventListenerBreakpoints.clear();
} }
} // namespace WebCore } // namespace WebCore
......
...@@ -36,10 +36,8 @@ ...@@ -36,10 +36,8 @@
#include "InspectorDebuggerAgent.h" #include "InspectorDebuggerAgent.h"
#include "PlatformString.h" #include "PlatformString.h"
#include <wtf/HashMap.h> #include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/PassOwnPtr.h> #include <wtf/PassOwnPtr.h>
#include <wtf/RefCounted.h> #include <wtf/RefCounted.h>
#include <wtf/text/StringHash.h>
namespace WebCore { namespace WebCore {
...@@ -62,12 +60,8 @@ public: ...@@ -62,12 +60,8 @@ public:
virtual ~InspectorBrowserDebuggerAgent(); virtual ~InspectorBrowserDebuggerAgent();
void setFrontend(InspectorFrontend*);
void clearFrontend(); void clearFrontend();
void setAllBrowserBreakpoints(ErrorString* error, PassRefPtr<InspectorObject>);
void inspectedURLChanged(const String& url);
// BrowserDebugger API for InspectorFrontend // BrowserDebugger API for InspectorFrontend
void setXHRBreakpoint(ErrorString* error, const String& url); void setXHRBreakpoint(ErrorString* error, const String& url);
void removeXHRBreakpoint(ErrorString* error, const String& url); void removeXHRBreakpoint(ErrorString* error, const String& url);
...@@ -93,8 +87,6 @@ private: ...@@ -93,8 +87,6 @@ private:
virtual void debuggerWasDisabled(); virtual void debuggerWasDisabled();
void disable(); void disable();
void restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint);
void descriptionForDOMEvent(Node* target, long breakpointType, bool insertion, InspectorObject* description); void descriptionForDOMEvent(Node* target, long breakpointType, bool insertion, InspectorObject* description);
void updateSubtreeBreakpoints(Node*, uint32_t rootMask, bool set); void updateSubtreeBreakpoints(Node*, uint32_t rootMask, bool set);
bool hasBreakpoint(Node*, long type); bool hasBreakpoint(Node*, long type);
...@@ -108,7 +100,6 @@ private: ...@@ -108,7 +100,6 @@ private:
InspectorDebuggerAgent* m_debuggerAgent; InspectorDebuggerAgent* m_debuggerAgent;
InspectorAgent* m_inspectorAgent; InspectorAgent* m_inspectorAgent;
HashMap<Node*, uint32_t> m_domBreakpoints; HashMap<Node*, uint32_t> m_domBreakpoints;
HashSet<String> m_eventListenerBreakpoints;
}; };
} // namespace WebCore } // namespace WebCore
......
...@@ -530,8 +530,6 @@ void InspectorInstrumentation::didCommitLoadImpl(Page* page, InspectorAgent* ins ...@@ -530,8 +530,6 @@ void InspectorInstrumentation::didCommitLoadImpl(Page* page, InspectorAgent* ins
if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents->inspectorDebuggerAgent()) { if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents->inspectorDebuggerAgent()) {
KURL url = inspectorAgent->inspectedURLWithoutFragment(); KURL url = inspectorAgent->inspectedURLWithoutFragment();
debuggerAgent->inspectedURLChanged(url); debuggerAgent->inspectedURLChanged(url);
if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = instrumentingAgents->inspectorBrowserDebuggerAgent())
browserDebuggerAgent->inspectedURLChanged(url);
} }
#endif #endif
#if ENABLE(JAVASCRIPT_DEBUGGER) && USE(JSC) #if ENABLE(JAVASCRIPT_DEBUGGER) && USE(JSC)
......
...@@ -51,7 +51,6 @@ WebInspector.BreakpointManager.BreakpointTypes = { ...@@ -51,7 +51,6 @@ WebInspector.BreakpointManager.BreakpointTypes = {
WebInspector.BreakpointManager.Events = { WebInspector.BreakpointManager.Events = {
DOMBreakpointAdded: "dom-breakpoint-added", DOMBreakpointAdded: "dom-breakpoint-added",
EventListenerBreakpointAdded: "event-listener-breakpoint-added",
ProjectChanged: "project-changed" ProjectChanged: "project-changed"
} }
...@@ -80,34 +79,6 @@ WebInspector.BreakpointManager.prototype = { ...@@ -80,34 +79,6 @@ WebInspector.BreakpointManager.prototype = {
this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.DOMBreakpointAdded, breakpoint.view); this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.DOMBreakpointAdded, breakpoint.view);
}, },
createEventListenerBreakpoint: function(eventName)
{
this._createEventListenerBreakpoint(eventName, true, false);
},
_createEventListenerBreakpoint: function(eventName, enabled, restored)
{
var breakpointId = this._createEventListenerBreakpointId(eventName);
if (breakpointId in this._breakpoints)
return;
var breakpoint = new WebInspector.EventListenerBreakpoint(eventName);
this._setBreakpoint(breakpointId, breakpoint, enabled, restored);
breakpoint.view = new WebInspector.EventListenerBreakpointView(this, breakpointId, enabled, eventName);
this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.EventListenerBreakpointAdded, breakpoint.view);
},
setXHRBreakpoint: function(url)
{
BrowserDebuggerAgent.setXHRBreakpoint(url);
},
removeXHRBreakpoint: function(url)
{
BrowserDebuggerAgent.removeXHRBreakpoint(url);
},
_setBreakpoint: function(breakpointId, breakpoint, enabled, restored) _setBreakpoint: function(breakpointId, breakpoint, enabled, restored)
{ {
this._breakpoints[breakpointId] = breakpoint; this._breakpoints[breakpointId] = breakpoint;
...@@ -146,8 +117,6 @@ WebInspector.BreakpointManager.prototype = { ...@@ -146,8 +117,6 @@ WebInspector.BreakpointManager.prototype = {
var breakpointId; var breakpointId;
if (eventData.breakpointType === WebInspector.BreakpointManager.BreakpointTypes.DOM) if (eventData.breakpointType === WebInspector.BreakpointManager.BreakpointTypes.DOM)
breakpointId = this._createDOMBreakpointId(eventData.nodeId, eventData.type); breakpointId = this._createDOMBreakpointId(eventData.nodeId, eventData.type);
else if (eventData.breakpointType === WebInspector.BreakpointManager.BreakpointTypes.EventListener)
breakpointId = this._createEventListenerBreakpointId(eventData.eventName);
else else
return; return;
...@@ -185,18 +154,6 @@ WebInspector.BreakpointManager.prototype = { ...@@ -185,18 +154,6 @@ WebInspector.BreakpointManager.prototype = {
this._breakpoints = {}; this._breakpoints = {};
this._domBreakpointsRestored = false; this._domBreakpointsRestored = false;
this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.ProjectChanged); this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.ProjectChanged);
var breakpoints = this._stickyBreakpoints[WebInspector.settings.projectId] || [];
for (var i = 0; i < breakpoints.length; ++i) {
var breakpoint = breakpoints[i];
if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.EventListener)
this._createEventListenerBreakpoint(breakpoint.condition.eventName, breakpoint.enabled, true);
}
if (!this._breakpointsPushedToFrontend) {
BrowserDebuggerAgent.setAllBrowserBreakpoints(this._stickyBreakpoints);
this._breakpointsPushedToFrontend = true;
}
}, },
restoreDOMBreakpoints: function() restoreDOMBreakpoints: function()
...@@ -258,7 +215,6 @@ WebInspector.BreakpointManager.prototype = { ...@@ -258,7 +215,6 @@ WebInspector.BreakpointManager.prototype = {
WebInspector.settings.nativeBreakpoints = breakpoints; WebInspector.settings.nativeBreakpoints = breakpoints;
this._stickyBreakpoints[WebInspector.settings.projectId] = breakpoints; this._stickyBreakpoints[WebInspector.settings.projectId] = breakpoints;
BrowserDebuggerAgent.setAllBrowserBreakpoints(this._stickyBreakpoints);
}, },
_validateBreakpoints: function(persistentBreakpoints) _validateBreakpoints: function(persistentBreakpoints)
...@@ -275,10 +231,6 @@ WebInspector.BreakpointManager.prototype = { ...@@ -275,10 +231,6 @@ WebInspector.BreakpointManager.prototype = {
if (typeof condition.path !== "string" || typeof condition.type !== "number") if (typeof condition.path !== "string" || typeof condition.type !== "number")
continue; continue;
id += condition.path + ":" + condition.type; id += condition.path + ":" + condition.type;
} else if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.EventListener) {
if (typeof condition.eventName !== "string")
continue;
id += condition.eventName;
} else } else
continue; continue;
...@@ -293,11 +245,6 @@ WebInspector.BreakpointManager.prototype = { ...@@ -293,11 +245,6 @@ WebInspector.BreakpointManager.prototype = {
_createDOMBreakpointId: function(nodeId, type) _createDOMBreakpointId: function(nodeId, type)
{ {
return "dom:" + nodeId + ":" + type; return "dom:" + nodeId + ":" + type;
},
_createEventListenerBreakpointId: function(eventName)
{
return "eventListner:" + eventName;
} }
} }
...@@ -328,30 +275,6 @@ WebInspector.DOMBreakpoint.prototype = { ...@@ -328,30 +275,6 @@ WebInspector.DOMBreakpoint.prototype = {
} }
} }
WebInspector.EventListenerBreakpoint = function(eventName)
{
this._eventName = eventName;
}
WebInspector.EventListenerBreakpoint.prototype = {
_enable: function()
{
BrowserDebuggerAgent.setEventListenerBreakpoint(this._eventName);
},
_disable: function()
{
BrowserDebuggerAgent.removeEventListenerBreakpoint(this._eventName);
},
_serializeToJSON: function()
{
var type = WebInspector.BreakpointManager.BreakpointTypes.EventListener;
return { type: type, condition: { eventName: this._eventName } };
}
}
WebInspector.NativeBreakpointView = function(manager, id, enabled) WebInspector.NativeBreakpointView = function(manager, id, enabled)
{ {
this._manager = manager; this._manager = manager;
...@@ -485,54 +408,6 @@ WebInspector.DOMBreakpointView.prototype = { ...@@ -485,54 +408,6 @@ WebInspector.DOMBreakpointView.prototype = {
WebInspector.DOMBreakpointView.prototype.__proto__ = WebInspector.NativeBreakpointView.prototype; WebInspector.DOMBreakpointView.prototype.__proto__ = WebInspector.NativeBreakpointView.prototype;
WebInspector.EventListenerBreakpointView = function(manager, id, enabled, eventName)
{
WebInspector.NativeBreakpointView.call(this, manager, id, enabled);
this._eventName = eventName;
}
WebInspector.EventListenerBreakpointView.eventNameForUI = function(eventName)
{
if (!WebInspector.EventListenerBreakpointView._eventNamesForUI) {
WebInspector.EventListenerBreakpointView._eventNamesForUI = {
"instrumentation:setTimer": WebInspector.UIString("Set Timer"),
"instrumentation:clearTimer": WebInspector.UIString("Clear Timer"),
"instrumentation:timerFired": WebInspector.UIString("Timer Fired")
};
}
return WebInspector.EventListenerBreakpointView._eventNamesForUI[eventName] || eventName.substring(eventName.indexOf(":") + 1);
}
WebInspector.EventListenerBreakpointView.prototype = {
get eventName()
{
return this._eventName;
},
compareTo: function(other)
{
return this._compare(this._eventName, other._eventName);
},
populateLabelElement: function(element)
{
element.appendChild(document.createTextNode(this._uiEventName()));
},
populateStatusMessageElement: function(element, eventData)
{
var status = WebInspector.UIString("Paused on a \"%s\" Event Listener.", this._uiEventName());
element.appendChild(document.createTextNode(status));
},
_uiEventName: function()
{
return WebInspector.EventListenerBreakpointView.eventNameForUI(this._eventName);
}
}
WebInspector.EventListenerBreakpointView.prototype.__proto__ = WebInspector.NativeBreakpointView.prototype;
WebInspector.DOMBreakpointTypes = { WebInspector.DOMBreakpointTypes = {
SubtreeModified: 0, SubtreeModified: 0,
AttributeModified: 1, AttributeModified: 1,
......
...@@ -347,7 +347,7 @@ WebInspector.XHRBreakpointsSidebarPane.prototype = { ...@@ -347,7 +347,7 @@ WebInspector.XHRBreakpointsSidebarPane.prototype = {
this._addListElement(element, currentElement); this._addListElement(element, currentElement);
this._breakpointElements[url] = element; this._breakpointElements[url] = element;
if (enabled) if (enabled)
WebInspector.breakpointManager.setXHRBreakpoint(url); BrowserDebuggerAgent.setXHRBreakpoint(url);
}, },
_removeBreakpoint: function(url) _removeBreakpoint: function(url)
...@@ -359,7 +359,7 @@ WebInspector.XHRBreakpointsSidebarPane.prototype = { ...@@ -359,7 +359,7 @@ WebInspector.XHRBreakpointsSidebarPane.prototype = {
this._removeListElement(element); this._removeListElement(element);
delete this._breakpointElements[url]; delete this._breakpointElements[url];
if (element._checkboxElement.checked) if (element._checkboxElement.checked)
WebInspector.breakpointManager.removeXHRBreakpoint(url); BrowserDebuggerAgent.removeXHRBreakpoint(url);
}, },
_contextMenu: function(url, event) _contextMenu: function(url, event)
...@@ -546,9 +546,6 @@ WebInspector.EventListenerBreakpointsSidebarPane = function() ...@@ -546,9 +546,6 @@ WebInspector.EventListenerBreakpointsSidebarPane = function()
this.categoriesTreeOutline = new TreeOutline(this.categoriesElement); this.categoriesTreeOutline = new TreeOutline(this.categoriesElement);
this.bodyElement.appendChild(this.categoriesElement); this.bodyElement.appendChild(this.categoriesElement);
WebInspector.breakpointManager.addEventListener(WebInspector.BreakpointManager.Events.ProjectChanged, this._projectChanged, this);
WebInspector.breakpointManager.addEventListener(WebInspector.BreakpointManager.Events.EventListenerBreakpointAdded, this._breakpointAdded, this);
this._breakpointItems = {}; this._breakpointItems = {};
this._createCategory(WebInspector.UIString("Keyboard"), "listener", ["keydown", "keyup", "keypress", "textInput"]); this._createCategory(WebInspector.UIString("Keyboard"), "listener", ["keydown", "keyup", "keypress", "textInput"]);
this._createCategory(WebInspector.UIString("Mouse"), "listener", ["click", "dblclick", "mousedown", "mouseup", "mouseover", "mousemove", "mouseout", "mousewheel"]); this._createCategory(WebInspector.UIString("Mouse"), "listener", ["click", "dblclick", "mousedown", "mouseup", "mouseover", "mousemove", "mouseout", "mousewheel"]);
...@@ -561,6 +558,20 @@ WebInspector.EventListenerBreakpointsSidebarPane = function() ...@@ -561,6 +558,20 @@ WebInspector.EventListenerBreakpointsSidebarPane = function()
this._createCategory(WebInspector.UIString("DOM Mutation"), "listener", ["DOMActivate", "DOMFocusIn", "DOMFocusOut", "DOMAttrModified", "DOMCharacterDataModified", "DOMNodeInserted", "DOMNodeInsertedIntoDocument", "DOMNodeRemoved", "DOMNodeRemovedFromDocument", "DOMSubtreeModified", "DOMContentLoaded"]); this._createCategory(WebInspector.UIString("DOM Mutation"), "listener", ["DOMActivate", "DOMFocusIn", "DOMFocusOut", "DOMAttrModified", "DOMCharacterDataModified", "DOMNodeInserted", "DOMNodeInsertedIntoDocument", "DOMNodeRemoved", "DOMNodeRemovedFromDocument", "DOMSubtreeModified", "DOMContentLoaded"]);
this._createCategory(WebInspector.UIString("Device"), "listener", ["deviceorientation", "devicemotion"]); this._createCategory(WebInspector.UIString("Device"), "listener", ["deviceorientation", "devicemotion"]);
this._createCategory(WebInspector.UIString("Timer"), "instrumentation", ["setTimer", "clearTimer", "timerFired"]); this._createCategory(WebInspector.UIString("Timer"), "instrumentation", ["setTimer", "clearTimer", "timerFired"]);
this._restoreBreakpoints();
}
WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI = function(eventName)
{
if (!WebInspector.EventListenerBreakpointsSidebarPane._eventNamesForUI) {
WebInspector.EventListenerBreakpointsSidebarPane._eventNamesForUI = {
"instrumentation:setTimer": WebInspector.UIString("Set Timer"),
"instrumentation:clearTimer": WebInspector.UIString("Clear Timer"),
"instrumentation:timerFired": WebInspector.UIString("Timer Fired")
};
}
return WebInspector.EventListenerBreakpointsSidebarPane._eventNamesForUI[eventName] || eventName.substring(eventName.indexOf(":") + 1);
} }
WebInspector.EventListenerBreakpointsSidebarPane.prototype = { WebInspector.EventListenerBreakpointsSidebarPane.prototype = {
...@@ -580,7 +591,7 @@ WebInspector.EventListenerBreakpointsSidebarPane.prototype = { ...@@ -580,7 +591,7 @@ WebInspector.EventListenerBreakpointsSidebarPane.prototype = {
var eventName = type + ":" + eventNames[i]; var eventName = type + ":" + eventNames[i];
var breakpointItem = {}; var breakpointItem = {};
var title = WebInspector.EventListenerBreakpointView.eventNameForUI(eventName); var title = WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI(eventName);
breakpointItem.element = new TreeElement(title); breakpointItem.element = new TreeElement(title);
categoryItem.element.appendChild(breakpointItem.element); categoryItem.element.appendChild(breakpointItem.element);
var hitMarker = document.createElement("div"); var hitMarker = document.createElement("div");
...@@ -590,9 +601,8 @@ WebInspector.EventListenerBreakpointsSidebarPane.prototype = { ...@@ -590,9 +601,8 @@ WebInspector.EventListenerBreakpointsSidebarPane.prototype = {
breakpointItem.element.selectable = true; breakpointItem.element.selectable = true;
breakpointItem.checkbox = this._createCheckbox(breakpointItem.element); breakpointItem.checkbox = this._createCheckbox(breakpointItem.element);
breakpointItem.checkbox.addEventListener("click", this._breakpointCheckboxClicked.bind(this, breakpointItem), true); breakpointItem.checkbox.addEventListener("click", this._breakpointCheckboxClicked.bind(this, eventName), true);
breakpointItem.parent = categoryItem; breakpointItem.parent = categoryItem;
breakpointItem.eventName = eventName;
this._breakpointItems[eventName] = breakpointItem; this._breakpointItems[eventName] = breakpointItem;
categoryItem.children[eventName] = breakpointItem; categoryItem.children[eventName] = breakpointItem;
...@@ -613,54 +623,47 @@ WebInspector.EventListenerBreakpointsSidebarPane.prototype = { ...@@ -613,54 +623,47 @@ WebInspector.EventListenerBreakpointsSidebarPane.prototype = {
var checked = categoryItem.checkbox.checked; var checked = categoryItem.checkbox.checked;
for (var eventName in categoryItem.children) { for (var eventName in categoryItem.children) {
var breakpointItem = categoryItem.children[eventName]; var breakpointItem = categoryItem.children[eventName];
if (breakpointItem.checkbox.checked !== checked) { if (breakpointItem.checkbox.checked === checked)
breakpointItem.checkbox.checked = checked; continue;
this._breakpointCheckboxClicked(breakpointItem); if (checked)
} this._setBreakpoint(eventName);
else
this._removeBreakpoint(eventName);
} }
this._saveBreakpoints();
}, },
_breakpointCheckboxClicked: function(breakpointItem) _breakpointCheckboxClicked: function(eventName, event)
{ {
if (breakpointItem.checkbox.checked) if (event.target.checked)
WebInspector.breakpointManager.createEventListenerBreakpoint(breakpointItem.eventName); this._setBreakpoint(eventName);
else else
breakpointItem.breakpoint.remove(); this._removeBreakpoint(eventName);
this._saveBreakpoints();
}, },
_breakpointAdded: function(event) _setBreakpoint: function(eventName)
{ {
var breakpoint = event.data; var breakpointItem = this._breakpointItems[eventName];
if (!breakpointItem)
var breakpointItem = this._breakpointItems[breakpoint.eventName]; return;
breakpointItem.breakpoint = breakpoint;
breakpoint.addEventListener("hit-state-changed", this._breakpointHitStateChanged.bind(this, breakpointItem));
breakpoint.addEventListener("removed", this._breakpointRemoved.bind(this, breakpointItem));
breakpointItem.checkbox.checked = true; breakpointItem.checkbox.checked = true;
this._updateCategoryCheckbox(breakpointItem); BrowserDebuggerAgent.setEventListenerBreakpoint(eventName);
}, this._updateCategoryCheckbox(breakpointItem.parent);
_breakpointHitStateChanged: function(breakpointItem, event)
{
if (event.target.hit) {
this.expanded = true;
var categoryItem = breakpointItem.parent;
categoryItem.element.expand();
breakpointItem.element.listItemElement.addStyleClass("breakpoint-hit");
} else
breakpointItem.element.listItemElement.removeStyleClass("breakpoint-hit");
}, },
_breakpointRemoved: function(breakpointItem) _removeBreakpoint: function(eventName)
{ {
breakpointItem.breakpoint = null; var breakpointItem = this._breakpointItems[eventName];
if (!breakpointItem)
return;
breakpointItem.checkbox.checked = false; breakpointItem.checkbox.checked = false;
this._updateCategoryCheckbox(breakpointItem); BrowserDebuggerAgent.removeEventListenerBreakpoint(eventName);
this._updateCategoryCheckbox(breakpointItem.parent);
}, },
_updateCategoryCheckbox: function(breakpointItem) _updateCategoryCheckbox: function(categoryItem)
{ {
var categoryItem = breakpointItem.parent;
var hasEnabled = false, hasDisabled = false; var hasEnabled = false, hasDisabled = false;
for (var eventName in categoryItem.children) { for (var eventName in categoryItem.children) {
var breakpointItem = categoryItem.children[eventName]; var breakpointItem = categoryItem.children[eventName];
...@@ -673,13 +676,42 @@ WebInspector.EventListenerBreakpointsSidebarPane.prototype = { ...@@ -673,13 +676,42 @@ WebInspector.EventListenerBreakpointsSidebarPane.prototype = {
categoryItem.checkbox.indeterminate = hasEnabled && hasDisabled; categoryItem.checkbox.indeterminate = hasEnabled && hasDisabled;
}, },
_projectChanged: function() highlightBreakpoint: function(eventName)
{ {
var breakpointItem = this._breakpointItems[eventName];
if (!breakpointItem)
return;
this.expanded = true;
breakpointItem.parent.element.expand();
breakpointItem.element.listItemElement.addStyleClass("breakpoint-hit");
this._highlightedElement = breakpointItem.element.listItemElement;
},
clearBreakpointHighlight: function()
{
if (this._highlightedElement) {
this._highlightedElement.removeStyleClass("breakpoint-hit");
delete this._highlightedElement;
}
},
_saveBreakpoints: function()
{
var breakpoints = [];
for (var eventName in this._breakpointItems) { for (var eventName in this._breakpointItems) {
var breakpointItem = this._breakpointItems[eventName]; if (this._breakpointItems[eventName].checkbox.checked)
breakpointItem.breakpoint = null; breakpoints.push({ eventName: eventName });
breakpointItem.checkbox.checked = false; }
this._updateCategoryCheckbox(breakpointItem); WebInspector.settings.eventListenerBreakpoints = breakpoints;
},
_restoreBreakpoints: function()
{
var breakpoints = WebInspector.settings.eventListenerBreakpoints;
for (var i = 0; i < breakpoints.length; ++i) {
var breakpoint = breakpoints[i];
if (breakpoint && typeof breakpoint.eventName === "string")
this._setBreakpoint(breakpoint.eventName);
} }
} }
} }
......
...@@ -85,13 +85,9 @@ WebInspector.CallStackSidebarPane.prototype = { ...@@ -85,13 +85,9 @@ WebInspector.CallStackSidebarPane.prototype = {
this._text += WebInspector.UIString("%s() at %s", i + 1, title, subtitle) + "\n"; this._text += WebInspector.UIString("%s() at %s", i + 1, title, subtitle) + "\n";
} }
if (details.breakpoint) if (details.eventType === WebInspector.DebuggerEventTypes.NativeBreakpoint) {
this._scriptBreakpointHit(); if (details.eventData.breakpointType === WebInspector.BreakpointManager.BreakpointTypes.DOM)
else if (details.eventType === WebInspector.DebuggerEventTypes.NativeBreakpoint) { this._domBreakpointHit(details.eventData);
if (details.eventData.breakpointType === WebInspector.BreakpointManager.BreakpointTypes.XHR)
this._xhrBreakpointHit();
else
this._nativeBreakpointHit(details.eventData);
} }
}, },
...@@ -182,23 +178,15 @@ WebInspector.CallStackSidebarPane.prototype = { ...@@ -182,23 +178,15 @@ WebInspector.CallStackSidebarPane.prototype = {
section.addRelatedKeys([ nextCallFrame.name, prevCallFrame.name ], WebInspector.UIString("Next/previous call frame")); section.addRelatedKeys([ nextCallFrame.name, prevCallFrame.name ], WebInspector.UIString("Next/previous call frame"));
}, },
_scriptBreakpointHit: function() setStatus: function(status)
{
var statusMessageElement = document.createElement("div");
statusMessageElement.className = "info";
statusMessageElement.appendChild(document.createTextNode(WebInspector.UIString("Paused on a JavaScript breakpoint.")));
this.bodyElement.appendChild(statusMessageElement);
},
_xhrBreakpointHit: function()
{ {
var statusMessageElement = document.createElement("div"); var statusMessageElement = document.createElement("div");
statusMessageElement.className = "info"; statusMessageElement.className = "info";
statusMessageElement.textContent = WebInspector.UIString("Paused on a XMLHttpRequest."); statusMessageElement.textContent = status;
this.bodyElement.appendChild(statusMessageElement); this.bodyElement.appendChild(statusMessageElement);
}, },
_nativeBreakpointHit: function(eventData) _domBreakpointHit: function(eventData)
{ {
var breakpoint = WebInspector.breakpointManager.breakpointViewForEventData(eventData); var breakpoint = WebInspector.breakpointManager.breakpointViewForEventData(eventData);
if (!breakpoint) if (!breakpoint)
......
...@@ -438,13 +438,25 @@ WebInspector.ScriptsPanel.prototype = { ...@@ -438,13 +438,25 @@ WebInspector.ScriptsPanel.prototype = {
this.sidebarPanes.callstack.update(event.data); this.sidebarPanes.callstack.update(event.data);
this.sidebarPanes.callstack.selectedCallFrame = callFrames[0]; this.sidebarPanes.callstack.selectedCallFrame = callFrames[0];
var status;
if (details.eventType === WebInspector.DebuggerEventTypes.NativeBreakpoint) { if (details.eventType === WebInspector.DebuggerEventTypes.NativeBreakpoint) {
if (details.eventData.breakpointType === WebInspector.BreakpointManager.BreakpointTypes.XHR) if (details.eventData.breakpointType === WebInspector.BreakpointManager.BreakpointTypes.EventListener) {
var eventName = details.eventData.eventName;
this.sidebarPanes.eventListenerBreakpoints.highlightBreakpoint(details.eventData.eventName);
var eventNameForUI = WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI(eventName);
status = WebInspector.UIString("Paused on a \"%s\" Event Listener.", eventNameForUI);
} else if (details.eventData.breakpointType === WebInspector.BreakpointManager.BreakpointTypes.XHR) {
this.sidebarPanes.xhrBreakpoints.highlightBreakpoint(details.eventData.breakpointURL); this.sidebarPanes.xhrBreakpoints.highlightBreakpoint(details.eventData.breakpointURL);
status = WebInspector.UIString("Paused on a XMLHttpRequest.");
}
} else { } else {
var sourceLocation = this._presentationModel.selectedCallFrame.sourceLocation; var sourceLocation = this._presentationModel.selectedCallFrame.sourceLocation;
this.sidebarPanes.jsBreakpoints.highlightBreakpoint(sourceLocation.sourceFileId, sourceLocation.lineNumber); this.sidebarPanes.jsBreakpoints.highlightBreakpoint(sourceLocation.sourceFileId, sourceLocation.lineNumber);
if (details.breakpoint)
status = WebInspector.UIString("Paused on a JavaScript breakpoint.");
} }
if (status)
this.sidebarPanes.callstack.setStatus(status);
window.focus(); window.focus();
InspectorFrontendHost.bringToFront(); InspectorFrontendHost.bringToFront();
...@@ -806,8 +818,10 @@ WebInspector.ScriptsPanel.prototype = { ...@@ -806,8 +818,10 @@ WebInspector.ScriptsPanel.prototype = {
this.sidebarPanes.callstack.update(null); this.sidebarPanes.callstack.update(null);
this.sidebarPanes.scopechain.update(null); this.sidebarPanes.scopechain.update(null);
this.sidebarPanes.jsBreakpoints.clearBreakpointHighlight(); this.sidebarPanes.jsBreakpoints.clearBreakpointHighlight();
if (Preferences.nativeInstrumentationEnabled) if (Preferences.nativeInstrumentationEnabled) {
this.sidebarPanes.eventListenerBreakpoints.clearBreakpointHighlight();
this.sidebarPanes.xhrBreakpoints.clearBreakpointHighlight(); this.sidebarPanes.xhrBreakpoints.clearBreakpointHighlight();
}
this._clearCurrentExecutionLine(); this._clearCurrentExecutionLine();
this._updateDebuggerButtons(); this._updateDebuggerButtons();
......
...@@ -71,6 +71,7 @@ WebInspector.Settings = function() ...@@ -71,6 +71,7 @@ WebInspector.Settings = function()
this.installApplicationSetting("showUserAgentStyles", true); this.installApplicationSetting("showUserAgentStyles", true);
this.installApplicationSetting("watchExpressions", []); this.installApplicationSetting("watchExpressions", []);
this.installApplicationSetting("breakpoints", []); this.installApplicationSetting("breakpoints", []);
this.installApplicationSetting("eventListenerBreakpoints", []);
this.installApplicationSetting("xhrBreakpoints", []); this.installApplicationSetting("xhrBreakpoints", []);
this.installProjectSetting("nativeBreakpoints", []); this.installProjectSetting("nativeBreakpoints", []);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment