Changeset 76509 in webkit


Ignore:
Timestamp:
Jan 24, 2011 5:55:59 AM (13 years ago)
Author:
podivilov@chromium.org
Message:

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

Reviewed by Yury Semikhatsky.

Web Inspector: set breakpoints by line:column.
https://bugs.webkit.org/show_bug.cgi?id=52615

  • CMakeLists.txt:
  • GNUmakefile.am:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/ScriptDebugServer.cpp: (WebCore::ScriptDebugServer::setBreakpoint): (WebCore::ScriptDebugServer::removeBreakpoint): (WebCore::ScriptDebugServer::hasBreakpoint): (WebCore::ScriptDebugServer::clearBreakpoints):
  • bindings/js/ScriptDebugServer.h:
  • bindings/v8/DebuggerScript.js: ():
  • bindings/v8/ScriptDebugServer.cpp: (WebCore::ScriptDebugServer::setBreakpoint):
  • bindings/v8/ScriptDebugServer.h:
  • inspector/Inspector.idl:
  • inspector/InspectorBrowserDebuggerAgent.cpp: (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
  • inspector/InspectorDebuggerAgent.cpp: (WebCore::InspectorDebuggerAgent::setStickyBreakpoint): (WebCore::InspectorDebuggerAgent::setBreakpoint): (WebCore::InspectorDebuggerAgent::restoreBreakpoint): (WebCore::InspectorDebuggerAgent::didParseSource):
  • inspector/InspectorDebuggerAgent.h:
  • inspector/ScriptBreakpoint.cpp: Removed.
  • inspector/ScriptBreakpoint.h: (WebCore::ScriptBreakpoint::ScriptBreakpoint):
  • inspector/front-end/Breakpoint.js: (WebInspector.Breakpoint): (WebInspector.Breakpoint.prototype.get url):
  • inspector/front-end/BreakpointManager.js: (WebInspector.JavaScriptBreakpoint.prototype._serializeToJSON):
  • inspector/front-end/DebuggerModel.js: (WebInspector.DebuggerModel.prototype.continueToLine): (WebInspector.DebuggerModel.prototype.setBreakpoint): (WebInspector.DebuggerModel.prototype._breakpointSetOnBackend): (WebInspector.DebuggerDispatcher.prototype.breakpointResolved):
Location:
trunk/Source/WebCore
Files:
1 deleted
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r76467 r76509  
    11801180    inspector/InspectorValues.cpp
    11811181    inspector/ScriptArguments.cpp
    1182     inspector/ScriptBreakpoint.cpp
    11831182    inspector/ScriptCallFrame.cpp
    11841183    inspector/ScriptCallStack.cpp
  • trunk/Source/WebCore/ChangeLog

    r76505 r76509  
     12011-01-24  Pavel Podivilov  <podivilov@chromium.org>
     2
     3        Reviewed by Yury Semikhatsky.
     4
     5        Web Inspector: set breakpoints by line:column.
     6        https://bugs.webkit.org/show_bug.cgi?id=52615
     7
     8        * CMakeLists.txt:
     9        * GNUmakefile.am:
     10        * WebCore.gypi:
     11        * WebCore.pro:
     12        * WebCore.vcproj/WebCore.vcproj:
     13        * WebCore.xcodeproj/project.pbxproj:
     14        * bindings/js/ScriptDebugServer.cpp:
     15        (WebCore::ScriptDebugServer::setBreakpoint):
     16        (WebCore::ScriptDebugServer::removeBreakpoint):
     17        (WebCore::ScriptDebugServer::hasBreakpoint):
     18        (WebCore::ScriptDebugServer::clearBreakpoints):
     19        * bindings/js/ScriptDebugServer.h:
     20        * bindings/v8/DebuggerScript.js:
     21        ():
     22        * bindings/v8/ScriptDebugServer.cpp:
     23        (WebCore::ScriptDebugServer::setBreakpoint):
     24        * bindings/v8/ScriptDebugServer.h:
     25        * inspector/Inspector.idl:
     26        * inspector/InspectorBrowserDebuggerAgent.cpp:
     27        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
     28        * inspector/InspectorDebuggerAgent.cpp:
     29        (WebCore::InspectorDebuggerAgent::setStickyBreakpoint):
     30        (WebCore::InspectorDebuggerAgent::setBreakpoint):
     31        (WebCore::InspectorDebuggerAgent::restoreBreakpoint):
     32        (WebCore::InspectorDebuggerAgent::didParseSource):
     33        * inspector/InspectorDebuggerAgent.h:
     34        * inspector/ScriptBreakpoint.cpp: Removed.
     35        * inspector/ScriptBreakpoint.h:
     36        (WebCore::ScriptBreakpoint::ScriptBreakpoint):
     37        * inspector/front-end/Breakpoint.js:
     38        (WebInspector.Breakpoint):
     39        (WebInspector.Breakpoint.prototype.get url):
     40        * inspector/front-end/BreakpointManager.js:
     41        (WebInspector.JavaScriptBreakpoint.prototype._serializeToJSON):
     42        * inspector/front-end/DebuggerModel.js:
     43        (WebInspector.DebuggerModel.prototype.continueToLine):
     44        (WebInspector.DebuggerModel.prototype.setBreakpoint):
     45        (WebInspector.DebuggerModel.prototype._breakpointSetOnBackend):
     46        (WebInspector.DebuggerDispatcher.prototype.breakpointResolved):
     47
    1482011-01-24  Peter Beverloo  <peter@chromium.org>
    249
  • trunk/Source/WebCore/GNUmakefile.am

    r76493 r76509  
    20082008        Source/WebCore/inspector/ScriptArguments.cpp \
    20092009        Source/WebCore/inspector/ScriptArguments.h \
    2010         Source/WebCore/inspector/ScriptBreakpoint.cpp \
    20112010        Source/WebCore/inspector/ScriptBreakpoint.h \
    20122011        Source/WebCore/inspector/ScriptCallFrame.cpp \
  • trunk/Source/WebCore/WebCore.gypi

    r76497 r76509  
    20592059            'inspector/InspectorValues.h',
    20602060            'inspector/InspectorWorkerResource.h',
    2061             'inspector/ScriptBreakpoint.cpp',
    20622061            'inspector/ScriptBreakpoint.h',
    20632062            'inspector/ScriptArguments.cpp',
  • trunk/Source/WebCore/WebCore.pro

    r76496 r76509  
    10691069    inspector/InspectorValues.cpp \
    10701070    inspector/ScriptArguments.cpp \
    1071     inspector/ScriptBreakpoint.cpp \
    10721071    inspector/ScriptCallFrame.cpp \
    10731072    inspector/ScriptCallStack.cpp \
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r76497 r76509  
    6529965299                        </File>
    6530065300                        <File
    65301                                 RelativePath="..\inspector\ScriptBreakpoint.cpp"
    65302                                 >
    65303                         </File>
    65304                         <File
    6530565301                                RelativePath="..\inspector\ScriptBreakpoint.h"
    6530665302                                >
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r76493 r76509  
    648648                1CF6BE150E9BB4670025E1CD /* ObjCNodeFilterCondition.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CF6BE130E9BB4670025E1CD /* ObjCNodeFilterCondition.h */; };
    649649                1CFAE3230A6D6A3F0032593D /* libobjc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CFAE3220A6D6A3F0032593D /* libobjc.dylib */; };
    650                 200B190911C277D900DCCD3A /* ScriptBreakpoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 200B190811C277D900DCCD3A /* ScriptBreakpoint.cpp */; };
    651650                20D629261253690B00081543 /* InspectorInstrumentation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20D629241253690B00081543 /* InspectorInstrumentation.cpp */; };
    652651                20D629271253690B00081543 /* InspectorInstrumentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 20D629251253690B00081543 /* InspectorInstrumentation.h */; };
     
    69916990                1CF6BE130E9BB4670025E1CD /* ObjCNodeFilterCondition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjCNodeFilterCondition.h; sourceTree = "<group>"; };
    69926991                1CFAE3220A6D6A3F0032593D /* libobjc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libobjc.dylib; path = /usr/lib/libobjc.dylib; sourceTree = "<absolute>"; };
    6993                 200B190811C277D900DCCD3A /* ScriptBreakpoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptBreakpoint.cpp; sourceTree = "<group>"; };
    69946992                20D629241253690B00081543 /* InspectorInstrumentation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorInstrumentation.cpp; sourceTree = "<group>"; };
    69956993                20D629251253690B00081543 /* InspectorInstrumentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorInstrumentation.h; sourceTree = "<group>"; };
     
    1303613034                                F39BE95912673BF400E0A674 /* ScriptArguments.cpp */,
    1303713035                                F39BE95A12673BF400E0A674 /* ScriptArguments.h */,
    13038                                 200B190811C277D900DCCD3A /* ScriptBreakpoint.cpp */,
    1303913036                                7AFD4A8A1131C2760035B883 /* ScriptBreakpoint.h */,
    1304013037                                416E75CA0EDF90C700360E1D /* ScriptCallFrame.cpp */,
     
    2461724614                                A84D82C211D3474800972990 /* ScriptableDocumentParser.cpp in Sources */,
    2461824615                                F39BE95B12673BF400E0A674 /* ScriptArguments.cpp in Sources */,
    24619                                 200B190911C277D900DCCD3A /* ScriptBreakpoint.cpp in Sources */,
    2462024616                                41F1D2200EF35C2A00DA8753 /* ScriptCachedFrameData.cpp in Sources */,
    2462124617                                416E75CC0EDF90C700360E1D /* ScriptCallFrame.cpp in Sources */,
  • trunk/Source/WebCore/bindings/js/ScriptDebugServer.cpp

    r76129 r76509  
    139139}
    140140
    141 String ScriptDebugServer::setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, unsigned* actualLineNumber)
     141String ScriptDebugServer::setBreakpoint(const String& sourceID, const ScriptBreakpoint& scriptBreakpoint, long* actualLineNumber, long* actualColumnNumber)
    142142{
    143143    intptr_t sourceIDValue = sourceID.toIntPtr();
    144144    if (!sourceIDValue)
    145145        return "";
    146     BreakpointsMap::iterator it = m_breakpoints.find(sourceIDValue);
    147     if (it == m_breakpoints.end())
    148         it = m_breakpoints.set(sourceIDValue, SourceBreakpoints()).first;
    149     if (it->second.contains(lineNumber))
     146    SourceIdToBreakpointsMap::iterator it = m_sourceIdToBreakpoints.find(sourceIDValue);
     147    if (it == m_sourceIdToBreakpoints.end())
     148        it = m_sourceIdToBreakpoints.set(sourceIDValue, LineToBreakpointMap()).first;
     149    if (it->second.contains(scriptBreakpoint.lineNumber))
    150150        return "";
    151     it->second.set(lineNumber, ScriptBreakpoint(enabled, condition));
    152     *actualLineNumber = lineNumber;
    153     return makeString(sourceID, ":", String::number(lineNumber));
     151    it->second.set(scriptBreakpoint.lineNumber, scriptBreakpoint);
     152    *actualLineNumber = scriptBreakpoint.lineNumber;
     153    // FIXME(WK53003): implement setting breakpoints by line:column.
     154    *actualColumnNumber = 1;
     155    return makeString(sourceID, ":", String::number(scriptBreakpoint.lineNumber));
    154156}
    155157
     
    167169    if (!success)
    168170        return;
    169     BreakpointsMap::iterator it = m_breakpoints.find(sourceIDValue);
    170     if (it != m_breakpoints.end())
     171    SourceIdToBreakpointsMap::iterator it = m_sourceIdToBreakpoints.find(sourceIDValue);
     172    if (it != m_sourceIdToBreakpoints.end())
    171173        it->second.remove(lineNumber);
    172174}
     
    177179        return false;
    178180
    179     BreakpointsMap::const_iterator it = m_breakpoints.find(sourceID);
    180     if (it == m_breakpoints.end())
     181    SourceIdToBreakpointsMap::const_iterator it = m_sourceIdToBreakpoints.find(sourceID);
     182    if (it == m_sourceIdToBreakpoints.end())
    181183        return false;
    182     SourceBreakpoints::const_iterator breakIt = it->second.find(lineNumber);
     184    LineToBreakpointMap::const_iterator breakIt = it->second.find(lineNumber);
    183185    if (breakIt == it->second.end() || !breakIt->second.enabled)
    184186        return false;
     
    199201void ScriptDebugServer::clearBreakpoints()
    200202{
    201     m_breakpoints.clear();
     203    m_sourceIdToBreakpoints.clear();
    202204}
    203205
  • trunk/Source/WebCore/bindings/js/ScriptDebugServer.h

    r76248 r76509  
    6565    void removeListener(ScriptDebugListener*, Page*);
    6666
    67     String setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, unsigned* actualLineNumber);
     67    String setBreakpoint(const String& sourceID, const ScriptBreakpoint&, long* actualLineNumber, long* actualColumnNumber);
    6868    void removeBreakpoint(const String& breakpointId);
    6969    void clearBreakpoints();
     
    139139
    140140    typedef HashMap<Page*, ListenerSet*> PageListenersMap;
    141     typedef HashMap<intptr_t, SourceBreakpoints> BreakpointsMap;
     141    typedef HashMap<long, ScriptBreakpoint> LineToBreakpointMap;
     142    typedef HashMap<intptr_t, LineToBreakpointMap> SourceIdToBreakpointsMap;
    142143
    143144    PageListenersMap m_pageListenersMap;
     
    151152    JavaScriptCallFrame* m_pauseOnCallFrame;
    152153    RefPtr<JavaScriptCallFrame> m_currentCallFrame;
    153     BreakpointsMap m_breakpoints;
     154    SourceIdToBreakpointsMap m_sourceIdToScriptBreakpoints;
    154155    Timer<ScriptDebugServer> m_recompileTimer;
    155156};
  • trunk/Source/WebCore/bindings/v8/DebuggerScript.js

    r76013 r76509  
    9292DebuggerScript.setBreakpoint = function(execState, args)
    9393{
    94     args.lineNumber = DebuggerScript._webkitToV8LineNumber(args.lineNumber);
    95     var breakId = Debug.setScriptBreakPointById(args.scriptId, args.lineNumber, 0 /* column */, args.condition);
     94    var lineNumber = DebuggerScript._webkitToV8LineNumber(args.lineNumber);
     95    var columnNumber = DebuggerScript._webkitToV8LineNumber(args.columnNumber);
     96    var breakId = Debug.setScriptBreakPointById(args.scriptId, lineNumber, columnNumber, args.condition);
    9697    if (!args.enabled)
    9798        Debug.disableScriptBreakPoint(breakId);
     
    101102        return undefined;
    102103    args.lineNumber = DebuggerScript._v8ToWebkitLineNumber(locations[0].line);
     104    args.columnNumber = DebuggerScript._v8ToWebkitLineNumber(locations[0].column);
    103105    return breakId.toString();
    104106}
  • trunk/Source/WebCore/bindings/v8/ScriptDebugServer.cpp

    r75794 r76509  
    144144}
    145145
    146 String ScriptDebugServer::setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, unsigned* actualLineNumber)
     146String ScriptDebugServer::setBreakpoint(const String& sourceID, const ScriptBreakpoint& scriptBreakpoint, long* actualLineNumber, long* actualColumnNumber)
    147147{
    148148    v8::HandleScope scope;
     
    152152    v8::Local<v8::Object> args = v8::Object::New();
    153153    args->Set(v8::String::New("scriptId"), v8String(sourceID));
    154     args->Set(v8::String::New("lineNumber"), v8::Integer::New(lineNumber));
    155     args->Set(v8::String::New("condition"), v8String(condition));
    156     args->Set(v8::String::New("enabled"), v8::Boolean::New(enabled));
     154    args->Set(v8::String::New("lineNumber"), v8::Integer::New(scriptBreakpoint.lineNumber));
     155    args->Set(v8::String::New("columnNumber"), v8::Integer::New(scriptBreakpoint.columnNumber));
     156    args->Set(v8::String::New("condition"), v8String(scriptBreakpoint.condition));
     157    args->Set(v8::String::New("enabled"), v8::Boolean::New(scriptBreakpoint.enabled));
    157158
    158159    v8::Handle<v8::Function> setBreakpointFunction = v8::Local<v8::Function>::Cast(m_debuggerScript.get()->Get(v8::String::New("setBreakpoint")));
     
    161162        return "";
    162163    *actualLineNumber = args->Get(v8::String::New("lineNumber"))->Int32Value();
     164    *actualColumnNumber = args->Get(v8::String::New("columnNumber"))->Int32Value();
    163165    return v8StringToWebCoreString(breakpointId->ToString());
    164166}
  • trunk/Source/WebCore/bindings/v8/ScriptDebugServer.h

    r76248 r76509  
    5757    void removeListener(ScriptDebugListener*, Page*);
    5858
    59     String setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, unsigned* actualLineNumber);
     59    String setBreakpoint(const String& sourceID, const ScriptBreakpoint&, long* actualLineNumber, long* actualColumnNumber);
    6060    void removeBreakpoint(const String& breakpointId);
    6161    void clearBreakpoints();
  • trunk/Source/WebCore/inspector/Inspector.idl

    r76460 r76509  
    254254        [domain=Debugger] void deactivateBreakpoints();
    255255
    256         [domain=Debugger] void setBreakpoint(in String sourceID, in unsigned int lineNumber, in String condition, in boolean enabled, out String breakpointId, out unsigned int actualLineNumber);
     256        [domain=Debugger] void setBreakpoint(in Object breakpoint, out String breakpointId, out long actualLineNumber, out long actualColumnNumber);
    257257        [domain=Debugger] void removeBreakpoint(in String breakpointId);
    258258
     
    280280        [domain=Debugger] void getCompletionsOnCallFrame(in Object callFrameId, in String expression, in boolean includeInspectorCommandLineAPI, out Value result);
    281281
    282         [notify, domain=Debugger] void breakpointResolved(out String breakpointId, out String sourceID, out unsigned int lineNumber, out String condition, out boolean enabled, out unsigned int originalLineNumber);
     282        [notify, domain=Debugger] void breakpointResolved(out String breakpointId, out Object breakpoint);
    283283
    284284#if defined(ENABLE_WORKERS) && ENABLE_WORKERS
  • trunk/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp

    r76459 r76509  
    120120        if (!condition->getNumber("lineNumber", &lineNumber))
    121121            return;
     122        double columnNumber;
     123        if (!condition->getNumber("columnNumber", &columnNumber))
     124            return;
    122125        String javaScriptCondition;
    123126        if (!condition->getString("condition", &javaScriptCondition))
    124127            return;
    125         m_inspectorAgent->debuggerAgent()->setStickyBreakpoint(url, static_cast<unsigned>(lineNumber), javaScriptCondition, enabled);
     128        m_inspectorAgent->debuggerAgent()->setStickyBreakpoint(url, ScriptBreakpoint(long(lineNumber), long(columnNumber), javaScriptCondition, enabled));
    126129    } else if (type == xhrBreakpointType) {
    127130        if (!enabled)
  • trunk/Source/WebCore/inspector/InspectorDebuggerAgent.cpp

    r76459 r76509  
    8080}
    8181
    82 void InspectorDebuggerAgent::setStickyBreakpoint(const String& url, unsigned lineNumber, const String& condition, bool enabled)
    83 {
    84     HashMap<String, ScriptBreakpoints>::iterator it = m_stickyBreakpoints.find(url);
     82void InspectorDebuggerAgent::setStickyBreakpoint(const String& url, const ScriptBreakpoint& breakpoint)
     83{
     84    InspectedURLToBreakpointsMap::iterator it = m_stickyBreakpoints.find(url);
    8585    if (it == m_stickyBreakpoints.end())
    86         it = m_stickyBreakpoints.set(url, ScriptBreakpoints()).first;
    87     it->second.set(lineNumber, Breakpoint(condition, enabled));
     86        it = m_stickyBreakpoints.set(url, LocationToBreakpointMap()).first;
     87    it->second.set(Location(breakpoint.lineNumber, breakpoint.columnNumber), breakpoint);
    8888
    8989    URLToSourceIDsMap::iterator urlToSourceIDsIterator = m_urlToSourceIDs.find(url);
     
    9292    const Vector<String>& sourceIDs = urlToSourceIDsIterator->second;
    9393    for (size_t i = 0; i < sourceIDs.size(); ++i)
    94         restoreBreakpoint(sourceIDs[i], lineNumber, condition, enabled);
    95 }
    96 
    97 void InspectorDebuggerAgent::setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, String* breakpointId, unsigned int* actualLineNumber)
    98 {
    99     *breakpointId = ScriptDebugServer::shared().setBreakpoint(sourceID, lineNumber, condition, enabled, actualLineNumber);
     94        restoreBreakpoint(sourceIDs[i], breakpoint);
     95}
     96
     97void InspectorDebuggerAgent::setBreakpoint(PassRefPtr<InspectorObject> breakpoint, String* breakpointId, long* actualLineNumber, long* actualColumnNumber)
     98{
     99    String sourceID;
     100    if (!breakpoint->getString("sourceID", &sourceID))
     101        return;
     102    double lineNumber;
     103    if (!breakpoint->getNumber("lineNumber", &lineNumber))
     104        return;
     105    double columnNumber;
     106    if (!breakpoint->getNumber("columnNumber", &columnNumber))
     107        return;
     108    String condition;
     109    if (!breakpoint->getString("condition", &condition))
     110        return;
     111    bool enabled;
     112    if (!breakpoint->getBoolean("enabled", &enabled))
     113        return;
     114    ScriptBreakpoint scriptBreakpoint(lineNumber, columnNumber, condition, enabled);
     115    *breakpointId = ScriptDebugServer::shared().setBreakpoint(sourceID, scriptBreakpoint, actualLineNumber, actualColumnNumber);
    100116}
    101117
     
    105121}
    106122
    107 void InspectorDebuggerAgent::restoreBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled)
    108 {
    109     unsigned actualLineNumber = 0;
    110     String breakpointId = ScriptDebugServer::shared().setBreakpoint(sourceID, lineNumber, condition, enabled, &actualLineNumber);
    111     if (!breakpointId.isEmpty())
    112         m_frontend->breakpointResolved(breakpointId, sourceID, actualLineNumber, condition, enabled, lineNumber);
     123void InspectorDebuggerAgent::restoreBreakpoint(const String& sourceID, const ScriptBreakpoint& breakpoint)
     124{
     125    long actualLineNumber = 0, actualColumnNumber = 0;
     126    String breakpointId = ScriptDebugServer::shared().setBreakpoint(sourceID, breakpoint, &actualLineNumber, &actualColumnNumber);
     127    if (breakpointId.isEmpty())
     128        return;
     129    RefPtr<InspectorObject> breakpointData = InspectorObject::create();
     130    breakpointData->setString("id", breakpointId);
     131    breakpointData->setString("sourceID", sourceID);
     132    breakpointData->setNumber("lineNumber", actualLineNumber);
     133    breakpointData->setNumber("columnNumber", actualColumnNumber);
     134    breakpointData->setString("condition", breakpoint.condition);
     135    breakpointData->setBoolean("enabled", breakpoint.enabled);
     136    breakpointData->setNumber("originalLineNumber", breakpoint.lineNumber);
     137    breakpointData->setNumber("originalColumnNumber", breakpoint.columnNumber);
     138    m_frontend->breakpointResolved(breakpointId, breakpointData);
    113139}
    114140
     
    224250    urlToSourceIDsIterator->second.append(sourceID);
    225251
    226     HashMap<String, ScriptBreakpoints>::iterator stickyBreakpointsIterator = m_stickyBreakpoints.find(url);
     252    InspectedURLToBreakpointsMap::iterator stickyBreakpointsIterator = m_stickyBreakpoints.find(url);
    227253    if (stickyBreakpointsIterator == m_stickyBreakpoints.end())
    228254        return;
    229255
    230     const ScriptBreakpoints& breakpoints = stickyBreakpointsIterator->second;
    231     for (ScriptBreakpoints::const_iterator it = breakpoints.begin(); it != breakpoints.end(); ++it) {
    232         const Breakpoint& breakpoint = it->second;
    233         restoreBreakpoint(sourceID, it->first, breakpoint.first, breakpoint.second);
    234     }
     256    const LocationToBreakpointMap& breakpoints = stickyBreakpointsIterator->second;
     257    for (LocationToBreakpointMap::const_iterator it = breakpoints.begin(); it != breakpoints.end(); ++it)
     258        restoreBreakpoint(sourceID, it->second);
    235259}
    236260
  • trunk/Source/WebCore/inspector/InspectorDebuggerAgent.h

    r76459 r76509  
    3333#if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR)
    3434#include "InjectedScript.h"
     35#include "ScriptBreakpoint.h"
    3536#include "ScriptDebugListener.h"
    3637#include "ScriptState.h"
     
    6566    void activateBreakpoints();
    6667    void deactivateBreakpoints();
    67     void setStickyBreakpoint(const String& url, unsigned lineNumber, const String& condition, bool enabled);
    68     void setBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled, String* breakpointId, unsigned int* actualLineNumber);
     68    void setStickyBreakpoint(const String& url, const WebCore::ScriptBreakpoint&);
     69    void setBreakpoint(PassRefPtr<InspectorObject> breakpoint, String* breakpointId, long* actualLineNumber, long* actualColumnNumber);
    6970    void removeBreakpoint(const String& breakpointId);
    7071    void editScriptSource(const String& sourceID, const String& newContent, bool* success, String* result, RefPtr<InspectorValue>* newCallFrames);
     
    9495    virtual void didContinue();
    9596
    96     void restoreBreakpoint(const String& sourceID, unsigned lineNumber, const String& condition, bool enabled);
     97    void restoreBreakpoint(const String& sourceID, const ScriptBreakpoint&);
     98
     99    typedef HashMap<String, Vector<String> > URLToSourceIDsMap;
     100    typedef std::pair<long, long> Location;
     101    typedef HashMap<Location, ScriptBreakpoint> LocationToBreakpointMap;
     102    typedef HashMap<String, LocationToBreakpointMap> InspectedURLToBreakpointsMap;
    97103
    98104    InspectorAgent* m_inspectorAgent;
     
    100106    ScriptState* m_pausedScriptState;
    101107    HashMap<String, String> m_scriptIDToContent;
    102     typedef HashMap<String, Vector<String> > URLToSourceIDsMap;
    103108    URLToSourceIDsMap m_urlToSourceIDs;
    104     typedef std::pair<String, bool> Breakpoint;
    105     typedef HashMap<unsigned, Breakpoint> ScriptBreakpoints;
    106     HashMap<String, ScriptBreakpoints> m_stickyBreakpoints;
     109    InspectedURLToBreakpointsMap m_stickyBreakpoints;
    107110    RefPtr<InspectorObject> m_breakProgramDetails;
    108111    bool m_javaScriptPauseScheduled;
  • trunk/Source/WebCore/inspector/ScriptBreakpoint.h

    r72666 r76509  
    3232
    3333#include "PlatformString.h"
    34 #include <wtf/HashMap.h>
    3534
    3635namespace WebCore {
    3736
    38 class InspectorObject;
    39 struct ScriptBreakpoint;
    40 
    41 typedef HashMap<int, ScriptBreakpoint> SourceBreakpoints;
    42 
    4337struct ScriptBreakpoint {
    44     ScriptBreakpoint(bool enabled, const String& condition)
    45         : enabled(enabled)
     38    ScriptBreakpoint(long lineNumber, long columnNumber, const String& condition, bool enabled)
     39        : lineNumber(lineNumber)
     40        , columnNumber(columnNumber)
    4641        , condition(condition)
     42        , enabled(enabled)
    4743    {
    4844    }
     
    5248    }
    5349
     50    long lineNumber;
     51    long columnNumber;
     52    String condition;
    5453    bool enabled;
    55     String condition;
    56 
    57 #if ENABLE(INSPECTOR)
    58     static void sourceBreakpointsFromInspectorObject(PassRefPtr<InspectorObject>, SourceBreakpoints*);
    59     static PassRefPtr<InspectorObject> inspectorObjectFromSourceBreakpoints(const SourceBreakpoints&);
    60 #endif
    6154};
    6255
  • trunk/Source/WebCore/inspector/front-end/Breakpoint.js

    r76239 r76509  
    3030 */
    3131
    32 WebInspector.Breakpoint = function(debuggerModel, breakpointId, sourceID, url, line, enabled, condition)
     32WebInspector.Breakpoint = function(debuggerModel, breakpointId, data)
    3333{
    3434    this.id = breakpointId;
    35     this.url = url;
    36     this.line = line;
    37     this.sourceID = sourceID;
    38     this._enabled = enabled;
    39     this._condition = condition || "";
     35    this.sourceID = data.sourceID;
     36    this.line = data.lineNumber;
     37    this.column = data.columnNumber;
     38    this._condition = data.condition;
     39    this._enabled = data.enabled;
    4040    this._debuggerModel = debuggerModel;
    4141}
     
    6060    },
    6161
     62    get url()
     63    {
     64        if (!this._url)
     65            this._url = this._debuggerModel.scriptForSourceID(this.sourceID).sourceURL;
     66        return this._url;
     67    },
     68
    6269    get data()
    6370    {
  • trunk/Source/WebCore/inspector/front-end/BreakpointManager.js

    r76348 r76509  
    409409    {
    410410        var type = WebInspector.BreakpointManager.BreakpointTypes.JS;
    411         return { type: type, condition: { url: this._url, lineNumber: this._lineNumber, condition: this._condition } };
     411        return { type: type, condition: { url: this._url, lineNumber: this._lineNumber, columnNumber: 1, condition: this._condition } };
    412412    }
    413413}
  • trunk/Source/WebCore/inspector/front-end/DebuggerModel.js

    r76341 r76509  
    6565            this._continueToLineBreakpointId = breakpointId;
    6666        }
    67         InspectorBackend.setBreakpoint(sourceID, lineNumber, "", true, didSetBreakpoint.bind(this));
     67        var breakpoint = { sourceID: sourceID, lineNumber: lineNumber, columnNumber: 1, condition: "", enabled: true };
     68        InspectorBackend.setBreakpoint(breakpoint, didSetBreakpoint.bind(this));
    6869        if (this._paused)
    6970            InspectorBackend.resume();
     
    7273    setBreakpoint: function(sourceID, lineNumber, enabled, condition)
    7374    {
    74         function didSetBreakpoint(breakpointId, actualLineNumber)
     75        function didSetBreakpoint(breakpointId, actualLineNumber, actualColumnNumber)
    7576        {
    76             if (breakpointId)
    77                 this._breakpointSetOnBackend(breakpointId, sourceID, actualLineNumber, condition, enabled, lineNumber, false);
    78         }
    79         InspectorBackend.setBreakpoint(sourceID, lineNumber, condition, enabled, didSetBreakpoint.bind(this));
     77            if (!breakpointId)
     78                return;
     79            breakpoint.originalLineNumber = breakpoint.lineNumber;
     80            breakpoint.originalColumnumber = breakpoint.columnNumber;
     81            breakpoint.lineNumber = actualLineNumber;
     82            breakpoint.columnNumber = actualColumnNumber;
     83            this._breakpointSetOnBackend(breakpointId, breakpoint, false);
     84        }
     85        var breakpoint = { sourceID: sourceID, lineNumber: lineNumber, columnNumber: 1, condition: condition, enabled: enabled };
     86        InspectorBackend.setBreakpoint(breakpoint, didSetBreakpoint.bind(this));
    8087    },
    8188
     
    9097    },
    9198
    92     _breakpointSetOnBackend: function(breakpointId, sourceID, lineNumber, condition, enabled, originalLineNumber, restored)
    93     {
    94         var sourceIDAndLine = this._encodeSourceIDAndLine(sourceID, lineNumber);
     99    _breakpointSetOnBackend: function(breakpointId, breakpointData, restored)
     100    {
     101        var sourceIDAndLine = this._encodeSourceIDAndLine(breakpointData.sourceID, breakpointData.lineNumber);
    95102        if (sourceIDAndLine in this._sourceIDAndLineToBreakpointId) {
    96103            InspectorBackend.removeBreakpoint(breakpointId);
     
    98105        }
    99106
    100         var url = this._scripts[sourceID].sourceURL;
    101         var breakpoint = new WebInspector.Breakpoint(this, breakpointId, sourceID, url, lineNumber, enabled, condition);
     107        var breakpoint = new WebInspector.Breakpoint(this, breakpointId, breakpointData);
    102108        breakpoint.restored = restored;
    103         breakpoint.originalLineNumber = originalLineNumber;
     109        breakpoint.originalLineNumber = breakpointData.originalLineNumber;
    104110        this._breakpoints[breakpointId] = breakpoint;
    105111        this._sourceIDAndLineToBreakpointId[sourceIDAndLine] = breakpointId;
     
    296302    },
    297303
    298     breakpointResolved: function(breakpointId, sourceID, lineNumber, condition, enabled, originalLineNumber)
    299     {
    300         this._debuggerModel._breakpointSetOnBackend(breakpointId, sourceID, lineNumber, condition, enabled, originalLineNumber, true);
     304    breakpointResolved: function(breakpointId, breakpoint)
     305    {
     306        this._debuggerModel._breakpointSetOnBackend(breakpointId, breakpoint, true);
    301307    },
    302308
Note: See TracChangeset for help on using the changeset viewer.