Changeset 76581 in webkit


Ignore:
Timestamp:
Jan 25, 2011 1:44:30 AM (13 years ago)
Author:
podivilov@chromium.org
Message:

2011-01-24 Pavel Podivilov <podivilov@chromium.org>

Reviewed by Pavel Feldman.

Web Inspector: debugger and browser debugger agents should manage sticky breakpoints independently.
https://bugs.webkit.org/show_bug.cgi?id=52999

  • inspector/Inspector.idl:
  • inspector/InspectorAgent.cpp: (WebCore::InspectorAgent::didCommitLoad): (WebCore::InspectorAgent::enableDebugger): (WebCore::InspectorAgent::inspectedURLWithoutFragment):
  • inspector/InspectorAgent.h:
  • inspector/InspectorBrowserDebuggerAgent.cpp: (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints): (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged): (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
  • inspector/InspectorBrowserDebuggerAgent.h:
  • inspector/InspectorDebuggerAgent.cpp: (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent): (WebCore::InspectorDebuggerAgent::setAllJavaScriptBreakpoints): (WebCore::InspectorDebuggerAgent::inspectedURLChanged): (WebCore::InspectorDebuggerAgent::restoreBreakpoints):
  • inspector/InspectorDebuggerAgent.h:
  • inspector/InspectorState.cpp: (WebCore::InspectorState::InspectorState):
  • inspector/InspectorState.h:
  • inspector/front-end/BreakpointManager.js: (WebInspector.BreakpointManager): (WebInspector.BreakpointManager.prototype._projectChanged): (WebInspector.BreakpointManager.prototype._saveBreakpoints): (WebInspector.BreakpointManager.prototype._pushBreakpointsToBackend):
Location:
trunk/Source/WebCore
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r76578 r76581  
     12011-01-24  Pavel Podivilov  <podivilov@chromium.org>
     2
     3        Reviewed by Pavel Feldman.
     4
     5        Web Inspector: debugger and browser debugger agents should manage sticky breakpoints independently.
     6        https://bugs.webkit.org/show_bug.cgi?id=52999
     7
     8        * inspector/Inspector.idl:
     9        * inspector/InspectorAgent.cpp:
     10        (WebCore::InspectorAgent::didCommitLoad):
     11        (WebCore::InspectorAgent::enableDebugger):
     12        (WebCore::InspectorAgent::inspectedURLWithoutFragment):
     13        * inspector/InspectorAgent.h:
     14        * inspector/InspectorBrowserDebuggerAgent.cpp:
     15        (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints):
     16        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
     17        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
     18        * inspector/InspectorBrowserDebuggerAgent.h:
     19        * inspector/InspectorDebuggerAgent.cpp:
     20        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
     21        (WebCore::InspectorDebuggerAgent::setAllJavaScriptBreakpoints):
     22        (WebCore::InspectorDebuggerAgent::inspectedURLChanged):
     23        (WebCore::InspectorDebuggerAgent::restoreBreakpoints):
     24        * inspector/InspectorDebuggerAgent.h:
     25        * inspector/InspectorState.cpp:
     26        (WebCore::InspectorState::InspectorState):
     27        * inspector/InspectorState.h:
     28        * inspector/front-end/BreakpointManager.js:
     29        (WebInspector.BreakpointManager):
     30        (WebInspector.BreakpointManager.prototype._projectChanged):
     31        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
     32        (WebInspector.BreakpointManager.prototype._pushBreakpointsToBackend):
     33
    1342011-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>
    235
  • trunk/Source/WebCore/inspector/Inspector.idl

    r76509 r76581  
    243243        [domain=Inspector] void disableDebugger(in boolean always);
    244244
    245         [domain=Inspector] void setAllBrowserBreakpoints(in Object breakpoints);
    246 
    247245        [notify, domain=Debugger] void debuggerWasEnabled();
    248246        [notify, domain=Debugger] void debuggerWasDisabled();
     
    254252        [domain=Debugger] void deactivateBreakpoints();
    255253
     254        [domain=Debugger] void setAllJavaScriptBreakpoints(in Object breakpoints);
    256255        [domain=Debugger] void setBreakpoint(in Object breakpoint, out String breakpointId, out long actualLineNumber, out long actualColumnNumber);
    257256        [domain=Debugger] void removeBreakpoint(in String breakpointId);
    258257
     258        [domain=BrowserDebugger] void setAllBrowserBreakpoints(in Object breakpoints);
    259259        [domain=BrowserDebugger] void setDOMBreakpoint(in long nodeId, in long type);
    260260        [domain=BrowserDebugger] void removeDOMBreakpoint(in long nodeId, in long type);
  • trunk/Source/WebCore/inspector/InspectorAgent.cpp

    r76459 r76581  
    645645#if ENABLE(JAVASCRIPT_DEBUGGER)
    646646        if (m_debuggerAgent) {
    647             m_debuggerAgent->clearForPageNavigation();
     647            KURL url = inspectedURLWithoutFragment();
     648            m_debuggerAgent->inspectedURLChanged(url);
    648649            if (m_browserDebuggerAgent)
    649                 m_browserDebuggerAgent->inspectedURLChanged(inspectedURL());
     650                m_browserDebuggerAgent->inspectedURLChanged(url);
    650651        }
    651652#endif
     
    10531054    m_debuggerAgent = InspectorDebuggerAgent::create(this, m_frontend.get());
    10541055    m_browserDebuggerAgent = InspectorBrowserDebuggerAgent::create(this);
    1055     m_browserDebuggerAgent->inspectedURLChanged(inspectedURL());
    10561056
    10571057    m_frontend->debuggerWasEnabled();
     
    13911391}
    13921392
     1393KURL InspectorAgent::inspectedURLWithoutFragment() const
     1394{
     1395    KURL url = inspectedURL();
     1396    url.removeFragmentIdentifier();
     1397    return url;
     1398}
     1399
    13931400void InspectorAgent::reloadPage()
    13941401{
  • trunk/Source/WebCore/inspector/InspectorAgent.h

    r76459 r76581  
    129129    Page* inspectedPage() const { return m_inspectedPage; }
    130130    KURL inspectedURL() const;
     131    KURL inspectedURLWithoutFragment() const;
    131132    void reloadPage();
    132133
  • trunk/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp

    r76509 r76581  
    7272}
    7373
    74 void InspectorBrowserDebuggerAgent::inspectedURLChanged(const KURL& url)
     74void InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints(PassRefPtr<InspectorObject> breakpoints)
     75{
     76    m_inspectorAgent->state()->setObject(InspectorState::browserBreakpoints, breakpoints);
     77    inspectedURLChanged(m_inspectorAgent->inspectedURLWithoutFragment());
     78}
     79
     80void InspectorBrowserDebuggerAgent::inspectedURLChanged(const String& url)
    7581{
    7682    m_eventListenerBreakpoints.clear();
     
    7985
    8086    RefPtr<InspectorObject> allBreakpoints = m_inspectorAgent->state()->getObject(InspectorState::browserBreakpoints);
    81     KURL urlCopy = url;
    82     urlCopy.removeFragmentIdentifier();
    83     RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(urlCopy);
     87    RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(url);
    8488    if (!breakpoints)
    8589        return;
     
    9094void InspectorBrowserDebuggerAgent::restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint)
    9195{
    92     DEFINE_STATIC_LOCAL(String, eventListenerBreakpointType, ("EventListener"));
    93     DEFINE_STATIC_LOCAL(String, javaScriptBreakpointType, ("JS"));
    94     DEFINE_STATIC_LOCAL(String, xhrBreakpointType, ("XHR"));
    95 
    9696    if (!breakpoint)
    9797        return;
     
    106106        return;
    107107
    108     if (type == eventListenerBreakpointType) {
     108    if (type == eventListenerNativeBreakpointType) {
    109109        if (!enabled)
    110110            return;
     
    113113            return;
    114114        setEventListenerBreakpoint(eventName);
    115     } else if (type == javaScriptBreakpointType && m_inspectorAgent->debuggerAgent()) {
    116         String url;
    117         if (!condition->getString("url", &url))
    118             return;
    119         double lineNumber;
    120         if (!condition->getNumber("lineNumber", &lineNumber))
    121             return;
    122         double columnNumber;
    123         if (!condition->getNumber("columnNumber", &columnNumber))
    124             return;
    125         String javaScriptCondition;
    126         if (!condition->getString("condition", &javaScriptCondition))
    127             return;
    128         m_inspectorAgent->debuggerAgent()->setStickyBreakpoint(url, ScriptBreakpoint(long(lineNumber), long(columnNumber), javaScriptCondition, enabled));
    129     } else if (type == xhrBreakpointType) {
     115    } else if (type == xhrNativeBreakpointType) {
    130116        if (!enabled)
    131117            return;
  • trunk/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h

    r76459 r76581  
    4747class InspectorAgent;
    4848class InspectorObject;
    49 class KURL;
    5049class Node;
    5150
     
    6059    virtual ~InspectorBrowserDebuggerAgent();
    6160
    62     void inspectedURLChanged(const KURL&);
     61    void setAllBrowserBreakpoints(PassRefPtr<InspectorObject>);
     62    void inspectedURLChanged(const String& url);
    6363
    6464    // BrowserDebugger API for InspectorFrontend
  • trunk/Source/WebCore/inspector/InspectorDebuggerAgent.cpp

    r76512 r76581  
    3535#include "InjectedScriptHost.h"
    3636#include "InspectorFrontend.h"
     37#include "InspectorState.h"
    3738#include "InspectorValues.h"
    3839#include "PlatformString.h"
     
    5657    , m_pausedScriptState(0)
    5758    , m_javaScriptPauseScheduled(false)
     59    , m_breakpointsRestored(false)
    5860{
    5961}
     
    7880{
    7981    ScriptDebugServer::shared().deactivateBreakpoints();
     82}
     83
     84void InspectorDebuggerAgent::setAllJavaScriptBreakpoints(PassRefPtr<InspectorObject> breakpoints)
     85{
     86    m_inspectorAgent->state()->setObject(InspectorState::javaScriptBreakpoints, breakpoints);
     87    if (!m_breakpointsRestored) {
     88        restoreBreakpoints(m_inspectorAgent->inspectedURLWithoutFragment());
     89        m_breakpointsRestored = true;
     90    }
     91}
     92
     93void InspectorDebuggerAgent::inspectedURLChanged(const String& url)
     94{
     95    m_scriptIDToContent.clear();
     96    m_urlToSourceIDs.clear();
     97    restoreBreakpoints(url);
     98}
     99
     100void InspectorDebuggerAgent::restoreBreakpoints(const String& inspectedURL)
     101{
     102    m_stickyBreakpoints.clear();
     103
     104    RefPtr<InspectorObject> allBreakpoints = m_inspectorAgent->state()->getObject(InspectorState::javaScriptBreakpoints);
     105    RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(inspectedURL);
     106    if (!breakpoints)
     107        return;
     108    for (unsigned i = 0; i < breakpoints->length(); ++i) {
     109        RefPtr<InspectorObject> breakpoint = breakpoints->get(i)->asObject();
     110        if (!breakpoint)
     111            continue;
     112        String url;
     113        if (!breakpoint->getString("url", &url))
     114            continue;
     115        double lineNumber;
     116        if (!breakpoint->getNumber("lineNumber", &lineNumber))
     117            continue;
     118        double columnNumber;
     119        if (!breakpoint->getNumber("columnNumber", &columnNumber))
     120            return;
     121        String condition;
     122        if (!breakpoint->getString("condition", &condition))
     123            continue;
     124        bool enabled;
     125        if (!breakpoint->getBoolean("enabled", &enabled))
     126            continue;
     127        ScriptBreakpoint scriptBreakpoint((long) lineNumber, (long) columnNumber, condition, enabled);
     128        setStickyBreakpoint(url, scriptBreakpoint);
     129    }
    80130}
    81131
     
    214264}
    215265
    216 void InspectorDebuggerAgent::clearForPageNavigation()
    217 {
    218     m_scriptIDToContent.clear();
    219     m_urlToSourceIDs.clear();
    220     m_stickyBreakpoints.clear();
    221 }
    222 
    223266PassRefPtr<InspectorValue> InspectorDebuggerAgent::currentCallFrames()
    224267{
  • trunk/Source/WebCore/inspector/InspectorDebuggerAgent.h

    r76509 r76581  
    6363    static bool isDebuggerAlwaysEnabled();
    6464
     65    void setAllJavaScriptBreakpoints(PassRefPtr<InspectorObject>);
     66    void inspectedURLChanged(const String& url);
     67
    6568    // Part of the protocol.
    6669    void activateBreakpoints();
     
    8386    void getCompletionsOnCallFrame(PassRefPtr<InspectorObject> callFrameId, const String& expression, bool includeInspectorCommandLineAPI, RefPtr<InspectorValue>* result);
    8487
    85     void clearForPageNavigation();
    86 
    8788private:
    8889    InspectorDebuggerAgent(InspectorAgent*, InspectorFrontend*);
     
    9596    virtual void didContinue();
    9697
     98    void restoreBreakpoints(const String& inspectedURL);
    9799    void restoreBreakpoint(const String& sourceID, const ScriptBreakpoint&);
    98100
     
    110112    RefPtr<InspectorObject> m_breakProgramDetails;
    111113    bool m_javaScriptPauseScheduled;
     114    bool m_breakpointsRestored;
    112115};
    113116
  • trunk/Source/WebCore/inspector/InspectorState.cpp

    r76348 r76581  
    4343    registerBoolean(timelineProfilerEnabled, false);
    4444    registerBoolean(searchingForNode, false);
     45    registerObject(javaScriptBreakpoints);
    4546    registerObject(browserBreakpoints);
    4647    registerBoolean(consoleMessagesEnabled, false);
  • trunk/Source/WebCore/inspector/InspectorState.h

    r76348 r76581  
    5050        consoleMessagesEnabled,
    5151        userInitiatedProfiling,
     52        javaScriptBreakpoints,
    5253        browserBreakpoints,
    5354        resourceAgentEnabled,
  • trunk/Source/WebCore/inspector/front-end/BreakpointManager.js

    r76509 r76581  
    3535    for (var projectId in breakpoints)
    3636        this._stickyBreakpoints[projectId] = this._validateBreakpoints(breakpoints[projectId]);
    37     InspectorBackend.setAllBrowserBreakpoints(this._stickyBreakpoints);
    3837
    3938    this._breakpoints = {};
     
    245244            else if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.XHR)
    246245                this._createXHRBreakpoint(breakpoint.condition.url, breakpoint.enabled, true);
     246        }
     247
     248        if (!this._breakpointsPushedToFrontend) {
     249            this._pushBreakpointsToBackend();
     250            this._breakpointsPushedToFrontend = true;
    247251        }
    248252    },
     
    304308
    305309        this._stickyBreakpoints[WebInspector.settings.projectId] = breakpoints;
    306         InspectorBackend.setAllBrowserBreakpoints(this._stickyBreakpoints);
     310        this._pushBreakpointsToBackend();
     311    },
     312
     313    _pushBreakpointsToBackend: function()
     314    {
     315        var allJavaScriptBreakpoints = {};
     316        var allBrowserBreakpoints = {};
     317        for (var projectId in this._stickyBreakpoints) {
     318            var breakpoints = this._stickyBreakpoints[projectId];
     319            var javaScriptBreakpoints = [];
     320            var browserBreakpoints = [];
     321            for (var i = 0; i < breakpoints.length; ++i) {
     322                if (breakpoints[i].type == WebInspector.BreakpointManager.BreakpointTypes.JS) {
     323                    var data = {};
     324                    data.enabled = breakpoints[i].enabled;
     325                    for (var p in breakpoints[i].condition)
     326                        data[p] = breakpoints[i].condition[p];
     327                    javaScriptBreakpoints.push(data);
     328                } else
     329                    browserBreakpoints.push(breakpoints[i]);
     330            }
     331            if (javaScriptBreakpoints.length)
     332                allJavaScriptBreakpoints[projectId] = javaScriptBreakpoints;
     333            if (browserBreakpoints.length)
     334                allBrowserBreakpoints[projectId] = browserBreakpoints;
     335        }
     336        InspectorBackend.setAllJavaScriptBreakpoints(allJavaScriptBreakpoints);
     337        InspectorBackend.setAllBrowserBreakpoints(allBrowserBreakpoints);
    307338    },
    308339
Note: See TracChangeset for help on using the changeset viewer.