Changeset 76348 in webkit


Ignore:
Timestamp:
Jan 21, 2011 8:08:45 AM (13 years ago)
Author:
podivilov@chromium.org
Message:

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

Reviewed by Pavel Feldman.

Web Inspector: move sticky breakpoints management from InspectorController to InspectorBrowserDebuggerAgent.
https://bugs.webkit.org/show_bug.cgi?id=52874

This is the first step of debugger api refactoring (see bug 52879).
JavaScript breakpoints are still in the same list as native breakpoints and are restored by InspectorBrowserDebuggerAgent.
The second step will be to move sticky JavaScript breakpoints to InspectorDebuggerAgent.

  • inspector/Inspector.idl:
  • inspector/InspectorBrowserDebuggerAgent.cpp: (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints): (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged): (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint): (WebCore::InspectorBrowserDebuggerAgent::discardBindings): (WebCore::InspectorBrowserDebuggerAgent::didInsertDOMNode): (WebCore::InspectorBrowserDebuggerAgent::didRemoveDOMNode): (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint): (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint): (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent): (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint): (WebCore::InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints):
  • inspector/InspectorBrowserDebuggerAgent.h:
  • inspector/InspectorController.cpp: (WebCore::InspectorController::restoreInspectorStateFromCookie): (WebCore::InspectorController::connectFrontend): (WebCore::InspectorController::didCommitLoad): (WebCore::InspectorController::enableDebugger): (WebCore::InspectorController::resume): (WebCore::InspectorController::inspectedURL):
  • inspector/InspectorController.h:
  • inspector/InspectorState.cpp: (WebCore::InspectorState::InspectorState):
  • inspector/InspectorState.h:
  • inspector/front-end/BreakpointManager.js: (WebInspector.BreakpointManager): (WebInspector.BreakpointManager.prototype._saveBreakpoints):
Location:
trunk/Source/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r76347 r76348  
     12011-01-21  Pavel Podivilov  <podivilov@chromium.org>
     2
     3        Reviewed by Pavel Feldman.
     4
     5        Web Inspector: move sticky breakpoints management from InspectorController to InspectorBrowserDebuggerAgent.
     6        https://bugs.webkit.org/show_bug.cgi?id=52874
     7
     8        This is the first step of debugger api refactoring (see bug 52879).
     9        JavaScript breakpoints are still in the same list as native breakpoints and are restored by InspectorBrowserDebuggerAgent.
     10        The second step will be to move sticky JavaScript breakpoints to InspectorDebuggerAgent.
     11
     12        * inspector/Inspector.idl:
     13        * inspector/InspectorBrowserDebuggerAgent.cpp:
     14        (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints):
     15        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
     16        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
     17        (WebCore::InspectorBrowserDebuggerAgent::discardBindings):
     18        (WebCore::InspectorBrowserDebuggerAgent::didInsertDOMNode):
     19        (WebCore::InspectorBrowserDebuggerAgent::didRemoveDOMNode):
     20        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
     21        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
     22        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
     23        (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint):
     24        (WebCore::InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints):
     25        * inspector/InspectorBrowserDebuggerAgent.h:
     26        * inspector/InspectorController.cpp:
     27        (WebCore::InspectorController::restoreInspectorStateFromCookie):
     28        (WebCore::InspectorController::connectFrontend):
     29        (WebCore::InspectorController::didCommitLoad):
     30        (WebCore::InspectorController::enableDebugger):
     31        (WebCore::InspectorController::resume):
     32        (WebCore::InspectorController::inspectedURL):
     33        * inspector/InspectorController.h:
     34        * inspector/InspectorState.cpp:
     35        (WebCore::InspectorState::InspectorState):
     36        * inspector/InspectorState.h:
     37        * inspector/front-end/BreakpointManager.js:
     38        (WebInspector.BreakpointManager):
     39        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
     40
    1412011-01-21  John Knottenbelt  <jknotten@chromium.org>
    242
  • trunk/Source/WebCore/inspector/Inspector.idl

    r76249 r76348  
    243243        [domain=Inspector] void disableDebugger(in boolean always);
    244244
    245         [domain=Inspector] void setStickyBreakpoints(in Object breakpoints);
     245        [domain=Inspector] void setAllBrowserBreakpoints(in Object breakpoints);
    246246
    247247        [notify, domain=Debugger] void debuggerWasEnabled();
  • trunk/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp

    r76240 r76348  
    7272}
    7373
     74void InspectorBrowserDebuggerAgent::inspectedURLChanged(const KURL& url)
     75{
     76    m_eventListenerBreakpoints.clear();
     77    m_XHRBreakpoints.clear();
     78    m_hasXHRBreakpointWithEmptyURL = false;
     79
     80    RefPtr<InspectorObject> allBreakpoints = m_inspectorController->state()->getObject(InspectorState::browserBreakpoints);
     81    KURL urlCopy = url;
     82    urlCopy.removeFragmentIdentifier();
     83    RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(urlCopy);
     84    if (!breakpoints)
     85        return;
     86    for (unsigned i = 0; i < breakpoints->length(); ++i)
     87        restoreStickyBreakpoint(breakpoints->get(i)->asObject());
     88}
     89
     90void InspectorBrowserDebuggerAgent::restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint)
     91{
     92    DEFINE_STATIC_LOCAL(String, eventListenerBreakpointType, ("EventListener"));
     93    DEFINE_STATIC_LOCAL(String, javaScriptBreakpointType, ("JS"));
     94    DEFINE_STATIC_LOCAL(String, xhrBreakpointType, ("XHR"));
     95
     96    if (!breakpoint)
     97        return;
     98    String type;
     99    if (!breakpoint->getString("type", &type))
     100        return;
     101    bool enabled;
     102    if (!breakpoint->getBoolean("enabled", &enabled))
     103        return;
     104    RefPtr<InspectorObject> condition = breakpoint->getObject("condition");
     105    if (!condition)
     106        return;
     107
     108    if (type == eventListenerBreakpointType) {
     109        if (!enabled)
     110            return;
     111        String eventName;
     112        if (!condition->getString("eventName", &eventName))
     113            return;
     114        setEventListenerBreakpoint(eventName);
     115    } else if (type == javaScriptBreakpointType && m_inspectorController->debuggerAgent()) {
     116        String url;
     117        if (!condition->getString("url", &url))
     118            return;
     119        double lineNumber;
     120        if (!condition->getNumber("lineNumber", &lineNumber))
     121            return;
     122        String javaScriptCondition;
     123        if (!condition->getString("condition", &javaScriptCondition))
     124            return;
     125        m_inspectorController->debuggerAgent()->setStickyBreakpoint(url, static_cast<unsigned>(lineNumber), javaScriptCondition, enabled);
     126    } else if (type == xhrBreakpointType) {
     127        if (!enabled)
     128            return;
     129        String url;
     130        if (!condition->getString("url", &url))
     131            return;
     132        setXHRBreakpoint(url);
     133    }
     134}
     135
    74136void InspectorBrowserDebuggerAgent::discardBindings()
    75137{
    76     m_breakpoints.clear();
     138    m_domBreakpoints.clear();
    77139}
    78140
     
    89151void InspectorBrowserDebuggerAgent::didInsertDOMNode(Node* node)
    90152{
    91     if (m_breakpoints.size()) {
    92         uint32_t mask = m_breakpoints.get(InspectorDOMAgent::innerParentNode(node));
     153    if (m_domBreakpoints.size()) {
     154        uint32_t mask = m_domBreakpoints.get(InspectorDOMAgent::innerParentNode(node));
    93155        uint32_t inheritableTypesMask = (mask | (mask >> domBreakpointDerivedTypeShift)) & inheritableDOMBreakpointTypesMask;
    94156        if (inheritableTypesMask)
     
    99161void InspectorBrowserDebuggerAgent::didRemoveDOMNode(Node* node)
    100162{
    101     if (m_breakpoints.size()) {
     163    if (m_domBreakpoints.size()) {
    102164        // Remove subtree breakpoints.
    103         m_breakpoints.remove(node);
     165        m_domBreakpoints.remove(node);
    104166        Vector<Node*> stack(1, InspectorDOMAgent::innerFirstChild(node));
    105167        do {
     
    108170            if (!node)
    109171                continue;
    110             m_breakpoints.remove(node);
     172            m_domBreakpoints.remove(node);
    111173            stack.append(InspectorDOMAgent::innerFirstChild(node));
    112174            stack.append(InspectorDOMAgent::innerNextSibling(node));
     
    122184
    123185    uint32_t rootBit = 1 << type;
    124     m_breakpoints.set(node, m_breakpoints.get(node) | rootBit);
     186    m_domBreakpoints.set(node, m_domBreakpoints.get(node) | rootBit);
    125187    if (rootBit & inheritableDOMBreakpointTypesMask) {
    126188        for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child))
     
    136198
    137199    uint32_t rootBit = 1 << type;
    138     uint32_t mask = m_breakpoints.get(node) & ~rootBit;
     200    uint32_t mask = m_domBreakpoints.get(node) & ~rootBit;
    139201    if (mask)
    140         m_breakpoints.set(node, mask);
    141     else
    142         m_breakpoints.remove(node);
     202        m_domBreakpoints.set(node, mask);
     203    else
     204        m_domBreakpoints.remove(node);
    143205
    144206    if ((rootBit & inheritableDOMBreakpointTypesMask) && !(mask & (rootBit << domBreakpointDerivedTypeShift))) {
     
    211273            breakpointOwner = InspectorDOMAgent::innerParentNode(target);
    212274        ASSERT(breakpointOwner);
    213         while (!(m_breakpoints.get(breakpointOwner) & (1 << breakpointType))) {
     275        while (!(m_domBreakpoints.get(breakpointOwner) & (1 << breakpointType))) {
    214276            breakpointOwner = InspectorDOMAgent::innerParentNode(breakpointOwner);
    215277            ASSERT(breakpointOwner);
     
    230292    uint32_t rootBit = 1 << type;
    231293    uint32_t derivedBit = rootBit << domBreakpointDerivedTypeShift;
    232     return m_breakpoints.get(node) & (rootBit | derivedBit);
     294    return m_domBreakpoints.get(node) & (rootBit | derivedBit);
    233295}
    234296
    235297void InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints(Node* node, uint32_t rootMask, bool set)
    236298{
    237     uint32_t oldMask = m_breakpoints.get(node);
     299    uint32_t oldMask = m_domBreakpoints.get(node);
    238300    uint32_t derivedMask = rootMask << domBreakpointDerivedTypeShift;
    239301    uint32_t newMask = set ? oldMask | derivedMask : oldMask & ~derivedMask;
    240302    if (newMask)
    241         m_breakpoints.set(node, newMask);
    242     else
    243         m_breakpoints.remove(node);
     303        m_domBreakpoints.set(node, newMask);
     304    else
     305        m_domBreakpoints.remove(node);
    244306
    245307    uint32_t newRootMask = rootMask & ~newMask;
     
    314376}
    315377
    316 void InspectorBrowserDebuggerAgent::clearForPageNavigation()
    317 {
    318     m_eventListenerBreakpoints.clear();
    319     m_XHRBreakpoints.clear();
    320     m_hasXHRBreakpointWithEmptyURL = false;
    321 }
    322 
    323378} // namespace WebCore
    324379
  • trunk/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h

    r76248 r76348  
    4747class InspectorController;
    4848class InspectorObject;
     49class KURL;
    4950class Node;
    5051
     
    5859
    5960    virtual ~InspectorBrowserDebuggerAgent();
     61
     62    void inspectedURLChanged(const KURL&);
    6063
    6164    // BrowserDebugger API for InspectorFrontend
     
    7679    void pauseOnNativeEventIfNeeded(const String& categoryType, const String& eventName, bool synchronous);
    7780
    78     void clearForPageNavigation();
    7981private:
    8082    InspectorBrowserDebuggerAgent(InspectorController*);
     83
     84    void restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint);
    8185
    8286    void descriptionForDOMEvent(Node* target, long breakpointType, bool insertion, InspectorObject* description);
     
    8690
    8791    InspectorController* m_inspectorController;
    88     HashMap<Node*, uint32_t> m_breakpoints;
     92    HashMap<Node*, uint32_t> m_domBreakpoints;
    8993    HashSet<String> m_eventListenerBreakpoints;
    9094    HashSet<String> m_XHRBreakpoints;
  • trunk/Source/WebCore/inspector/InspectorController.cpp

    r76344 r76348  
    223223        connectFrontend();
    224224        m_frontend->frontendReused();
    225         m_frontend->inspectedURLChanged(m_inspectedPage->mainFrame()->loader()->url().string());
     225        m_frontend->inspectedURLChanged(inspectedURL().string());
    226226        m_domAgent->setDocument(m_inspectedPage->mainFrame()->document());
    227227        pushDataCollectedOffline();
     
    400400
    401401    // Initialize Web Inspector title.
    402     m_frontend->inspectedURLChanged(m_inspectedPage->mainFrame()->loader()->url().string());
     402    m_frontend->inspectedURLChanged(inspectedURL().string());
    403403
    404404#if ENABLE(OFFLINE_WEB_APPLICATIONS)
     
    644644            m_debuggerAgent->clearForPageNavigation();
    645645            if (m_browserDebuggerAgent)
    646                 m_browserDebuggerAgent->clearForPageNavigation();
    647             restoreStickyBreakpoints();
     646                m_browserDebuggerAgent->inspectedURLChanged(inspectedURL());
    648647        }
    649648#endif
     
    10511050    m_debuggerAgent = InspectorDebuggerAgent::create(this, m_frontend.get());
    10521051    m_browserDebuggerAgent = InspectorBrowserDebuggerAgent::create(this);
    1053     restoreStickyBreakpoints();
     1052    m_browserDebuggerAgent->inspectedURLChanged(inspectedURL());
    10541053
    10551054    m_frontend->debuggerWasEnabled();
     
    10811080}
    10821081
    1083 void InspectorController::setStickyBreakpoints(PassRefPtr<InspectorObject> breakpoints)
    1084 {
    1085     m_state->setObject(InspectorState::stickyBreakpoints, breakpoints);
    1086 }
    1087 
    1088 void InspectorController::restoreStickyBreakpoints()
    1089 {
    1090     RefPtr<InspectorObject> allBreakpoints = m_state->getObject(InspectorState::stickyBreakpoints);
    1091     KURL url = m_inspectedPage->mainFrame()->loader()->url();
    1092     url.removeFragmentIdentifier();
    1093     RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(url);
    1094     if (!breakpoints)
    1095         return;
    1096     for (unsigned i = 0; i < breakpoints->length(); ++i)
    1097         restoreStickyBreakpoint(breakpoints->get(i)->asObject());
    1098 }
    1099 
    1100 void InspectorController::restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint)
    1101 {
    1102     DEFINE_STATIC_LOCAL(String, eventListenerBreakpointType, ("EventListener"));
    1103     DEFINE_STATIC_LOCAL(String, javaScriptBreakpointType, ("JS"));
    1104     DEFINE_STATIC_LOCAL(String, xhrBreakpointType, ("XHR"));
    1105 
    1106     if (!breakpoint)
    1107         return;
    1108     String type;
    1109     if (!breakpoint->getString("type", &type))
    1110         return;
    1111     bool enabled;
    1112     if (!breakpoint->getBoolean("enabled", &enabled))
    1113         return;
    1114     RefPtr<InspectorObject> condition = breakpoint->getObject("condition");
    1115     if (!condition)
    1116         return;
    1117 
    1118     if (type == eventListenerBreakpointType && m_browserDebuggerAgent) {
    1119         if (!enabled)
    1120             return;
    1121         String eventName;
    1122         if (!condition->getString("eventName", &eventName))
    1123             return;
    1124         m_browserDebuggerAgent->setEventListenerBreakpoint(eventName);
    1125     } else if (type == javaScriptBreakpointType && m_debuggerAgent) {
    1126         String url;
    1127         if (!condition->getString("url", &url))
    1128             return;
    1129         double lineNumber;
    1130         if (!condition->getNumber("lineNumber", &lineNumber))
    1131             return;
    1132         String javaScriptCondition;
    1133         if (!condition->getString("condition", &javaScriptCondition))
    1134             return;
    1135         m_debuggerAgent->setStickyBreakpoint(url, static_cast<unsigned>(lineNumber), javaScriptCondition, enabled);
    1136     } else if (type == xhrBreakpointType && m_browserDebuggerAgent) {
    1137         if (!enabled)
    1138             return;
    1139         String url;
    1140         if (!condition->getString("url", &url))
    1141             return;
    1142         m_browserDebuggerAgent->setXHRBreakpoint(url);
    1143     }
     1082void InspectorController::setAllBrowserBreakpoints(PassRefPtr<InspectorObject> breakpoints)
     1083{
     1084    m_state->setObject(InspectorState::browserBreakpoints, breakpoints);
    11441085}
    11451086#endif
     
    14421383}
    14431384
     1385KURL InspectorController::inspectedURL() const
     1386{
     1387    return m_inspectedPage->mainFrame()->loader()->url();
     1388}
     1389
    14441390void InspectorController::reloadPage()
    14451391{
  • trunk/Source/WebCore/inspector/InspectorController.h

    r76344 r76348  
    126126
    127127    Page* inspectedPage() const { return m_inspectedPage; }
     128    KURL inspectedURL() const;
    128129    void reloadPage();
    129130
     
    243244    void resume();
    244245
    245     void setStickyBreakpoints(PassRefPtr<InspectorObject> breakpoints);
     246    void setAllBrowserBreakpoints(PassRefPtr<InspectorObject>);
    246247#endif
    247248
     
    288289#if ENABLE(JAVASCRIPT_DEBUGGER)
    289290    void toggleRecordButton(bool);
    290     void restoreStickyBreakpoints();
    291     void restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint);
    292291#endif
    293292
  • trunk/Source/WebCore/inspector/InspectorState.cpp

    r76249 r76348  
    4343    registerBoolean(timelineProfilerEnabled, false);
    4444    registerBoolean(searchingForNode, false);
    45     registerObject(stickyBreakpoints);
     45    registerObject(browserBreakpoints);
    4646    registerBoolean(consoleMessagesEnabled, false);
    4747    registerBoolean(monitoringXHR, false);
  • trunk/Source/WebCore/inspector/InspectorState.h

    r76249 r76348  
    5050        consoleMessagesEnabled,
    5151        userInitiatedProfiling,
    52         stickyBreakpoints,
     52        browserBreakpoints,
    5353        resourceAgentEnabled,
    5454        lastPropertyId
  • trunk/Source/WebCore/inspector/front-end/BreakpointManager.js

    r74477 r76348  
    3535    for (var projectId in breakpoints)
    3636        this._stickyBreakpoints[projectId] = this._validateBreakpoints(breakpoints[projectId]);
    37     InspectorBackend.setStickyBreakpoints(this._stickyBreakpoints);
     37    InspectorBackend.setAllBrowserBreakpoints(this._stickyBreakpoints);
    3838
    3939    this._breakpoints = {};
     
    304304
    305305        this._stickyBreakpoints[WebInspector.settings.projectId] = breakpoints;
    306         InspectorBackend.setStickyBreakpoints(this._stickyBreakpoints);
     306        InspectorBackend.setAllBrowserBreakpoints(this._stickyBreakpoints);
    307307    },
    308308
Note: See TracChangeset for help on using the changeset viewer.